@kenz1117/dsh-ui-usage-billing 1.1.5 → 1.1.6
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/README.en.md +10 -0
- package/README.md +1 -1
- package/lib/client.js +1 -1
- package/lib/index.js +140 -299
- package/lib/types/aggregate.d.ts +1 -1
- package/lib/types/client/heatmap.d.ts +1 -1
- package/lib/types/client/round-chart.d.ts +1 -1
- package/package.json +10 -8
package/README.en.md
CHANGED
|
@@ -212,6 +212,16 @@ npm publish --access public
|
|
|
212
212
|
|
|
213
213
|
The host discovers the browser side automatically via the `dsh.client` declaration (`platform: web`) and the `exports["./client"]` bundle in `package.json` — no registry registration needed.
|
|
214
214
|
|
|
215
|
+
## 🔐 Permissions & Compatibility (DSH STORE)
|
|
216
|
+
|
|
217
|
+
- **Permission level: high**: reads durable session logs (files), calls official multi-vendor / subscription / balance / pricing APIs (network), reads `apiKeyEnv` via the credentials seam (credentials), writes the ledger under `~/.dsh` (persistent state); **no** command execution / shell.
|
|
218
|
+
- **Update channel: `user-reviewed`**: with file / network / credential capabilities, DSH STORE requires local manual confirmation on every install; review the repo, pinned commit, lifecycle scripts, and impact scope before installing.
|
|
219
|
+
- **Compatibility**: this is the stable line (npm `stable`, 1.1.x), targeting DSH `0.1.0-rc.8` ~ `0.1.1-rc.2` (`dsh.compatibility` carries a SemVer range capped at `<0.1.2-0`, so 0.1.2-generation hosts are excluded); 0.1.2 hosts should use the preview line (npm `latest`, 1.0.x). The two-line mapping and monitoring mechanism are documented in [COMPATIBILITY.md](COMPATIBILITY.md). Node.js `^22.19.0 || >=24.0.0`.
|
|
220
|
+
- **Lifecycle**: no `preinstall` / `install` / `postinstall` / `prepare` (ready on install).
|
|
221
|
+
- **No impersonation**: adds only its own entry id `ui-usage-billing`; `@deepseek-ai/dsh-*` packages are `peerDependencies` only (no reinstall / replace / shadowing of official components); the package uses the third-party namespace `@kenz1117/*`.
|
|
222
|
+
- **Build artifacts**: runtime files `lib/*` and `cordis.patch.yml` are committed at the pinned commit and declared in `files`.
|
|
223
|
+
- **Source anchor**: sources are locked to a pinned commit on the GitHub default branch and traceable. DSH STORE automation re-reads the default-branch HEAD roughly every 8 hours as the new pinned commit and decides re-review by SemVer change.
|
|
224
|
+
|
|
215
225
|
## 🤖 Model Experience
|
|
216
226
|
|
|
217
227
|
None. This plugin is a pure UI surface: it registers no tools, injects no system prompt, writes no model-visible events to the session log, and touches no session KV cache; usage statistics are aggregated by the server from existing session logs, whose content is owned by other packages.
|
package/README.md
CHANGED
|
@@ -235,7 +235,7 @@ npm publish --access public
|
|
|
235
235
|
|
|
236
236
|
- **权限等级:high**:读取持久会话日志(文件)、访问多厂商官方 / 订阅 / 余额 / 定价 API(网络)、经凭据 seam 读取 `apiKeyEnv`(凭据)、写入 `~/.dsh` 账本(持久状态);**不含**命令执行 / Shell。
|
|
237
237
|
- **更新通道:`user-reviewed`**:本插件具备文件 / 网络 / 凭据能力,DSH STORE 采用每次安装需本机人工确认的通道;安装前请复核仓库、固定 Commit、生命周期脚本与影响范围。
|
|
238
|
-
-
|
|
238
|
+
- **兼容范围**:本线为稳定线(npm `stable`,1.1.x),适配 DSH `0.1.0-rc.8` ~ `0.1.1-rc.2`(`dsh.compatibility` 含 SemVer 区间 `<0.1.2-0` 封顶,0.1.2 系宿主会被区间排除);0.1.2 系宿主请用预览线(npm `latest`,1.0.x)。双线对照与监控机制见 [COMPATIBILITY.md](COMPATIBILITY.md)。Node.js `^22.19.0 || >=24.0.0`。
|
|
239
239
|
- **生命周期**:无 `preinstall` / `install` / `postinstall` / `prepare`(安装即用)。
|
|
240
240
|
- **不冒用官方**:仅新增自有 entry id `ui-usage-billing`;对 `@deepseek-ai/dsh-*` 仅为 `peerDependencies` 依赖(不重复安装 / 不替换 / 不遮蔽官方组件),包名使用第三方命名空间 `@kenz1117/*`。
|
|
241
241
|
- **打包产物**:运行文件 `lib/*` 与 `cordis.patch.yml` 已随固定 Commit 提交并声明在 `files`。
|
package/lib/client.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
window.__ModuleLoader__.load({id:`@kenz1117/dsh-ui-usage-billing`,factory:e=>{var t={exports:{}},n=t.exports;Object.defineProperty(n,Symbol.toStringTag,{value:`Module`});let r=e("react"),i=e("@deepseek-ai/dsh-client-ui-primitives"),a=e("react/jsx-runtime"),o=e("@deepseek-ai/dsh-client-runtime/client");function s(e){var t,n,r=``;if(typeof e==`string`||typeof e==`number`)r+=e;else if(typeof e==`object`){if(Array.isArray(e)){var i=e.length;for(t=0;t<i;t++)e[t]&&(n=s(e[t]))&&(r&&(r+=` `),r+=n)}else for(n in e)e[n]&&(r&&(r+=` `),r+=n)}return r}function c(){for(var e,t,n=0,r=``,i=arguments.length;n<i;n++)(e=arguments[n])&&(t=s(e))&&(r&&(r+=` `),r+=t);return r}let l={mode:`combined`,targets:[]},u=`dsh.ui-usage-billing.float`;function d(){try{let e=localStorage.getItem(u);if(e===null)return{...l,targets:[...l.targets]};let t=JSON.parse(e);return{mode:t.mode===`subscription`?`subscription`:`combined`,targets:Array.isArray(t.targets)?t.targets.filter(e=>typeof e==`string`):[]}}catch{return{...l,targets:[...l.targets]}}}function f(e){try{localStorage.setItem(u,JSON.stringify(e))}catch{}}let p={metric:`money`},m=`dsh.ui-usage-billing.card`;function h(){try{let e=localStorage.getItem(m);return e===null?{...p}:{metric:JSON.parse(e).metric===`tokens`?`tokens`:`money`}}catch{return{...p}}}function g(e){try{localStorage.setItem(m,JSON.stringify(e))}catch{}}let _={hideUnidentified:!0},v=`dsh.ui-usage-billing.sites`;function y(){try{let e=localStorage.getItem(v);return e===null?{..._}:{hideUnidentified:JSON.parse(e).hideUnidentified!==!1}}catch{return{..._}}}function ee(e){try{localStorage.setItem(v,JSON.stringify(e))}catch{}}let te=`dsh.ui-usage-billing.prices`;function b(){try{let e=localStorage.getItem(te);if(e===null)return[];let t=JSON.parse(e);if(t===null)return[];let n=[],r=(e,t)=>{if(typeof t!=`object`||!t)return;let r=t,i=Number(r.input),a=Number(r.cacheHit),o=Number(r.output);[i,a,o].every(e=>Number.isFinite(e)&&e>=0)&&n.push({key:e,...typeof r.origin==`string`&&r.origin!==``?{origin:r.origin}:{},input:i,cacheHit:a,output:o,...r.currency===`USD`?{currency:`USD`}:{}})};if(Array.isArray(t))for(let e of t){if(typeof e!=`object`||!e)continue;let t=e;typeof t.key==`string`&&t.key!==``&&r(t.key,e)}else if(typeof t==`object`)for(let[e,n]of Object.entries(t))r(e,n);return n}catch{return[]}}function x(e){try{localStorage.setItem(te,JSON.stringify(e))}catch{}}let S=`@kenz1117/dsh-ui-usage-billing/UsageBilling.module.css`;if(typeof document<`u`&&document.querySelector(`style[data-plugin-css=`+JSON.stringify(S)+`]`)===null){let e=document.createElement(`style`);e.dataset.plugin=`@kenz1117/dsh-ui-usage-billing`,e.dataset.pluginCss=S,e.textContent=`.KFXqYa_railButton{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);width:36px;height:36px;color:var(--dsw-alias-label-secondary);cursor:pointer;border-radius:8px;flex:none;justify-content:center;align-items:center;padding:0;transition:border-color .16s,color .16s;display:flex}.KFXqYa_railButton:hover,.KFXqYa_railButton:focus-visible{border-color:var(--dsw-static-blue-500);color:var(--dsw-static-blue-500);outline:none}.KFXqYa_railButton svg{stroke-width:2px;width:18px;height:18px}.KFXqYa_trigger{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);width:100%;min-width:0;color:var(--dsw-alias-label-primary);cursor:pointer;text-align:left;border-radius:14px;align-items:center;gap:10px;padding:9px 12px;transition:border-color .16s,transform .16s,box-shadow .16s;display:flex;position:relative;overflow:hidden;box-shadow:0 1px 2px #0000000a}.KFXqYa_trigger:hover,.KFXqYa_trigger:focus-visible{border-color:var(--dsw-static-blue-500);box-shadow:0 6px 18px -8px color-mix(in srgb, var(--dsw-static-blue-500) 45%, transparent);outline:none;transform:translateY(-1px)}.KFXqYa_triggerIcon{border:1px solid var(--dsw-alias-border-l1);width:32px;height:32px;color:var(--dsw-alias-label-secondary);opacity:.8;border-radius:8px;flex:none;justify-content:center;align-items:center;display:inline-flex}.KFXqYa_triggerIcon svg{stroke-width:2px;width:16px;height:16px}.KFXqYa_triggerMain{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.KFXqYa_triggerPrimary{align-items:baseline;gap:5px;min-width:0;display:inline-flex}.KFXqYa_triggerLabel{color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:11px;line-height:15px;overflow:hidden}.KFXqYa_triggerYen{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;font-size:12px;font-weight:600;line-height:16px}.KFXqYa_triggerMetric{color:var(--dsw-alias-label-primary);letter-spacing:-.02em;font-variant-numeric:tabular-nums;white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:20px;font-weight:700;line-height:24px;overflow:hidden}.KFXqYa_triggerSub{color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;font-size:10px;line-height:14px;overflow:hidden}.KFXqYa_triggerSpark{flex:none;align-items:flex-end;gap:2px;height:20px;display:flex}.KFXqYa_triggerSparkBar,.KFXqYa_triggerSparkHot{background:var(--dsw-static-blue-500);opacity:.6;border-radius:1px 1px 0 0;width:3px}.KFXqYa_triggerSparkHot{opacity:1}.KFXqYa_triggerWrap{flex:auto;width:100%;min-width:0;display:block;position:relative;container:KFXqYa_billing-trigger/inline-size}@container KFXqYa_billing-trigger (width<=200px){.KFXqYa_trigger{gap:6px;padding:8px 10px}.KFXqYa_triggerSpark{display:none}}@container KFXqYa_billing-trigger (width<=170px){.KFXqYa_triggerSub,.KFXqYa_triggerLabel{display:none}}@container KFXqYa_billing-trigger (width<=110px){.KFXqYa_triggerIcon,.KFXqYa_triggerSpark,.KFXqYa_triggerSub,.KFXqYa_triggerLabel{display:none}.KFXqYa_trigger{justify-content:center;padding:8px 6px}}.KFXqYa_triggerPop{border:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 80%, transparent);background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 72%, transparent);-webkit-backdrop-filter:blur(14px)saturate(1.3);box-shadow:0 12px 32px #00000029, inset 0 1px 0 color-mix(in srgb, var(--dsw-alias-label-primary) 8%, transparent);opacity:0;pointer-events:none;z-index:10;border-radius:14px;flex-direction:column;gap:5px;padding:10px 12px;transition:opacity .16s,transform .16s;display:flex;position:absolute;bottom:calc(100% + 8px);left:0;right:0;overflow:hidden;transform:translateY(4px)}.KFXqYa_triggerPop:before{content:"";background:linear-gradient(90deg, transparent 0%, var(--dsw-static-amber-500) 30%, var(--dsw-alias-label-primary) 50%, var(--dsw-static-amber-500) 70%, transparent 100%);opacity:.9;pointer-events:none;background-size:200% 100%;height:1.5px;animation:4s ease-in-out infinite KFXqYa_subscriptionGoldFlow;position:absolute;top:0;left:0;right:0}.KFXqYa_triggerWrap:hover .KFXqYa_triggerPop,.KFXqYa_triggerWrap:focus-within .KFXqYa_triggerPop{opacity:1;transform:translateY(0)}.KFXqYa_popHead{justify-content:space-between;align-items:baseline;gap:8px;display:flex}.KFXqYa_popTitle{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:700;line-height:18px}.KFXqYa_metricGrid{grid-template-columns:repeat(3,1fr);gap:10px 8px;display:grid}.KFXqYa_metricCell{flex-direction:column;gap:2px;min-width:0;display:flex}.KFXqYa_metricLabel{color:var(--dsw-alias-label-tertiary);font-size:10px;line-height:14px}.KFXqYa_metricValue{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:12px;font-weight:700;line-height:16px}.KFXqYa_metricValuePrimary{color:var(--dsw-static-amber-500)}.KFXqYa_metricValueSuccess{color:var(--dsw-static-green-500)}.KFXqYa_popModel{border-top:1px solid var(--dsw-alias-border-l1);flex-direction:column;gap:6px;padding-top:10px;display:flex}.KFXqYa_popModelLabel{color:var(--dsw-alias-label-tertiary);font-size:10px;line-height:14px}.KFXqYa_popModelRow{align-items:center;gap:8px;min-width:0;display:flex}.KFXqYa_popDot{border-radius:999px;flex:none;width:6px;height:6px}.KFXqYa_popDotDirect{background:var(--dsw-static-green-500)}.KFXqYa_popDotSub{background:var(--dsw-static-amber-500)}.KFXqYa_popDotNeutral{background:var(--dsw-alias-label-tertiary)}.KFXqYa_popTagPrimary,.KFXqYa_popTagSub{white-space:nowrap;border-radius:5px;flex:none;align-items:center;height:18px;padding:0 6px;font-size:10px;font-weight:600;line-height:14px;display:inline-flex}.KFXqYa_popTagPrimary{background:color-mix(in srgb, var(--dsw-static-blue-500) 14%, transparent);color:var(--dsw-static-blue-500)}.KFXqYa_popTagSub{background:color-mix(in srgb, var(--dsw-static-amber-500) 18%, transparent);color:var(--dsw-static-amber-500)}.KFXqYa_popModelName{color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:500;line-height:16px;overflow:hidden}.KFXqYa_popModelStatus{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;white-space:nowrap;margin-left:auto;font-size:11px;font-weight:600;line-height:16px}.KFXqYa_popModelStatusLow{color:var(--dsw-static-red-500)}.KFXqYa_dashboardModal{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:16px;width:min(760px,100vw - 48px);max-height:min(760px,88vh);animation:.18s ease-out KFXqYa_dashboardIn;box-shadow:0 12px 32px -12px #0000002e,0 2px 8px #0000000f}@keyframes KFXqYa_dashboardIn{0%{opacity:0;transform:translateY(8px)scale(.98)}to{opacity:1;transform:none}}div[role=presentation]:has(>.dsh-billing-modal)>div[aria-hidden=true]:first-child{backdrop-filter:blur(8px)saturate(1.25)}.KFXqYa_dashboard{flex-direction:column;width:100%;max-height:min(760px,88vh);display:flex}.KFXqYa_dashboardHead{border-bottom:1px solid var(--dsw-alias-border-l1);justify-content:space-between;align-items:center;gap:12px;padding:12px 18px;display:flex}.KFXqYa_dashboardTitle{color:var(--dsw-alias-label-primary);margin:0;font-size:14px;font-weight:600;line-height:20px}.KFXqYa_dashboardSubtitle{color:var(--dsw-alias-label-caption);margin:2px 0 0;font-size:11px;line-height:16px}.KFXqYa_closeButton{border:1px solid var(--dsw-alias-border-l1);width:32px;height:32px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border-radius:8px;flex:none;justify-content:center;align-items:center;transition:background-color .14s,color .14s;display:inline-flex}.KFXqYa_closeButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.KFXqYa_closeButton svg{stroke-width:2px;width:16px;height:16px}.KFXqYa_dashboardBody{flex-direction:column;gap:14px;padding:16px 24px 24px;display:flex;overflow-y:auto}.KFXqYa_modalFooter{border-top:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-tertiary);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;padding:12px 24px;font-size:11px;line-height:16px;display:flex}.KFXqYa_tabNav{border-bottom:1px solid var(--dsw-alias-border-l1);align-items:center;gap:4px;padding:0 24px;display:flex}.KFXqYa_tabButton{color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:7px;padding:6px 14px;font-size:13px;font-weight:500;line-height:20px;transition:background-color .16s,color .16s}.KFXqYa_tabButton:hover,.KFXqYa_tabButton:focus-visible{color:var(--dsw-alias-label-primary);background:color-mix(in srgb, var(--dsw-alias-bg-layer-3) 62%, transparent);outline:none}.KFXqYa_tabButtonActive,.KFXqYa_tabButtonActive:hover,.KFXqYa_tabButtonActive:focus-visible{background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-primary);font-weight:600}.KFXqYa_tabPanel{flex-direction:column;gap:14px;animation:.14s ease-out KFXqYa_tabPanelIn;display:flex}@keyframes KFXqYa_tabPanelIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.KFXqYa_reconcileNotice{border:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 78%, transparent);background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 62%, transparent);color:var(--dsw-alias-label-secondary);border-radius:10px;align-items:flex-start;gap:10px;padding:10px 12px;font-size:12px;line-height:1.55;display:flex}.KFXqYa_reconcileIcon{color:var(--dsw-alias-label-tertiary);flex:none;margin-top:1px;display:inline-flex}.KFXqYa_reconcileText{flex:1}.KFXqYa_reconcileDismiss{color:var(--dsw-alias-label-tertiary);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:6px;flex:none;padding:2px 8px;font-size:12px;line-height:1.4;transition:color .15s,background-color .15s}.KFXqYa_reconcileDismiss:hover{color:var(--dsw-alias-label-primary);background:color-mix(in srgb, var(--dsw-alias-label-primary) 8%, transparent)}.KFXqYa_hero{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:12px;flex-direction:column;gap:18px;padding:24px;display:flex;position:relative;overflow:hidden}.KFXqYa_heroTop{justify-content:space-between;align-items:center;gap:24px;display:flex}.KFXqYa_heroMain{flex-direction:column;gap:2px;min-width:0;display:flex}.KFXqYa_heroLabel{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-size:11px;line-height:16px}.KFXqYa_heroReadout{align-items:baseline;gap:4px;display:flex}.KFXqYa_heroCurrency{letter-spacing:-.01em;color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;font-size:22px;font-weight:600;line-height:28px}.KFXqYa_heroValue{letter-spacing:-.02em;font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--dsw-alias-label-primary);font-size:40px;font-weight:700;line-height:48px}.KFXqYa_heroMeta{color:var(--dsw-alias-label-caption);white-space:nowrap;margin-top:2px;font-size:11px;line-height:15px}.KFXqYa_heroGauge{flex:none;width:96px;height:96px;position:relative}.KFXqYa_heroGaugeSvg{width:100%;height:100%;display:block;transform:rotate(-90deg)}.KFXqYa_heroGaugeTrack{fill:none;stroke:var(--dsw-alias-bg-module-platform);stroke-width:7px}.KFXqYa_heroGaugeArc{fill:none;stroke:var(--dsw-static-blue-500);stroke-width:7px;stroke-linecap:round;transition:stroke-dasharray .26s}.KFXqYa_heroGaugeArcOver{stroke:var(--dsw-static-red-500)}.KFXqYa_heroGaugeCenter{flex-direction:column;justify-content:center;align-items:center;gap:1px;display:flex;position:absolute;inset:0}.KFXqYa_heroGaugePct{letter-spacing:-.02em;font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-primary);font-size:14px;font-weight:700;line-height:18px}.KFXqYa_heroGaugePctOver{color:var(--dsw-static-red-500)}.KFXqYa_heroGaugeLabel{color:var(--dsw-alias-label-tertiary);font-size:9px;line-height:12px}.KFXqYa_heroBudget{border-top:1px solid var(--dsw-alias-border-l1);align-items:center;gap:14px;padding-top:14px;display:flex}.KFXqYa_heroBudgetLabel{color:var(--dsw-alias-label-secondary);white-space:nowrap;flex:none;font-size:11px;line-height:16px}.KFXqYa_heroBudgetTrack{background:var(--dsw-alias-border-l1);border-radius:999px;flex:1;min-width:0;height:6px;overflow:hidden}.KFXqYa_heroBudgetFill{background:var(--dsw-static-blue-500);border-radius:999px;height:100%;transition:width .22s}.KFXqYa_heroBudgetFillOver{background:var(--dsw-static-red-500)}.KFXqYa_heroBudgetValue{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;white-space:nowrap;flex:none;font-size:11px;line-height:16px}.KFXqYa_heroSide{border-top:1px solid var(--dsw-alias-border-l1);align-items:stretch;padding-top:14px;display:flex}.KFXqYa_heroSideItem{border-left:1px solid var(--dsw-alias-border-l1);flex-direction:column;flex:1;gap:2px;min-width:0;padding-left:14px;display:flex}.KFXqYa_heroSideItem:first-child{border-left:none;padding-left:0}.KFXqYa_heroSideLabel{color:var(--dsw-alias-label-tertiary);text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;font-size:10px;font-weight:500;line-height:13px}.KFXqYa_heroSideValue{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;letter-spacing:-.01em;white-space:nowrap;align-items:baseline;gap:6px;font-size:15px;font-weight:600;line-height:20px;display:inline-flex}.KFXqYa_heroSideSpacer{flex:1;display:block}.KFXqYa_delta{align-items:center;gap:2px;margin-left:4px;font-size:11px;font-weight:600;line-height:17px;display:inline-flex}.KFXqYa_deltaUp{color:var(--dsw-static-green-500);background:color-mix(in srgb, var(--dsw-static-green-500) 12%, transparent)}.KFXqYa_deltaDown{color:var(--dsw-static-red-500);background:color-mix(in srgb, var(--dsw-static-red-500) 12%, transparent)}.KFXqYa_unpricedHint{border:1px solid color-mix(in srgb, var(--dsw-static-amber-500) 30%, transparent);background:color-mix(in srgb, var(--dsw-static-amber-500) 8%, transparent);color:var(--dsw-static-amber-500);border-radius:8px;align-items:center;padding:8px 12px;font-size:11.5px;font-weight:500;line-height:17px;display:flex}.KFXqYa_kpiGrid{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;display:grid}.KFXqYa_kpiTile{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:10px;flex-direction:column;gap:2px;padding:10px 12px;transition:border-color .16s;display:flex;position:relative;overflow:hidden}.KFXqYa_kpiTile:hover{border-color:var(--dsw-alias-border-l2)}.KFXqYa_kpiLabel{color:var(--dsw-alias-label-tertiary);text-transform:uppercase;letter-spacing:.06em;font-size:10px;font-weight:500;line-height:13px}.KFXqYa_kpiValue{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;letter-spacing:-.01em;font-size:24px;font-weight:600;line-height:32px}.KFXqYa_kpiGreen{color:var(--dsw-static-green-500)}.KFXqYa_kpiDetail{color:var(--dsw-alias-label-caption);white-space:nowrap;text-overflow:ellipsis;font-size:10.5px;line-height:14px;overflow:hidden}.KFXqYa_panel{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:12px;flex-direction:column;gap:10px;padding:16px 18px;transition:border-color .16s;display:flex}.KFXqYa_panelHead{justify-content:space-between;align-items:baseline;gap:10px;display:flex}.KFXqYa_panelTitle{letter-spacing:-.005em;color:var(--dsw-alias-label-primary);margin:0;font-size:14px;font-weight:600;line-height:20px}.KFXqYa_panelHint{color:var(--dsw-alias-label-caption);white-space:nowrap;font-size:11px;line-height:16px}.KFXqYa_rangeToggle{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:8px;gap:2px;padding:2px;display:inline-flex}.KFXqYa_rangeButton{color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:6px;padding:2px 8px;font-size:11px;line-height:16px;transition:background-color .14s,color .14s}.KFXqYa_rangeButtonActive{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);font-weight:600}.KFXqYa_exportBar{justify-content:flex-end;align-items:center;gap:8px;display:flex}.KFXqYa_exportLabel{color:var(--dsw-alias-label-caption);font-size:11px;line-height:16px}.KFXqYa_exportButton{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-secondary);cursor:pointer;border-radius:999px;padding:4px 12px;font-size:11.5px;line-height:16px;transition:border-color .16s,color .16s,background-color .16s}.KFXqYa_exportButton:hover,.KFXqYa_exportButton:focus-visible{border-color:var(--dsw-alias-border-l2);color:var(--dsw-alias-label-primary);outline:none}.KFXqYa_shareTrack{background:var(--dsw-alias-bg-module-platform);border-radius:999px;height:10px;display:flex;overflow:hidden}.KFXqYa_shareSeg{height:100%;transition:width .2s}.KFXqYa_shareSegPeak{background:var(--dsw-static-blue-500)}.KFXqYa_shareSegOff{background:color-mix(in srgb, var(--dsw-static-blue-500) 25%, var(--dsw-alias-bg-module-platform))}.KFXqYa_shareSegUser{background:var(--dsw-static-blue-500)}.KFXqYa_shareSegAssistant{background:var(--dsw-static-green-500)}.KFXqYa_shareSegTool{background:var(--dsw-static-amber-500)}.KFXqYa_shareLegend{align-items:center;gap:16px;display:flex}.KFXqYa_shareItem{color:var(--dsw-alias-label-secondary);align-items:baseline;gap:6px;font-size:12px;line-height:17px;display:inline-flex}.KFXqYa_bucketCost{align-items:baseline;gap:3px;display:inline-flex}.KFXqYa_bucketOfficial{color:var(--dsw-static-blue-500);font-weight:600}.KFXqYa_bucketSep{color:var(--dsw-alias-label-dimmed)}.KFXqYa_bucketThird{color:var(--dsw-alias-label-secondary)}.KFXqYa_shareDot{border-radius:50%;flex:none;align-self:center;width:8px;height:8px}.KFXqYa_shareValue{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-weight:600}.KFXqYa_budgetInput{width:64px;color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;text-align:right;background:0 0;border:none;padding:0;font-size:12px;line-height:16px}.KFXqYa_budgetInput:focus-visible{outline:none}.KFXqYa_switch{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-module-platform);cursor:pointer;border-radius:999px;flex:none;width:30px;height:17px;padding:0;transition:background-color .16s,border-color .16s;position:relative}.KFXqYa_switchOn{border-color:var(--dsw-alias-border-l1);background:var(--dsw-alias-label-primary)}.KFXqYa_switchKnob{background:var(--dsw-static-neutral-bluish-00);border-radius:50%;width:11px;height:11px;transition:transform .16s;position:absolute;top:2px;left:2px}.KFXqYa_switchOn .KFXqYa_switchKnob{transform:translate(13px)}.KFXqYa_budgetFillWarn{background:var(--dsw-static-amber-500)}.KFXqYa_budgetFillOver{background:var(--dsw-static-red-500);animation:1.6s ease-in-out infinite KFXqYa_budgetOverPulse}@keyframes KFXqYa_budgetOverPulse{50%{opacity:.55}}.KFXqYa_chartWrap{width:100%;position:relative}.KFXqYa_chartSvg{width:100%;height:auto;display:block}.KFXqYa_chartEmpty{height:140px;color:var(--dsw-alias-label-caption);justify-content:center;align-items:center;font-size:13px;display:flex}.KFXqYa_emptyRow{text-align:center;color:var(--dsw-alias-label-caption);padding:28px 0;font-size:13px}.KFXqYa_chartGrid{stroke:var(--dsw-alias-border-l1);stroke-width:1px}.KFXqYa_chartAxisLabel{fill:var(--dsw-alias-label-tertiary);font-size:10px}.KFXqYa_chartBar{fill:var(--dsw-static-blue-500);opacity:.7}.KFXqYa_chartBar:hover{opacity:1}.KFXqYa_chartStack{stroke:var(--dsw-alias-bg-layer-1);stroke-width:.75px}.KFXqYa_chartStack:hover{opacity:.9}.KFXqYa_chartLine{stroke:var(--dsw-static-blue-500);stroke-width:2px;stroke-linecap:round;stroke-linejoin:round}.KFXqYa_chartCrosshair{stroke:var(--dsw-alias-label-dimmed);stroke-width:1px;stroke-dasharray:3 3}.KFXqYa_chartTooltip{pointer-events:none;z-index:2;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);box-shadow:none;white-space:nowrap;border-radius:8px;padding:8px 10px;position:absolute;transform:translate(-50%,calc(-100% - 10px))}.KFXqYa_chartTooltipDate{color:var(--dsw-alias-label-primary);margin-bottom:3px;font-size:11px;font-weight:600}.KFXqYa_chartTooltipRow{color:var(--dsw-alias-label-secondary);align-items:center;gap:5px;font-size:11px;line-height:17px;display:flex}.KFXqYa_chartTooltipRow strong{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-weight:600}.KFXqYa_chartBarPlaceholder{fill:color-mix(in srgb, var(--dsw-alias-label-secondary) 30%, transparent)}.KFXqYa_chartLegendLine{background:var(--dsw-static-blue-500);border-radius:2px;width:10px;height:3px;display:inline-block}.KFXqYa_chartLegendBar{background:var(--dsw-static-blue-500);opacity:.5;border-radius:2px;width:7px;height:7px;display:inline-block}.KFXqYa_chartTooltipSwatch{border-radius:3px;flex:none;width:8px;height:8px;display:inline-block}.KFXqYa_chartLegend{color:var(--dsw-alias-label-tertiary);justify-content:flex-end;gap:14px;margin-top:2px;font-size:11px;display:flex}.KFXqYa_chartLegend span{align-items:center;gap:5px;display:inline-flex}.KFXqYa_tableScroll{border:1px solid var(--dsw-alias-border-l1);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);border-radius:12px;overflow:auto}.KFXqYa_ubAlert{border:1px solid color-mix(in srgb, var(--dsw-static-blue-500) 30%, transparent);background:color-mix(in srgb, var(--dsw-static-blue-500) 8%, transparent);border-radius:10px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;padding:10px 14px;font-size:12px;line-height:17px;display:flex}.KFXqYa_ubAlertLeft{align-items:center;gap:8px;display:inline-flex}.KFXqYa_ubRate{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-weight:600}.KFXqYa_ubAlertNote{color:var(--dsw-alias-label-secondary);margin:0}.KFXqYa_ubTag,.KFXqYa_ubTagSuccess,.KFXqYa_ubTagNeutral,.KFXqYa_ubTagAlert,.KFXqYa_ubTagPromo{white-space:nowrap;border-radius:999px;align-items:center;height:18px;padding:0 7px;font-size:10px;font-weight:600;line-height:14px;display:inline-flex}.KFXqYa_ubTagSuccess{background:color-mix(in srgb, var(--dsw-static-green-500) 14%, transparent);color:var(--dsw-static-green-500)}.KFXqYa_ubTagNeutral{background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-secondary)}.KFXqYa_ubTagAlert{background:color-mix(in srgb, var(--dsw-static-amber-500) 16%, transparent);color:var(--dsw-static-amber-500)}.KFXqYa_ubTagPromo{background:color-mix(in srgb, var(--dsw-static-red-500) 14%, transparent);color:var(--dsw-static-red-500);cursor:help}.KFXqYa_ubExtraRow td{opacity:.72;padding-top:2px;padding-bottom:2px;font-size:12px}.KFXqYa_ubExtraName{color:var(--dsw-alias-label-secondary);margin-left:26px}.KFXqYa_ubExtraNote{color:var(--dsw-alias-label-tertiary);margin-left:8px;font-size:10px}.KFXqYa_ubCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:12px;flex-direction:column;gap:12px;padding:16px 18px;display:flex}.KFXqYa_ubCardHead{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.KFXqYa_ubCardTitle{color:var(--dsw-alias-label-primary);margin:0;font-size:13px;font-weight:600;line-height:18px}.KFXqYa_ubCardSub{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.KFXqYa_ubTablewrap{border:1px solid var(--dsw-alias-border-l1);border-radius:10px;overflow:auto}.KFXqYa_ubTable{border-collapse:collapse;white-space:nowrap;width:100%;font-size:12.5px}.KFXqYa_ubTable th,.KFXqYa_ubTable td{border-bottom:1px solid var(--dsw-alias-border-l1);text-align:left;padding:9px 12px}.KFXqYa_ubTable tbody tr:last-child td{border-bottom:0}.KFXqYa_ubTable thead th{color:var(--dsw-alias-label-tertiary);text-transform:uppercase;letter-spacing:.05em;font-size:11px;font-weight:600}.KFXqYa_ubModel{align-items:center;gap:8px;display:inline-flex}.KFXqYa_vendorLogo{object-fit:contain;border-radius:4px;flex:none;width:18px;height:18px}.KFXqYa_vendorLetter{color:#fff;border-radius:4px;flex:none;justify-content:center;align-items:center;width:18px;height:18px;font-size:10px;font-weight:600;line-height:1;display:inline-flex}.KFXqYa_ubModelName{color:var(--dsw-alias-label-primary);align-items:center;gap:6px;font-weight:500;display:inline-flex}.KFXqYa_ubPricepair{flex-wrap:wrap;gap:6px;display:inline-flex}.KFXqYa_ubChipPeak,.KFXqYa_ubChipOff{font-variant-numeric:tabular-nums;border-radius:999px;align-items:center;gap:5px;height:20px;padding:0 8px;font-size:11px;line-height:16px;display:inline-flex}.KFXqYa_ubChipLabel{font-size:10px;font-weight:600}.KFXqYa_ubChipPeak{background:color-mix(in srgb, var(--dsw-static-blue-500) 14%, transparent);color:var(--dsw-static-blue-500)}.KFXqYa_ubChipOff{background:color-mix(in srgb, var(--dsw-static-green-500) 14%, transparent);color:var(--dsw-static-green-500)}.KFXqYa_ubNotes{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.KFXqYa_ubNotesItem{align-items:baseline;gap:10px;display:flex}.KFXqYa_ubNotesTerm{color:var(--dsw-alias-label-primary);flex:0 0 72px;font-size:12px;font-weight:500}.KFXqYa_ubNotesDesc{min-width:0;color:var(--dsw-alias-label-secondary);flex:1;font-size:12px;line-height:17px}.KFXqYa_ubCardControlGroup{flex-wrap:wrap;align-items:center;gap:8px;display:inline-flex}.KFXqYa_ubTagError{white-space:nowrap;background:color-mix(in srgb, var(--dsw-static-red-500) 14%, transparent);height:18px;color:var(--dsw-static-red-500);border-radius:999px;align-items:center;padding:0 7px;font-size:10px;font-weight:600;line-height:14px;display:inline-flex}.KFXqYa_ubStatGrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.KFXqYa_ubStatCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:12px;flex-direction:column;gap:4px;padding:14px 16px;display:flex}.KFXqYa_ubStatLabel{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.KFXqYa_ubStatValue{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;letter-spacing:-.01em;font-size:22px;font-weight:700;line-height:28px}.KFXqYa_ubStatDetail{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;font-size:11px;line-height:16px}.KFXqYa_rowlist{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.KFXqYa_rowline{width:100%;min-width:0;color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:10px;justify-content:space-between;align-items:center;gap:12px;padding:9px 12px;transition:background-color .14s,border-color .14s;display:flex}.KFXqYa_rowline:hover{background:color-mix(in srgb, var(--dsw-alias-bg-layer-3) 60%, transparent);border-color:var(--dsw-alias-border-l1)}.KFXqYa_rowlineName{min-width:0;color:var(--dsw-alias-label-primary);white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:12.5px;font-weight:500;overflow:hidden}.KFXqYa_rowlineRight{font-variant-numeric:tabular-nums;flex:none;align-items:baseline;gap:8px;display:inline-flex}.KFXqYa_rowlineMuted{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.KFXqYa_rowlineChev{color:var(--dsw-alias-label-tertiary);font-size:14px}.KFXqYa_rowlineDrillWrap{padding-left:12px}.KFXqYa_rowlineDrill{border-left:1px solid var(--dsw-alias-border-l1);justify-content:space-between;align-items:center;gap:12px;padding:6px 12px;font-size:12px;display:flex}.KFXqYa_modelTable,.KFXqYa_pricingTable{border-collapse:collapse;width:100%;font-size:12.5px}.KFXqYa_modelTable th,.KFXqYa_modelTable td,.KFXqYa_pricingTable th,.KFXqYa_pricingTable td{border-bottom:1px solid var(--dsw-alias-border-l1);text-align:left;white-space:nowrap;padding:9px 12px}.KFXqYa_modelTable tbody tr:last-child td,.KFXqYa_pricingTable tbody tr:last-child td{border-bottom:0}.KFXqYa_modelTable thead th,.KFXqYa_pricingTable thead th{color:var(--dsw-alias-label-tertiary);text-transform:uppercase;letter-spacing:.05em;background:0 0;font-size:11px;font-weight:600}.KFXqYa_modelTable tbody tr,.KFXqYa_pricingTable tbody tr{transition:background-color .12s}.KFXqYa_modelTable tbody tr:hover,.KFXqYa_pricingTable tbody tr:hover{background:0 0}.KFXqYa_numCol{text-align:right;font-variant-numeric:tabular-nums}.KFXqYa_na{color:var(--dsw-alias-label-dimmed)}.KFXqYa_modelCell{align-items:center;gap:8px;display:inline-flex}.KFXqYa_modelDot{border-radius:50%;flex:none;width:9px;height:9px}.KFXqYa_modelName{color:var(--dsw-alias-label-primary);font-weight:500;line-height:16px;display:block}.KFXqYa_modelProvider{color:var(--dsw-alias-label-caption);font-size:10.5px;line-height:14px;display:block}.KFXqYa_pricingToggle:hover .KFXqYa_panelTitle,.KFXqYa_pricingToggle:focus-visible .KFXqYa_panelTitle{color:var(--dsw-alias-label-primary)}.KFXqYa_siteRow{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:10px;justify-content:space-between;align-items:center;gap:12px;padding:8px 10px;display:flex}.KFXqYa_siteRowName{align-items:center;gap:8px;min-width:0;display:inline-flex}.KFXqYa_siteKindTag{white-space:nowrap;border-radius:999px;flex:none;align-items:center;padding:1px 7px;font-size:10.5px;font-weight:600;line-height:16px;display:inline-flex}.KFXqYa_siteKindSite{color:var(--dsw-static-blue-500);background:color-mix(in srgb, var(--dsw-static-blue-500) 14%, transparent)}.KFXqYa_siteKindDirect{color:var(--dsw-static-green-500);background:color-mix(in srgb, var(--dsw-static-green-500) 14%, transparent)}.KFXqYa_siteKindUnknown{color:var(--dsw-static-red-500);background:color-mix(in srgb, var(--dsw-static-red-500) 14%, transparent)}.KFXqYa_siteRowTitle{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;font-weight:600;line-height:18px;overflow:hidden}.KFXqYa_siteRowMeta{flex:none;align-items:center;gap:10px;display:inline-flex}.KFXqYa_siteRowCost{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-size:12.5px;font-weight:700;line-height:18px}.KFXqYa_siteRowCalls{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;font-size:11.5px;line-height:17px}.KFXqYa_siteRowCallsLow{color:var(--dsw-static-red-500)}.KFXqYa_flatTag{color:var(--dsw-alias-label-caption);font-size:10.5px;line-height:14px}.KFXqYa_healthDot{border-radius:50%;flex:none;width:8px;height:8px;display:inline-block}.KFXqYa_healthOk{background:var(--dsw-static-green-500)}.KFXqYa_healthBad{background:var(--dsw-static-red-500)}.KFXqYa_healthIdle{background:var(--dsw-static-neutral-bluish-400)}.KFXqYa_dashboardRight{align-items:center;gap:8px;min-width:0;display:flex}.KFXqYa_healthBadge{white-space:nowrap;border-radius:999px;align-items:center;gap:6px;padding:3px 9px;font-size:11px;line-height:16px;display:inline-flex}.KFXqYa_healthBadgeOk{color:var(--dsw-static-green-500);background:var(--dsw-alias-bg-layer-2)}.KFXqYa_healthBadgeBad{color:var(--dsw-static-red-500);background:var(--dsw-alias-bg-layer-2)}.KFXqYa_planTag{color:var(--dsw-static-green-500);background:var(--dsw-alias-bg-layer-2);border-radius:999px;align-items:center;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px;display:inline-flex}.KFXqYa_uncataloguedTag{vertical-align:1px;color:var(--dsw-static-amber-500);background:var(--dsw-alias-bg-layer-2);border-radius:999px;margin-left:6px;padding:0 6px;font-size:10px;font-weight:600;line-height:16px;display:inline-block}.KFXqYa_estimatedTag{vertical-align:1px;color:var(--dsw-static-blue-500);background:var(--dsw-alias-bg-layer-2);border-radius:999px;margin-left:6px;padding:0 6px;font-size:10px;font-weight:600;line-height:16px;display:inline-block}.KFXqYa_feeBar{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;border-radius:999px;flex-wrap:wrap;align-items:center;gap:8px;padding:6px 12px;font-size:11px;line-height:16px;display:inline-flex}.KFXqYa_feeCount{color:var(--dsw-alias-label-primary);font-weight:600}.KFXqYa_feeSuffix{color:var(--dsw-alias-label-tertiary)}.KFXqYa_feeItem{color:var(--dsw-alias-label-secondary);white-space:nowrap}.KFXqYa_feeNum{color:var(--dsw-alias-label-primary)}.KFXqYa_feeSep{color:var(--dsw-alias-label-tertiary)}.KFXqYa_feeChipPrimary,.KFXqYa_feeChipOff,.KFXqYa_feeChipAlert,.KFXqYa_feeChipError{font-variant-numeric:tabular-nums;white-space:nowrap;border-radius:999px;align-items:center;height:20px;padding:0 8px;font-size:10px;font-weight:600;line-height:14px;display:inline-flex}.KFXqYa_feeChipPrimary{background:color-mix(in srgb, var(--dsw-static-blue-500) 14%, transparent);color:var(--dsw-static-blue-500)}.KFXqYa_feeChipOff{background:color-mix(in srgb, var(--dsw-static-green-500) 14%, transparent);color:var(--dsw-static-green-500)}.KFXqYa_feeChipAlert{background:color-mix(in srgb, var(--dsw-static-amber-500) 16%, transparent);color:var(--dsw-static-amber-500)}.KFXqYa_feeChipError{background:color-mix(in srgb, var(--dsw-static-red-500) 14%, transparent);color:var(--dsw-static-red-500)}.KFXqYa_balanceCell{align-items:center;gap:6px;display:inline-flex;position:relative}.KFXqYa_balanceDaysBadge{border:1px solid var(--dsw-alias-label-caption);background:color-mix(in srgb, var(--dsw-alias-label-caption) 10%, transparent);min-width:24px;height:24px;color:var(--dsw-alias-label-secondary);cursor:pointer;border-radius:12px;justify-content:center;align-items:center;padding:0 6px;font-size:10.5px;font-weight:600;line-height:1;display:inline-flex}.KFXqYa_balanceDaysBadge:hover{border-color:var(--dsw-alias-label-secondary);background:color-mix(in srgb, var(--dsw-alias-label-caption) 18%, transparent)}.KFXqYa_balanceDaysBadgeLow{color:var(--dsw-static-red-500);border-color:var(--dsw-static-red-500);background:color-mix(in srgb, var(--dsw-static-red-500) 10%, transparent)}.KFXqYa_balanceDetailPop{z-index:20;background:var(--dsw-alias-bg-layer-3);border:1px solid var(--dsw-alias-label-caption);white-space:nowrap;border-radius:8px;flex-direction:column;gap:6px;min-width:180px;padding:8px 10px;display:inline-flex;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 6px 20px #0000002e}.KFXqYa_balanceDetailHead{justify-content:space-between;align-items:center;gap:12px;display:flex}.KFXqYa_balanceDetailTitle{color:var(--dsw-alias-label-primary);font-size:12px;font-weight:600}.KFXqYa_balanceDetailClose{cursor:pointer;color:var(--dsw-alias-label-caption);background:0 0;border:none;font-size:14px;line-height:1}.KFXqYa_balanceDetailClose:hover{color:var(--dsw-alias-label-primary)}.KFXqYa_balanceDetailGrid{flex-direction:column;gap:4px;display:inline-flex}.KFXqYa_balanceDetailRow{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;justify-content:space-between;gap:16px;font-size:11px;line-height:15px;display:flex}.KFXqYa_balanceDetailLabel{color:var(--dsw-alias-label-caption)}.KFXqYa_balanceDetailValue{color:var(--dsw-alias-label-primary);font-weight:500}body[data-zine-mode] .KFXqYa_trigger,body[data-zine-mode] .KFXqYa_triggerPop,body[data-zine-mode] .KFXqYa_railButton{display:none}body[data-zine-mode] .KFXqYa_dashboardHead{background:#000;border-bottom:2px solid #e8ff00}body[data-zine-mode] .KFXqYa_headTitleRow{align-items:center;gap:8px;margin-top:4px;display:flex}body[data-zine-mode] .KFXqYa_dashboardTitle{color:#e8ff00;letter-spacing:.04em;text-transform:uppercase;text-shadow:0 0 8px #e8ff0066;font-weight:900}body[data-zine-mode] .KFXqYa_dashboardSubtitle{color:#c9d98a;letter-spacing:.08em;text-transform:uppercase;font-size:10px}body[data-zine-mode] .KFXqYa_closeButton{color:#0a0a05;background:#ff2d95;border:1.5px solid #ff2d95;border-radius:0;box-shadow:0 0 10px #ff2d9573}body[data-zine-mode] .KFXqYa_hero{background:#000;border:2.5px solid #e8ff00;border-radius:0;position:relative;box-shadow:0 0 0 1px #0009,0 0 24px #e8ff002e}body[data-zine-mode] .KFXqYa_heroLabel{color:#c9d98a;letter-spacing:.12em;text-transform:uppercase;font-size:10px;font-weight:900}body[data-zine-mode] .KFXqYa_heroValue{color:#e8ff00;letter-spacing:-.02em;text-shadow:0 0 12px #e8ff0073;-webkit-text-fill-color:#e8ff00;background:0 0;font-size:38px;font-weight:900}body[data-zine-mode] .KFXqYa_heroMeta{color:#c9d98a;letter-spacing:.06em;text-transform:uppercase;font-size:10.5px}body[data-zine-mode] .KFXqYa_heroSideLabel{color:#c9d98a;letter-spacing:.1em;text-transform:uppercase;font-size:10px;font-weight:900}body[data-zine-mode] .KFXqYa_heroSideValue{color:#e8ff00;text-shadow:0 0 6px #e8ff0059}body[data-zine-mode] .KFXqYa_delta{font-weight:900}body[data-zine-mode] .KFXqYa_deltaUp{color:#ff2d95}body[data-zine-mode] .KFXqYa_deltaDown{color:#c9d98a}body[data-zine-mode] .KFXqYa_tabNav{background:#000;border-bottom:2px solid #e8ff00}body[data-zine-mode] .KFXqYa_tabButton{color:#c9d98a;letter-spacing:.08em;text-transform:uppercase;border-radius:0;font-size:10.5px;font-weight:900}body[data-zine-mode] .KFXqYa_tabButton:hover,body[data-zine-mode] .KFXqYa_tabButton:focus-visible{color:#e8ff00;background:#e8ff001f}body[data-zine-mode] .KFXqYa_tabButtonActive,body[data-zine-mode] .KFXqYa_tabButtonActive:hover,body[data-zine-mode] .KFXqYa_tabButtonActive:focus-visible{color:#0a0a05;background:#e8ff00;box-shadow:0 0 10px #e8ff0073}body[data-zine-mode] .KFXqYa_panel{background:#000;border:2px solid #e8ff00;border-radius:0}body[data-zine-mode] .KFXqYa_trendPanel{position:relative}body[data-zine-mode] .KFXqYa_panelTitle{color:#e8ff00;letter-spacing:.06em;text-transform:uppercase;text-shadow:0 0 6px #e8ff0066;font-weight:900}body[data-zine-mode] .KFXqYa_panelHint{color:#c9d98a;letter-spacing:.08em;text-transform:uppercase;font-size:10px;font-weight:900}body[data-zine-mode] .KFXqYa_modelTableScroll{background:#000;border:1.5px solid #e8ff0080;border-radius:0}.KFXqYa_currencyToggle{background:var(--dsw-alias-bg-layer-3);border:none;border-radius:8px;align-items:center;gap:2px;margin-right:8px;padding:2px;display:inline-flex}.KFXqYa_currencyButton{color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;background:0 0;border:0;border-radius:6px;padding:4px 8px;font-size:11px;font-weight:700;line-height:1}.KFXqYa_currencyButtonActive{background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary)}.KFXqYa_subscriptionGrid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px;margin-top:10px;display:grid}.KFXqYa_subscriptionCard{border:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 75%, transparent);background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 62%, transparent);-webkit-backdrop-filter:blur(12px)saturate(1.3);border-radius:12px;padding:12px 14px;transition:border-color .2s,box-shadow .2s;position:relative;overflow:hidden;box-shadow:0 8px 24px #0000001a}.KFXqYa_subscriptionCard:before{content:"";background:linear-gradient(90deg, transparent 0%, var(--dsw-static-amber-500) 30%, var(--dsw-alias-label-primary) 50%, var(--dsw-static-amber-500) 70%, transparent 100%);opacity:.9;pointer-events:none;background-size:200% 100%;height:1.5px;animation:3.6s ease-in-out infinite KFXqYa_subscriptionGoldFlow;position:absolute;top:0;left:0;right:0}@keyframes KFXqYa_subscriptionGoldFlow{0%{background-position:200% 0}to{background-position:-200% 0}}.KFXqYa_subscriptionCard:hover{border-color:color-mix(in srgb, var(--dsw-static-amber-500) 55%, var(--dsw-alias-border-l1));box-shadow:0 10px 30px #00000029}.KFXqYa_subscriptionHead{flex-wrap:wrap;align-items:baseline;gap:6px;margin-bottom:8px;display:flex}.KFXqYa_subscriptionName{font-size:13px;font-weight:700}.KFXqYa_subscriptionPlan{color:var(--dsw-alias-label-secondary);font-size:11px}.KFXqYa_subscriptionPlan[data-kind=code],.KFXqYa_subscriptionPlan[data-kind=token]{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-3);border-radius:999px;padding:1px 8px;font-weight:500}.KFXqYa_subscriptionTier{color:var(--dsw-alias-label-secondary);margin-left:6px}.KFXqYa_subscriptionAuto{color:var(--dsw-static-blue-500);background:color-mix(in srgb, var(--dsw-static-blue-500) 14%, var(--dsw-alias-bg-layer-2));border-radius:999px;margin-left:6px;padding:1px 6px;font-size:10px}.KFXqYa_subscriptionStatus{color:var(--dsw-alias-label-secondary);margin-bottom:6px;font-size:11px}.KFXqYa_subscriptionWindow{align-items:center;gap:10px;margin-top:8px;font-size:11px;display:flex}.KFXqYa_subscriptionWindowLabel{color:var(--dsw-alias-label-secondary);flex:0 0 44px}.KFXqYa_subscriptionTrack{background:var(--dsw-alias-bg-layer-3);border-radius:3px;flex:1;height:6px;overflow:hidden}.KFXqYa_subscriptionFill{background:var(--dsw-static-blue-500);border-radius:3px;height:100%;transition:width .2s;display:block}.KFXqYa_subscriptionFillWarn{background:var(--dsw-static-amber-500)}.KFXqYa_subscriptionFillOver{background:var(--dsw-static-red-500)}.KFXqYa_subscriptionMeta{flex-direction:column;flex:none;align-items:flex-end;gap:2px;display:flex}.KFXqYa_subscriptionPct{text-align:right;font-variant-numeric:tabular-nums;flex:none;min-width:52px}.KFXqYa_subscriptionExhausted{color:var(--dsw-static-red-500);min-width:52px;font-weight:600}.KFXqYa_subscriptionReset{color:var(--dsw-alias-label-caption);white-space:nowrap;flex:none;font-size:10px}.KFXqYa_providerGroupList{flex-direction:column;gap:10px;display:flex}.KFXqYa_providerGroup{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:12px;padding:12px 14px}.KFXqYa_providerGroupHead{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.KFXqYa_providerGroupTitle{align-items:center;gap:7px;min-width:0;display:inline-flex}.KFXqYa_providerGroupName{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600;line-height:18px}.KFXqYa_providerGroupMeta{flex:none;align-items:center;gap:10px;display:inline-flex}.KFXqYa_providerGroupBadge{color:var(--dsw-static-green-500);background:var(--dsw-alias-bg-layer-2);border-radius:999px;align-items:center;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px;display:inline-flex}.KFXqYa_providerGroupBalance{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;white-space:nowrap;align-items:baseline;gap:6px;font-size:12px;line-height:17px;display:inline-flex}.KFXqYa_providerGroupBalanceLabel{color:var(--dsw-alias-label-caption);font-size:11px;line-height:17px}.KFXqYa_rounds{margin-top:10px}.KFXqYa_roundsBars{align-items:flex-end;gap:3px;height:124px;padding:16px 2px 0;display:flex;overflow-x:auto}.KFXqYa_roundsBarCol{border-radius:5px 5px 0 0;flex-direction:column;flex:1 0 28px;justify-content:flex-end;align-items:stretch;height:100%;display:flex;position:relative}.KFXqYa_roundsBarColPeak{background:color-mix(in srgb, var(--dsw-static-amber-500) 16%, transparent)}.KFXqYa_roundsBarColOff{background:var(--dsw-alias-bg-module-platform)}.KFXqYa_roundsBarLabel{text-align:center;color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;max-width:100%;font-size:9px;line-height:1.2;position:absolute;bottom:0;left:0;right:0;overflow:hidden;transform:translateY(-100%)}.KFXqYa_roundsBarWrap{flex:1;align-items:flex-end;min-height:0;display:flex}.KFXqYa_roundsBar{background:var(--dsw-static-blue-500);border-radius:2px 2px 0 0;width:100%;min-height:2px;position:relative}.KFXqYa_roundsBarFlagged{background:var(--dsw-static-red-500);border-radius:2px 2px 0 0;width:100%;min-height:2px;position:relative}.KFXqYa_roundsFlagMark{background:var(--dsw-static-red-500);border-radius:50%;width:7px;height:7px;position:absolute;top:-3px;right:-3px}.KFXqYa_roundsAxis{color:var(--dsw-alias-label-secondary);justify-content:space-between;margin-top:6px;font-size:10px;display:flex}.KFXqYa_roundsEmpty{color:var(--dsw-alias-label-secondary);margin-top:10px;font-size:12px}.KFXqYa_heatmap{margin-top:10px}.KFXqYa_heatmapGrid{grid-template-columns:repeat(7,minmax(0,1fr));gap:8px;display:grid}.KFXqYa_heatmapCellEmpty{background:var(--dsw-alias-bg-layer-1);height:30px;color:var(--dsw-alias-label-dimmed);font-variant-numeric:tabular-nums;border-radius:8px;justify-content:center;align-items:center;font-size:11px;display:flex}.KFXqYa_heatmapCell{font-variant-numeric:tabular-nums;cursor:pointer;border:0;border-radius:8px;justify-content:center;align-items:center;height:30px;padding:0;font-size:11px;display:flex}.KFXqYa_heatmapCell[data-level="0"],.KFXqYa_heatmapCell[data-level="1"],.KFXqYa_heatmapCell[data-level="2"]{color:var(--dsw-alias-label-primary)}.KFXqYa_heatmapCell[data-level="3"],.KFXqYa_heatmapCell[data-level="4"]{color:var(--dsw-static-neutral-bluish-00)}.KFXqYa_heatmapFooter{color:var(--dsw-alias-label-secondary);align-items:center;gap:8px;margin-top:10px;font-size:10px;display:flex}.KFXqYa_heatmapLegend{gap:3px;display:inline-flex}.KFXqYa_heatmapLegend i{border-radius:4px;width:14px;height:14px;display:block}.KFXqYa_heatmapHover{font-variant-numeric:tabular-nums;margin-left:auto}.KFXqYa_heatmapRangeSwitch{gap:4px;margin-left:auto;display:inline-flex}.KFXqYa_heatmapRangeButton{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-text-secondary);cursor:pointer;background:0 0;border-radius:6px;padding:2px 8px;font-size:11px;line-height:1.4}.KFXqYa_heatmapRangeButtonActive{color:var(--dsw-alias-text-primary);border-color:currentColor;font-weight:600}.KFXqYa_heatmapYear{flex-direction:column;gap:6px;display:flex}.KFXqYa_heatmapYearBody{align-items:flex-start;gap:6px;display:flex}.KFXqYa_heatmapYearWeekdays{color:var(--dsw-alias-text-tertiary);flex:none;grid-template-rows:repeat(7,11px);gap:3px;padding-top:12px;font-size:9px;line-height:11px;display:grid}.KFXqYa_heatmapYearWeekday{white-space:nowrap;text-align:right;height:11px}.KFXqYa_heatmapYearMonths{min-width:max-content;color:var(--dsw-alias-text-tertiary);grid-template-columns:repeat(52,11px);gap:3px;font-size:9px;line-height:12px;display:grid;overflow:visible}.KFXqYa_heatmapYearMonth{white-space:nowrap;overflow:visible}.KFXqYa_heatmapYearScroll{padding-bottom:2px;overflow-x:auto}.KFXqYa_heatmapYearGrid{grid-template-rows:repeat(7,11px);grid-auto-flow:column;gap:3px;min-width:max-content;display:grid}.KFXqYa_heatmapYearCell{cursor:pointer;border:0;border-radius:2px;width:11px;height:11px;padding:0}.KFXqYa_triggerPopSubscription{width:auto;left:0;right:0}.KFXqYa_floatSub{flex-direction:column;gap:6px;min-width:0;display:flex}.KFXqYa_floatSubHead{flex-wrap:wrap;align-items:baseline;gap:6px;min-width:0;display:flex}.KFXqYa_floatSubName{color:var(--dsw-alias-label-primary);font-size:12px;font-weight:700}.KFXqYa_floatSubPlan{color:var(--dsw-alias-label-secondary);font-size:10px}.KFXqYa_floatSub .KFXqYa_subscriptionWindow{flex-wrap:wrap;gap:4px 10px}.KFXqYa_floatSub .KFXqYa_subscriptionWindowLabel{flex:none}.KFXqYa_floatSub .KFXqYa_subscriptionMeta{min-width:0;max-width:100%}.KFXqYa_floatSub .KFXqYa_subscriptionPct{min-width:0}.KFXqYa_floatSub .KFXqYa_subscriptionReset{white-space:normal;overflow-wrap:anywhere}.KFXqYa_triggerPopEmpty{color:var(--dsw-alias-label-tertiary);padding:2px 0;font-size:11px;line-height:1.5}.KFXqYa_triggerPopSwitcher{justify-content:flex-end;align-items:center;gap:8px;margin-top:2px;display:flex}.KFXqYa_triggerPopSwitchCount{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;font-size:10px}.KFXqYa_floatModeBtn{border:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 75%, transparent);background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 60%, transparent);color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;border-radius:10px;flex:1;padding:7px 10px;font-size:12px}.KFXqYa_floatModeBtnOn{border-color:var(--dsw-static-blue-500);color:var(--dsw-alias-label-primary);background:color-mix(in srgb, var(--dsw-static-blue-500) 16%, transparent)}.KFXqYa_floatTarget{color:var(--dsw-alias-label-secondary);cursor:pointer;align-items:center;gap:5px;font-size:12px;display:inline-flex}.KFXqYa_floatTargetLabel{color:var(--dsw-alias-label-secondary)}.KFXqYa_staleNotice{color:var(--dsw-static-amber-500);background:color-mix(in srgb, var(--dsw-static-amber-500) 12%, transparent);border:1px solid color-mix(in srgb, var(--dsw-static-amber-500) 30%, transparent);border-radius:10px;align-items:center;gap:6px;margin:0 0 10px;padding:8px 10px;font-size:11px;display:flex}.KFXqYa_plgHead{align-items:flex-start;gap:12px;display:flex}.KFXqYa_plgIcon{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);width:40px;height:40px;color:var(--dsw-alias-label-secondary);border-radius:10px;flex:none;justify-content:center;align-items:center;display:inline-flex}.KFXqYa_plgTitle{flex-direction:column;gap:4px;min-width:0;display:flex}.KFXqYa_plgNameRow{align-items:center;gap:8px;display:flex}.KFXqYa_plgName{color:var(--dsw-alias-label-primary);margin:0;font-size:13px;font-weight:600;line-height:18px}.KFXqYa_plgTag{height:18px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-3);white-space:nowrap;border-radius:5px;align-items:center;padding:0 6px;font-size:10px;font-weight:600;display:inline-flex}.KFXqYa_plgDesc{color:var(--dsw-alias-label-secondary);margin:0;font-size:11px;line-height:16px}.KFXqYa_plgGrid{border-top:1px solid var(--dsw-alias-border-l1);grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding-top:12px;display:grid}.KFXqYa_plgItem{flex-direction:column;gap:2px;min-width:0;display:flex}.KFXqYa_plgLabel{color:var(--dsw-alias-label-tertiary);font-size:10px;line-height:14px}.KFXqYa_plgVal{color:var(--dsw-alias-label-primary);word-break:break-all;font-size:12px;line-height:17px}.KFXqYa_plgLink{color:var(--dsw-static-blue-500);word-break:break-all;font-size:12px;line-height:17px;text-decoration:none}.KFXqYa_plgLink:hover{text-decoration:underline}.KFXqYa_tokenPanel{flex-direction:column;gap:14px;display:flex}.KFXqYa_tokenModelBar{background:var(--dsw-alias-bg-layer-2);border-radius:999px;height:8px;overflow:hidden}.KFXqYa_tokenModelParts{height:100%;display:flex}.KFXqYa_tokenModelPartIn{background:var(--dsw-static-blue-500)}.KFXqYa_tokenModelPartOut{background:var(--dsw-static-amber-500)}.KFXqYa_tokenModelShareRow{align-items:center;gap:6px;display:inline-flex}@media (width<=640px){.KFXqYa_kpiGrid{grid-template-columns:repeat(2,minmax(0,1fr))}.KFXqYa_hero{gap:14px}.KFXqYa_heroTop{flex-direction:column;align-items:flex-start;gap:12px}.KFXqYa_heroGauge{width:72px;height:72px}.KFXqYa_heroSide{gap:12px}.KFXqYa_heroSideSpacer{display:none}}.KFXqYa_peakCard{z-index:2000;border:1px solid var(--dsw-alias-border-l1);background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 82%, transparent);-webkit-backdrop-filter:blur(12px)saturate(1.2);border-radius:12px;flex-direction:column;gap:8px;min-width:280px;max-width:380px;padding:16px;animation:.2s KFXqYa_peakAlertIn;display:flex;position:fixed;box-shadow:0 4px 16px #00000014}.KFXqYa_peakCardCorner{bottom:18px;right:18px}.KFXqYa_peakCardCenter{top:20%;left:50%;transform:translate(-50%)}.KFXqYa_peakCardPeak{color:var(--dsw-static-blue-500)}.KFXqYa_peakCardOff{color:var(--dsw-static-green-500)}.KFXqYa_peakHead{justify-content:space-between;align-items:center;gap:8px;display:flex}.KFXqYa_peakTag{white-space:nowrap;border-radius:6px;align-items:center;gap:6px;height:20px;padding:0 8px;font-size:11px;font-weight:600;line-height:14px;display:inline-flex}.KFXqYa_peakTagPrimary{background:var(--dsw-alias-bg-layer-3);color:var(--dsw-static-blue-500)}.KFXqYa_peakTagSuccess{background:var(--dsw-alias-bg-layer-3);color:var(--dsw-static-green-500)}.KFXqYa_peakDot{border-radius:999px;flex:none;width:6px;height:6px}.KFXqYa_peakDotPrimary{background:var(--dsw-static-blue-500)}.KFXqYa_peakDotSuccess{background:var(--dsw-static-green-500)}.KFXqYa_peakClose{width:24px;height:24px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;font-size:15px;line-height:1;transition:background-color .14s,color .14s;display:inline-flex}.KFXqYa_peakClose:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2)}.KFXqYa_peakCount{font-variant-numeric:tabular-nums;font-size:28px;font-weight:700;line-height:34px}.KFXqYa_peakCountPrimary{color:var(--dsw-static-blue-500)}.KFXqYa_peakCountSuccess{color:var(--dsw-static-green-500)}.KFXqYa_peakDesc{color:var(--dsw-alias-label-secondary);margin:0;font-size:12px;line-height:18px}@keyframes KFXqYa_peakAlertIn{0%{opacity:0}to{opacity:1}}.KFXqYa_setCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:12px;flex-direction:column;gap:12px;padding:16px 18px;display:flex}.KFXqYa_setCardHead{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.KFXqYa_setCardMeta{flex-direction:column;gap:4px;min-width:0;display:flex}.KFXqYa_setCardTitle{color:var(--dsw-alias-label-primary);margin:0;font-size:13px;font-weight:600;line-height:18px}.KFXqYa_setCardDesc{color:var(--dsw-alias-label-secondary);margin:0;font-size:11px;line-height:16px}.KFXqYa_ctlCol{flex-direction:column;gap:10px;padding-top:2px;display:flex}.KFXqYa_ctlRow{align-items:center;gap:12px;min-height:28px;display:flex}.KFXqYa_ctlRowStretch{display:flex}.KFXqYa_ctlLabel{color:var(--dsw-alias-label-secondary);flex:0 0 96px;font-size:11px;line-height:16px}.KFXqYa_ctlGroup{flex-wrap:wrap;align-items:center;gap:8px;display:inline-flex}.KFXqYa_userPriceRow{border-bottom:1px solid var(--dsw-alias-border-l1);flex-wrap:wrap;align-items:flex-end;gap:10px;padding:8px 0;display:flex}.KFXqYa_userPriceField{flex-direction:column;gap:4px;min-width:0;display:flex}.KFXqYa_userPriceField .KFXqYa_ctlLabel{flex:none;font-size:11px}.KFXqYa_userPriceInput,.KFXqYa_userPriceInputNum{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:96px;max-width:160px;color:var(--dsw-alias-label-primary);border-radius:6px;padding:4px 8px;font-size:12px;line-height:16px}.KFXqYa_userPriceInputNum{min-width:72px;max-width:88px}.KFXqYa_userPriceRemove{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-static-red-400);cursor:pointer;background:0 0;border-radius:6px;align-self:center;padding:4px 8px;font-size:11px;line-height:16px}.KFXqYa_userPriceRemove:hover{border-color:var(--dsw-static-red-400)}.KFXqYa_rdo{color:var(--dsw-alias-label-secondary);cursor:pointer;white-space:nowrap;align-items:center;gap:6px;font-size:12px;line-height:16px;display:inline-flex}.KFXqYa_rdo input{opacity:0;pointer-events:none;position:absolute}.KFXqYa_rdoDot{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);border-radius:50%;flex:none;width:14px;height:14px;position:relative}.KFXqYa_rdo input:checked+.KFXqYa_rdoDot{border-color:var(--dsw-static-blue-500)}.KFXqYa_rdo input:checked+.KFXqYa_rdoDot:after{content:"";background:var(--dsw-static-blue-500);border-radius:50%;position:absolute;inset:3px}.KFXqYa_inp{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:6px;align-items:center;gap:4px;padding:2px 6px;display:inline-flex}.KFXqYa_affix{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.KFXqYa_prog{background:var(--dsw-alias-bg-module-platform);border-radius:999px;flex:1;min-width:0;height:6px;overflow:hidden}.KFXqYa_progFill{background:var(--dsw-static-blue-500);border-radius:999px;height:100%;transition:width .2s}.KFXqYa_btn{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;border-radius:999px;align-items:center;gap:6px;padding:0 12px;font-size:12px;line-height:16px;transition:border-color .16s,color .16s,background-color .16s;display:inline-flex}.KFXqYa_btn:hover{border-color:var(--dsw-static-blue-500);color:var(--dsw-alias-label-primary);background:color-mix(in srgb, var(--dsw-static-blue-500) 12%, var(--dsw-alias-bg-layer-1))}`,document.head.appendChild(e)}var C={btn:`KFXqYa_btn`,heatmapYearBody:`KFXqYa_heatmapYearBody`,healthOk:`KFXqYa_healthOk`,headTitleRow:`KFXqYa_headTitleRow`,balanceDetailRow:`KFXqYa_balanceDetailRow`,chartLegendLine:`KFXqYa_chartLegendLine`,ubAlert:`KFXqYa_ubAlert`,dashboardIn:`KFXqYa_dashboardIn`,healthBad:`KFXqYa_healthBad`,triggerIcon:`KFXqYa_triggerIcon`,siteKindTag:`KFXqYa_siteKindTag`,subscriptionName:`KFXqYa_subscriptionName`,shareValue:`KFXqYa_shareValue`,staleNotice:`KFXqYa_staleNotice`,shareSegTool:`KFXqYa_shareSegTool`,ubChipPeak:`KFXqYa_ubChipPeak`,subscriptionWindow:`KFXqYa_subscriptionWindow`,heroSideLabel:`KFXqYa_heroSideLabel`,ubNotesItem:`KFXqYa_ubNotesItem`,healthBadgeOk:`KFXqYa_healthBadgeOk`,subscriptionReset:`KFXqYa_subscriptionReset`,setCard:`KFXqYa_setCard`,triggerMain:`KFXqYa_triggerMain`,balanceDaysBadgeLow:`KFXqYa_balanceDaysBadgeLow`,heatmapHover:`KFXqYa_heatmapHover`,popDot:`KFXqYa_popDot`,shareSegPeak:`KFXqYa_shareSegPeak`,metricValue:`KFXqYa_metricValue`,plgTag:`KFXqYa_plgTag`,dashboardSubtitle:`KFXqYa_dashboardSubtitle`,ubCardControlGroup:`KFXqYa_ubCardControlGroup`,plgTitle:`KFXqYa_plgTitle`,heroBudgetLabel:`KFXqYa_heroBudgetLabel`,kpiGrid:`KFXqYa_kpiGrid`,ubStatCard:`KFXqYa_ubStatCard`,deltaUp:`KFXqYa_deltaUp`,bucketThird:`KFXqYa_bucketThird`,shareSegOff:`KFXqYa_shareSegOff`,planTag:`KFXqYa_planTag`,bucketCost:`KFXqYa_bucketCost`,heroGaugePctOver:`KFXqYa_heroGaugePctOver`,heroBudgetValue:`KFXqYa_heroBudgetValue`,feeNum:`KFXqYa_feeNum`,feeSep:`KFXqYa_feeSep`,balanceDaysBadge:`KFXqYa_balanceDaysBadge`,triggerYen:`KFXqYa_triggerYen`,shareTrack:`KFXqYa_shareTrack`,triggerPopSubscription:`KFXqYa_triggerPopSubscription`,triggerMetric:`KFXqYa_triggerMetric`,feeBar:`KFXqYa_feeBar`,switchKnob:`KFXqYa_switchKnob`,subscriptionPlan:`KFXqYa_subscriptionPlan`,peakTagSuccess:`KFXqYa_peakTagSuccess`,deltaDown:`KFXqYa_deltaDown`,ubModel:`KFXqYa_ubModel`,plgIcon:`KFXqYa_plgIcon`,modelProvider:`KFXqYa_modelProvider`,feeChipError:`KFXqYa_feeChipError`,triggerLabel:`KFXqYa_triggerLabel`,vendorLetter:`KFXqYa_vendorLetter`,heatmapYear:`KFXqYa_heatmapYear`,floatModeBtn:`KFXqYa_floatModeBtn`,triggerPopSwitcher:`KFXqYa_triggerPopSwitcher`,ubStatDetail:`KFXqYa_ubStatDetail`,heroSideSpacer:`KFXqYa_heroSideSpacer`,reconcileText:`KFXqYa_reconcileText`,heroSide:`KFXqYa_heroSide`,rowlineChev:`KFXqYa_rowlineChev`,healthDot:`KFXqYa_healthDot`,tabPanel:`KFXqYa_tabPanel`,feeChipOff:`KFXqYa_feeChipOff`,plgItem:`KFXqYa_plgItem`,flatTag:`KFXqYa_flatTag`,shareSegUser:`KFXqYa_shareSegUser`,peakTag:`KFXqYa_peakTag`,railButton:`KFXqYa_railButton`,estimatedTag:`KFXqYa_estimatedTag`,heatmapGrid:`KFXqYa_heatmapGrid`,peakHead:`KFXqYa_peakHead`,ubNotesDesc:`KFXqYa_ubNotesDesc`,unpricedHint:`KFXqYa_unpricedHint`,metricGrid:`KFXqYa_metricGrid`,providerGroupTitle:`KFXqYa_providerGroupTitle`,plgLabel:`KFXqYa_plgLabel`,kpiLabel:`KFXqYa_kpiLabel`,popModelStatus:`KFXqYa_popModelStatus`,popDotDirect:`KFXqYa_popDotDirect`,popDotSub:`KFXqYa_popDotSub`,triggerSparkHot:`KFXqYa_triggerSparkHot`,heroGaugeArc:`KFXqYa_heroGaugeArc`,shareLegend:`KFXqYa_shareLegend`,dashboardTitle:`KFXqYa_dashboardTitle`,chartTooltip:`KFXqYa_chartTooltip`,setCardTitle:`KFXqYa_setCardTitle`,siteRowCallsLow:`KFXqYa_siteRowCallsLow`,siteKindDirect:`KFXqYa_siteKindDirect`,providerGroupHead:`KFXqYa_providerGroupHead`,chartLine:`KFXqYa_chartLine`,heatmapRangeButtonActive:`KFXqYa_heatmapRangeButtonActive`,heatmapYearWeekday:`KFXqYa_heatmapYearWeekday`,popDotNeutral:`KFXqYa_popDotNeutral`,chartTooltipRow:`KFXqYa_chartTooltipRow`,ubChipOff:`KFXqYa_ubChipOff`,modelCell:`KFXqYa_modelCell`,popTitle:`KFXqYa_popTitle`,balanceDetailPop:`KFXqYa_balanceDetailPop`,heroTop:`KFXqYa_heroTop`,ubTagSuccess:`KFXqYa_ubTagSuccess`,ubStatGrid:`KFXqYa_ubStatGrid`,tableScroll:`KFXqYa_tableScroll`,ubNotes:`KFXqYa_ubNotes`,subscriptionFill:`KFXqYa_subscriptionFill`,heatmapCellEmpty:`KFXqYa_heatmapCellEmpty`,ubCardTitle:`KFXqYa_ubCardTitle`,floatModeBtnOn:`KFXqYa_floatModeBtnOn`,peakClose:`KFXqYa_peakClose`,siteRow:`KFXqYa_siteRow`,rdo:`KFXqYa_rdo`,affix:`KFXqYa_affix`,rangeToggle:`KFXqYa_rangeToggle`,ctlGroup:`KFXqYa_ctlGroup`,metricLabel:`KFXqYa_metricLabel`,providerGroup:`KFXqYa_providerGroup`,feeChipAlert:`KFXqYa_feeChipAlert`,tokenModelBar:`KFXqYa_tokenModelBar`,roundsBarColPeak:`KFXqYa_roundsBarColPeak`,chartBarPlaceholder:`KFXqYa_chartBarPlaceholder`,siteKindSite:`KFXqYa_siteKindSite`,heroSideItem:`KFXqYa_heroSideItem`,subscriptionTier:`KFXqYa_subscriptionTier`,popTagPrimary:`KFXqYa_popTagPrimary`,siteRowTitle:`KFXqYa_siteRowTitle`,peakDesc:`KFXqYa_peakDesc`,rowlineDrill:`KFXqYa_rowlineDrill`,currencyToggle:`KFXqYa_currencyToggle`,heatmapYearScroll:`KFXqYa_heatmapYearScroll`,heroLabel:`KFXqYa_heroLabel`,ubTablewrap:`KFXqYa_ubTablewrap`,na:`KFXqYa_na`,heroBudgetTrack:`KFXqYa_heroBudgetTrack`,peakCardOff:`KFXqYa_peakCardOff`,siteRowCost:`KFXqYa_siteRowCost`,heatmapRangeButton:`KFXqYa_heatmapRangeButton`,floatTarget:`KFXqYa_floatTarget`,plgVal:`KFXqYa_plgVal`,subscriptionHead:`KFXqYa_subscriptionHead`,ubExtraName:`KFXqYa_ubExtraName`,numCol:`KFXqYa_numCol`,chartCrosshair:`KFXqYa_chartCrosshair`,metricCell:`KFXqYa_metricCell`,heroBudget:`KFXqYa_heroBudget`,popModelLabel:`KFXqYa_popModelLabel`,chartEmpty:`KFXqYa_chartEmpty`,switch:`KFXqYa_switch`,ubExtraRow:`KFXqYa_ubExtraRow`,rowlineMuted:`KFXqYa_rowlineMuted`,pricingToggle:`KFXqYa_pricingToggle`,plgHead:`KFXqYa_plgHead`,plgLink:`KFXqYa_plgLink`,trendPanel:`KFXqYa_trendPanel`,providerGroupBalanceLabel:`KFXqYa_providerGroupBalanceLabel`,reconcileNotice:`KFXqYa_reconcileNotice`,feeCount:`KFXqYa_feeCount`,triggerPrimary:`KFXqYa_triggerPrimary`,shareSeg:`KFXqYa_shareSeg`,dashboardHead:`KFXqYa_dashboardHead`,shareItem:`KFXqYa_shareItem`,budgetInput:`KFXqYa_budgetInput`,rowlineDrillWrap:`KFXqYa_rowlineDrillWrap`,roundsBarColOff:`KFXqYa_roundsBarColOff`,popModelName:`KFXqYa_popModelName`,chartWrap:`KFXqYa_chartWrap`,plgNameRow:`KFXqYa_plgNameRow`,plgName:`KFXqYa_plgName`,heatmapRangeSwitch:`KFXqYa_heatmapRangeSwitch`,popHead:`KFXqYa_popHead`,shareDot:`KFXqYa_shareDot`,chartStack:`KFXqYa_chartStack`,balanceDetailLabel:`KFXqYa_balanceDetailLabel`,tokenModelPartOut:`KFXqYa_tokenModelPartOut`,peakDotPrimary:`KFXqYa_peakDotPrimary`,subscriptionTrack:`KFXqYa_subscriptionTrack`,modalFooter:`KFXqYa_modalFooter`,userPriceRemove:`KFXqYa_userPriceRemove`,dashboardModal:`KFXqYa_dashboardModal`,floatSubName:`KFXqYa_floatSubName`,tokenPanel:`KFXqYa_tokenPanel`,budgetFillOver:`KFXqYa_budgetFillOver`,chartTooltipSwatch:`KFXqYa_chartTooltipSwatch`,dashboardRight:`KFXqYa_dashboardRight`,ubPricepair:`KFXqYa_ubPricepair`,currencyButtonActive:`KFXqYa_currencyButtonActive`,ctlCol:`KFXqYa_ctlCol`,metricValuePrimary:`KFXqYa_metricValuePrimary`,kpiDetail:`KFXqYa_kpiDetail`,chartGrid:`KFXqYa_chartGrid`,ubCard:`KFXqYa_ubCard`,heroValue:`KFXqYa_heroValue`,subscriptionAuto:`KFXqYa_subscriptionAuto`,prog:`KFXqYa_prog`,providerGroupMeta:`KFXqYa_providerGroupMeta`,peakAlertIn:`KFXqYa_peakAlertIn`,heatmapYearMonth:`KFXqYa_heatmapYearMonth`,shareSegAssistant:`KFXqYa_shareSegAssistant`,kpiValue:`KFXqYa_kpiValue`,emptyRow:`KFXqYa_emptyRow`,triggerPopEmpty:`KFXqYa_triggerPopEmpty`,floatTargetLabel:`KFXqYa_floatTargetLabel`,rounds:`KFXqYa_rounds`,kpiTile:`KFXqYa_kpiTile`,switchOn:`KFXqYa_switchOn`,ubStatValue:`KFXqYa_ubStatValue`,feeChipPrimary:`KFXqYa_feeChipPrimary`,plgDesc:`KFXqYa_plgDesc`,siteRowMeta:`KFXqYa_siteRowMeta`,balanceDetailGrid:`KFXqYa_balanceDetailGrid`,subscriptionStatus:`KFXqYa_subscriptionStatus`,heatmapCell:`KFXqYa_heatmapCell`,tabNav:`KFXqYa_tabNav`,tabButton:`KFXqYa_tabButton`,tokenModelShareRow:`KFXqYa_tokenModelShareRow`,chartTooltipDate:`KFXqYa_chartTooltipDate`,dashboard:`KFXqYa_dashboard`,heroBudgetFillOver:`KFXqYa_heroBudgetFillOver`,triggerWrap:`KFXqYa_triggerWrap`,ubTag:`KFXqYa_ubTag`,healthIdle:`KFXqYa_healthIdle`,rowlist:`KFXqYa_rowlist`,heroReadout:`KFXqYa_heroReadout`,delta:`KFXqYa_delta`,heroGauge:`KFXqYa_heroGauge`,heroGaugeTrack:`KFXqYa_heroGaugeTrack`,heroSideValue:`KFXqYa_heroSideValue`,hero:`KFXqYa_hero`,heroGaugeCenter:`KFXqYa_heroGaugeCenter`,panel:`KFXqYa_panel`,panelHead:`KFXqYa_panelHead`,ubCardHead:`KFXqYa_ubCardHead`,ubStatLabel:`KFXqYa_ubStatLabel`,tabButtonActive:`KFXqYa_tabButtonActive`,subscriptionFillWarn:`KFXqYa_subscriptionFillWarn`,panelHint:`KFXqYa_panelHint`,exportBar:`KFXqYa_exportBar`,roundsAxis:`KFXqYa_roundsAxis`,reconcileIcon:`KFXqYa_reconcileIcon`,exportLabel:`KFXqYa_exportLabel`,rowlineName:`KFXqYa_rowlineName`,balanceDetailClose:`KFXqYa_balanceDetailClose`,heatmapYearWeekdays:`KFXqYa_heatmapYearWeekdays`,floatSubPlan:`KFXqYa_floatSubPlan`,peakCardCenter:`KFXqYa_peakCardCenter`,peakCount:`KFXqYa_peakCount`,exportButton:`KFXqYa_exportButton`,providerGroupList:`KFXqYa_providerGroupList`,heroCurrency:`KFXqYa_heroCurrency`,budgetOverPulse:`KFXqYa_budgetOverPulse`,heroBudgetFill:`KFXqYa_heroBudgetFill`,heatmapLegend:`KFXqYa_heatmapLegend`,peakCountSuccess:`KFXqYa_peakCountSuccess`,peakTagPrimary:`KFXqYa_peakTagPrimary`,rdoDot:`KFXqYa_rdoDot`,bucketOfficial:`KFXqYa_bucketOfficial`,balanceDetailHead:`KFXqYa_balanceDetailHead`,ubChipLabel:`KFXqYa_ubChipLabel`,triggerSub:`KFXqYa_triggerSub`,pricingTable:`KFXqYa_pricingTable`,floatSub:`KFXqYa_floatSub`,peakCountPrimary:`KFXqYa_peakCountPrimary`,userPriceInputNum:`KFXqYa_userPriceInputNum`,triggerPopSwitchCount:`KFXqYa_triggerPopSwitchCount`,setCardDesc:`KFXqYa_setCardDesc`,ubTagPromo:`KFXqYa_ubTagPromo`,feeSuffix:`KFXqYa_feeSuffix`,peakCard:`KFXqYa_peakCard`,subscriptionWindowLabel:`KFXqYa_subscriptionWindowLabel`,roundsFlagMark:`KFXqYa_roundsFlagMark`,roundsEmpty:`KFXqYa_roundsEmpty`,bucketSep:`KFXqYa_bucketSep`,subscriptionPct:`KFXqYa_subscriptionPct`,tokenModelParts:`KFXqYa_tokenModelParts`,ctlRowStretch:`KFXqYa_ctlRowStretch`,roundsBarLabel:`KFXqYa_roundsBarLabel`,roundsBars:`KFXqYa_roundsBars`,heatmapYearMonths:`KFXqYa_heatmapYearMonths`,ctlRow:`KFXqYa_ctlRow`,chartBar:`KFXqYa_chartBar`,triggerSpark:`KFXqYa_triggerSpark`,popTagSub:`KFXqYa_popTagSub`,heatmapFooter:`KFXqYa_heatmapFooter`,ubRate:`KFXqYa_ubRate`,heroGaugePct:`KFXqYa_heroGaugePct`,siteKindUnknown:`KFXqYa_siteKindUnknown`,ubTable:`KFXqYa_ubTable`,floatSubHead:`KFXqYa_floatSubHead`,ctlLabel:`KFXqYa_ctlLabel`,ubNotesTerm:`KFXqYa_ubNotesTerm`,siteRowName:`KFXqYa_siteRowName`,subscriptionExhausted:`KFXqYa_subscriptionExhausted`,feeItem:`KFXqYa_feeItem`,setCardMeta:`KFXqYa_setCardMeta`,triggerSparkBar:`KFXqYa_triggerSparkBar`,heroMain:`KFXqYa_heroMain`,dashboardBody:`KFXqYa_dashboardBody`,ubAlertLeft:`KFXqYa_ubAlertLeft`,roundsBar:`KFXqYa_roundsBar`,"billing-trigger":`KFXqYa_billing-trigger`,modelTable:`KFXqYa_modelTable`,rangeButtonActive:`KFXqYa_rangeButtonActive`,setCardHead:`KFXqYa_setCardHead`,popModelStatusLow:`KFXqYa_popModelStatusLow`,heroGaugeSvg:`KFXqYa_heroGaugeSvg`,ubExtraNote:`KFXqYa_ubExtraNote`,roundsBarCol:`KFXqYa_roundsBarCol`,peakDotSuccess:`KFXqYa_peakDotSuccess`,chartAxisLabel:`KFXqYa_chartAxisLabel`,triggerPop:`KFXqYa_triggerPop`,closeButton:`KFXqYa_closeButton`,chartLegend:`KFXqYa_chartLegend`,subscriptionMeta:`KFXqYa_subscriptionMeta`,userPriceRow:`KFXqYa_userPriceRow`,rangeButton:`KFXqYa_rangeButton`,ubCardSub:`KFXqYa_ubCardSub`,heroMeta:`KFXqYa_heroMeta`,inp:`KFXqYa_inp`,trigger:`KFXqYa_trigger`,ubTagNeutral:`KFXqYa_ubTagNeutral`,modelName:`KFXqYa_modelName`,tabPanelIn:`KFXqYa_tabPanelIn`,heatmapYearGrid:`KFXqYa_heatmapYearGrid`,vendorLogo:`KFXqYa_vendorLogo`,ubTagAlert:`KFXqYa_ubTagAlert`,modelDot:`KFXqYa_modelDot`,heatmap:`KFXqYa_heatmap`,reconcileDismiss:`KFXqYa_reconcileDismiss`,metricValueSuccess:`KFXqYa_metricValueSuccess`,siteRowCalls:`KFXqYa_siteRowCalls`,panelTitle:`KFXqYa_panelTitle`,heroGaugeLabel:`KFXqYa_heroGaugeLabel`,providerGroupName:`KFXqYa_providerGroupName`,progFill:`KFXqYa_progFill`,ubAlertNote:`KFXqYa_ubAlertNote`,rowlineRight:`KFXqYa_rowlineRight`,modelTableScroll:`KFXqYa_modelTableScroll`,uncataloguedTag:`KFXqYa_uncataloguedTag`,providerGroupBadge:`KFXqYa_providerGroupBadge`,peakCardCorner:`KFXqYa_peakCardCorner`,plgGrid:`KFXqYa_plgGrid`,ubModelName:`KFXqYa_ubModelName`,healthBadgeBad:`KFXqYa_healthBadgeBad`,balanceDetailValue:`KFXqYa_balanceDetailValue`,subscriptionFillOver:`KFXqYa_subscriptionFillOver`,roundsBarWrap:`KFXqYa_roundsBarWrap`,kpiGreen:`KFXqYa_kpiGreen`,rowline:`KFXqYa_rowline`,peakDot:`KFXqYa_peakDot`,heroGaugeArcOver:`KFXqYa_heroGaugeArcOver`,tokenModelPartIn:`KFXqYa_tokenModelPartIn`,popModelRow:`KFXqYa_popModelRow`,balanceDetailTitle:`KFXqYa_balanceDetailTitle`,currencyButton:`KFXqYa_currencyButton`,providerGroupBalance:`KFXqYa_providerGroupBalance`,peakCardPeak:`KFXqYa_peakCardPeak`,heatmapYearCell:`KFXqYa_heatmapYearCell`,healthBadge:`KFXqYa_healthBadge`,popModel:`KFXqYa_popModel`,ubTagError:`KFXqYa_ubTagError`,chartLegendBar:`KFXqYa_chartLegendBar`,userPriceInput:`KFXqYa_userPriceInput`,balanceCell:`KFXqYa_balanceCell`,subscriptionCard:`KFXqYa_subscriptionCard`,subscriptionGrid:`KFXqYa_subscriptionGrid`,subscriptionGoldFlow:`KFXqYa_subscriptionGoldFlow`,budgetFillWarn:`KFXqYa_budgetFillWarn`,chartSvg:`KFXqYa_chartSvg`,userPriceField:`KFXqYa_userPriceField`,roundsBarFlagged:`KFXqYa_roundsBarFlagged`};let w={"opencode-go":{type:`code`,subscription:{amount:10,currency:`USD`,period:`month`},tier:{amount:10,currency:`USD`,periodDays:7,label:`周额度 $30`}},opencode:{type:`code`,subscription:{amount:10,currency:`USD`,period:`month`},tier:{amount:10,currency:`USD`,periodDays:7,label:`周额度 $30`}},"kimi-coding":{type:`code`},"zai-coding-cn":{type:`code`},"zai-coding":{type:`code`},"qwen-token-plan":{type:`code`},"qwen-token-plan-cn":{type:`code`},"xiaomi-token-plan-ams":{type:`code`},"xiaomi-token-plan-cn":{type:`code`},"xiaomi-token-plan-sgp":{type:`code`},"volcengine-token-plan":{type:`code`},"ark-token-plan":{type:`code`},"doubao-token-plan":{type:`code`},minimax:{type:`code`},"minimax-cn":{type:`code`},"minimax-token-plan":{type:`code`},"minimax-token-plan-cn":{type:`code`},"hunyuan-token-plan":{type:`code`},"tencent-token-plan":{type:`code`},"hy-token-plan":{type:`code`},"xinghuo-token-plan":{type:`code`},"xfyun-coding":{type:`code`},"spark-coding":{type:`code`},"huawei-token-plan":{type:`code`},"pangu-token-plan":{type:`code`},"huawei-maas-token-plan":{type:`code`},"volcengine-agent-plan":{type:`code`},"ark-agent-plan":{type:`code`},"baidu-token-plan":{type:`code`},"ernie-token-plan":{type:`code`},"wenxin-token-plan":{type:`code`}},T={glm:`zai-coding-cn`,bigmodel:`zai-coding-cn`,zhipu:`zai-coding-cn`,zhipuai:`zai-coding-cn`,zai:`zai-coding`,ark:`volcengine-token-plan`,volcengine:`volcengine-token-plan`,doubao:`doubao-token-plan`,moonshot:`kimi-coding`,kimi:`kimi-coding`,xiaomi:`xiaomi-token-plan-cn`,opencode:`opencode-go`};function ne(e){return e===``?e:T[e]??e}function re(e){let t=w[ne(e)];return t?.type===`code`?t.tier:void 0}let ie=[{key:`deepseek-v4-flash`,input:.14,cacheHit:.0028,output:.28},{key:`deepseek-v4-pro`,input:.435,cacheHit:.003625,output:.87},{key:`gpt-5.6-sol`,input:5,cacheHit:.5,output:30},{key:`gpt-5.6-terra`,input:2,cacheHit:.2,output:12},{key:`gpt-5.6-luna`,input:.2,cacheHit:.02,output:1.2},{key:`glm-5.2`,input:1.4,cacheHit:.26,output:4.4},{key:`qwen3.8-max`,input:2,cacheHit:.21,output:6},{key:`kimi-k3`,input:2.82,cacheHit:.28,output:14.08},{key:`grok-4.6`,input:2,cacheHit:.5,output:6},{key:`gemini-2.5-pro`,input:1.25,cacheHit:.125,output:10}],E,ae,oe,se,D;function O(e){D=e.length>0?e:void 0}function ce(){return D}function k(e){return F(e)}function A(e,t){if(D===void 0)return;let n=k(e),r=N(n);if(t!==void 0){for(let e of D)if(e.origin!==void 0&&e.origin!==``&&(k(e.key)===n||N(e.key)===r)&&e.origin===t)return{input:e.input,cacheHit:e.cacheHit,output:e.output,...e.currency===void 0?{}:{currency:e.currency}}}for(let e of D)if((e.origin===void 0||e.origin===``)&&(k(e.key)===n||N(e.key)===r))return{input:e.input,cacheHit:e.cacheHit,output:e.output,...e.currency===void 0?{}:{currency:e.currency}}}function le(e){E=typeof e.rate==`number`&&Number.isFinite(e.rate)&&e.rate>0?e.rate:void 0,ae=e.prices,oe=e.extraModels}function ue(e){se=e}function de(){return E??6.79}function fe(){return{rate:de(),live:E!==void 0}}function pe(e){return e>=9&&e<12||e>=14&&e<18}function me(e){return e==null||!Number.isFinite(e)?`peak`:he(e)?`offPeak`:pe((new Date(e).getUTCHours()+8)%24)?`peak`:`offPeak`}function he(e){let t=new Date(e+288e5).getUTCDay();return t===0||t===6}function ge(e){let t=new Date(e+288e5),n=t.getUTCDay(),r=t.getUTCHours()*36e5+t.getUTCMinutes()*6e4+t.getUTCSeconds()*1e3+t.getUTCMilliseconds();return(n===0?1:2)*864e5-r+324e5}let _e=[540,720,840,1080];function ve(e){return((e+288e5)%864e5+864e5)%864e5}function ye(e){if(he(e))return{tier:`offPeak`,nextSwitchInMs:ge(e)};let t=ve(e);for(let n of _e){let r=n*6e4;if(t<r)return{tier:me(e),nextSwitchInMs:r-t}}let n=_e[0]??0;return{tier:me(e),nextSwitchInMs:864e5-t+n*6e4}}function be(e,t){let{nextSwitchInMs:n}=ye(e);if(n>t)return null;let r=e+n;return{entering:me(r),atMs:r}}function j(e){let t=Math.max(1,Math.ceil(e/6e4)),n=Math.floor(t/60),r=t%60;return n>0?`${n}h${String(r).padStart(2,`0`)}m`:`${r}m`}let M=[{key:`flash`,name:`DeepSeek V4 Flash`,provider:`DeepSeek`,colorVar:`dsw-static-blue-500`,price:{currency:`CNY`,input:3,cacheHit:.1,output:9,offPeak:{input:1.5,cacheHit:.05,output:4.5}},peakHours:`09:00-12:00 / 14:00-18:00`},{key:`flash-vision-exp`,name:`DeepSeek V4 Flash Vision (Exp)`,provider:`DeepSeek`,colorVar:`dsw-static-blue-500`,price:{currency:`CNY`,input:3,cacheHit:.1,output:9,offPeak:{input:1.5,cacheHit:.05,output:4.5}},peakHours:`09:00-12:00 / 14:00-18:00`},{key:`pro`,name:`DeepSeek V4 Pro`,provider:`DeepSeek`,colorVar:`dsw-static-deepseek-500`,price:{currency:`CNY`,input:9,cacheHit:.3,output:27,offPeak:{input:4.5,cacheHit:.15,output:13.5}},peakHours:`09:00-12:00 / 14:00-18:00`},{key:`glm`,name:`GLM-5.2`,provider:`智谱 AI`,colorVar:`dsw-static-blue-600`,price:{currency:`CNY`,input:8,cacheHit:2,output:28}},{key:`glm-5.3`,name:`GLM-5.3`,provider:`智谱 AI`,colorVar:`dsw-static-blue-500`,price:{currency:`CNY`,input:8,cacheHit:2,output:28}},{key:`glm-5.3-flash`,name:`GLM-5.3-Flash`,provider:`智谱 AI`,colorVar:`dsw-static-blue-300`,price:{currency:`CNY`,input:.8,cacheHit:.23,output:2.8},promo:{factor:.5,endsAtMs:Date.UTC(2026,8,8,16,0,0),note:`限时 5 折`}},{key:`glm-4.6`,name:`GLM-4.6`,provider:`智谱 AI`,colorVar:`dsw-static-blue-400`,price:{currency:`CNY`,input:4,cacheHit:.8,output:16}},{key:`glm-4.5-air`,name:`GLM-4.5-Air`,provider:`智谱 AI`,colorVar:`dsw-static-blue-300`,price:{currency:`CNY`,input:.8,cacheHit:.16,output:2}},{key:`glm-4.7`,name:`GLM-4.7`,provider:`智谱 AI`,colorVar:`dsw-static-blue-400`,price:{currency:`CNY`,input:4,cacheHit:1,output:16},estimated:!0},{key:`glm-5-turbo`,name:`GLM-5-Turbo`,provider:`智谱 AI`,colorVar:`dsw-static-blue-500`,price:{currency:`CNY`,input:5,cacheHit:1.2,output:22}},{key:`glm-5.1`,name:`GLM-5.1`,provider:`智谱 AI`,colorVar:`dsw-static-blue-600`,price:{currency:`CNY`,input:6,cacheHit:1.2,output:24}},{key:`glm-5v-turbo`,name:`GLM-5V-Turbo`,provider:`智谱 AI`,colorVar:`dsw-static-blue-300`,price:{currency:`CNY`,input:5,cacheHit:1.2,output:22}},{key:`qwen-3.8-max`,name:`Qwen3.8 Max`,provider:`阿里通义`,colorVar:`dsw-static-blue-600`,price:{currency:`CNY`,input:12,cacheHit:1.5,output:36},extraRows:[{label:`显式缓存创建`,input:15},{label:`显式缓存命中`,input:1},{label:`Batch File`,input:6,output:18,note:`长期半价`},{label:`Batch Chat`,input:12,output:36,note:`与标准价一致`}]},{key:`qwen-3.8-flash`,name:`Qwen3.8 Flash`,provider:`阿里通义`,colorVar:`dsw-static-blue-400`,price:{currency:`CNY`,input:1,cacheHit:.1,output:3},extraRows:[{label:`显式缓存创建`,input:1.25},{label:`显式缓存命中`,input:.1},{label:`Batch File`,input:.5,output:1.5,note:`长期半价`},{label:`Batch Chat`,input:1,output:3,note:`与标准价一致`}]},{key:`qwen-max`,name:`Qwen3.7-Max`,provider:`阿里通义`,colorVar:`dsw-static-blue-300`,price:{currency:`CNY`,input:12,cacheHit:1.2,output:36},promo:{factor:.5,note:`限时 5 折`},extraRows:[{label:`显式缓存创建`,input:15},{label:`显式缓存命中`,input:1.2},{label:`Batch File`,input:6,output:18,note:`长期半价`},{label:`Batch Chat`,input:12,output:36,note:`与标准价一致`}]},{key:`qwen-plus`,name:`Qwen3.5-Plus`,provider:`阿里通义`,colorVar:`dsw-static-blue-500`,price:{currency:`CNY`,input:.8,cacheHit:.08,output:4.8},extraRows:[{label:`显式缓存创建`,input:1},{label:`显式缓存命中`,input:.08},{label:`Batch File`,input:.4,output:2.4,note:`长期半价`},{label:`Batch Chat`,input:.8,output:4.8,note:`与标准价一致`}]},{key:`qwen-flash`,name:`Qwen3.5-Flash`,provider:`阿里通义`,colorVar:`dsw-static-blue-400`,price:{currency:`CNY`,input:.2,cacheHit:.02,output:2},extraRows:[{label:`显式缓存创建`,input:.25},{label:`显式缓存命中`,input:.02}]},{key:`doubao`,name:`Doubao Seed-2.0 Pro`,provider:`字节豆包`,colorVar:`dsw-static-red-500`,price:{currency:`CNY`,input:3.2,cacheHit:.64,output:16}},{key:`doubao-mini`,name:`Doubao Seed-2.0 Mini`,provider:`字节豆包`,colorVar:`dsw-static-red-300`,price:{currency:`CNY`,input:.2,cacheHit:.02,output:2}},{key:`doubao-1.6`,name:`Doubao Seed-1.6`,provider:`字节豆包`,colorVar:`dsw-static-red-400`,price:{currency:`CNY`,input:.8,cacheHit:0,output:8}},{key:`doubao-seed-evolving`,name:`Doubao-Seed-Evolving`,provider:`字节豆包`,colorVar:`dsw-static-red-500`,price:{currency:`CNY`,input:6,cacheHit:1.2,output:30}},{key:`doubao-seed-2.1-pro`,name:`Doubao Seed-2.1 Pro`,provider:`字节豆包`,colorVar:`dsw-static-red-400`,price:{currency:`CNY`,input:6,cacheHit:1.2,output:30}},{key:`doubao-seed-2.1-turbo`,name:`Doubao Seed-2.1 Turbo`,provider:`字节豆包`,colorVar:`dsw-static-red-300`,price:{currency:`CNY`,input:3,cacheHit:.6,output:15}},{key:`kimi`,name:`Kimi K2.7 Code`,provider:`月之暗面`,colorVar:`dsw-static-neutral-bluish-700`,price:{currency:`CNY`,input:6.5,cacheHit:1.3,output:27}},{key:`kimi-k2.7-hs`,name:`Kimi K2.7 Code HighSpeed`,provider:`月之暗面`,colorVar:`dsw-static-neutral-bluish-600`,price:{currency:`CNY`,input:13,cacheHit:2.6,output:54}},{key:`kimi-k2.6`,name:`Kimi K2.6`,provider:`月之暗面`,colorVar:`dsw-static-neutral-bluish-500`,price:{currency:`CNY`,input:6.5,cacheHit:1.1,output:27}},{key:`kimi-k3`,name:`Kimi K3`,provider:`月之暗面`,colorVar:`dsw-static-neutral-bluish-500`,price:{currency:`CNY`,input:20,cacheHit:2,output:100}},{key:`mimo-v2.5`,name:`MiMo V2.5`,provider:`小米`,colorVar:`dsw-static-green-400`,price:{currency:`CNY`,input:1,cacheHit:.02,output:2}},{key:`mimo-v2.5-pro`,name:`MiMo V2.5 Pro`,provider:`小米`,colorVar:`dsw-static-green-400`,price:{currency:`CNY`,input:3,cacheHit:.025,output:6}},{key:`minimax`,name:`MiniMax-M3`,provider:`MiniMax`,colorVar:`dsw-static-amber-500`,price:{currency:`CNY`,input:2.1,cacheHit:.42,output:8.4}},{key:`minimax-m2.7`,name:`MiniMax-M2.7`,provider:`MiniMax`,colorVar:`dsw-static-amber-400`,price:{currency:`CNY`,input:2.1,cacheHit:.42,output:8.4}},{key:`minimax-m2.7-highspeed`,name:`MiniMax-M2.7-highspeed`,provider:`MiniMax`,colorVar:`dsw-static-amber-500`,price:{currency:`CNY`,input:4.2,cacheHit:.42,output:16.8}},{key:`ernie`,name:`ERNIE-5.1`,provider:`百度文心`,colorVar:`dsw-static-blue-300`,price:{currency:`CNY`,input:4,cacheHit:.4,output:18}},{key:`hunyuan`,name:`混元 Hy3`,provider:`腾讯混元`,colorVar:`dsw-static-amber-400`,price:{currency:`CNY`,input:1,cacheHit:.25,output:4}},{key:`hunyuan-t1`,name:`混元 T1`,provider:`腾讯混元`,colorVar:`dsw-static-amber-300`,price:{currency:`CNY`,input:1,cacheHit:.1,output:4}},{key:`yi`,name:`Yi-Lightning`,provider:`零一万物`,colorVar:`dsw-static-green-500`,price:{currency:`CNY`,input:.99,cacheHit:.1,output:.99}},{key:`step`,name:`Step 3.7 Flash`,provider:`阶跃星辰`,colorVar:`dsw-static-neutral-bluish-400`,price:{currency:`CNY`,input:1.35,cacheHit:.27,output:8.1}},{key:`spark`,name:`Spark 4.0 Ultra`,provider:`科大讯飞`,colorVar:`dsw-static-green-400`,price:{currency:`CNY`,input:5,cacheHit:.5,output:10},estimated:!0},{key:`sensenova`,name:`SenseNova 6.5`,provider:`商汤`,colorVar:`dsw-static-red-400`,price:{currency:`CNY`,input:4.5,cacheHit:.45,output:9},estimated:!0},{key:`baichuan`,name:`Baichuan M3-Plus`,provider:`百川智能`,colorVar:`dsw-static-neutral-bluish-500`,price:{currency:`CNY`,input:5,cacheHit:.5,output:9}},{key:`gpt-5.6-sol`,name:`GPT-5.6 Sol`,provider:`OpenAI`,colorVar:`dsw-static-green-500`,price:{currency:`USD`,input:5,cacheHit:.5,output:30}},{key:`gpt-5.6-terra`,name:`GPT-5.6 Terra`,provider:`OpenAI`,colorVar:`dsw-static-green-400`,price:{currency:`USD`,input:2,cacheHit:.2,output:12}},{key:`gpt-5.6-luna`,name:`GPT-5.6 Luna`,provider:`OpenAI`,colorVar:`dsw-static-green-500`,price:{currency:`USD`,input:.2,cacheHit:.02,output:1.2}},{key:`gemini-pro`,name:`Gemini 3.1 Pro`,provider:`Google`,colorVar:`dsw-static-blue-600`,price:{currency:`USD`,input:2,cacheHit:.2,output:12,offPeak:{input:1,cacheHit:.1,output:6}},peakHours:`Standard / Flex`,tierSemantics:`latency`},{key:`gemini-flash`,name:`Gemini 3.6 Flash`,provider:`Google`,colorVar:`dsw-static-blue-400`,price:{currency:`USD`,input:1.5,cacheHit:.15,output:7.5,offPeak:{input:.75,cacheHit:.075,output:3.75}},peakHours:`Standard / Flex`,tierSemantics:`latency`},{key:`grok`,name:`Grok 4.6`,provider:`xAI`,colorVar:`dsw-static-neutral-bluish-700`,price:{currency:`USD`,input:2,cacheHit:.5,output:6}},{key:`grok-4.3`,name:`Grok 4.3`,provider:`xAI`,colorVar:`dsw-static-neutral-bluish-500`,price:{currency:`USD`,input:1.25,cacheHit:.2,output:2.5}},{key:`llama`,name:`Llama 4 Maverick`,provider:`Meta`,colorVar:`dsw-static-red-500`,price:{currency:`USD`,input:.2,cacheHit:.05,output:.6}},{key:`llama-scout`,name:`Llama 4 Scout`,provider:`Meta`,colorVar:`dsw-static-red-400`,price:{currency:`USD`,input:.1,cacheHit:.025,output:.3}},{key:`claude-opus-4-6`,name:`Claude Opus 4.6`,provider:`Anthropic`,colorVar:`dsw-static-red-500`,price:{currency:`USD`,input:5,cacheHit:.5,output:25}},{key:`claude-sonnet-4-6`,name:`Claude Sonnet 4.6`,provider:`Anthropic`,colorVar:`dsw-static-red-400`,price:{currency:`USD`,input:3,cacheHit:.3,output:15}},{key:`claude-haiku-4-5`,name:`Claude Haiku 4.5`,provider:`Anthropic`,colorVar:`dsw-static-red-300`,price:{currency:`USD`,input:1,cacheHit:.1,output:5}},{key:`claude-opus-5`,name:`Claude Opus 5`,provider:`Anthropic`,colorVar:`dsw-static-red-500`,price:{currency:`USD`,input:5,cacheHit:.5,output:25}},{key:`claude-sonnet-5`,name:`Claude Sonnet 5`,provider:`Anthropic`,colorVar:`dsw-static-red-400`,price:{currency:`USD`,input:2,cacheHit:.2,output:10}},{key:`mistral-large-2512`,name:`Mistral Large 3`,provider:`Mistral AI`,colorVar:`dsw-static-violet-500`,price:{currency:`USD`,input:.5,cacheHit:.05,output:1.5}},{key:`mistral-small-2603`,name:`Mistral Small 4`,provider:`Mistral AI`,colorVar:`dsw-static-violet-400`,price:{currency:`USD`,input:.15,cacheHit:.015,output:.6}},{key:`ministral-8b-latest`,name:`Ministral 8B`,provider:`Mistral AI`,colorVar:`dsw-static-violet-300`,price:{currency:`USD`,input:.1,cacheHit:.01,output:.1}},{key:`command-a-03-2025`,name:`Command A`,provider:`Cohere`,colorVar:`dsw-static-cyan-500`,price:{currency:`USD`,input:2.5,cacheHit:.25,output:10}},{key:`command-r-08-2024`,name:`Command R`,provider:`Cohere`,colorVar:`dsw-static-cyan-400`,price:{currency:`USD`,input:.15,cacheHit:.015,output:.6}},{key:`longcat-2.0`,name:`LongCat 2.0`,provider:`美团`,colorVar:`dsw-static-amber-500`,price:{currency:`CNY`,input:4,cacheHit:.8,output:16},estimated:!0},{key:`minicpm-v-4.5`,name:`MiniCPM-V 4.5`,provider:`面壁智能`,colorVar:`dsw-static-green-500`,price:{currency:`CNY`,input:1,cacheHit:.2,output:4},estimated:!0},{key:`ernie-4.5`,name:`ERNIE-4.5 300B`,provider:`百度文心`,colorVar:`dsw-static-blue-300`,price:{currency:`CNY`,input:2,cacheHit:.4,output:8},estimated:!0},{key:`dots-3-note-preview`,name:`Dots3-Note Preview`,provider:`小红书`,colorVar:`dsw-static-red-500`,price:{currency:`CNY`,input:2,cacheHit:.4,output:8},estimated:!0},{key:`qwen3.6-max`,name:`Qwen3.6 Max`,provider:`阿里通义`,colorVar:`dsw-static-orange-500`,price:{currency:`CNY`,input:9,cacheHit:.9,output:54},extraRows:[{label:`显式缓存创建`,input:11.25},{label:`显式缓存命中`,input:.9}]},{key:`qwen3-coder-plus`,name:`Qwen3-Coder Plus`,provider:`阿里通义`,colorVar:`dsw-static-orange-400`,price:{currency:`CNY`,input:4,cacheHit:.8,output:16},extraRows:[{label:`显式缓存创建`,input:5},{label:`显式缓存命中`,input:.4}]},{key:`qwen3-coder`,name:`Qwen3-Coder 480B`,provider:`阿里通义`,colorVar:`dsw-static-orange-300`,price:{currency:`CNY`,input:4,cacheHit:.8,output:16},estimated:!0},{key:`glm-4.5-x`,name:`GLM-4.5-X`,provider:`智谱 AI`,colorVar:`dsw-static-blue-400`,price:{currency:`CNY`,input:4,cacheHit:1,output:16},estimated:!0},{key:`glm-5.2-fast`,name:`GLM-5.2 Fast`,provider:`智谱 AI`,colorVar:`dsw-static-blue-300`,price:{currency:`CNY`,input:6,cacheHit:1.2,output:24},estimated:!0},{key:`kimi-k3-fast`,name:`Kimi K3 Fast`,provider:`月之暗面`,colorVar:`dsw-static-cyan-400`,price:{currency:`CNY`,input:20,cacheHit:2,output:100},estimated:!0},{key:`kimi-k2.7-code-fast`,name:`Kimi K2.7 Code Fast`,provider:`月之暗面`,colorVar:`dsw-static-cyan-400`,price:{currency:`CNY`,input:6.5,cacheHit:1.3,output:27},estimated:!0},{key:`kimi-k2.6-fast`,name:`Kimi K2.6 Fast`,provider:`月之暗面`,colorVar:`dsw-static-cyan-300`,price:{currency:`CNY`,input:6.5,cacheHit:1.1,output:27},estimated:!0},{key:`kimi-k2.6-turbo`,name:`Kimi K2.6 Turbo`,provider:`月之暗面`,colorVar:`dsw-static-cyan-300`,price:{currency:`CNY`,input:6.5,cacheHit:1.1,output:27},estimated:!0},{key:`kimi-k2-thinking-turbo`,name:`Kimi K2 Thinking Turbo`,provider:`月之暗面`,colorVar:`dsw-static-cyan-300`,price:{currency:`CNY`,input:8,cacheHit:1,output:58}},{key:`doubao-seed-2.0-code`,name:`Doubao Seed-2.0 Code`,provider:`字节豆包`,colorVar:`dsw-static-red-500`,price:{currency:`CNY`,input:3.2,cacheHit:.64,output:16}},{key:`doubao-seed-2.0-lite`,name:`Doubao Seed-2.0 Lite`,provider:`字节豆包`,colorVar:`dsw-static-red-300`,price:{currency:`CNY`,input:.6,cacheHit:.12,output:3.6}},{key:`other`,name:`其他模型`,provider:`Custom`,colorVar:`dsw-static-neutral-bluish-500`,price:{currency:`CNY`,input:0,cacheHit:0,cacheMiss:0,output:0}}],xe={"deepseek-v4-flash":`flash`,"deepseek-v4-flash-vision-exp":`flash-vision-exp`,"deepseek-v4-pro":`pro`,"glm-5.2":`glm`,"glm-4.5-air":`glm-4.5-air`,"glm-4.5air":`glm-4.5-air`,"glm-4.7":`glm-4.7`,"glm-5-turbo":`glm-5-turbo`,"glm-5.1":`glm-5.1`,"glm-5.3-flash":`glm-5.3-flash`,"glm-5v-turbo":`glm-5v-turbo`,"glm-5v.1":`glm-5v-turbo`,"claude-opus-4-6":`claude-opus-4-6`,"claude-opus-4.6":`claude-opus-4-6`,"claude-sonnet-4-6":`claude-sonnet-4-6`,"claude-sonnet-4.6":`claude-sonnet-4-6`,"claude-haiku-4-5":`claude-haiku-4-5`,"claude-haiku-4.5":`claude-haiku-4-5`,"claude-opus-5":`claude-opus-5`,"claude-sonnet-5":`claude-sonnet-5`,"mistral-large-2512":`mistral-large-2512`,"mistral-large-3":`mistral-large-2512`,"mistral-small-2603":`mistral-small-2603`,"mistral-small-4":`mistral-small-2603`,"ministral-8b-latest":`ministral-8b-latest`,"ministral-8b":`ministral-8b-latest`,"command-a-03-2025":`command-a-03-2025`,"command-a":`command-a-03-2025`,"command-r-08-2024":`command-r-08-2024`,"command-r":`command-r-08-2024`,"longcat-2.0":`longcat-2.0`,"longcat-2":`longcat-2.0`,"minicpm-v-4.5":`minicpm-v-4.5`,"minicpm-v-4.5-thinking":`minicpm-v-4.5`,"ernie-4.5":`ernie-4.5`,"ernie-4.5-300b":`ernie-4.5`,"dots-3-note-preview":`dots-3-note-preview`,"dots-3-note":`dots-3-note-preview`,"dots3-note-preview":`dots-3-note-preview`,"rednote-dots3":`dots-3-note-preview`,"doubao-seed-evolving":`doubao-seed-evolving`,"doubao-seed-evolve":`doubao-seed-evolving`,"doubao-seed-2.1-pro":`doubao-seed-2.1-pro`,"doubao-seed-2.1-pro-290000":`doubao-seed-2.1-pro`,"doubao-seed-2.1-turbo":`doubao-seed-2.1-turbo`,"doubao-seed-2-1-turbo":`doubao-seed-2.1-turbo`,"qwen3.8-max":`qwen-3.8-max`,"qwen3.8-flash":`qwen-3.8-flash`,"qwen3.7-max":`qwen-max`,"qwen3.6-max":`qwen3.6-max`,"qwen3.6-max-preview":`qwen3.6-max`,"qwen3-coder-plus":`qwen3-coder-plus`,"qwen3-coder":`qwen3-coder`,"qwen3-coder-480b":`qwen3-coder`,"glm-4.5-x":`glm-4.5-x`,"glm-4.5x":`glm-4.5-x`,"glm-5.2-fast":`glm-5.2-fast`,"glm-5.2f":`glm-5.2-fast`,"kimi-k3-fast":`kimi-k3-fast`,"kimi-k3f":`kimi-k3-fast`,"kimi-k2.7-code-fast":`kimi-k2.7-code-fast`,"kimi-k2.7-code-f":`kimi-k2.7-code-fast`,"kimi-k2.6-fast":`kimi-k2.6-fast`,"kimi-k2.6-turbo":`kimi-k2.6-turbo`,"kimi-k2-thinking-turbo":`kimi-k2-thinking-turbo`,"doubao-seed-2.0-code":`doubao-seed-2.0-code`,"doubao-seed-2-0-code":`doubao-seed-2.0-code`,"doubao-seed-2.0-lite":`doubao-seed-2.0-lite`,"doubao-seed-2-0-lite":`doubao-seed-2.0-lite`,"qwen-max":`qwen-max`,"hunyuan-t1":`hunyuan-t1`,"step-3.7-flash":`step`,"seed-2.0-mini":`doubao-mini`,k3:`kimi-k3`,"kimi-k3":`kimi-k3`,"minimax-m1":`minimax`,"minimax-m2":`minimax`,"minimax-m3":`minimax`,"minimax-m2.7":`minimax-m2.7`,"minimax-m2.7-highspeed":`minimax-m2.7-highspeed`,"minimax-m2.7-high-speed":`minimax-m2.7-highspeed`,"minimax-m2-7":`minimax-m2.7`,"minimax-m2-7-highspeed":`minimax-m2.7-highspeed`,"minimax-m2-7-high-speed":`minimax-m2.7-highspeed`};function N(e){return String(e).toLowerCase().replace(/\([^)]*\)/g,``).replace(/[^a-z0-9]+/g,``)}let P=(()=>{let e=new Map,t=(t,n)=>{let r=N(t);r!==``&&!e.has(r)&&e.set(r,n)};for(let e of M)t(e.key,e.key);for(let[e,n]of Object.entries(xe))t(e,n);for(let e of ie)t(e.key,e.key);return e})();function F(e){let t=xe[e]??e;if(t===e){let t=N(e);if(t!==``){let e=P.get(t);if(e!==void 0)return e;let n=(oe??[]).find(e=>N(e.key)===t);if(n!==void 0)return n.key}}return t}function I(e){let t=F(e),n=ae?.[t];if(n!==void 0)return n;let r=ie.find(e=>e.key.toLowerCase()===t.toLowerCase());if(r!==void 0)return{input:r.input,cacheHit:r.cacheHit,output:r.output}}function Se(e){let t=F(e),n=M.find(e=>e.key===t),r=oe?.find(e=>e.key===t),i=n??(r===void 0?(()=>{let e=M.at(-1);if(e!==void 0)return e;throw Error(`MODEL_CATALOG must not be empty`)})():L(r)),a=A(t);if(a!==void 0)return{...i,userPriced:!0,price:{currency:a.currency??`CNY`,input:a.input,cacheHit:a.cacheHit,output:a.output}};let o=I(t);return o===void 0?i:{...i,price:{currency:`USD`,input:o.input,cacheHit:o.cacheHit,output:o.output}}}function L(e){return{key:e.key,name:e.name,provider:e.provider,colorVar:`dsw-static-neutral-400`,price:{currency:`USD`,input:e.price.input,cacheHit:e.price.cacheHit,output:e.price.output}}}function Ce(e,t){let n=e.endsAtMs!==void 0&&t>=e.endsAtMs;return Number.isFinite(t)&&!n&&e.factor>0&&e.factor<1}function we(e,t){let{promo:n}=e;if(n===void 0||!Ce(n,t))return e;let r=e=>({input:e.input*n.factor,cacheHit:e.cacheHit*n.factor,...e.cacheMiss===void 0?{}:{cacheMiss:e.cacheMiss*n.factor},output:e.output*n.factor});return{...e,price:{...r(e.price),currency:e.price.currency,...e.price.offPeak===void 0?{}:{offPeak:r(e.price.offPeak)}}}}function Te(e=Date.now()){let t=[...M.map(t=>we(t,e))],n=new Set(t.map(e=>e.key.toLowerCase())),r=new Set(t.map(e=>N(e.key)));for(let e of se??[]){let i=e.id.toLowerCase();if((()=>{let t=F(e.id);return M.find(e=>e.key===t)})()!==void 0)continue;let a=N(e.id);if(n.has(i)||a!==``&&r.has(a))continue;let o=(oe??[]).find(e=>N(e.key)===a),s;if(o!==void 0)s=L(o),e.name!==void 0&&e.name!==``&&(s={...s,name:e.name});else{let t=I(i);s=t===void 0?{key:F(e.id),name:e.name??e.id,provider:e.provider,colorVar:`dsw-static-neutral-400`,price:{currency:`USD`,input:0,cacheHit:0,output:0},uncatalogued:!0}:{key:i,name:e.name??e.id,provider:e.provider,colorVar:`dsw-static-neutral-400`,price:{currency:`USD`,input:t.input,cacheHit:t.cacheHit,output:t.output}}}n.add(s.key.toLowerCase()),a!==``&&r.add(a),t.push(s)}return t.map(e=>{let t=A(e.key);return t===void 0?e:{...e,userPriced:!0,price:{currency:t.currency??`CNY`,input:t.input,cacheHit:t.cacheHit,output:t.output}}})}function Ee(e){let t=getComputedStyle(document.documentElement).getPropertyValue(`--${e}`).trim();return t===``?`#8b95a3`:t}function De(e,t,n){let r=t.cacheMiss>0?t.cacheMiss:Math.max(0,t.input-t.cacheHit),i=Math.min(t.cacheHit,t.input),a=(r*(e.cacheMiss??e.input)+i*e.cacheHit+t.output*e.output)/1e6;return n===`USD`?a*de():a}function Oe(e,t,n=.5,r=Date.now()){let i=we(e,r),a=De(i.price,t,i.price.currency),o=i.price.offPeak===void 0?a:De(i.price.offPeak,t,i.price.currency);return a*n+o*(1-n)}function R(e){let t=de();return t>0?e/t:e}function z(e,t=`cny`){let n=Number(e);if(!Number.isFinite(n))return t===`cny`?`¥0`:`$0`;let r=t===`cny`?`¥`:`$`;return n<=0?`${r}0`:n>=1e3?`${r}${n.toFixed(0)}`:n>=10?`${r}${n.toFixed(1)}`:n>=.1?`${r}${n.toFixed(2)}`:`${r}${n.toFixed(3)}`}function ke(e,t=`CNY`){return e===0?`免费`:t===`USD`?e>=10?`$${e.toFixed(1)}`:`$${e.toFixed(2)}`:e>=10?`¥${e.toFixed(1)}`:`¥${e.toFixed(2)}`}function Ae(e,t,n,r){return r<=0||!Number.isFinite(r)||t===(n===`usd`?`USD`:`CNY`)?e:n===`usd`?e/r:e*r}function B(e){return e>=1e9?`${(e/1e9).toFixed(2)}B`:e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(0)}K`:String(e)}function je(e){let t=Number(e);return Number.isFinite(t)?`${t.toFixed(1)}%`:`0.0%`}let V={top:18,right:40,bottom:26,left:46};function Me(e){let[,t,n]=e.split(`-`);return`${Number(t)}/${Number(n)}`}function H(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(Math.round(e))}function Ne(e,t){let n=[];for(let r=0;r<e;r+=t)n.push(r);return e>0&&n[n.length-1]!==e-1&&n.push(e-1),n}let Pe={key:`__total__`,name:`总计`,color:``};function Fe({data:e,models:t=[],currency:n=`cny`,metric:i=`cost`}){let[o,s]=(0,r.useState)(null),c=e=>z(n===`usd`?R(e):e,n),l=e=>i===`tokens`?H(e):c(e),u=e=>i===`tokens`?e.tokens??0:e.cost,d=(0,r.useMemo)(()=>{let n=e.length;if(n===0)return null;let r=680-V.left-V.right,a=220-V.top-V.bottom,o=e=>n===1?V.left+r/2:V.left+r*e/(n-1),s=Math.max(...i===`tokens`?e.map(e=>e.tokens??0):e.map(e=>Math.max(e.cost,Object.values(e.byModel??{}).reduce((e,t)=>e+t,0))),1e-4),c=e=>V.top+a-e/s*a,l=Math.max(...e.map(e=>e.calls),1),d=e=>V.top+a-e/l*a,f=r/n,p=Math.min(18,f*.6);return{n,plotW:r,plotH:a,inner:o,yCost:c,yCalls:d,barW:p,bars:e.flatMap((e,n)=>{let r=o(n)-p/2;if(t.length===0||i===`tokens`)return[{date:e.date,model:Pe,x:r,base:0,value:u(e),topRounded:!0}];let a=null;for(let n of t)(e.byModel?.[n.key]??0)>0&&(a=n.key);let s=0;return t.map(t=>{let n=e.byModel?.[t.key]??0,i={date:e.date,model:t,x:r,base:s,value:n,topRounded:t.key===a};return s+=n,i})}),costTicks:[0,.25,.5,.75,1].map(e=>s*e).reverse(),callsTicks:[0,.25,.5,.75,1].map(e=>l*e).reverse(),linePath:e.map((e,t)=>{let n=d(e.calls);return`${t===0?`M`:`L`}${o(t)} ${n}`}).join(` `)}},[e,t,i]);if(d===null)return(0,a.jsx)(`div`,{className:C.chartEmpty,children:`暂无趋势数据`});let{n:f,plotW:p,plotH:m,inner:h,yCost:g,yCalls:_,barW:v,bars:y,costTicks:ee,callsTicks:te,linePath:b}=d,x=o===null?void 0:e[o],S=Ne(f,Math.max(1,Math.ceil(f/8)));return(0,a.jsxs)(`div`,{className:C.chartWrap,children:[(0,a.jsxs)(`svg`,{viewBox:`0 0 680 220`,className:C.chartSvg,role:`img`,"aria-label":`Daily cost by model and total calls`,onMouseLeave:()=>{s(null)},onMouseMove:e=>{let t=e.currentTarget.getBoundingClientRect(),n=((e.clientX-t.left)/t.width*680-V.left)/p,r=Math.round(n*(f-1));s(Math.min(Math.max(r,0),f-1))},children:[ee.map((e,t)=>{let n=g(e);return(0,a.jsxs)(`g`,{children:[(0,a.jsx)(`line`,{x1:V.left,x2:680-V.right,y1:n,y2:n,className:C.chartGrid}),(0,a.jsx)(`text`,{x:V.left-8,y:n+3,textAnchor:`end`,className:C.chartAxisLabel,children:l(e)})]},`cost-${t}`)}),y.map(t=>{if(t.value>0)return(0,a.jsx)(`rect`,{x:t.x,y:g(t.base+t.value),width:v,height:g(t.base)-g(t.base+t.value),rx:t.topRounded?2:0,className:t.model.color===``?C.chartBar:C.chartStack,style:t.model.color===``?void 0:{fill:t.model.color}},`${t.date}-${t.model.key}`);let n=e.find(e=>e.date===t.date);return n!==void 0&&n.calls>0&&t.base===0?(0,a.jsx)(`rect`,{x:t.x,y:g(0)-1,width:v,height:1,rx:0,className:C.chartBarPlaceholder},`${t.date}-${t.model.key}-placeholder`):null}),(0,a.jsx)(`path`,{d:b,fill:`none`,className:C.chartLine}),te.map((e,t)=>{let n=_(e);return(0,a.jsx)(`text`,{x:680-V.right+8,y:n+3,textAnchor:`start`,className:C.chartAxisLabel,children:H(e)},`calls-${t}`)}),S.map(t=>{let n=e[t];return n===void 0?null:(0,a.jsx)(`text`,{x:h(t),y:214,textAnchor:`middle`,className:C.chartAxisLabel,children:Me(n.date)},n.date)}),o!==null&&(0,a.jsx)(`line`,{x1:h(o),x2:h(o),y1:V.top,y2:V.top+m,className:C.chartCrosshair})]}),x!==void 0&&o!==null&&(0,a.jsxs)(`div`,{className:C.chartTooltip,style:{left:`${h(o)/680*100}%`,top:`${g(x.cost)/220*100}%`},children:[(0,a.jsx)(`div`,{className:C.chartTooltipDate,children:x.date}),i!==`tokens`&&t.filter(e=>(x.byModel?.[e.key]??0)>0).map(e=>(0,a.jsxs)(`div`,{className:C.chartTooltipRow,children:[(0,a.jsx)(`span`,{className:C.chartTooltipSwatch,style:{background:e.color}}),e.name,` `,(0,a.jsx)(`strong`,{children:c(x.byModel?.[e.key]??0)})]},e.key)),(0,a.jsxs)(`div`,{className:C.chartTooltipRow,children:[(0,a.jsx)(`span`,{className:C.chartLegendBar}),`总计 `,(0,a.jsx)(`strong`,{children:i===`tokens`?H(x.tokens??0):c(x.cost)})]}),(0,a.jsxs)(`div`,{className:C.chartTooltipRow,children:[(0,a.jsx)(`span`,{className:C.chartLegendLine}),`调用 `,(0,a.jsx)(`strong`,{children:x.calls.toLocaleString()})]})]}),t.length>0&&i!==`tokens`&&(0,a.jsxs)(`div`,{className:C.chartLegend,children:[t.map(e=>(0,a.jsxs)(`span`,{children:[(0,a.jsx)(`span`,{className:C.chartTooltipSwatch,style:{background:e.color}}),e.name]},e.key)),(0,a.jsxs)(`span`,{children:[(0,a.jsx)(`span`,{className:C.chartLegendLine}),`调用`]})]})]})}let U={top:14,right:42,bottom:22,left:46};function Ie(e){let t=Object.keys(e).sort(),n=[];for(let r of t.slice(-48)){let t=e[r];t!==void 0&&n.push({key:r,ttftMs:t.ttftAvg,...t.tpsAvg===void 0?{}:{tps:t.tpsAvg}})}return n}function Le(e){return e.slice(5,13).replace(`T`,` `)}function Re({perf:e,models:t,t:n}){let i=e=>t.find(t=>t.key===e)?.color??`#8b95a3`,o=(0,r.useMemo)(()=>e===void 0?[]:Object.entries(e.byModel).map(([e,n])=>({key:e,name:t.find(t=>t.key===e)?.name??e,color:i(e),samples:n.samples,ttftAvg:n.ttftAvg,ttftP50:n.ttftP50,ttftP90:n.ttftP90,...n.ttftMax===void 0?{}:{ttftMax:n.ttftMax},...n.ttftSpikes===void 0?{}:{ttftSpikes:n.ttftSpikes},...n.tpsAvg===void 0?{}:{tpsAvg:n.tpsAvg},latencyAvg:n.latencyAvg,estimatedSamples:n.estimatedSamples})).sort((e,t)=>t.samples-e.samples||t.ttftP90-e.ttftP90),[e,t]),s=(0,r.useMemo)(()=>{let t=e===void 0?[]:Ie(e.byHour);if(t.length===0)return null;let n=t.length,r=680-U.left-U.right,i=180-U.top-U.bottom,a=e=>n===1?U.left+r/2:U.left+r*e/(n-1),o=Math.max(...t.map(e=>e.ttftMs),1),s=Math.max(...t.map(e=>e.tps??0),1),c=e=>U.top+i-e/o*i,l=e=>U.top+i-e/s*i,u=t.map((e,t)=>`${t===0?`M`:`L`}${a(t)} ${c(e.ttftMs)}`).join(` `),d=t.some(e=>e.tps!==void 0)?t.map((e,t)=>`${t===0?`M`:`L`}${a(t)} ${l(e.tps??0)}`).join(` `):``,f=Math.max(1,Math.ceil(n/8)),p=[];for(let e=0;e<n;e+=f)p.push(e);return n>0&&p[p.length-1]!==n-1&&p.push(n-1),{points:t,n,inner:a,yTtft:c,ttftPath:u,tpsPath:d,indices:p,ttftTicks:[0,.5,1].map(e=>o*e).reverse(),maxTps:s}},[e]);return e===void 0||o.length===0?(0,a.jsx)(`div`,{className:C.chartEmpty,"data-testid":`billing-perf-empty`,children:n(`perfEmpty`)}):(0,a.jsxs)(`div`,{"data-testid":`billing-perf-panel`,children:[(0,a.jsx)(`div`,{className:C.tableScroll,"data-testid":`billing-perf-table`,children:(0,a.jsxs)(`table`,{className:C.modelTable,children:[(0,a.jsx)(`thead`,{children:(0,a.jsxs)(`tr`,{children:[(0,a.jsx)(`th`,{children:n(`model`)}),(0,a.jsx)(`th`,{className:C.numCol,children:n(`perfSamples`)}),(0,a.jsx)(`th`,{className:C.numCol,children:n(`perfTtft`)}),(0,a.jsx)(`th`,{className:C.numCol,children:n(`perfP50`)}),(0,a.jsx)(`th`,{className:C.numCol,children:n(`perfP90`)}),(0,a.jsx)(`th`,{className:C.numCol,children:n(`perfMax`)}),(0,a.jsx)(`th`,{className:C.numCol,children:n(`perfTps`)}),(0,a.jsx)(`th`,{className:C.numCol,children:n(`perfLatency`)}),(0,a.jsx)(`th`,{className:C.numCol,children:n(`perfEstimated`)})]})}),(0,a.jsx)(`tbody`,{children:o.map(e=>(0,a.jsxs)(`tr`,{children:[(0,a.jsx)(`td`,{children:(0,a.jsxs)(`span`,{className:C.modelCell,children:[(0,a.jsx)(`span`,{className:C.modelDot,style:{background:e.color}}),(0,a.jsx)(`span`,{className:C.modelName,children:e.name})]})}),(0,a.jsx)(`td`,{className:C.numCol,children:e.samples.toLocaleString()}),(0,a.jsxs)(`td`,{className:C.numCol,children:[e.ttftAvg.toFixed(0),` ms`]}),(0,a.jsxs)(`td`,{className:C.numCol,children:[e.ttftP50.toFixed(0),` ms`]}),(0,a.jsxs)(`td`,{className:C.numCol,children:[e.ttftP90.toFixed(0),` ms`]}),(0,a.jsx)(`td`,{className:C.numCol,children:e.ttftMax===void 0?(0,a.jsx)(`span`,{className:C.na,children:`—`}):(0,a.jsxs)(`span`,{children:[e.ttftMax.toFixed(0),` ms`,e.ttftSpikes!==void 0&&e.ttftSpikes>0?` (${e.ttftSpikes}↑)`:``]})}),(0,a.jsx)(`td`,{className:C.numCol,children:e.tpsAvg===void 0?(0,a.jsx)(`span`,{className:C.na,children:`—`}):`${e.tpsAvg.toFixed(1)}`}),(0,a.jsxs)(`td`,{className:C.numCol,children:[e.latencyAvg.toFixed(0),` ms`]}),(0,a.jsx)(`td`,{className:C.numCol,children:e.estimatedSamples>0?e.estimatedSamples:(0,a.jsx)(`span`,{className:C.na,children:`—`})})]},e.key))})]})}),s!==null&&(0,a.jsxs)(`div`,{className:C.chartWrap,"data-testid":`billing-perf-hour`,children:[(0,a.jsxs)(`svg`,{viewBox:`0 0 680 180`,className:C.chartSvg,role:`img`,"aria-label":`Hourly TTFT and generation speed by model`,children:[s.ttftTicks.map((e,t)=>{let n=s.yTtft(e);return(0,a.jsxs)(`g`,{children:[(0,a.jsx)(`line`,{x1:U.left,x2:680-U.right,y1:n,y2:n,className:C.chartGrid}),(0,a.jsx)(`text`,{x:U.left-8,y:n+3,textAnchor:`end`,className:C.chartAxisLabel,children:e.toFixed(0)})]},`ttft-${t}`)}),(0,a.jsx)(`path`,{d:s.ttftPath,fill:`none`,className:C.chartLine}),s.tpsPath!==``&&(0,a.jsx)(`path`,{d:s.tpsPath,fill:`none`,className:C.chartLine,style:{stroke:`var(--dsw-static-amber-500)`,strokeDasharray:`4 4`}}),s.indices.map(e=>{let t=s.points[e];return t===void 0?null:(0,a.jsx)(`text`,{x:s.inner(e),y:174,textAnchor:`middle`,className:C.chartAxisLabel,children:Le(t.key)},t.key)}),(0,a.jsxs)(`text`,{x:680-U.right+8,y:U.top+4,textAnchor:`start`,className:C.chartAxisLabel,children:[n(`perfTpsUnit`),` `,s.maxTps.toFixed(0)]})]}),(0,a.jsxs)(`div`,{className:C.chartLegend,children:[(0,a.jsxs)(`span`,{children:[(0,a.jsx)(`span`,{className:C.chartLegendLine}),n(`perfTtft`),` (ms)`]}),(0,a.jsxs)(`span`,{children:[(0,a.jsx)(`span`,{className:C.chartLegendLine,style:{background:`var(--dsw-static-amber-500)`}}),n(`perfTps`),` (`,n(`perfTpsUnit`),`)`]})]})]})]})}let ze=`@kenz1117/dsh-ui-usage-billing`,Be=`kenz1117`;function W({t:e,version:t}){return(0,a.jsxs)(`section`,{className:C.setCard,"data-testid":`billing-plugin-info`,children:[(0,a.jsxs)(`div`,{className:C.plgHead,children:[(0,a.jsx)(`span`,{className:C.plgIcon,"aria-hidden":`true`,children:(0,a.jsx)(`svg`,{width:`20`,height:`20`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,a.jsx)(`path`,{d:`M10 3a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a2 2 0 0 0 4 0V4a1 1 0 0 1 1-1h1a1 1 0 0 1 1 1v1a2 2 0 0 0 4 0 1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-1a2 2 0 0 0 0 4h1a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-1a2 2 0 0 0-4 0v1a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-2a2 2 0 0 0-4 0v1a1 1 0 0 1-1 1h-1a1 1 0 0 1-1-1v-1a2 2 0 0 0-4 0 1 1 0 0 1-1 1H3a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1h1a2 2 0 0 0 0-4H3a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1h1a2 2 0 0 0 4 0z`})})}),(0,a.jsxs)(`div`,{className:C.plgTitle,children:[(0,a.jsxs)(`div`,{className:C.plgNameRow,children:[(0,a.jsx)(`h3`,{className:C.plgName,children:ze}),(0,a.jsx)(`span`,{className:C.plgTag,children:t===void 0?`—`:`v${t}`})]}),(0,a.jsx)(`p`,{className:C.plgDesc,children:`Usage billing dashboard for DeepSeek Harness`})]})]}),(0,a.jsxs)(`div`,{className:C.plgGrid,children:[(0,a.jsxs)(`div`,{className:C.plgItem,children:[(0,a.jsx)(`span`,{className:C.plgLabel,children:e(`pluginAuthor`)}),(0,a.jsxs)(`a`,{className:C.plgLink,href:`https://github.com/${Be}`,target:`_blank`,rel:`noreferrer`,children:[`KenZ`,` (`,Be,`)`]})]}),(0,a.jsxs)(`div`,{className:C.plgItem,children:[(0,a.jsx)(`span`,{className:C.plgLabel,children:e(`pluginRepository`)}),(0,a.jsx)(`a`,{className:C.plgLink,href:`https://github.com/kenz1117/dsh-ui-usage-billing`,target:`_blank`,rel:`noreferrer`,children:`GitHub`})]}),(0,a.jsxs)(`div`,{className:C.plgItem,children:[(0,a.jsx)(`span`,{className:C.plgLabel,children:e(`pluginNpm`)}),(0,a.jsx)(`a`,{className:C.plgLink,href:`https://www.npmjs.com/package/@kenz1117/dsh-ui-usage-billing`,target:`_blank`,rel:`noreferrer`,children:ze})]}),(0,a.jsxs)(`div`,{className:C.plgItem,children:[(0,a.jsx)(`span`,{className:C.plgLabel,children:e(`pluginLicense`)}),(0,a.jsx)(`span`,{className:C.plgVal,children:`MIT`})]})]})]})}function Ve(e=Date.now()){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())}`}function G(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(Math.round(e))}let K={top:14,right:18,bottom:22,left:46},He=`var(--dsw-static-blue-500)`,Ue=`#14b8a6`,q=`var(--dsw-static-amber-500)`;function We(e){return[`date,missInput,cacheHit,output,reasoning,total`,...e.map(e=>`${e.date},${e.miss},${e.hit},${e.output},${e.reasoning},${e.miss+e.hit+e.output}`)].join(`
|
|
1
|
+
window.__ModuleLoader__.load({id:`@kenz1117/dsh-ui-usage-billing`,factory:e=>{var t={exports:{}},n=t.exports;Object.defineProperty(n,Symbol.toStringTag,{value:`Module`});let r=e("react"),i=e("@deepseek-ai/dsh-client-ui-primitives"),a=e("react/jsx-runtime"),o=e("@deepseek-ai/dsh-client-runtime/client");function s(e){var t,n,r=``;if(typeof e==`string`||typeof e==`number`)r+=e;else if(typeof e==`object`){if(Array.isArray(e)){var i=e.length;for(t=0;t<i;t++)e[t]&&(n=s(e[t]))&&(r&&(r+=` `),r+=n)}else for(n in e)e[n]&&(r&&(r+=` `),r+=n)}return r}function c(){for(var e,t,n=0,r=``,i=arguments.length;n<i;n++)(e=arguments[n])&&(t=s(e))&&(r&&(r+=` `),r+=t);return r}let l={mode:`combined`,targets:[]},u=`dsh.ui-usage-billing.float`;function d(){try{let e=localStorage.getItem(u);if(e===null)return{...l,targets:[...l.targets]};let t=JSON.parse(e);return{mode:t.mode===`subscription`?`subscription`:`combined`,targets:Array.isArray(t.targets)?t.targets.filter(e=>typeof e==`string`):[]}}catch{return{...l,targets:[...l.targets]}}}function f(e){try{localStorage.setItem(u,JSON.stringify(e))}catch{}}let p={metric:`money`},m=`dsh.ui-usage-billing.card`;function h(){try{let e=localStorage.getItem(m);return e===null?{...p}:{metric:JSON.parse(e).metric===`tokens`?`tokens`:`money`}}catch{return{...p}}}function g(e){try{localStorage.setItem(m,JSON.stringify(e))}catch{}}let _={hideUnidentified:!0},v=`dsh.ui-usage-billing.sites`;function y(){try{let e=localStorage.getItem(v);return e===null?{..._}:{hideUnidentified:JSON.parse(e).hideUnidentified!==!1}}catch{return{..._}}}function ee(e){try{localStorage.setItem(v,JSON.stringify(e))}catch{}}let te=`dsh.ui-usage-billing.prices`;function b(){try{let e=localStorage.getItem(te);if(e===null)return[];let t=JSON.parse(e);if(t===null)return[];let n=[],r=(e,t)=>{if(typeof t!=`object`||!t)return;let r=t,i=Number(r.input),a=Number(r.cacheHit),o=Number(r.output);[i,a,o].every(e=>Number.isFinite(e)&&e>=0)&&n.push({key:e,...typeof r.origin==`string`&&r.origin!==``?{origin:r.origin}:{},input:i,cacheHit:a,output:o,...r.currency===`USD`?{currency:`USD`}:{}})};if(Array.isArray(t))for(let e of t){if(typeof e!=`object`||!e)continue;let t=e;typeof t.key==`string`&&t.key!==``&&r(t.key,e)}else if(typeof t==`object`)for(let[e,n]of Object.entries(t))r(e,n);return n}catch{return[]}}function x(e){try{localStorage.setItem(te,JSON.stringify(e))}catch{}}let S=`@kenz1117/dsh-ui-usage-billing/UsageBilling.module.css`;if(typeof document<`u`&&document.querySelector(`style[data-plugin-css=`+JSON.stringify(S)+`]`)===null){let e=document.createElement(`style`);e.dataset.plugin=`@kenz1117/dsh-ui-usage-billing`,e.dataset.pluginCss=S,e.textContent=`.VkzYBG_railButton{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);width:36px;height:36px;color:var(--dsw-alias-label-secondary);cursor:pointer;border-radius:8px;flex:none;justify-content:center;align-items:center;padding:0;transition:border-color .16s,color .16s;display:flex}.VkzYBG_railButton:hover,.VkzYBG_railButton:focus-visible{border-color:var(--dsw-static-blue-500);color:var(--dsw-static-blue-500);outline:none}.VkzYBG_railButton svg{stroke-width:2px;width:18px;height:18px}.VkzYBG_trigger{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);width:100%;min-width:0;color:var(--dsw-alias-label-primary);cursor:pointer;text-align:left;border-radius:14px;align-items:center;gap:10px;padding:9px 12px;transition:border-color .16s,transform .16s,box-shadow .16s;display:flex;position:relative;overflow:hidden;box-shadow:0 1px 2px #0000000a}.VkzYBG_trigger:hover,.VkzYBG_trigger:focus-visible{border-color:var(--dsw-static-blue-500);box-shadow:0 6px 18px -8px color-mix(in srgb, var(--dsw-static-blue-500) 45%, transparent);outline:none;transform:translateY(-1px)}.VkzYBG_triggerIcon{border:1px solid var(--dsw-alias-border-l1);width:32px;height:32px;color:var(--dsw-alias-label-secondary);opacity:.8;border-radius:8px;flex:none;justify-content:center;align-items:center;display:inline-flex}.VkzYBG_triggerIcon svg{stroke-width:2px;width:16px;height:16px}.VkzYBG_triggerMain{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.VkzYBG_triggerPrimary{align-items:baseline;gap:5px;min-width:0;display:inline-flex}.VkzYBG_triggerLabel{color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:11px;line-height:15px;overflow:hidden}.VkzYBG_triggerYen{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;font-size:12px;font-weight:600;line-height:16px}.VkzYBG_triggerMetric{color:var(--dsw-alias-label-primary);letter-spacing:-.02em;font-variant-numeric:tabular-nums;white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:20px;font-weight:700;line-height:24px;overflow:hidden}.VkzYBG_triggerSub{color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;font-size:10px;line-height:14px;overflow:hidden}.VkzYBG_triggerSpark{flex:none;align-items:flex-end;gap:2px;height:20px;display:flex}.VkzYBG_triggerSparkBar,.VkzYBG_triggerSparkHot{background:var(--dsw-static-blue-500);opacity:.6;border-radius:1px 1px 0 0;width:3px}.VkzYBG_triggerSparkHot{opacity:1}.VkzYBG_triggerWrap{flex:180px;min-width:96px;max-width:100%;display:block;position:relative;container:VkzYBG_billing-trigger/inline-size}@container VkzYBG_billing-trigger (width<=200px){.VkzYBG_trigger{gap:6px;padding:8px 10px}.VkzYBG_triggerSpark{display:none}}@container VkzYBG_billing-trigger (width<=170px){.VkzYBG_triggerSub,.VkzYBG_triggerLabel{display:none}}@container VkzYBG_billing-trigger (width<=110px){.VkzYBG_triggerIcon,.VkzYBG_triggerSpark,.VkzYBG_triggerSub,.VkzYBG_triggerLabel{display:none}.VkzYBG_trigger{justify-content:center;padding:8px 6px}}.VkzYBG_triggerPop{border:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 80%, transparent);background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 72%, transparent);-webkit-backdrop-filter:blur(14px)saturate(1.3);box-shadow:0 12px 32px #00000029, inset 0 1px 0 color-mix(in srgb, var(--dsw-alias-label-primary) 8%, transparent);opacity:0;pointer-events:none;z-index:10;border-radius:14px;flex-direction:column;gap:5px;padding:10px 12px;transition:opacity .16s,transform .16s;display:flex;position:absolute;bottom:calc(100% + 8px);left:0;right:0;overflow:hidden;transform:translateY(4px)}.VkzYBG_triggerPop:before{content:"";background:linear-gradient(90deg, transparent 0%, var(--dsw-static-amber-500) 30%, var(--dsw-alias-label-primary) 50%, var(--dsw-static-amber-500) 70%, transparent 100%);opacity:.9;pointer-events:none;background-size:200% 100%;height:1.5px;animation:4s ease-in-out infinite VkzYBG_subscriptionGoldFlow;position:absolute;top:0;left:0;right:0}.VkzYBG_triggerWrap:hover .VkzYBG_triggerPop,.VkzYBG_triggerWrap:focus-within .VkzYBG_triggerPop{opacity:1;transform:translateY(0)}.VkzYBG_popHead{justify-content:space-between;align-items:baseline;gap:8px;display:flex}.VkzYBG_popTitle{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:700;line-height:18px}.VkzYBG_metricGrid{grid-template-columns:repeat(3,1fr);gap:10px 8px;display:grid}.VkzYBG_metricCell{flex-direction:column;gap:2px;min-width:0;display:flex}.VkzYBG_metricLabel{color:var(--dsw-alias-label-tertiary);font-size:10px;line-height:14px}.VkzYBG_metricValue{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:12px;font-weight:700;line-height:16px}.VkzYBG_metricValuePrimary{color:var(--dsw-static-amber-500)}.VkzYBG_metricValueSuccess{color:var(--dsw-static-green-500)}.VkzYBG_popModel{border-top:1px solid var(--dsw-alias-border-l1);flex-direction:column;gap:6px;padding-top:10px;display:flex}.VkzYBG_popModelLabel{color:var(--dsw-alias-label-tertiary);font-size:10px;line-height:14px}.VkzYBG_popModelRow{align-items:center;gap:8px;min-width:0;display:flex}.VkzYBG_popDot{border-radius:999px;flex:none;width:6px;height:6px}.VkzYBG_popDotDirect{background:var(--dsw-static-green-500)}.VkzYBG_popDotSub{background:var(--dsw-static-amber-500)}.VkzYBG_popDotNeutral{background:var(--dsw-alias-label-tertiary)}.VkzYBG_popTagPrimary,.VkzYBG_popTagSub{white-space:nowrap;border-radius:5px;flex:none;align-items:center;height:18px;padding:0 6px;font-size:10px;font-weight:600;line-height:14px;display:inline-flex}.VkzYBG_popTagPrimary{background:color-mix(in srgb, var(--dsw-static-blue-500) 14%, transparent);color:var(--dsw-static-blue-500)}.VkzYBG_popTagSub{background:color-mix(in srgb, var(--dsw-static-amber-500) 18%, transparent);color:var(--dsw-static-amber-500)}.VkzYBG_popModelName{color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:500;line-height:16px;overflow:hidden}.VkzYBG_popModelStatus{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;white-space:nowrap;margin-left:auto;font-size:11px;font-weight:600;line-height:16px}.VkzYBG_popModelStatusLow{color:var(--dsw-static-red-500)}.VkzYBG_dashboardModal{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:16px;width:min(760px,100vw - 48px);max-height:min(760px,88vh);animation:.18s ease-out VkzYBG_dashboardIn;box-shadow:0 12px 32px -12px #0000002e,0 2px 8px #0000000f}@keyframes VkzYBG_dashboardIn{0%{opacity:0;transform:translateY(8px)scale(.98)}to{opacity:1;transform:none}}div[role=presentation]:has(>.dsh-billing-modal)>div[aria-hidden=true]:first-child{backdrop-filter:blur(8px)saturate(1.25)}.VkzYBG_dashboard{flex-direction:column;width:100%;max-height:min(760px,88vh);display:flex}.VkzYBG_dashboardHead{border-bottom:1px solid var(--dsw-alias-border-l1);justify-content:space-between;align-items:center;gap:12px;padding:12px 18px;display:flex}.VkzYBG_dashboardTitle{color:var(--dsw-alias-label-primary);margin:0;font-size:14px;font-weight:600;line-height:20px}.VkzYBG_dashboardSubtitle{color:var(--dsw-alias-label-caption);margin:2px 0 0;font-size:11px;line-height:16px}.VkzYBG_closeButton{border:1px solid var(--dsw-alias-border-l1);width:32px;height:32px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border-radius:8px;flex:none;justify-content:center;align-items:center;transition:background-color .14s,color .14s;display:inline-flex}.VkzYBG_closeButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.VkzYBG_closeButton svg{stroke-width:2px;width:16px;height:16px}.VkzYBG_dashboardBody{flex-direction:column;gap:14px;padding:16px 24px 24px;display:flex;overflow-y:auto}.VkzYBG_modalFooter{border-top:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-tertiary);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;padding:12px 24px;font-size:11px;line-height:16px;display:flex}.VkzYBG_tabNav{border-bottom:1px solid var(--dsw-alias-border-l1);align-items:center;gap:4px;padding:0 24px;display:flex}.VkzYBG_tabButton{color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:7px;padding:6px 14px;font-size:13px;font-weight:500;line-height:20px;transition:background-color .16s,color .16s}.VkzYBG_tabButton:hover,.VkzYBG_tabButton:focus-visible{color:var(--dsw-alias-label-primary);background:color-mix(in srgb, var(--dsw-alias-bg-layer-3) 62%, transparent);outline:none}.VkzYBG_tabButtonActive,.VkzYBG_tabButtonActive:hover,.VkzYBG_tabButtonActive:focus-visible{background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-primary);font-weight:600}.VkzYBG_tabPanel{flex-direction:column;gap:14px;animation:.14s ease-out VkzYBG_tabPanelIn;display:flex}@keyframes VkzYBG_tabPanelIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.VkzYBG_reconcileNotice{border:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 78%, transparent);background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 62%, transparent);color:var(--dsw-alias-label-secondary);border-radius:10px;align-items:flex-start;gap:10px;padding:10px 12px;font-size:12px;line-height:1.55;display:flex}.VkzYBG_reconcileIcon{color:var(--dsw-alias-label-tertiary);flex:none;margin-top:1px;display:inline-flex}.VkzYBG_reconcileText{flex:1}.VkzYBG_reconcileDismiss{color:var(--dsw-alias-label-tertiary);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:6px;flex:none;padding:2px 8px;font-size:12px;line-height:1.4;transition:color .15s,background-color .15s}.VkzYBG_reconcileDismiss:hover{color:var(--dsw-alias-label-primary);background:color-mix(in srgb, var(--dsw-alias-label-primary) 8%, transparent)}.VkzYBG_hero{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:12px;flex-direction:column;gap:18px;padding:24px;display:flex;position:relative;overflow:hidden}.VkzYBG_heroTop{justify-content:space-between;align-items:center;gap:24px;display:flex}.VkzYBG_heroMain{flex-direction:column;gap:2px;min-width:0;display:flex}.VkzYBG_heroLabel{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-size:11px;line-height:16px}.VkzYBG_heroReadout{align-items:baseline;gap:4px;display:flex}.VkzYBG_heroCurrency{letter-spacing:-.01em;color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;font-size:22px;font-weight:600;line-height:28px}.VkzYBG_heroValue{letter-spacing:-.02em;font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--dsw-alias-label-primary);font-size:40px;font-weight:700;line-height:48px}.VkzYBG_heroMeta{color:var(--dsw-alias-label-caption);white-space:nowrap;margin-top:2px;font-size:11px;line-height:15px}.VkzYBG_heroGauge{flex:none;width:96px;height:96px;position:relative}.VkzYBG_heroGaugeSvg{width:100%;height:100%;display:block;transform:rotate(-90deg)}.VkzYBG_heroGaugeTrack{fill:none;stroke:var(--dsw-alias-bg-module-platform);stroke-width:7px}.VkzYBG_heroGaugeArc{fill:none;stroke:var(--dsw-static-blue-500);stroke-width:7px;stroke-linecap:round;transition:stroke-dasharray .26s}.VkzYBG_heroGaugeArcOver{stroke:var(--dsw-static-red-500)}.VkzYBG_heroGaugeCenter{flex-direction:column;justify-content:center;align-items:center;gap:1px;display:flex;position:absolute;inset:0}.VkzYBG_heroGaugePct{letter-spacing:-.02em;font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-primary);font-size:14px;font-weight:700;line-height:18px}.VkzYBG_heroGaugePctOver{color:var(--dsw-static-red-500)}.VkzYBG_heroGaugeLabel{color:var(--dsw-alias-label-tertiary);font-size:9px;line-height:12px}.VkzYBG_heroBudget{border-top:1px solid var(--dsw-alias-border-l1);align-items:center;gap:14px;padding-top:14px;display:flex}.VkzYBG_heroBudgetLabel{color:var(--dsw-alias-label-secondary);white-space:nowrap;flex:none;font-size:11px;line-height:16px}.VkzYBG_heroBudgetTrack{background:var(--dsw-alias-border-l1);border-radius:999px;flex:1;min-width:0;height:6px;overflow:hidden}.VkzYBG_heroBudgetFill{background:var(--dsw-static-blue-500);border-radius:999px;height:100%;transition:width .22s}.VkzYBG_heroBudgetFillOver{background:var(--dsw-static-red-500)}.VkzYBG_heroBudgetValue{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;white-space:nowrap;flex:none;font-size:11px;line-height:16px}.VkzYBG_heroSide{border-top:1px solid var(--dsw-alias-border-l1);align-items:stretch;padding-top:14px;display:flex}.VkzYBG_heroSideItem{border-left:1px solid var(--dsw-alias-border-l1);flex-direction:column;flex:1;gap:2px;min-width:0;padding-left:14px;display:flex}.VkzYBG_heroSideItem:first-child{border-left:none;padding-left:0}.VkzYBG_heroSideLabel{color:var(--dsw-alias-label-tertiary);text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;font-size:10px;font-weight:500;line-height:13px}.VkzYBG_heroSideValue{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;letter-spacing:-.01em;white-space:nowrap;align-items:baseline;gap:6px;font-size:15px;font-weight:600;line-height:20px;display:inline-flex}.VkzYBG_heroSideSpacer{flex:1;display:block}.VkzYBG_delta{align-items:center;gap:2px;margin-left:4px;font-size:11px;font-weight:600;line-height:17px;display:inline-flex}.VkzYBG_deltaUp{color:var(--dsw-static-green-500);background:color-mix(in srgb, var(--dsw-static-green-500) 12%, transparent)}.VkzYBG_deltaDown{color:var(--dsw-static-red-500);background:color-mix(in srgb, var(--dsw-static-red-500) 12%, transparent)}.VkzYBG_unpricedHint{border:1px solid color-mix(in srgb, var(--dsw-static-amber-500) 30%, transparent);background:color-mix(in srgb, var(--dsw-static-amber-500) 8%, transparent);color:var(--dsw-static-amber-500);border-radius:8px;align-items:center;padding:8px 12px;font-size:11.5px;font-weight:500;line-height:17px;display:flex}.VkzYBG_kpiGrid{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;display:grid}.VkzYBG_kpiTile{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:10px;flex-direction:column;gap:2px;padding:10px 12px;transition:border-color .16s;display:flex;position:relative;overflow:hidden}.VkzYBG_kpiTile:hover{border-color:var(--dsw-alias-border-l2)}.VkzYBG_kpiLabel{color:var(--dsw-alias-label-tertiary);text-transform:uppercase;letter-spacing:.06em;font-size:10px;font-weight:500;line-height:13px}.VkzYBG_kpiValue{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;letter-spacing:-.01em;font-size:24px;font-weight:600;line-height:32px}.VkzYBG_kpiGreen{color:var(--dsw-static-green-500)}.VkzYBG_kpiDetail{color:var(--dsw-alias-label-caption);white-space:nowrap;text-overflow:ellipsis;font-size:10.5px;line-height:14px;overflow:hidden}.VkzYBG_panel{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:12px;flex-direction:column;gap:10px;padding:16px 18px;transition:border-color .16s;display:flex}.VkzYBG_panelHead{justify-content:space-between;align-items:baseline;gap:10px;display:flex}.VkzYBG_panelTitle{letter-spacing:-.005em;color:var(--dsw-alias-label-primary);margin:0;font-size:14px;font-weight:600;line-height:20px}.VkzYBG_panelHint{color:var(--dsw-alias-label-caption);white-space:nowrap;font-size:11px;line-height:16px}.VkzYBG_rangeToggle{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:8px;gap:2px;padding:2px;display:inline-flex}.VkzYBG_rangeButton{color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:6px;padding:2px 8px;font-size:11px;line-height:16px;transition:background-color .14s,color .14s}.VkzYBG_rangeButtonActive{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);font-weight:600}.VkzYBG_exportBar{justify-content:flex-end;align-items:center;gap:8px;display:flex}.VkzYBG_exportLabel{color:var(--dsw-alias-label-caption);font-size:11px;line-height:16px}.VkzYBG_exportButton{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-secondary);cursor:pointer;border-radius:999px;padding:4px 12px;font-size:11.5px;line-height:16px;transition:border-color .16s,color .16s,background-color .16s}.VkzYBG_exportButton:hover,.VkzYBG_exportButton:focus-visible{border-color:var(--dsw-alias-border-l2);color:var(--dsw-alias-label-primary);outline:none}.VkzYBG_shareTrack{background:var(--dsw-alias-bg-module-platform);border-radius:999px;height:10px;display:flex;overflow:hidden}.VkzYBG_shareSeg{height:100%;transition:width .2s}.VkzYBG_shareSegPeak{background:var(--dsw-static-blue-500)}.VkzYBG_shareSegOff{background:color-mix(in srgb, var(--dsw-static-blue-500) 25%, var(--dsw-alias-bg-module-platform))}.VkzYBG_shareSegUser{background:var(--dsw-static-blue-500)}.VkzYBG_shareSegAssistant{background:var(--dsw-static-green-500)}.VkzYBG_shareSegTool{background:var(--dsw-static-amber-500)}.VkzYBG_shareLegend{align-items:center;gap:16px;display:flex}.VkzYBG_shareItem{color:var(--dsw-alias-label-secondary);align-items:baseline;gap:6px;font-size:12px;line-height:17px;display:inline-flex}.VkzYBG_bucketCost{align-items:baseline;gap:3px;display:inline-flex}.VkzYBG_bucketOfficial{color:var(--dsw-static-blue-500);font-weight:600}.VkzYBG_bucketSep{color:var(--dsw-alias-label-dimmed)}.VkzYBG_bucketThird{color:var(--dsw-alias-label-secondary)}.VkzYBG_shareDot{border-radius:50%;flex:none;align-self:center;width:8px;height:8px}.VkzYBG_shareValue{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-weight:600}.VkzYBG_budgetInput{width:64px;color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;text-align:right;background:0 0;border:none;padding:0;font-size:12px;line-height:16px}.VkzYBG_budgetInput:focus-visible{outline:none}.VkzYBG_switch{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-module-platform);cursor:pointer;border-radius:999px;flex:none;width:30px;height:17px;padding:0;transition:background-color .16s,border-color .16s;position:relative}.VkzYBG_switchOn{border-color:var(--dsw-alias-border-l1);background:var(--dsw-alias-label-primary)}.VkzYBG_switchKnob{background:var(--dsw-static-neutral-bluish-00);border-radius:50%;width:11px;height:11px;transition:transform .16s;position:absolute;top:2px;left:2px}.VkzYBG_switchOn .VkzYBG_switchKnob{transform:translate(13px)}.VkzYBG_budgetFillWarn{background:var(--dsw-static-amber-500)}.VkzYBG_budgetFillOver{background:var(--dsw-static-red-500);animation:1.6s ease-in-out infinite VkzYBG_budgetOverPulse}@keyframes VkzYBG_budgetOverPulse{50%{opacity:.55}}.VkzYBG_chartWrap{width:100%;position:relative}.VkzYBG_chartSvg{width:100%;height:auto;display:block}.VkzYBG_chartEmpty{height:140px;color:var(--dsw-alias-label-caption);justify-content:center;align-items:center;font-size:13px;display:flex}.VkzYBG_emptyRow{text-align:center;color:var(--dsw-alias-label-caption);padding:28px 0;font-size:13px}.VkzYBG_chartGrid{stroke:var(--dsw-alias-border-l1);stroke-width:1px}.VkzYBG_chartAxisLabel{fill:var(--dsw-alias-label-tertiary);font-size:10px}.VkzYBG_chartBar{fill:var(--dsw-static-blue-500);opacity:.7}.VkzYBG_chartBar:hover{opacity:1}.VkzYBG_chartStack{stroke:var(--dsw-alias-bg-layer-1);stroke-width:.75px}.VkzYBG_chartStack:hover{opacity:.9}.VkzYBG_chartLine{stroke:var(--dsw-static-blue-500);stroke-width:2px;stroke-linecap:round;stroke-linejoin:round}.VkzYBG_chartCrosshair{stroke:var(--dsw-alias-label-dimmed);stroke-width:1px;stroke-dasharray:3 3}.VkzYBG_chartTooltip{pointer-events:none;z-index:2;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);box-shadow:none;white-space:nowrap;border-radius:8px;padding:8px 10px;position:absolute;transform:translate(-50%,calc(-100% - 10px))}.VkzYBG_chartTooltipDate{color:var(--dsw-alias-label-primary);margin-bottom:3px;font-size:11px;font-weight:600}.VkzYBG_chartTooltipRow{color:var(--dsw-alias-label-secondary);align-items:center;gap:5px;font-size:11px;line-height:17px;display:flex}.VkzYBG_chartTooltipRow strong{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-weight:600}.VkzYBG_chartBarPlaceholder{fill:color-mix(in srgb, var(--dsw-alias-label-secondary) 30%, transparent)}.VkzYBG_chartLegendLine{background:var(--dsw-static-blue-500);border-radius:2px;width:10px;height:3px;display:inline-block}.VkzYBG_chartLegendBar{background:var(--dsw-static-blue-500);opacity:.5;border-radius:2px;width:7px;height:7px;display:inline-block}.VkzYBG_chartTooltipSwatch{border-radius:3px;flex:none;width:8px;height:8px;display:inline-block}.VkzYBG_chartLegend{color:var(--dsw-alias-label-tertiary);justify-content:flex-end;gap:14px;margin-top:2px;font-size:11px;display:flex}.VkzYBG_chartLegend span{align-items:center;gap:5px;display:inline-flex}.VkzYBG_tableScroll{border:1px solid var(--dsw-alias-border-l1);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);border-radius:12px;overflow:auto}.VkzYBG_ubAlert{border:1px solid color-mix(in srgb, var(--dsw-static-blue-500) 30%, transparent);background:color-mix(in srgb, var(--dsw-static-blue-500) 8%, transparent);border-radius:10px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;padding:10px 14px;font-size:12px;line-height:17px;display:flex}.VkzYBG_ubAlertLeft{align-items:center;gap:8px;display:inline-flex}.VkzYBG_ubRate{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-weight:600}.VkzYBG_ubAlertNote{color:var(--dsw-alias-label-secondary);margin:0}.VkzYBG_ubTag,.VkzYBG_ubTagSuccess,.VkzYBG_ubTagNeutral,.VkzYBG_ubTagAlert,.VkzYBG_ubTagPromo{white-space:nowrap;border-radius:999px;align-items:center;height:18px;padding:0 7px;font-size:10px;font-weight:600;line-height:14px;display:inline-flex}.VkzYBG_ubTagSuccess{background:color-mix(in srgb, var(--dsw-static-green-500) 14%, transparent);color:var(--dsw-static-green-500)}.VkzYBG_ubTagNeutral{background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-secondary)}.VkzYBG_ubTagAlert{background:color-mix(in srgb, var(--dsw-static-amber-500) 16%, transparent);color:var(--dsw-static-amber-500)}.VkzYBG_ubTagPromo{background:color-mix(in srgb, var(--dsw-static-red-500) 14%, transparent);color:var(--dsw-static-red-500);cursor:help}.VkzYBG_ubExtraRow td{opacity:.72;padding-top:2px;padding-bottom:2px;font-size:12px}.VkzYBG_ubExtraName{color:var(--dsw-alias-label-secondary);margin-left:26px}.VkzYBG_ubExtraNote{color:var(--dsw-alias-label-tertiary);margin-left:8px;font-size:10px}.VkzYBG_ubCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:12px;flex-direction:column;gap:12px;padding:16px 18px;display:flex}.VkzYBG_ubCardHead{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.VkzYBG_ubCardTitle{color:var(--dsw-alias-label-primary);margin:0;font-size:13px;font-weight:600;line-height:18px}.VkzYBG_ubCardSub{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.VkzYBG_ubTablewrap{border:1px solid var(--dsw-alias-border-l1);border-radius:10px;overflow:auto}.VkzYBG_ubTable{border-collapse:collapse;white-space:nowrap;width:100%;font-size:12.5px}.VkzYBG_ubTable th,.VkzYBG_ubTable td{border-bottom:1px solid var(--dsw-alias-border-l1);text-align:left;padding:9px 12px}.VkzYBG_ubTable tbody tr:last-child td{border-bottom:0}.VkzYBG_ubTable thead th{color:var(--dsw-alias-label-tertiary);text-transform:uppercase;letter-spacing:.05em;font-size:11px;font-weight:600}.VkzYBG_ubModel{align-items:center;gap:8px;display:inline-flex}.VkzYBG_vendorLogo{object-fit:contain;border-radius:4px;flex:none;width:18px;height:18px}.VkzYBG_vendorLetter{color:#fff;border-radius:4px;flex:none;justify-content:center;align-items:center;width:18px;height:18px;font-size:10px;font-weight:600;line-height:1;display:inline-flex}.VkzYBG_ubModelName{color:var(--dsw-alias-label-primary);align-items:center;gap:6px;font-weight:500;display:inline-flex}.VkzYBG_ubPricepair{flex-wrap:wrap;gap:6px;display:inline-flex}.VkzYBG_ubChipPeak,.VkzYBG_ubChipOff{font-variant-numeric:tabular-nums;border-radius:999px;align-items:center;gap:5px;height:20px;padding:0 8px;font-size:11px;line-height:16px;display:inline-flex}.VkzYBG_ubChipLabel{font-size:10px;font-weight:600}.VkzYBG_ubChipPeak{background:color-mix(in srgb, var(--dsw-static-blue-500) 14%, transparent);color:var(--dsw-static-blue-500)}.VkzYBG_ubChipOff{background:color-mix(in srgb, var(--dsw-static-green-500) 14%, transparent);color:var(--dsw-static-green-500)}.VkzYBG_ubNotes{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.VkzYBG_ubNotesItem{align-items:baseline;gap:10px;display:flex}.VkzYBG_ubNotesTerm{color:var(--dsw-alias-label-primary);flex:0 0 72px;font-size:12px;font-weight:500}.VkzYBG_ubNotesDesc{min-width:0;color:var(--dsw-alias-label-secondary);flex:1;font-size:12px;line-height:17px}.VkzYBG_ubCardControlGroup{flex-wrap:wrap;align-items:center;gap:8px;display:inline-flex}.VkzYBG_ubTagError{white-space:nowrap;background:color-mix(in srgb, var(--dsw-static-red-500) 14%, transparent);height:18px;color:var(--dsw-static-red-500);border-radius:999px;align-items:center;padding:0 7px;font-size:10px;font-weight:600;line-height:14px;display:inline-flex}.VkzYBG_ubStatGrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.VkzYBG_ubStatCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:12px;flex-direction:column;gap:4px;padding:14px 16px;display:flex}.VkzYBG_ubStatLabel{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.VkzYBG_ubStatValue{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;letter-spacing:-.01em;font-size:22px;font-weight:700;line-height:28px}.VkzYBG_ubStatDetail{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;font-size:11px;line-height:16px}.VkzYBG_rowlist{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.VkzYBG_rowline{width:100%;min-width:0;color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:10px;justify-content:space-between;align-items:center;gap:12px;padding:9px 12px;transition:background-color .14s,border-color .14s;display:flex}.VkzYBG_rowline:hover{background:color-mix(in srgb, var(--dsw-alias-bg-layer-3) 60%, transparent);border-color:var(--dsw-alias-border-l1)}.VkzYBG_rowlineName{min-width:0;color:var(--dsw-alias-label-primary);white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:12.5px;font-weight:500;overflow:hidden}.VkzYBG_rowlineRight{font-variant-numeric:tabular-nums;flex:none;align-items:baseline;gap:8px;display:inline-flex}.VkzYBG_rowlineMuted{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.VkzYBG_rowlineChev{color:var(--dsw-alias-label-tertiary);font-size:14px}.VkzYBG_rowlineDrillWrap{padding-left:12px}.VkzYBG_rowlineDrill{border-left:1px solid var(--dsw-alias-border-l1);justify-content:space-between;align-items:center;gap:12px;padding:6px 12px;font-size:12px;display:flex}.VkzYBG_modelTable,.VkzYBG_pricingTable{border-collapse:collapse;width:100%;font-size:12.5px}.VkzYBG_modelTable th,.VkzYBG_modelTable td,.VkzYBG_pricingTable th,.VkzYBG_pricingTable td{border-bottom:1px solid var(--dsw-alias-border-l1);text-align:left;white-space:nowrap;padding:9px 12px}.VkzYBG_modelTable tbody tr:last-child td,.VkzYBG_pricingTable tbody tr:last-child td{border-bottom:0}.VkzYBG_modelTable thead th,.VkzYBG_pricingTable thead th{color:var(--dsw-alias-label-tertiary);text-transform:uppercase;letter-spacing:.05em;background:0 0;font-size:11px;font-weight:600}.VkzYBG_modelTable tbody tr,.VkzYBG_pricingTable tbody tr{transition:background-color .12s}.VkzYBG_modelTable tbody tr:hover,.VkzYBG_pricingTable tbody tr:hover{background:0 0}.VkzYBG_numCol{text-align:right;font-variant-numeric:tabular-nums}.VkzYBG_na{color:var(--dsw-alias-label-dimmed)}.VkzYBG_modelCell{align-items:center;gap:8px;display:inline-flex}.VkzYBG_modelDot{border-radius:50%;flex:none;width:9px;height:9px}.VkzYBG_modelName{color:var(--dsw-alias-label-primary);font-weight:500;line-height:16px;display:block}.VkzYBG_modelProvider{color:var(--dsw-alias-label-caption);font-size:10.5px;line-height:14px;display:block}.VkzYBG_pricingToggle:hover .VkzYBG_panelTitle,.VkzYBG_pricingToggle:focus-visible .VkzYBG_panelTitle{color:var(--dsw-alias-label-primary)}.VkzYBG_siteRow{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:10px;justify-content:space-between;align-items:center;gap:12px;padding:8px 10px;display:flex}.VkzYBG_siteRowName{align-items:center;gap:8px;min-width:0;display:inline-flex}.VkzYBG_siteKindTag{white-space:nowrap;border-radius:999px;flex:none;align-items:center;padding:1px 7px;font-size:10.5px;font-weight:600;line-height:16px;display:inline-flex}.VkzYBG_siteKindSite{color:var(--dsw-static-blue-500);background:color-mix(in srgb, var(--dsw-static-blue-500) 14%, transparent)}.VkzYBG_siteKindDirect{color:var(--dsw-static-green-500);background:color-mix(in srgb, var(--dsw-static-green-500) 14%, transparent)}.VkzYBG_siteKindUnknown{color:var(--dsw-static-red-500);background:color-mix(in srgb, var(--dsw-static-red-500) 14%, transparent)}.VkzYBG_siteRowTitle{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;font-weight:600;line-height:18px;overflow:hidden}.VkzYBG_siteRowMeta{flex:none;align-items:center;gap:10px;display:inline-flex}.VkzYBG_siteRowCost{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-size:12.5px;font-weight:700;line-height:18px}.VkzYBG_siteRowCalls{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;font-size:11.5px;line-height:17px}.VkzYBG_siteRowCallsLow{color:var(--dsw-static-red-500)}.VkzYBG_flatTag{color:var(--dsw-alias-label-caption);font-size:10.5px;line-height:14px}.VkzYBG_healthDot{border-radius:50%;flex:none;width:8px;height:8px;display:inline-block}.VkzYBG_healthOk{background:var(--dsw-static-green-500)}.VkzYBG_healthBad{background:var(--dsw-static-red-500)}.VkzYBG_healthIdle{background:var(--dsw-static-neutral-bluish-400)}.VkzYBG_dashboardRight{align-items:center;gap:8px;min-width:0;display:flex}.VkzYBG_healthBadge{white-space:nowrap;border-radius:999px;align-items:center;gap:6px;padding:3px 9px;font-size:11px;line-height:16px;display:inline-flex}.VkzYBG_healthBadgeOk{color:var(--dsw-static-green-500);background:var(--dsw-alias-bg-layer-2)}.VkzYBG_healthBadgeBad{color:var(--dsw-static-red-500);background:var(--dsw-alias-bg-layer-2)}.VkzYBG_planTag{color:var(--dsw-static-green-500);background:var(--dsw-alias-bg-layer-2);border-radius:999px;align-items:center;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px;display:inline-flex}.VkzYBG_uncataloguedTag{vertical-align:1px;color:var(--dsw-static-amber-500);background:var(--dsw-alias-bg-layer-2);border-radius:999px;margin-left:6px;padding:0 6px;font-size:10px;font-weight:600;line-height:16px;display:inline-block}.VkzYBG_estimatedTag{vertical-align:1px;color:var(--dsw-static-blue-500);background:var(--dsw-alias-bg-layer-2);border-radius:999px;margin-left:6px;padding:0 6px;font-size:10px;font-weight:600;line-height:16px;display:inline-block}.VkzYBG_feeBar{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;border-radius:999px;flex-wrap:wrap;align-items:center;gap:8px;padding:6px 12px;font-size:11px;line-height:16px;display:inline-flex}.VkzYBG_feeCount{color:var(--dsw-alias-label-primary);font-weight:600}.VkzYBG_feeSuffix{color:var(--dsw-alias-label-tertiary)}.VkzYBG_feeItem{color:var(--dsw-alias-label-secondary);white-space:nowrap}.VkzYBG_feeNum{color:var(--dsw-alias-label-primary)}.VkzYBG_feeSep{color:var(--dsw-alias-label-tertiary)}.VkzYBG_feeChipPrimary,.VkzYBG_feeChipOff,.VkzYBG_feeChipAlert,.VkzYBG_feeChipError{font-variant-numeric:tabular-nums;white-space:nowrap;border-radius:999px;align-items:center;height:20px;padding:0 8px;font-size:10px;font-weight:600;line-height:14px;display:inline-flex}.VkzYBG_feeChipPrimary{background:color-mix(in srgb, var(--dsw-static-blue-500) 14%, transparent);color:var(--dsw-static-blue-500)}.VkzYBG_feeChipOff{background:color-mix(in srgb, var(--dsw-static-green-500) 14%, transparent);color:var(--dsw-static-green-500)}.VkzYBG_feeChipAlert{background:color-mix(in srgb, var(--dsw-static-amber-500) 16%, transparent);color:var(--dsw-static-amber-500)}.VkzYBG_feeChipError{background:color-mix(in srgb, var(--dsw-static-red-500) 14%, transparent);color:var(--dsw-static-red-500)}.VkzYBG_balanceCell{align-items:center;gap:6px;display:inline-flex;position:relative}.VkzYBG_balanceDaysBadge{border:1px solid var(--dsw-alias-label-caption);background:color-mix(in srgb, var(--dsw-alias-label-caption) 10%, transparent);min-width:24px;height:24px;color:var(--dsw-alias-label-secondary);cursor:pointer;border-radius:12px;justify-content:center;align-items:center;padding:0 6px;font-size:10.5px;font-weight:600;line-height:1;display:inline-flex}.VkzYBG_balanceDaysBadge:hover{border-color:var(--dsw-alias-label-secondary);background:color-mix(in srgb, var(--dsw-alias-label-caption) 18%, transparent)}.VkzYBG_balanceDaysBadgeLow{color:var(--dsw-static-red-500);border-color:var(--dsw-static-red-500);background:color-mix(in srgb, var(--dsw-static-red-500) 10%, transparent)}.VkzYBG_balanceDetailPop{z-index:20;background:var(--dsw-alias-bg-layer-3);border:1px solid var(--dsw-alias-label-caption);white-space:nowrap;border-radius:8px;flex-direction:column;gap:6px;min-width:180px;padding:8px 10px;display:inline-flex;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 6px 20px #0000002e}.VkzYBG_balanceDetailHead{justify-content:space-between;align-items:center;gap:12px;display:flex}.VkzYBG_balanceDetailTitle{color:var(--dsw-alias-label-primary);font-size:12px;font-weight:600}.VkzYBG_balanceDetailClose{cursor:pointer;color:var(--dsw-alias-label-caption);background:0 0;border:none;font-size:14px;line-height:1}.VkzYBG_balanceDetailClose:hover{color:var(--dsw-alias-label-primary)}.VkzYBG_balanceDetailGrid{flex-direction:column;gap:4px;display:inline-flex}.VkzYBG_balanceDetailRow{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;justify-content:space-between;gap:16px;font-size:11px;line-height:15px;display:flex}.VkzYBG_balanceDetailLabel{color:var(--dsw-alias-label-caption)}.VkzYBG_balanceDetailValue{color:var(--dsw-alias-label-primary);font-weight:500}body[data-zine-mode] .VkzYBG_trigger,body[data-zine-mode] .VkzYBG_triggerPop,body[data-zine-mode] .VkzYBG_railButton{display:none}body[data-zine-mode] .VkzYBG_dashboardHead{background:#000;border-bottom:2px solid #e8ff00}body[data-zine-mode] .VkzYBG_headTitleRow{align-items:center;gap:8px;margin-top:4px;display:flex}body[data-zine-mode] .VkzYBG_dashboardTitle{color:#e8ff00;letter-spacing:.04em;text-transform:uppercase;text-shadow:0 0 8px #e8ff0066;font-weight:900}body[data-zine-mode] .VkzYBG_dashboardSubtitle{color:#c9d98a;letter-spacing:.08em;text-transform:uppercase;font-size:10px}body[data-zine-mode] .VkzYBG_closeButton{color:#0a0a05;background:#ff2d95;border:1.5px solid #ff2d95;border-radius:0;box-shadow:0 0 10px #ff2d9573}body[data-zine-mode] .VkzYBG_hero{background:#000;border:2.5px solid #e8ff00;border-radius:0;position:relative;box-shadow:0 0 0 1px #0009,0 0 24px #e8ff002e}body[data-zine-mode] .VkzYBG_heroLabel{color:#c9d98a;letter-spacing:.12em;text-transform:uppercase;font-size:10px;font-weight:900}body[data-zine-mode] .VkzYBG_heroValue{color:#e8ff00;letter-spacing:-.02em;text-shadow:0 0 12px #e8ff0073;-webkit-text-fill-color:#e8ff00;background:0 0;font-size:38px;font-weight:900}body[data-zine-mode] .VkzYBG_heroMeta{color:#c9d98a;letter-spacing:.06em;text-transform:uppercase;font-size:10.5px}body[data-zine-mode] .VkzYBG_heroSideLabel{color:#c9d98a;letter-spacing:.1em;text-transform:uppercase;font-size:10px;font-weight:900}body[data-zine-mode] .VkzYBG_heroSideValue{color:#e8ff00;text-shadow:0 0 6px #e8ff0059}body[data-zine-mode] .VkzYBG_delta{font-weight:900}body[data-zine-mode] .VkzYBG_deltaUp{color:#ff2d95}body[data-zine-mode] .VkzYBG_deltaDown{color:#c9d98a}body[data-zine-mode] .VkzYBG_tabNav{background:#000;border-bottom:2px solid #e8ff00}body[data-zine-mode] .VkzYBG_tabButton{color:#c9d98a;letter-spacing:.08em;text-transform:uppercase;border-radius:0;font-size:10.5px;font-weight:900}body[data-zine-mode] .VkzYBG_tabButton:hover,body[data-zine-mode] .VkzYBG_tabButton:focus-visible{color:#e8ff00;background:#e8ff001f}body[data-zine-mode] .VkzYBG_tabButtonActive,body[data-zine-mode] .VkzYBG_tabButtonActive:hover,body[data-zine-mode] .VkzYBG_tabButtonActive:focus-visible{color:#0a0a05;background:#e8ff00;box-shadow:0 0 10px #e8ff0073}body[data-zine-mode] .VkzYBG_panel{background:#000;border:2px solid #e8ff00;border-radius:0}body[data-zine-mode] .VkzYBG_trendPanel{position:relative}body[data-zine-mode] .VkzYBG_panelTitle{color:#e8ff00;letter-spacing:.06em;text-transform:uppercase;text-shadow:0 0 6px #e8ff0066;font-weight:900}body[data-zine-mode] .VkzYBG_panelHint{color:#c9d98a;letter-spacing:.08em;text-transform:uppercase;font-size:10px;font-weight:900}body[data-zine-mode] .VkzYBG_modelTableScroll{background:#000;border:1.5px solid #e8ff0080;border-radius:0}.VkzYBG_currencyToggle{background:var(--dsw-alias-bg-layer-3);border:none;border-radius:8px;align-items:center;gap:2px;margin-right:8px;padding:2px;display:inline-flex}.VkzYBG_currencyButton{color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;background:0 0;border:0;border-radius:6px;padding:4px 8px;font-size:11px;font-weight:700;line-height:1}.VkzYBG_currencyButtonActive{background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary)}.VkzYBG_subscriptionGrid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px;margin-top:10px;display:grid}.VkzYBG_subscriptionCard{border:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 75%, transparent);background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 62%, transparent);-webkit-backdrop-filter:blur(12px)saturate(1.3);border-radius:12px;padding:12px 14px;transition:border-color .2s,box-shadow .2s;position:relative;overflow:hidden;box-shadow:0 8px 24px #0000001a}.VkzYBG_subscriptionCard:before{content:"";background:linear-gradient(90deg, transparent 0%, var(--dsw-static-amber-500) 30%, var(--dsw-alias-label-primary) 50%, var(--dsw-static-amber-500) 70%, transparent 100%);opacity:.9;pointer-events:none;background-size:200% 100%;height:1.5px;animation:3.6s ease-in-out infinite VkzYBG_subscriptionGoldFlow;position:absolute;top:0;left:0;right:0}@keyframes VkzYBG_subscriptionGoldFlow{0%{background-position:200% 0}to{background-position:-200% 0}}.VkzYBG_subscriptionCard:hover{border-color:color-mix(in srgb, var(--dsw-static-amber-500) 55%, var(--dsw-alias-border-l1));box-shadow:0 10px 30px #00000029}.VkzYBG_subscriptionHead{flex-wrap:wrap;align-items:baseline;gap:6px;margin-bottom:8px;display:flex}.VkzYBG_subscriptionName{font-size:13px;font-weight:700}.VkzYBG_subscriptionPlan{color:var(--dsw-alias-label-secondary);font-size:11px}.VkzYBG_subscriptionPlan[data-kind=code],.VkzYBG_subscriptionPlan[data-kind=token]{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-3);border-radius:999px;padding:1px 8px;font-weight:500}.VkzYBG_subscriptionTier{color:var(--dsw-alias-label-secondary);margin-left:6px}.VkzYBG_subscriptionAuto{color:var(--dsw-static-blue-500);background:color-mix(in srgb, var(--dsw-static-blue-500) 14%, var(--dsw-alias-bg-layer-2));border-radius:999px;margin-left:6px;padding:1px 6px;font-size:10px}.VkzYBG_subscriptionStatus{color:var(--dsw-alias-label-secondary);margin-bottom:6px;font-size:11px}.VkzYBG_subscriptionWindow{align-items:center;gap:10px;margin-top:8px;font-size:11px;display:flex}.VkzYBG_subscriptionWindowLabel{color:var(--dsw-alias-label-secondary);flex:0 0 44px}.VkzYBG_subscriptionTrack{background:var(--dsw-alias-bg-layer-3);border-radius:3px;flex:1;height:6px;overflow:hidden}.VkzYBG_subscriptionFill{background:var(--dsw-static-blue-500);border-radius:3px;height:100%;transition:width .2s;display:block}.VkzYBG_subscriptionFillWarn{background:var(--dsw-static-amber-500)}.VkzYBG_subscriptionFillOver{background:var(--dsw-static-red-500)}.VkzYBG_subscriptionMeta{flex-direction:column;flex:none;align-items:flex-end;gap:2px;display:flex}.VkzYBG_subscriptionPct{text-align:right;font-variant-numeric:tabular-nums;flex:none;min-width:52px}.VkzYBG_subscriptionExhausted{color:var(--dsw-static-red-500);min-width:52px;font-weight:600}.VkzYBG_subscriptionReset{color:var(--dsw-alias-label-caption);white-space:nowrap;flex:none;font-size:10px}.VkzYBG_providerGroupList{flex-direction:column;gap:10px;display:flex}.VkzYBG_providerGroup{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:12px;padding:12px 14px}.VkzYBG_providerGroupHead{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.VkzYBG_providerGroupTitle{align-items:center;gap:7px;min-width:0;display:inline-flex}.VkzYBG_providerGroupName{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600;line-height:18px}.VkzYBG_providerGroupMeta{flex:none;align-items:center;gap:10px;display:inline-flex}.VkzYBG_providerGroupBadge{color:var(--dsw-static-green-500);background:var(--dsw-alias-bg-layer-2);border-radius:999px;align-items:center;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px;display:inline-flex}.VkzYBG_providerGroupBalance{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;white-space:nowrap;align-items:baseline;gap:6px;font-size:12px;line-height:17px;display:inline-flex}.VkzYBG_providerGroupBalanceLabel{color:var(--dsw-alias-label-caption);font-size:11px;line-height:17px}.VkzYBG_rounds{margin-top:10px}.VkzYBG_roundsBars{align-items:flex-end;gap:3px;height:124px;padding:16px 2px 0;display:flex;overflow-x:auto}.VkzYBG_roundsBarCol{border-radius:5px 5px 0 0;flex-direction:column;flex:1 0 28px;justify-content:flex-end;align-items:stretch;height:100%;display:flex;position:relative}.VkzYBG_roundsBarColPeak{background:color-mix(in srgb, var(--dsw-static-amber-500) 16%, transparent)}.VkzYBG_roundsBarColOff{background:var(--dsw-alias-bg-module-platform)}.VkzYBG_roundsBarLabel{text-align:center;color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;max-width:100%;font-size:9px;line-height:1.2;position:absolute;bottom:0;left:0;right:0;overflow:hidden;transform:translateY(-100%)}.VkzYBG_roundsBarWrap{flex:1;align-items:flex-end;min-height:0;display:flex}.VkzYBG_roundsBar{background:var(--dsw-static-blue-500);border-radius:2px 2px 0 0;width:100%;min-height:2px;position:relative}.VkzYBG_roundsBarFlagged{background:var(--dsw-static-red-500);border-radius:2px 2px 0 0;width:100%;min-height:2px;position:relative}.VkzYBG_roundsFlagMark{background:var(--dsw-static-red-500);border-radius:50%;width:7px;height:7px;position:absolute;top:-3px;right:-3px}.VkzYBG_roundsAxis{color:var(--dsw-alias-label-secondary);justify-content:space-between;margin-top:6px;font-size:10px;display:flex}.VkzYBG_roundsEmpty{color:var(--dsw-alias-label-secondary);margin-top:10px;font-size:12px}.VkzYBG_heatmap{margin-top:10px}.VkzYBG_heatmapGrid{grid-template-columns:repeat(7,minmax(0,1fr));gap:8px;display:grid}.VkzYBG_heatmapCellEmpty{background:var(--dsw-alias-bg-layer-1);height:30px;color:var(--dsw-alias-label-dimmed);font-variant-numeric:tabular-nums;border-radius:8px;justify-content:center;align-items:center;font-size:11px;display:flex}.VkzYBG_heatmapCell{font-variant-numeric:tabular-nums;cursor:pointer;border:0;border-radius:8px;justify-content:center;align-items:center;height:30px;padding:0;font-size:11px;display:flex}.VkzYBG_heatmapCell[data-level="0"],.VkzYBG_heatmapCell[data-level="1"],.VkzYBG_heatmapCell[data-level="2"]{color:var(--dsw-alias-label-primary)}.VkzYBG_heatmapCell[data-level="3"],.VkzYBG_heatmapCell[data-level="4"]{color:var(--dsw-static-neutral-bluish-00)}.VkzYBG_heatmapFooter{color:var(--dsw-alias-label-secondary);align-items:center;gap:8px;margin-top:10px;font-size:10px;display:flex}.VkzYBG_heatmapLegend{gap:3px;display:inline-flex}.VkzYBG_heatmapLegend i{border-radius:4px;width:14px;height:14px;display:block}.VkzYBG_heatmapHover{font-variant-numeric:tabular-nums;margin-left:auto}.VkzYBG_heatmapRangeSwitch{gap:4px;margin-left:auto;display:inline-flex}.VkzYBG_heatmapRangeButton{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-text-secondary);cursor:pointer;background:0 0;border-radius:6px;padding:2px 8px;font-size:11px;line-height:1.4}.VkzYBG_heatmapRangeButtonActive{color:var(--dsw-alias-text-primary);border-color:currentColor;font-weight:600}.VkzYBG_heatmapYear{flex-direction:column;gap:6px;display:flex}.VkzYBG_heatmapYearBody{align-items:flex-start;gap:6px;display:flex}.VkzYBG_heatmapYearWeekdays{color:var(--dsw-alias-text-tertiary);flex:none;grid-template-rows:repeat(7,11px);gap:3px;padding-top:12px;font-size:9px;line-height:11px;display:grid}.VkzYBG_heatmapYearWeekday{white-space:nowrap;text-align:right;height:11px}.VkzYBG_heatmapYearMonths{min-width:max-content;color:var(--dsw-alias-text-tertiary);grid-template-columns:repeat(52,11px);gap:3px;font-size:9px;line-height:12px;display:grid;overflow:visible}.VkzYBG_heatmapYearMonth{white-space:nowrap;overflow:visible}.VkzYBG_heatmapYearScroll{padding-bottom:2px;overflow-x:auto}.VkzYBG_heatmapYearGrid{grid-template-rows:repeat(7,11px);grid-auto-flow:column;gap:3px;min-width:max-content;display:grid}.VkzYBG_heatmapYearCell{cursor:pointer;border:0;border-radius:2px;width:11px;height:11px;padding:0}.VkzYBG_triggerPopSubscription{width:auto;left:0;right:0}.VkzYBG_floatSub{flex-direction:column;gap:6px;min-width:0;display:flex}.VkzYBG_floatSubHead{flex-wrap:wrap;align-items:baseline;gap:6px;min-width:0;display:flex}.VkzYBG_floatSubName{color:var(--dsw-alias-label-primary);font-size:12px;font-weight:700}.VkzYBG_floatSubPlan{color:var(--dsw-alias-label-secondary);font-size:10px}.VkzYBG_floatSub .VkzYBG_subscriptionWindow{flex-wrap:wrap;gap:4px 10px}.VkzYBG_floatSub .VkzYBG_subscriptionWindowLabel{flex:none}.VkzYBG_floatSub .VkzYBG_subscriptionMeta{min-width:0;max-width:100%}.VkzYBG_floatSub .VkzYBG_subscriptionPct{min-width:0}.VkzYBG_floatSub .VkzYBG_subscriptionReset{white-space:normal;overflow-wrap:anywhere}.VkzYBG_triggerPopEmpty{color:var(--dsw-alias-label-tertiary);padding:2px 0;font-size:11px;line-height:1.5}.VkzYBG_triggerPopSwitcher{justify-content:flex-end;align-items:center;gap:8px;margin-top:2px;display:flex}.VkzYBG_triggerPopSwitchCount{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;font-size:10px}.VkzYBG_floatModeBtn{border:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 75%, transparent);background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 60%, transparent);color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;border-radius:10px;flex:1;padding:7px 10px;font-size:12px}.VkzYBG_floatModeBtnOn{border-color:var(--dsw-static-blue-500);color:var(--dsw-alias-label-primary);background:color-mix(in srgb, var(--dsw-static-blue-500) 16%, transparent)}.VkzYBG_floatTarget{color:var(--dsw-alias-label-secondary);cursor:pointer;align-items:center;gap:5px;font-size:12px;display:inline-flex}.VkzYBG_floatTargetLabel{color:var(--dsw-alias-label-secondary)}.VkzYBG_staleNotice{color:var(--dsw-static-amber-500);background:color-mix(in srgb, var(--dsw-static-amber-500) 12%, transparent);border:1px solid color-mix(in srgb, var(--dsw-static-amber-500) 30%, transparent);border-radius:10px;align-items:center;gap:6px;margin:0 0 10px;padding:8px 10px;font-size:11px;display:flex}.VkzYBG_plgHead{align-items:flex-start;gap:12px;display:flex}.VkzYBG_plgIcon{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);width:40px;height:40px;color:var(--dsw-alias-label-secondary);border-radius:10px;flex:none;justify-content:center;align-items:center;display:inline-flex}.VkzYBG_plgTitle{flex-direction:column;gap:4px;min-width:0;display:flex}.VkzYBG_plgNameRow{align-items:center;gap:8px;display:flex}.VkzYBG_plgName{color:var(--dsw-alias-label-primary);margin:0;font-size:13px;font-weight:600;line-height:18px}.VkzYBG_plgTag{height:18px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-3);white-space:nowrap;border-radius:5px;align-items:center;padding:0 6px;font-size:10px;font-weight:600;display:inline-flex}.VkzYBG_plgDesc{color:var(--dsw-alias-label-secondary);margin:0;font-size:11px;line-height:16px}.VkzYBG_plgGrid{border-top:1px solid var(--dsw-alias-border-l1);grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding-top:12px;display:grid}.VkzYBG_plgItem{flex-direction:column;gap:2px;min-width:0;display:flex}.VkzYBG_plgLabel{color:var(--dsw-alias-label-tertiary);font-size:10px;line-height:14px}.VkzYBG_plgVal{color:var(--dsw-alias-label-primary);word-break:break-all;font-size:12px;line-height:17px}.VkzYBG_plgLink{color:var(--dsw-static-blue-500);word-break:break-all;font-size:12px;line-height:17px;text-decoration:none}.VkzYBG_plgLink:hover{text-decoration:underline}.VkzYBG_tokenPanel{flex-direction:column;gap:14px;display:flex}.VkzYBG_tokenModelBar{background:var(--dsw-alias-bg-layer-2);border-radius:999px;height:8px;overflow:hidden}.VkzYBG_tokenModelParts{height:100%;display:flex}.VkzYBG_tokenModelPartIn{background:var(--dsw-static-blue-500)}.VkzYBG_tokenModelPartOut{background:var(--dsw-static-amber-500)}.VkzYBG_tokenModelShareRow{align-items:center;gap:6px;display:inline-flex}@media (width<=640px){.VkzYBG_kpiGrid{grid-template-columns:repeat(2,minmax(0,1fr))}.VkzYBG_hero{gap:14px}.VkzYBG_heroTop{flex-direction:column;align-items:flex-start;gap:12px}.VkzYBG_heroGauge{width:72px;height:72px}.VkzYBG_heroSide{gap:12px}.VkzYBG_heroSideSpacer{display:none}}.VkzYBG_peakCard{z-index:2000;border:1px solid var(--dsw-alias-border-l1);background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 82%, transparent);-webkit-backdrop-filter:blur(12px)saturate(1.2);border-radius:12px;flex-direction:column;gap:8px;min-width:280px;max-width:380px;padding:16px;animation:.2s VkzYBG_peakAlertIn;display:flex;position:fixed;box-shadow:0 4px 16px #00000014}.VkzYBG_peakCardCorner{bottom:18px;right:18px}.VkzYBG_peakCardCenter{top:20%;left:50%;transform:translate(-50%)}.VkzYBG_peakCardPeak{color:var(--dsw-static-blue-500)}.VkzYBG_peakCardOff{color:var(--dsw-static-green-500)}.VkzYBG_peakHead{justify-content:space-between;align-items:center;gap:8px;display:flex}.VkzYBG_peakTag{white-space:nowrap;border-radius:6px;align-items:center;gap:6px;height:20px;padding:0 8px;font-size:11px;font-weight:600;line-height:14px;display:inline-flex}.VkzYBG_peakTagPrimary{background:var(--dsw-alias-bg-layer-3);color:var(--dsw-static-blue-500)}.VkzYBG_peakTagSuccess{background:var(--dsw-alias-bg-layer-3);color:var(--dsw-static-green-500)}.VkzYBG_peakDot{border-radius:999px;flex:none;width:6px;height:6px}.VkzYBG_peakDotPrimary{background:var(--dsw-static-blue-500)}.VkzYBG_peakDotSuccess{background:var(--dsw-static-green-500)}.VkzYBG_peakClose{width:24px;height:24px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;font-size:15px;line-height:1;transition:background-color .14s,color .14s;display:inline-flex}.VkzYBG_peakClose:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2)}.VkzYBG_peakCount{font-variant-numeric:tabular-nums;font-size:28px;font-weight:700;line-height:34px}.VkzYBG_peakCountPrimary{color:var(--dsw-static-blue-500)}.VkzYBG_peakCountSuccess{color:var(--dsw-static-green-500)}.VkzYBG_peakDesc{color:var(--dsw-alias-label-secondary);margin:0;font-size:12px;line-height:18px}@keyframes VkzYBG_peakAlertIn{0%{opacity:0}to{opacity:1}}.VkzYBG_setCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:12px;flex-direction:column;gap:12px;padding:16px 18px;display:flex}.VkzYBG_setCardHead{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.VkzYBG_setCardMeta{flex-direction:column;gap:4px;min-width:0;display:flex}.VkzYBG_setCardTitle{color:var(--dsw-alias-label-primary);margin:0;font-size:13px;font-weight:600;line-height:18px}.VkzYBG_setCardDesc{color:var(--dsw-alias-label-secondary);margin:0;font-size:11px;line-height:16px}.VkzYBG_ctlCol{flex-direction:column;gap:10px;padding-top:2px;display:flex}.VkzYBG_ctlRow{align-items:center;gap:12px;min-height:28px;display:flex}.VkzYBG_ctlRowStretch{display:flex}.VkzYBG_ctlLabel{color:var(--dsw-alias-label-secondary);flex:0 0 96px;font-size:11px;line-height:16px}.VkzYBG_ctlGroup{flex-wrap:wrap;align-items:center;gap:8px;display:inline-flex}.VkzYBG_userPriceRow{border-bottom:1px solid var(--dsw-alias-border-l1);grid-template-columns:minmax(96px,1.1fr) minmax(120px,1.5fr) repeat(3,minmax(64px,84px)) auto auto;align-items:end;gap:8px 10px;padding:8px 0;display:grid}@media (width<=720px){.VkzYBG_userPriceRow{grid-template-columns:repeat(3,minmax(0,1fr))}}.VkzYBG_userPriceRow .VkzYBG_userPriceInput,.VkzYBG_userPriceRow .VkzYBG_userPriceInputNum{box-sizing:border-box;width:100%;min-width:0;max-width:none}.VkzYBG_userPriceOffPeak{flex-wrap:wrap;grid-column:1/-1;align-items:center;gap:10px;width:100%;padding:2px 0 6px;display:flex}.VkzYBG_userPriceField{flex-direction:column;gap:4px;min-width:0;display:flex}.VkzYBG_userPriceField .VkzYBG_ctlLabel{flex:none;font-size:11px}.VkzYBG_userPriceInput,.VkzYBG_userPriceInputNum{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:96px;max-width:160px;color:var(--dsw-alias-label-primary);border-radius:6px;padding:4px 8px;font-size:12px;line-height:16px}.VkzYBG_userPriceInputNum{min-width:72px;max-width:88px}.VkzYBG_userPriceRemove{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-static-red-400);cursor:pointer;background:0 0;border-radius:6px;align-self:center;padding:4px 8px;font-size:11px;line-height:16px}.VkzYBG_userPriceRemove:hover{border-color:var(--dsw-static-red-400)}.VkzYBG_rdo{color:var(--dsw-alias-label-secondary);cursor:pointer;white-space:nowrap;align-items:center;gap:6px;font-size:12px;line-height:16px;display:inline-flex}.VkzYBG_rdo input{opacity:0;pointer-events:none;position:absolute}.VkzYBG_rdoDot{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);border-radius:50%;flex:none;width:14px;height:14px;position:relative}.VkzYBG_rdo input:checked+.VkzYBG_rdoDot{border-color:var(--dsw-static-blue-500)}.VkzYBG_rdo input:checked+.VkzYBG_rdoDot:after{content:"";background:var(--dsw-static-blue-500);border-radius:50%;position:absolute;inset:3px}.VkzYBG_inp{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:6px;align-items:center;gap:4px;padding:2px 6px;display:inline-flex}.VkzYBG_affix{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.VkzYBG_prog{background:var(--dsw-alias-bg-module-platform);border-radius:999px;flex:1;min-width:0;height:6px;overflow:hidden}.VkzYBG_progFill{background:var(--dsw-static-blue-500);border-radius:999px;height:100%;transition:width .2s}.VkzYBG_btn{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;border-radius:999px;align-items:center;gap:6px;padding:0 12px;font-size:12px;line-height:16px;transition:border-color .16s,color .16s,background-color .16s;display:inline-flex}.VkzYBG_btn:hover{border-color:var(--dsw-static-blue-500);color:var(--dsw-alias-label-primary);background:color-mix(in srgb, var(--dsw-static-blue-500) 12%, var(--dsw-alias-bg-layer-1))}`,document.head.appendChild(e)}var C={panelTitle:`VkzYBG_panelTitle`,ubCardControlGroup:`VkzYBG_ubCardControlGroup`,tabPanel:`VkzYBG_tabPanel`,balanceDaysBadge:`VkzYBG_balanceDaysBadge`,dashboardModal:`VkzYBG_dashboardModal`,providerGroupMeta:`VkzYBG_providerGroupMeta`,popDotDirect:`VkzYBG_popDotDirect`,triggerSub:`VkzYBG_triggerSub`,ubTagError:`VkzYBG_ubTagError`,triggerPopSwitcher:`VkzYBG_triggerPopSwitcher`,shareSegUser:`VkzYBG_shareSegUser`,roundsBar:`VkzYBG_roundsBar`,tokenModelPartIn:`VkzYBG_tokenModelPartIn`,plgHead:`VkzYBG_plgHead`,balanceDetailRow:`VkzYBG_balanceDetailRow`,rounds:`VkzYBG_rounds`,popTagSub:`VkzYBG_popTagSub`,plgItem:`VkzYBG_plgItem`,popDotNeutral:`VkzYBG_popDotNeutral`,ubChipLabel:`VkzYBG_ubChipLabel`,flatTag:`VkzYBG_flatTag`,heroBudgetValue:`VkzYBG_heroBudgetValue`,floatModeBtn:`VkzYBG_floatModeBtn`,heroLabel:`VkzYBG_heroLabel`,heroSideLabel:`VkzYBG_heroSideLabel`,floatTargetLabel:`VkzYBG_floatTargetLabel`,healthBadge:`VkzYBG_healthBadge`,bucketOfficial:`VkzYBG_bucketOfficial`,ubAlertNote:`VkzYBG_ubAlertNote`,subscriptionStatus:`VkzYBG_subscriptionStatus`,switchKnob:`VkzYBG_switchKnob`,heroReadout:`VkzYBG_heroReadout`,heroGaugePctOver:`VkzYBG_heroGaugePctOver`,plgVal:`VkzYBG_plgVal`,chartLegendBar:`VkzYBG_chartLegendBar`,heatmapYearScroll:`VkzYBG_heatmapYearScroll`,chartLine:`VkzYBG_chartLine`,rangeToggle:`VkzYBG_rangeToggle`,reconcileNotice:`VkzYBG_reconcileNotice`,balanceDetailLabel:`VkzYBG_balanceDetailLabel`,chartLegend:`VkzYBG_chartLegend`,ubExtraNote:`VkzYBG_ubExtraNote`,ubStatLabel:`VkzYBG_ubStatLabel`,metricLabel:`VkzYBG_metricLabel`,heatmapLegend:`VkzYBG_heatmapLegend`,popModel:`VkzYBG_popModel`,rowlineDrillWrap:`VkzYBG_rowlineDrillWrap`,ctlGroup:`VkzYBG_ctlGroup`,ubCard:`VkzYBG_ubCard`,heroSideSpacer:`VkzYBG_heroSideSpacer`,roundsBarLabel:`VkzYBG_roundsBarLabel`,providerGroupBalanceLabel:`VkzYBG_providerGroupBalanceLabel`,popHead:`VkzYBG_popHead`,peakCountSuccess:`VkzYBG_peakCountSuccess`,unpricedHint:`VkzYBG_unpricedHint`,popModelLabel:`VkzYBG_popModelLabel`,providerGroupHead:`VkzYBG_providerGroupHead`,userPriceOffPeak:`VkzYBG_userPriceOffPeak`,budgetOverPulse:`VkzYBG_budgetOverPulse`,popModelStatusLow:`VkzYBG_popModelStatusLow`,rowlineName:`VkzYBG_rowlineName`,siteRowCost:`VkzYBG_siteRowCost`,dashboardBody:`VkzYBG_dashboardBody`,providerGroupBadge:`VkzYBG_providerGroupBadge`,tokenModelPartOut:`VkzYBG_tokenModelPartOut`,metricGrid:`VkzYBG_metricGrid`,heatmapYearMonths:`VkzYBG_heatmapYearMonths`,metricValue:`VkzYBG_metricValue`,feeChipOff:`VkzYBG_feeChipOff`,plgGrid:`VkzYBG_plgGrid`,peakDotSuccess:`VkzYBG_peakDotSuccess`,siteKindTag:`VkzYBG_siteKindTag`,subscriptionPlan:`VkzYBG_subscriptionPlan`,plgIcon:`VkzYBG_plgIcon`,peakDesc:`VkzYBG_peakDesc`,peakAlertIn:`VkzYBG_peakAlertIn`,subscriptionName:`VkzYBG_subscriptionName`,staleNotice:`VkzYBG_staleNotice`,ubNotesDesc:`VkzYBG_ubNotesDesc`,siteKindSite:`VkzYBG_siteKindSite`,chartBar:`VkzYBG_chartBar`,chartCrosshair:`VkzYBG_chartCrosshair`,planTag:`VkzYBG_planTag`,chartLegendLine:`VkzYBG_chartLegendLine`,tabButton:`VkzYBG_tabButton`,triggerYen:`VkzYBG_triggerYen`,reconcileText:`VkzYBG_reconcileText`,exportBar:`VkzYBG_exportBar`,ubAlertLeft:`VkzYBG_ubAlertLeft`,ubStatGrid:`VkzYBG_ubStatGrid`,modelProvider:`VkzYBG_modelProvider`,balanceDetailClose:`VkzYBG_balanceDetailClose`,heroGaugeArcOver:`VkzYBG_heroGaugeArcOver`,triggerPopEmpty:`VkzYBG_triggerPopEmpty`,floatSubHead:`VkzYBG_floatSubHead`,triggerPopSwitchCount:`VkzYBG_triggerPopSwitchCount`,rowlineRight:`VkzYBG_rowlineRight`,headTitleRow:`VkzYBG_headTitleRow`,siteRowName:`VkzYBG_siteRowName`,healthBad:`VkzYBG_healthBad`,subscriptionExhausted:`VkzYBG_subscriptionExhausted`,plgTag:`VkzYBG_plgTag`,siteRowMeta:`VkzYBG_siteRowMeta`,panelHint:`VkzYBG_panelHint`,shareDot:`VkzYBG_shareDot`,setCardHead:`VkzYBG_setCardHead`,ubExtraName:`VkzYBG_ubExtraName`,plgLink:`VkzYBG_plgLink`,affix:`VkzYBG_affix`,heroGaugeTrack:`VkzYBG_heroGaugeTrack`,feeChipError:`VkzYBG_feeChipError`,ubStatCard:`VkzYBG_ubStatCard`,siteRowCalls:`VkzYBG_siteRowCalls`,ubNotes:`VkzYBG_ubNotes`,healthBadgeBad:`VkzYBG_healthBadgeBad`,roundsBarCol:`VkzYBG_roundsBarCol`,setCardMeta:`VkzYBG_setCardMeta`,popDotSub:`VkzYBG_popDotSub`,chartAxisLabel:`VkzYBG_chartAxisLabel`,feeSuffix:`VkzYBG_feeSuffix`,emptyRow:`VkzYBG_emptyRow`,dashboardHead:`VkzYBG_dashboardHead`,ubChipOff:`VkzYBG_ubChipOff`,popModelRow:`VkzYBG_popModelRow`,modalFooter:`VkzYBG_modalFooter`,heroMeta:`VkzYBG_heroMeta`,shareSegAssistant:`VkzYBG_shareSegAssistant`,triggerPop:`VkzYBG_triggerPop`,chartTooltipDate:`VkzYBG_chartTooltipDate`,healthBadgeOk:`VkzYBG_healthBadgeOk`,balanceDaysBadgeLow:`VkzYBG_balanceDaysBadgeLow`,heroValue:`VkzYBG_heroValue`,deltaDown:`VkzYBG_deltaDown`,heatmap:`VkzYBG_heatmap`,heatmapCell:`VkzYBG_heatmapCell`,userPriceRemove:`VkzYBG_userPriceRemove`,chartSvg:`VkzYBG_chartSvg`,ubCardHead:`VkzYBG_ubCardHead`,subscriptionCard:`VkzYBG_subscriptionCard`,heroSideItem:`VkzYBG_heroSideItem`,estimatedTag:`VkzYBG_estimatedTag`,budgetFillOver:`VkzYBG_budgetFillOver`,ubTagAlert:`VkzYBG_ubTagAlert`,roundsBars:`VkzYBG_roundsBars`,plgName:`VkzYBG_plgName`,chartWrap:`VkzYBG_chartWrap`,triggerSpark:`VkzYBG_triggerSpark`,heroSide:`VkzYBG_heroSide`,triggerPrimary:`VkzYBG_triggerPrimary`,tokenModelBar:`VkzYBG_tokenModelBar`,ctlRowStretch:`VkzYBG_ctlRowStretch`,siteRow:`VkzYBG_siteRow`,feeNum:`VkzYBG_feeNum`,currencyToggle:`VkzYBG_currencyToggle`,metricCell:`VkzYBG_metricCell`,currencyButtonActive:`VkzYBG_currencyButtonActive`,dashboard:`VkzYBG_dashboard`,ubTablewrap:`VkzYBG_ubTablewrap`,triggerMetric:`VkzYBG_triggerMetric`,ubStatDetail:`VkzYBG_ubStatDetail`,popTitle:`VkzYBG_popTitle`,vendorLogo:`VkzYBG_vendorLogo`,pricingToggle:`VkzYBG_pricingToggle`,tabButtonActive:`VkzYBG_tabButtonActive`,peakClose:`VkzYBG_peakClose`,panel:`VkzYBG_panel`,popDot:`VkzYBG_popDot`,popModelStatus:`VkzYBG_popModelStatus`,heroGaugeCenter:`VkzYBG_heroGaugeCenter`,kpiGreen:`VkzYBG_kpiGreen`,triggerWrap:`VkzYBG_triggerWrap`,bucketCost:`VkzYBG_bucketCost`,rowline:`VkzYBG_rowline`,ctlCol:`VkzYBG_ctlCol`,roundsBarColOff:`VkzYBG_roundsBarColOff`,numCol:`VkzYBG_numCol`,progFill:`VkzYBG_progFill`,userPriceInputNum:`VkzYBG_userPriceInputNum`,bucketThird:`VkzYBG_bucketThird`,shareSeg:`VkzYBG_shareSeg`,rangeButtonActive:`VkzYBG_rangeButtonActive`,triggerLabel:`VkzYBG_triggerLabel`,uncataloguedTag:`VkzYBG_uncataloguedTag`,balanceDetailValue:`VkzYBG_balanceDetailValue`,deltaUp:`VkzYBG_deltaUp`,chartBarPlaceholder:`VkzYBG_chartBarPlaceholder`,shareTrack:`VkzYBG_shareTrack`,peakDotPrimary:`VkzYBG_peakDotPrimary`,reconcileIcon:`VkzYBG_reconcileIcon`,feeChipAlert:`VkzYBG_feeChipAlert`,roundsBarWrap:`VkzYBG_roundsBarWrap`,budgetFillWarn:`VkzYBG_budgetFillWarn`,inp:`VkzYBG_inp`,balanceCell:`VkzYBG_balanceCell`,heroBudgetLabel:`VkzYBG_heroBudgetLabel`,trigger:`VkzYBG_trigger`,modelDot:`VkzYBG_modelDot`,dashboardSubtitle:`VkzYBG_dashboardSubtitle`,modelCell:`VkzYBG_modelCell`,tokenModelShareRow:`VkzYBG_tokenModelShareRow`,userPriceField:`VkzYBG_userPriceField`,switchOn:`VkzYBG_switchOn`,ubExtraRow:`VkzYBG_ubExtraRow`,roundsAxis:`VkzYBG_roundsAxis`,shareValue:`VkzYBG_shareValue`,heatmapFooter:`VkzYBG_heatmapFooter`,ubAlert:`VkzYBG_ubAlert`,heroGauge:`VkzYBG_heroGauge`,heroGaugePct:`VkzYBG_heroGaugePct`,shareItem:`VkzYBG_shareItem`,ubModel:`VkzYBG_ubModel`,roundsBarFlagged:`VkzYBG_roundsBarFlagged`,roundsFlagMark:`VkzYBG_roundsFlagMark`,peakHead:`VkzYBG_peakHead`,subscriptionWindow:`VkzYBG_subscriptionWindow`,chartTooltip:`VkzYBG_chartTooltip`,heroGaugeLabel:`VkzYBG_heroGaugeLabel`,delta:`VkzYBG_delta`,ubStatValue:`VkzYBG_ubStatValue`,siteKindUnknown:`VkzYBG_siteKindUnknown`,subscriptionHead:`VkzYBG_subscriptionHead`,peakCardCorner:`VkzYBG_peakCardCorner`,rangeButton:`VkzYBG_rangeButton`,subscriptionFillWarn:`VkzYBG_subscriptionFillWarn`,exportLabel:`VkzYBG_exportLabel`,providerGroupList:`VkzYBG_providerGroupList`,modelName:`VkzYBG_modelName`,feeChipPrimary:`VkzYBG_feeChipPrimary`,heatmapYearGrid:`VkzYBG_heatmapYearGrid`,floatTarget:`VkzYBG_floatTarget`,tokenPanel:`VkzYBG_tokenPanel`,shareLegend:`VkzYBG_shareLegend`,providerGroup:`VkzYBG_providerGroup`,balanceDetailHead:`VkzYBG_balanceDetailHead`,setCardDesc:`VkzYBG_setCardDesc`,shareSegPeak:`VkzYBG_shareSegPeak`,plgLabel:`VkzYBG_plgLabel`,modelTableScroll:`VkzYBG_modelTableScroll`,userPriceInput:`VkzYBG_userPriceInput`,ubChipPeak:`VkzYBG_ubChipPeak`,feeSep:`VkzYBG_feeSep`,chartStack:`VkzYBG_chartStack`,ubModelName:`VkzYBG_ubModelName`,healthIdle:`VkzYBG_healthIdle`,heatmapYear:`VkzYBG_heatmapYear`,peakCardCenter:`VkzYBG_peakCardCenter`,vendorLetter:`VkzYBG_vendorLetter`,kpiGrid:`VkzYBG_kpiGrid`,ubNotesTerm:`VkzYBG_ubNotesTerm`,subscriptionGoldFlow:`VkzYBG_subscriptionGoldFlow`,heroGaugeArc:`VkzYBG_heroGaugeArc`,shareSegTool:`VkzYBG_shareSegTool`,exportButton:`VkzYBG_exportButton`,triggerPopSubscription:`VkzYBG_triggerPopSubscription`,tokenModelParts:`VkzYBG_tokenModelParts`,rdo:`VkzYBG_rdo`,ubPricepair:`VkzYBG_ubPricepair`,subscriptionPct:`VkzYBG_subscriptionPct`,heatmapRangeSwitch:`VkzYBG_heatmapRangeSwitch`,ubTable:`VkzYBG_ubTable`,ubCardSub:`VkzYBG_ubCardSub`,heroMain:`VkzYBG_heroMain`,balanceDetailTitle:`VkzYBG_balanceDetailTitle`,heroCurrency:`VkzYBG_heroCurrency`,heatmapRangeButtonActive:`VkzYBG_heatmapRangeButtonActive`,peakCard:`VkzYBG_peakCard`,kpiLabel:`VkzYBG_kpiLabel`,rowlist:`VkzYBG_rowlist`,peakCountPrimary:`VkzYBG_peakCountPrimary`,budgetInput:`VkzYBG_budgetInput`,prog:`VkzYBG_prog`,btn:`VkzYBG_btn`,currencyButton:`VkzYBG_currencyButton`,providerGroupBalance:`VkzYBG_providerGroupBalance`,rowlineMuted:`VkzYBG_rowlineMuted`,subscriptionMeta:`VkzYBG_subscriptionMeta`,plgDesc:`VkzYBG_plgDesc`,subscriptionAuto:`VkzYBG_subscriptionAuto`,ctlLabel:`VkzYBG_ctlLabel`,siteKindDirect:`VkzYBG_siteKindDirect`,heroBudget:`VkzYBG_heroBudget`,feeCount:`VkzYBG_feeCount`,subscriptionFillOver:`VkzYBG_subscriptionFillOver`,"billing-trigger":`VkzYBG_billing-trigger`,heatmapYearBody:`VkzYBG_heatmapYearBody`,popTagPrimary:`VkzYBG_popTagPrimary`,subscriptionWindowLabel:`VkzYBG_subscriptionWindowLabel`,providerGroupTitle:`VkzYBG_providerGroupTitle`,triggerIcon:`VkzYBG_triggerIcon`,metricValueSuccess:`VkzYBG_metricValueSuccess`,heroGaugeSvg:`VkzYBG_heroGaugeSvg`,heroBudgetFillOver:`VkzYBG_heroBudgetFillOver`,tabNav:`VkzYBG_tabNav`,ubTagPromo:`VkzYBG_ubTagPromo`,peakTag:`VkzYBG_peakTag`,triggerMain:`VkzYBG_triggerMain`,peakDot:`VkzYBG_peakDot`,chartTooltipSwatch:`VkzYBG_chartTooltipSwatch`,na:`VkzYBG_na`,rowlineChev:`VkzYBG_rowlineChev`,plgTitle:`VkzYBG_plgTitle`,reconcileDismiss:`VkzYBG_reconcileDismiss`,healthOk:`VkzYBG_healthOk`,chartTooltipRow:`VkzYBG_chartTooltipRow`,popModelName:`VkzYBG_popModelName`,dashboardTitle:`VkzYBG_dashboardTitle`,bucketSep:`VkzYBG_bucketSep`,heatmapHover:`VkzYBG_heatmapHover`,floatSubName:`VkzYBG_floatSubName`,peakCardPeak:`VkzYBG_peakCardPeak`,subscriptionTrack:`VkzYBG_subscriptionTrack`,shareSegOff:`VkzYBG_shareSegOff`,healthDot:`VkzYBG_healthDot`,heatmapYearMonth:`VkzYBG_heatmapYearMonth`,subscriptionTier:`VkzYBG_subscriptionTier`,plgNameRow:`VkzYBG_plgNameRow`,peakCardOff:`VkzYBG_peakCardOff`,setCardTitle:`VkzYBG_setCardTitle`,heroBudgetTrack:`VkzYBG_heroBudgetTrack`,kpiDetail:`VkzYBG_kpiDetail`,roundsBarColPeak:`VkzYBG_roundsBarColPeak`,roundsEmpty:`VkzYBG_roundsEmpty`,floatSubPlan:`VkzYBG_floatSubPlan`,rdoDot:`VkzYBG_rdoDot`,floatSub:`VkzYBG_floatSub`,kpiValue:`VkzYBG_kpiValue`,subscriptionGrid:`VkzYBG_subscriptionGrid`,switch:`VkzYBG_switch`,heatmapCellEmpty:`VkzYBG_heatmapCellEmpty`,kpiTile:`VkzYBG_kpiTile`,heroSideValue:`VkzYBG_heroSideValue`,panelHead:`VkzYBG_panelHead`,trendPanel:`VkzYBG_trendPanel`,userPriceRow:`VkzYBG_userPriceRow`,feeItem:`VkzYBG_feeItem`,heroTop:`VkzYBG_heroTop`,setCard:`VkzYBG_setCard`,ubNotesItem:`VkzYBG_ubNotesItem`,dashboardIn:`VkzYBG_dashboardIn`,modelTable:`VkzYBG_modelTable`,heatmapYearCell:`VkzYBG_heatmapYearCell`,subscriptionFill:`VkzYBG_subscriptionFill`,peakCount:`VkzYBG_peakCount`,siteRowCallsLow:`VkzYBG_siteRowCallsLow`,heatmapYearWeekdays:`VkzYBG_heatmapYearWeekdays`,triggerSparkBar:`VkzYBG_triggerSparkBar`,ubRate:`VkzYBG_ubRate`,ubTagSuccess:`VkzYBG_ubTagSuccess`,feeBar:`VkzYBG_feeBar`,triggerSparkHot:`VkzYBG_triggerSparkHot`,heroBudgetFill:`VkzYBG_heroBudgetFill`,ctlRow:`VkzYBG_ctlRow`,peakTagPrimary:`VkzYBG_peakTagPrimary`,tableScroll:`VkzYBG_tableScroll`,balanceDetailGrid:`VkzYBG_balanceDetailGrid`,providerGroupName:`VkzYBG_providerGroupName`,floatModeBtnOn:`VkzYBG_floatModeBtnOn`,dashboardRight:`VkzYBG_dashboardRight`,balanceDetailPop:`VkzYBG_balanceDetailPop`,peakTagSuccess:`VkzYBG_peakTagSuccess`,pricingTable:`VkzYBG_pricingTable`,hero:`VkzYBG_hero`,rowlineDrill:`VkzYBG_rowlineDrill`,ubTagNeutral:`VkzYBG_ubTagNeutral`,heatmapGrid:`VkzYBG_heatmapGrid`,heatmapRangeButton:`VkzYBG_heatmapRangeButton`,metricValuePrimary:`VkzYBG_metricValuePrimary`,chartEmpty:`VkzYBG_chartEmpty`,tabPanelIn:`VkzYBG_tabPanelIn`,chartGrid:`VkzYBG_chartGrid`,heatmapYearWeekday:`VkzYBG_heatmapYearWeekday`,ubCardTitle:`VkzYBG_ubCardTitle`,railButton:`VkzYBG_railButton`,closeButton:`VkzYBG_closeButton`,ubTag:`VkzYBG_ubTag`,siteRowTitle:`VkzYBG_siteRowTitle`,subscriptionReset:`VkzYBG_subscriptionReset`};let w={"opencode-go":{type:`code`,subscription:{amount:10,currency:`USD`,period:`month`},tier:{amount:10,currency:`USD`,periodDays:7,label:`周额度 $30`}},opencode:{type:`code`,subscription:{amount:10,currency:`USD`,period:`month`},tier:{amount:10,currency:`USD`,periodDays:7,label:`周额度 $30`}},"kimi-coding":{type:`code`},"zai-coding-cn":{type:`code`},"zai-coding":{type:`code`},"qwen-token-plan":{type:`code`},"qwen-token-plan-cn":{type:`code`},"xiaomi-token-plan-ams":{type:`code`},"xiaomi-token-plan-cn":{type:`code`},"xiaomi-token-plan-sgp":{type:`code`},"volcengine-token-plan":{type:`code`},"ark-token-plan":{type:`code`},"doubao-token-plan":{type:`code`},minimax:{type:`code`},"minimax-cn":{type:`code`},"minimax-token-plan":{type:`code`},"minimax-token-plan-cn":{type:`code`},"hunyuan-token-plan":{type:`code`},"tencent-token-plan":{type:`code`},"hy-token-plan":{type:`code`},"xinghuo-token-plan":{type:`code`},"xfyun-coding":{type:`code`},"spark-coding":{type:`code`},"huawei-token-plan":{type:`code`},"pangu-token-plan":{type:`code`},"huawei-maas-token-plan":{type:`code`},"volcengine-agent-plan":{type:`code`},"ark-agent-plan":{type:`code`},"baidu-token-plan":{type:`code`},"ernie-token-plan":{type:`code`},"wenxin-token-plan":{type:`code`}},T={glm:`zai-coding-cn`,bigmodel:`zai-coding-cn`,zhipu:`zai-coding-cn`,zhipuai:`zai-coding-cn`,zai:`zai-coding`,ark:`volcengine-token-plan`,volcengine:`volcengine-token-plan`,doubao:`doubao-token-plan`,moonshot:`kimi-coding`,kimi:`kimi-coding`,xiaomi:`xiaomi-token-plan-cn`,opencode:`opencode-go`};function ne(e){return e===``?e:T[e]??e}function re(e){let t=w[ne(e)];return t?.type===`code`?t.tier:void 0}let ie=[{key:`deepseek-v4-flash`,input:.14,cacheHit:.0028,output:.28},{key:`deepseek-v4-pro`,input:.435,cacheHit:.003625,output:.87},{key:`gpt-5.6-sol`,input:5,cacheHit:.5,output:30},{key:`gpt-5.6-terra`,input:2,cacheHit:.2,output:12},{key:`gpt-5.6-luna`,input:.2,cacheHit:.02,output:1.2},{key:`glm-5.2`,input:1.4,cacheHit:.26,output:4.4},{key:`qwen3.8-max`,input:2,cacheHit:.21,output:6},{key:`kimi-k3`,input:2.82,cacheHit:.28,output:14.08},{key:`grok-4.6`,input:2,cacheHit:.5,output:6},{key:`gemini-2.5-pro`,input:1.25,cacheHit:.125,output:10}],E,ae,oe,se,D;function O(e){D=e.length>0?e:void 0}function ce(){return D}function k(e){return F(e)}function A(e,t){if(D===void 0)return;let n=k(e),r=N(n);if(t!==void 0){for(let e of D)if(e.origin!==void 0&&e.origin!==``&&(k(e.key)===n||N(e.key)===r)&&e.origin===t)return{input:e.input,cacheHit:e.cacheHit,output:e.output,...e.currency===void 0?{}:{currency:e.currency}}}for(let e of D)if((e.origin===void 0||e.origin===``)&&(k(e.key)===n||N(e.key)===r))return{input:e.input,cacheHit:e.cacheHit,output:e.output,...e.currency===void 0?{}:{currency:e.currency}}}function le(e){E=typeof e.rate==`number`&&Number.isFinite(e.rate)&&e.rate>0?e.rate:void 0,ae=e.prices,oe=e.extraModels}function ue(e){se=e}function de(){return E??6.79}function fe(){return{rate:de(),live:E!==void 0}}function pe(e){return e>=9&&e<12||e>=14&&e<18}function me(e){return e==null||!Number.isFinite(e)?`peak`:he(e)?`offPeak`:pe((new Date(e).getUTCHours()+8)%24)?`peak`:`offPeak`}function he(e){let t=new Date(e+288e5).getUTCDay();return t===0||t===6}function ge(e){let t=new Date(e+288e5),n=t.getUTCDay(),r=t.getUTCHours()*36e5+t.getUTCMinutes()*6e4+t.getUTCSeconds()*1e3+t.getUTCMilliseconds();return(n===0?1:2)*864e5-r+324e5}let _e=[540,720,840,1080];function ve(e){return((e+288e5)%864e5+864e5)%864e5}function ye(e){if(he(e))return{tier:`offPeak`,nextSwitchInMs:ge(e)};let t=ve(e);for(let n of _e){let r=n*6e4;if(t<r)return{tier:me(e),nextSwitchInMs:r-t}}let n=_e[0]??0;return{tier:me(e),nextSwitchInMs:864e5-t+n*6e4}}function be(e,t){let{nextSwitchInMs:n}=ye(e);if(n>t)return null;let r=e+n;return{entering:me(r),atMs:r}}function j(e){let t=Math.max(1,Math.ceil(e/6e4)),n=Math.floor(t/60),r=t%60;return n>0?`${n}h${String(r).padStart(2,`0`)}m`:`${r}m`}let M=[{key:`flash`,name:`DeepSeek V4 Flash`,provider:`DeepSeek`,colorVar:`dsw-static-blue-500`,price:{currency:`CNY`,input:3,cacheHit:.1,output:9,offPeak:{input:1.5,cacheHit:.05,output:4.5}},peakHours:`09:00-12:00 / 14:00-18:00`},{key:`flash-vision-exp`,name:`DeepSeek V4 Flash Vision (Exp)`,provider:`DeepSeek`,colorVar:`dsw-static-blue-500`,price:{currency:`CNY`,input:3,cacheHit:.1,output:9,offPeak:{input:1.5,cacheHit:.05,output:4.5}},peakHours:`09:00-12:00 / 14:00-18:00`},{key:`pro`,name:`DeepSeek V4 Pro`,provider:`DeepSeek`,colorVar:`dsw-static-deepseek-500`,price:{currency:`CNY`,input:9,cacheHit:.3,output:27,offPeak:{input:4.5,cacheHit:.15,output:13.5}},peakHours:`09:00-12:00 / 14:00-18:00`},{key:`glm`,name:`GLM-5.2`,provider:`智谱 AI`,colorVar:`dsw-static-blue-600`,price:{currency:`CNY`,input:8,cacheHit:2,output:28}},{key:`glm-5.3`,name:`GLM-5.3`,provider:`智谱 AI`,colorVar:`dsw-static-blue-500`,price:{currency:`CNY`,input:8,cacheHit:2,output:28}},{key:`glm-5.3-flash`,name:`GLM-5.3-Flash`,provider:`智谱 AI`,colorVar:`dsw-static-blue-300`,price:{currency:`CNY`,input:.8,cacheHit:.23,output:2.8},promo:{factor:.5,endsAtMs:Date.UTC(2026,8,8,16,0,0),note:`限时 5 折`}},{key:`glm-4.6`,name:`GLM-4.6`,provider:`智谱 AI`,colorVar:`dsw-static-blue-400`,price:{currency:`CNY`,input:4,cacheHit:.8,output:16}},{key:`glm-4.5-air`,name:`GLM-4.5-Air`,provider:`智谱 AI`,colorVar:`dsw-static-blue-300`,price:{currency:`CNY`,input:.8,cacheHit:.16,output:2}},{key:`glm-4.7`,name:`GLM-4.7`,provider:`智谱 AI`,colorVar:`dsw-static-blue-400`,price:{currency:`CNY`,input:4,cacheHit:1,output:16},estimated:!0},{key:`glm-5-turbo`,name:`GLM-5-Turbo`,provider:`智谱 AI`,colorVar:`dsw-static-blue-500`,price:{currency:`CNY`,input:5,cacheHit:1.2,output:22}},{key:`glm-5.1`,name:`GLM-5.1`,provider:`智谱 AI`,colorVar:`dsw-static-blue-600`,price:{currency:`CNY`,input:6,cacheHit:1.2,output:24}},{key:`glm-5v-turbo`,name:`GLM-5V-Turbo`,provider:`智谱 AI`,colorVar:`dsw-static-blue-300`,price:{currency:`CNY`,input:5,cacheHit:1.2,output:22}},{key:`qwen-3.8-max`,name:`Qwen3.8 Max`,provider:`阿里通义`,colorVar:`dsw-static-blue-600`,price:{currency:`CNY`,input:12,cacheHit:1.5,output:36},extraRows:[{label:`显式缓存创建`,input:15},{label:`显式缓存命中`,input:1},{label:`Batch File`,input:6,output:18,note:`长期半价`},{label:`Batch Chat`,input:12,output:36,note:`与标准价一致`}]},{key:`qwen-3.8-flash`,name:`Qwen3.8 Flash`,provider:`阿里通义`,colorVar:`dsw-static-blue-400`,price:{currency:`CNY`,input:1,cacheHit:.1,output:3},extraRows:[{label:`显式缓存创建`,input:1.25},{label:`显式缓存命中`,input:.1},{label:`Batch File`,input:.5,output:1.5,note:`长期半价`},{label:`Batch Chat`,input:1,output:3,note:`与标准价一致`}]},{key:`qwen-max`,name:`Qwen3.7-Max`,provider:`阿里通义`,colorVar:`dsw-static-blue-300`,price:{currency:`CNY`,input:12,cacheHit:1.2,output:36},promo:{factor:.5,note:`限时 5 折`},extraRows:[{label:`显式缓存创建`,input:15},{label:`显式缓存命中`,input:1.2},{label:`Batch File`,input:6,output:18,note:`长期半价`},{label:`Batch Chat`,input:12,output:36,note:`与标准价一致`}]},{key:`qwen-plus`,name:`Qwen3.5-Plus`,provider:`阿里通义`,colorVar:`dsw-static-blue-500`,price:{currency:`CNY`,input:.8,cacheHit:.08,output:4.8},extraRows:[{label:`显式缓存创建`,input:1},{label:`显式缓存命中`,input:.08},{label:`Batch File`,input:.4,output:2.4,note:`长期半价`},{label:`Batch Chat`,input:.8,output:4.8,note:`与标准价一致`}]},{key:`qwen-flash`,name:`Qwen3.5-Flash`,provider:`阿里通义`,colorVar:`dsw-static-blue-400`,price:{currency:`CNY`,input:.2,cacheHit:.02,output:2},extraRows:[{label:`显式缓存创建`,input:.25},{label:`显式缓存命中`,input:.02}]},{key:`doubao`,name:`Doubao Seed-2.0 Pro`,provider:`字节豆包`,colorVar:`dsw-static-red-500`,price:{currency:`CNY`,input:3.2,cacheHit:.64,output:16}},{key:`doubao-mini`,name:`Doubao Seed-2.0 Mini`,provider:`字节豆包`,colorVar:`dsw-static-red-300`,price:{currency:`CNY`,input:.2,cacheHit:.02,output:2}},{key:`doubao-1.6`,name:`Doubao Seed-1.6`,provider:`字节豆包`,colorVar:`dsw-static-red-400`,price:{currency:`CNY`,input:.8,cacheHit:0,output:8}},{key:`doubao-seed-evolving`,name:`Doubao-Seed-Evolving`,provider:`字节豆包`,colorVar:`dsw-static-red-500`,price:{currency:`CNY`,input:6,cacheHit:1.2,output:30}},{key:`doubao-seed-2.1-pro`,name:`Doubao Seed-2.1 Pro`,provider:`字节豆包`,colorVar:`dsw-static-red-400`,price:{currency:`CNY`,input:6,cacheHit:1.2,output:30}},{key:`doubao-seed-2.1-turbo`,name:`Doubao Seed-2.1 Turbo`,provider:`字节豆包`,colorVar:`dsw-static-red-300`,price:{currency:`CNY`,input:3,cacheHit:.6,output:15}},{key:`kimi`,name:`Kimi K2.7 Code`,provider:`月之暗面`,colorVar:`dsw-static-neutral-bluish-700`,price:{currency:`CNY`,input:6.5,cacheHit:1.3,output:27}},{key:`kimi-k2.7-hs`,name:`Kimi K2.7 Code HighSpeed`,provider:`月之暗面`,colorVar:`dsw-static-neutral-bluish-600`,price:{currency:`CNY`,input:13,cacheHit:2.6,output:54}},{key:`kimi-k2.6`,name:`Kimi K2.6`,provider:`月之暗面`,colorVar:`dsw-static-neutral-bluish-500`,price:{currency:`CNY`,input:6.5,cacheHit:1.1,output:27}},{key:`kimi-k3`,name:`Kimi K3`,provider:`月之暗面`,colorVar:`dsw-static-neutral-bluish-500`,price:{currency:`CNY`,input:20,cacheHit:2,output:100}},{key:`mimo-v2.5`,name:`MiMo V2.5`,provider:`小米`,colorVar:`dsw-static-green-400`,price:{currency:`CNY`,input:1,cacheHit:.02,output:2}},{key:`mimo-v2.5-pro`,name:`MiMo V2.5 Pro`,provider:`小米`,colorVar:`dsw-static-green-400`,price:{currency:`CNY`,input:3,cacheHit:.025,output:6}},{key:`minimax`,name:`MiniMax-M3`,provider:`MiniMax`,colorVar:`dsw-static-amber-500`,price:{currency:`CNY`,input:2.1,cacheHit:.42,output:8.4}},{key:`minimax-m2.7`,name:`MiniMax-M2.7`,provider:`MiniMax`,colorVar:`dsw-static-amber-400`,price:{currency:`CNY`,input:2.1,cacheHit:.42,output:8.4}},{key:`minimax-m2.7-highspeed`,name:`MiniMax-M2.7-highspeed`,provider:`MiniMax`,colorVar:`dsw-static-amber-500`,price:{currency:`CNY`,input:4.2,cacheHit:.42,output:16.8}},{key:`ernie`,name:`ERNIE-5.1`,provider:`百度文心`,colorVar:`dsw-static-blue-300`,price:{currency:`CNY`,input:4,cacheHit:.4,output:18}},{key:`hunyuan`,name:`混元 Hy3`,provider:`腾讯混元`,colorVar:`dsw-static-amber-400`,price:{currency:`CNY`,input:1,cacheHit:.25,output:4}},{key:`hunyuan-t1`,name:`混元 T1`,provider:`腾讯混元`,colorVar:`dsw-static-amber-300`,price:{currency:`CNY`,input:1,cacheHit:.1,output:4}},{key:`yi`,name:`Yi-Lightning`,provider:`零一万物`,colorVar:`dsw-static-green-500`,price:{currency:`CNY`,input:.99,cacheHit:.1,output:.99}},{key:`step`,name:`Step 3.7 Flash`,provider:`阶跃星辰`,colorVar:`dsw-static-neutral-bluish-400`,price:{currency:`CNY`,input:1.35,cacheHit:.27,output:8.1}},{key:`spark`,name:`Spark 4.0 Ultra`,provider:`科大讯飞`,colorVar:`dsw-static-green-400`,price:{currency:`CNY`,input:5,cacheHit:.5,output:10},estimated:!0},{key:`sensenova`,name:`SenseNova 6.5`,provider:`商汤`,colorVar:`dsw-static-red-400`,price:{currency:`CNY`,input:4.5,cacheHit:.45,output:9},estimated:!0},{key:`baichuan`,name:`Baichuan M3-Plus`,provider:`百川智能`,colorVar:`dsw-static-neutral-bluish-500`,price:{currency:`CNY`,input:5,cacheHit:.5,output:9}},{key:`gpt-5.6-sol`,name:`GPT-5.6 Sol`,provider:`OpenAI`,colorVar:`dsw-static-green-500`,price:{currency:`USD`,input:5,cacheHit:.5,output:30}},{key:`gpt-5.6-terra`,name:`GPT-5.6 Terra`,provider:`OpenAI`,colorVar:`dsw-static-green-400`,price:{currency:`USD`,input:2,cacheHit:.2,output:12}},{key:`gpt-5.6-luna`,name:`GPT-5.6 Luna`,provider:`OpenAI`,colorVar:`dsw-static-green-500`,price:{currency:`USD`,input:.2,cacheHit:.02,output:1.2}},{key:`gemini-pro`,name:`Gemini 3.1 Pro`,provider:`Google`,colorVar:`dsw-static-blue-600`,price:{currency:`USD`,input:2,cacheHit:.2,output:12,offPeak:{input:1,cacheHit:.1,output:6}},peakHours:`Standard / Flex`,tierSemantics:`latency`},{key:`gemini-flash`,name:`Gemini 3.6 Flash`,provider:`Google`,colorVar:`dsw-static-blue-400`,price:{currency:`USD`,input:1.5,cacheHit:.15,output:7.5,offPeak:{input:.75,cacheHit:.075,output:3.75}},peakHours:`Standard / Flex`,tierSemantics:`latency`},{key:`grok`,name:`Grok 4.6`,provider:`xAI`,colorVar:`dsw-static-neutral-bluish-700`,price:{currency:`USD`,input:2,cacheHit:.5,output:6}},{key:`grok-4.3`,name:`Grok 4.3`,provider:`xAI`,colorVar:`dsw-static-neutral-bluish-500`,price:{currency:`USD`,input:1.25,cacheHit:.2,output:2.5}},{key:`llama`,name:`Llama 4 Maverick`,provider:`Meta`,colorVar:`dsw-static-red-500`,price:{currency:`USD`,input:.2,cacheHit:.05,output:.6}},{key:`llama-scout`,name:`Llama 4 Scout`,provider:`Meta`,colorVar:`dsw-static-red-400`,price:{currency:`USD`,input:.1,cacheHit:.025,output:.3}},{key:`claude-opus-4-6`,name:`Claude Opus 4.6`,provider:`Anthropic`,colorVar:`dsw-static-red-500`,price:{currency:`USD`,input:5,cacheHit:.5,output:25}},{key:`claude-sonnet-4-6`,name:`Claude Sonnet 4.6`,provider:`Anthropic`,colorVar:`dsw-static-red-400`,price:{currency:`USD`,input:3,cacheHit:.3,output:15}},{key:`claude-haiku-4-5`,name:`Claude Haiku 4.5`,provider:`Anthropic`,colorVar:`dsw-static-red-300`,price:{currency:`USD`,input:1,cacheHit:.1,output:5}},{key:`claude-opus-5`,name:`Claude Opus 5`,provider:`Anthropic`,colorVar:`dsw-static-red-500`,price:{currency:`USD`,input:5,cacheHit:.5,output:25}},{key:`claude-sonnet-5`,name:`Claude Sonnet 5`,provider:`Anthropic`,colorVar:`dsw-static-red-400`,price:{currency:`USD`,input:2,cacheHit:.2,output:10}},{key:`mistral-large-2512`,name:`Mistral Large 3`,provider:`Mistral AI`,colorVar:`dsw-static-violet-500`,price:{currency:`USD`,input:.5,cacheHit:.05,output:1.5}},{key:`mistral-small-2603`,name:`Mistral Small 4`,provider:`Mistral AI`,colorVar:`dsw-static-violet-400`,price:{currency:`USD`,input:.15,cacheHit:.015,output:.6}},{key:`ministral-8b-latest`,name:`Ministral 8B`,provider:`Mistral AI`,colorVar:`dsw-static-violet-300`,price:{currency:`USD`,input:.1,cacheHit:.01,output:.1}},{key:`command-a-03-2025`,name:`Command A`,provider:`Cohere`,colorVar:`dsw-static-cyan-500`,price:{currency:`USD`,input:2.5,cacheHit:.25,output:10}},{key:`command-r-08-2024`,name:`Command R`,provider:`Cohere`,colorVar:`dsw-static-cyan-400`,price:{currency:`USD`,input:.15,cacheHit:.015,output:.6}},{key:`longcat-2.0`,name:`LongCat 2.0`,provider:`美团`,colorVar:`dsw-static-amber-500`,price:{currency:`CNY`,input:4,cacheHit:.8,output:16},estimated:!0},{key:`minicpm-v-4.5`,name:`MiniCPM-V 4.5`,provider:`面壁智能`,colorVar:`dsw-static-green-500`,price:{currency:`CNY`,input:1,cacheHit:.2,output:4},estimated:!0},{key:`ernie-4.5`,name:`ERNIE-4.5 300B`,provider:`百度文心`,colorVar:`dsw-static-blue-300`,price:{currency:`CNY`,input:2,cacheHit:.4,output:8},estimated:!0},{key:`dots-3-note-preview`,name:`Dots3-Note Preview`,provider:`小红书`,colorVar:`dsw-static-red-500`,price:{currency:`CNY`,input:2,cacheHit:.4,output:8},estimated:!0},{key:`qwen3.6-max`,name:`Qwen3.6 Max`,provider:`阿里通义`,colorVar:`dsw-static-orange-500`,price:{currency:`CNY`,input:9,cacheHit:.9,output:54},extraRows:[{label:`显式缓存创建`,input:11.25},{label:`显式缓存命中`,input:.9}]},{key:`qwen3-coder-plus`,name:`Qwen3-Coder Plus`,provider:`阿里通义`,colorVar:`dsw-static-orange-400`,price:{currency:`CNY`,input:4,cacheHit:.8,output:16},extraRows:[{label:`显式缓存创建`,input:5},{label:`显式缓存命中`,input:.4}]},{key:`qwen3-coder`,name:`Qwen3-Coder 480B`,provider:`阿里通义`,colorVar:`dsw-static-orange-300`,price:{currency:`CNY`,input:4,cacheHit:.8,output:16},estimated:!0},{key:`glm-4.5-x`,name:`GLM-4.5-X`,provider:`智谱 AI`,colorVar:`dsw-static-blue-400`,price:{currency:`CNY`,input:4,cacheHit:1,output:16},estimated:!0},{key:`glm-5.2-fast`,name:`GLM-5.2 Fast`,provider:`智谱 AI`,colorVar:`dsw-static-blue-300`,price:{currency:`CNY`,input:6,cacheHit:1.2,output:24},estimated:!0},{key:`kimi-k3-fast`,name:`Kimi K3 Fast`,provider:`月之暗面`,colorVar:`dsw-static-cyan-400`,price:{currency:`CNY`,input:20,cacheHit:2,output:100},estimated:!0},{key:`kimi-k2.7-code-fast`,name:`Kimi K2.7 Code Fast`,provider:`月之暗面`,colorVar:`dsw-static-cyan-400`,price:{currency:`CNY`,input:6.5,cacheHit:1.3,output:27},estimated:!0},{key:`kimi-k2.6-fast`,name:`Kimi K2.6 Fast`,provider:`月之暗面`,colorVar:`dsw-static-cyan-300`,price:{currency:`CNY`,input:6.5,cacheHit:1.1,output:27},estimated:!0},{key:`kimi-k2.6-turbo`,name:`Kimi K2.6 Turbo`,provider:`月之暗面`,colorVar:`dsw-static-cyan-300`,price:{currency:`CNY`,input:6.5,cacheHit:1.1,output:27},estimated:!0},{key:`kimi-k2-thinking-turbo`,name:`Kimi K2 Thinking Turbo`,provider:`月之暗面`,colorVar:`dsw-static-cyan-300`,price:{currency:`CNY`,input:8,cacheHit:1,output:58}},{key:`doubao-seed-2.0-code`,name:`Doubao Seed-2.0 Code`,provider:`字节豆包`,colorVar:`dsw-static-red-500`,price:{currency:`CNY`,input:3.2,cacheHit:.64,output:16}},{key:`doubao-seed-2.0-lite`,name:`Doubao Seed-2.0 Lite`,provider:`字节豆包`,colorVar:`dsw-static-red-300`,price:{currency:`CNY`,input:.6,cacheHit:.12,output:3.6}},{key:`other`,name:`其他模型`,provider:`Custom`,colorVar:`dsw-static-neutral-bluish-500`,price:{currency:`CNY`,input:0,cacheHit:0,cacheMiss:0,output:0}}],xe={"deepseek-v4-flash":`flash`,"deepseek-v4-flash-vision-exp":`flash-vision-exp`,"deepseek-v4-pro":`pro`,"glm-5.2":`glm`,"glm-4.5-air":`glm-4.5-air`,"glm-4.5air":`glm-4.5-air`,"glm-4.7":`glm-4.7`,"glm-5-turbo":`glm-5-turbo`,"glm-5.1":`glm-5.1`,"glm-5.3-flash":`glm-5.3-flash`,"glm-5v-turbo":`glm-5v-turbo`,"glm-5v.1":`glm-5v-turbo`,"claude-opus-4-6":`claude-opus-4-6`,"claude-opus-4.6":`claude-opus-4-6`,"claude-sonnet-4-6":`claude-sonnet-4-6`,"claude-sonnet-4.6":`claude-sonnet-4-6`,"claude-haiku-4-5":`claude-haiku-4-5`,"claude-haiku-4.5":`claude-haiku-4-5`,"claude-opus-5":`claude-opus-5`,"claude-sonnet-5":`claude-sonnet-5`,"mistral-large-2512":`mistral-large-2512`,"mistral-large-3":`mistral-large-2512`,"mistral-small-2603":`mistral-small-2603`,"mistral-small-4":`mistral-small-2603`,"ministral-8b-latest":`ministral-8b-latest`,"ministral-8b":`ministral-8b-latest`,"command-a-03-2025":`command-a-03-2025`,"command-a":`command-a-03-2025`,"command-r-08-2024":`command-r-08-2024`,"command-r":`command-r-08-2024`,"longcat-2.0":`longcat-2.0`,"longcat-2":`longcat-2.0`,"minicpm-v-4.5":`minicpm-v-4.5`,"minicpm-v-4.5-thinking":`minicpm-v-4.5`,"ernie-4.5":`ernie-4.5`,"ernie-4.5-300b":`ernie-4.5`,"dots-3-note-preview":`dots-3-note-preview`,"dots-3-note":`dots-3-note-preview`,"dots3-note-preview":`dots-3-note-preview`,"rednote-dots3":`dots-3-note-preview`,"doubao-seed-evolving":`doubao-seed-evolving`,"doubao-seed-evolve":`doubao-seed-evolving`,"doubao-seed-2.1-pro":`doubao-seed-2.1-pro`,"doubao-seed-2.1-pro-290000":`doubao-seed-2.1-pro`,"doubao-seed-2.1-turbo":`doubao-seed-2.1-turbo`,"doubao-seed-2-1-turbo":`doubao-seed-2.1-turbo`,"qwen3.8-max":`qwen-3.8-max`,"qwen3.8-flash":`qwen-3.8-flash`,"qwen3.7-max":`qwen-max`,"qwen3.6-max":`qwen3.6-max`,"qwen3.6-max-preview":`qwen3.6-max`,"qwen3-coder-plus":`qwen3-coder-plus`,"qwen3-coder":`qwen3-coder`,"qwen3-coder-480b":`qwen3-coder`,"glm-4.5-x":`glm-4.5-x`,"glm-4.5x":`glm-4.5-x`,"glm-5.2-fast":`glm-5.2-fast`,"glm-5.2f":`glm-5.2-fast`,"kimi-k3-fast":`kimi-k3-fast`,"kimi-k3f":`kimi-k3-fast`,"kimi-k2.7-code-fast":`kimi-k2.7-code-fast`,"kimi-k2.7-code-f":`kimi-k2.7-code-fast`,"kimi-k2.6-fast":`kimi-k2.6-fast`,"kimi-k2.6-turbo":`kimi-k2.6-turbo`,"kimi-k2-thinking-turbo":`kimi-k2-thinking-turbo`,"doubao-seed-2.0-code":`doubao-seed-2.0-code`,"doubao-seed-2-0-code":`doubao-seed-2.0-code`,"doubao-seed-2.0-lite":`doubao-seed-2.0-lite`,"doubao-seed-2-0-lite":`doubao-seed-2.0-lite`,"qwen-max":`qwen-max`,"hunyuan-t1":`hunyuan-t1`,"step-3.7-flash":`step`,"seed-2.0-mini":`doubao-mini`,k3:`kimi-k3`,"kimi-k3":`kimi-k3`,"minimax-m1":`minimax`,"minimax-m2":`minimax`,"minimax-m3":`minimax`,"minimax-m2.7":`minimax-m2.7`,"minimax-m2.7-highspeed":`minimax-m2.7-highspeed`,"minimax-m2.7-high-speed":`minimax-m2.7-highspeed`,"minimax-m2-7":`minimax-m2.7`,"minimax-m2-7-highspeed":`minimax-m2.7-highspeed`,"minimax-m2-7-high-speed":`minimax-m2.7-highspeed`};function N(e){return String(e).toLowerCase().replace(/\([^)]*\)/g,``).replace(/[^a-z0-9]+/g,``)}let P=(()=>{let e=new Map,t=(t,n)=>{let r=N(t);r!==``&&!e.has(r)&&e.set(r,n)};for(let e of M)t(e.key,e.key);for(let[e,n]of Object.entries(xe))t(e,n);for(let e of ie)t(e.key,e.key);return e})();function F(e){let t=xe[e]??e;if(t===e){let t=N(e);if(t!==``){let e=P.get(t);if(e!==void 0)return e;let n=(oe??[]).find(e=>N(e.key)===t);if(n!==void 0)return n.key}}return t}function I(e){let t=F(e),n=ae?.[t];if(n!==void 0)return n;let r=ie.find(e=>e.key.toLowerCase()===t.toLowerCase());if(r!==void 0)return{input:r.input,cacheHit:r.cacheHit,output:r.output}}function Se(e){let t=F(e),n=M.find(e=>e.key===t),r=oe?.find(e=>e.key===t),i=n??(r===void 0?(()=>{let e=M.at(-1);if(e!==void 0)return e;throw Error(`MODEL_CATALOG must not be empty`)})():L(r)),a=A(t);if(a!==void 0)return{...i,userPriced:!0,price:{currency:a.currency??`CNY`,input:a.input,cacheHit:a.cacheHit,output:a.output}};let o=I(t);return o===void 0?i:{...i,price:{currency:`USD`,input:o.input,cacheHit:o.cacheHit,output:o.output}}}function L(e){return{key:e.key,name:e.name,provider:e.provider,colorVar:`dsw-static-neutral-400`,price:{currency:`USD`,input:e.price.input,cacheHit:e.price.cacheHit,output:e.price.output}}}function Ce(e,t){let n=e.endsAtMs!==void 0&&t>=e.endsAtMs;return Number.isFinite(t)&&!n&&e.factor>0&&e.factor<1}function we(e,t){let{promo:n}=e;if(n===void 0||!Ce(n,t))return e;let r=e=>({input:e.input*n.factor,cacheHit:e.cacheHit*n.factor,...e.cacheMiss===void 0?{}:{cacheMiss:e.cacheMiss*n.factor},output:e.output*n.factor});return{...e,price:{...r(e.price),currency:e.price.currency,...e.price.offPeak===void 0?{}:{offPeak:r(e.price.offPeak)}}}}function Te(e=Date.now()){let t=[...M.map(t=>we(t,e))],n=new Set(t.map(e=>e.key.toLowerCase())),r=new Set(t.map(e=>N(e.key)));for(let e of se??[]){let i=e.id.toLowerCase();if((()=>{let t=F(e.id);return M.find(e=>e.key===t)})()!==void 0)continue;let a=N(e.id);if(n.has(i)||a!==``&&r.has(a))continue;let o=(oe??[]).find(e=>N(e.key)===a),s;if(o!==void 0)s=L(o),e.name!==void 0&&e.name!==``&&(s={...s,name:e.name});else{let t=I(i);s=t===void 0?{key:F(e.id),name:e.name??e.id,provider:e.provider,colorVar:`dsw-static-neutral-400`,price:{currency:`USD`,input:0,cacheHit:0,output:0},uncatalogued:!0}:{key:i,name:e.name??e.id,provider:e.provider,colorVar:`dsw-static-neutral-400`,price:{currency:`USD`,input:t.input,cacheHit:t.cacheHit,output:t.output}}}n.add(s.key.toLowerCase()),a!==``&&r.add(a),t.push(s)}return t.map(e=>{let t=A(e.key);return t===void 0?e:{...e,userPriced:!0,price:{currency:t.currency??`CNY`,input:t.input,cacheHit:t.cacheHit,output:t.output}}})}function Ee(e){let t=getComputedStyle(document.documentElement).getPropertyValue(`--${e}`).trim();return t===``?`#8b95a3`:t}function De(e,t,n){let r=t.cacheMiss>0?t.cacheMiss:Math.max(0,t.input-t.cacheHit),i=Math.min(t.cacheHit,t.input),a=(r*(e.cacheMiss??e.input)+i*e.cacheHit+t.output*e.output)/1e6;return n===`USD`?a*de():a}function Oe(e,t,n=.5,r=Date.now()){let i=we(e,r),a=De(i.price,t,i.price.currency),o=i.price.offPeak===void 0?a:De(i.price.offPeak,t,i.price.currency);return a*n+o*(1-n)}function R(e){let t=de();return t>0?e/t:e}function z(e,t=`cny`){let n=Number(e);if(!Number.isFinite(n))return t===`cny`?`¥0`:`$0`;let r=t===`cny`?`¥`:`$`;return n<=0?`${r}0`:n>=1e3?`${r}${n.toFixed(0)}`:n>=10?`${r}${n.toFixed(1)}`:n>=.1?`${r}${n.toFixed(2)}`:`${r}${n.toFixed(3)}`}function ke(e,t=`CNY`){return e===0?`免费`:t===`USD`?e>=10?`$${e.toFixed(1)}`:`$${e.toFixed(2)}`:e>=10?`¥${e.toFixed(1)}`:`¥${e.toFixed(2)}`}function Ae(e,t,n,r){return r<=0||!Number.isFinite(r)||t===(n===`usd`?`USD`:`CNY`)?e:n===`usd`?e/r:e*r}function B(e){return e>=1e9?`${(e/1e9).toFixed(2)}B`:e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(0)}K`:String(e)}function je(e){let t=Number(e);return Number.isFinite(t)?`${t.toFixed(1)}%`:`0.0%`}let V={top:18,right:40,bottom:26,left:46};function Me(e){let[,t,n]=e.split(`-`);return`${Number(t)}/${Number(n)}`}function H(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(Math.round(e))}function Ne(e,t){let n=[];for(let r=0;r<e;r+=t)n.push(r);return e>0&&n[n.length-1]!==e-1&&n.push(e-1),n}let Pe={key:`__total__`,name:`总计`,color:``};function Fe({data:e,models:t=[],currency:n=`cny`,metric:i=`cost`}){let[o,s]=(0,r.useState)(null),c=e=>z(n===`usd`?R(e):e,n),l=e=>i===`tokens`?H(e):c(e),u=e=>i===`tokens`?e.tokens??0:e.cost,d=(0,r.useMemo)(()=>{let n=e.length;if(n===0)return null;let r=680-V.left-V.right,a=220-V.top-V.bottom,o=e=>n===1?V.left+r/2:V.left+r*e/(n-1),s=Math.max(...i===`tokens`?e.map(e=>e.tokens??0):e.map(e=>Math.max(e.cost,Object.values(e.byModel??{}).reduce((e,t)=>e+t,0))),1e-4),c=e=>V.top+a-e/s*a,l=Math.max(...e.map(e=>e.calls),1),d=e=>V.top+a-e/l*a,f=r/n,p=Math.min(18,f*.6);return{n,plotW:r,plotH:a,inner:o,yCost:c,yCalls:d,barW:p,bars:e.flatMap((e,n)=>{let r=o(n)-p/2;if(t.length===0||i===`tokens`)return[{date:e.date,model:Pe,x:r,base:0,value:u(e),topRounded:!0}];let a=null;for(let n of t)(e.byModel?.[n.key]??0)>0&&(a=n.key);let s=0;return t.map(t=>{let n=e.byModel?.[t.key]??0,i={date:e.date,model:t,x:r,base:s,value:n,topRounded:t.key===a};return s+=n,i})}),costTicks:[0,.25,.5,.75,1].map(e=>s*e).reverse(),callsTicks:[0,.25,.5,.75,1].map(e=>l*e).reverse(),linePath:e.map((e,t)=>{let n=d(e.calls);return`${t===0?`M`:`L`}${o(t)} ${n}`}).join(` `)}},[e,t,i]);if(d===null)return(0,a.jsx)(`div`,{className:C.chartEmpty,children:`暂无趋势数据`});let{n:f,plotW:p,plotH:m,inner:h,yCost:g,yCalls:_,barW:v,bars:y,costTicks:ee,callsTicks:te,linePath:b}=d,x=o===null?void 0:e[o],S=Ne(f,Math.max(1,Math.ceil(f/8)));return(0,a.jsxs)(`div`,{className:C.chartWrap,children:[(0,a.jsxs)(`svg`,{viewBox:`0 0 680 220`,className:C.chartSvg,role:`img`,"aria-label":`Daily cost by model and total calls`,onMouseLeave:()=>{s(null)},onMouseMove:e=>{let t=e.currentTarget.getBoundingClientRect(),n=((e.clientX-t.left)/t.width*680-V.left)/p,r=Math.round(n*(f-1));s(Math.min(Math.max(r,0),f-1))},children:[ee.map((e,t)=>{let n=g(e);return(0,a.jsxs)(`g`,{children:[(0,a.jsx)(`line`,{x1:V.left,x2:680-V.right,y1:n,y2:n,className:C.chartGrid}),(0,a.jsx)(`text`,{x:V.left-8,y:n+3,textAnchor:`end`,className:C.chartAxisLabel,children:l(e)})]},`cost-${t}`)}),y.map(t=>{if(t.value>0)return(0,a.jsx)(`rect`,{x:t.x,y:g(t.base+t.value),width:v,height:g(t.base)-g(t.base+t.value),rx:t.topRounded?2:0,className:t.model.color===``?C.chartBar:C.chartStack,style:t.model.color===``?void 0:{fill:t.model.color}},`${t.date}-${t.model.key}`);let n=e.find(e=>e.date===t.date);return n!==void 0&&n.calls>0&&t.base===0?(0,a.jsx)(`rect`,{x:t.x,y:g(0)-1,width:v,height:1,rx:0,className:C.chartBarPlaceholder},`${t.date}-${t.model.key}-placeholder`):null}),(0,a.jsx)(`path`,{d:b,fill:`none`,className:C.chartLine}),te.map((e,t)=>{let n=_(e);return(0,a.jsx)(`text`,{x:680-V.right+8,y:n+3,textAnchor:`start`,className:C.chartAxisLabel,children:H(e)},`calls-${t}`)}),S.map(t=>{let n=e[t];return n===void 0?null:(0,a.jsx)(`text`,{x:h(t),y:214,textAnchor:`middle`,className:C.chartAxisLabel,children:Me(n.date)},n.date)}),o!==null&&(0,a.jsx)(`line`,{x1:h(o),x2:h(o),y1:V.top,y2:V.top+m,className:C.chartCrosshair})]}),x!==void 0&&o!==null&&(0,a.jsxs)(`div`,{className:C.chartTooltip,style:{left:`${h(o)/680*100}%`,top:`${g(x.cost)/220*100}%`},children:[(0,a.jsx)(`div`,{className:C.chartTooltipDate,children:x.date}),i!==`tokens`&&t.filter(e=>(x.byModel?.[e.key]??0)>0).map(e=>(0,a.jsxs)(`div`,{className:C.chartTooltipRow,children:[(0,a.jsx)(`span`,{className:C.chartTooltipSwatch,style:{background:e.color}}),e.name,` `,(0,a.jsx)(`strong`,{children:c(x.byModel?.[e.key]??0)})]},e.key)),(0,a.jsxs)(`div`,{className:C.chartTooltipRow,children:[(0,a.jsx)(`span`,{className:C.chartLegendBar}),`总计 `,(0,a.jsx)(`strong`,{children:i===`tokens`?H(x.tokens??0):c(x.cost)})]}),(0,a.jsxs)(`div`,{className:C.chartTooltipRow,children:[(0,a.jsx)(`span`,{className:C.chartLegendLine}),`调用 `,(0,a.jsx)(`strong`,{children:x.calls.toLocaleString()})]})]}),t.length>0&&i!==`tokens`&&(0,a.jsxs)(`div`,{className:C.chartLegend,children:[t.map(e=>(0,a.jsxs)(`span`,{children:[(0,a.jsx)(`span`,{className:C.chartTooltipSwatch,style:{background:e.color}}),e.name]},e.key)),(0,a.jsxs)(`span`,{children:[(0,a.jsx)(`span`,{className:C.chartLegendLine}),`调用`]})]})]})}let U={top:14,right:42,bottom:22,left:46};function Ie(e){let t=Object.keys(e).sort(),n=[];for(let r of t.slice(-48)){let t=e[r];t!==void 0&&n.push({key:r,ttftMs:t.ttftAvg,...t.tpsAvg===void 0?{}:{tps:t.tpsAvg}})}return n}function Le(e){return e.slice(5,13).replace(`T`,` `)}function Re({perf:e,models:t,t:n}){let i=e=>t.find(t=>t.key===e)?.color??`#8b95a3`,o=(0,r.useMemo)(()=>e===void 0?[]:Object.entries(e.byModel).map(([e,n])=>({key:e,name:t.find(t=>t.key===e)?.name??e,color:i(e),samples:n.samples,ttftAvg:n.ttftAvg,ttftP50:n.ttftP50,ttftP90:n.ttftP90,...n.ttftMax===void 0?{}:{ttftMax:n.ttftMax},...n.ttftSpikes===void 0?{}:{ttftSpikes:n.ttftSpikes},...n.tpsAvg===void 0?{}:{tpsAvg:n.tpsAvg},latencyAvg:n.latencyAvg,estimatedSamples:n.estimatedSamples})).sort((e,t)=>t.samples-e.samples||t.ttftP90-e.ttftP90),[e,t]),s=(0,r.useMemo)(()=>{let t=e===void 0?[]:Ie(e.byHour);if(t.length===0)return null;let n=t.length,r=680-U.left-U.right,i=180-U.top-U.bottom,a=e=>n===1?U.left+r/2:U.left+r*e/(n-1),o=Math.max(...t.map(e=>e.ttftMs),1),s=Math.max(...t.map(e=>e.tps??0),1),c=e=>U.top+i-e/o*i,l=e=>U.top+i-e/s*i,u=t.map((e,t)=>`${t===0?`M`:`L`}${a(t)} ${c(e.ttftMs)}`).join(` `),d=t.some(e=>e.tps!==void 0)?t.map((e,t)=>`${t===0?`M`:`L`}${a(t)} ${l(e.tps??0)}`).join(` `):``,f=Math.max(1,Math.ceil(n/8)),p=[];for(let e=0;e<n;e+=f)p.push(e);return n>0&&p[p.length-1]!==n-1&&p.push(n-1),{points:t,n,inner:a,yTtft:c,ttftPath:u,tpsPath:d,indices:p,ttftTicks:[0,.5,1].map(e=>o*e).reverse(),maxTps:s}},[e]);return e===void 0||o.length===0?(0,a.jsx)(`div`,{className:C.chartEmpty,"data-testid":`billing-perf-empty`,children:n(`perfEmpty`)}):(0,a.jsxs)(`div`,{"data-testid":`billing-perf-panel`,children:[(0,a.jsx)(`div`,{className:C.tableScroll,"data-testid":`billing-perf-table`,children:(0,a.jsxs)(`table`,{className:C.modelTable,children:[(0,a.jsx)(`thead`,{children:(0,a.jsxs)(`tr`,{children:[(0,a.jsx)(`th`,{children:n(`model`)}),(0,a.jsx)(`th`,{className:C.numCol,children:n(`perfSamples`)}),(0,a.jsx)(`th`,{className:C.numCol,children:n(`perfTtft`)}),(0,a.jsx)(`th`,{className:C.numCol,children:n(`perfP50`)}),(0,a.jsx)(`th`,{className:C.numCol,children:n(`perfP90`)}),(0,a.jsx)(`th`,{className:C.numCol,children:n(`perfMax`)}),(0,a.jsx)(`th`,{className:C.numCol,children:n(`perfTps`)}),(0,a.jsx)(`th`,{className:C.numCol,children:n(`perfLatency`)}),(0,a.jsx)(`th`,{className:C.numCol,children:n(`perfEstimated`)})]})}),(0,a.jsx)(`tbody`,{children:o.map(e=>(0,a.jsxs)(`tr`,{children:[(0,a.jsx)(`td`,{children:(0,a.jsxs)(`span`,{className:C.modelCell,children:[(0,a.jsx)(`span`,{className:C.modelDot,style:{background:e.color}}),(0,a.jsx)(`span`,{className:C.modelName,children:e.name})]})}),(0,a.jsx)(`td`,{className:C.numCol,children:e.samples.toLocaleString()}),(0,a.jsxs)(`td`,{className:C.numCol,children:[e.ttftAvg.toFixed(0),` ms`]}),(0,a.jsxs)(`td`,{className:C.numCol,children:[e.ttftP50.toFixed(0),` ms`]}),(0,a.jsxs)(`td`,{className:C.numCol,children:[e.ttftP90.toFixed(0),` ms`]}),(0,a.jsx)(`td`,{className:C.numCol,children:e.ttftMax===void 0?(0,a.jsx)(`span`,{className:C.na,children:`—`}):(0,a.jsxs)(`span`,{children:[e.ttftMax.toFixed(0),` ms`,e.ttftSpikes!==void 0&&e.ttftSpikes>0?` (${e.ttftSpikes}↑)`:``]})}),(0,a.jsx)(`td`,{className:C.numCol,children:e.tpsAvg===void 0?(0,a.jsx)(`span`,{className:C.na,children:`—`}):`${e.tpsAvg.toFixed(1)}`}),(0,a.jsxs)(`td`,{className:C.numCol,children:[e.latencyAvg.toFixed(0),` ms`]}),(0,a.jsx)(`td`,{className:C.numCol,children:e.estimatedSamples>0?e.estimatedSamples:(0,a.jsx)(`span`,{className:C.na,children:`—`})})]},e.key))})]})}),s!==null&&(0,a.jsxs)(`div`,{className:C.chartWrap,"data-testid":`billing-perf-hour`,children:[(0,a.jsxs)(`svg`,{viewBox:`0 0 680 180`,className:C.chartSvg,role:`img`,"aria-label":`Hourly TTFT and generation speed by model`,children:[s.ttftTicks.map((e,t)=>{let n=s.yTtft(e);return(0,a.jsxs)(`g`,{children:[(0,a.jsx)(`line`,{x1:U.left,x2:680-U.right,y1:n,y2:n,className:C.chartGrid}),(0,a.jsx)(`text`,{x:U.left-8,y:n+3,textAnchor:`end`,className:C.chartAxisLabel,children:e.toFixed(0)})]},`ttft-${t}`)}),(0,a.jsx)(`path`,{d:s.ttftPath,fill:`none`,className:C.chartLine}),s.tpsPath!==``&&(0,a.jsx)(`path`,{d:s.tpsPath,fill:`none`,className:C.chartLine,style:{stroke:`var(--dsw-static-amber-500)`,strokeDasharray:`4 4`}}),s.indices.map(e=>{let t=s.points[e];return t===void 0?null:(0,a.jsx)(`text`,{x:s.inner(e),y:174,textAnchor:`middle`,className:C.chartAxisLabel,children:Le(t.key)},t.key)}),(0,a.jsxs)(`text`,{x:680-U.right+8,y:U.top+4,textAnchor:`start`,className:C.chartAxisLabel,children:[n(`perfTpsUnit`),` `,s.maxTps.toFixed(0)]})]}),(0,a.jsxs)(`div`,{className:C.chartLegend,children:[(0,a.jsxs)(`span`,{children:[(0,a.jsx)(`span`,{className:C.chartLegendLine}),n(`perfTtft`),` (ms)`]}),(0,a.jsxs)(`span`,{children:[(0,a.jsx)(`span`,{className:C.chartLegendLine,style:{background:`var(--dsw-static-amber-500)`}}),n(`perfTps`),` (`,n(`perfTpsUnit`),`)`]})]})]})]})}let ze=`@kenz1117/dsh-ui-usage-billing`,Be=`kenz1117`;function W({t:e,version:t}){return(0,a.jsxs)(`section`,{className:C.setCard,"data-testid":`billing-plugin-info`,children:[(0,a.jsxs)(`div`,{className:C.plgHead,children:[(0,a.jsx)(`span`,{className:C.plgIcon,"aria-hidden":`true`,children:(0,a.jsx)(`svg`,{width:`20`,height:`20`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,a.jsx)(`path`,{d:`M10 3a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a2 2 0 0 0 4 0V4a1 1 0 0 1 1-1h1a1 1 0 0 1 1 1v1a2 2 0 0 0 4 0 1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-1a2 2 0 0 0 0 4h1a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-1a2 2 0 0 0-4 0v1a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-2a2 2 0 0 0-4 0v1a1 1 0 0 1-1 1h-1a1 1 0 0 1-1-1v-1a2 2 0 0 0-4 0 1 1 0 0 1-1 1H3a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1h1a2 2 0 0 0 0-4H3a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1h1a2 2 0 0 0 4 0z`})})}),(0,a.jsxs)(`div`,{className:C.plgTitle,children:[(0,a.jsxs)(`div`,{className:C.plgNameRow,children:[(0,a.jsx)(`h3`,{className:C.plgName,children:ze}),(0,a.jsx)(`span`,{className:C.plgTag,children:t===void 0?`—`:`v${t}`})]}),(0,a.jsx)(`p`,{className:C.plgDesc,children:`Usage billing dashboard for DeepSeek Harness`})]})]}),(0,a.jsxs)(`div`,{className:C.plgGrid,children:[(0,a.jsxs)(`div`,{className:C.plgItem,children:[(0,a.jsx)(`span`,{className:C.plgLabel,children:e(`pluginAuthor`)}),(0,a.jsxs)(`a`,{className:C.plgLink,href:`https://github.com/${Be}`,target:`_blank`,rel:`noreferrer`,children:[`KenZ`,` (`,Be,`)`]})]}),(0,a.jsxs)(`div`,{className:C.plgItem,children:[(0,a.jsx)(`span`,{className:C.plgLabel,children:e(`pluginRepository`)}),(0,a.jsx)(`a`,{className:C.plgLink,href:`https://github.com/kenz1117/dsh-ui-usage-billing`,target:`_blank`,rel:`noreferrer`,children:`GitHub`})]}),(0,a.jsxs)(`div`,{className:C.plgItem,children:[(0,a.jsx)(`span`,{className:C.plgLabel,children:e(`pluginNpm`)}),(0,a.jsx)(`a`,{className:C.plgLink,href:`https://www.npmjs.com/package/@kenz1117/dsh-ui-usage-billing`,target:`_blank`,rel:`noreferrer`,children:ze})]}),(0,a.jsxs)(`div`,{className:C.plgItem,children:[(0,a.jsx)(`span`,{className:C.plgLabel,children:e(`pluginLicense`)}),(0,a.jsx)(`span`,{className:C.plgVal,children:`MIT`})]})]})]})}function Ve(e=Date.now()){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())}`}function G(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(Math.round(e))}let K={top:14,right:18,bottom:22,left:46},He=`var(--dsw-static-blue-500)`,Ue=`#14b8a6`,q=`var(--dsw-static-amber-500)`;function We(e){return[`date,missInput,cacheHit,output,reasoning,total`,...e.map(e=>`${e.date},${e.miss},${e.hit},${e.output},${e.reasoning},${e.miss+e.hit+e.output}`)].join(`
|
|
2
2
|
`)}function Ge(e){let{stats:t,trendDays:n,onTrendDays:i,t:o}=e,{byDay:s,byModel:l,total:u}=t,d=(0,r.useMemo)(()=>{let e=[];for(let t=n-1;t>=0;--t){let n=new Date;n.setDate(n.getDate()-t);let r=Ve(n.getTime()),i=s[r];e.push({date:r,miss:i?.cacheMiss??0,hit:i?.cacheHit??0,output:i?.output??0,reasoning:i?.reasoning??0})}return e},[s,n]),f=(0,r.useMemo)(()=>{let e=0;return Object.entries(l).filter(([,e])=>e.calls>0).map(([t,n])=>{let r=n.input+n.output;e+=r;let i=n.cacheHit+n.cacheMiss;return{key:t,name:Se(t).name,input:n.input,output:n.output,reasoning:n.reasoning??0,calls:n.calls,cacheHit:n.cacheHit,cacheMiss:n.cacheMiss,cacheHitRate:i>0?n.cacheHit/i*100:0,total:r,share:0}}).sort((e,t)=>t.total-e.total).map(t=>({...t,share:e>0?t.total/e:0}))},[l]),p=(0,r.useMemo)(()=>{let e=u.cacheHit??0,t=u.cacheMiss??0,n=u.input??0,r=u.output??0,i=u.reasoning??0,a=e+t,o=a>0?e/a*100:0,s=r>0?i/r*100:0,c=r>0?n/r:0,l;for(let e of d){let t=e.miss+e.hit+e.output;(l===void 0||t>l.miss+l.hit+l.output)&&(l=e)}return{cacheHitRate:o,reasoningPct:s,io:c,peak:l,hit:e,miss:t,input:n,output:r,reasoning:i}},[u,d]),m=(0,r.useMemo)(()=>{let e=Object.entries(t.byTool??{}),n=e.slice(0,8),r=e.slice(8).reduce((e,[,t])=>e+t,0),i=e.reduce((e,[,t])=>e+t,0);return{top:n,rest:r>0?[[`…`,r]]:[],totalCalls:i}},[t.byTool]),h=(0,r.useMemo)(()=>{let e=d.length;if(e===0)return null;let t=680-K.left-K.right,n=200-K.top-K.bottom,r=Math.max(...d.map(e=>e.miss+e.hit+e.output),1),i=e=>K.top+n-e/r*n,a=t/e,o=Math.min(20,a*.6),s=n=>e===1?K.left+t/2:K.left+t*n/(e-1),c=Math.max(1,Math.ceil(e/8)),l=[];for(let t=0;t<e;t+=c)l.push(t);return e>0&&l[l.length-1]!==e-1&&l.push(e-1),{n:e,plotW:t,plotH:n,max:r,y:i,barW:o,inner:s,indices:l}},[d]);return(0,a.jsxs)(`div`,{className:C.tokenPanel,"data-testid":`billing-token-panel`,children:[(0,a.jsxs)(`div`,{className:C.exportBar,role:`group`,"aria-label":o(`tokenExport`),children:[(0,a.jsx)(`span`,{className:C.exportLabel,children:o(`export`)}),(0,a.jsx)(`button`,{type:`button`,className:C.exportButton,"data-testid":`billing-token-export-csv`,onClick:()=>{let e=new Blob([We(d)],{type:`text/csv`}),t=document.createElement(`a`);t.href=URL.createObjectURL(e),t.download=`token-daily-${Ve()}.csv`,t.click(),setTimeout(()=>URL.revokeObjectURL(t.href),0)},children:o(`tokenExportCsv`)}),(0,a.jsx)(`button`,{type:`button`,className:C.exportButton,"data-testid":`billing-token-export-json`,onClick:()=>{let e=new Blob([JSON.stringify({days:d,models:f,total:u},null,2)],{type:`application/json`}),t=document.createElement(`a`);t.href=URL.createObjectURL(e),t.download=`token-${Ve()}.json`,t.click(),setTimeout(()=>URL.revokeObjectURL(t.href),0)},children:o(`exportJson`)})]}),(0,a.jsxs)(`div`,{className:C.kpiGrid,"data-testid":`billing-token-kpis`,children:[(0,a.jsxs)(`div`,{className:C.kpiTile,children:[(0,a.jsx)(`span`,{className:C.kpiLabel,children:o(`tokenCacheHitRate`)}),(0,a.jsxs)(`span`,{className:C.kpiValue,children:[p.cacheHitRate.toFixed(1),`%`]}),(0,a.jsxs)(`span`,{className:C.kpiDetail,children:[B(p.hit),` / `,B(p.hit+p.miss),(u.cacheWrite??0)>0?` · ${o(`tokenCacheWrite`)} ${B(u.cacheWrite??0)}`:``]})]}),(0,a.jsxs)(`div`,{className:C.kpiTile,children:[(0,a.jsx)(`span`,{className:C.kpiLabel,children:o(`tokenReasoningShare`)}),(0,a.jsxs)(`span`,{className:C.kpiValue,children:[p.reasoningPct.toFixed(1),`%`]}),(0,a.jsx)(`span`,{className:C.kpiDetail,children:B(p.reasoning)})]}),(0,a.jsxs)(`div`,{className:C.kpiTile,children:[(0,a.jsx)(`span`,{className:C.kpiLabel,children:o(`tokenIo`)}),(0,a.jsx)(`span`,{className:C.kpiValue,children:p.io.toFixed(2)}),(0,a.jsxs)(`span`,{className:C.kpiDetail,children:[B(p.input),` / `,B(p.output)]})]}),(0,a.jsxs)(`div`,{className:C.kpiTile,children:[(0,a.jsx)(`span`,{className:C.kpiLabel,children:o(`tokenPeak`)}),(0,a.jsx)(`span`,{className:C.kpiValue,children:p.peak===void 0?`—`:G(p.peak.miss+p.peak.hit+p.peak.output)}),(0,a.jsx)(`span`,{className:C.kpiDetail,children:p.peak?.date??`—`})]})]}),(0,a.jsxs)(`section`,{className:C.panel,"data-testid":`billing-token-daily`,children:[(0,a.jsxs)(`div`,{className:C.panelHead,children:[(0,a.jsx)(`h3`,{className:C.panelTitle,children:o(`tokenDaily`)}),(0,a.jsx)(`span`,{className:C.rangeToggle,role:`group`,"aria-label":o(`tokenDaily`),children:[7,30].map(e=>(0,a.jsx)(`button`,{type:`button`,className:c(C.rangeButton,n===e&&C.rangeButtonActive),"aria-pressed":n===e,onClick:()=>{i(e)},"data-testid":`billing-token-${e}d`,children:o(e===7?`trend7d`:`trend30d`)},e))})]}),h===null?(0,a.jsx)(`div`,{className:C.chartEmpty,children:o(`trendEmpty`)}):(0,a.jsxs)(`div`,{className:C.chartWrap,children:[(0,a.jsxs)(`svg`,{viewBox:`0 0 680 200`,className:C.chartSvg,role:`img`,"aria-label":o(`tokenDaily`),children:[[0,.5,1].map(e=>{let t=h.max*e,n=h.y(t);return(0,a.jsxs)(`g`,{children:[(0,a.jsx)(`line`,{x1:K.left,x2:680-K.right,y1:n,y2:n,className:C.chartGrid}),(0,a.jsx)(`text`,{x:K.left-8,y:n+3,textAnchor:`end`,className:C.chartAxisLabel,children:G(t)})]},e)}),d.map((e,t)=>{let n=h.inner(t)-h.barW/2,r=h.y(0),i=h.y(e.miss),o=h.y(e.miss+e.hit),s=h.y(e.miss+e.hit+e.output);return(0,a.jsxs)(`g`,{children:[(0,a.jsx)(`rect`,{x:n,y:i,width:h.barW,height:r-i,fill:He}),(0,a.jsx)(`rect`,{x:n,y:o,width:h.barW,height:i-o,fill:Ue}),(0,a.jsx)(`rect`,{x:n,y:s,width:h.barW,height:o-s,fill:q})]},e.date)}),h.indices.map(e=>{let t=d[e];return t===void 0?null:(0,a.jsx)(`text`,{x:h.inner(e),y:194,textAnchor:`middle`,className:C.chartAxisLabel,children:t.date.slice(5)},t.date)})]}),(0,a.jsxs)(`div`,{className:C.chartLegend,children:[(0,a.jsxs)(`span`,{children:[(0,a.jsx)(`span`,{className:C.chartTooltipSwatch,style:{background:He}}),o(`tokenMiss`)]}),(0,a.jsxs)(`span`,{children:[(0,a.jsx)(`span`,{className:C.chartTooltipSwatch,style:{background:Ue}}),o(`tokenHit`)]}),(0,a.jsxs)(`span`,{children:[(0,a.jsx)(`span`,{className:C.chartTooltipSwatch,style:{background:q}}),o(`tokenOutput`)]})]})]})]}),(0,a.jsxs)(`section`,{className:C.panel,"data-testid":`billing-token-models`,children:[(0,a.jsx)(`div`,{className:C.panelHead,children:(0,a.jsx)(`h3`,{className:C.panelTitle,children:o(`tokenByModel`)})}),f.length===0?(0,a.jsx)(`div`,{className:C.emptyRow,children:o(`noData`)}):(0,a.jsx)(`div`,{className:C.tableScroll,children:(0,a.jsxs)(`table`,{className:C.modelTable,"data-testid":`billing-token-model-table`,children:[(0,a.jsx)(`thead`,{children:(0,a.jsxs)(`tr`,{children:[(0,a.jsx)(`th`,{children:o(`model`)}),(0,a.jsx)(`th`,{className:C.numCol,children:o(`inputTokens`)}),(0,a.jsx)(`th`,{className:C.numCol,children:o(`outputTokens`)}),(0,a.jsx)(`th`,{className:C.numCol,children:o(`tokenReasoningShort`)}),(0,a.jsx)(`th`,{className:C.numCol,children:o(`cacheHitRate`)}),(0,a.jsx)(`th`,{className:C.numCol,children:o(`tokenTotal`)}),(0,a.jsx)(`th`,{className:C.numCol,children:o(`tokenShare`)}),(0,a.jsx)(`th`,{className:C.numCol,children:o(`calls`)})]})}),(0,a.jsx)(`tbody`,{children:f.map(e=>(0,a.jsxs)(`tr`,{"data-testid":`billing-token-model`,children:[(0,a.jsx)(`td`,{children:(0,a.jsx)(`span`,{className:C.modelName,children:e.name})}),(0,a.jsx)(`td`,{className:C.numCol,children:B(e.input)}),(0,a.jsx)(`td`,{className:C.numCol,children:B(e.output)}),(0,a.jsx)(`td`,{className:C.numCol,children:e.reasoning>0?B(e.reasoning):(0,a.jsx)(`span`,{className:C.na,children:`—`})}),(0,a.jsxs)(`td`,{className:C.numCol,children:[e.cacheHitRate.toFixed(1),`%`]}),(0,a.jsx)(`td`,{className:C.numCol,children:B(e.total)}),(0,a.jsx)(`td`,{className:C.numCol,children:(0,a.jsxs)(`span`,{className:C.tokenModelShareRow,children:[(0,a.jsx)(`span`,{className:C.tokenModelBar,children:(0,a.jsxs)(`span`,{className:C.tokenModelParts,style:{width:`${(e.share*100).toFixed(2)}%`},children:[(0,a.jsx)(`span`,{className:C.tokenModelPartIn,style:{width:`${e.total>0?e.input/e.total*100:0}%`}}),(0,a.jsx)(`span`,{className:C.tokenModelPartOut,style:{width:`${e.total>0?e.output/e.total*100:0}%`}})]})}),(e.share*100).toFixed(1),`%`]})}),(0,a.jsx)(`td`,{className:C.numCol,children:e.calls.toLocaleString()})]},e.key))})]})})]}),m.totalCalls>0&&(0,a.jsxs)(`section`,{className:C.panel,"data-testid":`billing-token-tools`,children:[(0,a.jsx)(`div`,{className:C.panelHead,children:(0,a.jsx)(`h3`,{className:C.panelTitle,children:o(`toolRank`)})}),(0,a.jsx)(`div`,{className:C.tableScroll,children:(0,a.jsxs)(`table`,{className:C.modelTable,"data-testid":`billing-tool-table`,children:[(0,a.jsx)(`thead`,{children:(0,a.jsxs)(`tr`,{children:[(0,a.jsx)(`th`,{children:o(`toolName`)}),(0,a.jsx)(`th`,{className:C.numCol,children:o(`calls`)}),(0,a.jsx)(`th`,{className:C.numCol,children:o(`tokenShare`)})]})}),(0,a.jsx)(`tbody`,{children:[...m.top,...m.rest].map(([e,t])=>(0,a.jsxs)(`tr`,{"data-testid":`billing-tool-row`,children:[(0,a.jsx)(`td`,{children:(0,a.jsx)(`span`,{className:C.modelName,children:e})}),(0,a.jsx)(`td`,{className:C.numCol,children:t.toLocaleString()}),(0,a.jsxs)(`td`,{className:C.numCol,children:[(t/m.totalCalls*100).toFixed(1),`%`]})]},e))})]})})]})]})}function Ke(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${n(t.getHours())}:${n(t.getMinutes())}`}function qe(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}`}function Je(e){let t=Math.round(e/1e3);return t<60?`${t}s`:`${Math.floor(t/60)}m${String(t%60).padStart(2,`0`)}s`}function Ye({rounds:e,flags:t,currency:n,t:i}){let o=(0,r.useMemo)(()=>e.slice(-40),[e]),s=(0,r.useMemo)(()=>new Set(t.map(e=>`${e.sessionId}:${e.turn}`)),[t]),l=(0,r.useMemo)(()=>Math.max(1e-4,...o.map(e=>e.cost)),[o]);if(o.length===0)return(0,a.jsxs)(`div`,{className:C.roundsEmpty,children:[i(`model`),` —`]});let u=e=>z(n===`usd`?R(e):e,n);return(0,a.jsxs)(`div`,{className:C.rounds,children:[(0,a.jsx)(`div`,{className:C.roundsBars,role:`img`,"aria-label":`cost per turn`,children:o.map(e=>{let t=s.has(`${e.sessionId}:${e.turn}`),n=Math.max(1,e.cost/l*100),r=me(e.startedAt)===`peak`;return(0,a.jsxs)(`div`,{className:c(C.roundsBarCol,r?C.roundsBarColPeak:C.roundsBarColOff),children:[(0,a.jsx)(`span`,{className:C.roundsBarLabel,style:{bottom:`${n}%`},children:u(e.cost)}),(0,a.jsx)(`div`,{className:C.roundsBarWrap,children:(0,a.jsx)(`div`,{className:t?C.roundsBarFlagged:C.roundsBar,style:{height:`${n}%`},"data-testid":`round-bar`,title:`${i(`model`)} ${e.model} · ${u(e.cost)} · ${qe(e.startedAt)}${e.endedAt===void 0?``:` → ${Ke(e.endedAt)} (${Je(e.endedAt-e.startedAt)})`}`,children:t&&(0,a.jsx)(`span`,{className:C.roundsFlagMark,"aria-hidden":`true`})})})]},`${e.sessionId}:${e.turn}`)})}),(0,a.jsxs)(`div`,{className:C.roundsAxis,children:[(0,a.jsxs)(`span`,{children:[i(`costAbbr`),` `,u(l)]}),(0,a.jsxs)(`span`,{children:[o.length,` 轮`]})]})]})}let J=[`var(--dsw-alias-bg-layer-2)`,`color-mix(in srgb, var(--dsw-static-green-500) 22%, var(--dsw-alias-bg-layer-2))`,`color-mix(in srgb, var(--dsw-static-green-500) 45%, var(--dsw-alias-bg-layer-2))`,`color-mix(in srgb, var(--dsw-static-green-500) 70%, var(--dsw-alias-bg-layer-2))`,`var(--dsw-static-green-500)`],Xe=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`];function Ze(e){let t=e=>String(e).padStart(2,`0`);return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}`}function Qe(e,t){let n=new Map;for(let t of e)n.set(t.date,t.value);let r=0;for(let e of n.values())e>r&&(r=e);let i=t.getFullYear(),a=t.getMonth(),o=t.getDate(),s=new Date(i,a+1,0).getDate(),c=new Date(i,a,1).getDay(),l=c+s,u=Math.ceil(l/7),d=[];for(let e=0;e<u;e+=1){let t=[];for(let l=0;l<7;l+=1){let u=e*7+l-c+1;if(u<1){let e=new Date(i,a,u);t.push({date:Ze(e),dayNum:e.getDate(),value:0,level:0,placeholder:!0});continue}if(u>s){let e=new Date(i,a+1,u-s);t.push({date:Ze(e),dayNum:e.getDate(),value:0,level:0,placeholder:!0});continue}let d=Ze(new Date(i,a,u)),f=n.get(d)??0,p=0;if(f>0&&r>0){let e=Math.ceil(f/r*4);p=Math.min(4,Math.max(1,e))}let m=u>o;t.push({date:d,dayNum:u,value:m?0:f,level:m?0:p,placeholder:m})}d.push(t)}return d}function $e(e,t){let n=new Map;for(let t of e)n.set(t.date,t.value);let r=0;for(let e of n.values())e>r&&(r=e);let i=Ze(t),a=new Date(t);a.setHours(0,0,0,0),a.setDate(a.getDate()-a.getDay());let o=new Date(a);o.setDate(a.getDate()-357);let s=[];for(let e=0;e<52;e+=1){let t=[];for(let a=0;a<7;a+=1){let s=new Date(o);s.setDate(o.getDate()+e*7+a);let c=Ze(s),l=c>i,u=l?0:n.get(c)??0,d=0;if(!l&&u>0&&r>0){let e=Math.ceil(u/r*4);d=Math.min(4,Math.max(1,e))}t.push({date:c,dayNum:s.getDate(),value:u,level:d,placeholder:l})}s.push(t)}return s}function et({days:e,currency:t,now:n,t:i,range:o=`month`}){let[s,c]=(0,r.useState)(null),l=e=>z(t===`usd`?R(e):e,t),u=(0,r.useMemo)(()=>Qe(e,n??new Date),[e,n]);if(o===`year`){let t=$e(e,n??new Date),r=[],o=-1;return t.forEach((e,t)=>{let n=Number(e[0]?.date.slice(5,7)??0);n!==o&&(r.push({index:t,label:Xe[n-1]??``}),o=n)}),(0,a.jsxs)(`div`,{className:C.heatmapYear,"data-testid":`heatmap-year`,children:[(0,a.jsxs)(`div`,{className:C.heatmapYearBody,children:[(0,a.jsx)(`div`,{className:C.heatmapYearWeekdays,"aria-hidden":`true`,children:[{label:`Mon`,row:1},{label:`Wed`,row:3},{label:`Fri`,row:5}].map(e=>(0,a.jsx)(`span`,{className:C.heatmapYearWeekday,style:{gridRow:e.row},children:e.label},e.label))}),(0,a.jsxs)(`div`,{className:C.heatmapYearScroll,children:[(0,a.jsx)(`div`,{className:C.heatmapYearMonths,"aria-hidden":`true`,"data-testid":`heatmap-year-months`,children:r.map(e=>(0,a.jsx)(`span`,{className:C.heatmapYearMonth,style:{gridColumn:e.index+1},children:e.label},e.index))}),(0,a.jsx)(`div`,{className:C.heatmapYearGrid,role:`img`,"aria-label":`yearly cost heatmap`,"data-testid":`heatmap-year-grid`,children:t.flat().map(e=>(0,a.jsx)(`button`,{type:`button`,className:C.heatmapYearCell,"data-testid":`heatmap-year-cell`,"data-level":e.level,style:{background:J[e.level]},title:`${e.date} · ${l(e.value)}`,"aria-label":`${e.date}: ${l(e.value)}`},e.date))})]})]}),(0,a.jsxs)(`div`,{className:C.heatmapFooter,children:[(0,a.jsx)(`span`,{className:C.heatmapLegendText,children:i(`heatmapLess`)}),(0,a.jsx)(`span`,{className:C.heatmapLegend,children:J.map((e,t)=>(0,a.jsx)(`i`,{style:{background:e}},t))}),(0,a.jsx)(`span`,{className:C.heatmapLegendText,children:i(`heatmapMore`)})]})]})}return(0,a.jsxs)(`div`,{className:C.heatmap,children:[(0,a.jsx)(`div`,{className:C.heatmapGrid,role:`img`,"aria-label":`daily cost heatmap`,children:u.map(e=>e.map(e=>e.placeholder?(0,a.jsx)(`div`,{className:C.heatmapCellEmpty,children:e.dayNum},e.date):(0,a.jsx)(`button`,{type:`button`,className:C.heatmapCell,"data-testid":`heatmap-cell`,"data-level":e.level,style:{background:J[e.level]},title:`${e.date} · ${l(e.value)}`,"aria-label":`${e.date}: ${l(e.value)}`,onMouseEnter:()=>{c(e)},onMouseLeave:()=>{c(null)},onFocus:()=>{c(e)},onBlur:()=>{c(null)},children:e.dayNum},e.date)))}),(0,a.jsxs)(`div`,{className:C.heatmapFooter,children:[(0,a.jsx)(`span`,{className:C.heatmapLegendText,children:i(`heatmapLess`)}),(0,a.jsx)(`span`,{className:C.heatmapLegend,children:J.map((e,t)=>(0,a.jsx)(`i`,{style:{background:e}},t))}),(0,a.jsx)(`span`,{className:C.heatmapLegendText,children:i(`heatmapMore`)}),s!==null&&(0,a.jsxs)(`span`,{className:C.heatmapHover,"data-testid":`heatmap-hover`,children:[s.date,` · `,l(s.value)]})]})]})}let Y={window:6,threshold:2,reasonFactor:1.8,reasonHitDropPp:15};function X(e){if(e.length===0)return null;let t=0;for(let n of e)t+=n;return t/e.length}function Z(e){let t=e.cacheHit+e.cacheMiss;return t<=0?null:e.cacheHit/t*100}function tt(e,t){let n=t?.window??Y.window,r=t?.threshold??Y.threshold,i=t?.reasonFactor??Y.reasonFactor,a=t?.reasonHitDropPp??Y.reasonHitDropPp,o=[];if(n<=0||r<=0)return o;let s=[],c=[],l=[],u=[];for(let t of e){if(t.cost<=0)continue;let e=t.output,d=t.input,f=Z(t),p=X(s),m=[];if(p!==null&&p>0&&t.cost>p*r){let n=X(c),r=X(l),s=X(u);n!==null&&n>0&&e>n*i&&m.push(`output-growth`),r!==null&&r>0&&d>r*i&&m.push(`context-bloat`),s!==null&&f!==null&&f<s-a&&m.push(`cache-hit-drop`),o.push({sessionId:t.sessionId,turn:t.turn,cost:t.cost,reasons:m})}for(s.push(t.cost),c.push(e),l.push(d),f!==null&&u.push(f);s.length>n;)s.shift();for(;c.length>n;)c.shift();for(;l.length>n;)l.shift();for(;u.length>n;)u.shift()}return o}function nt(e){return/[",\r\n]/.test(e)?`"${e.replace(/"/g,`""`)}"`:e}function rt(e){return/^[=+\-@\t\r]/.test(e)?`'${e}`:e}function it(e){return e.toFixed(2)}function at(e){return[`date,calls,input,output,cache_hit,cache_miss,cost_cny`,...Object.keys(e).sort().map(t=>{let n=e[t];return n===void 0?``:[t,n.calls,n.input,n.output,n.cacheHit,n.cacheMiss,it(n.cost)].join(`,`)})].join(`
|
|
3
3
|
`)}function ot(e){return[`site,kind,calls,cost_cny`,...Object.entries(e).map(([e,t])=>{let n=e.startsWith(`site:`)?e.slice(5):e.startsWith(`direct:`)?e.slice(7):`unknown`,r=e.startsWith(`site:`)?`site`:e.startsWith(`direct:`)?`direct`:`unknown`;return[nt(rt(n)),r,t.calls,it(t.cost)].join(`,`)})].join(`
|
|
4
4
|
`)}function st(e){return e===void 0?``:e.split(/[\\/]/).filter(Boolean).pop()??e}function ct(e){return[`session_id,title,project,calls,cost_cny,last_active`,...e.map(e=>[nt(rt(e.id)),nt(rt(e.title??``)),nt(rt(st(e.cwd))),e.calls,it(e.cost),e.lastActive>0?new Date(e.lastActive).toISOString():``].join(`,`))].join(`
|
package/lib/index.js
CHANGED
|
@@ -6,7 +6,6 @@ import { defineTool } from "@deepseek-ai/dsh-tools";
|
|
|
6
6
|
import { withFileLock, writeFileAtomic } from "@deepseek-ai/dsh-atomic-write";
|
|
7
7
|
import { credentialRef } from "@deepseek-ai/dsh-credentials";
|
|
8
8
|
import z from "@deepseek-ai/schemastery";
|
|
9
|
-
import { createHash, createHmac } from "node:crypto";
|
|
10
9
|
//#region lib/types/client/plan-knowledge.js
|
|
11
10
|
/**
|
|
12
11
|
* Plan-knowledge reference (adapted from dsh-spend's `knowledge.js`, MIT):
|
|
@@ -1634,31 +1633,24 @@ function computeCost(entry, buckets, peakShare = DEFAULT_PEAK_SHARE, nowMs = Dat
|
|
|
1634
1633
|
return peak * peakShare + off * (1 - peakShare);
|
|
1635
1634
|
}
|
|
1636
1635
|
/**
|
|
1637
|
-
* v1 峰谷档判定(峰谷开闸起、周末全谷分界止):不豁免周末——该时段官方
|
|
1638
|
-
* 高峰时段为每天 9-12 / 14-18(周六日同样计峰)。仅用于历史事件计费;
|
|
1639
|
-
* 「当前时刻」的档位(提醒/时段条/费率展示)一律走 {@link tierAt} 现行规则。
|
|
1640
|
-
*/
|
|
1641
|
-
function tariffV1At(timeMs) {
|
|
1642
|
-
return isPeakHour((new Date(timeMs).getUTCHours() + 8) % 24) ? "peak" : "offPeak";
|
|
1643
|
-
}
|
|
1644
|
-
/**
|
|
1645
1636
|
* 按调用时刻精确判定高峰/空闲档并计价(P0-1:替代固定比例混合)。时刻未知
|
|
1646
1637
|
* (null/NaN,理论不发生在真实事件流)时回退 {@link DEFAULT_PEAK_SHARE} 混合,
|
|
1647
1638
|
* 保持旧语义不低估。平档模型(无 offPeak)两个时段同价。限时促销与峰谷档
|
|
1648
1639
|
* 同口径:按事件时刻判定该笔流量当时享受的单价。
|
|
1649
|
-
*
|
|
1650
|
-
* 历史正确性(按变更节点分段适用规则,不统一套现行价重算历史):
|
|
1651
|
-
* - 早于 {@link PEAK_ERA_START_MS} 的事件按当时官方基础价
|
|
1652
|
-
* ({@link LEGACY_DEEPSEEK_BANDS})计费;
|
|
1653
|
-
* - 峰谷开闸至 {@link WEEKEND_OFFPEAK_START_MS} 之间按 v1 规则(周末不豁免,
|
|
1654
|
-
* 周六日 9-12 / 14-18 计峰);
|
|
1655
|
-
* - 周末全谷分界起按现行规则({@link tierAt},周六日全天低谷)。
|
|
1656
1640
|
* @param entry - the catalog entry whose prices apply.
|
|
1657
1641
|
* @param buckets - token usage counts.
|
|
1658
1642
|
* @param timeMs - the call's wall-clock time (epoch ms); null falls back to the peak-share mix.
|
|
1659
1643
|
* @param peakShare - fallback mix used only when `timeMs` is missing.
|
|
1660
1644
|
* @returns the estimated cost in CNY(USD 计价模型已按当前汇率折算)。
|
|
1661
1645
|
*/
|
|
1646
|
+
/**
|
|
1647
|
+
* v1 峰谷档判定(峰谷开闸起、周末全谷分界止):不豁免周末——该时段官方
|
|
1648
|
+
* 高峰时段为每天 9-12 / 14-18(周六日同样计峰)。仅用于历史事件计费;
|
|
1649
|
+
* 「当前时刻」的档位(提醒/时段条/费率展示)一律走 {@link tierAt} 现行规则。
|
|
1650
|
+
*/
|
|
1651
|
+
function tariffV1At(timeMs) {
|
|
1652
|
+
return isPeakHour((new Date(timeMs).getUTCHours() + 8) % 24) ? "peak" : "offPeak";
|
|
1653
|
+
}
|
|
1662
1654
|
function computeCostAt(entry, buckets, timeMs, peakShare = DEFAULT_PEAK_SHARE) {
|
|
1663
1655
|
if (timeMs === null || timeMs === void 0 || !Number.isFinite(timeMs)) return computeCost(entry, buckets, peakShare);
|
|
1664
1656
|
const priced = applyPromo(entry, timeMs);
|
|
@@ -1817,12 +1809,6 @@ function foldUsage(acc, usage, key, subscription, timeMs, official = false) {
|
|
|
1817
1809
|
}
|
|
1818
1810
|
}
|
|
1819
1811
|
/**
|
|
1820
|
-
* 联网搜索辅助请求的单次费用估算默认值(人民币元)。DeepSeek 官方对搜索请求
|
|
1821
|
-
* (web_search 服务端工具注入上下文)照常计费,实测每次约 0.01~0.03 元,取中值;
|
|
1822
|
-
* 部署可在插件配置 `searchCallEstimateCny` 覆盖(设 0 关闭估算)。
|
|
1823
|
-
*/
|
|
1824
|
-
const DEFAULT_SEARCH_CALL_ESTIMATE_CNY = .02;
|
|
1825
|
-
/**
|
|
1826
1812
|
* Fold one auxiliary web-search LLM request (issue #15) into an accumulator.
|
|
1827
1813
|
* 这类调用绕过对话通道直连官方端点,日志只记请求(无响应/用量事件),token
|
|
1828
1814
|
* 不可知:按「每次估值」计入费用并单独累计 `searchCalls`,不产生 token 维度。
|
|
@@ -2029,26 +2015,22 @@ function turnState(turns, turn) {
|
|
|
2029
2015
|
turns.set(turn, fresh);
|
|
2030
2016
|
return fresh;
|
|
2031
2017
|
}
|
|
2032
|
-
/**
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
|
|
2043
|
-
|
|
2044
|
-
|
|
2045
|
-
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
* @returns the per-session fold (cached by the incremental aggregator).
|
|
2049
|
-
*/
|
|
2050
|
-
function foldSession(events, subscriptionProviders, officialProviderIds, routes = {}, searchCallEstimateCny = DEFAULT_SEARCH_CALL_ESTIMATE_CNY, seedLength = 0) {
|
|
2051
|
-
const fold = {
|
|
2018
|
+
/** 空白折叠状态机(与全量折叠的初值逐字一致)。 */
|
|
2019
|
+
function freshMachine() {
|
|
2020
|
+
return {
|
|
2021
|
+
key: "other",
|
|
2022
|
+
subscription: false,
|
|
2023
|
+
official: false,
|
|
2024
|
+
siteBucket: "unknown",
|
|
2025
|
+
turns: /* @__PURE__ */ new Map(),
|
|
2026
|
+
steps: /* @__PURE__ */ new Map(),
|
|
2027
|
+
lastOpenStepKey: void 0,
|
|
2028
|
+
toolSeen: /* @__PURE__ */ new Set()
|
|
2029
|
+
};
|
|
2030
|
+
}
|
|
2031
|
+
/** 空白 fold 的统一构造:foldSession 与聚合器的分片/增量路径共用同一字段初值。 */
|
|
2032
|
+
function freshFold() {
|
|
2033
|
+
return {
|
|
2052
2034
|
total: emptyUsage(),
|
|
2053
2035
|
byModel: /* @__PURE__ */ new Map(),
|
|
2054
2036
|
byDay: /* @__PURE__ */ new Map(),
|
|
@@ -2069,14 +2051,28 @@ function foldSession(events, subscriptionProviders, officialProviderIds, routes
|
|
|
2069
2051
|
},
|
|
2070
2052
|
lastActive: 0
|
|
2071
2053
|
};
|
|
2072
|
-
|
|
2073
|
-
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2077
|
-
|
|
2078
|
-
|
|
2079
|
-
|
|
2054
|
+
}
|
|
2055
|
+
/**
|
|
2056
|
+
* 把一批事件折进既有 fold(状态机跨批次延续)。全量折叠、超大会话的分片折叠、
|
|
2057
|
+
* 活跃会话的 seq 增量折叠共用同一段循环体,保证三种路径的字段语义逐字一致。
|
|
2058
|
+
* @param fold - 累计目标(原地修改)。
|
|
2059
|
+
* @param machine - 折叠状态机:进入时为上一批次末态,返回时为本批次末态。
|
|
2060
|
+
* @param events - 本批次事件(日志顺序)。
|
|
2061
|
+
* @param subscriptionProviders - provider ids billed through subscription plans.
|
|
2062
|
+
* @param officialProviderIds - 官方直连 provider 集合(undefined = 按 deepseek 前缀判定)。
|
|
2063
|
+
* @param routes - 当前 provider 路由视图(中转站归组)。
|
|
2064
|
+
* @param searchCallEstimateCny - 联网搜索请求的单次费用估算(人民币元)。
|
|
2065
|
+
* @param seedLength - fork 血缘边界(seq 低于它的事件是父会话种子,跳过)。
|
|
2066
|
+
*/
|
|
2067
|
+
function foldInto(fold, machine, events, subscriptionProviders, officialProviderIds, routes, searchCallEstimateCny, seedLength) {
|
|
2068
|
+
let key = machine.key;
|
|
2069
|
+
let subscription = machine.subscription;
|
|
2070
|
+
let official = machine.official;
|
|
2071
|
+
let siteBucket = machine.siteBucket;
|
|
2072
|
+
const turns = machine.turns;
|
|
2073
|
+
const steps = machine.steps;
|
|
2074
|
+
let lastOpenStepKey = machine.lastOpenStepKey;
|
|
2075
|
+
const toolSeen = machine.toolSeen;
|
|
2080
2076
|
for (const event of events) {
|
|
2081
2077
|
if (seedLength > 0 && typeof event.seq === "number" && Number.isFinite(event.seq) && event.seq < seedLength) continue;
|
|
2082
2078
|
fold.lastActive = Math.max(fold.lastActive, event.time);
|
|
@@ -2224,7 +2220,15 @@ function foldSession(events, subscriptionProviders, officialProviderIds, routes
|
|
|
2224
2220
|
}
|
|
2225
2221
|
}
|
|
2226
2222
|
}
|
|
2227
|
-
|
|
2223
|
+
machine.key = key;
|
|
2224
|
+
machine.subscription = subscription;
|
|
2225
|
+
machine.official = official;
|
|
2226
|
+
machine.siteBucket = siteBucket;
|
|
2227
|
+
machine.lastOpenStepKey = lastOpenStepKey;
|
|
2228
|
+
}
|
|
2229
|
+
/** 从轮次状态派生 fold.turns(每批次结束后重派生;半开轮次跨批次保留)。 */
|
|
2230
|
+
function refreshTurns(fold, machine) {
|
|
2231
|
+
fold.turns = [...machine.turns.values()].filter((state) => state.input > 0 || state.output > 0).sort((a, b) => a.turn - b.turn).map((state) => ({
|
|
2228
2232
|
turn: state.turn,
|
|
2229
2233
|
model: state.model,
|
|
2230
2234
|
input: state.input,
|
|
@@ -2235,7 +2239,6 @@ function foldSession(events, subscriptionProviders, officialProviderIds, routes
|
|
|
2235
2239
|
startedAt: state.startedAt === Number.MAX_SAFE_INTEGER ? fold.lastActive : state.startedAt,
|
|
2236
2240
|
...state.endedAt === void 0 ? {} : { endedAt: state.endedAt }
|
|
2237
2241
|
}));
|
|
2238
|
-
return fold;
|
|
2239
2242
|
}
|
|
2240
2243
|
/**
|
|
2241
2244
|
* 生成一个 step 的性能样本;无效 / 超出 sane 上限(15 分钟)时返回 undefined,
|
|
@@ -2315,6 +2318,23 @@ function createUsageAggregator(persistence, options = {}) {
|
|
|
2315
2318
|
/** 每次聚合取最新的 provider 路由视图(中转站零配置发现);缺省按空处理(全部未知路由)。 */
|
|
2316
2319
|
const routesOf = () => options.resolveRoutes?.() ?? {};
|
|
2317
2320
|
const searchEstimate = options.searchCallEstimateCny ?? .02;
|
|
2321
|
+
const FOLD_CHUNK_EVENTS = 8e3;
|
|
2322
|
+
/** 把一份(全量或增量)折叠结果登记进 durable ledger;内容无变化时不落盘。 */
|
|
2323
|
+
const recordLedger = (id, cwd, stamp, fold) => {
|
|
2324
|
+
if (options.ledger === void 0) return;
|
|
2325
|
+
const entry = {
|
|
2326
|
+
id,
|
|
2327
|
+
...cwd === void 0 ? {} : { cwd },
|
|
2328
|
+
...stamp === null ? {} : { stamp },
|
|
2329
|
+
foldVersion: 6,
|
|
2330
|
+
fold: serializeFold(fold)
|
|
2331
|
+
};
|
|
2332
|
+
const row = ledger.get(id);
|
|
2333
|
+
if (row === void 0 || row.stamp !== entry.stamp || row.cwd !== entry.cwd || row.foldVersion !== entry.foldVersion || stamp === null && JSON.stringify(row.fold) !== JSON.stringify(entry.fold)) {
|
|
2334
|
+
ledger.set(id, entry);
|
|
2335
|
+
ledgerNeedsSave = true;
|
|
2336
|
+
}
|
|
2337
|
+
};
|
|
2318
2338
|
const ensureLedgerLoaded = async () => {
|
|
2319
2339
|
if (ledgerLoaded || options.ledger === void 0) return;
|
|
2320
2340
|
ledgerLoaded = true;
|
|
@@ -2376,34 +2396,78 @@ function createUsageAggregator(persistence, options = {}) {
|
|
|
2376
2396
|
continue;
|
|
2377
2397
|
}
|
|
2378
2398
|
try {
|
|
2399
|
+
const cwd = meta.cwd;
|
|
2400
|
+
const ledgerRow = ledger.get(id);
|
|
2401
|
+
if (ledgerRow !== void 0 && ledgerRow.stamp !== void 0 && stamp !== null && ledgerRow.stamp === stamp && (ledgerRow.foldVersion ?? 1) === 6) {
|
|
2402
|
+
const fold = deserializeFold(ledgerRow.fold);
|
|
2403
|
+
cache.set(id, {
|
|
2404
|
+
stamp,
|
|
2405
|
+
fold
|
|
2406
|
+
});
|
|
2407
|
+
folds.push({
|
|
2408
|
+
id,
|
|
2409
|
+
...cwd === void 0 ? {} : { cwd },
|
|
2410
|
+
fold
|
|
2411
|
+
});
|
|
2412
|
+
included.add(id);
|
|
2413
|
+
continue;
|
|
2414
|
+
}
|
|
2415
|
+
const previous = cache.get(id);
|
|
2416
|
+
if (previous?.machine !== void 0 && previous.lastSeq !== void 0) {
|
|
2417
|
+
const from = previous.lastSeq + 1;
|
|
2418
|
+
const { events } = await persistence.readFrom(meta.id, from);
|
|
2419
|
+
const after = await stampOf(meta);
|
|
2420
|
+
if (stamp !== null && after !== stamp) {
|
|
2421
|
+
cache.delete(id);
|
|
2422
|
+
continue;
|
|
2423
|
+
}
|
|
2424
|
+
const first = events[0]?.seq;
|
|
2425
|
+
if (events.length === 0 || first !== from) {
|
|
2426
|
+
cache.delete(id);
|
|
2427
|
+
continue;
|
|
2428
|
+
}
|
|
2429
|
+
foldInto(previous.fold, previous.machine, events, subscriptionProviders, officialProviderIds, routesOf(), searchEstimate, meta.seedLength ?? 0);
|
|
2430
|
+
refreshTurns(previous.fold, previous.machine);
|
|
2431
|
+
const last = events[events.length - 1];
|
|
2432
|
+
previous.lastSeq = typeof last.seq === "number" ? last.seq : previous.lastSeq;
|
|
2433
|
+
previous.stamp = stamp;
|
|
2434
|
+
cache.delete(id);
|
|
2435
|
+
cache.set(id, previous);
|
|
2436
|
+
folds.push({
|
|
2437
|
+
id,
|
|
2438
|
+
...cwd === void 0 ? {} : { cwd },
|
|
2439
|
+
fold: previous.fold
|
|
2440
|
+
});
|
|
2441
|
+
included.add(id);
|
|
2442
|
+
recordLedger(id, cwd, stamp, previous.fold);
|
|
2443
|
+
continue;
|
|
2444
|
+
}
|
|
2379
2445
|
const { events } = await persistence.readFrom(meta.id, 0);
|
|
2380
2446
|
const after = await stampOf(meta);
|
|
2381
2447
|
if (stamp !== null && after !== stamp) continue;
|
|
2382
|
-
const fold =
|
|
2448
|
+
const fold = freshFold();
|
|
2449
|
+
const machine = freshMachine();
|
|
2450
|
+
for (let start = 0; start < events.length; start += FOLD_CHUNK_EVENTS) {
|
|
2451
|
+
foldInto(fold, machine, events.slice(start, start + FOLD_CHUNK_EVENTS), subscriptionProviders, officialProviderIds, routesOf(), searchEstimate, meta.seedLength ?? 0);
|
|
2452
|
+
if (start + FOLD_CHUNK_EVENTS < events.length) await new Promise((resolve) => {
|
|
2453
|
+
setImmediate(resolve);
|
|
2454
|
+
});
|
|
2455
|
+
}
|
|
2456
|
+
refreshTurns(fold, machine);
|
|
2457
|
+
const last = events[events.length - 1];
|
|
2383
2458
|
cache.set(id, {
|
|
2384
2459
|
stamp,
|
|
2385
|
-
fold
|
|
2460
|
+
fold,
|
|
2461
|
+
machine,
|
|
2462
|
+
...last !== void 0 && typeof last.seq === "number" ? { lastSeq: last.seq } : {}
|
|
2386
2463
|
});
|
|
2387
2464
|
folds.push({
|
|
2388
2465
|
id,
|
|
2389
|
-
...
|
|
2466
|
+
...cwd === void 0 ? {} : { cwd },
|
|
2390
2467
|
fold
|
|
2391
2468
|
});
|
|
2392
2469
|
included.add(id);
|
|
2393
|
-
|
|
2394
|
-
const entry = {
|
|
2395
|
-
id,
|
|
2396
|
-
...meta.cwd === void 0 ? {} : { cwd: meta.cwd },
|
|
2397
|
-
...stamp === null ? {} : { stamp },
|
|
2398
|
-
foldVersion: 7,
|
|
2399
|
-
fold: serializeFold(fold)
|
|
2400
|
-
};
|
|
2401
|
-
const previous = ledger.get(id);
|
|
2402
|
-
if (previous === void 0 || previous.stamp !== entry.stamp || previous.cwd !== entry.cwd || previous.foldVersion !== entry.foldVersion || stamp === null && JSON.stringify(previous.fold) !== JSON.stringify(entry.fold)) {
|
|
2403
|
-
ledger.set(id, entry);
|
|
2404
|
-
ledgerNeedsSave = true;
|
|
2405
|
-
}
|
|
2406
|
-
}
|
|
2470
|
+
recordLedger(id, cwd, stamp, fold);
|
|
2407
2471
|
} catch (error) {
|
|
2408
2472
|
skipped.push(id);
|
|
2409
2473
|
console.warn("[usage-billing] skip unreadable session", id, error);
|
|
@@ -2419,7 +2483,7 @@ function createUsageAggregator(persistence, options = {}) {
|
|
|
2419
2483
|
for (const entry of ledger.values()) {
|
|
2420
2484
|
if (included.has(entry.id)) continue;
|
|
2421
2485
|
try {
|
|
2422
|
-
const stale = (entry.foldVersion ?? 1) <
|
|
2486
|
+
const stale = (entry.foldVersion ?? 1) < 6;
|
|
2423
2487
|
folds.push({
|
|
2424
2488
|
id: entry.id,
|
|
2425
2489
|
...entry.cwd === void 0 ? {} : { cwd: entry.cwd },
|
|
@@ -2465,7 +2529,7 @@ function createUsageAggregator(persistence, options = {}) {
|
|
|
2465
2529
|
outputCost: 0
|
|
2466
2530
|
};
|
|
2467
2531
|
const perfModel = /* @__PURE__ */ new Map();
|
|
2468
|
-
const
|
|
2532
|
+
const perfHour = /* @__PURE__ */ new Map();
|
|
2469
2533
|
for (const { id: sessionId, cwd, fold, staleLedger } of folds) {
|
|
2470
2534
|
mergeUsageInto(total, fold.total);
|
|
2471
2535
|
roles.userChars += fold.roles.userChars;
|
|
@@ -2496,18 +2560,13 @@ function createUsageAggregator(persistence, options = {}) {
|
|
|
2496
2560
|
if (sample.tps !== void 0) modelAccum.tps.push(sample.tps);
|
|
2497
2561
|
if (sample.latencyMs !== void 0) modelAccum.latencies.push(sample.latencyMs);
|
|
2498
2562
|
if (sample.estimated) modelAccum.estimated += 1;
|
|
2499
|
-
let
|
|
2500
|
-
if (hourModels === void 0) {
|
|
2501
|
-
hourModels = /* @__PURE__ */ new Map();
|
|
2502
|
-
perfHourModel.set(sample.hour, hourModels);
|
|
2503
|
-
}
|
|
2504
|
-
let hourAccum = hourModels.get(sample.model);
|
|
2563
|
+
let hourAccum = perfHour.get(sample.hour);
|
|
2505
2564
|
if (hourAccum === void 0) {
|
|
2506
2565
|
hourAccum = {
|
|
2507
2566
|
ttfts: [],
|
|
2508
2567
|
tps: []
|
|
2509
2568
|
};
|
|
2510
|
-
|
|
2569
|
+
perfHour.set(sample.hour, hourAccum);
|
|
2511
2570
|
}
|
|
2512
2571
|
hourAccum.ttfts.push(sample.ttftMs);
|
|
2513
2572
|
if (sample.tps !== void 0) hourAccum.tps.push(sample.tps);
|
|
@@ -2567,14 +2626,14 @@ function createUsageAggregator(persistence, options = {}) {
|
|
|
2567
2626
|
latencyAvg: acc.latencies.length === 0 ? 0 : mean(acc.latencies),
|
|
2568
2627
|
estimatedSamples: acc.estimated
|
|
2569
2628
|
}])),
|
|
2570
|
-
|
|
2629
|
+
byHour: Object.fromEntries([...perfHour].map(([hour, acc]) => [hour, {
|
|
2571
2630
|
samples: acc.ttfts.length,
|
|
2572
2631
|
ttftAvg: mean(acc.ttfts),
|
|
2573
2632
|
...acc.tps.length === 0 ? {} : { tpsAvg: mean(acc.tps) }
|
|
2574
|
-
}]))
|
|
2633
|
+
}]))
|
|
2575
2634
|
};
|
|
2576
2635
|
lastDoc = {
|
|
2577
|
-
version:
|
|
2636
|
+
version: 3,
|
|
2578
2637
|
updatedAt: now,
|
|
2579
2638
|
source: "session-logs",
|
|
2580
2639
|
timezone: hostTimeZone(),
|
|
@@ -3019,26 +3078,6 @@ const QUERIERS = [
|
|
|
3019
3078
|
route: "tokendance-space",
|
|
3020
3079
|
displayName: "TokenDance",
|
|
3021
3080
|
querier: queryTokenDance
|
|
3022
|
-
},
|
|
3023
|
-
{
|
|
3024
|
-
route: "tencent-tokenhub",
|
|
3025
|
-
displayName: "腾讯云 TokenHub",
|
|
3026
|
-
querier: queryTencentTokenPlan
|
|
3027
|
-
},
|
|
3028
|
-
{
|
|
3029
|
-
route: "tokenhub",
|
|
3030
|
-
displayName: "腾讯云 TokenHub",
|
|
3031
|
-
querier: queryTencentTokenPlan
|
|
3032
|
-
},
|
|
3033
|
-
{
|
|
3034
|
-
route: "tencent",
|
|
3035
|
-
displayName: "腾讯云 TokenHub",
|
|
3036
|
-
querier: queryTencentTokenPlan
|
|
3037
|
-
},
|
|
3038
|
-
{
|
|
3039
|
-
route: "tencentcloud",
|
|
3040
|
-
displayName: "腾讯云 TokenHub",
|
|
3041
|
-
querier: queryTencentTokenPlan
|
|
3042
3081
|
}
|
|
3043
3082
|
];
|
|
3044
3083
|
/**
|
|
@@ -3071,204 +3110,6 @@ async function queryBalances(ctx, providers) {
|
|
|
3071
3110
|
return querier(ctx, env);
|
|
3072
3111
|
}));
|
|
3073
3112
|
}
|
|
3074
|
-
/** TokenHub 管控面 API 端点(cloud.tencent.cn/document/api/1823/132270)。 */
|
|
3075
|
-
const TOKENHUB_HOST = "tokenhub.tencentcloudapi.com";
|
|
3076
|
-
/** 云 API 3.0 产品名与版本(签名的 service 段与请求头都必须一致)。 */
|
|
3077
|
-
const TOKENHUB_SERVICE = "tokenhub";
|
|
3078
|
-
const TOKENHUB_VERSION = "2026-03-22";
|
|
3079
|
-
/** 请求地域:管控面对地域不敏感,取默认国内地域(文档地域列表含 ap-guangzhou)。 */
|
|
3080
|
-
const TOKENHUB_REGION = "ap-guangzhou";
|
|
3081
|
-
/** 腾讯云凭据引用值格式:`<SecretId>:<SecretKey>`(分隔符取首个冒号)。 */
|
|
3082
|
-
function parseTencentCredential(value) {
|
|
3083
|
-
const sep = value.indexOf(":");
|
|
3084
|
-
if (sep === -1) return void 0;
|
|
3085
|
-
const secretId = value.slice(0, sep).trim();
|
|
3086
|
-
const secretKey = value.slice(sep + 1).trim();
|
|
3087
|
-
if (secretId === "" || secretKey === "") return void 0;
|
|
3088
|
-
return {
|
|
3089
|
-
secretId,
|
|
3090
|
-
secretKey
|
|
3091
|
-
};
|
|
3092
|
-
}
|
|
3093
|
-
/**
|
|
3094
|
-
* 构造云 API 3.0 TC3-HMAC-SHA256 签名(官方签名方法 v3)。导出供测试:纯函数,
|
|
3095
|
-
* 输入确定则签名确定。Action 不参与签名——它走 `X-TC-Action` 请求头。
|
|
3096
|
-
* @param secretId - 云 API SecretId。
|
|
3097
|
-
* @param secretKey - 云 API SecretKey。
|
|
3098
|
-
* @param payload - 已序列化的请求体(含 Action/Version/Region 公共参数)。
|
|
3099
|
-
* @param timestamp - 签名时间戳(秒)。
|
|
3100
|
-
* @returns Authorization 头的值。
|
|
3101
|
-
*/
|
|
3102
|
-
function tc3Authorization(secretId, secretKey, payload, timestamp) {
|
|
3103
|
-
const date = (/* @__PURE__ */ new Date(timestamp * 1e3)).toISOString().slice(0, 10);
|
|
3104
|
-
const canonicalRequest = `POST\n/\n\n${`content-type:application/json; charset=utf-8\nhost:${TOKENHUB_HOST}\n`}\ncontent-type;host\n${createHash("sha256").update(payload).digest("hex")}`;
|
|
3105
|
-
const hashedCanonical = createHash("sha256").update(canonicalRequest).digest("hex");
|
|
3106
|
-
const stringToSign = `TC3-HMAC-SHA256\n${String(timestamp)}\n${date}/${TOKENHUB_SERVICE}/tc3_request\n${hashedCanonical}`;
|
|
3107
|
-
const kDate = createHmac("sha256", date).update(secretKey).digest();
|
|
3108
|
-
const kService = createHmac("sha256", kDate).update(TOKENHUB_SERVICE).digest();
|
|
3109
|
-
const kSigning = createHmac("sha256", kService).update("tc3_request").digest();
|
|
3110
|
-
const signature = createHmac("sha256", kSigning).update(stringToSign).digest("hex");
|
|
3111
|
-
return `TC3-HMAC-SHA256 Credential=${secretId}/${date}/${TOKENHUB_SERVICE}/tc3_request, SignedHeaders=content-type;host, Signature=${signature}`;
|
|
3112
|
-
}
|
|
3113
|
-
/** 调用一次 TokenHub 管控面接口:TC3 签名 + 超时保护,返回响应 JSON 的 `Response`。 */
|
|
3114
|
-
async function callTokenHub(secretId, secretKey, action, params) {
|
|
3115
|
-
const payload = JSON.stringify({
|
|
3116
|
-
Action: action,
|
|
3117
|
-
Version: TOKENHUB_VERSION,
|
|
3118
|
-
Region: TOKENHUB_REGION,
|
|
3119
|
-
...params
|
|
3120
|
-
});
|
|
3121
|
-
const timestamp = Math.floor(Date.now() / 1e3);
|
|
3122
|
-
const controller = new AbortController();
|
|
3123
|
-
const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS$3);
|
|
3124
|
-
try {
|
|
3125
|
-
const response = await fetch(`https://${TOKENHUB_HOST}/`, {
|
|
3126
|
-
method: "POST",
|
|
3127
|
-
headers: {
|
|
3128
|
-
"content-type": "application/json; charset=utf-8",
|
|
3129
|
-
host: TOKENHUB_HOST,
|
|
3130
|
-
"x-tc-action": action.toLowerCase(),
|
|
3131
|
-
"x-tc-version": TOKENHUB_VERSION,
|
|
3132
|
-
"x-tc-region": TOKENHUB_REGION,
|
|
3133
|
-
"x-tc-timestamp": String(timestamp),
|
|
3134
|
-
authorization: tc3Authorization(secretId, secretKey, payload, timestamp)
|
|
3135
|
-
},
|
|
3136
|
-
body: payload,
|
|
3137
|
-
signal: controller.signal
|
|
3138
|
-
});
|
|
3139
|
-
if (response.status === 401 || response.status === 403) throw Object.assign(/* @__PURE__ */ new Error("unauthorized"), { code: "unauthorized" });
|
|
3140
|
-
if (!response.ok) throw Object.assign(/* @__PURE__ */ new Error(`HTTP ${String(response.status)}`), {
|
|
3141
|
-
httpStatus: response.status,
|
|
3142
|
-
code: "unreachable"
|
|
3143
|
-
});
|
|
3144
|
-
const inner = (await response.json()).Response;
|
|
3145
|
-
if (inner === void 0) throw Object.assign(/* @__PURE__ */ new Error("no Response envelope"), { code: "invalid" });
|
|
3146
|
-
if (inner.Error !== void 0 && inner.Error !== null) {
|
|
3147
|
-
const err = inner.Error;
|
|
3148
|
-
const code = err.Code === "AuthFailure.SignatureFailure" || err.Code === "AuthFailure.SecretIdNotFound" ? "unauthorized" : "unreachable";
|
|
3149
|
-
throw Object.assign(new Error(String(err.Code ?? "api-error")), { code });
|
|
3150
|
-
}
|
|
3151
|
-
return inner;
|
|
3152
|
-
} finally {
|
|
3153
|
-
clearTimeout(timer);
|
|
3154
|
-
}
|
|
3155
|
-
}
|
|
3156
|
-
/**
|
|
3157
|
-
* 在套餐余量对象里防御性提取「剩余额度」:官方 SubPackageBalance/PackageInfo
|
|
3158
|
-
* 的字段名未稳定公开(issue #18 调研期),按语义键名扫描——命中 remaining /
|
|
3159
|
-
* balance / left 语义键直接用;命中 total 与 used 则相减推导。数字一律经
|
|
3160
|
-
* {@link toNumber} 归一化(上游可能给字符串)。
|
|
3161
|
-
* 导出供测试:纯函数。
|
|
3162
|
-
* @param source - 套餐详情里的余量对象(PackageInfo / SubPackageBalance 等)。
|
|
3163
|
-
* @returns 剩余额度(上游单位,通常为 token 数或元);提取不到返回 undefined。
|
|
3164
|
-
*/
|
|
3165
|
-
function pickRemainingQuota(source) {
|
|
3166
|
-
if (source === null || typeof source !== "object") return void 0;
|
|
3167
|
-
const numeric = Object.entries(source).filter(([, v]) => v !== null && toNumber$1(v) !== void 0);
|
|
3168
|
-
const byKey = (needles) => {
|
|
3169
|
-
for (const [key, value] of numeric) {
|
|
3170
|
-
const lower = key.toLowerCase();
|
|
3171
|
-
if (needles.some((n) => lower.includes(n))) {
|
|
3172
|
-
const num = toNumber$1(value);
|
|
3173
|
-
if (num !== void 0 && num >= 0) return num;
|
|
3174
|
-
}
|
|
3175
|
-
}
|
|
3176
|
-
};
|
|
3177
|
-
const remaining = byKey([
|
|
3178
|
-
"remain",
|
|
3179
|
-
"balance",
|
|
3180
|
-
"left",
|
|
3181
|
-
"available"
|
|
3182
|
-
]);
|
|
3183
|
-
if (remaining !== void 0) return remaining;
|
|
3184
|
-
const total = byKey(["total"]);
|
|
3185
|
-
const used = byKey(["used", "consume"]);
|
|
3186
|
-
if (total !== void 0 && used !== void 0) return Math.max(0, total - used);
|
|
3187
|
-
}
|
|
3188
|
-
/** 套餐列表里提取第一个启用套餐的 TeamId:集合字段名做候选兼容。 */
|
|
3189
|
-
function firstEnabledTeamId(inner) {
|
|
3190
|
-
const candidates = inner.TeamSet ?? inner.TokenPlanSet ?? inner.PlanSet;
|
|
3191
|
-
if (!Array.isArray(candidates)) return void 0;
|
|
3192
|
-
for (const item of candidates) {
|
|
3193
|
-
if (item === null || typeof item !== "object") continue;
|
|
3194
|
-
const row = item;
|
|
3195
|
-
if (row.TeamId === void 0 && row.PlanId === void 0) continue;
|
|
3196
|
-
if (row.Status !== void 0 && row.Status !== "enable") continue;
|
|
3197
|
-
const id = row.TeamId ?? row.PlanId;
|
|
3198
|
-
if (typeof id === "string" && id !== "") return id;
|
|
3199
|
-
}
|
|
3200
|
-
}
|
|
3201
|
-
/**
|
|
3202
|
-
* 查询腾讯云 TokenHub Token Plan 套餐余量。凭据值格式 `<SecretId>:<SecretKey>`
|
|
3203
|
-
* (云 API 密钥,非 TokenHub 推理 key)。链路:套餐列表取 TeamId → 套餐详情读
|
|
3204
|
-
* 主额度包余量。管控面字段名未完全稳定,解析按语义键防御提取。
|
|
3205
|
-
* @param ctx - host context carrying the credentials seam.
|
|
3206
|
-
* @param apiKeyEnv - credential reference resolving the `<SecretId>:<SecretKey>` pair.
|
|
3207
|
-
*/
|
|
3208
|
-
async function queryTencentTokenPlan(ctx, apiKeyEnv) {
|
|
3209
|
-
const provider = "腾讯云 TokenHub";
|
|
3210
|
-
const hit = await ctx.credentials.resolve(credentialRef(apiKeyEnv));
|
|
3211
|
-
if (hit === void 0) return {
|
|
3212
|
-
provider,
|
|
3213
|
-
displayName: provider,
|
|
3214
|
-
error: "unconfigured"
|
|
3215
|
-
};
|
|
3216
|
-
if (!balanceGate.check(provider)) return {
|
|
3217
|
-
provider,
|
|
3218
|
-
displayName: provider,
|
|
3219
|
-
error: "unreachable"
|
|
3220
|
-
};
|
|
3221
|
-
const credential = parseTencentCredential(hit.value);
|
|
3222
|
-
if (credential === void 0) return {
|
|
3223
|
-
provider,
|
|
3224
|
-
displayName: provider,
|
|
3225
|
-
error: "unauthorized"
|
|
3226
|
-
};
|
|
3227
|
-
const doRequest = async () => {
|
|
3228
|
-
const teamId = firstEnabledTeamId(await callTokenHub(credential.secretId, credential.secretKey, "DescribeTokenPlanList", {}));
|
|
3229
|
-
if (teamId === void 0) return {
|
|
3230
|
-
provider,
|
|
3231
|
-
displayName: provider,
|
|
3232
|
-
error: "invalid"
|
|
3233
|
-
};
|
|
3234
|
-
const detail = await callTokenHub(credential.secretId, credential.secretKey, "DescribeTokenPlan", { TeamId: teamId });
|
|
3235
|
-
const remaining = pickRemainingQuota(detail.PackageInfo) ?? pickRemainingQuota(detail);
|
|
3236
|
-
if (remaining === void 0) {
|
|
3237
|
-
console.warn(`[usage-billing] balance response drifted for ${provider}: no remaining-quota field parsed`);
|
|
3238
|
-
return {
|
|
3239
|
-
provider,
|
|
3240
|
-
displayName: provider,
|
|
3241
|
-
error: "invalid"
|
|
3242
|
-
};
|
|
3243
|
-
}
|
|
3244
|
-
const plan = typeof detail.Name === "string" ? detail.Name : void 0;
|
|
3245
|
-
const exhausted = detail.StopReason === "EXHAUSTED";
|
|
3246
|
-
return {
|
|
3247
|
-
provider,
|
|
3248
|
-
displayName: provider,
|
|
3249
|
-
currency: "CNY",
|
|
3250
|
-
totalBalance: remaining,
|
|
3251
|
-
...plan !== void 0 ? { plan } : {},
|
|
3252
|
-
...exhausted ? { isAvailable: false } : {}
|
|
3253
|
-
};
|
|
3254
|
-
};
|
|
3255
|
-
try {
|
|
3256
|
-
const row = await withRetry(doRequest, {
|
|
3257
|
-
retries: 1,
|
|
3258
|
-
baseDelayMs: 250,
|
|
3259
|
-
maxDelayMs: 2e3
|
|
3260
|
-
});
|
|
3261
|
-
balanceGate.success(provider);
|
|
3262
|
-
return row;
|
|
3263
|
-
} catch (error) {
|
|
3264
|
-
balanceGate.fail(provider);
|
|
3265
|
-
return {
|
|
3266
|
-
provider,
|
|
3267
|
-
displayName: provider,
|
|
3268
|
-
error: error.code === "unauthorized" ? "unauthorized" : "unreachable"
|
|
3269
|
-
};
|
|
3270
|
-
}
|
|
3271
|
-
}
|
|
3272
3113
|
/** 点路径取值:`data.total_available` → 逐层下钻;任一缺失返回 undefined。 */
|
|
3273
3114
|
function getPath(data, path) {
|
|
3274
3115
|
let cursor = data;
|
package/lib/types/aggregate.d.ts
CHANGED
|
@@ -479,7 +479,7 @@ export declare function messageTextLength(message: unknown): number;
|
|
|
479
479
|
export declare function foldSession(events: readonly {
|
|
480
480
|
type: string;
|
|
481
481
|
time: number;
|
|
482
|
-
data:
|
|
482
|
+
data: unknown;
|
|
483
483
|
seq?: number;
|
|
484
484
|
}[], subscriptionProviders: ReadonlySet<string>, officialProviderIds?: ReadonlySet<string>, routes?: Readonly<Record<string, ProviderRouteView>>, searchCallEstimateCny?: number, seedLength?: number): SessionFold;
|
|
485
485
|
/**
|
|
@@ -32,6 +32,6 @@ export declare function UsageHeatmap({ days, currency, now, t, range }: {
|
|
|
32
32
|
currency: CostCurrency;
|
|
33
33
|
now?: Date;
|
|
34
34
|
range?: 'month' | 'year';
|
|
35
|
-
t: (key: '
|
|
35
|
+
t: (key: 'costAbbr' | 'noData' | 'heatmapLess' | 'heatmapMore') => string;
|
|
36
36
|
}): React.ReactNode;
|
|
37
37
|
//# sourceMappingURL=heatmap.d.ts.map
|
|
@@ -32,6 +32,6 @@ export declare function RoundCostChart({ rounds, flags, currency, t }: {
|
|
|
32
32
|
rounds: readonly RoundChartRow[];
|
|
33
33
|
flags: readonly AnomalyFlag[];
|
|
34
34
|
currency: CostCurrency;
|
|
35
|
-
t: (key: '
|
|
35
|
+
t: (key: 'model' | 'costAbbr') => string;
|
|
36
36
|
}): React.ReactNode;
|
|
37
37
|
//# sourceMappingURL=round-chart.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kenz1117/dsh-ui-usage-billing",
|
|
3
3
|
"description": "Usage billing dashboard for DeepSeek Harness: sidebar cost metrics plus a full dashboard modal, priced from a current multi-provider catalog with real usage aggregated from session logs.",
|
|
4
|
-
"version": "1.1.
|
|
4
|
+
"version": "1.1.6",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
"platform": "web"
|
|
41
41
|
},
|
|
42
42
|
"compatibility": {
|
|
43
|
+
"dsh": ">=0.1.0-rc.8 <0.1.1-0 || >=0.1.1-rc.1 <0.1.2-0",
|
|
43
44
|
"dshReleases": {
|
|
44
45
|
"0.1.0-rc.8": "compatible",
|
|
45
46
|
"0.1.1-rc.1": "compatible",
|
|
@@ -47,11 +48,6 @@
|
|
|
47
48
|
}
|
|
48
49
|
}
|
|
49
50
|
},
|
|
50
|
-
"scripts": {
|
|
51
|
-
"bundle": "tsdown",
|
|
52
|
-
"watch": "tsdown --watch",
|
|
53
|
-
"test": "vitest run"
|
|
54
|
-
},
|
|
55
51
|
"license": "MIT",
|
|
56
52
|
"engines": {
|
|
57
53
|
"node": "^22.19.0 || >=24.0.0"
|
|
@@ -82,6 +78,7 @@
|
|
|
82
78
|
"clsx": "^2.1.1"
|
|
83
79
|
},
|
|
84
80
|
"devDependencies": {
|
|
81
|
+
"typescript": "^5.9.2",
|
|
85
82
|
"@deepseek-ai/cordis": "*",
|
|
86
83
|
"@deepseek-ai/cordis-plugin-include": "^1.0.7",
|
|
87
84
|
"@deepseek-ai/cordis-plugin-loader": "^1.0.3",
|
|
@@ -121,5 +118,10 @@
|
|
|
121
118
|
"lib/client.js",
|
|
122
119
|
"lib/types/**/*.d.ts",
|
|
123
120
|
"cordis.patch.yml"
|
|
124
|
-
]
|
|
125
|
-
|
|
121
|
+
],
|
|
122
|
+
"scripts": {
|
|
123
|
+
"bundle": "tsdown",
|
|
124
|
+
"watch": "tsdown --watch",
|
|
125
|
+
"test": "vitest run"
|
|
126
|
+
}
|
|
127
|
+
}
|