@kenz1117/dsh-ui-usage-billing 1.4.11 → 1.4.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/client.js CHANGED
@@ -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`});var r=Object.create,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.getPrototypeOf,c=Object.prototype.hasOwnProperty,l=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var s=o(t),l=0,u=s.length,d;l<u;l++)d=s[l],!c.call(e,d)&&d!==n&&i(e,d,{get:(e=>t[e]).bind(null,d),enumerable:!(r=a(t,d))||r.enumerable});return e},u=(e,t,n)=>(n=e==null?{}:r(s(e)),l(t||!e||!e.__esModule||!c.call(e,`default`)?i(n,`default`,{value:e,enumerable:!0}):n,e));let d=e("react"),f=e("react-dom"),p=e("@deepseek-ai/dsh-client-ui-primitives");p=u(p,1);let m=e("react/jsx-runtime"),h=e("@deepseek-ai/dsh-client-store");function g(e){return e}function _(e){return g(e)}function v(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=v(e[t]))&&(r&&(r+=` `),r+=n)}else for(n in e)e[n]&&(r&&(r+=` `),r+=n)}return r}function y(){for(var e,t,n=0,r=``,i=arguments.length;n<i;n++)(e=arguments[n])&&(t=v(e))&&(r&&(r+=` `),r+=t);return r}let b={mode:`combined`,targets:[]},x=`dsh.ui-usage-billing.float`;function S(){let e=()=>({...b,targets:[...b.targets]});try{let t=localStorage.getItem(x);if(t===null)return e();let n=JSON.parse(t);return{mode:n.mode===`subscription`?`subscription`:`combined`,targets:Array.isArray(n.targets)?n.targets.filter(e=>typeof e==`string`):[]}}catch{return e()}}function C(e){try{localStorage.setItem(x,JSON.stringify(e))}catch{}}let w={metric:`money`,span:`day`},T=`dsh.ui-usage-billing.card`;function ee(){try{let e=localStorage.getItem(T);if(e===null)return{...w};let t=JSON.parse(e);return{metric:t.metric===`tokens`?`tokens`:`money`,span:t.span===`week`||t.span===`month`?t.span:`day`}}catch{return{...w}}}function E(e){try{localStorage.setItem(T,JSON.stringify(e))}catch{}}let D=`dsh.ui-usage-billing.kpi-range`;function O(){try{let e=localStorage.getItem(D);return e===`today`||e===`7d`||e===`week`||e===`month`||e===`all`?e:`all`}catch{return`all`}}function te(e){try{localStorage.setItem(D,e)}catch{}}let k={hideUnidentified:!0},A=`dsh.ui-usage-billing.sites`;function j(){try{let e=localStorage.getItem(A);return e===null?{...k}:{hideUnidentified:JSON.parse(e).hideUnidentified!==!1}}catch{return{...k}}}function ne(e){try{localStorage.setItem(A,JSON.stringify(e))}catch{}}let M={show:!0,position:`toolbar`},re=`dsh.ui-usage-billing.livecost`,ie=`dsh.ui-usage-billing.livecost-pref`;function ae(){try{let e=localStorage.getItem(re);if(e===null)return{...M};let t=JSON.parse(e);return{show:t.show!==!1,position:t.position===`above`||t.position===`toolbar`||t.position===`below`?t.position:M.position}}catch{return{...M}}}function oe(e){try{localStorage.setItem(re,JSON.stringify(e))}catch{}}let N=`dsh.ui-usage-billing.currency`,se=`dsh.ui-usage-billing.currency-pref`;function P(){try{let e=localStorage.getItem(N);return e===`usd`||e===`cny`||e===`eur`?e:`cny`}catch{return`cny`}}function ce(e){try{localStorage.setItem(N,e)}catch{}}let le=`dsh.ui-usage-billing.pinned-pref`;function ue(){try{let e=JSON.parse(localStorage.getItem(`dsh.ui-usage-billing.pinned`)??`[]`);return Array.isArray(e)?e.filter(e=>typeof e==`string`&&e!==``):[]}catch{return[]}}function de(e){try{localStorage.setItem(`dsh.ui-usage-billing.pinned`,JSON.stringify(e))}catch{}}let fe=`dsh.ui-usage-billing.language`;function pe(){try{let e=localStorage.getItem(fe);if(e===`en`||e===`zh`)return e;let t=P()===`usd`?`en`:`zh`;return me(t),t}catch{return`zh`}}function me(e){try{localStorage.setItem(fe,e)}catch{}}function he(e){let t=ue(),n=t.includes(e)?t.filter(t=>t!==e):[...t,e];return de(n),n}let ge=`dsh.ui-usage-billing.prices`;function _e(){try{let e=localStorage.getItem(ge);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);if(![i,a,o].every(e=>Number.isFinite(e)&&e>=0))return;let s=r.offPeak,c;if(typeof s==`object`&&s){let e=s,t=Number(e.input),n=Number(e.cacheHit),r=Number(e.output);[t,n,r].every(e=>Number.isFinite(e)&&e>=0)&&(c={input:t,cacheHit:n,output:r})}n.push({key:e,...typeof r.origin==`string`&&r.origin!==``?{origin:r.origin}:{},input:i,cacheHit:a,output:o,...c===void 0?{}:{offPeak:c},...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 ve(e){try{localStorage.setItem(ge,JSON.stringify(e))}catch{}}let ye={metric:`ttft`},be=`dsh.ui-usage-billing.perf`;function xe(){try{let e=localStorage.getItem(be);if(e===null)return{...ye};let t=JSON.parse(e);return{metric:t.metric===`tps`?`tps`:`ttft`,...Array.isArray(t.models)?{models:t.models.filter(e=>typeof e==`string`)}:{}}}catch{return{...ye}}}function Se(e){try{localStorage.setItem(be,JSON.stringify(e))}catch{}}let Ce=`@kenz1117/dsh-ui-usage-billing/UsageBilling.module.css`;if(typeof document<`u`&&document.querySelector(`style[data-plugin-css=`+JSON.stringify(Ce)+`]`)===null){let e=document.createElement(`style`);e.dataset.plugin=`@kenz1117/dsh-ui-usage-billing`,e.dataset.pluginCss=Ce,e.textContent=`:root{--ds-blue:#4f8cff;--ds-cyan:#2dd4bf;--ds-green:#34d399;--ds-amber:#f59e0b;--ds-red:#ef4444;--ds-violet:#a78bfa}body{--dsb:var(--dsw-alias-bg-layer-1);--dsb-2:var(--dsw-alias-bg-layer-2);--dsb-3:var(--dsw-alias-bg-layer-3);--dsb-glass:color-mix(in srgb,var(--dsw-alias-bg-layer-2) 78%,transparent);--dsb-glass-strong:color-mix(in srgb,var(--dsw-alias-bg-layer-3) 88%,transparent);--ds-border:var(--dsw-alias-border-l1);--ds-border-strong:var(--dsw-alias-border-l2);--ds-hi-top:#ffffff0b;--ds-shadow-1:0 1px 0 #ffffff0a inset,0 8px 24px #00000059;--ds-shadow-2:0 1px 0 #ffffff0d inset,0 18px 48px #00000080;--ds-t-1:var(--dsw-alias-label-primary);--ds-t-2:var(--dsw-alias-label-secondary);--ds-t-3:var(--dsw-alias-label-tertiary);--ds-t-4:var(--dsw-alias-label-dimmed);--ds-c-1:#4f8cff;--ds-c-2:#2dd4bf;--ds-c-3:#a78bfa;--ds-c-4:#f59e0b;--ds-c-5:#f472b6;--ds-c-6:#fbbf24;--ds-c-7:#38bdf8;--ds-r-1:8px;--ds-r-2:12px;--ds-r-3:16px;--ds-t-fast:.16s cubic-bezier(.2,.8,.2,1)}.KFXqYa_railButton{border:1px solid var(--ds-border);border-radius:var(--ds-r-1);background:var(--dsb-2);width:36px;height:36px;color:var(--ds-t-2);cursor:pointer;transition:border-color var(--ds-t-fast), color var(--ds-t-fast);flex:none;justify-content:center;align-items:center;padding:0;display:flex}.KFXqYa_railButton:hover,.KFXqYa_railButton:focus-visible{border-color:var(--ds-blue);color:var(--ds-blue);outline:none}.KFXqYa_railButton svg{width:26px;height:26px}.KFXqYa_triggerBudgetPulse{border-color:color-mix(in srgb, var(--ds-red) 55%, transparent);animation:2s ease-in-out infinite KFXqYa_budgetPulse}.KFXqYa_triggerBudgetOver{animation-duration:1.2s}@keyframes KFXqYa_budgetPulse{0%,to{box-shadow:0 1px 2px #0000000a,0 0 #ef444400}50%{box-shadow:0 1px 2px #0000000a,0 0 0 3px #ef444429}}.KFXqYa_trigger{border:1px solid var(--ds-border);border-radius:var(--ds-r-2);background:var(--dsb-glass);-webkit-backdrop-filter:blur(14px)saturate(1.2);width:100%;min-width:0;color:var(--ds-t-1);cursor:pointer;text-align:left;transition:border-color var(--ds-t-fast), transform var(--ds-t-fast), box-shadow var(--ds-t-fast);align-items:center;gap:12px;padding:10px 14px;display:flex;position:relative;overflow:hidden;box-shadow:0 1px 2px #0000000a;container-type:inline-size}.KFXqYa_trigger:hover,.KFXqYa_trigger:focus-visible{border-color:var(--ds-border-strong);box-shadow:0 6px 18px -8px color-mix(in srgb, var(--ds-blue) 45%, transparent);outline:none;transform:translateY(-1px)}.KFXqYa_trigger:before{content:"";background:linear-gradient(180deg, var(--ds-hi-top), transparent);pointer-events:none;height:1px;position:absolute;top:0;left:0;right:0}.KFXqYa_trigger:after{content:"";background:linear-gradient(105deg, transparent 42%, color-mix(in srgb, var(--ds-blue) 9%, transparent) 50%, transparent 58%);opacity:0;pointer-events:none;position:absolute;inset:0;transform:translate(-110%)}.KFXqYa_trigger:hover:after,.KFXqYa_trigger:focus-visible:after{animation:.9s ease-out KFXqYa_triggerScan}@keyframes KFXqYa_triggerScan{0%{opacity:0;transform:translate(-110%)}25%{opacity:1}to{opacity:0;transform:translate(110%)}}@media (prefers-reduced-motion:reduce){.KFXqYa_triggerSparkBar,.KFXqYa_trigger:hover:after,.KFXqYa_trigger:focus-visible:after{animation:none}.KFXqYa_triggerGaugeNeedle,.KFXqYa_triggerGaugeArc{transition:none}.KFXqYa_triggerBudgetPulse{animation:none}}.KFXqYa_triggerIcon{width:32px;height:32px;color:var(--ds-blue);flex:none;justify-content:center;align-items:center;display:inline-flex}.KFXqYa_triggerIcon svg{width:30px;height:30px}.KFXqYa_triggerGaugeNeedle{transition:transform 1.1s cubic-bezier(.22,1,.36,1)}.KFXqYa_triggerGaugeArc{transition:stroke-dasharray 1.1s cubic-bezier(.22,1,.36,1)}.KFXqYa_triggerBudgetHot{color:var(--ds-red)}.KFXqYa_triggerMain{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.KFXqYa_triggerPrimary{flex-direction:column;gap:1px;min-width:0;display:flex}.KFXqYa_triggerValueRow{align-items:baseline;gap:2px;min-width:0;display:flex}.KFXqYa_triggerLabel{color:var(--ds-t-3);white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:11px;line-height:15px;overflow:hidden}.KFXqYa_triggerYen{color:var(--ds-t-3);font-variant-numeric:tabular-nums;font-size:12px;font-weight:600;line-height:16px}.KFXqYa_triggerMetric{color:var(--ds-t-1);font-variant-numeric:tabular-nums;white-space:nowrap;text-overflow:ellipsis;min-width:0;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:22px;font-weight:600;line-height:26px;overflow:hidden}.KFXqYa_triggerSpark{flex:none;align-items:flex-end;gap:2px;height:20px;display:flex}.KFXqYa_triggerSparkBar,.KFXqYa_triggerSparkHot{background:var(--ds-blue);opacity:.6;border-radius:1px 1px 0 0;width:3px}.KFXqYa_triggerSparkHot{opacity:1}.KFXqYa_triggerSparkBar{animation:3.6s ease-in-out infinite KFXqYa_triggerSparkBreath}.KFXqYa_triggerSparkBar:nth-child(2n){animation-delay:-1.2s}.KFXqYa_triggerSparkBar:nth-child(3n){animation-delay:-2.4s}@keyframes KFXqYa_triggerSparkBreath{0%,to{opacity:.6}50%{opacity:.34}}.KFXqYa_triggerWrap{flex:auto;width:100%;min-width:96px;max-width:100%;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_triggerLabel{display:none}}@container KFXqYa_billing-trigger (width<=110px){.KFXqYa_triggerIcon,.KFXqYa_triggerSpark,.KFXqYa_triggerLabel{display:none}.KFXqYa_trigger{justify-content:center;padding:8px 6px}}.KFXqYa_triggerPop{box-sizing:border-box;border:1px solid var(--ds-border-strong);border-radius:var(--ds-r-3);background:var(--dsb-glass-strong);-webkit-backdrop-filter:blur(14px)saturate(1.2);width:256px;box-shadow:var(--ds-shadow-2);opacity:0;visibility:hidden;pointer-events:none;transition:opacity var(--ds-t-fast), transform var(--ds-t-fast), visibility 0s linear .16s;z-index:2000;flex-direction:column;gap:5px;padding:10px 12px;display:flex;position:fixed;top:0;left:0;overflow:hidden;transform:translateY(calc(4px - 100%))}.KFXqYa_triggerPop,.KFXqYa_triggerPop *{box-sizing:border-box}.KFXqYa_triggerPop:before{content:"";background:linear-gradient(90deg, transparent 10%, var(--ds-amber) 50%, transparent 90%);opacity:.65;pointer-events:none;height:1.5px;position:absolute;top:0;left:0;right:0}.KFXqYa_triggerPopShown{opacity:1;visibility:visible;transition:opacity var(--ds-t-fast), transform var(--ds-t-fast), visibility 0s linear 0s;transform:translateY(-100%)}.KFXqYa_popHead{justify-content:space-between;align-items:baseline;gap:8px;display:flex}.KFXqYa_popTitle{letter-spacing:.06em;text-transform:uppercase;color:var(--ds-t-3);font-size:12px;font-weight:700;line-height:18px}.KFXqYa_metricGrid{grid-template-columns:repeat(3,1fr);gap:10px 12px;display:grid}.KFXqYa_metricCell{flex-direction:column;gap:2px;min-width:0;display:flex}.KFXqYa_metricLabel{color:var(--ds-t-3);font-size:11px;line-height:14px}.KFXqYa_metricValue{color:var(--ds-t-1);font-variant-numeric:tabular-nums;white-space:nowrap;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:13px;font-weight:700;line-height:16px}.KFXqYa_metricValueSuccess{color:var(--ds-green)}.KFXqYa_popModel{border-top:1px dashed var(--ds-border);flex-direction:column;gap:6px;margin-top:9px;padding-top:10px;display:flex}.KFXqYa_popModelLabel{color:var(--ds-t-3);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(--ds-green)}.KFXqYa_popDotSub{background:var(--ds-amber)}.KFXqYa_popDotNeutral{background:var(--ds-t-3)}.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(--ds-blue) 14%, transparent);color:var(--ds-blue)}.KFXqYa_popTagSub{background:color-mix(in srgb, var(--ds-amber) 18%, transparent);color:var(--ds-amber)}.KFXqYa_popModelName{color:var(--ds-t-2);text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:500;line-height:16px;overflow:hidden}.KFXqYa_popModelStatus{color:var(--ds-t-1);font-variant-numeric:tabular-nums;white-space:nowrap;margin-left:auto;font-size:11px;font-weight:600;line-height:16px}.KFXqYa_popModelStatusLow{color:var(--ds-red)}.KFXqYa_dashboardModal{border:1px solid var(--ds-border-strong);border-radius:var(--ds-r-3);background:var(--dsb-2);width:min(760px,100vw - 48px);max-height:min(760px,88vh);box-shadow:var(--ds-shadow-2);animation:.16s ease-out KFXqYa_dashboardIn}@keyframes KFXqYa_dashboardIn{0%{opacity:0;transform:translateY(4px)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(--ds-border);justify-content:space-between;align-items:center;gap:12px;padding:12px 18px;display:flex}.KFXqYa_dashboardTitle{color:var(--ds-t-1);margin:0;font-size:14px;font-weight:600;line-height:20px}.KFXqYa_dashboardSubtitle{color:var(--ds-t-3);margin:2px 0 0;font-size:11px;line-height:16px}.KFXqYa_closeButton{border:1px solid var(--ds-border);border-radius:var(--ds-r-1);width:32px;height:32px;color:var(--ds-t-2);cursor:pointer;transition:background-color var(--ds-t-fast), color var(--ds-t-fast);background:0 0;flex:none;justify-content:center;align-items:center;display:inline-flex}.KFXqYa_closeButton:hover{background:var(--dsb-3);color:var(--ds-t-1)}.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(--ds-border);color:var(--ds-t-3);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;padding:8px 18px;font-size:11px;line-height:16px;display:flex}.KFXqYa_tabNav{border:1px solid var(--ds-border);border-radius:var(--ds-r-1);background:var(--dsb);align-items:center;gap:4px;margin:14px 24px 0;padding:4px;display:flex}.KFXqYa_tabButton{color:var(--ds-t-3);cursor:pointer;transition:background-color var(--ds-t-fast), color var(--ds-t-fast), box-shadow var(--ds-t-fast);background:0 0;border:none;border-radius:6px;padding:6px 12px;font-size:12px;font-weight:500;line-height:16px}.KFXqYa_tabButton:hover{color:var(--ds-t-2)}.KFXqYa_tabButton:focus-visible{color:var(--ds-t-2);box-shadow:0 0 0 1px var(--ds-border-strong);outline:none}.KFXqYa_tabButtonActive,.KFXqYa_tabButtonActive:hover,.KFXqYa_tabButtonActive:focus-visible{background:var(--dsb-3);color:var(--ds-t-1);box-shadow:0 0 0 1px var(--ds-border-strong) inset;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(--ds-border);border-radius:var(--ds-r-3);background:var(--dsb-glass-strong);flex-direction:column;gap:12px;padding:18px 20px;display:flex;position:relative;overflow:hidden}.KFXqYa_hero:after{content:"";background:linear-gradient(90deg, transparent 10%, var(--ds-amber) 50%, transparent 90%);opacity:.65;pointer-events:none;height:1.5px;position:absolute;top:0;left:0;right:0}.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(--ds-t-3);text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;font-size:11px;font-weight:500;line-height:15px}.KFXqYa_heroReadout{align-items:baseline;gap:4px;display:flex}.KFXqYa_heroCurrency{letter-spacing:-.01em;color:var(--ds-t-2);font-variant-numeric:tabular-nums;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:22px;font-weight:600;line-height:26px}.KFXqYa_heroValue{letter-spacing:-.03em;font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--ds-t-1);font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:52px;font-weight:600;line-height:56px}.KFXqYa_heroMeta{color:var(--ds-t-2);white-space:nowrap;margin-top:2px;font-size:12px;line-height:16px}.KFXqYa_heroGauge{flex-direction:column;flex:none;align-items:center;gap:4px;width:96px;display:flex}.KFXqYa_heroGaugeDial{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(--dsb-3);stroke-width:7px}.KFXqYa_heroGaugeArc{fill:none;stroke:var(--ds-blue);stroke-width:7px;stroke-linecap:round;transition:stroke-dasharray var(--ds-t-fast)}.KFXqYa_heroGaugeArcOver{stroke:var(--ds-red)}.KFXqYa_heroGaugeCenter{flex-direction:column;justify-content:center;align-items:center;gap:1px;display:flex;position:absolute;inset:0}.KFXqYa_heroGaugeRemain{letter-spacing:-.02em;font-variant-numeric:tabular-nums;color:var(--ds-t-1);font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:16px;font-weight:600;line-height:18px}.KFXqYa_heroGaugeRemainOver{color:var(--ds-red)}.KFXqYa_heroGaugeLabel{color:var(--ds-t-3);font-size:11px;line-height:13px}.KFXqYa_heroGaugeSub{font-variant-numeric:tabular-nums;color:var(--ds-t-2);white-space:nowrap;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;line-height:12px}.KFXqYa_heroSide{border-top:1px solid var(--ds-border);align-items:stretch;padding-top:12px;display:flex}.KFXqYa_heroSideItem{border-left:1px solid var(--ds-border);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(--ds-t-3);text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;font-size:10px;font-weight:500;line-height:13px}.KFXqYa_heroSideValue{color:var(--ds-t-1);font-variant-numeric:tabular-nums;letter-spacing:-.01em;white-space:nowrap;align-items:baseline;gap:6px;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:15px;font-weight:600;line-height:20px;display:inline-flex}.KFXqYa_heroSideSpacer{flex:1;display:block}.KFXqYa_delta{font-variant-numeric:tabular-nums;border-radius:999px;align-items:center;gap:2px;margin-left:6px;padding:1px 7px;font-size:10.5px;font-weight:600;line-height:16px;display:inline-flex}.KFXqYa_deltaUp{color:var(--ds-green);background:color-mix(in srgb, var(--ds-green) 12%, transparent)}.KFXqYa_deltaDown{color:var(--ds-red);background:color-mix(in srgb, var(--ds-red) 12%, transparent)}.KFXqYa_unpricedHint{border:1px solid color-mix(in srgb, var(--ds-amber) 30%, transparent);background:color-mix(in srgb, var(--ds-amber) 8%, transparent);color:var(--ds-amber);border-radius:8px;align-items:center;padding:8px 12px;font-size:11.5px;font-weight:500;line-height:17px;display:flex}.KFXqYa_kpiZone{flex-direction:column;gap:8px;display:flex}.KFXqYa_kpiZoneHead{justify-content:flex-end;align-items:center;gap:8px;display:flex}.KFXqYa_kpiZoneLabel{color:var(--ds-t-3);font-size:11px;line-height:14px}.KFXqYa_kpiGrid{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;display:grid}.KFXqYa_kpiTile{border:1px solid var(--ds-border);border-radius:var(--ds-r-2);background:var(--dsb-glass);transition:border-color var(--ds-t-fast);flex-direction:column;gap:2px;padding:14px 16px;display:flex;position:relative;overflow:hidden}.KFXqYa_kpiTile:hover{border-color:var(--ds-border-strong)}.KFXqYa_kpiLabel{color:var(--ds-t-3);text-transform:uppercase;letter-spacing:.04em;font-size:11px;font-weight:500;line-height:14px}.KFXqYa_kpiValue{color:var(--ds-t-1);font-variant-numeric:tabular-nums;letter-spacing:-.01em;margin-top:6px;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:22px;font-weight:600;line-height:26px}.KFXqYa_kpiGreen{color:var(--ds-green)}.KFXqYa_kpiDetail{color:var(--ds-t-3);white-space:nowrap;text-overflow:ellipsis;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:11px;line-height:15px;overflow:hidden}.KFXqYa_panel{border:1px solid var(--ds-border);border-radius:var(--ds-r-2);background:var(--dsb-glass);transition:border-color var(--ds-t-fast);flex-direction:column;gap:8px;padding:12px 14px;display:flex}.KFXqYa_panelHead{justify-content:space-between;align-items:baseline;gap:10px;display:flex}.KFXqYa_panelHeadControls{align-items:center;gap:8px;display:inline-flex}.KFXqYa_panelTitle{letter-spacing:-.005em;color:var(--ds-t-1);margin:0;font-size:13px;font-weight:600;line-height:20px}.KFXqYa_panelHint{color:var(--ds-t-3);white-space:nowrap;font-size:11px;line-height:16px}.KFXqYa_rangeToggle{border:1px solid var(--ds-border);background:var(--dsb-3);border-radius:8px;gap:2px;padding:2px;display:inline-flex}.KFXqYa_rangeButton{color:var(--ds-t-3);cursor:pointer;transition:background-color var(--ds-t-fast), color var(--ds-t-fast);background:0 0;border:none;border-radius:6px;padding:2px 8px;font-size:11px;line-height:16px}.KFXqYa_rangeButtonActive{background:var(--dsb-2);color:var(--ds-t-1);box-shadow:0 0 0 1px var(--ds-border-strong);font-weight:600}.KFXqYa_exportBar{justify-content:flex-end;align-items:center;gap:8px;display:flex}.KFXqYa_exportLabel{color:var(--ds-t-3);font-size:11px;line-height:16px}.KFXqYa_exportButton{border:1px solid var(--ds-border);color:var(--ds-t-2);cursor:pointer;transition:border-color var(--ds-t-fast), color var(--ds-t-fast), background-color var(--ds-t-fast);background:0 0;border-radius:999px;padding:4px 12px;font-size:11.5px;line-height:16px}.KFXqYa_exportButton:hover,.KFXqYa_exportButton:focus-visible{border-color:var(--ds-border-strong);color:var(--ds-t-1);outline:none}.KFXqYa_shareTrack{background:var(--dsb-3);border-radius:4px;height:8px;display:flex;overflow:hidden}.KFXqYa_shareSeg{height:100%;transition:width var(--ds-t-fast)}.KFXqYa_shareSegPeak{background:var(--ds-blue)}.KFXqYa_shareSegOff{background:color-mix(in srgb, var(--ds-blue) 30%, var(--dsb-3))}.KFXqYa_shareSegUser{background:var(--ds-blue)}.KFXqYa_shareSegAssistant{background:var(--ds-green)}.KFXqYa_shareSegTool{background:var(--ds-amber)}.KFXqYa_shareLegend{align-items:center;gap:16px;display:flex}.KFXqYa_shareItem{color:var(--ds-t-2);align-items:baseline;gap:6px;font-size:11px;line-height:17px;display:inline-flex}.KFXqYa_bucketCost{font-variant-numeric:tabular-nums;align-items:baseline;gap:3px;display:inline-flex}.KFXqYa_bucketOfficial{color:var(--ds-blue);font-weight:600}.KFXqYa_bucketSep{color:var(--ds-t-4)}.KFXqYa_bucketThird{color:var(--ds-t-2)}.KFXqYa_shareDot{border-radius:2px;flex:none;align-self:center;width:8px;height:8px}.KFXqYa_shareValue{color:var(--ds-t-1);font-variant-numeric:tabular-nums;font-weight:600}.KFXqYa_budgetInput{width:64px;color:var(--ds-t-1);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(--ds-border);background:var(--dsb-3);cursor:pointer;width:32px;height:18px;transition:background-color var(--ds-t-fast), border-color var(--ds-t-fast);border-radius:999px;flex:none;padding:0;position:relative}.KFXqYa_switchOn{background:color-mix(in srgb, var(--ds-blue) 60%, transparent);border-color:#0000}.KFXqYa_switchKnob{width:12px;height:12px;transition:transform var(--ds-t-fast);background:#fff;border-radius:50%;position:absolute;top:2px;left:2px}.KFXqYa_switchOn .KFXqYa_switchKnob{transform:translate(14px)}.KFXqYa_budgetFillWarn{background:var(--ds-amber)}.KFXqYa_budgetFillOver{background:var(--ds-red)}.KFXqYa_chartWrap{width:100%;position:relative}.KFXqYa_chartSvg{width:100%;height:auto;display:block}.KFXqYa_chartEmpty{height:140px;color:var(--ds-t-3);justify-content:center;align-items:center;font-size:13px;display:flex}.KFXqYa_emptyRow{text-align:center;color:var(--ds-t-3);padding:28px 0;font-size:13px}.KFXqYa_chartGrid{stroke:var(--ds-border);stroke-width:1px}.KFXqYa_chartAxisLabel{fill:var(--ds-t-3);font-size:10px}.KFXqYa_chartBar{fill:var(--ds-blue);opacity:.7}.KFXqYa_chartBar:hover{opacity:1}.KFXqYa_chartStack{stroke:var(--dsb);stroke-width:.75px}.KFXqYa_chartStack:hover{opacity:.9}.KFXqYa_chartLine{stroke:var(--ds-blue);stroke-width:2px;stroke-linecap:round;stroke-linejoin:round}.KFXqYa_chartCrosshair{stroke:var(--ds-t-4);stroke-width:1px;stroke-dasharray:3 3}.KFXqYa_chartTooltip{pointer-events:none;z-index:2;border:1px solid var(--ds-border-strong);background:var(--dsb-2);box-shadow:var(--ds-shadow-1);white-space:nowrap;border-radius:8px;padding:8px 10px;position:absolute;transform:translate(-50%,calc(-100% - 10px))}.KFXqYa_chartTooltipAlignRight{transform:translate(calc(-100% - 8px),calc(-100% - 10px))}.KFXqYa_chartTooltipAlignLeft{transform:translate(8px,calc(-100% - 10px))}.KFXqYa_chartTooltipDate{color:var(--ds-t-1);margin-bottom:3px;font-size:11px;font-weight:600}.KFXqYa_chartTooltipRow{color:var(--ds-t-2);align-items:center;gap:5px;font-size:11px;line-height:17px;display:flex}.KFXqYa_chartTooltipRow strong{color:var(--ds-t-1);font-variant-numeric:tabular-nums;font-weight:600}.KFXqYa_chartTooltipHead{justify-content:space-between;align-items:baseline;gap:14px;margin-bottom:3px;display:flex}.KFXqYa_chartTooltipHead .KFXqYa_chartTooltipDate{margin-bottom:0}.KFXqYa_chartTooltipHead strong{color:var(--ds-t-1);font-variant-numeric:tabular-nums;font-size:11px;font-weight:600}.KFXqYa_chartTooltipSplit{justify-content:space-between;gap:14px}.KFXqYa_chartTooltipLabel{align-items:center;gap:5px;display:flex}.KFXqYa_chartTooltipModelDetail{color:var(--ds-t-3);font-variant-numeric:tabular-nums;margin:-2px 0 4px 13px;font-size:10.5px;line-height:14px}.KFXqYa_chartBarPlaceholder{fill:color-mix(in srgb, var(--ds-t-2) 30%, transparent)}.KFXqYa_chartLegendLine{background:var(--ds-blue);border-radius:2px;width:10px;height:3px;display:inline-block}.KFXqYa_chartLegendBar{background:var(--ds-blue);opacity:.5;border-radius:2px;width:7px;height:7px;display:inline-block}.KFXqYa_chartTooltipSwatch{border-radius:2px;flex:none;width:8px;height:8px;display:inline-block}.KFXqYa_chartLegend{color:var(--ds-t-2);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_chartLegendItem{font:inherit;color:inherit;cursor:pointer;background:0 0;border:none;align-items:center;gap:5px;padding:0;transition:color .12s;display:inline-flex}.KFXqYa_chartLegendItem:hover{color:var(--ds-t-1)}.KFXqYa_chartLegendItemActive{color:var(--ds-t-1);font-weight:600}.KFXqYa_perfBar{align-items:center;margin:10px 0 2px;display:flex}.KFXqYa_perfChips{flex-wrap:wrap;gap:6px;margin:6px 0 2px;display:flex}.KFXqYa_perfChip{border:1px solid var(--ds-border);background:var(--dsb-3);color:var(--ds-t-2);cursor:pointer;transition:border-color var(--ds-t-fast), color var(--ds-t-fast), opacity var(--ds-t-fast);border-radius:999px;align-items:center;gap:5px;padding:2px 9px;font-size:11px;line-height:16px;display:inline-flex}.KFXqYa_perfChip:hover{color:var(--ds-t-1)}.KFXqYa_perfChipOff{opacity:.45}.KFXqYa_perfChipDot{border-radius:2px;flex:none;width:8px;height:8px;display:inline-block}.KFXqYa_chartHoverDot{stroke:var(--dsb-2);stroke-width:1.5px}.KFXqYa_tableScroll{border:1px solid var(--ds-border);border-radius:var(--ds-r-2);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);overflow:auto}.KFXqYa_ubAlert{border:1px solid color-mix(in srgb, var(--ds-blue) 30%, transparent);border-radius:var(--ds-r-1);background:color-mix(in srgb, var(--ds-blue) 8%, transparent);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(--ds-t-1);font-variant-numeric:tabular-nums;font-weight:600}.KFXqYa_ubAlertNote{color:var(--ds-t-2);margin:0}.KFXqYa_ubTag,.KFXqYa_ubTagSuccess,.KFXqYa_ubTagNeutral,.KFXqYa_ubTagAlert,.KFXqYa_ubTagPromo{border:1px solid var(--ds-border-strong);white-space:nowrap;border-radius:999px;align-items:center;gap:4px;padding:1px 5px;font-size:10px;font-weight:600;line-height:14px;display:inline-flex}.KFXqYa_ubTag{color:var(--ds-t-2);background:var(--dsb-2)}.KFXqYa_ubTagSuccess{color:var(--ds-green);border-color:color-mix(in srgb, var(--ds-green) 36%, transparent);background:color-mix(in srgb, var(--ds-green) 12%, transparent)}.KFXqYa_ubTagNeutral{color:var(--ds-t-2);background:var(--dsb-2)}.KFXqYa_ubTagAlert{color:var(--ds-amber);border-color:color-mix(in srgb, var(--ds-amber) 36%, transparent);background:color-mix(in srgb, var(--ds-amber) 12%, transparent)}.KFXqYa_ubTagPromo{color:var(--ds-red);border-color:color-mix(in srgb, var(--ds-red) 36%, transparent);background:color-mix(in srgb, var(--ds-red) 12%, transparent);cursor:help}.KFXqYa_ubExtraRow td{opacity:.72;padding-top:2px;padding-bottom:2px;font-size:12px}.KFXqYa_ubExtraName{color:var(--ds-t-2);margin-left:26px}.KFXqYa_ubExtraNote{color:var(--ds-t-3);margin-left:8px;font-size:10px}.KFXqYa_ubCard{border:1px solid var(--ds-border);border-radius:var(--ds-r-2);background:var(--dsb-glass);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(--ds-t-1);margin:0;font-size:13px;font-weight:600;line-height:18px}.KFXqYa_ubCardSub{color:var(--ds-t-3);font-size:11px;line-height:16px}.KFXqYa_ubTablewrap{border:1px solid var(--ds-border);border-radius:var(--ds-r-1);overflow:auto}.KFXqYa_ubTable{border-collapse:collapse;white-space:nowrap;width:100%;font-size:12px}.KFXqYa_ubTable th,.KFXqYa_ubTable td{border-bottom:1px solid var(--ds-border);text-align:left;color:var(--ds-t-1);padding:7px 9px}.KFXqYa_ubSearch{border:1px solid var(--ds-border);border-radius:var(--ds-r-1);width:200px;max-width:45%;color:var(--ds-t-1);background:0 0;outline:none;align-self:center;margin-left:auto;padding:5px 9px;font-size:12px;line-height:18px}.KFXqYa_bandDots{flex:none;align-items:center;gap:5px;display:inline-flex}.KFXqYa_bandDot{cursor:pointer;background:0 0;border:1.5px solid;border-radius:999px;flex:none;width:9px;height:9px;padding:0}.KFXqYa_bandDotOn{background:currentColor}.KFXqYa_offPeak{color:var(--ds-blue)}.KFXqYa_soon{color:var(--ds-amber)}.KFXqYa_peak{color:var(--ds-red)}span.KFXqYa_bandDot{cursor:default}.KFXqYa_ubTable th,.KFXqYa_ubTable td:first-child{white-space:normal}.KFXqYa_ubTable tbody tr:last-child td{border-bottom:0}.KFXqYa_ubTable thead th,.KFXqYa_ubTable thead th.KFXqYa_numCol{color:var(--ds-t-3);text-transform:uppercase;letter-spacing:.04em;text-align:center;padding:6px 9px;font-size:11px;font-weight:500}.KFXqYa_ubModel{align-items:center;gap:6px;display:inline-flex}.KFXqYa_vendorLetter{color:#fff;border-radius:4px;flex:none;justify-content:center;align-items:center;width:16px;height:16px;font-size:10px;font-weight:600;line-height:1;display:inline-flex}.KFXqYa_ubModelName{color:var(--ds-t-1);align-items:center;gap:4px;font-weight:500;display:inline-flex}.KFXqYa_ubChipPeak,.KFXqYa_ubChipOff{font-variant-numeric:tabular-nums;border-radius:999px;align-items:center;gap:4px;height:18px;padding:0 6px;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(--ds-blue) 12%, transparent);border:1px solid color-mix(in srgb, var(--ds-blue) 36%, transparent);color:var(--ds-blue)}.KFXqYa_ubChipOff{background:color-mix(in srgb, var(--ds-green) 12%, transparent);border:1px solid color-mix(in srgb, var(--ds-green) 36%, transparent);color:var(--ds-green)}.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(--ds-t-1);flex:0 0 72px;font-size:12px;font-weight:500}.KFXqYa_ubNotesDesc{min-width:0;color:var(--ds-t-2);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(--ds-red) 12%, transparent);border:1px solid color-mix(in srgb, var(--ds-red) 36%, transparent);height:18px;color:var(--ds-red);border-radius:999px;align-items:center;padding:0 7px;font-size:10px;font-weight:600;line-height:14px;display:inline-flex}.KFXqYa_modelTable{border-collapse:collapse;table-layout:fixed;width:100%;min-width:640px;font-size:12px}.KFXqYa_modelTable th:first-child{width:26%}.KFXqYa_modelTable th,.KFXqYa_modelTable td{border-bottom:1px solid var(--ds-border);text-align:left;white-space:nowrap;color:var(--ds-t-1);padding:10px 12px}.KFXqYa_modelTable tbody tr:last-child td{border-bottom:0}.KFXqYa_sessionGroupRow{cursor:pointer}.KFXqYa_sessionGroupRow .KFXqYa_modelName:before{content:"›";color:var(--ds-t-3);margin-right:6px;display:inline-block}.KFXqYa_sessionGroupRow[aria-expanded=true] .KFXqYa_modelName:before{transform:rotate(90deg)}.KFXqYa_sessionChildRow td:first-child{padding-left:30px}.KFXqYa_modelTable thead th{color:var(--ds-t-3);text-transform:uppercase;letter-spacing:.04em;background:0 0;padding:8px 12px;font-size:11px;font-weight:500}.KFXqYa_modelTable tbody tr{transition:background-color .12s}.KFXqYa_modelTable tbody tr:hover{background:0 0}.KFXqYa_modelTable tbody tr.KFXqYa_modelRowFocusable{cursor:pointer}.KFXqYa_modelTable tbody tr.KFXqYa_modelRowActive,.KFXqYa_modelTable tbody tr.KFXqYa_modelRowActive:hover{background:color-mix(in srgb, var(--ds-blue) 10%, transparent)}.KFXqYa_numCol{text-align:right;font-family:var(--mono);font-variant-numeric:tabular-nums}.KFXqYa_modelTable .KFXqYa_numCol,.KFXqYa_ubTable .KFXqYa_numCol{text-align:right}.KFXqYa_na{color:var(--ds-t-4)}.KFXqYa_modelCell{align-items:center;gap:8px;display:inline-flex}.KFXqYa_modelDot{border-radius:2px;flex:none;width:8px;height:8px}.KFXqYa_modelName{color:var(--ds-t-1);font-weight:500;line-height:16px;display:block}.KFXqYa_modelProvider{color:var(--ds-t-3);font-size:10.5px;line-height:14px;display:block}.KFXqYa_siteRow{border:1px solid var(--ds-border);border-radius:var(--ds-r-1);background:var(--dsb-2);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:1px solid #0000;border-radius:999px;flex:none;align-items:center;padding:2px 7px;font-size:10px;font-weight:600;line-height:14px;display:inline-flex}.KFXqYa_siteKindSite{color:var(--ds-blue);border-color:color-mix(in srgb, var(--ds-blue) 36%, transparent);background:color-mix(in srgb, var(--ds-blue) 12%, transparent)}.KFXqYa_siteKindDirect{color:var(--ds-green);border-color:color-mix(in srgb, var(--ds-green) 36%, transparent);background:color-mix(in srgb, var(--ds-green) 12%, transparent)}.KFXqYa_siteKindUnknown{color:var(--ds-red);border-color:color-mix(in srgb, var(--ds-red) 36%, transparent);background:color-mix(in srgb, var(--ds-red) 12%, transparent)}.KFXqYa_siteRowTitle{color:var(--ds-t-1);text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;line-height:18px;overflow:hidden}.KFXqYa_siteRowMeta{flex:none;align-items:center;gap:10px;display:inline-flex}.KFXqYa_siteRowCost{color:var(--ds-t-1);font-variant-numeric:tabular-nums;font-size:12.5px;font-weight:600;line-height:18px}.KFXqYa_siteRowCalls{color:var(--ds-t-2);font-variant-numeric:tabular-nums;font-size:11.5px;line-height:17px}.KFXqYa_siteRowCallsLow{color:var(--ds-red)}.KFXqYa_flatTag{color:var(--ds-t-3);font-size:10.5px;line-height:14px}.KFXqYa_healthDot{border-radius:50%;flex:none;width:6px;height:6px;display:inline-block}.KFXqYa_healthOk{background:var(--ds-green);box-shadow:0 0 0 3px color-mix(in srgb, var(--ds-green) 18%, transparent)}.KFXqYa_healthBad{background:var(--ds-red);box-shadow:0 0 0 3px color-mix(in srgb, var(--ds-red) 18%, transparent)}.KFXqYa_healthIdle{background:var(--ds-t-4)}.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(--ds-green);background:var(--dsb-2)}.KFXqYa_healthBadgeBad{color:var(--ds-red);background:var(--dsb-2)}.KFXqYa_planTag{color:var(--ds-green);white-space:nowrap;align-items:center;gap:4px;font-size:10px;font-weight:500;line-height:14px;display:inline-flex}.KFXqYa_planTagBadge{background:color-mix(in srgb, var(--ds-green) 20%, transparent);border-radius:4px;padding:0 4px;font-size:9px;line-height:12px}.KFXqYa_uncataloguedTag{border:1px solid color-mix(in srgb, var(--ds-amber) 36%, transparent);vertical-align:1px;color:var(--ds-amber);background:color-mix(in srgb, var(--ds-amber) 12%, transparent);border-radius:999px;margin-left:6px;padding:0 6px;font-size:10px;font-weight:600;line-height:16px;display:inline-block}.KFXqYa_estimatedTag{border:1px solid color-mix(in srgb, var(--ds-blue) 36%, transparent);vertical-align:1px;color:var(--ds-blue);background:color-mix(in srgb, var(--ds-blue) 12%, transparent);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(--ds-border-strong);background:var(--dsb-glass-strong);backdrop-filter:blur(14px)saturate(1.3);color:var(--ds-t-2);font-variant-numeric:tabular-nums;border-radius:999px;flex-wrap:wrap;align-items:center;gap:8px;padding:6px 12px;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:11px;line-height:16px;display:inline-flex}.KFXqYa_feeBarAbove{order:-1;align-self:center;margin-bottom:8px}.KFXqYa_feeInline{font-variant-numeric:tabular-nums;white-space:nowrap;cursor:default;border-radius:999px;align-self:center;align-items:center;gap:5px;height:22px;padding:0 4px;font-size:11px;line-height:16px;display:inline-flex}.KFXqYa_feeInline .KFXqYa_feeChipPrimary,.KFXqYa_feeInline .KFXqYa_feeChipOff{height:18px;padding:0 7px}.KFXqYa_feeInlineNum{color:var(--ds-t-1);padding-right:6px;font-weight:600}.KFXqYa_feeInlineAlert{background:color-mix(in srgb, var(--ds-amber) 12%, transparent)}.KFXqYa_feeInlineAlert .KFXqYa_feeInlineNum{color:var(--ds-amber)}.KFXqYa_feeInlineError{background:color-mix(in srgb, var(--ds-red) 12%, transparent)}.KFXqYa_feeInlineError .KFXqYa_feeInlineNum{color:var(--ds-red)}.KFXqYa_feeBar .KFXqYa_feeSep{color:var(--ds-t-4)}.KFXqYa_feeCount{color:var(--ds-t-1);font-weight:600}.KFXqYa_feeSuffix{color:var(--ds-t-3)}.KFXqYa_feeItem{color:var(--ds-t-2);white-space:nowrap}.KFXqYa_feeNum{color:var(--ds-t-1);font-weight:600}.KFXqYa_feeSep{color:var(--ds-t-4)}.KFXqYa_feeChipPrimary,.KFXqYa_feeChipOff,.KFXqYa_feeChipAlert,.KFXqYa_feeChipError{border:1px solid var(--ds-border);background:var(--dsb-3);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{color:var(--ds-blue);border-color:color-mix(in srgb, var(--ds-blue) 30%, transparent)}.KFXqYa_feeChipOff{color:var(--ds-cyan);border-color:color-mix(in srgb, var(--ds-cyan) 30%, transparent)}.KFXqYa_feeChipAlert{color:var(--ds-amber);border-color:color-mix(in srgb, var(--ds-amber) 30%, transparent)}.KFXqYa_feeChipError{color:var(--ds-red);border-color:color-mix(in srgb, var(--ds-red) 30%, transparent)}.KFXqYa_balanceCell{align-items:center;gap:6px;display:inline-flex;position:relative}.KFXqYa_providerGroupRecharge{border:1px solid color-mix(in srgb, var(--ds-c-1) 38%, transparent);background:color-mix(in srgb, var(--ds-c-1) 8%, transparent);color:var(--ds-c-1);white-space:nowrap;border-radius:999px;justify-content:center;align-items:center;min-width:48px;padding:1px 8px;font-size:10.5px;font-weight:600;line-height:16px;text-decoration:none;display:inline-flex}.KFXqYa_providerGroupRecharge:empty{background:0 0;border-color:#0000}.KFXqYa_providerGroupRecharge:hover{background:color-mix(in srgb, var(--ds-c-1) 15%, transparent);border-color:color-mix(in srgb, var(--ds-c-1) 60%, transparent)}.KFXqYa_balanceDaysBadge{border:1px solid var(--ds-border-strong);background:var(--dsb-2);min-width:16px;height:16px;color:var(--ds-t-2);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;padding:0 4px;font-size:10px;font-weight:600;line-height:1;display:inline-flex}.KFXqYa_balanceDaysBadge:hover{border-color:var(--ds-t-3);color:var(--ds-t-1)}.KFXqYa_balanceDaysBadgeLow{color:var(--ds-red);border-color:color-mix(in srgb, var(--ds-red) 36%, transparent);background:color-mix(in srgb, var(--ds-red) 12%, transparent)}.KFXqYa_balanceDetailPop{z-index:20;background:var(--dsb-2);border:1px solid var(--ds-border-strong);min-width:180px;box-shadow:var(--ds-shadow-1);white-space:nowrap;border-radius:8px;flex-direction:column;gap:6px;padding:8px 10px;display:inline-flex;position:absolute;top:calc(100% + 6px);right:0}.KFXqYa_balanceDetailHead{justify-content:space-between;align-items:center;gap:12px;display:flex}.KFXqYa_balanceDetailTitle{color:var(--ds-t-1);font-size:12px;font-weight:600}.KFXqYa_balanceDetailClose{cursor:pointer;color:var(--ds-t-3);background:0 0;border:none;font-size:14px;line-height:1}.KFXqYa_balanceDetailClose:hover{color:var(--ds-t-1)}.KFXqYa_balanceDetailGrid{flex-direction:column;gap:4px;display:inline-flex}.KFXqYa_balanceDetailRow{color:var(--ds-t-2);font-variant-numeric:tabular-nums;justify-content:space-between;gap:16px;font-size:11px;line-height:15px;display:flex}.KFXqYa_balanceDetailLabel{color:var(--ds-t-3)}.KFXqYa_balanceDetailValue{color:var(--ds-t-1);font-weight:500}.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 var(--ds-border);border-radius:var(--ds-r-2);background:var(--dsb-glass);-webkit-backdrop-filter:blur(12px)saturate(1.3);transition:border-color var(--ds-t-fast);padding:14px 16px;position:relative;overflow:hidden}.KFXqYa_subscriptionHead{flex-wrap:wrap;align-items:baseline;gap:6px;margin-bottom:8px;display:flex}.KFXqYa_subscriptionName{color:var(--ds-t-1);font-size:13px;font-weight:600}.KFXqYa_subscriptionPlan{color:var(--ds-t-2);font-size:11px}.KFXqYa_subscriptionPlan[data-kind=code],.KFXqYa_subscriptionPlan[data-kind=token]{color:var(--ds-t-2);background:var(--dsb-3);border-radius:999px;padding:1px 8px;font-weight:500}.KFXqYa_subscriptionTier{color:var(--ds-t-3);margin-left:6px}.KFXqYa_subscriptionAuto{border:1px solid color-mix(in srgb, var(--ds-blue) 36%, transparent);color:var(--ds-blue);background:color-mix(in srgb, var(--ds-blue) 12%, transparent);border-radius:999px;margin-left:6px;padding:1px 6px;font-size:10px}.KFXqYa_subscriptionStatus{color:var(--ds-t-2);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(--ds-t-3);flex:0 0 44px}.KFXqYa_subscriptionTrack{background:var(--dsb-3);height:6px;box-shadow:inset 0 0 0 1px var(--ds-border);border-radius:3px;flex:1;overflow:hidden}.KFXqYa_subscriptionFill{background:var(--ds-blue);height:calc(100% - 2px);transition:width var(--ds-t-fast);border-radius:2px;margin:1px;display:block}.KFXqYa_subscriptionFillWarn{background:var(--ds-amber)}.KFXqYa_subscriptionFillOver{background:var(--ds-red)}.KFXqYa_subscriptionMeta{flex-direction:column;flex:none;align-items:flex-end;gap:2px;display:flex}.KFXqYa_subscriptionPct{text-align:right;min-width:52px;font-family:var(--mono);font-variant-numeric:tabular-nums;color:var(--ds-t-1);flex:none}.KFXqYa_subscriptionExhausted{color:var(--ds-red);min-width:52px;font-weight:600}.KFXqYa_subscriptionReset{color:var(--ds-t-3);white-space:nowrap;flex:none;font-size:10px}.KFXqYa_providerGroupList{flex-direction:column;gap:10px;display:flex}.KFXqYa_providerGroup{border:1px solid var(--ds-border);border-radius:var(--ds-r-2);background:var(--dsb-glass);padding:12px 14px}.KFXqYa_providerGroupHead{justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:10px;display:flex}.KFXqYa_providerGroupTitle{align-items:center;gap:7px;min-width:0;display:inline-flex}.KFXqYa_kindBadge{border:1px solid color-mix(in srgb, var(--ds-c-1) 32%, transparent);background:color-mix(in srgb, var(--ds-c-1) 10%, transparent);color:var(--ds-c-1);border-radius:4px;flex:none;padding:1px 6px;font-size:10px;font-weight:600;line-height:15px}.KFXqYa_kindBadgeRelay{border-color:color-mix(in srgb, var(--ds-c-2) 32%, transparent);background:color-mix(in srgb, var(--ds-c-2) 10%, transparent);color:var(--ds-c-2)}.KFXqYa_kindBadgeUnknown{border-color:var(--ds-border);background:color-mix(in srgb, var(--ds-t-3) 12%, transparent);color:var(--ds-t-3)}.KFXqYa_providerGroupName{color:var(--ds-t-1);font-size:13px;font-weight:600;line-height:18px}.KFXqYa_providerGroupMeta{flex:none;align-items:center;gap:10px;display:inline-flex}.KFXqYa_providerGroupBadge{border:1px solid color-mix(in srgb, var(--ds-green) 36%, transparent);color:var(--ds-green);background:color-mix(in srgb, var(--ds-green) 12%, transparent);border-radius:999px;justify-content:center;align-items:center;padding:1px 8px;font-size:10px;font-weight:500;line-height:16px;display:inline-flex}.KFXqYa_providerGroupBalance,.KFXqYa_providerGroupCost{color:var(--ds-t-2);font-variant-numeric:tabular-nums;white-space:nowrap;justify-content:flex-end;align-items:baseline;gap:6px;min-width:118px;font-size:12px;line-height:17px;display:inline-flex}.KFXqYa_providerGroupCostLabel{font-size:11px}.KFXqYa_providerGroupCostValue{color:var(--ds-t-1);text-align:right;min-width:56px;font-weight:600}.KFXqYa_providerGroupBalanceLabel{color:var(--ds-t-3);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(--ds-amber) 16%, transparent)}.KFXqYa_roundsBarColOff{background:var(--dsb-3)}.KFXqYa_roundsBarLabel{text-align:center;color:var(--ds-t-2);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(--ds-blue);border-radius:2px 2px 0 0;width:100%;min-height:2px;position:relative}.KFXqYa_roundsBarFlagged{background:var(--ds-red);border-radius:2px 2px 0 0;width:100%;min-height:2px;position:relative}.KFXqYa_roundsFlagMark{background:var(--ds-red);border-radius:50%;width:7px;height:7px;position:absolute;top:-3px;right:-3px}.KFXqYa_roundsAxis{color:var(--ds-t-3);justify-content:space-between;margin-top:6px;font-size:10px;display:flex}.KFXqYa_roundsEmpty{color:var(--ds-t-2);margin-top:10px;font-size:12px}.KFXqYa_heatmap{margin-top:10px}.KFXqYa_heatmapGrid{grid-template-columns:repeat(7,minmax(0,1fr));gap:3px;display:grid}.KFXqYa_heatmapCellEmpty{box-sizing:border-box;border:1px dashed var(--ds-border);height:30px;color:var(--ds-t-4);font-variant-numeric:tabular-nums;background:0 0;border-radius:2px;justify-content:center;align-items:center;font-size:11px;display:flex}.KFXqYa_heatmapCell{font-variant-numeric:tabular-nums;cursor:pointer;border:0;border-radius:2px;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:2px;width:14px;height:14px;display:block}.KFXqYa_heatmapHover{font-variant-numeric:tabular-nums;margin-left:auto;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace}.KFXqYa_heatmapRangeSwitch{gap:4px;margin-left:auto;display:inline-flex}.KFXqYa_heatmapRangeButton{border:1px solid var(--ds-border);color:var(--ds-t-2);cursor:pointer;background:0 0;border-radius:6px;padding:2px 8px;font-size:11px;line-height:1.4}.KFXqYa_heatmapRangeButtonActive{border-color:var(--ds-border-strong);color:var(--ds-t-1);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(--ds-t-3);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(--ds-t-3);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_heatmapHalf .KFXqYa_heatmapYearWeekdays{grid-template-rows:repeat(7,16px);line-height:16px}.KFXqYa_heatmapHalf .KFXqYa_heatmapYearWeekday{height:16px}.KFXqYa_heatmapHalf .KFXqYa_heatmapYearMonths{grid-template-columns:repeat(26,16px)}.KFXqYa_heatmapHalf .KFXqYa_heatmapYearGrid{grid-template-rows:repeat(7,16px)}.KFXqYa_heatmapHalf .KFXqYa_heatmapYearCell{border-radius:3px;width:16px;height:16px}.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(--ds-blue);color:var(--dsw-alias-label-primary);background:color-mix(in srgb, var(--ds-blue) 16%, transparent)}.KFXqYa_rdoRow{justify-content:space-between;align-items:center;gap:8px;margin-top:10px;display:flex}.KFXqYa_rdoLabel{color:var(--dsw-alias-label-secondary);font-size:12px}.KFXqYa_rdoSelect{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-primary);white-space:nowrap;cursor:pointer;border-radius:10px;align-items:center;gap:5px;padding:5px 8px 5px 10px;font-size:12px;display:inline-flex}.KFXqYa_rdoSelect:hover{background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 85%, transparent)}.KFXqYa_rdoSelect:focus-visible{border-color:var(--ds-blue);outline:none}.KFXqYa_rdoChevron{color:var(--dsw-alias-label-tertiary);transition:transform .15s;display:inline-flex}.KFXqYa_rdoChevronOpen{transform:rotate(180deg)}.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(--ds-amber);background:color-mix(in srgb, var(--ds-amber) 12%, transparent);border:1px solid color-mix(in srgb, var(--ds-amber) 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(--ds-blue);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(--ds-blue)}.KFXqYa_tokenModelPartOut{background:var(--ds-amber)}.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-radius:var(--ds-r-2);border:1px solid var(--ds-border-strong);background:var(--dsb-glass-strong);-webkit-backdrop-filter:blur(14px)saturate(1.2);min-width:280px;max-width:380px;box-shadow:var(--ds-shadow-2);animation:KFXqYa_peakAlertIn var(--ds-t-fast);flex-direction:column;gap:12px;padding:14px 16px;display:flex;position:fixed}.KFXqYa_peakCardCorner{bottom:18px;right:18px}.KFXqYa_peakCardCenter{top:20%;left:50%;transform:translate(-50%)}.KFXqYa_peakCardPeak{color:var(--ds-blue)}.KFXqYa_peakCardOff{color:var(--ds-cyan)}.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(--ds-blue)}.KFXqYa_peakTagSuccess{background:var(--dsw-alias-bg-layer-3);color:var(--ds-cyan)}.KFXqYa_peakDot{border-radius:999px;flex:none;width:6px;height:6px}.KFXqYa_peakDotPrimary{background:var(--ds-blue)}.KFXqYa_peakDotSuccess{background:var(--ds-cyan)}.KFXqYa_peakClose{width:24px;height:24px;color:var(--ds-t-3);cursor:pointer;transition:background-color var(--ds-t-fast), color var(--ds-t-fast);background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;font-size:15px;line-height:1;display:inline-flex}.KFXqYa_peakClose:hover{color:var(--ds-t-1);background:var(--dsw-alias-bg-layer-2)}.KFXqYa_peakCount{font-variant-numeric:tabular-nums;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:28px;font-weight:600;line-height:1}.KFXqYa_peakCountPrimary{color:var(--ds-blue)}.KFXqYa_peakCountSuccess{color:var(--ds-cyan)}.KFXqYa_peakDesc{color:var(--ds-t-1);margin:4px 0 0;font-size:12px;line-height:18px}@keyframes KFXqYa_peakAlertIn{0%{opacity:0}to{opacity:1}}.KFXqYa_setCard{border:1px solid var(--ds-border);border-radius:var(--ds-r-2);background:var(--dsb-glass);flex-direction:column;gap:12px;padding:16px 18px;display:flex}.KFXqYa_setGrid3,.KFXqYa_setGrid2{gap:10px;display:grid}.KFXqYa_setGrid3{grid-template-columns:repeat(3,minmax(0,1fr))}.KFXqYa_setGrid2{grid-template-columns:repeat(2,minmax(0,1fr))}@media (width<=720px){.KFXqYa_setGrid3,.KFXqYa_setGrid2{grid-template-columns:1fr}}.KFXqYa_setCell{border:1px solid var(--ds-border);border-radius:var(--ds-r-1);flex-direction:column;gap:8px;min-width:0;padding:12px 14px;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(--ds-t-1);margin:0;font-size:13px;font-weight:600;line-height:18px}.KFXqYa_setCardDesc{color:var(--ds-t-3);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(--ds-t-3);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(--ds-border);align-items:center;gap:10px;padding:8px 0;display:flex}.KFXqYa_userPriceCheck{width:14px;height:14px;accent-color:var(--ds-blue);flex:none;margin:0}.KFXqYa_userPriceBody{flex-direction:column;flex:1;gap:8px;min-width:0;display:flex}.KFXqYa_userPriceLineMeta{grid-template-columns:minmax(0,1fr) minmax(0,1.4fr) auto;align-items:end;gap:8px 10px;display:grid}@media (width<=720px){.KFXqYa_userPriceLineMeta{grid-template-columns:repeat(2,minmax(0,1fr))}}.KFXqYa_userPriceLineMeta .KFXqYa_userPriceInput{box-sizing:border-box;width:100%;min-width:0;max-width:none}.KFXqYa_userPriceBody .KFXqYa_ctlGroup{flex-wrap:nowrap}.KFXqYa_userPriceLineMeta .KFXqYa_userPriceField .KFXqYa_ctlLabel{align-items:flex-end;min-height:30px;display:flex}.KFXqYa_userPricePriceLine{border-left:2px solid var(--ds-amber);flex-wrap:wrap;align-items:center;gap:10px;width:calc(100% - 22px);margin-left:10px;padding:2px 0 6px 12px;display:flex}.KFXqYa_userPricePriceLine>.KFXqYa_ctlLabel{color:var(--ds-t-3);flex:0 0 44px;font-size:11px}.KFXqYa_userPricePriceLine .KFXqYa_userPriceInputNum{box-sizing:border-box;flex:1 1 0;width:auto;min-width:120px;max-width:240px}.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(--ds-border);background:var(--dsb-3);min-width:96px;max-width:160px;color:var(--ds-t-1);border-radius:6px;padding:4px 8px;font-size:12px;line-height:16px}.KFXqYa_userPriceInputNum{min-width:72px;max-width:88px}.KFXqYa_rdo{color:var(--ds-t-2);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(--ds-border-strong);background:var(--dsb-3);border-radius:50%;flex:none;width:14px;height:14px;position:relative}.KFXqYa_rdo input:checked+.KFXqYa_rdoDot{border-color:var(--ds-blue)}.KFXqYa_rdo input:checked+.KFXqYa_rdoDot:after{content:"";background:var(--ds-blue);border-radius:50%;position:absolute;inset:3px}.KFXqYa_inp{border:1px solid var(--ds-border);background:var(--dsb-3);border-radius:6px;align-items:center;gap:4px;padding:2px 6px;display:inline-flex}.KFXqYa_affix{color:var(--ds-t-3);font-size:11px;line-height:16px}.KFXqYa_prog{background:var(--dsb-3);min-width:0;height:6px;box-shadow:inset 0 0 0 1px var(--ds-border);border-radius:3px;flex:1;overflow:hidden}.KFXqYa_progFill{background:var(--ds-blue);height:calc(100% - 2px);transition:width var(--ds-t-fast);border-radius:2px;margin:1px}.KFXqYa_btn{border:1px solid var(--ds-border);height:28px;color:var(--ds-t-2);cursor:pointer;transition:border-color var(--ds-t-fast), color var(--ds-t-fast), background-color var(--ds-t-fast);background:0 0;border-radius:999px;align-items:center;gap:6px;padding:0 12px;font-size:12px;line-height:16px;display:inline-flex}.KFXqYa_btn:hover{border-color:var(--ds-blue);color:var(--ds-t-1);background:color-mix(in srgb, var(--ds-blue) 12%, transparent)}.KFXqYa_modelTable tbody td:not(:first-child) tbody td:not(:first-child){text-align:right;font-family:var(--mono);font-variant-numeric:tabular-nums;color:var(--ds-t-1)}@container (width<=230px){.KFXqYa_trigger{box-shadow:none;-webkit-backdrop-filter:none;background:0 0;border:none;border-radius:12px;padding:7px 8px}.KFXqYa_trigger:before,.KFXqYa_trigger:after{display:none}.KFXqYa_trigger:hover,.KFXqYa_trigger:focus-visible{background:var(--dsw-alias-interactive-bg-hover);box-shadow:none;border-color:#0000;transform:none}.KFXqYa_triggerSpark,.KFXqYa_triggerLabel{display:none}}@container (width<=150px){.KFXqYa_triggerMain{display:none}}`,document.head.appendChild(e)}var F={affix:`KFXqYa_affix`,balanceCell:`KFXqYa_balanceCell`,balanceDaysBadge:`KFXqYa_balanceDaysBadge`,balanceDaysBadgeLow:`KFXqYa_balanceDaysBadgeLow`,balanceDetailClose:`KFXqYa_balanceDetailClose`,balanceDetailGrid:`KFXqYa_balanceDetailGrid`,balanceDetailHead:`KFXqYa_balanceDetailHead`,balanceDetailLabel:`KFXqYa_balanceDetailLabel`,balanceDetailPop:`KFXqYa_balanceDetailPop`,balanceDetailRow:`KFXqYa_balanceDetailRow`,balanceDetailTitle:`KFXqYa_balanceDetailTitle`,balanceDetailValue:`KFXqYa_balanceDetailValue`,bandDot:`KFXqYa_bandDot`,bandDotOn:`KFXqYa_bandDotOn`,bandDots:`KFXqYa_bandDots`,"billing-trigger":`KFXqYa_billing-trigger`,btn:`KFXqYa_btn`,bucketCost:`KFXqYa_bucketCost`,bucketOfficial:`KFXqYa_bucketOfficial`,bucketSep:`KFXqYa_bucketSep`,bucketThird:`KFXqYa_bucketThird`,budgetFillOver:`KFXqYa_budgetFillOver`,budgetFillWarn:`KFXqYa_budgetFillWarn`,budgetInput:`KFXqYa_budgetInput`,budgetPulse:`KFXqYa_budgetPulse`,chartAxisLabel:`KFXqYa_chartAxisLabel`,chartBar:`KFXqYa_chartBar`,chartBarPlaceholder:`KFXqYa_chartBarPlaceholder`,chartCrosshair:`KFXqYa_chartCrosshair`,chartEmpty:`KFXqYa_chartEmpty`,chartGrid:`KFXqYa_chartGrid`,chartHoverDot:`KFXqYa_chartHoverDot`,chartLegend:`KFXqYa_chartLegend`,chartLegendBar:`KFXqYa_chartLegendBar`,chartLegendItem:`KFXqYa_chartLegendItem`,chartLegendItemActive:`KFXqYa_chartLegendItemActive`,chartLegendLine:`KFXqYa_chartLegendLine`,chartLine:`KFXqYa_chartLine`,chartStack:`KFXqYa_chartStack`,chartSvg:`KFXqYa_chartSvg`,chartTooltip:`KFXqYa_chartTooltip`,chartTooltipAlignLeft:`KFXqYa_chartTooltipAlignLeft`,chartTooltipAlignRight:`KFXqYa_chartTooltipAlignRight`,chartTooltipDate:`KFXqYa_chartTooltipDate`,chartTooltipHead:`KFXqYa_chartTooltipHead`,chartTooltipLabel:`KFXqYa_chartTooltipLabel`,chartTooltipModelDetail:`KFXqYa_chartTooltipModelDetail`,chartTooltipRow:`KFXqYa_chartTooltipRow`,chartTooltipSplit:`KFXqYa_chartTooltipSplit`,chartTooltipSwatch:`KFXqYa_chartTooltipSwatch`,chartWrap:`KFXqYa_chartWrap`,closeButton:`KFXqYa_closeButton`,ctlCol:`KFXqYa_ctlCol`,ctlGroup:`KFXqYa_ctlGroup`,ctlLabel:`KFXqYa_ctlLabel`,ctlRow:`KFXqYa_ctlRow`,ctlRowStretch:`KFXqYa_ctlRowStretch`,currencyButton:`KFXqYa_currencyButton`,currencyButtonActive:`KFXqYa_currencyButtonActive`,currencyToggle:`KFXqYa_currencyToggle`,dashboard:`KFXqYa_dashboard`,dashboardBody:`KFXqYa_dashboardBody`,dashboardHead:`KFXqYa_dashboardHead`,dashboardIn:`KFXqYa_dashboardIn`,dashboardModal:`KFXqYa_dashboardModal`,dashboardRight:`KFXqYa_dashboardRight`,dashboardSubtitle:`KFXqYa_dashboardSubtitle`,dashboardTitle:`KFXqYa_dashboardTitle`,delta:`KFXqYa_delta`,deltaDown:`KFXqYa_deltaDown`,deltaUp:`KFXqYa_deltaUp`,emptyRow:`KFXqYa_emptyRow`,estimatedTag:`KFXqYa_estimatedTag`,exportBar:`KFXqYa_exportBar`,exportButton:`KFXqYa_exportButton`,exportLabel:`KFXqYa_exportLabel`,feeBar:`KFXqYa_feeBar`,feeBarAbove:`KFXqYa_feeBarAbove`,feeChipAlert:`KFXqYa_feeChipAlert`,feeChipError:`KFXqYa_feeChipError`,feeChipOff:`KFXqYa_feeChipOff`,feeChipPrimary:`KFXqYa_feeChipPrimary`,feeCount:`KFXqYa_feeCount`,feeInline:`KFXqYa_feeInline`,feeInlineAlert:`KFXqYa_feeInlineAlert`,feeInlineError:`KFXqYa_feeInlineError`,feeInlineNum:`KFXqYa_feeInlineNum`,feeItem:`KFXqYa_feeItem`,feeNum:`KFXqYa_feeNum`,feeSep:`KFXqYa_feeSep`,feeSuffix:`KFXqYa_feeSuffix`,flatTag:`KFXqYa_flatTag`,floatModeBtn:`KFXqYa_floatModeBtn`,floatModeBtnOn:`KFXqYa_floatModeBtnOn`,floatSub:`KFXqYa_floatSub`,floatSubHead:`KFXqYa_floatSubHead`,floatSubName:`KFXqYa_floatSubName`,floatSubPlan:`KFXqYa_floatSubPlan`,floatTarget:`KFXqYa_floatTarget`,floatTargetLabel:`KFXqYa_floatTargetLabel`,healthBad:`KFXqYa_healthBad`,healthBadge:`KFXqYa_healthBadge`,healthBadgeBad:`KFXqYa_healthBadgeBad`,healthBadgeOk:`KFXqYa_healthBadgeOk`,healthDot:`KFXqYa_healthDot`,healthIdle:`KFXqYa_healthIdle`,healthOk:`KFXqYa_healthOk`,heatmap:`KFXqYa_heatmap`,heatmapCell:`KFXqYa_heatmapCell`,heatmapCellEmpty:`KFXqYa_heatmapCellEmpty`,heatmapFooter:`KFXqYa_heatmapFooter`,heatmapGrid:`KFXqYa_heatmapGrid`,heatmapHalf:`KFXqYa_heatmapHalf`,heatmapHover:`KFXqYa_heatmapHover`,heatmapLegend:`KFXqYa_heatmapLegend`,heatmapRangeButton:`KFXqYa_heatmapRangeButton`,heatmapRangeButtonActive:`KFXqYa_heatmapRangeButtonActive`,heatmapRangeSwitch:`KFXqYa_heatmapRangeSwitch`,heatmapYear:`KFXqYa_heatmapYear`,heatmapYearBody:`KFXqYa_heatmapYearBody`,heatmapYearCell:`KFXqYa_heatmapYearCell`,heatmapYearGrid:`KFXqYa_heatmapYearGrid`,heatmapYearMonth:`KFXqYa_heatmapYearMonth`,heatmapYearMonths:`KFXqYa_heatmapYearMonths`,heatmapYearScroll:`KFXqYa_heatmapYearScroll`,heatmapYearWeekday:`KFXqYa_heatmapYearWeekday`,heatmapYearWeekdays:`KFXqYa_heatmapYearWeekdays`,hero:`KFXqYa_hero`,heroCurrency:`KFXqYa_heroCurrency`,heroGauge:`KFXqYa_heroGauge`,heroGaugeArc:`KFXqYa_heroGaugeArc`,heroGaugeArcOver:`KFXqYa_heroGaugeArcOver`,heroGaugeCenter:`KFXqYa_heroGaugeCenter`,heroGaugeDial:`KFXqYa_heroGaugeDial`,heroGaugeLabel:`KFXqYa_heroGaugeLabel`,heroGaugeRemain:`KFXqYa_heroGaugeRemain`,heroGaugeRemainOver:`KFXqYa_heroGaugeRemainOver`,heroGaugeSub:`KFXqYa_heroGaugeSub`,heroGaugeSvg:`KFXqYa_heroGaugeSvg`,heroGaugeTrack:`KFXqYa_heroGaugeTrack`,heroLabel:`KFXqYa_heroLabel`,heroMain:`KFXqYa_heroMain`,heroMeta:`KFXqYa_heroMeta`,heroReadout:`KFXqYa_heroReadout`,heroSide:`KFXqYa_heroSide`,heroSideItem:`KFXqYa_heroSideItem`,heroSideLabel:`KFXqYa_heroSideLabel`,heroSideSpacer:`KFXqYa_heroSideSpacer`,heroSideValue:`KFXqYa_heroSideValue`,heroTop:`KFXqYa_heroTop`,heroValue:`KFXqYa_heroValue`,inp:`KFXqYa_inp`,kindBadge:`KFXqYa_kindBadge`,kindBadgeRelay:`KFXqYa_kindBadgeRelay`,kindBadgeUnknown:`KFXqYa_kindBadgeUnknown`,kpiDetail:`KFXqYa_kpiDetail`,kpiGreen:`KFXqYa_kpiGreen`,kpiGrid:`KFXqYa_kpiGrid`,kpiLabel:`KFXqYa_kpiLabel`,kpiTile:`KFXqYa_kpiTile`,kpiValue:`KFXqYa_kpiValue`,kpiZone:`KFXqYa_kpiZone`,kpiZoneHead:`KFXqYa_kpiZoneHead`,kpiZoneLabel:`KFXqYa_kpiZoneLabel`,metricCell:`KFXqYa_metricCell`,metricGrid:`KFXqYa_metricGrid`,metricLabel:`KFXqYa_metricLabel`,metricValue:`KFXqYa_metricValue`,metricValueSuccess:`KFXqYa_metricValueSuccess`,modalFooter:`KFXqYa_modalFooter`,modelCell:`KFXqYa_modelCell`,modelDot:`KFXqYa_modelDot`,modelName:`KFXqYa_modelName`,modelProvider:`KFXqYa_modelProvider`,modelRowActive:`KFXqYa_modelRowActive`,modelRowFocusable:`KFXqYa_modelRowFocusable`,modelTable:`KFXqYa_modelTable`,na:`KFXqYa_na`,numCol:`KFXqYa_numCol`,offPeak:`KFXqYa_offPeak`,panel:`KFXqYa_panel`,panelHead:`KFXqYa_panelHead`,panelHeadControls:`KFXqYa_panelHeadControls`,panelHint:`KFXqYa_panelHint`,panelTitle:`KFXqYa_panelTitle`,peak:`KFXqYa_peak`,peakAlertIn:`KFXqYa_peakAlertIn`,peakCard:`KFXqYa_peakCard`,peakCardCenter:`KFXqYa_peakCardCenter`,peakCardCorner:`KFXqYa_peakCardCorner`,peakCardOff:`KFXqYa_peakCardOff`,peakCardPeak:`KFXqYa_peakCardPeak`,peakClose:`KFXqYa_peakClose`,peakCount:`KFXqYa_peakCount`,peakCountPrimary:`KFXqYa_peakCountPrimary`,peakCountSuccess:`KFXqYa_peakCountSuccess`,peakDesc:`KFXqYa_peakDesc`,peakDot:`KFXqYa_peakDot`,peakDotPrimary:`KFXqYa_peakDotPrimary`,peakDotSuccess:`KFXqYa_peakDotSuccess`,peakHead:`KFXqYa_peakHead`,peakTag:`KFXqYa_peakTag`,peakTagPrimary:`KFXqYa_peakTagPrimary`,peakTagSuccess:`KFXqYa_peakTagSuccess`,perfBar:`KFXqYa_perfBar`,perfChip:`KFXqYa_perfChip`,perfChipDot:`KFXqYa_perfChipDot`,perfChipOff:`KFXqYa_perfChipOff`,perfChips:`KFXqYa_perfChips`,planTag:`KFXqYa_planTag`,planTagBadge:`KFXqYa_planTagBadge`,plgDesc:`KFXqYa_plgDesc`,plgGrid:`KFXqYa_plgGrid`,plgHead:`KFXqYa_plgHead`,plgIcon:`KFXqYa_plgIcon`,plgItem:`KFXqYa_plgItem`,plgLabel:`KFXqYa_plgLabel`,plgLink:`KFXqYa_plgLink`,plgName:`KFXqYa_plgName`,plgNameRow:`KFXqYa_plgNameRow`,plgTag:`KFXqYa_plgTag`,plgTitle:`KFXqYa_plgTitle`,plgVal:`KFXqYa_plgVal`,popDot:`KFXqYa_popDot`,popDotDirect:`KFXqYa_popDotDirect`,popDotNeutral:`KFXqYa_popDotNeutral`,popDotSub:`KFXqYa_popDotSub`,popHead:`KFXqYa_popHead`,popModel:`KFXqYa_popModel`,popModelLabel:`KFXqYa_popModelLabel`,popModelName:`KFXqYa_popModelName`,popModelRow:`KFXqYa_popModelRow`,popModelStatus:`KFXqYa_popModelStatus`,popModelStatusLow:`KFXqYa_popModelStatusLow`,popTagPrimary:`KFXqYa_popTagPrimary`,popTagSub:`KFXqYa_popTagSub`,popTitle:`KFXqYa_popTitle`,prog:`KFXqYa_prog`,progFill:`KFXqYa_progFill`,providerGroup:`KFXqYa_providerGroup`,providerGroupBadge:`KFXqYa_providerGroupBadge`,providerGroupBalance:`KFXqYa_providerGroupBalance`,providerGroupBalanceLabel:`KFXqYa_providerGroupBalanceLabel`,providerGroupCost:`KFXqYa_providerGroupCost`,providerGroupCostLabel:`KFXqYa_providerGroupCostLabel`,providerGroupCostValue:`KFXqYa_providerGroupCostValue`,providerGroupHead:`KFXqYa_providerGroupHead`,providerGroupList:`KFXqYa_providerGroupList`,providerGroupMeta:`KFXqYa_providerGroupMeta`,providerGroupName:`KFXqYa_providerGroupName`,providerGroupRecharge:`KFXqYa_providerGroupRecharge`,providerGroupTitle:`KFXqYa_providerGroupTitle`,railButton:`KFXqYa_railButton`,rangeButton:`KFXqYa_rangeButton`,rangeButtonActive:`KFXqYa_rangeButtonActive`,rangeToggle:`KFXqYa_rangeToggle`,rdo:`KFXqYa_rdo`,rdoChevron:`KFXqYa_rdoChevron`,rdoChevronOpen:`KFXqYa_rdoChevronOpen`,rdoDot:`KFXqYa_rdoDot`,rdoLabel:`KFXqYa_rdoLabel`,rdoRow:`KFXqYa_rdoRow`,rdoSelect:`KFXqYa_rdoSelect`,reconcileDismiss:`KFXqYa_reconcileDismiss`,reconcileIcon:`KFXqYa_reconcileIcon`,reconcileNotice:`KFXqYa_reconcileNotice`,reconcileText:`KFXqYa_reconcileText`,rounds:`KFXqYa_rounds`,roundsAxis:`KFXqYa_roundsAxis`,roundsBar:`KFXqYa_roundsBar`,roundsBarCol:`KFXqYa_roundsBarCol`,roundsBarColOff:`KFXqYa_roundsBarColOff`,roundsBarColPeak:`KFXqYa_roundsBarColPeak`,roundsBarFlagged:`KFXqYa_roundsBarFlagged`,roundsBarLabel:`KFXqYa_roundsBarLabel`,roundsBarWrap:`KFXqYa_roundsBarWrap`,roundsBars:`KFXqYa_roundsBars`,roundsEmpty:`KFXqYa_roundsEmpty`,roundsFlagMark:`KFXqYa_roundsFlagMark`,sessionChildRow:`KFXqYa_sessionChildRow`,sessionGroupRow:`KFXqYa_sessionGroupRow`,setCard:`KFXqYa_setCard`,setCardDesc:`KFXqYa_setCardDesc`,setCardHead:`KFXqYa_setCardHead`,setCardMeta:`KFXqYa_setCardMeta`,setCardTitle:`KFXqYa_setCardTitle`,setCell:`KFXqYa_setCell`,setGrid2:`KFXqYa_setGrid2`,setGrid3:`KFXqYa_setGrid3`,shareDot:`KFXqYa_shareDot`,shareItem:`KFXqYa_shareItem`,shareLegend:`KFXqYa_shareLegend`,shareSeg:`KFXqYa_shareSeg`,shareSegAssistant:`KFXqYa_shareSegAssistant`,shareSegOff:`KFXqYa_shareSegOff`,shareSegPeak:`KFXqYa_shareSegPeak`,shareSegTool:`KFXqYa_shareSegTool`,shareSegUser:`KFXqYa_shareSegUser`,shareTrack:`KFXqYa_shareTrack`,shareValue:`KFXqYa_shareValue`,siteKindDirect:`KFXqYa_siteKindDirect`,siteKindSite:`KFXqYa_siteKindSite`,siteKindTag:`KFXqYa_siteKindTag`,siteKindUnknown:`KFXqYa_siteKindUnknown`,siteRow:`KFXqYa_siteRow`,siteRowCalls:`KFXqYa_siteRowCalls`,siteRowCallsLow:`KFXqYa_siteRowCallsLow`,siteRowCost:`KFXqYa_siteRowCost`,siteRowMeta:`KFXqYa_siteRowMeta`,siteRowName:`KFXqYa_siteRowName`,siteRowTitle:`KFXqYa_siteRowTitle`,soon:`KFXqYa_soon`,staleNotice:`KFXqYa_staleNotice`,subscriptionAuto:`KFXqYa_subscriptionAuto`,subscriptionCard:`KFXqYa_subscriptionCard`,subscriptionExhausted:`KFXqYa_subscriptionExhausted`,subscriptionFill:`KFXqYa_subscriptionFill`,subscriptionFillOver:`KFXqYa_subscriptionFillOver`,subscriptionFillWarn:`KFXqYa_subscriptionFillWarn`,subscriptionGrid:`KFXqYa_subscriptionGrid`,subscriptionHead:`KFXqYa_subscriptionHead`,subscriptionMeta:`KFXqYa_subscriptionMeta`,subscriptionName:`KFXqYa_subscriptionName`,subscriptionPct:`KFXqYa_subscriptionPct`,subscriptionPlan:`KFXqYa_subscriptionPlan`,subscriptionReset:`KFXqYa_subscriptionReset`,subscriptionStatus:`KFXqYa_subscriptionStatus`,subscriptionTier:`KFXqYa_subscriptionTier`,subscriptionTrack:`KFXqYa_subscriptionTrack`,subscriptionWindow:`KFXqYa_subscriptionWindow`,subscriptionWindowLabel:`KFXqYa_subscriptionWindowLabel`,switch:`KFXqYa_switch`,switchKnob:`KFXqYa_switchKnob`,switchOn:`KFXqYa_switchOn`,tabButton:`KFXqYa_tabButton`,tabButtonActive:`KFXqYa_tabButtonActive`,tabNav:`KFXqYa_tabNav`,tabPanel:`KFXqYa_tabPanel`,tabPanelIn:`KFXqYa_tabPanelIn`,tableScroll:`KFXqYa_tableScroll`,tokenModelBar:`KFXqYa_tokenModelBar`,tokenModelPartIn:`KFXqYa_tokenModelPartIn`,tokenModelPartOut:`KFXqYa_tokenModelPartOut`,tokenModelParts:`KFXqYa_tokenModelParts`,tokenModelShareRow:`KFXqYa_tokenModelShareRow`,tokenPanel:`KFXqYa_tokenPanel`,trigger:`KFXqYa_trigger`,triggerBudgetHot:`KFXqYa_triggerBudgetHot`,triggerBudgetOver:`KFXqYa_triggerBudgetOver`,triggerBudgetPulse:`KFXqYa_triggerBudgetPulse`,triggerGaugeArc:`KFXqYa_triggerGaugeArc`,triggerGaugeNeedle:`KFXqYa_triggerGaugeNeedle`,triggerIcon:`KFXqYa_triggerIcon`,triggerLabel:`KFXqYa_triggerLabel`,triggerMain:`KFXqYa_triggerMain`,triggerMetric:`KFXqYa_triggerMetric`,triggerPop:`KFXqYa_triggerPop`,triggerPopEmpty:`KFXqYa_triggerPopEmpty`,triggerPopShown:`KFXqYa_triggerPopShown`,triggerPopSwitchCount:`KFXqYa_triggerPopSwitchCount`,triggerPopSwitcher:`KFXqYa_triggerPopSwitcher`,triggerPrimary:`KFXqYa_triggerPrimary`,triggerScan:`KFXqYa_triggerScan`,triggerSpark:`KFXqYa_triggerSpark`,triggerSparkBar:`KFXqYa_triggerSparkBar`,triggerSparkBreath:`KFXqYa_triggerSparkBreath`,triggerSparkHot:`KFXqYa_triggerSparkHot`,triggerValueRow:`KFXqYa_triggerValueRow`,triggerWrap:`KFXqYa_triggerWrap`,triggerYen:`KFXqYa_triggerYen`,ubAlert:`KFXqYa_ubAlert`,ubAlertLeft:`KFXqYa_ubAlertLeft`,ubAlertNote:`KFXqYa_ubAlertNote`,ubCard:`KFXqYa_ubCard`,ubCardControlGroup:`KFXqYa_ubCardControlGroup`,ubCardHead:`KFXqYa_ubCardHead`,ubCardSub:`KFXqYa_ubCardSub`,ubCardTitle:`KFXqYa_ubCardTitle`,ubChipLabel:`KFXqYa_ubChipLabel`,ubChipOff:`KFXqYa_ubChipOff`,ubChipPeak:`KFXqYa_ubChipPeak`,ubExtraName:`KFXqYa_ubExtraName`,ubExtraNote:`KFXqYa_ubExtraNote`,ubExtraRow:`KFXqYa_ubExtraRow`,ubModel:`KFXqYa_ubModel`,ubModelName:`KFXqYa_ubModelName`,ubNotes:`KFXqYa_ubNotes`,ubNotesDesc:`KFXqYa_ubNotesDesc`,ubNotesItem:`KFXqYa_ubNotesItem`,ubNotesTerm:`KFXqYa_ubNotesTerm`,ubRate:`KFXqYa_ubRate`,ubSearch:`KFXqYa_ubSearch`,ubTable:`KFXqYa_ubTable`,ubTablewrap:`KFXqYa_ubTablewrap`,ubTag:`KFXqYa_ubTag`,ubTagAlert:`KFXqYa_ubTagAlert`,ubTagError:`KFXqYa_ubTagError`,ubTagNeutral:`KFXqYa_ubTagNeutral`,ubTagPromo:`KFXqYa_ubTagPromo`,ubTagSuccess:`KFXqYa_ubTagSuccess`,uncataloguedTag:`KFXqYa_uncataloguedTag`,unpricedHint:`KFXqYa_unpricedHint`,userPriceBody:`KFXqYa_userPriceBody`,userPriceCheck:`KFXqYa_userPriceCheck`,userPriceField:`KFXqYa_userPriceField`,userPriceInput:`KFXqYa_userPriceInput`,userPriceInputNum:`KFXqYa_userPriceInputNum`,userPriceLineMeta:`KFXqYa_userPriceLineMeta`,userPricePriceLine:`KFXqYa_userPricePriceLine`,userPriceRow:`KFXqYa_userPriceRow`,vendorLetter:`KFXqYa_vendorLetter`};let we=`usageBilling`,Te={title:`使用统计`,cost:`费用`,todayCost:`今日费用`,monthCost:`本月费用`,yearCost:`本年费用`,monthProjected:`本月预计`,liveTurn:`本轮`,liveSession:`会话`,calls:`调用`,cacheHitRate:`缓存命中率`,tokens:`Token`,inputTokens:`输入`,outputTokens:`输出`,avgCost:`平均成本`,kpiRange:`统计范围`,avgRangeToday:`今日`,avgRange7d:`近7天`,avgRangeWeek:`本周`,avgRangeMonth:`本月`,avgRangeAll:`累计`,trend:`每日费用与调用趋势`,trend7d:`7 天`,trend30d:`30 天`,trendMetric:`趋势指标`,trendMetricCost:`费用`,trendMetricTokens:`Token`,pricingSearch:`搜索模型 / 厂商`,bandPinHint:`点击固定到输入框`,trendEmpty:`暂无趋势数据`,trendTotal:`总计`,roundsUnit:`轮`,healthModelsLive:`{n} 模型可用`,healthVendorsDown:`{n} 厂商失效`,healthVendorsUnavailable:`{n} 厂商不可用`,budget:`本月预算`,budgetRemain:`剩余预算`,budgetAmount:`预算金额`,budgetSummary:`本月已用 {used} / {total};达到 80% 时提醒,达到 100% 时红色脉冲警示`,sessions:`会话明细`,sessionTitle:`标题`,lastActive:`最后活跃`,sessionOverflow:`仅显示花费前 {limit} 个,共 {total} 个会话`,budgetTierBody:`本月花费 {cost} 已达预算 {budget} 的 {pct}%`,models:`模型计费明细`,providerBilling:`提供商计费与订阅`,channelUnknown:`未知路由`,directTag:`直连`,relayTag:`中转`,unknownTag:`未知`,planCountUnit:`套餐`,actual:`实际`,pricing:`模型单价表`,input:`输入`,output:`输出`,cacheHit:`缓存命中`,peak:`高峰`,offPeak:`低谷`,flat:`全天统一`,band:`时段`,close:`关闭`,footer:`每 30s 自动轮询 · 仅统计本机 dsh 会话`,footerCredit:`dsh-ui-usage-billing {version} · MIT`,lastUpdated:`数据更新于`,noData:`暂无计费数据`,todayRate:`今日汇率`,rateLive:`实时`,rateBuiltin:`内置`,pricingSyncedAt:`上次同步`,pricingSyncNow:`立即同步`,pricingSyncing:`同步中…`,promoBadge:`促`,promoUntil:`促销价至 {date},之后自动恢复刊例价`,promoOpenEnded:`厂商未公布截止时间,当前按折扣计价;公告截止后自动恢复刊例价`,pricingTip:`DeepSeek 现行刊例:V4.1 Flash 谷档 未命中 ¥1 / 缓存命中 ¥0.02 / 输出 ¥4;V4 Pro 谷档 未命中 ¥4.5 / 缓存命中 ¥0.15 / 输出 ¥13.5;峰价均为谷价 × 2。工作日 9-12 / 14-18 为高峰价,其余时段(含周末全天)为低谷价;费用按调用时刻计。`,pricingUnit:`单位:人民币 / 每百万 Token`,pricingNotes:`计价说明`,ubPeak:`峰`,ubOff:`谷`,ubStd:`标准`,peakBand:`峰谷分带`,pricingSource:`数据来源`,noteCache:`命中部分按缓存价计费,显著降低成本。`,noteBand:`高峰与空闲时段单价不同,空闲约半价。`,noteSource:`价格来自实时汇率 + 模型定价目录,未收录模型按 0 计并提示。`,balance:`余额`,recharge:`充值`,rechargeHint:`打开该厂商官方平台的充值页`,balanceUnconfigured:`未配置`,balanceUnauthorized:`密钥无效`,balanceUnreachable:`查询失败`,uncatalogued:`未收录`,estimatedPricing:`估算价`,balanceDays:`约可撑 {days} 天`,balanceLowBody:`{name} 余额 {balance},约可撑 {days} 天,请及时充值`,reconcileDrift:`系统监控到{provider}官方余额变动 {spent},本面板记录 {today},差额通常由其它工具或 API 的消耗所致`,reconcileDismiss:`知道了`,subscriptionNotConfigured:`未配置密钥`,subscriptionUnauthorized:`密钥无效`,subscriptionUnavailable:`查询失败`,subscriptionInvalid:`响应异常`,subscriptionRateLimited:`触发限流`,subscriptionSession:`本次`,subscriptionWeekly:`本周`,subscriptionMonthly:`本月`,subscriptionBilling:`计费周期`,subscriptionRemaining:`剩余 {pct}%`,subscriptionExhausted:`已用尽`,subscriptionReset:`{date} 重置`,subscriptionNoApi:`该厂商暂未提供用量查询接口`,floatWindow:`模型用量悬浮窗`,floatModeCombined:`综合`,floatModeSubscription:`订阅卡`,floatMode:`展示模式`,floatTargets:`订阅目标`,floatWindowHint:`悬浮在左下角计费卡上的用量速览;综合=当前样式,订阅卡=每次展示一张订阅额度卡(可切换)。`,floatPrimaryToday:`今日`,floatPrimaryWeek:`本周`,floatPrimaryMonth:`本月`,cardDisplay:`计费卡显示`,cardDisplayHint:`切换左下角计费卡的主指标与主数字统计范围(迷你柱跟随视角,悬浮窗不受影响)。`,cardMetric:`主指标`,cardMetricMoney:`花费金额`,cardMetricTokens:`Token 消耗`,cardSpan:`统计范围`,cardSpanDay:`日`,cardSpanWeek:`周`,cardSpanMonth:`月`,floatNoTargets:`未指定订阅通道,请在设置中勾选要展示的订阅。`,floatNoTargetsHint:`暂无可选的订阅通道。`,subscriptionsStale:`订阅额度刷新失败,以下为缓存数据`,staleLedgerNotice:`{count} 个会话出自旧版算法存档(日志已删,无法重算),模型归属可能有误差`,unreadableNotice:`{count} 个会话因会话格式版本较新暂未统计(原始数据仍在,升级 dsh 兼容修复后自动恢复)`,tokenCacheWrite:`写入`,toolRank:`工具排行`,toolName:`工具`,userPrices:`自定义单价`,userPricesHint:`为未收录或变价模型填入实付单价,总览与日趋势按此重估;模型可用下拉候选(目录键或模型 id);来源留空=该模型默认价,填入中转站域名=仅该来源的同名模型用此价(协议可省);低谷价三栏填后按峰/谷混合估算,留空=平档`,userPriceSave:`保存`,userPriceModel:`模型`,userPriceSource:`来源(中转站域名)`,userPriceSourceHint:`留空=默认价,或 https://api.中转站.com`,userPriceOffPeak:`低谷价`,userPriceNormal:`标准价`,userPriceCurrency:`币种`,userPriceAdd:`新增`,userPriceRemoveSelected:`删除所选`,userPriceSelect:`选择此行`,sessionStaleBadge:`旧版统计`,sessionUntitled:`未命名会话`,heatmapLess:`少`,heatmapMore:`多`,currency:`币种`,currencyCny:`人民币`,currencyUsd:`美元`,currencyEur:`欧元`,language:`界面语言`,heatmap:`用量热力图`,rounds:`每轮费用`,roundsHint:`最近 {count} 轮 · 柱顶为金额 · 底色为峰谷时段`,anomaly:`成本突增`,model:`模型`,thModel:`模型名称`,thInputMiss:`输入缓存未命中`,thInputHit:`输入缓存命中`,costAbbr:`费用`,tabOverview:`概览`,tabTrends:`趋势`,tabProviders:`账单`,tabPricing:`费率`,tabSettings:`设置`,budgetHint:`设置月度上限,用于本月预计与超支分段提醒`,peakAlertHint:`在切档前弹窗提醒,可选同步系统通知`,peakAlertDescPeak:`即将进入高峰时段,价格将上调,请提前安排长任务`,peakAlertDescOff:`即将进入平价时段,价格减半,适合运行大批量任务`,peakAlertDescPeakZhipu:`即将进入高峰时段(工作日 14:00–18:00),Coding Plan 额度将按基础积分全额抵扣`,peakAlertDescOffZhipu:`即将进入非高峰时段,Coding Plan 额度按基础积分 5 折抵扣`,export:`导出`,exportCsvDay:`按日 CSV`,exportCsvSession:`按会话 CSV`,exportJson:`全量 JSON`,peakShare:`峰谷时段占比`,peakSharePerCall:`按调用时刻精确判档`,offPeakSavings:`挪谷可省约 {amount}`,perfMax:`最大 TTFT`,weekCost:`本周消耗金额`,roleCost:`费用构成`,roleUser:`用户输入`,roleAssistant:`助手输出`,roleTool:`工具结果`,roleHint:`估算:输出按实测计价,输入按消息长度摊分`,tierPeak:`峰时`,tierOff:`平价`,tierToPeak:`后转峰时`,tierToOff:`后转平价`,tierAlertEnterPeak:`{minutes} 分钟后进入峰时(DeepSeek 高峰价 ×2),不急的调用可稍等`,tierAlertEnterOff:`{minutes} 分钟后进入平价(价格减半)`,tierAlertEnterPeakZhipu:`{minutes} 分钟后进入智谱高峰时段,Coding Plan 额度将全额抵扣`,tierAlertEnterOffZhipu:`{minutes} 分钟后进入智谱非高峰时段,额度按基础积分 5 折抵扣`,peakAlertTitlePeak:`即将进入高峰价`,peakAlertTitleOff:`即将进入平价`,peakAlert:`峰谷切换提醒`,peakAlertLeadMin:`提前量(分钟)`,peakAlertPos:`位置`,peakAlertMode:`提醒模式`,peakAlertPosCorner:`右下角`,peakAlertPosCenter:`屏幕居中`,peakAlertModePeak:`仅进入峰时`,peakAlertModeOff:`仅进入平价`,peakAlertModeBoth:`峰与谷都提醒`,peakAlertWebNotify:`同时发系统通知`,peakAlertPreview:`预览提醒`,planTypeCode:`订阅制`,planTypeToken:`按量`,subscriptionFeePerMonth:`{amount}/月`,triggerToday:`今日消耗金额`,triggerMonth:`当月消耗金额`,triggerMonthTokens:`当月消耗 Token`,triggerTodayTokens:`今日消耗 Token`,triggerWeekTokens:`本周消耗 Token`,subscriptionTag:`订阅`,free:`免费`,perfSamples:`样本`,perfTtft:`首字延时`,perfP50:`P50`,perfP90:`P90`,perfTps:`生成速度`,perfLatency:`总延迟`,perfEstimated:`估算样本`,perfEmpty:`暂无性能数据`,perfTpsUnit:`tok/s`,perfTitle:`性能`,perfHint:`按模型与按小时聚合;估算样本为工具续写步骤`,perfAll:`全选`,perfChartEmpty:`未选择模型或该指标暂无数据`,heatmapYear:`年`,heatmapHalf:`半年`,heatmapMonth:`月`,metricCost:`费用`,metricTokens:`Token`,heatmapTotal:`合计`,activeDays:`活跃天数`,streakDays:`连续使用`,subscriptionAutoDetect:`自动识别`,pluginAuthor:`作者`,pluginRepository:`仓库`,pluginNpm:`npm`,pluginLicense:`许可证`,tabToken:`用量`,tokenExport:`导出 Token`,tokenExportCsv:`按日 Token CSV`,tokenReasoningShare:`思考占比`,tokenReasoningShort:`思考`,tokenIo:`输入/输出比`,tokenPeak:`峰值日`,tokenDaily:`每日 Token`,tokenByModel:`模型 Token`,tokenMiss:`输入(缓存未命中)`,tokenHit:`输入(缓存命中)`,tokenOutput:`输出`,tokenViewStructure:`按结构`,tokenViewModel:`按模型`,tokenHitShort:`命中`,tokenMissShort:`未命中`,tokenTotal:`总 Token`,tokenShare:`占比`,usageStatsTool:`注入用量查询工具`,usageStatsToolHint:`让模型可在对话中查询用量/费用;会占用模型每次请求的上下文,coding 场景建议关闭(改后需重载应用生效)`,balanceGranted:`赠金余额`,balanceTopped:`充值余额`,balanceDaily:`日均消耗`,balanceDaysLong:`约可撑`,balanceDaysUnit:`天`,popTodayModel:`主力消耗模型余额`,popTitle:`用量速览`,popNoConsumption:`暂无消耗`,popDirectLead:`直联`,popSubLead:`订阅`,unpricedHint:`{count} 个模型未收录计价,费用已按 0 计`,searchEstimateHint:`含 {count} 次联网搜索请求的估算费用(每次约 {each};日志无用量事件,按次估算,可在配置 searchCallEstimateCny 调整或关闭)`,siteListDisplay:`中转站列表`,siteListDisplayHint:`隐藏「未识别」占位条目,净化中转站额度列表`,liveCostBar:`平价消耗胶囊`,liveCostBarHint:`输入框旁的即时代费条,悬浮可看详情`,liveCostBarPosition:`位置`,liveCostBarPosBelow:`输入框下方`,liveCostBarPosAbove:`输入框上方`,liveCostBarPosToolbar:`输入框内部`,exportCsvSite:`按站点 CSV`,panelRelayQuota:`中转站额度`,relayBalance:`余额`,relayNoQuota:`未读出额度`,relayWindowUsed:`已用`,relayKindNewApi:`New API`,relayKindSub2Api:`Sub2API`,relayKindUnknown:`未识别`},Ee={title:`Usage`,cost:`Cost`,todayCost:`Today`,monthCost:`This month`,yearCost:`This year`,monthProjected:`Projected`,liveTurn:`Turn`,liveSession:`Session`,calls:`Calls`,cacheHitRate:`Cache Hit`,tokens:`Tokens`,inputTokens:`Input`,outputTokens:`Output`,avgCost:`Avg cost`,kpiRange:`Range`,avgRangeToday:`Today`,avgRange7d:`7d`,avgRangeWeek:`Week`,avgRangeMonth:`Month`,avgRangeAll:`All`,trend:`Daily cost & calls`,trend7d:`7D`,trend30d:`30D`,trendMetric:`Trend metric`,trendMetricCost:`Cost`,trendMetricTokens:`Tokens`,pricingSearch:`Search model or vendor`,bandPinHint:`click to pin to the composer`,trendEmpty:`No trend data yet`,trendTotal:`Total`,roundsUnit:`turns`,healthModelsLive:`{n} models live`,healthVendorsDown:`{n} vendors down`,healthVendorsUnavailable:`{n} vendors unavailable`,budget:`Monthly budget`,budgetRemain:`Remaining`,budgetAmount:`Budget amount`,budgetSummary:`Used {used} / {total} this month; warn at 80%, pulse red at 100%`,sessions:`Sessions`,sessionTitle:`Title`,lastActive:`Last active`,sessionOverflow:`Top {limit} of {total} sessions by cost`,budgetTierBody:`This month {cost} reached {pct}% of the budget {budget}`,models:`Model billing`,providerBilling:`Provider billing & subscriptions`,channelUnknown:`Unknown routes`,directTag:`Direct`,relayTag:`Relay`,unknownTag:`Unknown`,planCountUnit:`plan(s)`,actual:`Actual`,pricing:`Model pricing`,input:`Input`,output:`Output`,cacheHit:`Cache hit`,peak:`Peak`,offPeak:`Off-peak`,flat:`Flat`,band:`Band`,close:`Close`,footer:`Polls every 30s · local dsh sessions only`,footerCredit:`dsh-ui-usage-billing {version} · MIT`,lastUpdated:`Updated`,noData:`No billing data yet`,todayRate:`Today rate`,rateLive:`Live`,rateBuiltin:`Built-in`,pricingSyncedAt:`Synced`,pricingSyncNow:`Sync now`,pricingSyncing:`Syncing…`,promoBadge:`Promo`,promoUntil:`Promo price until {date}, then list price resumes automatically`,promoOpenEnded:`End date not announced; billed at the discounted rate until further notice, then list price resumes`,pricingTip:`DeepSeek list rates: V4.1 Flash off-peak ¥1 miss / ¥0.02 cache-hit / ¥4 output; V4 Pro off-peak ¥4.5 miss / ¥0.15 cache-hit / ¥13.5 output; peak = 2× off-peak. Weekday 9-12 / 14-18 bills at peak, all other times (weekends included) at off-peak; billed at call time.`,pricingUnit:`Unit: CNY / per 1M tokens`,pricingNotes:`Pricing notes`,ubPeak:`Peak`,ubOff:`Off`,ubStd:`Std`,peakBand:`Peak/off-peak band`,pricingSource:`Data source`,noteCache:`Cache hits are billed at the cache rate, cutting cost.`,noteBand:`Peak and off-peak prices differ; off-peak is roughly half price.`,noteSource:`Prices come from the live rate + model catalog; unlisted models count as 0 and are flagged.`,balance:`Balance`,recharge:`Top up`,rechargeHint:`Open the vendor's official top-up page`,balanceUnconfigured:`Not set`,balanceUnauthorized:`Bad key`,balanceUnreachable:`Unavailable`,uncatalogued:`Not catalogued`,estimatedPricing:`Estimated`,balanceDays:`~{days} days left`,balanceLowBody:`{name} balance {balance}, ~{days} days left, please top up`,reconcileDrift:`Detected {provider} official balance moved {spent}, this panel recorded {today}; the gap usually comes from other tools or APIs consuming too`,reconcileDismiss:`Got it`,subscriptionNotConfigured:`Key not set`,subscriptionUnauthorized:`Bad key`,subscriptionUnavailable:`Unavailable`,subscriptionInvalid:`Bad response`,subscriptionRateLimited:`Rate limited`,subscriptionSession:`Current`,subscriptionWeekly:`Weekly`,subscriptionMonthly:`Monthly`,subscriptionBilling:`Billing`,subscriptionRemaining:`{pct}% left`,subscriptionExhausted:`Exhausted`,subscriptionReset:`Resets {date}`,subscriptionNoApi:`Provider does not offer a usage API`,floatWindow:`Model usage popover`,floatModeCombined:`Combined`,floatModeSubscription:`Subscription card`,floatMode:`Display mode`,floatTargets:`Targets`,floatWindowHint:`Usage summary floating on the footer card; Combined=current style, Subscription cards=one quota card at a time (switchable).`,floatPrimaryToday:`Today`,floatPrimaryWeek:`Week`,floatPrimaryMonth:`Month`,cardDisplay:`Billing card`,cardDisplayHint:`Switch the bottom-left billing card between cost and token usage, and pick the figure range (sparkline follows; the popover is unaffected).`,cardMetric:`Main metric`,cardMetricMoney:`Cost`,cardMetricTokens:`Token usage`,cardSpan:`Range`,cardSpanDay:`Day`,cardSpanWeek:`Week`,cardSpanMonth:`Month`,floatNoTargets:`No subscription selected — pick some in Settings.`,floatNoTargetsHint:`No subscription channel available.`,subscriptionsStale:`Subscription refresh failed — showing cached data`,staleLedgerNotice:`{count} sessions use legacy-algorithm archives (logs deleted); attribution may be off`,unreadableNotice:`{count} sessions are not counted yet (newer session format; data is intact and restores automatically after a dsh fix)`,tokenCacheWrite:`written`,toolRank:`Tool calls`,toolName:`Tool`,userPrices:`Custom prices`,userPricesHint:`Enter actual per-1M-token prices; main views are re-costed. Pick a model key from the dropdown candidates. Leave source empty for the model default, or enter a relay origin (protocol optional) to price only that source. Fill all three off-peak fields for peak/off-peak estimation; leave them empty for flat pricing.`,userPriceSave:`Save`,userPriceModel:`Model`,userPriceSource:`Source (relay origin)`,userPriceSourceHint:`Empty = default; e.g. https://api.relay.com`,userPriceOffPeak:`Off-peak price`,userPriceNormal:`Standard price`,userPriceCurrency:`Currency`,userPriceAdd:`Add`,userPriceRemoveSelected:`Remove selected`,userPriceSelect:`Select this row`,sessionStaleBadge:`legacy`,sessionUntitled:`Untitled session`,heatmapLess:`Less`,heatmapMore:`More`,currency:`Currency`,currencyCny:`CNY`,currencyUsd:`USD`,currencyEur:`EUR`,language:`Interface language`,heatmap:`Usage heatmap`,rounds:`Cost per turn`,roundsHint:`Last {count} rounds · bar tops show amount · fill = peak/off-peak`,anomaly:`Cost spike`,model:`Model`,thModel:`Model name`,thInputMiss:`Input (cache miss)`,thInputHit:`Input (cache hit)`,costAbbr:`cost`,tabOverview:`Overview`,tabTrends:`Trends`,tabProviders:`Bills`,tabPricing:`Rates`,tabSettings:`Settings`,budgetHint:`Set a monthly cap for projections and tier alerts`,peakAlertHint:`Alert before a tier switch, optionally via system notification`,peakAlertDescPeak:`About to enter peak hours — prices rise, plan long tasks ahead`,peakAlertDescOff:`About to enter off-peak hours — price halves, ideal for large batches`,peakAlertDescPeakZhipu:`Peak hours soon (weekdays 14:00–18:00) — Coding Plan credits will be deducted at full rate`,peakAlertDescOffZhipu:`Off-peak soon — Coding Plan credits will be deducted at 50% of base credits`,export:`Export`,exportCsvDay:`Daily CSV`,exportCsvSession:`Sessions CSV`,exportJson:`Full JSON`,peakShare:`Peak vs off-peak`,peakSharePerCall:`per-call attribution, full history`,offPeakSavings:`Shift peak to off-peak: save ~{amount}`,perfMax:`Max TTFT`,weekCost:`This week's spend`,roleCost:`Cost breakdown`,roleUser:`User input`,roleAssistant:`Assistant output`,roleTool:`Tool results`,roleHint:`Estimated: output priced exactly, input split by message size`,tierPeak:`Peak`,tierOff:`Off-peak`,tierToPeak:`until peak`,tierToOff:`until off-peak`,tierAlertEnterPeak:`Peak pricing (2x) starts in {minutes} min — non-urgent calls can wait`,tierAlertEnterOff:`Off-peak pricing (50% off) starts in {minutes} min`,tierAlertEnterPeakZhipu:`Zhipu peak hours in {minutes} min — Coding Plan credits burn at full rate`,tierAlertEnterOffZhipu:`Zhipu off-peak in {minutes} min — credit burn drops to 50%`,peakAlertTitlePeak:`Peak pricing incoming`,peakAlertTitleOff:`Off-peak incoming`,peakAlert:`Peak/off-peak alert`,peakAlertLeadMin:`Lead time (min)`,peakAlertPos:`Position`,peakAlertMode:`Remind mode`,peakAlertPosCorner:`Bottom-right`,peakAlertPosCenter:`Center`,peakAlertModePeak:`Entering peak only`,peakAlertModeOff:`Entering off-peak only`,peakAlertModeBoth:`Both`,peakAlertWebNotify:`Also send system notification`,peakAlertPreview:`Preview alert`,planTypeCode:`Subscription`,planTypeToken:`Usage`,subscriptionFeePerMonth:`{amount}/mo`,triggerToday:`Today's spend`,triggerMonth:`This month's spend`,triggerMonthTokens:`This month's tokens`,triggerTodayTokens:`Today's tokens`,triggerWeekTokens:`This week's tokens`,subscriptionTag:`Plan`,free:`Free`,perfSamples:`Samples`,perfTtft:`TTFT`,perfP50:`P50`,perfP90:`P90`,perfTps:`Speed`,perfLatency:`Total latency`,perfEstimated:`Estimated`,perfEmpty:`No performance data yet`,perfTpsUnit:`tok/s`,perfTitle:`Performance`,perfHint:`Per model & per hour; estimated samples are tool-continuation steps`,perfAll:`All`,perfChartEmpty:`No model selected or no data for this metric`,heatmapYear:`Year`,heatmapHalf:`Half`,heatmapMonth:`Month`,metricCost:`Cost`,metricTokens:`Tokens`,heatmapTotal:`Total`,activeDays:`Active days`,streakDays:`Streak`,subscriptionAutoDetect:`Auto`,pluginAuthor:`Author`,pluginRepository:`Repository`,pluginNpm:`npm`,pluginLicense:`License`,tabToken:`Usage`,tokenExport:`Export tokens`,tokenExportCsv:`Daily token CSV`,tokenReasoningShare:`Reasoning share`,tokenReasoningShort:`reasoning`,tokenIo:`In/out ratio`,tokenPeak:`Peak day`,tokenDaily:`Daily tokens`,tokenByModel:`Tokens by model`,tokenMiss:`Input (cache miss)`,tokenHit:`Input (cache hit)`,tokenOutput:`Output`,tokenViewStructure:`Structure`,tokenViewModel:`By model`,tokenHitShort:`Hit`,tokenMissShort:`Miss`,tokenTotal:`Total tokens`,tokenShare:`Share`,usageStatsTool:`Inject usage-stats tool`,usageStatsToolHint:`Lets the model query usage/cost inside a conversation; it consumes context per request, so keep it off for coding (takes effect after a reload)`,balanceGranted:`Granted`,balanceTopped:`Topped up`,balanceDaily:`Daily burn`,balanceDaysLong:`~days left`,balanceDaysUnit:`days`,popTodayModel:`Main model balance`,popTitle:`Usage overview`,popNoConsumption:`No usage yet`,popDirectLead:`Direct`,popSubLead:`Subscription`,unpricedHint:`{count} models not priced; their cost counts as 0`,searchEstimateHint:`Includes estimated cost of {count} web-search requests (~{each} each; no usage events logged, per-call estimate; tune via searchCallEstimateCny)`,siteListDisplay:`Relay lists`,siteListDisplayHint:`Hide "unidentified" placeholder rows in the relay quota list`,liveCostBar:`Live cost capsule`,liveCostBarHint:`Live cost bar beside the composer; hover for details`,liveCostBarPosition:`Position`,liveCostBarPosBelow:`Below composer`,liveCostBarPosAbove:`Above composer`,liveCostBarPosToolbar:`Inside composer`,exportCsvSite:`By site CSV`,panelRelayQuota:`Relay quotas`,relayBalance:`Balance`,relayNoQuota:`No quota`,relayWindowUsed:`used`,relayKindNewApi:`New API`,relayKindSub2Api:`Sub2API`,relayKindUnknown:`Unknown`},De={"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`},commandcode:{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`}},Oe={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 I(e){return e===``?e:Oe[e]??e}function ke(e){let t=De[I(e)];return t?.type===`code`?t.tier:void 0}let Ae=[{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}],je,L,Me,R,Ne,z;function B(e){let t=/:\/\//.test(e)?e:`https://${e}`;try{return new URL(t).origin}catch{return e.trim().toLowerCase().replace(/\/+$/,``)}}function V(e,t){return B(e)===B(t)}function Pe(e){z=e.length>0?e:void 0}function Fe(){return z}function Ie(e){return mt(e)}function Le(e,t){let n=Re(e,t);if(n!==void 0)return{input:n.input,cacheHit:n.cacheHit,output:n.output,...n.currency===void 0?{}:{currency:n.currency},...n.offPeak===void 0?{}:{offPeak:n.offPeak}}}function Re(e,t){if(z===void 0)return;let n=Ie(e),r=G(n),i=e=>Ie(e.key)===n||G(e.key)===r;if(t!==void 0){for(let e of z)if(e.origin!==void 0&&e.origin!==``&&i(e)&&V(e.origin,t))return e}for(let e of z)if((e.origin===void 0||e.origin===``)&&i(e))return e}function ze(e){if(z===void 0)return;let t=Ie(e),n=G(t);return z.find(e=>e.origin!==void 0&&e.origin!==``&&(Ie(e.key)===t||G(e.key)===n))}function Be(e){je=typeof e.rate==`number`&&Number.isFinite(e.rate)&&e.rate>0?e.rate:void 0,L=typeof e.rateEur==`number`&&Number.isFinite(e.rateEur)&&e.rateEur>0?e.rateEur:void 0,Me=e.prices,R=e.extraModels}function Ve(e){Ne=e}function He(){return je??6.79}function Ue(){return L??7.71}function We(){return{rate:He(),live:je!==void 0}}function Ge(){return{rate:Ue(),live:L!==void 0}}let H=.5;function Ke(e){return e==null||!Number.isFinite(e)?`peak`:U(e,Xe,!0)}function U(e,t,n=!1){if(qe(e)||n&&Ye(e))return`offPeak`;let r=Math.floor(Qe(e)/6e4);for(let e=0;e+1<t.length;e+=2){let n=t[e]??0,i=t[e+1]??0;if(r>=n&&r<i)return`peak`}return`offPeak`}function qe(e){let t=new Date(e+288e5).getUTCDay();return t===0||t===6}function Je(e){return new Date(e+288e5).toISOString().slice(0,10).replace(/-/g,``)}function Ye(e){return`20260925 20260926 20260927 20261001 20261002 20261003 20261004 20261005 20261006 20261007`.includes(Je(e))}let Xe=[540,720,840,1080],Ze=[840,1080];function Qe(e){return((e+288e5)%864e5+864e5)%864e5}function $e(e,t,n=!1){let r=U(e,t,n),i=Qe(e);for(let a=0;a<10;a++){let o=a*864e5-i;for(let i of t){let a=o+i*6e4;if(!(a<=0)&&U(e+a,t,n)!==r)return{tier:r,nextSwitchInMs:a}}}let a=t[0]??0;return{tier:r,nextSwitchInMs:864e5-i+a*6e4}}function et(e,t,n,r=!1){let{nextSwitchInMs:i}=$e(e,t,r);if(i>n)return null;let a=e+i;return{entering:U(a,t,r),atMs:a}}function tt(e,t){if(e===void 0||e===``)return`none`;let n=mt(e),r=W().find(e=>e.key===n)?.provider;return r===`DeepSeek`?`deepseek-metered`:t&&r===`智谱 AI`?`zhipu-coding-plan`:`none`}function nt(e,t){switch(t){case`deepseek-metered`:return $e(e,Xe,!0);case`zhipu-coding-plan`:return $e(e,Ze);case`none`:return null}}function rt(e,t,n){switch(t){case`deepseek-metered`:return et(e,Xe,n,!0);case`zhipu-coding-plan`:return et(e,Ze,n);case`none`:return null}}function it(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 at=[],ot={};function st(e,t){at=e,ot=t,ut=void 0}function W(){return at}function ct(){return ot}let lt={key:`other`,name:`其他模型`,provider:`Custom`,colorVar:`dsw-static-neutral-bluish-500`,price:{currency:`CNY`,input:0,cacheHit:0,cacheMiss:0,output:0}};function G(e){return String(e).toLowerCase().replace(/\([^)]*\)/g,``).replace(/[^a-z0-9]+/g,``)}let ut;function dt(){if(ut!==void 0)return ut;let e=new Map,t=(t,n)=>{let r=G(t);r!==``&&!e.has(r)&&e.set(r,n)};for(let e of at)t(e.key,e.key);for(let[e,n]of Object.entries(ot))t(e,n);for(let e of Ae)t(e.key,e.key);return ut=e,e}function ft(e){let t=[],n=e=>{e!==``&&!t.includes(e)&&t.push(e)},r=e=>{let t=e;for(;;){let e=t.replace(/[-_]\d{3,}$/u,``);if(e===t||e===``)return;t=e,n(t)}},i=e.lastIndexOf(`/`);if(i>0&&i<e.length-1){let t=e.slice(i+1);n(t),r(t)}return r(e),t}function pt(e){let t=ct()[e];if(t!==void 0)return t;let n=G(e);if(n===``)return;let r=dt().get(n);return r===void 0?(R??[]).find(e=>G(e.key)===n)?.key:r}function mt(e){let t=ct()[e]??e;if(t===e){let t=G(e);if(t!==``){let e=dt().get(t);if(e!==void 0)return e;let n=(R??[]).find(e=>G(e.key)===t);if(n!==void 0)return n.key}for(let t of ft(e)){let e=pt(t);if(e!==void 0)return e}}return t}function ht(e){let t=mt(e),n=Me?.[t];if(n!==void 0)return n;let r=Ae.find(e=>e.key.toLowerCase()===t.toLowerCase());if(r!==void 0)return{input:r.input,cacheHit:r.cacheHit,output:r.output}}function gt(e){let t=mt(e),n=W().find(e=>e.key===t),r=R?.find(e=>e.key===t),i=n??(r===void 0?W().at(-1)??lt:_t(r)),a=Le(t);if(a!==void 0)return{...i,userPriced:!0,price:{currency:a.currency??`CNY`,input:a.input,cacheHit:a.cacheHit,output:a.output,...a.offPeak===void 0?{}:{offPeak:a.offPeak}}};let o=ht(t);return o===void 0?i:{...i,price:{currency:`USD`,input:o.input,cacheHit:o.cacheHit,output:o.output}}}function _t(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 vt(e,t){let n=e.endsAtMs!==void 0&&t>=e.endsAtMs;return Number.isFinite(t)&&!n&&e.factor>0&&e.factor<1}function yt(e,t){let{promo:n}=e;if(n===void 0||!vt(n,t))return e;let r=e=>n.factors?.[e]??n.factor,i=e=>({input:e.input*r(`input`),cacheHit:e.cacheHit*r(`cacheHit`),...e.cacheMiss===void 0?{}:{cacheMiss:e.cacheMiss*r(`cacheMiss`)},output:e.output*r(`output`)});return{...e,price:{...i(e.price),currency:e.price.currency,...e.price.offPeak===void 0?{}:{offPeak:i(e.price.offPeak)}}}}function bt(e=Date.now()){let t=[...W().filter(e=>e.retired!==!0).map(t=>yt(t,e))],n=new Set(t.map(e=>e.key.toLowerCase())),r=new Set(t.map(e=>G(e.key)));for(let e of Ne??[]){let i=e.id.toLowerCase();if((()=>{let t=mt(e.id);return W().find(e=>e.key===t)})()!==void 0)continue;let a=G(e.id);if(n.has(i)||a!==``&&r.has(a))continue;let o=(R??[]).find(e=>G(e.key)===a),s;if(o!==void 0)s=_t(o),e.name!==void 0&&e.name!==``&&(s={...s,name:e.name});else{let t=ht(i);s=t===void 0?{key:mt(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=Le(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 xt(e){let t=getComputedStyle(document.documentElement).getPropertyValue(`--${e}`).trim();return t===``?`#8b95a3`:t}function St(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*He():a}function Ct(e,t,n=H,r=Date.now()){let i=yt(e,r),a=St(i.price,t,i.price.currency),o=i.price.offPeak===void 0?a:St(i.price.offPeak,t,i.price.currency);return a*n+o*(1-n)}function wt(e){let t=He();return t>0?e/t:e}function Tt(e,t){if(t===`usd`)return wt(e);if(t===`eur`){let t=Ue();return t>0?e/t:e}return e}function K(e,t=`cny`){let n=Number(e),r=t===`usd`?`$`:t===`eur`?`€`:`¥`;return!Number.isFinite(n)||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 Et(e,t=`CNY`){return`${t===`USD`?`$`:t===`EUR`?`€`:`¥`}${e.toFixed(e>=10?1:2)}`}function Dt(e,t,n,r){if(r<=0||!Number.isFinite(r))return e;let i=t===`USD`?e*r:e;if(n===`cny`)return i;if(n===`usd`)return i/r;let a=Ge().rate;return a>0?i/a:i}function q(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 Ot(e){let t=Number(e);return Number.isFinite(t)?`${t.toFixed(1)}%`:`0.0%`}let J={top:18,right:40,bottom:26,left:46};function Y(e){let[,t,n]=e.split(`-`);return`${Number(t)}/${Number(n)}`}function kt(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(Math.round(e))}function At(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 jt={key:`__total__`,name:``,color:``};function Mt({data:e,models:t=[],currency:n=`cny`,metric:r=`cost`,t:i}){let a=i??(e=>Te[e]),[o,s]=(0,d.useState)(null),c=e=>K(Tt(e,n),n),l=e=>r===`tokens`?kt(e):c(e),u=e=>r===`tokens`?e.tokens??0:e.cost,f=(0,d.useMemo)(()=>{let n=e.length;if(n===0)return null;let i=680-J.left-J.right,o=220-J.top-J.bottom,s=e=>n===1?J.left+i/2:J.left+i*e/(n-1),c=Math.max(...r===`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),l=e=>J.top+o-e/c*o,d=Math.max(...e.map(e=>e.calls),1),f=e=>J.top+o-e/d*o,p=i/n,m=Math.min(18,p*.6);return{n,plotW:i,plotH:o,inner:s,yCost:l,yCalls:f,barW:m,bars:e.flatMap((e,n)=>{let i=s(n)-m/2;if(t.length===0||r===`tokens`)return[{date:e.date,model:{...jt,name:a(`trendTotal`)},x:i,base:0,value:u(e),topRounded:!0}];let o=null;for(let n of t)(e.byModel?.[n.key]??0)>0&&(o=n.key);let c=0;return t.map(t=>{let n=e.byModel?.[t.key]??0,r={date:e.date,model:t,x:i,base:c,value:n,topRounded:t.key===o};return c+=n,r})}),costTicks:[0,.25,.5,.75,1].map(e=>c*e).reverse(),callsTicks:[0,.25,.5,.75,1].map(e=>d*e).reverse(),linePath:e.map((e,t)=>{let n=f(e.calls);return`${t===0?`M`:`L`}${s(t)} ${n}`}).join(` `)}},[e,t,r]);if(f===null)return(0,m.jsx)(`div`,{className:F.chartEmpty,children:a(`trendEmpty`)});let{n:p,plotW:h,plotH:g,inner:_,yCost:v,yCalls:y,barW:b,bars:x,costTicks:S,callsTicks:C,linePath:w}=f,T=o===null?void 0:e[o],ee=At(p,Math.max(1,Math.ceil(p/8)));return(0,m.jsxs)(`div`,{className:F.chartWrap,children:[(0,m.jsxs)(`svg`,{viewBox:`0 0 680 220`,className:F.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-J.left)/h,r=Math.round(n*(p-1));s(Math.min(Math.max(r,0),p-1))},children:[S.map((e,t)=>{let n=v(e);return(0,m.jsxs)(`g`,{children:[(0,m.jsx)(`line`,{x1:J.left,x2:680-J.right,y1:n,y2:n,className:F.chartGrid}),(0,m.jsx)(`text`,{x:J.left-8,y:n+3,textAnchor:`end`,className:F.chartAxisLabel,children:l(e)})]},`cost-${t}`)}),x.map(t=>{if(t.value>0)return(0,m.jsx)(`rect`,{x:t.x,y:v(t.base+t.value),width:b,height:v(t.base)-v(t.base+t.value),rx:t.topRounded?2:0,className:t.model.color===``?F.chartBar:F.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,m.jsx)(`rect`,{x:t.x,y:v(0)-1,width:b,height:1,rx:0,className:F.chartBarPlaceholder},`${t.date}-${t.model.key}-placeholder`):null}),(0,m.jsx)(`path`,{d:w,fill:`none`,className:F.chartLine}),C.map((e,t)=>{let n=y(e);return(0,m.jsx)(`text`,{x:680-J.right+8,y:n+3,textAnchor:`start`,className:F.chartAxisLabel,children:kt(e)},`calls-${t}`)}),ee.map(t=>{let n=e[t];return n===void 0?null:(0,m.jsx)(`text`,{x:_(t),y:214,textAnchor:`middle`,className:F.chartAxisLabel,children:Y(n.date)},n.date)}),o!==null&&(0,m.jsx)(`line`,{x1:_(o),x2:_(o),y1:J.top,y2:J.top+g,className:F.chartCrosshair})]}),T!==void 0&&o!==null&&(0,m.jsxs)(`div`,{className:F.chartTooltip,style:{left:`${_(o)/680*100}%`,top:`${v(T.cost)/220*100}%`},children:[(0,m.jsx)(`div`,{className:F.chartTooltipDate,children:T.date}),r!==`tokens`&&t.filter(e=>(T.byModel?.[e.key]??0)>0).map(e=>(0,m.jsxs)(`div`,{className:F.chartTooltipRow,children:[(0,m.jsx)(`span`,{className:F.chartTooltipSwatch,style:{background:e.color}}),e.name,` `,(0,m.jsx)(`strong`,{children:c(T.byModel?.[e.key]??0)})]},e.key)),(0,m.jsxs)(`div`,{className:F.chartTooltipRow,children:[(0,m.jsx)(`span`,{className:F.chartLegendBar}),a(`trendTotal`),` `,(0,m.jsx)(`strong`,{children:r===`tokens`?kt(T.tokens??0):c(T.cost)})]}),(0,m.jsxs)(`div`,{className:F.chartTooltipRow,children:[(0,m.jsx)(`span`,{className:F.chartLegendLine}),a(`calls`),` `,(0,m.jsx)(`strong`,{children:T.calls.toLocaleString()})]})]}),t.length>0&&r!==`tokens`&&(0,m.jsxs)(`div`,{className:F.chartLegend,children:[t.map(e=>(0,m.jsxs)(`span`,{children:[(0,m.jsx)(`span`,{className:F.chartTooltipSwatch,style:{background:e.color}}),e.name]},e.key)),(0,m.jsxs)(`span`,{children:[(0,m.jsx)(`span`,{className:F.chartLegendLine}),a(`calls`)]})]})]})}let X={top:14,right:42,bottom:22,left:46};function Nt(e){return e.slice(5,13).replace(`T`,` `)}function Pt(e){return String(e>=100?Math.round(e):Number(e.toFixed(1)))}function Ft(e){return e<1e4?`${Math.round(e)} ms`:e<6e4?`${(e/1e3).toFixed(1)} s`:`${(e/6e4).toFixed(1)} min`}function It(e){return e>=1e3?`${(e/1e3).toFixed(1)}k`:e.toFixed(1)}function Lt(e,t,n){return t===`ttft`?`${Math.round(e)} ms`:`${e.toFixed(1)} ${n(`perfTpsUnit`)}`}function Rt({perf:e,models:t,t:n}){let[r,i]=(0,d.useState)(()=>xe()),[a,o]=(0,d.useState)(null),s=e=>{i(e),Se(e)},c=e=>t.find(t=>t.key===e)?.color??`#8b95a3`,l=(0,d.useMemo)(()=>e===void 0?[]:Object.entries(e.byModel).map(([e,n])=>({key:e,name:t.find(t=>t.key===e)?.name??e,color:c(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]),u=(0,d.useMemo)(()=>{if(e===void 0)return[];if(r.models!==void 0){let t=new Set(Object.keys(e.byModel));return r.models.filter(e=>t.has(e))}return l.slice(0,5).map(e=>e.key)},[e,l,r.models]),f=(0,d.useMemo)(()=>{if(e===void 0)return null;let t=Object.keys(e.byHourModel).sort().slice(-48);if(t.length===0)return null;let n=t.length,i=680-X.left-X.right,a=180-X.top-X.bottom,o=e=>n===1?X.left+i/2:X.left+i*e/(n-1),s=new Set(u),c=e=>r.metric===`ttft`?e?.ttftAvg:e?.tpsAvg,d=[],f=0;for(let r of l){if(!s.has(r.key))continue;let i=[];for(let a=0;a<n;a++){let n=t[a];if(n===void 0)continue;let s=c(e.byHourModel[n]?.[r.key]);s===void 0||!Number.isFinite(s)||(i.push({i:a,x:o(a),y:0,v:s}),s>f&&(f=s))}d.push({key:r.key,name:r.name,color:r.color,segments:[],points:i})}let p=d.reduce((e,t)=>e+t.points.length,0);f=Math.max(f,1);let m=e=>X.top+a-e/f*a;for(let e of d){let t=``,n=-2;for(let r of e.points)r.y=m(r.v),t!==``&&r.i!==n+1&&(e.segments.push(t),t=``),t+=`${t===``?`M`:`L`}${r.x} ${r.y} `,n=r.i;t!==``&&e.segments.push(t)}let h=Math.max(1,Math.ceil(n/8)),g=[];for(let e=0;e<n;e+=h)g.push(e);return g[g.length-1]!==n-1&&g.push(n-1),{hourKeys:t,n,plotW:i,plotH:a,inner:o,yOf:m,series:d,ticks:[0,.5,1].map(e=>f*e).reverse(),xTicks:g,totalPoints:p}},[e,l,u,r.metric]);if(e===void 0||l.length===0)return(0,m.jsx)(`div`,{className:F.chartEmpty,"data-testid":`billing-perf-empty`,children:n(`perfEmpty`)});let p=e=>{let t=u.includes(e)?u.filter(t=>t!==e):[...u,e];s({metric:r.metric,models:t})},h=e=>{s({metric:e,...r.models===void 0?{}:{models:r.models}})},g=a===null||f===null?[]:f.series.flatMap(e=>{let t=e.points.find(e=>e.i===a);return t===void 0?[]:[{key:e.key,name:e.name,color:e.color,v:t.v}]});return(0,m.jsxs)(`div`,{"data-testid":`billing-perf-panel`,children:[(0,m.jsx)(`div`,{className:F.tableScroll,"data-testid":`billing-perf-table`,children:(0,m.jsxs)(`table`,{className:F.modelTable,children:[(0,m.jsx)(`thead`,{children:(0,m.jsxs)(`tr`,{children:[(0,m.jsx)(`th`,{children:n(`model`)}),(0,m.jsx)(`th`,{className:F.numCol,children:n(`perfSamples`)}),(0,m.jsx)(`th`,{className:F.numCol,children:n(`perfTtft`)}),(0,m.jsx)(`th`,{className:F.numCol,children:n(`perfP50`)}),(0,m.jsx)(`th`,{className:F.numCol,children:n(`perfP90`)}),(0,m.jsx)(`th`,{className:F.numCol,children:n(`perfMax`)}),(0,m.jsx)(`th`,{className:F.numCol,children:n(`perfTps`)}),(0,m.jsx)(`th`,{className:F.numCol,children:n(`perfLatency`)}),(0,m.jsx)(`th`,{className:F.numCol,children:n(`perfEstimated`)})]})}),(0,m.jsx)(`tbody`,{children:l.map(e=>(0,m.jsxs)(`tr`,{children:[(0,m.jsx)(`td`,{children:(0,m.jsxs)(`span`,{className:F.modelCell,children:[(0,m.jsx)(`span`,{className:F.modelDot,style:{background:e.color}}),(0,m.jsx)(`span`,{className:F.modelName,children:e.name})]})}),(0,m.jsx)(`td`,{className:F.numCol,children:e.samples.toLocaleString()}),(0,m.jsx)(`td`,{className:F.numCol,children:Ft(e.ttftAvg)}),(0,m.jsx)(`td`,{className:F.numCol,children:Ft(e.ttftP50)}),(0,m.jsx)(`td`,{className:F.numCol,children:Ft(e.ttftP90)}),(0,m.jsx)(`td`,{className:F.numCol,children:e.ttftMax===void 0?(0,m.jsx)(`span`,{className:F.na,children:`—`}):(0,m.jsxs)(`span`,{children:[Ft(e.ttftMax),e.ttftSpikes!==void 0&&e.ttftSpikes>0?` (${e.ttftSpikes}↑)`:``]})}),(0,m.jsx)(`td`,{className:F.numCol,children:e.tpsAvg===void 0?(0,m.jsx)(`span`,{className:F.na,children:`—`}):It(e.tpsAvg)}),(0,m.jsx)(`td`,{className:F.numCol,children:Ft(e.latencyAvg)}),(0,m.jsx)(`td`,{className:F.numCol,children:e.estimatedSamples>0?e.estimatedSamples:(0,m.jsx)(`span`,{className:F.na,children:`—`})})]},e.key))})]})}),f!==null&&(0,m.jsxs)(`div`,{"data-testid":`billing-perf-hour`,children:[(0,m.jsx)(`div`,{className:F.perfBar,children:(0,m.jsx)(`span`,{className:F.rangeToggle,role:`group`,"aria-label":n(`perfTitle`),children:[`ttft`,`tps`].map(e=>(0,m.jsx)(`button`,{type:`button`,className:y(F.rangeButton,r.metric===e&&F.rangeButtonActive),"aria-pressed":r.metric===e,"data-testid":`billing-perf-tab-${e}`,onClick:()=>{h(e)},children:e===`ttft`?`${n(`perfTtft`)} (ms)`:`${n(`perfTps`)} (${n(`perfTpsUnit`)})`},e))})}),(0,m.jsxs)(`div`,{className:F.perfChips,role:`group`,"aria-label":n(`model`),children:[(0,m.jsx)(`button`,{type:`button`,className:F.perfChip,"data-testid":`billing-perf-chip-all`,onClick:()=>{s({metric:r.metric,models:l.map(e=>e.key)})},children:n(`perfAll`)}),l.map(e=>{let t=u.includes(e.key);return(0,m.jsxs)(`button`,{type:`button`,className:y(F.perfChip,!t&&F.perfChipOff),style:t?{color:e.color,borderColor:`color-mix(in srgb, ${e.color} 45%, transparent)`}:void 0,"aria-pressed":t,"data-testid":`billing-perf-chip-${e.key}`,onClick:()=>{p(e.key)},children:[(0,m.jsx)(`span`,{className:F.perfChipDot,style:{background:t?e.color:`var(--dsw-alias-label-dimmed)`}}),e.name]},e.key)})]}),f.totalPoints>0?(0,m.jsxs)(`div`,{className:F.chartWrap,children:[(0,m.jsxs)(`svg`,{viewBox:`0 0 680 180`,className:F.chartSvg,role:`img`,"aria-label":`Hourly perf comparison by model`,onMouseLeave:()=>{o(null)},onMouseMove:e=>{let t=e.currentTarget.getBoundingClientRect(),n=((e.clientX-t.left)/t.width*680-X.left)/f.plotW,r=Math.round(n*(f.n-1));o(Math.min(Math.max(r,0),f.n-1))},children:[f.ticks.map((e,t)=>{let n=f.yOf(e);return(0,m.jsxs)(`g`,{children:[(0,m.jsx)(`line`,{x1:X.left,x2:680-X.right,y1:n,y2:n,className:F.chartGrid}),(0,m.jsx)(`text`,{x:X.left-8,y:n+3,textAnchor:`end`,className:F.chartAxisLabel,children:Pt(e)})]},`tick-${t}`)}),f.series.map(e=>e.segments.map((t,n)=>(0,m.jsx)(`path`,{d:t,fill:`none`,className:F.chartLine,style:{stroke:e.color}},`${e.key}-${n}`))),f.xTicks.map(e=>{let t=f.hourKeys[e];return t===void 0?null:(0,m.jsx)(`text`,{x:f.inner(e),y:174,textAnchor:`middle`,className:F.chartAxisLabel,children:Nt(t)},t)}),a!==null&&(0,m.jsx)(`line`,{x1:f.inner(a),x2:f.inner(a),y1:X.top,y2:X.top+f.plotH,className:F.chartCrosshair}),a!==null&&f.series.map(e=>{let t=e.points.find(e=>e.i===a);return t===void 0?null:(0,m.jsx)(`circle`,{cx:t.x,cy:t.y,r:3.5,fill:e.color,className:F.chartHoverDot},`${e.key}-dot`)})]}),a!==null&&g.length>0&&(0,m.jsxs)(`div`,{className:F.chartTooltip,"data-testid":`billing-perf-tooltip`,style:{left:`${f.inner(a)/680*100}%`,top:`${(X.top+f.plotH/2)/180*100}%`},children:[(0,m.jsx)(`div`,{className:F.chartTooltipDate,children:Nt(f.hourKeys[a]??``)}),g.map(e=>(0,m.jsxs)(`div`,{className:F.chartTooltipRow,children:[(0,m.jsx)(`span`,{className:F.chartTooltipSwatch,style:{background:e.color}}),e.name,` `,(0,m.jsx)(`strong`,{children:Lt(e.v,r.metric,n)})]},e.key))]})]}):(0,m.jsx)(`div`,{className:F.chartEmpty,"data-testid":`billing-perf-chart-empty`,children:n(`perfChartEmpty`)})]}),f===null&&(0,m.jsx)(`div`,{className:F.chartEmpty,"data-testid":`billing-perf-chart-empty`,children:n(`perfChartEmpty`)})]})}let zt=`@kenz1117/dsh-ui-usage-billing`,Bt=`kenz1117`;function Vt({t:e,version:t}){return(0,m.jsxs)(`section`,{className:F.setCard,"data-testid":`billing-plugin-info`,children:[(0,m.jsxs)(`div`,{className:F.plgHead,children:[(0,m.jsx)(`span`,{className:F.plgIcon,"aria-hidden":`true`,children:(0,m.jsx)(`svg`,{width:`20`,height:`20`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,m.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,m.jsxs)(`div`,{className:F.plgTitle,children:[(0,m.jsxs)(`div`,{className:F.plgNameRow,children:[(0,m.jsx)(`h3`,{className:F.plgName,children:zt}),(0,m.jsx)(`span`,{className:F.plgTag,children:t===void 0?`—`:`v${t}`})]}),(0,m.jsx)(`p`,{className:F.plgDesc,children:`Usage billing dashboard for DeepSeek Harness`})]})]}),(0,m.jsxs)(`div`,{className:F.plgGrid,children:[(0,m.jsxs)(`div`,{className:F.plgItem,children:[(0,m.jsx)(`span`,{className:F.plgLabel,children:e(`pluginAuthor`)}),(0,m.jsxs)(`a`,{className:F.plgLink,href:`https://github.com/${Bt}`,target:`_blank`,rel:`noreferrer`,children:[`KenZ`,` (`,Bt,`)`]})]}),(0,m.jsxs)(`div`,{className:F.plgItem,children:[(0,m.jsx)(`span`,{className:F.plgLabel,children:e(`pluginRepository`)}),(0,m.jsx)(`a`,{className:F.plgLink,href:`https://github.com/kenz1117/dsh-ui-usage-billing`,target:`_blank`,rel:`noreferrer`,children:`GitHub`})]}),(0,m.jsxs)(`div`,{className:F.plgItem,children:[(0,m.jsx)(`span`,{className:F.plgLabel,children:e(`pluginNpm`)}),(0,m.jsx)(`a`,{className:F.plgLink,href:`https://www.npmjs.com/package/@kenz1117/dsh-ui-usage-billing`,target:`_blank`,rel:`noreferrer`,children:zt})]}),(0,m.jsxs)(`div`,{className:F.plgItem,children:[(0,m.jsx)(`span`,{className:F.plgLabel,children:e(`pluginLicense`)}),(0,m.jsx)(`span`,{className:F.plgVal,children:`MIT`})]})]})]})}function Ht(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 Ut(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(Math.round(e))}let Z={top:14,right:18,bottom:22,left:46},Wt=`var(--ds-blue)`,Gt=`var(--ds-cyan)`,Kt=`var(--ds-amber)`;function qt(e,t,n,r){return JSON.stringify({days:e,models:t,dayModels:n,total:r},null,2)}function Jt(e){let{stats:t,trendDays:n,onTrendDays:r,t:i}=e,a=e.money,o=e.models??[],{byDay:s,byModel:c,total:l}=t,[u,f]=(0,d.useState)(null),[p,h]=(0,d.useState)(`structure`),[g,_]=(0,d.useState)(null),v=t.byDayModels!==void 0,b=e=>{h(e),_(null)},x=(0,d.useMemo)(()=>{let e=t.byRole;if(e===void 0)return[];let n=e.user+e.assistant+e.tool;return n<=0?[]:[{label:i(`roleUser`),value:e.user,seg:F.shareSegUser},{label:i(`roleAssistant`),value:e.assistant,seg:F.shareSegAssistant},{label:i(`roleTool`),value:e.tool,seg:F.shareSegTool}].map(e=>({...e,pct:e.value/n*100}))},[t.byRole,i]),S=(0,d.useMemo)(()=>{let e=[];for(let t=n-1;t>=0;--t){let n=new Date;n.setDate(n.getDate()-t);let r=Ht(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]),C=(0,d.useMemo)(()=>{let e=[];for(let r=n-1;r>=0;--r){let n=new Date;n.setDate(n.getDate()-r);let i=Ht(n.getTime()),a=t.byDayModels?.[i],o={},s=0;if(a!==void 0)for(let[e,t]of Object.entries(a)){let n=t.cacheHit??0,r=t.cacheMiss??0,i=t.output??0,a=n+r+i;a<=0||(o[e]={hit:n,miss:r,output:i,total:a},s+=a)}e.push({date:i,models:o,total:s})}return e},[t.byDayModels,n]),w=(0,d.useMemo)(()=>{let e=new Map;for(let t of C)for(let[n,r]of Object.entries(t.models))e.set(n,(e.get(n)??0)+r.total);return[...e.entries()].sort((e,t)=>t[1]-e[1]).map(([e])=>({key:e,name:o.find(t=>t.key===e)?.name??gt(e).name,color:o.find(t=>t.key===e)?.color??`#8b95a3`}))},[C,o]),T=g!==null&&w.some(e=>e.key===g)?g:null,ee=e=>{if(v){if(p!==`model`){h(`model`),_(e);return}_(t=>t===e?null:e)}},E=(0,d.useMemo)(()=>{let e=0;return Object.entries(c).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:gt(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}))},[c]),D=(0,d.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]),O=(0,d.useMemo)(()=>{let e=S.length;if(e===0)return null;let t=680-Z.left-Z.right,n=200-Z.top-Z.bottom,r=Math.max(...p===`model`?C.map(e=>e.total):S.map(e=>e.miss+e.hit+e.output),1),i=e=>Z.top+n-e/r*n,a=t/e,o=Math.min(20,a*.6),s=n=>e===1?Z.left+t/2:Z.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,groupW:a}},[S,C,p]),te=()=>{let e=new Blob([Yt(S)],{type:`text/csv`}),t=document.createElement(`a`);t.href=URL.createObjectURL(e),t.download=`token-daily-${Ht()}.csv`,t.click(),setTimeout(()=>URL.revokeObjectURL(t.href),0)},k=()=>{let e=new Blob([qt(S,E,C,l)],{type:`application/json`}),t=document.createElement(`a`);t.href=URL.createObjectURL(e),t.download=`token-${Ht()}.json`,t.click(),setTimeout(()=>URL.revokeObjectURL(t.href),0)},A=u===null?void 0:S[u],j=u===null?void 0:C[u],ne=O===null?0:Math.ceil(80/Math.max(O.groupW,1)),M=u===null||O===null?void 0:u>=O.n-ne?F.chartTooltipAlignRight:u<ne?F.chartTooltipAlignLeft:void 0;return(0,m.jsxs)(`div`,{className:F.tokenPanel,"data-testid":`billing-token-panel`,children:[(0,m.jsxs)(`div`,{className:F.exportBar,role:`group`,"aria-label":i(`tokenExport`),children:[(0,m.jsx)(`span`,{className:F.exportLabel,children:i(`export`)}),(0,m.jsx)(`button`,{type:`button`,className:F.exportButton,"data-testid":`billing-token-export-csv`,onClick:te,children:i(`tokenExportCsv`)}),(0,m.jsx)(`button`,{type:`button`,className:F.exportButton,"data-testid":`billing-token-export-json`,onClick:k,children:i(`exportJson`)})]}),(0,m.jsxs)(`section`,{className:F.panel,"data-testid":`billing-token-daily`,children:[(0,m.jsxs)(`div`,{className:F.panelHead,children:[(0,m.jsx)(`h3`,{className:F.panelTitle,children:i(`tokenDaily`)}),(0,m.jsxs)(`span`,{className:F.panelHeadControls,children:[v&&(0,m.jsx)(`span`,{className:F.rangeToggle,role:`group`,"aria-label":i(`tokenDaily`),children:[`structure`,`model`].map(e=>(0,m.jsx)(`button`,{type:`button`,className:y(F.rangeButton,p===e&&F.rangeButtonActive),"aria-pressed":p===e,onClick:()=>{b(e)},"data-testid":`billing-token-view-${e}`,children:i(e===`structure`?`tokenViewStructure`:`tokenViewModel`)},e))}),(0,m.jsx)(`span`,{className:F.rangeToggle,role:`group`,"aria-label":i(`tokenDaily`),children:[7,30].map(e=>(0,m.jsx)(`button`,{type:`button`,className:y(F.rangeButton,n===e&&F.rangeButtonActive),"aria-pressed":n===e,onClick:()=>{r(e)},"data-testid":`billing-token-${e}d`,children:i(e===7?`trend7d`:`trend30d`)},e))})]})]}),O===null||p===`model`&&w.length===0?(0,m.jsx)(`div`,{className:F.chartEmpty,children:i(`trendEmpty`)}):(0,m.jsxs)(`div`,{className:F.chartWrap,children:[(0,m.jsxs)(`svg`,{viewBox:`0 0 680 200`,className:F.chartSvg,role:`img`,"aria-label":i(`tokenDaily`),onMouseLeave:()=>{f(null)},onMouseMove:e=>{let t=e.currentTarget.getBoundingClientRect(),n=((e.clientX-t.left)/t.width*680-Z.left)/O.plotW,r=Math.round(n*(O.n-1));f(Math.min(Math.max(r,0),O.n-1))},children:[[0,.5,1].map(e=>{let t=O.max*e,n=O.y(t);return(0,m.jsxs)(`g`,{children:[(0,m.jsx)(`line`,{x1:Z.left,x2:680-Z.right,y1:n,y2:n,className:F.chartGrid}),(0,m.jsx)(`text`,{x:Z.left-8,y:n+3,textAnchor:`end`,className:F.chartAxisLabel,children:Ut(t)})]},e)}),p===`structure`?S.map((e,t)=>{let n=O.inner(t)-O.barW/2,r=O.y(0),i=O.y(e.miss),a=O.y(e.miss+e.hit),o=O.y(e.miss+e.hit+e.output);return(0,m.jsxs)(`g`,{children:[(0,m.jsx)(`rect`,{x:n,y:i,width:O.barW,height:r-i,fill:Wt}),(0,m.jsx)(`rect`,{x:n,y:a,width:O.barW,height:i-a,fill:Gt}),(0,m.jsx)(`rect`,{x:n,y:o,width:O.barW,height:a-o,fill:Kt})]},e.date)}):C.map((e,t)=>{let n=O.inner(t)-O.barW/2,r=0;return(0,m.jsx)(`g`,{children:w.map(t=>{let i=e.models[t.key];if(i===void 0)return null;let a=O.y(r);r+=i.total;let o=O.y(r),s=T!==null&&t.key!==T;return(0,m.jsx)(`rect`,{x:n,y:o,width:O.barW,height:a-o,fill:t.color,opacity:s?.15:1},t.key)})},e.date)}),O.indices.map(e=>{let t=S[e];return t===void 0?null:(0,m.jsx)(`text`,{x:O.inner(e),y:194,textAnchor:`middle`,className:F.chartAxisLabel,children:t.date.slice(5)},t.date)}),u!==null&&(0,m.jsx)(`line`,{x1:O.inner(u),x2:O.inner(u),y1:Z.top,y2:Z.top+O.plotH,className:F.chartCrosshair})]}),u!==null&&p===`structure`&&A!==void 0&&(0,m.jsxs)(`div`,{className:y(F.chartTooltip,M),"data-testid":`billing-token-tooltip`,style:{left:`${O.inner(u)/680*100}%`,top:`${O.y(A.miss+A.hit+A.output)/200*100}%`},children:[(0,m.jsxs)(`div`,{className:F.chartTooltipHead,children:[(0,m.jsx)(`span`,{className:F.chartTooltipDate,children:A.date}),(0,m.jsx)(`strong`,{children:(A.miss+A.hit+A.output).toLocaleString()})]}),(0,m.jsxs)(`div`,{className:y(F.chartTooltipRow,F.chartTooltipSplit),children:[(0,m.jsxs)(`span`,{className:F.chartTooltipLabel,children:[(0,m.jsx)(`span`,{className:F.chartTooltipSwatch,style:{background:Gt}}),i(`tokenHit`)]}),(0,m.jsx)(`strong`,{children:A.hit.toLocaleString()})]}),(0,m.jsxs)(`div`,{className:y(F.chartTooltipRow,F.chartTooltipSplit),children:[(0,m.jsxs)(`span`,{className:F.chartTooltipLabel,children:[(0,m.jsx)(`span`,{className:F.chartTooltipSwatch,style:{background:Wt}}),i(`tokenMiss`)]}),(0,m.jsx)(`strong`,{children:A.miss.toLocaleString()})]}),(0,m.jsxs)(`div`,{className:y(F.chartTooltipRow,F.chartTooltipSplit),children:[(0,m.jsxs)(`span`,{className:F.chartTooltipLabel,children:[(0,m.jsx)(`span`,{className:F.chartTooltipSwatch,style:{background:Kt}}),i(`tokenOutput`)]}),(0,m.jsx)(`strong`,{children:A.output.toLocaleString()})]})]}),u!==null&&p===`model`&&j!==void 0&&(0,m.jsxs)(`div`,{className:y(F.chartTooltip,M),"data-testid":`billing-token-tooltip`,style:{left:`${O.inner(u)/680*100}%`,top:`${O.y(j.total)/200*100}%`},children:[(0,m.jsxs)(`div`,{className:F.chartTooltipHead,children:[(0,m.jsx)(`span`,{className:F.chartTooltipDate,children:j.date}),(0,m.jsx)(`strong`,{children:j.total.toLocaleString()})]}),w.map(e=>{let t=j.models[e.key];return t===void 0?null:(0,m.jsxs)(`div`,{className:F.chartTooltipModel,children:[(0,m.jsxs)(`div`,{className:y(F.chartTooltipRow,F.chartTooltipSplit),children:[(0,m.jsxs)(`span`,{className:F.chartTooltipLabel,children:[(0,m.jsx)(`span`,{className:F.chartTooltipSwatch,style:{background:e.color}}),e.name]}),(0,m.jsx)(`strong`,{children:t.total.toLocaleString()})]}),(0,m.jsxs)(`div`,{className:F.chartTooltipModelDetail,children:[i(`tokenHitShort`),` `,t.hit.toLocaleString(),` · `,i(`tokenMissShort`),` `,t.miss.toLocaleString(),` · `,i(`tokenOutput`),` `,t.output.toLocaleString()]})]},e.key)})]}),(0,m.jsx)(`div`,{className:F.chartLegend,children:p===`structure`?(0,m.jsxs)(m.Fragment,{children:[(0,m.jsxs)(`span`,{children:[(0,m.jsx)(`span`,{className:F.chartTooltipSwatch,style:{background:Wt}}),i(`tokenMiss`)]}),(0,m.jsxs)(`span`,{children:[(0,m.jsx)(`span`,{className:F.chartTooltipSwatch,style:{background:Gt}}),i(`tokenHit`)]}),(0,m.jsxs)(`span`,{children:[(0,m.jsx)(`span`,{className:F.chartTooltipSwatch,style:{background:Kt}}),i(`tokenOutput`)]})]}):w.map(e=>(0,m.jsxs)(`button`,{type:`button`,className:y(F.chartLegendItem,T===e.key&&F.chartLegendItemActive),"aria-pressed":T===e.key,"data-testid":`billing-token-legend-${e.key}`,onClick:()=>{ee(e.key)},children:[(0,m.jsx)(`span`,{className:F.chartTooltipSwatch,style:{background:e.color}}),e.name]},e.key))})]})]}),(0,m.jsxs)(`section`,{className:F.panel,"data-testid":`billing-token-models`,children:[(0,m.jsx)(`div`,{className:F.panelHead,children:(0,m.jsx)(`h3`,{className:F.panelTitle,children:i(`tokenByModel`)})}),E.length===0?(0,m.jsx)(`div`,{className:F.emptyRow,children:i(`noData`)}):(0,m.jsx)(`div`,{className:F.tableScroll,children:(0,m.jsxs)(`table`,{className:F.modelTable,"data-testid":`billing-token-model-table`,children:[(0,m.jsx)(`thead`,{children:(0,m.jsxs)(`tr`,{children:[(0,m.jsx)(`th`,{children:i(`model`)}),(0,m.jsx)(`th`,{className:F.numCol,children:i(`inputTokens`)}),(0,m.jsx)(`th`,{className:F.numCol,children:i(`outputTokens`)}),(0,m.jsx)(`th`,{className:F.numCol,children:i(`tokenReasoningShort`)}),(0,m.jsx)(`th`,{className:F.numCol,children:i(`cacheHitRate`)}),(0,m.jsx)(`th`,{className:F.numCol,children:i(`tokenTotal`)}),(0,m.jsx)(`th`,{className:F.numCol,children:i(`tokenShare`)}),(0,m.jsx)(`th`,{className:F.numCol,children:i(`calls`)})]})}),(0,m.jsx)(`tbody`,{children:E.map(e=>(0,m.jsxs)(`tr`,{"data-testid":`billing-token-model`,className:y(v&&F.modelRowFocusable,T===e.key&&F.modelRowActive),"aria-selected":v?T===e.key:void 0,onClick:v?()=>{ee(e.key)}:void 0,children:[(0,m.jsx)(`td`,{children:(0,m.jsx)(`span`,{className:F.modelName,children:e.name})}),(0,m.jsx)(`td`,{className:F.numCol,children:q(e.input)}),(0,m.jsx)(`td`,{className:F.numCol,children:q(e.output)}),(0,m.jsx)(`td`,{className:F.numCol,children:e.reasoning>0?q(e.reasoning):(0,m.jsx)(`span`,{className:F.na,children:`—`})}),(0,m.jsxs)(`td`,{className:F.numCol,children:[e.cacheHitRate.toFixed(1),`%`]}),(0,m.jsx)(`td`,{className:F.numCol,children:q(e.total)}),(0,m.jsx)(`td`,{className:F.numCol,children:(0,m.jsxs)(`span`,{className:F.tokenModelShareRow,children:[(0,m.jsx)(`span`,{className:F.tokenModelBar,children:(0,m.jsxs)(`span`,{className:F.tokenModelParts,style:{width:`${(e.share*100).toFixed(2)}%`},children:[(0,m.jsx)(`span`,{className:F.tokenModelPartIn,style:{width:`${e.total>0?e.input/e.total*100:0}%`}}),(0,m.jsx)(`span`,{className:F.tokenModelPartOut,style:{width:`${e.total>0?e.output/e.total*100:0}%`}})]})}),(e.share*100).toFixed(1),`%`]})}),(0,m.jsx)(`td`,{className:F.numCol,children:e.calls.toLocaleString()})]},e.key))})]})})]}),D.totalCalls>0&&(0,m.jsxs)(`section`,{className:F.panel,"data-testid":`billing-token-tools`,children:[(0,m.jsx)(`div`,{className:F.panelHead,children:(0,m.jsx)(`h3`,{className:F.panelTitle,children:i(`toolRank`)})}),(0,m.jsx)(`div`,{className:F.tableScroll,children:(0,m.jsxs)(`table`,{className:F.modelTable,"data-testid":`billing-tool-table`,children:[(0,m.jsx)(`thead`,{children:(0,m.jsxs)(`tr`,{children:[(0,m.jsx)(`th`,{children:i(`toolName`)}),(0,m.jsx)(`th`,{className:F.numCol,children:i(`calls`)}),(0,m.jsx)(`th`,{className:F.numCol,children:i(`tokenShare`)})]})}),(0,m.jsx)(`tbody`,{children:[...D.top,...D.rest].map(([e,t])=>(0,m.jsxs)(`tr`,{"data-testid":`billing-tool-row`,children:[(0,m.jsx)(`td`,{children:(0,m.jsx)(`span`,{className:F.modelName,children:e})}),(0,m.jsx)(`td`,{className:F.numCol,children:t.toLocaleString()}),(0,m.jsxs)(`td`,{className:F.numCol,children:[(t/D.totalCalls*100).toFixed(1),`%`]})]},e))})]})})]}),x.length>0&&(0,m.jsxs)(`section`,{className:F.panel,"data-testid":`billing-panel-roles`,children:[(0,m.jsxs)(`div`,{className:F.panelHead,children:[(0,m.jsx)(`h3`,{className:F.panelTitle,children:i(`roleCost`)}),(0,m.jsx)(`span`,{className:F.panelHint,children:i(`roleHint`)})]}),(0,m.jsx)(`div`,{className:F.shareTrack,"data-testid":`billing-role-track`,children:x.map(e=>(0,m.jsx)(`div`,{className:y(F.shareSeg,e.seg),style:{width:`${e.pct}%`}},e.label))}),(0,m.jsx)(`div`,{className:F.shareLegend,children:x.map(e=>(0,m.jsxs)(`span`,{className:F.shareItem,children:[(0,m.jsx)(`span`,{className:y(F.shareDot,e.seg)}),e.label,(0,m.jsxs)(`span`,{className:F.shareValue,children:[a(e.value),` · `,e.pct.toFixed(1),`%`]})]},e.label))})]})]})}function Yt(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`});var r=Object.create,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.getPrototypeOf,c=Object.prototype.hasOwnProperty,l=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var s=o(t),l=0,u=s.length,d;l<u;l++)d=s[l],!c.call(e,d)&&d!==n&&i(e,d,{get:(e=>t[e]).bind(null,d),enumerable:!(r=a(t,d))||r.enumerable});return e},u=(e,t,n)=>(n=e==null?{}:r(s(e)),l(t||!e||!e.__esModule||!c.call(e,`default`)?i(n,`default`,{value:e,enumerable:!0}):n,e));let d=e("react"),f=e("react-dom"),p=e("@deepseek-ai/dsh-client-ui-primitives");p=u(p,1);let m=e("react/jsx-runtime"),h=e("@deepseek-ai/dsh-client-store");function g(e){return e}function _(e){return g(e)}function v(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=v(e[t]))&&(r&&(r+=` `),r+=n)}else for(n in e)e[n]&&(r&&(r+=` `),r+=n)}return r}function y(){for(var e,t,n=0,r=``,i=arguments.length;n<i;n++)(e=arguments[n])&&(t=v(e))&&(r&&(r+=` `),r+=t);return r}let b={mode:`combined`,targets:[]},x=`dsh.ui-usage-billing.float`;function S(){let e=()=>({...b,targets:[...b.targets]});try{let t=localStorage.getItem(x);if(t===null)return e();let n=JSON.parse(t);return{mode:n.mode===`subscription`?`subscription`:`combined`,targets:Array.isArray(n.targets)?n.targets.filter(e=>typeof e==`string`):[]}}catch{return e()}}function C(e){try{localStorage.setItem(x,JSON.stringify(e))}catch{}}let w={metric:`money`,span:`day`},T=`dsh.ui-usage-billing.card`;function ee(){try{let e=localStorage.getItem(T);if(e===null)return{...w};let t=JSON.parse(e);return{metric:t.metric===`tokens`?`tokens`:`money`,span:t.span===`week`||t.span===`month`?t.span:`day`}}catch{return{...w}}}function E(e){try{localStorage.setItem(T,JSON.stringify(e))}catch{}}let D=`dsh.ui-usage-billing.kpi-range`;function O(){try{let e=localStorage.getItem(D);return e===`today`||e===`7d`||e===`week`||e===`month`||e===`all`?e:`all`}catch{return`all`}}function te(e){try{localStorage.setItem(D,e)}catch{}}let k={hideUnidentified:!0},A=`dsh.ui-usage-billing.sites`;function j(){try{let e=localStorage.getItem(A);return e===null?{...k}:{hideUnidentified:JSON.parse(e).hideUnidentified!==!1}}catch{return{...k}}}function ne(e){try{localStorage.setItem(A,JSON.stringify(e))}catch{}}let M={show:!0,position:`toolbar`},re=`dsh.ui-usage-billing.livecost`,ie=`dsh.ui-usage-billing.livecost-pref`;function ae(){try{let e=localStorage.getItem(re);if(e===null)return{...M};let t=JSON.parse(e);return{show:t.show!==!1,position:t.position===`above`||t.position===`toolbar`||t.position===`below`?t.position:M.position}}catch{return{...M}}}function oe(e){try{localStorage.setItem(re,JSON.stringify(e))}catch{}}let N=`dsh.ui-usage-billing.currency`,se=`dsh.ui-usage-billing.currency-pref`;function P(){try{let e=localStorage.getItem(N);return e===`usd`||e===`cny`||e===`eur`?e:`cny`}catch{return`cny`}}function ce(e){try{localStorage.setItem(N,e)}catch{}}let le=`dsh.ui-usage-billing.pinned-pref`;function ue(){try{let e=JSON.parse(localStorage.getItem(`dsh.ui-usage-billing.pinned`)??`[]`);return Array.isArray(e)?e.filter(e=>typeof e==`string`&&e!==``):[]}catch{return[]}}function de(e){try{localStorage.setItem(`dsh.ui-usage-billing.pinned`,JSON.stringify(e))}catch{}}let fe=`dsh.ui-usage-billing.language`;function pe(){try{let e=localStorage.getItem(fe);if(e===`en`||e===`zh`)return e;let t=P()===`usd`?`en`:`zh`;return me(t),t}catch{return`zh`}}function me(e){try{localStorage.setItem(fe,e)}catch{}}function he(e){let t=ue(),n=t.includes(e)?t.filter(t=>t!==e):[...t,e];return de(n),n}let ge=`dsh.ui-usage-billing.prices`;function _e(){try{let e=localStorage.getItem(ge);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);if(![i,a,o].every(e=>Number.isFinite(e)&&e>=0))return;let s=r.offPeak,c;if(typeof s==`object`&&s){let e=s,t=Number(e.input),n=Number(e.cacheHit),r=Number(e.output);[t,n,r].every(e=>Number.isFinite(e)&&e>=0)&&(c={input:t,cacheHit:n,output:r})}n.push({key:e,...typeof r.origin==`string`&&r.origin!==``?{origin:r.origin}:{},input:i,cacheHit:a,output:o,...c===void 0?{}:{offPeak:c},...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 ve(e){try{localStorage.setItem(ge,JSON.stringify(e))}catch{}}let ye={metric:`ttft`},be=`dsh.ui-usage-billing.perf`;function xe(){try{let e=localStorage.getItem(be);if(e===null)return{...ye};let t=JSON.parse(e);return{metric:t.metric===`tps`?`tps`:`ttft`,...Array.isArray(t.models)?{models:t.models.filter(e=>typeof e==`string`)}:{}}}catch{return{...ye}}}function Se(e){try{localStorage.setItem(be,JSON.stringify(e))}catch{}}let Ce=`@kenz1117/dsh-ui-usage-billing/UsageBilling.module.css`;if(typeof document<`u`&&document.querySelector(`style[data-plugin-css=`+JSON.stringify(Ce)+`]`)===null){let e=document.createElement(`style`);e.dataset.plugin=`@kenz1117/dsh-ui-usage-billing`,e.dataset.pluginCss=Ce,e.textContent=`:root{--ds-blue:#4f8cff;--ds-cyan:#2dd4bf;--ds-green:#34d399;--ds-amber:#f59e0b;--ds-red:#ef4444;--ds-violet:#a78bfa}body{--dsb:var(--dsw-alias-bg-layer-1);--dsb-2:var(--dsw-alias-bg-layer-2);--dsb-3:var(--dsw-alias-bg-layer-3);--dsb-glass:color-mix(in srgb,var(--dsw-alias-bg-layer-2) 78%,transparent);--dsb-glass-strong:color-mix(in srgb,var(--dsw-alias-bg-layer-3) 88%,transparent);--ds-border:var(--dsw-alias-border-l1);--ds-border-strong:var(--dsw-alias-border-l2);--ds-hi-top:#ffffff0b;--ds-shadow-1:0 1px 0 #ffffff0a inset,0 8px 24px #00000059;--ds-shadow-2:0 1px 0 #ffffff0d inset,0 18px 48px #00000080;--ds-t-1:var(--dsw-alias-label-primary);--ds-t-2:var(--dsw-alias-label-secondary);--ds-t-3:var(--dsw-alias-label-tertiary);--ds-t-4:var(--dsw-alias-label-dimmed);--ds-c-1:#4f8cff;--ds-c-2:#2dd4bf;--ds-c-3:#a78bfa;--ds-c-4:#f59e0b;--ds-c-5:#f472b6;--ds-c-6:#fbbf24;--ds-c-7:#38bdf8;--ds-r-1:8px;--ds-r-2:12px;--ds-r-3:16px;--ds-t-fast:.16s cubic-bezier(.2,.8,.2,1)}.KFXqYa_railButton{border:1px solid var(--ds-border);border-radius:var(--ds-r-1);background:var(--dsb-2);width:36px;height:36px;color:var(--ds-t-2);cursor:pointer;transition:border-color var(--ds-t-fast), color var(--ds-t-fast);flex:none;justify-content:center;align-items:center;padding:0;display:flex}.KFXqYa_railButton:hover,.KFXqYa_railButton:focus-visible{border-color:var(--ds-blue);color:var(--ds-blue);outline:none}.KFXqYa_railButton svg{width:26px;height:26px}.KFXqYa_triggerBudgetPulse{border-color:color-mix(in srgb, var(--ds-red) 55%, transparent);animation:2s ease-in-out infinite KFXqYa_budgetPulse}.KFXqYa_triggerBudgetOver{animation-duration:1.2s}@keyframes KFXqYa_budgetPulse{0%,to{box-shadow:0 1px 2px #0000000a,0 0 #ef444400}50%{box-shadow:0 1px 2px #0000000a,0 0 0 3px #ef444429}}.KFXqYa_trigger{border:1px solid var(--ds-border);border-radius:var(--ds-r-2);background:var(--dsb-glass);-webkit-backdrop-filter:blur(14px)saturate(1.2);width:100%;min-width:0;color:var(--ds-t-1);cursor:pointer;text-align:left;transition:border-color var(--ds-t-fast), transform var(--ds-t-fast), box-shadow var(--ds-t-fast);align-items:center;gap:12px;padding:10px 14px;display:flex;position:relative;overflow:hidden;box-shadow:0 1px 2px #0000000a}.KFXqYa_trigger:hover,.KFXqYa_trigger:focus-visible{border-color:var(--ds-border-strong);box-shadow:0 6px 18px -8px color-mix(in srgb, var(--ds-blue) 45%, transparent);outline:none;transform:translateY(-1px)}.KFXqYa_trigger:before{content:"";background:linear-gradient(180deg, var(--ds-hi-top), transparent);pointer-events:none;height:1px;position:absolute;top:0;left:0;right:0}.KFXqYa_trigger:after{content:"";background:linear-gradient(105deg, transparent 42%, color-mix(in srgb, var(--ds-blue) 9%, transparent) 50%, transparent 58%);opacity:0;pointer-events:none;position:absolute;inset:0;transform:translate(-110%)}.KFXqYa_trigger:hover:after,.KFXqYa_trigger:focus-visible:after{animation:.9s ease-out KFXqYa_triggerScan}@keyframes KFXqYa_triggerScan{0%{opacity:0;transform:translate(-110%)}25%{opacity:1}to{opacity:0;transform:translate(110%)}}@media (prefers-reduced-motion:reduce){.KFXqYa_triggerSparkBar,.KFXqYa_trigger:hover:after,.KFXqYa_trigger:focus-visible:after{animation:none}.KFXqYa_triggerGaugeNeedle,.KFXqYa_triggerGaugeArc{transition:none}.KFXqYa_triggerBudgetPulse{animation:none}}.KFXqYa_triggerIcon{width:32px;height:32px;color:var(--ds-blue);flex:none;justify-content:center;align-items:center;display:inline-flex}.KFXqYa_triggerIcon svg{width:30px;height:30px}.KFXqYa_triggerGaugeNeedle{transition:transform 1.1s cubic-bezier(.22,1,.36,1)}.KFXqYa_triggerGaugeArc{transition:stroke-dasharray 1.1s cubic-bezier(.22,1,.36,1)}.KFXqYa_triggerBudgetHot{color:var(--ds-red)}.KFXqYa_triggerMain{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.KFXqYa_triggerPrimary{flex-direction:column;gap:1px;min-width:0;display:flex}.KFXqYa_triggerValueRow{align-items:baseline;gap:2px;min-width:0;display:flex}.KFXqYa_triggerLabel{color:var(--ds-t-3);white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:11px;line-height:15px;overflow:hidden}.KFXqYa_triggerYen{color:var(--ds-t-3);font-variant-numeric:tabular-nums;font-size:12px;font-weight:600;line-height:16px}.KFXqYa_triggerMetric{color:var(--ds-t-1);font-variant-numeric:tabular-nums;white-space:nowrap;text-overflow:ellipsis;min-width:0;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:22px;font-weight:600;line-height:26px;overflow:hidden}.KFXqYa_triggerSpark{flex:none;align-items:flex-end;gap:2px;height:20px;display:flex}.KFXqYa_triggerSparkBar,.KFXqYa_triggerSparkHot{background:var(--ds-blue);opacity:.6;border-radius:1px 1px 0 0;width:3px}.KFXqYa_triggerSparkHot{opacity:1}.KFXqYa_triggerSparkBar{animation:3.6s ease-in-out infinite KFXqYa_triggerSparkBreath}.KFXqYa_triggerSparkBar:nth-child(2n){animation-delay:-1.2s}.KFXqYa_triggerSparkBar:nth-child(3n){animation-delay:-2.4s}@keyframes KFXqYa_triggerSparkBreath{0%,to{opacity:.6}50%{opacity:.34}}.KFXqYa_triggerWrap{flex:auto;width:100%;min-width:96px;max-width:100%;display:block;position:relative;container:KFXqYa_billing-trigger/inline-size}@container KFXqYa_billing-trigger (width<=210px){.KFXqYa_trigger{box-shadow:none;-webkit-backdrop-filter:none;background:0 0;border:none;border-radius:12px;padding:7px 8px}.KFXqYa_trigger:before,.KFXqYa_trigger:after{display:none}.KFXqYa_trigger:hover,.KFXqYa_trigger:focus-visible{background:var(--dsw-alias-interactive-bg-hover);box-shadow:none;border-color:#0000;transform:none}.KFXqYa_triggerSpark,.KFXqYa_triggerLabel{display:none}}@container KFXqYa_billing-trigger (width<=140px){.KFXqYa_triggerMain{display:none}}.KFXqYa_triggerPop{box-sizing:border-box;border:1px solid var(--ds-border-strong);border-radius:var(--ds-r-3);background:var(--dsb-glass-strong);-webkit-backdrop-filter:blur(14px)saturate(1.2);width:256px;box-shadow:var(--ds-shadow-2);opacity:0;visibility:hidden;pointer-events:none;transition:opacity var(--ds-t-fast), transform var(--ds-t-fast), visibility 0s linear .16s;z-index:2000;flex-direction:column;gap:5px;padding:10px 12px;display:flex;position:fixed;top:0;left:0;overflow:hidden;transform:translateY(calc(4px - 100%))}.KFXqYa_triggerPop,.KFXqYa_triggerPop *{box-sizing:border-box}.KFXqYa_triggerPop:before{content:"";background:linear-gradient(90deg, transparent 10%, var(--ds-amber) 50%, transparent 90%);opacity:.65;pointer-events:none;height:1.5px;position:absolute;top:0;left:0;right:0}.KFXqYa_triggerPopShown{opacity:1;visibility:visible;transition:opacity var(--ds-t-fast), transform var(--ds-t-fast), visibility 0s linear 0s;transform:translateY(-100%)}.KFXqYa_popHead{justify-content:space-between;align-items:baseline;gap:8px;display:flex}.KFXqYa_popTitle{letter-spacing:.06em;text-transform:uppercase;color:var(--ds-t-3);font-size:12px;font-weight:700;line-height:18px}.KFXqYa_metricGrid{grid-template-columns:repeat(3,1fr);gap:10px 12px;display:grid}.KFXqYa_metricCell{flex-direction:column;gap:2px;min-width:0;display:flex}.KFXqYa_metricLabel{color:var(--ds-t-3);font-size:11px;line-height:14px}.KFXqYa_metricValue{color:var(--ds-t-1);font-variant-numeric:tabular-nums;white-space:nowrap;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:13px;font-weight:700;line-height:16px}.KFXqYa_metricValueSuccess{color:var(--ds-green)}.KFXqYa_popModel{border-top:1px dashed var(--ds-border);flex-direction:column;gap:6px;margin-top:9px;padding-top:10px;display:flex}.KFXqYa_popModelLabel{color:var(--ds-t-3);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(--ds-green)}.KFXqYa_popDotSub{background:var(--ds-amber)}.KFXqYa_popDotNeutral{background:var(--ds-t-3)}.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(--ds-blue) 14%, transparent);color:var(--ds-blue)}.KFXqYa_popTagSub{background:color-mix(in srgb, var(--ds-amber) 18%, transparent);color:var(--ds-amber)}.KFXqYa_popModelName{color:var(--ds-t-2);text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:500;line-height:16px;overflow:hidden}.KFXqYa_popModelStatus{color:var(--ds-t-1);font-variant-numeric:tabular-nums;white-space:nowrap;margin-left:auto;font-size:11px;font-weight:600;line-height:16px}.KFXqYa_popModelStatusLow{color:var(--ds-red)}.KFXqYa_dashboardModal{border:1px solid var(--ds-border-strong);border-radius:var(--ds-r-3);background:var(--dsb-2);width:min(760px,100vw - 48px);max-height:min(760px,88vh);box-shadow:var(--ds-shadow-2);animation:.16s ease-out KFXqYa_dashboardIn}@keyframes KFXqYa_dashboardIn{0%{opacity:0;transform:translateY(4px)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(--ds-border);justify-content:space-between;align-items:center;gap:12px;padding:12px 18px;display:flex}.KFXqYa_dashboardTitle{color:var(--ds-t-1);margin:0;font-size:14px;font-weight:600;line-height:20px}.KFXqYa_dashboardSubtitle{color:var(--ds-t-3);margin:2px 0 0;font-size:11px;line-height:16px}.KFXqYa_closeButton{border:1px solid var(--ds-border);border-radius:var(--ds-r-1);width:32px;height:32px;color:var(--ds-t-2);cursor:pointer;transition:background-color var(--ds-t-fast), color var(--ds-t-fast);background:0 0;flex:none;justify-content:center;align-items:center;display:inline-flex}.KFXqYa_closeButton:hover{background:var(--dsb-3);color:var(--ds-t-1)}.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(--ds-border);color:var(--ds-t-3);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;padding:8px 18px;font-size:11px;line-height:16px;display:flex}.KFXqYa_tabNav{border:1px solid var(--ds-border);border-radius:var(--ds-r-1);background:var(--dsb);align-items:center;gap:4px;margin:14px 24px 0;padding:4px;display:flex}.KFXqYa_tabButton{color:var(--ds-t-3);cursor:pointer;transition:background-color var(--ds-t-fast), color var(--ds-t-fast), box-shadow var(--ds-t-fast);background:0 0;border:none;border-radius:6px;padding:6px 12px;font-size:12px;font-weight:500;line-height:16px}.KFXqYa_tabButton:hover{color:var(--ds-t-2)}.KFXqYa_tabButton:focus-visible{color:var(--ds-t-2);box-shadow:0 0 0 1px var(--ds-border-strong);outline:none}.KFXqYa_tabButtonActive,.KFXqYa_tabButtonActive:hover,.KFXqYa_tabButtonActive:focus-visible{background:var(--dsb-3);color:var(--ds-t-1);box-shadow:0 0 0 1px var(--ds-border-strong) inset;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(--ds-border);border-radius:var(--ds-r-3);background:var(--dsb-glass-strong);flex-direction:column;gap:12px;padding:18px 20px;display:flex;position:relative;overflow:hidden}.KFXqYa_hero:after{content:"";background:linear-gradient(90deg, transparent 10%, var(--ds-amber) 50%, transparent 90%);opacity:.65;pointer-events:none;height:1.5px;position:absolute;top:0;left:0;right:0}.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(--ds-t-3);text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;font-size:11px;font-weight:500;line-height:15px}.KFXqYa_heroReadout{align-items:baseline;gap:4px;display:flex}.KFXqYa_heroCurrency{letter-spacing:-.01em;color:var(--ds-t-2);font-variant-numeric:tabular-nums;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:22px;font-weight:600;line-height:26px}.KFXqYa_heroValue{letter-spacing:-.03em;font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--ds-t-1);font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:52px;font-weight:600;line-height:56px}.KFXqYa_heroMeta{color:var(--ds-t-2);white-space:nowrap;margin-top:2px;font-size:12px;line-height:16px}.KFXqYa_heroGauge{flex-direction:column;flex:none;align-items:center;gap:4px;width:96px;display:flex}.KFXqYa_heroGaugeDial{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(--dsb-3);stroke-width:7px}.KFXqYa_heroGaugeArc{fill:none;stroke:var(--ds-blue);stroke-width:7px;stroke-linecap:round;transition:stroke-dasharray var(--ds-t-fast)}.KFXqYa_heroGaugeArcOver{stroke:var(--ds-red)}.KFXqYa_heroGaugeCenter{flex-direction:column;justify-content:center;align-items:center;gap:1px;display:flex;position:absolute;inset:0}.KFXqYa_heroGaugeRemain{letter-spacing:-.02em;font-variant-numeric:tabular-nums;color:var(--ds-t-1);font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:16px;font-weight:600;line-height:18px}.KFXqYa_heroGaugeRemainOver{color:var(--ds-red)}.KFXqYa_heroGaugeLabel{color:var(--ds-t-3);font-size:11px;line-height:13px}.KFXqYa_heroGaugeSub{font-variant-numeric:tabular-nums;color:var(--ds-t-2);white-space:nowrap;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;line-height:12px}.KFXqYa_heroSide{border-top:1px solid var(--ds-border);align-items:stretch;padding-top:12px;display:flex}.KFXqYa_heroSideItem{border-left:1px solid var(--ds-border);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(--ds-t-3);text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;font-size:10px;font-weight:500;line-height:13px}.KFXqYa_heroSideValue{color:var(--ds-t-1);font-variant-numeric:tabular-nums;letter-spacing:-.01em;white-space:nowrap;align-items:baseline;gap:6px;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:15px;font-weight:600;line-height:20px;display:inline-flex}.KFXqYa_heroSideSpacer{flex:1;display:block}.KFXqYa_delta{font-variant-numeric:tabular-nums;border-radius:999px;align-items:center;gap:2px;margin-left:6px;padding:1px 7px;font-size:10.5px;font-weight:600;line-height:16px;display:inline-flex}.KFXqYa_deltaUp{color:var(--ds-green);background:color-mix(in srgb, var(--ds-green) 12%, transparent)}.KFXqYa_deltaDown{color:var(--ds-red);background:color-mix(in srgb, var(--ds-red) 12%, transparent)}.KFXqYa_unpricedHint{border:1px solid color-mix(in srgb, var(--ds-amber) 30%, transparent);background:color-mix(in srgb, var(--ds-amber) 8%, transparent);color:var(--ds-amber);border-radius:8px;align-items:center;padding:8px 12px;font-size:11.5px;font-weight:500;line-height:17px;display:flex}.KFXqYa_kpiZone{flex-direction:column;gap:8px;display:flex}.KFXqYa_kpiZoneHead{justify-content:flex-end;align-items:center;gap:8px;display:flex}.KFXqYa_kpiZoneLabel{color:var(--ds-t-3);font-size:11px;line-height:14px}.KFXqYa_kpiGrid{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;display:grid}.KFXqYa_kpiTile{border:1px solid var(--ds-border);border-radius:var(--ds-r-2);background:var(--dsb-glass);transition:border-color var(--ds-t-fast);flex-direction:column;gap:2px;padding:14px 16px;display:flex;position:relative;overflow:hidden}.KFXqYa_kpiTile:hover{border-color:var(--ds-border-strong)}.KFXqYa_kpiLabel{color:var(--ds-t-3);text-transform:uppercase;letter-spacing:.04em;font-size:11px;font-weight:500;line-height:14px}.KFXqYa_kpiValue{color:var(--ds-t-1);font-variant-numeric:tabular-nums;letter-spacing:-.01em;margin-top:6px;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:22px;font-weight:600;line-height:26px}.KFXqYa_kpiGreen{color:var(--ds-green)}.KFXqYa_kpiDetail{color:var(--ds-t-3);white-space:nowrap;text-overflow:ellipsis;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:11px;line-height:15px;overflow:hidden}.KFXqYa_panel{border:1px solid var(--ds-border);border-radius:var(--ds-r-2);background:var(--dsb-glass);transition:border-color var(--ds-t-fast);flex-direction:column;gap:8px;padding:12px 14px;display:flex}.KFXqYa_panelHead{justify-content:space-between;align-items:baseline;gap:10px;display:flex}.KFXqYa_panelHeadControls{align-items:center;gap:8px;display:inline-flex}.KFXqYa_panelTitle{letter-spacing:-.005em;color:var(--ds-t-1);margin:0;font-size:13px;font-weight:600;line-height:20px}.KFXqYa_panelHint{color:var(--ds-t-3);white-space:nowrap;font-size:11px;line-height:16px}.KFXqYa_rangeToggle{border:1px solid var(--ds-border);background:var(--dsb-3);border-radius:8px;gap:2px;padding:2px;display:inline-flex}.KFXqYa_rangeButton{color:var(--ds-t-3);cursor:pointer;transition:background-color var(--ds-t-fast), color var(--ds-t-fast);background:0 0;border:none;border-radius:6px;padding:2px 8px;font-size:11px;line-height:16px}.KFXqYa_rangeButtonActive{background:var(--dsb-2);color:var(--ds-t-1);box-shadow:0 0 0 1px var(--ds-border-strong);font-weight:600}.KFXqYa_exportBar{justify-content:flex-end;align-items:center;gap:8px;display:flex}.KFXqYa_exportLabel{color:var(--ds-t-3);font-size:11px;line-height:16px}.KFXqYa_exportButton{border:1px solid var(--ds-border);color:var(--ds-t-2);cursor:pointer;transition:border-color var(--ds-t-fast), color var(--ds-t-fast), background-color var(--ds-t-fast);background:0 0;border-radius:999px;padding:4px 12px;font-size:11.5px;line-height:16px}.KFXqYa_exportButton:hover,.KFXqYa_exportButton:focus-visible{border-color:var(--ds-border-strong);color:var(--ds-t-1);outline:none}.KFXqYa_shareTrack{background:var(--dsb-3);border-radius:4px;height:8px;display:flex;overflow:hidden}.KFXqYa_shareSeg{height:100%;transition:width var(--ds-t-fast)}.KFXqYa_shareSegPeak{background:var(--ds-blue)}.KFXqYa_shareSegOff{background:color-mix(in srgb, var(--ds-blue) 30%, var(--dsb-3))}.KFXqYa_shareSegUser{background:var(--ds-blue)}.KFXqYa_shareSegAssistant{background:var(--ds-green)}.KFXqYa_shareSegTool{background:var(--ds-amber)}.KFXqYa_shareLegend{align-items:center;gap:16px;display:flex}.KFXqYa_shareItem{color:var(--ds-t-2);align-items:baseline;gap:6px;font-size:11px;line-height:17px;display:inline-flex}.KFXqYa_bucketCost{font-variant-numeric:tabular-nums;align-items:baseline;gap:3px;display:inline-flex}.KFXqYa_bucketOfficial{color:var(--ds-blue);font-weight:600}.KFXqYa_bucketSep{color:var(--ds-t-4)}.KFXqYa_bucketThird{color:var(--ds-t-2)}.KFXqYa_shareDot{border-radius:2px;flex:none;align-self:center;width:8px;height:8px}.KFXqYa_shareValue{color:var(--ds-t-1);font-variant-numeric:tabular-nums;font-weight:600}.KFXqYa_budgetInput{width:64px;color:var(--ds-t-1);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(--ds-border);background:var(--dsb-3);cursor:pointer;width:32px;height:18px;transition:background-color var(--ds-t-fast), border-color var(--ds-t-fast);border-radius:999px;flex:none;padding:0;position:relative}.KFXqYa_switchOn{background:color-mix(in srgb, var(--ds-blue) 60%, transparent);border-color:#0000}.KFXqYa_switchKnob{width:12px;height:12px;transition:transform var(--ds-t-fast);background:#fff;border-radius:50%;position:absolute;top:2px;left:2px}.KFXqYa_switchOn .KFXqYa_switchKnob{transform:translate(14px)}.KFXqYa_budgetFillWarn{background:var(--ds-amber)}.KFXqYa_budgetFillOver{background:var(--ds-red)}.KFXqYa_chartWrap{width:100%;position:relative}.KFXqYa_chartSvg{width:100%;height:auto;display:block}.KFXqYa_chartEmpty{height:140px;color:var(--ds-t-3);justify-content:center;align-items:center;font-size:13px;display:flex}.KFXqYa_emptyRow{text-align:center;color:var(--ds-t-3);padding:28px 0;font-size:13px}.KFXqYa_chartGrid{stroke:var(--ds-border);stroke-width:1px}.KFXqYa_chartAxisLabel{fill:var(--ds-t-3);font-size:10px}.KFXqYa_chartBar{fill:var(--ds-blue);opacity:.7}.KFXqYa_chartBar:hover{opacity:1}.KFXqYa_chartStack{stroke:var(--dsb);stroke-width:.75px}.KFXqYa_chartStack:hover{opacity:.9}.KFXqYa_chartLine{stroke:var(--ds-blue);stroke-width:2px;stroke-linecap:round;stroke-linejoin:round}.KFXqYa_chartCrosshair{stroke:var(--ds-t-4);stroke-width:1px;stroke-dasharray:3 3}.KFXqYa_chartTooltip{pointer-events:none;z-index:2;border:1px solid var(--ds-border-strong);background:var(--dsb-2);box-shadow:var(--ds-shadow-1);white-space:nowrap;border-radius:8px;padding:8px 10px;position:absolute;transform:translate(-50%,calc(-100% - 10px))}.KFXqYa_chartTooltipAlignRight{transform:translate(calc(-100% - 8px),calc(-100% - 10px))}.KFXqYa_chartTooltipAlignLeft{transform:translate(8px,calc(-100% - 10px))}.KFXqYa_chartTooltipDate{color:var(--ds-t-1);margin-bottom:3px;font-size:11px;font-weight:600}.KFXqYa_chartTooltipRow{color:var(--ds-t-2);align-items:center;gap:5px;font-size:11px;line-height:17px;display:flex}.KFXqYa_chartTooltipRow strong{color:var(--ds-t-1);font-variant-numeric:tabular-nums;font-weight:600}.KFXqYa_chartTooltipHead{justify-content:space-between;align-items:baseline;gap:14px;margin-bottom:3px;display:flex}.KFXqYa_chartTooltipHead .KFXqYa_chartTooltipDate{margin-bottom:0}.KFXqYa_chartTooltipHead strong{color:var(--ds-t-1);font-variant-numeric:tabular-nums;font-size:11px;font-weight:600}.KFXqYa_chartTooltipSplit{justify-content:space-between;gap:14px}.KFXqYa_chartTooltipLabel{align-items:center;gap:5px;display:flex}.KFXqYa_chartTooltipModelDetail{color:var(--ds-t-3);font-variant-numeric:tabular-nums;margin:-2px 0 4px 13px;font-size:10.5px;line-height:14px}.KFXqYa_chartBarPlaceholder{fill:color-mix(in srgb, var(--ds-t-2) 30%, transparent)}.KFXqYa_chartLegendLine{background:var(--ds-blue);border-radius:2px;width:10px;height:3px;display:inline-block}.KFXqYa_chartLegendBar{background:var(--ds-blue);opacity:.5;border-radius:2px;width:7px;height:7px;display:inline-block}.KFXqYa_chartTooltipSwatch{border-radius:2px;flex:none;width:8px;height:8px;display:inline-block}.KFXqYa_chartLegend{color:var(--ds-t-2);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_chartLegendItem{font:inherit;color:inherit;cursor:pointer;background:0 0;border:none;align-items:center;gap:5px;padding:0;transition:color .12s;display:inline-flex}.KFXqYa_chartLegendItem:hover{color:var(--ds-t-1)}.KFXqYa_chartLegendItemActive{color:var(--ds-t-1);font-weight:600}.KFXqYa_perfBar{align-items:center;margin:10px 0 2px;display:flex}.KFXqYa_perfChips{flex-wrap:wrap;gap:6px;margin:6px 0 2px;display:flex}.KFXqYa_perfChip{border:1px solid var(--ds-border);background:var(--dsb-3);color:var(--ds-t-2);cursor:pointer;transition:border-color var(--ds-t-fast), color var(--ds-t-fast), opacity var(--ds-t-fast);border-radius:999px;align-items:center;gap:5px;padding:2px 9px;font-size:11px;line-height:16px;display:inline-flex}.KFXqYa_perfChip:hover{color:var(--ds-t-1)}.KFXqYa_perfChipOff{opacity:.45}.KFXqYa_perfChipDot{border-radius:2px;flex:none;width:8px;height:8px;display:inline-block}.KFXqYa_chartHoverDot{stroke:var(--dsb-2);stroke-width:1.5px}.KFXqYa_tableScroll{border:1px solid var(--ds-border);border-radius:var(--ds-r-2);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);overflow:auto}.KFXqYa_ubAlert{border:1px solid color-mix(in srgb, var(--ds-blue) 30%, transparent);border-radius:var(--ds-r-1);background:color-mix(in srgb, var(--ds-blue) 8%, transparent);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(--ds-t-1);font-variant-numeric:tabular-nums;font-weight:600}.KFXqYa_ubAlertNote{color:var(--ds-t-2);margin:0}.KFXqYa_ubTag,.KFXqYa_ubTagSuccess,.KFXqYa_ubTagNeutral,.KFXqYa_ubTagAlert,.KFXqYa_ubTagPromo{border:1px solid var(--ds-border-strong);white-space:nowrap;border-radius:999px;align-items:center;gap:4px;padding:1px 5px;font-size:10px;font-weight:600;line-height:14px;display:inline-flex}.KFXqYa_ubTag{color:var(--ds-t-2);background:var(--dsb-2)}.KFXqYa_ubTagSuccess{color:var(--ds-green);border-color:color-mix(in srgb, var(--ds-green) 36%, transparent);background:color-mix(in srgb, var(--ds-green) 12%, transparent)}.KFXqYa_ubTagNeutral{color:var(--ds-t-2);background:var(--dsb-2)}.KFXqYa_ubTagAlert{color:var(--ds-amber);border-color:color-mix(in srgb, var(--ds-amber) 36%, transparent);background:color-mix(in srgb, var(--ds-amber) 12%, transparent)}.KFXqYa_ubTagPromo{color:var(--ds-red);border-color:color-mix(in srgb, var(--ds-red) 36%, transparent);background:color-mix(in srgb, var(--ds-red) 12%, transparent);cursor:help}.KFXqYa_ubExtraRow td{opacity:.72;padding-top:2px;padding-bottom:2px;font-size:12px}.KFXqYa_ubExtraName{color:var(--ds-t-2);margin-left:26px}.KFXqYa_ubExtraNote{color:var(--ds-t-3);margin-left:8px;font-size:10px}.KFXqYa_ubCard{border:1px solid var(--ds-border);border-radius:var(--ds-r-2);background:var(--dsb-glass);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(--ds-t-1);margin:0;font-size:13px;font-weight:600;line-height:18px}.KFXqYa_ubCardSub{color:var(--ds-t-3);font-size:11px;line-height:16px}.KFXqYa_ubTablewrap{border:1px solid var(--ds-border);border-radius:var(--ds-r-1);overflow:auto}.KFXqYa_ubTable{border-collapse:collapse;white-space:nowrap;width:100%;font-size:12px}.KFXqYa_ubTable th,.KFXqYa_ubTable td{border-bottom:1px solid var(--ds-border);text-align:left;color:var(--ds-t-1);padding:7px 9px}.KFXqYa_ubSearch{border:1px solid var(--ds-border);border-radius:var(--ds-r-1);width:200px;max-width:45%;color:var(--ds-t-1);background:0 0;outline:none;align-self:center;margin-left:auto;padding:5px 9px;font-size:12px;line-height:18px}.KFXqYa_bandDots{flex:none;align-items:center;gap:5px;display:inline-flex}.KFXqYa_bandDot{cursor:pointer;background:0 0;border:1.5px solid;border-radius:999px;flex:none;width:9px;height:9px;padding:0}.KFXqYa_bandDotOn{background:currentColor}.KFXqYa_offPeak{color:var(--ds-blue)}.KFXqYa_soon{color:var(--ds-amber)}.KFXqYa_peak{color:var(--ds-red)}span.KFXqYa_bandDot{cursor:default}.KFXqYa_ubTable th,.KFXqYa_ubTable td:first-child{white-space:normal}.KFXqYa_ubTable tbody tr:last-child td{border-bottom:0}.KFXqYa_ubTable thead th,.KFXqYa_ubTable thead th.KFXqYa_numCol{color:var(--ds-t-3);text-transform:uppercase;letter-spacing:.04em;text-align:center;padding:6px 9px;font-size:11px;font-weight:500}.KFXqYa_ubModel{align-items:center;gap:6px;display:inline-flex}.KFXqYa_vendorLetter{color:#fff;border-radius:4px;flex:none;justify-content:center;align-items:center;width:16px;height:16px;font-size:10px;font-weight:600;line-height:1;display:inline-flex}.KFXqYa_ubModelName{color:var(--ds-t-1);align-items:center;gap:4px;font-weight:500;display:inline-flex}.KFXqYa_ubChipPeak,.KFXqYa_ubChipOff{font-variant-numeric:tabular-nums;border-radius:999px;align-items:center;gap:4px;height:18px;padding:0 6px;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(--ds-blue) 12%, transparent);border:1px solid color-mix(in srgb, var(--ds-blue) 36%, transparent);color:var(--ds-blue)}.KFXqYa_ubChipOff{background:color-mix(in srgb, var(--ds-green) 12%, transparent);border:1px solid color-mix(in srgb, var(--ds-green) 36%, transparent);color:var(--ds-green)}.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(--ds-t-1);flex:0 0 72px;font-size:12px;font-weight:500}.KFXqYa_ubNotesDesc{min-width:0;color:var(--ds-t-2);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(--ds-red) 12%, transparent);border:1px solid color-mix(in srgb, var(--ds-red) 36%, transparent);height:18px;color:var(--ds-red);border-radius:999px;align-items:center;padding:0 7px;font-size:10px;font-weight:600;line-height:14px;display:inline-flex}.KFXqYa_modelTable{border-collapse:collapse;table-layout:fixed;width:100%;min-width:640px;font-size:12px}.KFXqYa_modelTable th:first-child{width:26%}.KFXqYa_modelTable th,.KFXqYa_modelTable td{border-bottom:1px solid var(--ds-border);text-align:left;white-space:nowrap;color:var(--ds-t-1);padding:10px 12px}.KFXqYa_modelTable tbody tr:last-child td{border-bottom:0}.KFXqYa_sessionGroupRow{cursor:pointer}.KFXqYa_sessionGroupRow .KFXqYa_modelName:before{content:"›";color:var(--ds-t-3);margin-right:6px;display:inline-block}.KFXqYa_sessionGroupRow[aria-expanded=true] .KFXqYa_modelName:before{transform:rotate(90deg)}.KFXqYa_sessionChildRow td:first-child{padding-left:30px}.KFXqYa_modelTable thead th{color:var(--ds-t-3);text-transform:uppercase;letter-spacing:.04em;background:0 0;padding:8px 12px;font-size:11px;font-weight:500}.KFXqYa_modelTable tbody tr{transition:background-color .12s}.KFXqYa_modelTable tbody tr:hover{background:0 0}.KFXqYa_modelTable tbody tr.KFXqYa_modelRowFocusable{cursor:pointer}.KFXqYa_modelTable tbody tr.KFXqYa_modelRowActive,.KFXqYa_modelTable tbody tr.KFXqYa_modelRowActive:hover{background:color-mix(in srgb, var(--ds-blue) 10%, transparent)}.KFXqYa_numCol{text-align:right;font-family:var(--mono);font-variant-numeric:tabular-nums}.KFXqYa_modelTable .KFXqYa_numCol,.KFXqYa_ubTable .KFXqYa_numCol{text-align:right}.KFXqYa_na{color:var(--ds-t-4)}.KFXqYa_modelCell{align-items:center;gap:8px;display:inline-flex}.KFXqYa_modelDot{border-radius:2px;flex:none;width:8px;height:8px}.KFXqYa_modelName{color:var(--ds-t-1);font-weight:500;line-height:16px;display:block}.KFXqYa_modelProvider{color:var(--ds-t-3);font-size:10.5px;line-height:14px;display:block}.KFXqYa_siteRow{border:1px solid var(--ds-border);border-radius:var(--ds-r-1);background:var(--dsb-2);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:1px solid #0000;border-radius:999px;flex:none;align-items:center;padding:2px 7px;font-size:10px;font-weight:600;line-height:14px;display:inline-flex}.KFXqYa_siteKindSite{color:var(--ds-blue);border-color:color-mix(in srgb, var(--ds-blue) 36%, transparent);background:color-mix(in srgb, var(--ds-blue) 12%, transparent)}.KFXqYa_siteKindDirect{color:var(--ds-green);border-color:color-mix(in srgb, var(--ds-green) 36%, transparent);background:color-mix(in srgb, var(--ds-green) 12%, transparent)}.KFXqYa_siteKindUnknown{color:var(--ds-red);border-color:color-mix(in srgb, var(--ds-red) 36%, transparent);background:color-mix(in srgb, var(--ds-red) 12%, transparent)}.KFXqYa_siteRowTitle{color:var(--ds-t-1);text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;line-height:18px;overflow:hidden}.KFXqYa_siteRowMeta{flex:none;align-items:center;gap:10px;display:inline-flex}.KFXqYa_siteRowCost{color:var(--ds-t-1);font-variant-numeric:tabular-nums;font-size:12.5px;font-weight:600;line-height:18px}.KFXqYa_siteRowCalls{color:var(--ds-t-2);font-variant-numeric:tabular-nums;font-size:11.5px;line-height:17px}.KFXqYa_siteRowCallsLow{color:var(--ds-red)}.KFXqYa_flatTag{color:var(--ds-t-3);font-size:10.5px;line-height:14px}.KFXqYa_healthDot{border-radius:50%;flex:none;width:6px;height:6px;display:inline-block}.KFXqYa_healthOk{background:var(--ds-green);box-shadow:0 0 0 3px color-mix(in srgb, var(--ds-green) 18%, transparent)}.KFXqYa_healthBad{background:var(--ds-red);box-shadow:0 0 0 3px color-mix(in srgb, var(--ds-red) 18%, transparent)}.KFXqYa_healthIdle{background:var(--ds-t-4)}.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(--ds-green);background:var(--dsb-2)}.KFXqYa_healthBadgeBad{color:var(--ds-red);background:var(--dsb-2)}.KFXqYa_planTag{color:var(--ds-green);white-space:nowrap;align-items:center;gap:4px;font-size:10px;font-weight:500;line-height:14px;display:inline-flex}.KFXqYa_planTagBadge{background:color-mix(in srgb, var(--ds-green) 20%, transparent);border-radius:4px;padding:0 4px;font-size:9px;line-height:12px}.KFXqYa_uncataloguedTag{border:1px solid color-mix(in srgb, var(--ds-amber) 36%, transparent);vertical-align:1px;color:var(--ds-amber);background:color-mix(in srgb, var(--ds-amber) 12%, transparent);border-radius:999px;margin-left:6px;padding:0 6px;font-size:10px;font-weight:600;line-height:16px;display:inline-block}.KFXqYa_estimatedTag{border:1px solid color-mix(in srgb, var(--ds-blue) 36%, transparent);vertical-align:1px;color:var(--ds-blue);background:color-mix(in srgb, var(--ds-blue) 12%, transparent);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(--ds-border-strong);background:var(--dsb-glass-strong);backdrop-filter:blur(14px)saturate(1.3);color:var(--ds-t-2);font-variant-numeric:tabular-nums;border-radius:999px;flex-wrap:wrap;align-items:center;gap:8px;padding:6px 12px;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:11px;line-height:16px;display:inline-flex}.KFXqYa_feeBarAbove{order:-1;align-self:center;margin-bottom:8px}.KFXqYa_feeInline{font-variant-numeric:tabular-nums;white-space:nowrap;cursor:default;border-radius:999px;align-self:center;align-items:center;gap:5px;height:22px;padding:0 4px;font-size:11px;line-height:16px;display:inline-flex}.KFXqYa_feeInline .KFXqYa_feeChipPrimary,.KFXqYa_feeInline .KFXqYa_feeChipOff{height:18px;padding:0 7px}.KFXqYa_feeInlineNum{color:var(--ds-t-1);padding-right:6px;font-weight:600}.KFXqYa_feeInlineAlert{background:color-mix(in srgb, var(--ds-amber) 12%, transparent)}.KFXqYa_feeInlineAlert .KFXqYa_feeInlineNum{color:var(--ds-amber)}.KFXqYa_feeInlineError{background:color-mix(in srgb, var(--ds-red) 12%, transparent)}.KFXqYa_feeInlineError .KFXqYa_feeInlineNum{color:var(--ds-red)}.KFXqYa_feeBar .KFXqYa_feeSep{color:var(--ds-t-4)}.KFXqYa_feeCount{color:var(--ds-t-1);font-weight:600}.KFXqYa_feeSuffix{color:var(--ds-t-3)}.KFXqYa_feeItem{color:var(--ds-t-2);white-space:nowrap}.KFXqYa_feeNum{color:var(--ds-t-1);font-weight:600}.KFXqYa_feeSep{color:var(--ds-t-4)}.KFXqYa_feeChipPrimary,.KFXqYa_feeChipOff,.KFXqYa_feeChipAlert,.KFXqYa_feeChipError{border:1px solid var(--ds-border);background:var(--dsb-3);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{color:var(--ds-blue);border-color:color-mix(in srgb, var(--ds-blue) 30%, transparent)}.KFXqYa_feeChipOff{color:var(--ds-cyan);border-color:color-mix(in srgb, var(--ds-cyan) 30%, transparent)}.KFXqYa_feeChipAlert{color:var(--ds-amber);border-color:color-mix(in srgb, var(--ds-amber) 30%, transparent)}.KFXqYa_feeChipError{color:var(--ds-red);border-color:color-mix(in srgb, var(--ds-red) 30%, transparent)}.KFXqYa_balanceCell{align-items:center;gap:6px;display:inline-flex;position:relative}.KFXqYa_providerGroupRecharge{border:1px solid color-mix(in srgb, var(--ds-c-1) 38%, transparent);background:color-mix(in srgb, var(--ds-c-1) 8%, transparent);color:var(--ds-c-1);white-space:nowrap;border-radius:999px;justify-content:center;align-items:center;min-width:48px;padding:1px 8px;font-size:10.5px;font-weight:600;line-height:16px;text-decoration:none;display:inline-flex}.KFXqYa_providerGroupRecharge:empty{background:0 0;border-color:#0000}.KFXqYa_providerGroupRecharge:hover{background:color-mix(in srgb, var(--ds-c-1) 15%, transparent);border-color:color-mix(in srgb, var(--ds-c-1) 60%, transparent)}.KFXqYa_balanceDaysBadge{border:1px solid var(--ds-border-strong);background:var(--dsb-2);min-width:16px;height:16px;color:var(--ds-t-2);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;padding:0 4px;font-size:10px;font-weight:600;line-height:1;display:inline-flex}.KFXqYa_balanceDaysBadge:hover{border-color:var(--ds-t-3);color:var(--ds-t-1)}.KFXqYa_balanceDaysBadgeLow{color:var(--ds-red);border-color:color-mix(in srgb, var(--ds-red) 36%, transparent);background:color-mix(in srgb, var(--ds-red) 12%, transparent)}.KFXqYa_balanceDetailPop{z-index:20;background:var(--dsb-2);border:1px solid var(--ds-border-strong);min-width:180px;box-shadow:var(--ds-shadow-1);white-space:nowrap;border-radius:8px;flex-direction:column;gap:6px;padding:8px 10px;display:inline-flex;position:absolute;top:calc(100% + 6px);right:0}.KFXqYa_balanceDetailHead{justify-content:space-between;align-items:center;gap:12px;display:flex}.KFXqYa_balanceDetailTitle{color:var(--ds-t-1);font-size:12px;font-weight:600}.KFXqYa_balanceDetailClose{cursor:pointer;color:var(--ds-t-3);background:0 0;border:none;font-size:14px;line-height:1}.KFXqYa_balanceDetailClose:hover{color:var(--ds-t-1)}.KFXqYa_balanceDetailGrid{flex-direction:column;gap:4px;display:inline-flex}.KFXqYa_balanceDetailRow{color:var(--ds-t-2);font-variant-numeric:tabular-nums;justify-content:space-between;gap:16px;font-size:11px;line-height:15px;display:flex}.KFXqYa_balanceDetailLabel{color:var(--ds-t-3)}.KFXqYa_balanceDetailValue{color:var(--ds-t-1);font-weight:500}.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 var(--ds-border);border-radius:var(--ds-r-2);background:var(--dsb-glass);-webkit-backdrop-filter:blur(12px)saturate(1.3);transition:border-color var(--ds-t-fast);padding:14px 16px;position:relative;overflow:hidden}.KFXqYa_subscriptionHead{flex-wrap:wrap;align-items:baseline;gap:6px;margin-bottom:8px;display:flex}.KFXqYa_subscriptionName{color:var(--ds-t-1);font-size:13px;font-weight:600}.KFXqYa_subscriptionPlan{color:var(--ds-t-2);font-size:11px}.KFXqYa_subscriptionPlan[data-kind=code],.KFXqYa_subscriptionPlan[data-kind=token]{color:var(--ds-t-2);background:var(--dsb-3);border-radius:999px;padding:1px 8px;font-weight:500}.KFXqYa_subscriptionTier{color:var(--ds-t-3);margin-left:6px}.KFXqYa_subscriptionAuto{border:1px solid color-mix(in srgb, var(--ds-blue) 36%, transparent);color:var(--ds-blue);background:color-mix(in srgb, var(--ds-blue) 12%, transparent);border-radius:999px;margin-left:6px;padding:1px 6px;font-size:10px}.KFXqYa_subscriptionStatus{color:var(--ds-t-2);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(--ds-t-3);flex:0 0 44px}.KFXqYa_subscriptionTrack{background:var(--dsb-3);height:6px;box-shadow:inset 0 0 0 1px var(--ds-border);border-radius:3px;flex:1;overflow:hidden}.KFXqYa_subscriptionFill{background:var(--ds-blue);height:calc(100% - 2px);transition:width var(--ds-t-fast);border-radius:2px;margin:1px;display:block}.KFXqYa_subscriptionFillWarn{background:var(--ds-amber)}.KFXqYa_subscriptionFillOver{background:var(--ds-red)}.KFXqYa_subscriptionMeta{flex-direction:column;flex:none;align-items:flex-end;gap:2px;display:flex}.KFXqYa_subscriptionPct{text-align:right;min-width:52px;font-family:var(--mono);font-variant-numeric:tabular-nums;color:var(--ds-t-1);flex:none}.KFXqYa_subscriptionExhausted{color:var(--ds-red);min-width:52px;font-weight:600}.KFXqYa_subscriptionReset{color:var(--ds-t-3);white-space:nowrap;flex:none;font-size:10px}.KFXqYa_providerGroupList{flex-direction:column;gap:10px;display:flex}.KFXqYa_providerGroup{border:1px solid var(--ds-border);border-radius:var(--ds-r-2);background:var(--dsb-glass);padding:12px 14px}.KFXqYa_providerGroupHead{justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:10px;display:flex}.KFXqYa_providerGroupTitle{align-items:center;gap:7px;min-width:0;display:inline-flex}.KFXqYa_kindBadge{border:1px solid color-mix(in srgb, var(--ds-c-1) 32%, transparent);background:color-mix(in srgb, var(--ds-c-1) 10%, transparent);color:var(--ds-c-1);border-radius:4px;flex:none;padding:1px 6px;font-size:10px;font-weight:600;line-height:15px}.KFXqYa_kindBadgeRelay{border-color:color-mix(in srgb, var(--ds-c-2) 32%, transparent);background:color-mix(in srgb, var(--ds-c-2) 10%, transparent);color:var(--ds-c-2)}.KFXqYa_kindBadgeUnknown{border-color:var(--ds-border);background:color-mix(in srgb, var(--ds-t-3) 12%, transparent);color:var(--ds-t-3)}.KFXqYa_providerGroupName{color:var(--ds-t-1);font-size:13px;font-weight:600;line-height:18px}.KFXqYa_providerGroupMeta{flex:none;align-items:center;gap:10px;display:inline-flex}.KFXqYa_providerGroupBadge{border:1px solid color-mix(in srgb, var(--ds-green) 36%, transparent);color:var(--ds-green);background:color-mix(in srgb, var(--ds-green) 12%, transparent);border-radius:999px;justify-content:center;align-items:center;padding:1px 8px;font-size:10px;font-weight:500;line-height:16px;display:inline-flex}.KFXqYa_providerGroupBalance,.KFXqYa_providerGroupCost{color:var(--ds-t-2);font-variant-numeric:tabular-nums;white-space:nowrap;justify-content:flex-end;align-items:baseline;gap:6px;min-width:118px;font-size:12px;line-height:17px;display:inline-flex}.KFXqYa_providerGroupCostLabel{font-size:11px}.KFXqYa_providerGroupCostValue{color:var(--ds-t-1);text-align:right;min-width:56px;font-weight:600}.KFXqYa_providerGroupBalanceLabel{color:var(--ds-t-3);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(--ds-amber) 16%, transparent)}.KFXqYa_roundsBarColOff{background:var(--dsb-3)}.KFXqYa_roundsBarLabel{text-align:center;color:var(--ds-t-2);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(--ds-blue);border-radius:2px 2px 0 0;width:100%;min-height:2px;position:relative}.KFXqYa_roundsBarFlagged{background:var(--ds-red);border-radius:2px 2px 0 0;width:100%;min-height:2px;position:relative}.KFXqYa_roundsFlagMark{background:var(--ds-red);border-radius:50%;width:7px;height:7px;position:absolute;top:-3px;right:-3px}.KFXqYa_roundsAxis{color:var(--ds-t-3);justify-content:space-between;margin-top:6px;font-size:10px;display:flex}.KFXqYa_roundsEmpty{color:var(--ds-t-2);margin-top:10px;font-size:12px}.KFXqYa_heatmap{margin-top:10px}.KFXqYa_heatmapGrid{grid-template-columns:repeat(7,minmax(0,1fr));gap:3px;display:grid}.KFXqYa_heatmapCellEmpty{box-sizing:border-box;border:1px dashed var(--ds-border);height:30px;color:var(--ds-t-4);font-variant-numeric:tabular-nums;background:0 0;border-radius:2px;justify-content:center;align-items:center;font-size:11px;display:flex}.KFXqYa_heatmapCell{font-variant-numeric:tabular-nums;cursor:pointer;border:0;border-radius:2px;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:2px;width:14px;height:14px;display:block}.KFXqYa_heatmapHover{font-variant-numeric:tabular-nums;margin-left:auto;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace}.KFXqYa_heatmapRangeSwitch{gap:4px;margin-left:auto;display:inline-flex}.KFXqYa_heatmapRangeButton{border:1px solid var(--ds-border);color:var(--ds-t-2);cursor:pointer;background:0 0;border-radius:6px;padding:2px 8px;font-size:11px;line-height:1.4}.KFXqYa_heatmapRangeButtonActive{border-color:var(--ds-border-strong);color:var(--ds-t-1);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(--ds-t-3);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(--ds-t-3);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_heatmapHalf .KFXqYa_heatmapYearWeekdays{grid-template-rows:repeat(7,16px);line-height:16px}.KFXqYa_heatmapHalf .KFXqYa_heatmapYearWeekday{height:16px}.KFXqYa_heatmapHalf .KFXqYa_heatmapYearMonths{grid-template-columns:repeat(26,16px)}.KFXqYa_heatmapHalf .KFXqYa_heatmapYearGrid{grid-template-rows:repeat(7,16px)}.KFXqYa_heatmapHalf .KFXqYa_heatmapYearCell{border-radius:3px;width:16px;height:16px}.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(--ds-blue);color:var(--dsw-alias-label-primary);background:color-mix(in srgb, var(--ds-blue) 16%, transparent)}.KFXqYa_rdoRow{justify-content:space-between;align-items:center;gap:8px;margin-top:10px;display:flex}.KFXqYa_rdoLabel{color:var(--dsw-alias-label-secondary);font-size:12px}.KFXqYa_rdoSelect{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-primary);white-space:nowrap;cursor:pointer;border-radius:10px;align-items:center;gap:5px;padding:5px 8px 5px 10px;font-size:12px;display:inline-flex}.KFXqYa_rdoSelect:hover{background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 85%, transparent)}.KFXqYa_rdoSelect:focus-visible{border-color:var(--ds-blue);outline:none}.KFXqYa_rdoChevron{color:var(--dsw-alias-label-tertiary);transition:transform .15s;display:inline-flex}.KFXqYa_rdoChevronOpen{transform:rotate(180deg)}.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(--ds-amber);background:color-mix(in srgb, var(--ds-amber) 12%, transparent);border:1px solid color-mix(in srgb, var(--ds-amber) 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(--ds-blue);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(--ds-blue)}.KFXqYa_tokenModelPartOut{background:var(--ds-amber)}.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-radius:var(--ds-r-2);border:1px solid var(--ds-border-strong);background:var(--dsb-glass-strong);-webkit-backdrop-filter:blur(14px)saturate(1.2);min-width:280px;max-width:380px;box-shadow:var(--ds-shadow-2);animation:KFXqYa_peakAlertIn var(--ds-t-fast);flex-direction:column;gap:12px;padding:14px 16px;display:flex;position:fixed}.KFXqYa_peakCardCorner{bottom:18px;right:18px}.KFXqYa_peakCardCenter{top:20%;left:50%;transform:translate(-50%)}.KFXqYa_peakCardPeak{color:var(--ds-blue)}.KFXqYa_peakCardOff{color:var(--ds-cyan)}.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(--ds-blue)}.KFXqYa_peakTagSuccess{background:var(--dsw-alias-bg-layer-3);color:var(--ds-cyan)}.KFXqYa_peakDot{border-radius:999px;flex:none;width:6px;height:6px}.KFXqYa_peakDotPrimary{background:var(--ds-blue)}.KFXqYa_peakDotSuccess{background:var(--ds-cyan)}.KFXqYa_peakClose{width:24px;height:24px;color:var(--ds-t-3);cursor:pointer;transition:background-color var(--ds-t-fast), color var(--ds-t-fast);background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;font-size:15px;line-height:1;display:inline-flex}.KFXqYa_peakClose:hover{color:var(--ds-t-1);background:var(--dsw-alias-bg-layer-2)}.KFXqYa_peakCount{font-variant-numeric:tabular-nums;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:28px;font-weight:600;line-height:1}.KFXqYa_peakCountPrimary{color:var(--ds-blue)}.KFXqYa_peakCountSuccess{color:var(--ds-cyan)}.KFXqYa_peakDesc{color:var(--ds-t-1);margin:4px 0 0;font-size:12px;line-height:18px}@keyframes KFXqYa_peakAlertIn{0%{opacity:0}to{opacity:1}}.KFXqYa_setCard{border:1px solid var(--ds-border);border-radius:var(--ds-r-2);background:var(--dsb-glass);flex-direction:column;gap:12px;padding:16px 18px;display:flex}.KFXqYa_setGrid3,.KFXqYa_setGrid2{gap:10px;display:grid}.KFXqYa_setGrid3{grid-template-columns:repeat(3,minmax(0,1fr))}.KFXqYa_setGrid2{grid-template-columns:repeat(2,minmax(0,1fr))}@media (width<=720px){.KFXqYa_setGrid3,.KFXqYa_setGrid2{grid-template-columns:1fr}}.KFXqYa_setCell{border:1px solid var(--ds-border);border-radius:var(--ds-r-1);flex-direction:column;gap:8px;min-width:0;padding:12px 14px;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(--ds-t-1);margin:0;font-size:13px;font-weight:600;line-height:18px}.KFXqYa_setCardDesc{color:var(--ds-t-3);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(--ds-t-3);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(--ds-border);align-items:center;gap:10px;padding:8px 0;display:flex}.KFXqYa_userPriceCheck{width:14px;height:14px;accent-color:var(--ds-blue);flex:none;margin:0}.KFXqYa_userPriceBody{flex-direction:column;flex:1;gap:8px;min-width:0;display:flex}.KFXqYa_userPriceLineMeta{grid-template-columns:minmax(0,1fr) minmax(0,1.4fr) auto;align-items:end;gap:8px 10px;display:grid}@media (width<=720px){.KFXqYa_userPriceLineMeta{grid-template-columns:repeat(2,minmax(0,1fr))}}.KFXqYa_userPriceLineMeta .KFXqYa_userPriceInput{box-sizing:border-box;width:100%;min-width:0;max-width:none}.KFXqYa_userPriceBody .KFXqYa_ctlGroup{flex-wrap:nowrap}.KFXqYa_userPriceLineMeta .KFXqYa_userPriceField .KFXqYa_ctlLabel{align-items:flex-end;min-height:30px;display:flex}.KFXqYa_userPricePriceLine{border-left:2px solid var(--ds-amber);flex-wrap:wrap;align-items:center;gap:10px;width:calc(100% - 22px);margin-left:10px;padding:2px 0 6px 12px;display:flex}.KFXqYa_userPricePriceLine>.KFXqYa_ctlLabel{color:var(--ds-t-3);flex:0 0 44px;font-size:11px}.KFXqYa_userPricePriceLine .KFXqYa_userPriceInputNum{box-sizing:border-box;flex:1 1 0;width:auto;min-width:120px;max-width:240px}.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(--ds-border);background:var(--dsb-3);min-width:96px;max-width:160px;color:var(--ds-t-1);border-radius:6px;padding:4px 8px;font-size:12px;line-height:16px}.KFXqYa_userPriceInputNum{min-width:72px;max-width:88px}.KFXqYa_rdo{color:var(--ds-t-2);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(--ds-border-strong);background:var(--dsb-3);border-radius:50%;flex:none;width:14px;height:14px;position:relative}.KFXqYa_rdo input:checked+.KFXqYa_rdoDot{border-color:var(--ds-blue)}.KFXqYa_rdo input:checked+.KFXqYa_rdoDot:after{content:"";background:var(--ds-blue);border-radius:50%;position:absolute;inset:3px}.KFXqYa_inp{border:1px solid var(--ds-border);background:var(--dsb-3);border-radius:6px;align-items:center;gap:4px;padding:2px 6px;display:inline-flex}.KFXqYa_affix{color:var(--ds-t-3);font-size:11px;line-height:16px}.KFXqYa_prog{background:var(--dsb-3);min-width:0;height:6px;box-shadow:inset 0 0 0 1px var(--ds-border);border-radius:3px;flex:1;overflow:hidden}.KFXqYa_progFill{background:var(--ds-blue);height:calc(100% - 2px);transition:width var(--ds-t-fast);border-radius:2px;margin:1px}.KFXqYa_btn{border:1px solid var(--ds-border);height:28px;color:var(--ds-t-2);cursor:pointer;transition:border-color var(--ds-t-fast), color var(--ds-t-fast), background-color var(--ds-t-fast);background:0 0;border-radius:999px;align-items:center;gap:6px;padding:0 12px;font-size:12px;line-height:16px;display:inline-flex}.KFXqYa_btn:hover{border-color:var(--ds-blue);color:var(--ds-t-1);background:color-mix(in srgb, var(--ds-blue) 12%, transparent)}.KFXqYa_modelTable tbody td:not(:first-child) tbody td:not(:first-child){text-align:right;font-family:var(--mono);font-variant-numeric:tabular-nums;color:var(--ds-t-1)}`,document.head.appendChild(e)}var F={affix:`KFXqYa_affix`,balanceCell:`KFXqYa_balanceCell`,balanceDaysBadge:`KFXqYa_balanceDaysBadge`,balanceDaysBadgeLow:`KFXqYa_balanceDaysBadgeLow`,balanceDetailClose:`KFXqYa_balanceDetailClose`,balanceDetailGrid:`KFXqYa_balanceDetailGrid`,balanceDetailHead:`KFXqYa_balanceDetailHead`,balanceDetailLabel:`KFXqYa_balanceDetailLabel`,balanceDetailPop:`KFXqYa_balanceDetailPop`,balanceDetailRow:`KFXqYa_balanceDetailRow`,balanceDetailTitle:`KFXqYa_balanceDetailTitle`,balanceDetailValue:`KFXqYa_balanceDetailValue`,bandDot:`KFXqYa_bandDot`,bandDotOn:`KFXqYa_bandDotOn`,bandDots:`KFXqYa_bandDots`,"billing-trigger":`KFXqYa_billing-trigger`,btn:`KFXqYa_btn`,bucketCost:`KFXqYa_bucketCost`,bucketOfficial:`KFXqYa_bucketOfficial`,bucketSep:`KFXqYa_bucketSep`,bucketThird:`KFXqYa_bucketThird`,budgetFillOver:`KFXqYa_budgetFillOver`,budgetFillWarn:`KFXqYa_budgetFillWarn`,budgetInput:`KFXqYa_budgetInput`,budgetPulse:`KFXqYa_budgetPulse`,chartAxisLabel:`KFXqYa_chartAxisLabel`,chartBar:`KFXqYa_chartBar`,chartBarPlaceholder:`KFXqYa_chartBarPlaceholder`,chartCrosshair:`KFXqYa_chartCrosshair`,chartEmpty:`KFXqYa_chartEmpty`,chartGrid:`KFXqYa_chartGrid`,chartHoverDot:`KFXqYa_chartHoverDot`,chartLegend:`KFXqYa_chartLegend`,chartLegendBar:`KFXqYa_chartLegendBar`,chartLegendItem:`KFXqYa_chartLegendItem`,chartLegendItemActive:`KFXqYa_chartLegendItemActive`,chartLegendLine:`KFXqYa_chartLegendLine`,chartLine:`KFXqYa_chartLine`,chartStack:`KFXqYa_chartStack`,chartSvg:`KFXqYa_chartSvg`,chartTooltip:`KFXqYa_chartTooltip`,chartTooltipAlignLeft:`KFXqYa_chartTooltipAlignLeft`,chartTooltipAlignRight:`KFXqYa_chartTooltipAlignRight`,chartTooltipDate:`KFXqYa_chartTooltipDate`,chartTooltipHead:`KFXqYa_chartTooltipHead`,chartTooltipLabel:`KFXqYa_chartTooltipLabel`,chartTooltipModelDetail:`KFXqYa_chartTooltipModelDetail`,chartTooltipRow:`KFXqYa_chartTooltipRow`,chartTooltipSplit:`KFXqYa_chartTooltipSplit`,chartTooltipSwatch:`KFXqYa_chartTooltipSwatch`,chartWrap:`KFXqYa_chartWrap`,closeButton:`KFXqYa_closeButton`,ctlCol:`KFXqYa_ctlCol`,ctlGroup:`KFXqYa_ctlGroup`,ctlLabel:`KFXqYa_ctlLabel`,ctlRow:`KFXqYa_ctlRow`,ctlRowStretch:`KFXqYa_ctlRowStretch`,currencyButton:`KFXqYa_currencyButton`,currencyButtonActive:`KFXqYa_currencyButtonActive`,currencyToggle:`KFXqYa_currencyToggle`,dashboard:`KFXqYa_dashboard`,dashboardBody:`KFXqYa_dashboardBody`,dashboardHead:`KFXqYa_dashboardHead`,dashboardIn:`KFXqYa_dashboardIn`,dashboardModal:`KFXqYa_dashboardModal`,dashboardRight:`KFXqYa_dashboardRight`,dashboardSubtitle:`KFXqYa_dashboardSubtitle`,dashboardTitle:`KFXqYa_dashboardTitle`,delta:`KFXqYa_delta`,deltaDown:`KFXqYa_deltaDown`,deltaUp:`KFXqYa_deltaUp`,emptyRow:`KFXqYa_emptyRow`,estimatedTag:`KFXqYa_estimatedTag`,exportBar:`KFXqYa_exportBar`,exportButton:`KFXqYa_exportButton`,exportLabel:`KFXqYa_exportLabel`,feeBar:`KFXqYa_feeBar`,feeBarAbove:`KFXqYa_feeBarAbove`,feeChipAlert:`KFXqYa_feeChipAlert`,feeChipError:`KFXqYa_feeChipError`,feeChipOff:`KFXqYa_feeChipOff`,feeChipPrimary:`KFXqYa_feeChipPrimary`,feeCount:`KFXqYa_feeCount`,feeInline:`KFXqYa_feeInline`,feeInlineAlert:`KFXqYa_feeInlineAlert`,feeInlineError:`KFXqYa_feeInlineError`,feeInlineNum:`KFXqYa_feeInlineNum`,feeItem:`KFXqYa_feeItem`,feeNum:`KFXqYa_feeNum`,feeSep:`KFXqYa_feeSep`,feeSuffix:`KFXqYa_feeSuffix`,flatTag:`KFXqYa_flatTag`,floatModeBtn:`KFXqYa_floatModeBtn`,floatModeBtnOn:`KFXqYa_floatModeBtnOn`,floatSub:`KFXqYa_floatSub`,floatSubHead:`KFXqYa_floatSubHead`,floatSubName:`KFXqYa_floatSubName`,floatSubPlan:`KFXqYa_floatSubPlan`,floatTarget:`KFXqYa_floatTarget`,floatTargetLabel:`KFXqYa_floatTargetLabel`,healthBad:`KFXqYa_healthBad`,healthBadge:`KFXqYa_healthBadge`,healthBadgeBad:`KFXqYa_healthBadgeBad`,healthBadgeOk:`KFXqYa_healthBadgeOk`,healthDot:`KFXqYa_healthDot`,healthIdle:`KFXqYa_healthIdle`,healthOk:`KFXqYa_healthOk`,heatmap:`KFXqYa_heatmap`,heatmapCell:`KFXqYa_heatmapCell`,heatmapCellEmpty:`KFXqYa_heatmapCellEmpty`,heatmapFooter:`KFXqYa_heatmapFooter`,heatmapGrid:`KFXqYa_heatmapGrid`,heatmapHalf:`KFXqYa_heatmapHalf`,heatmapHover:`KFXqYa_heatmapHover`,heatmapLegend:`KFXqYa_heatmapLegend`,heatmapRangeButton:`KFXqYa_heatmapRangeButton`,heatmapRangeButtonActive:`KFXqYa_heatmapRangeButtonActive`,heatmapRangeSwitch:`KFXqYa_heatmapRangeSwitch`,heatmapYear:`KFXqYa_heatmapYear`,heatmapYearBody:`KFXqYa_heatmapYearBody`,heatmapYearCell:`KFXqYa_heatmapYearCell`,heatmapYearGrid:`KFXqYa_heatmapYearGrid`,heatmapYearMonth:`KFXqYa_heatmapYearMonth`,heatmapYearMonths:`KFXqYa_heatmapYearMonths`,heatmapYearScroll:`KFXqYa_heatmapYearScroll`,heatmapYearWeekday:`KFXqYa_heatmapYearWeekday`,heatmapYearWeekdays:`KFXqYa_heatmapYearWeekdays`,hero:`KFXqYa_hero`,heroCurrency:`KFXqYa_heroCurrency`,heroGauge:`KFXqYa_heroGauge`,heroGaugeArc:`KFXqYa_heroGaugeArc`,heroGaugeArcOver:`KFXqYa_heroGaugeArcOver`,heroGaugeCenter:`KFXqYa_heroGaugeCenter`,heroGaugeDial:`KFXqYa_heroGaugeDial`,heroGaugeLabel:`KFXqYa_heroGaugeLabel`,heroGaugeRemain:`KFXqYa_heroGaugeRemain`,heroGaugeRemainOver:`KFXqYa_heroGaugeRemainOver`,heroGaugeSub:`KFXqYa_heroGaugeSub`,heroGaugeSvg:`KFXqYa_heroGaugeSvg`,heroGaugeTrack:`KFXqYa_heroGaugeTrack`,heroLabel:`KFXqYa_heroLabel`,heroMain:`KFXqYa_heroMain`,heroMeta:`KFXqYa_heroMeta`,heroReadout:`KFXqYa_heroReadout`,heroSide:`KFXqYa_heroSide`,heroSideItem:`KFXqYa_heroSideItem`,heroSideLabel:`KFXqYa_heroSideLabel`,heroSideSpacer:`KFXqYa_heroSideSpacer`,heroSideValue:`KFXqYa_heroSideValue`,heroTop:`KFXqYa_heroTop`,heroValue:`KFXqYa_heroValue`,inp:`KFXqYa_inp`,kindBadge:`KFXqYa_kindBadge`,kindBadgeRelay:`KFXqYa_kindBadgeRelay`,kindBadgeUnknown:`KFXqYa_kindBadgeUnknown`,kpiDetail:`KFXqYa_kpiDetail`,kpiGreen:`KFXqYa_kpiGreen`,kpiGrid:`KFXqYa_kpiGrid`,kpiLabel:`KFXqYa_kpiLabel`,kpiTile:`KFXqYa_kpiTile`,kpiValue:`KFXqYa_kpiValue`,kpiZone:`KFXqYa_kpiZone`,kpiZoneHead:`KFXqYa_kpiZoneHead`,kpiZoneLabel:`KFXqYa_kpiZoneLabel`,metricCell:`KFXqYa_metricCell`,metricGrid:`KFXqYa_metricGrid`,metricLabel:`KFXqYa_metricLabel`,metricValue:`KFXqYa_metricValue`,metricValueSuccess:`KFXqYa_metricValueSuccess`,modalFooter:`KFXqYa_modalFooter`,modelCell:`KFXqYa_modelCell`,modelDot:`KFXqYa_modelDot`,modelName:`KFXqYa_modelName`,modelProvider:`KFXqYa_modelProvider`,modelRowActive:`KFXqYa_modelRowActive`,modelRowFocusable:`KFXqYa_modelRowFocusable`,modelTable:`KFXqYa_modelTable`,na:`KFXqYa_na`,numCol:`KFXqYa_numCol`,offPeak:`KFXqYa_offPeak`,panel:`KFXqYa_panel`,panelHead:`KFXqYa_panelHead`,panelHeadControls:`KFXqYa_panelHeadControls`,panelHint:`KFXqYa_panelHint`,panelTitle:`KFXqYa_panelTitle`,peak:`KFXqYa_peak`,peakAlertIn:`KFXqYa_peakAlertIn`,peakCard:`KFXqYa_peakCard`,peakCardCenter:`KFXqYa_peakCardCenter`,peakCardCorner:`KFXqYa_peakCardCorner`,peakCardOff:`KFXqYa_peakCardOff`,peakCardPeak:`KFXqYa_peakCardPeak`,peakClose:`KFXqYa_peakClose`,peakCount:`KFXqYa_peakCount`,peakCountPrimary:`KFXqYa_peakCountPrimary`,peakCountSuccess:`KFXqYa_peakCountSuccess`,peakDesc:`KFXqYa_peakDesc`,peakDot:`KFXqYa_peakDot`,peakDotPrimary:`KFXqYa_peakDotPrimary`,peakDotSuccess:`KFXqYa_peakDotSuccess`,peakHead:`KFXqYa_peakHead`,peakTag:`KFXqYa_peakTag`,peakTagPrimary:`KFXqYa_peakTagPrimary`,peakTagSuccess:`KFXqYa_peakTagSuccess`,perfBar:`KFXqYa_perfBar`,perfChip:`KFXqYa_perfChip`,perfChipDot:`KFXqYa_perfChipDot`,perfChipOff:`KFXqYa_perfChipOff`,perfChips:`KFXqYa_perfChips`,planTag:`KFXqYa_planTag`,planTagBadge:`KFXqYa_planTagBadge`,plgDesc:`KFXqYa_plgDesc`,plgGrid:`KFXqYa_plgGrid`,plgHead:`KFXqYa_plgHead`,plgIcon:`KFXqYa_plgIcon`,plgItem:`KFXqYa_plgItem`,plgLabel:`KFXqYa_plgLabel`,plgLink:`KFXqYa_plgLink`,plgName:`KFXqYa_plgName`,plgNameRow:`KFXqYa_plgNameRow`,plgTag:`KFXqYa_plgTag`,plgTitle:`KFXqYa_plgTitle`,plgVal:`KFXqYa_plgVal`,popDot:`KFXqYa_popDot`,popDotDirect:`KFXqYa_popDotDirect`,popDotNeutral:`KFXqYa_popDotNeutral`,popDotSub:`KFXqYa_popDotSub`,popHead:`KFXqYa_popHead`,popModel:`KFXqYa_popModel`,popModelLabel:`KFXqYa_popModelLabel`,popModelName:`KFXqYa_popModelName`,popModelRow:`KFXqYa_popModelRow`,popModelStatus:`KFXqYa_popModelStatus`,popModelStatusLow:`KFXqYa_popModelStatusLow`,popTagPrimary:`KFXqYa_popTagPrimary`,popTagSub:`KFXqYa_popTagSub`,popTitle:`KFXqYa_popTitle`,prog:`KFXqYa_prog`,progFill:`KFXqYa_progFill`,providerGroup:`KFXqYa_providerGroup`,providerGroupBadge:`KFXqYa_providerGroupBadge`,providerGroupBalance:`KFXqYa_providerGroupBalance`,providerGroupBalanceLabel:`KFXqYa_providerGroupBalanceLabel`,providerGroupCost:`KFXqYa_providerGroupCost`,providerGroupCostLabel:`KFXqYa_providerGroupCostLabel`,providerGroupCostValue:`KFXqYa_providerGroupCostValue`,providerGroupHead:`KFXqYa_providerGroupHead`,providerGroupList:`KFXqYa_providerGroupList`,providerGroupMeta:`KFXqYa_providerGroupMeta`,providerGroupName:`KFXqYa_providerGroupName`,providerGroupRecharge:`KFXqYa_providerGroupRecharge`,providerGroupTitle:`KFXqYa_providerGroupTitle`,railButton:`KFXqYa_railButton`,rangeButton:`KFXqYa_rangeButton`,rangeButtonActive:`KFXqYa_rangeButtonActive`,rangeToggle:`KFXqYa_rangeToggle`,rdo:`KFXqYa_rdo`,rdoChevron:`KFXqYa_rdoChevron`,rdoChevronOpen:`KFXqYa_rdoChevronOpen`,rdoDot:`KFXqYa_rdoDot`,rdoLabel:`KFXqYa_rdoLabel`,rdoRow:`KFXqYa_rdoRow`,rdoSelect:`KFXqYa_rdoSelect`,reconcileDismiss:`KFXqYa_reconcileDismiss`,reconcileIcon:`KFXqYa_reconcileIcon`,reconcileNotice:`KFXqYa_reconcileNotice`,reconcileText:`KFXqYa_reconcileText`,rounds:`KFXqYa_rounds`,roundsAxis:`KFXqYa_roundsAxis`,roundsBar:`KFXqYa_roundsBar`,roundsBarCol:`KFXqYa_roundsBarCol`,roundsBarColOff:`KFXqYa_roundsBarColOff`,roundsBarColPeak:`KFXqYa_roundsBarColPeak`,roundsBarFlagged:`KFXqYa_roundsBarFlagged`,roundsBarLabel:`KFXqYa_roundsBarLabel`,roundsBarWrap:`KFXqYa_roundsBarWrap`,roundsBars:`KFXqYa_roundsBars`,roundsEmpty:`KFXqYa_roundsEmpty`,roundsFlagMark:`KFXqYa_roundsFlagMark`,sessionChildRow:`KFXqYa_sessionChildRow`,sessionGroupRow:`KFXqYa_sessionGroupRow`,setCard:`KFXqYa_setCard`,setCardDesc:`KFXqYa_setCardDesc`,setCardHead:`KFXqYa_setCardHead`,setCardMeta:`KFXqYa_setCardMeta`,setCardTitle:`KFXqYa_setCardTitle`,setCell:`KFXqYa_setCell`,setGrid2:`KFXqYa_setGrid2`,setGrid3:`KFXqYa_setGrid3`,shareDot:`KFXqYa_shareDot`,shareItem:`KFXqYa_shareItem`,shareLegend:`KFXqYa_shareLegend`,shareSeg:`KFXqYa_shareSeg`,shareSegAssistant:`KFXqYa_shareSegAssistant`,shareSegOff:`KFXqYa_shareSegOff`,shareSegPeak:`KFXqYa_shareSegPeak`,shareSegTool:`KFXqYa_shareSegTool`,shareSegUser:`KFXqYa_shareSegUser`,shareTrack:`KFXqYa_shareTrack`,shareValue:`KFXqYa_shareValue`,siteKindDirect:`KFXqYa_siteKindDirect`,siteKindSite:`KFXqYa_siteKindSite`,siteKindTag:`KFXqYa_siteKindTag`,siteKindUnknown:`KFXqYa_siteKindUnknown`,siteRow:`KFXqYa_siteRow`,siteRowCalls:`KFXqYa_siteRowCalls`,siteRowCallsLow:`KFXqYa_siteRowCallsLow`,siteRowCost:`KFXqYa_siteRowCost`,siteRowMeta:`KFXqYa_siteRowMeta`,siteRowName:`KFXqYa_siteRowName`,siteRowTitle:`KFXqYa_siteRowTitle`,soon:`KFXqYa_soon`,staleNotice:`KFXqYa_staleNotice`,subscriptionAuto:`KFXqYa_subscriptionAuto`,subscriptionCard:`KFXqYa_subscriptionCard`,subscriptionExhausted:`KFXqYa_subscriptionExhausted`,subscriptionFill:`KFXqYa_subscriptionFill`,subscriptionFillOver:`KFXqYa_subscriptionFillOver`,subscriptionFillWarn:`KFXqYa_subscriptionFillWarn`,subscriptionGrid:`KFXqYa_subscriptionGrid`,subscriptionHead:`KFXqYa_subscriptionHead`,subscriptionMeta:`KFXqYa_subscriptionMeta`,subscriptionName:`KFXqYa_subscriptionName`,subscriptionPct:`KFXqYa_subscriptionPct`,subscriptionPlan:`KFXqYa_subscriptionPlan`,subscriptionReset:`KFXqYa_subscriptionReset`,subscriptionStatus:`KFXqYa_subscriptionStatus`,subscriptionTier:`KFXqYa_subscriptionTier`,subscriptionTrack:`KFXqYa_subscriptionTrack`,subscriptionWindow:`KFXqYa_subscriptionWindow`,subscriptionWindowLabel:`KFXqYa_subscriptionWindowLabel`,switch:`KFXqYa_switch`,switchKnob:`KFXqYa_switchKnob`,switchOn:`KFXqYa_switchOn`,tabButton:`KFXqYa_tabButton`,tabButtonActive:`KFXqYa_tabButtonActive`,tabNav:`KFXqYa_tabNav`,tabPanel:`KFXqYa_tabPanel`,tabPanelIn:`KFXqYa_tabPanelIn`,tableScroll:`KFXqYa_tableScroll`,tokenModelBar:`KFXqYa_tokenModelBar`,tokenModelPartIn:`KFXqYa_tokenModelPartIn`,tokenModelPartOut:`KFXqYa_tokenModelPartOut`,tokenModelParts:`KFXqYa_tokenModelParts`,tokenModelShareRow:`KFXqYa_tokenModelShareRow`,tokenPanel:`KFXqYa_tokenPanel`,trigger:`KFXqYa_trigger`,triggerBudgetHot:`KFXqYa_triggerBudgetHot`,triggerBudgetOver:`KFXqYa_triggerBudgetOver`,triggerBudgetPulse:`KFXqYa_triggerBudgetPulse`,triggerGaugeArc:`KFXqYa_triggerGaugeArc`,triggerGaugeNeedle:`KFXqYa_triggerGaugeNeedle`,triggerIcon:`KFXqYa_triggerIcon`,triggerLabel:`KFXqYa_triggerLabel`,triggerMain:`KFXqYa_triggerMain`,triggerMetric:`KFXqYa_triggerMetric`,triggerPop:`KFXqYa_triggerPop`,triggerPopEmpty:`KFXqYa_triggerPopEmpty`,triggerPopShown:`KFXqYa_triggerPopShown`,triggerPopSwitchCount:`KFXqYa_triggerPopSwitchCount`,triggerPopSwitcher:`KFXqYa_triggerPopSwitcher`,triggerPrimary:`KFXqYa_triggerPrimary`,triggerScan:`KFXqYa_triggerScan`,triggerSpark:`KFXqYa_triggerSpark`,triggerSparkBar:`KFXqYa_triggerSparkBar`,triggerSparkBreath:`KFXqYa_triggerSparkBreath`,triggerSparkHot:`KFXqYa_triggerSparkHot`,triggerValueRow:`KFXqYa_triggerValueRow`,triggerWrap:`KFXqYa_triggerWrap`,triggerYen:`KFXqYa_triggerYen`,ubAlert:`KFXqYa_ubAlert`,ubAlertLeft:`KFXqYa_ubAlertLeft`,ubAlertNote:`KFXqYa_ubAlertNote`,ubCard:`KFXqYa_ubCard`,ubCardControlGroup:`KFXqYa_ubCardControlGroup`,ubCardHead:`KFXqYa_ubCardHead`,ubCardSub:`KFXqYa_ubCardSub`,ubCardTitle:`KFXqYa_ubCardTitle`,ubChipLabel:`KFXqYa_ubChipLabel`,ubChipOff:`KFXqYa_ubChipOff`,ubChipPeak:`KFXqYa_ubChipPeak`,ubExtraName:`KFXqYa_ubExtraName`,ubExtraNote:`KFXqYa_ubExtraNote`,ubExtraRow:`KFXqYa_ubExtraRow`,ubModel:`KFXqYa_ubModel`,ubModelName:`KFXqYa_ubModelName`,ubNotes:`KFXqYa_ubNotes`,ubNotesDesc:`KFXqYa_ubNotesDesc`,ubNotesItem:`KFXqYa_ubNotesItem`,ubNotesTerm:`KFXqYa_ubNotesTerm`,ubRate:`KFXqYa_ubRate`,ubSearch:`KFXqYa_ubSearch`,ubTable:`KFXqYa_ubTable`,ubTablewrap:`KFXqYa_ubTablewrap`,ubTag:`KFXqYa_ubTag`,ubTagAlert:`KFXqYa_ubTagAlert`,ubTagError:`KFXqYa_ubTagError`,ubTagNeutral:`KFXqYa_ubTagNeutral`,ubTagPromo:`KFXqYa_ubTagPromo`,ubTagSuccess:`KFXqYa_ubTagSuccess`,uncataloguedTag:`KFXqYa_uncataloguedTag`,unpricedHint:`KFXqYa_unpricedHint`,userPriceBody:`KFXqYa_userPriceBody`,userPriceCheck:`KFXqYa_userPriceCheck`,userPriceField:`KFXqYa_userPriceField`,userPriceInput:`KFXqYa_userPriceInput`,userPriceInputNum:`KFXqYa_userPriceInputNum`,userPriceLineMeta:`KFXqYa_userPriceLineMeta`,userPricePriceLine:`KFXqYa_userPricePriceLine`,userPriceRow:`KFXqYa_userPriceRow`,vendorLetter:`KFXqYa_vendorLetter`};let we=`usageBilling`,Te={title:`使用统计`,cost:`费用`,todayCost:`今日费用`,monthCost:`本月费用`,yearCost:`本年费用`,monthProjected:`本月预计`,liveTurn:`本轮`,liveSession:`会话`,calls:`调用`,cacheHitRate:`缓存命中率`,tokens:`Token`,inputTokens:`输入`,outputTokens:`输出`,avgCost:`平均成本`,kpiRange:`统计范围`,avgRangeToday:`今日`,avgRange7d:`近7天`,avgRangeWeek:`本周`,avgRangeMonth:`本月`,avgRangeAll:`累计`,trend:`每日费用与调用趋势`,trend7d:`7 天`,trend30d:`30 天`,trendMetric:`趋势指标`,trendMetricCost:`费用`,trendMetricTokens:`Token`,pricingSearch:`搜索模型 / 厂商`,bandPinHint:`点击固定到输入框`,trendEmpty:`暂无趋势数据`,trendTotal:`总计`,roundsUnit:`轮`,healthModelsLive:`{n} 模型可用`,healthVendorsDown:`{n} 厂商失效`,healthVendorsUnavailable:`{n} 厂商不可用`,budget:`本月预算`,budgetRemain:`剩余预算`,budgetAmount:`预算金额`,budgetSummary:`本月已用 {used} / {total};达到 80% 时提醒,达到 100% 时红色脉冲警示`,sessions:`会话明细`,sessionTitle:`标题`,lastActive:`最后活跃`,sessionOverflow:`仅显示花费前 {limit} 个,共 {total} 个会话`,budgetTierBody:`本月花费 {cost} 已达预算 {budget} 的 {pct}%`,models:`模型计费明细`,providerBilling:`提供商计费与订阅`,channelUnknown:`未知路由`,directTag:`直连`,relayTag:`中转`,unknownTag:`未知`,planCountUnit:`套餐`,actual:`实际`,pricing:`模型单价表`,input:`输入`,output:`输出`,cacheHit:`缓存命中`,peak:`高峰`,offPeak:`低谷`,flat:`全天统一`,band:`时段`,close:`关闭`,footer:`每 30s 自动轮询 · 仅统计本机 dsh 会话`,footerCredit:`dsh-ui-usage-billing {version} · MIT`,lastUpdated:`数据更新于`,noData:`暂无计费数据`,todayRate:`今日汇率`,rateLive:`实时`,rateBuiltin:`内置`,pricingSyncedAt:`上次同步`,pricingSyncNow:`立即同步`,pricingSyncing:`同步中…`,promoBadge:`促`,promoUntil:`促销价至 {date},之后自动恢复刊例价`,promoOpenEnded:`厂商未公布截止时间,当前按折扣计价;公告截止后自动恢复刊例价`,pricingTip:`DeepSeek 现行刊例:V4.1 Flash 谷档 未命中 ¥1 / 缓存命中 ¥0.02 / 输出 ¥4;V4 Pro 谷档 未命中 ¥4.5 / 缓存命中 ¥0.15 / 输出 ¥13.5;峰价均为谷价 × 2。工作日 9-12 / 14-18 为高峰价,其余时段(含周末全天)为低谷价;费用按调用时刻计。`,pricingUnit:`单位:人民币 / 每百万 Token`,pricingNotes:`计价说明`,ubPeak:`峰`,ubOff:`谷`,ubStd:`标准`,peakBand:`峰谷分带`,pricingSource:`数据来源`,noteCache:`命中部分按缓存价计费,显著降低成本。`,noteBand:`高峰与空闲时段单价不同,空闲约半价。`,noteSource:`价格来自实时汇率 + 模型定价目录,未收录模型按 0 计并提示。`,balance:`余额`,recharge:`充值`,rechargeHint:`打开该厂商官方平台的充值页`,balanceUnconfigured:`未配置`,balanceUnauthorized:`密钥无效`,balanceUnreachable:`查询失败`,uncatalogued:`未收录`,estimatedPricing:`估算价`,balanceDays:`约可撑 {days} 天`,balanceLowBody:`{name} 余额 {balance},约可撑 {days} 天,请及时充值`,reconcileDrift:`系统监控到{provider}官方余额变动 {spent},本面板记录 {today},差额通常由其它工具或 API 的消耗所致`,reconcileDismiss:`知道了`,subscriptionNotConfigured:`未配置密钥`,subscriptionUnauthorized:`密钥无效`,subscriptionUnavailable:`查询失败`,subscriptionInvalid:`响应异常`,subscriptionRateLimited:`触发限流`,subscriptionSession:`本次`,subscriptionWeekly:`本周`,subscriptionMonthly:`本月`,subscriptionBilling:`计费周期`,subscriptionRemaining:`剩余 {pct}%`,subscriptionExhausted:`已用尽`,subscriptionReset:`{date} 重置`,subscriptionNoApi:`该厂商暂未提供用量查询接口`,floatWindow:`模型用量悬浮窗`,floatModeCombined:`综合`,floatModeSubscription:`订阅卡`,floatMode:`展示模式`,floatTargets:`订阅目标`,floatWindowHint:`悬浮在左下角计费卡上的用量速览;综合=当前样式,订阅卡=每次展示一张订阅额度卡(可切换)。`,floatPrimaryToday:`今日`,floatPrimaryWeek:`本周`,floatPrimaryMonth:`本月`,cardDisplay:`计费卡显示`,cardDisplayHint:`切换左下角计费卡的主指标与主数字统计范围(迷你柱跟随视角,悬浮窗不受影响)。`,cardMetric:`主指标`,cardMetricMoney:`花费金额`,cardMetricTokens:`Token 消耗`,cardSpan:`统计范围`,cardSpanDay:`日`,cardSpanWeek:`周`,cardSpanMonth:`月`,floatNoTargets:`未指定订阅通道,请在设置中勾选要展示的订阅。`,floatNoTargetsHint:`暂无可选的订阅通道。`,subscriptionsStale:`订阅额度刷新失败,以下为缓存数据`,staleLedgerNotice:`{count} 个会话出自旧版算法存档(日志已删,无法重算),模型归属可能有误差`,unreadableNotice:`{count} 个会话因会话格式版本较新暂未统计(原始数据仍在,升级 dsh 兼容修复后自动恢复)`,tokenCacheWrite:`写入`,toolRank:`工具排行`,toolName:`工具`,userPrices:`自定义单价`,userPricesHint:`为未收录或变价模型填入实付单价,总览与日趋势按此重估;模型可用下拉候选(目录键或模型 id);来源留空=该模型默认价,填入中转站域名=仅该来源的同名模型用此价(协议可省);低谷价三栏填后按峰/谷混合估算,留空=平档`,userPriceSave:`保存`,userPriceModel:`模型`,userPriceSource:`来源(中转站域名)`,userPriceSourceHint:`留空=默认价,或 https://api.中转站.com`,userPriceOffPeak:`低谷价`,userPriceNormal:`标准价`,userPriceCurrency:`币种`,userPriceAdd:`新增`,userPriceRemoveSelected:`删除所选`,userPriceSelect:`选择此行`,sessionStaleBadge:`旧版统计`,sessionUntitled:`未命名会话`,heatmapLess:`少`,heatmapMore:`多`,currency:`币种`,currencyCny:`人民币`,currencyUsd:`美元`,currencyEur:`欧元`,language:`界面语言`,heatmap:`用量热力图`,rounds:`每轮费用`,roundsHint:`最近 {count} 轮 · 柱顶为金额 · 底色为峰谷时段`,anomaly:`成本突增`,model:`模型`,thModel:`模型名称`,thInputMiss:`输入缓存未命中`,thInputHit:`输入缓存命中`,costAbbr:`费用`,tabOverview:`概览`,tabTrends:`趋势`,tabProviders:`账单`,tabPricing:`费率`,tabSettings:`设置`,budgetHint:`设置月度上限,用于本月预计与超支分段提醒`,peakAlertHint:`在切档前弹窗提醒,可选同步系统通知`,peakAlertDescPeak:`即将进入高峰时段,价格将上调,请提前安排长任务`,peakAlertDescOff:`即将进入平价时段,价格减半,适合运行大批量任务`,peakAlertDescPeakZhipu:`即将进入高峰时段(工作日 14:00–18:00),Coding Plan 额度将按基础积分全额抵扣`,peakAlertDescOffZhipu:`即将进入非高峰时段,Coding Plan 额度按基础积分 5 折抵扣`,export:`导出`,exportCsvDay:`按日 CSV`,exportCsvSession:`按会话 CSV`,exportJson:`全量 JSON`,peakShare:`峰谷时段占比`,peakSharePerCall:`按调用时刻精确判档`,offPeakSavings:`挪谷可省约 {amount}`,perfMax:`最大 TTFT`,weekCost:`本周消耗金额`,roleCost:`费用构成`,roleUser:`用户输入`,roleAssistant:`助手输出`,roleTool:`工具结果`,roleHint:`估算:输出按实测计价,输入按消息长度摊分`,tierPeak:`峰时`,tierOff:`平价`,tierToPeak:`后转峰时`,tierToOff:`后转平价`,tierAlertEnterPeak:`{minutes} 分钟后进入峰时(DeepSeek 高峰价 ×2),不急的调用可稍等`,tierAlertEnterOff:`{minutes} 分钟后进入平价(价格减半)`,tierAlertEnterPeakZhipu:`{minutes} 分钟后进入智谱高峰时段,Coding Plan 额度将全额抵扣`,tierAlertEnterOffZhipu:`{minutes} 分钟后进入智谱非高峰时段,额度按基础积分 5 折抵扣`,peakAlertTitlePeak:`即将进入高峰价`,peakAlertTitleOff:`即将进入平价`,peakAlert:`峰谷切换提醒`,peakAlertLeadMin:`提前量(分钟)`,peakAlertPos:`位置`,peakAlertMode:`提醒模式`,peakAlertPosCorner:`右下角`,peakAlertPosCenter:`屏幕居中`,peakAlertModePeak:`仅进入峰时`,peakAlertModeOff:`仅进入平价`,peakAlertModeBoth:`峰与谷都提醒`,peakAlertWebNotify:`同时发系统通知`,peakAlertPreview:`预览提醒`,planTypeCode:`订阅制`,planTypeToken:`按量`,subscriptionFeePerMonth:`{amount}/月`,triggerToday:`今日消耗金额`,triggerMonth:`当月消耗金额`,triggerMonthTokens:`当月消耗 Token`,triggerTodayTokens:`今日消耗 Token`,triggerWeekTokens:`本周消耗 Token`,subscriptionTag:`订阅`,free:`免费`,perfSamples:`样本`,perfTtft:`首字延时`,perfP50:`P50`,perfP90:`P90`,perfTps:`生成速度`,perfLatency:`总延迟`,perfEstimated:`估算样本`,perfEmpty:`暂无性能数据`,perfTpsUnit:`tok/s`,perfTitle:`性能`,perfHint:`按模型与按小时聚合;估算样本为工具续写步骤`,perfAll:`全选`,perfChartEmpty:`未选择模型或该指标暂无数据`,heatmapYear:`年`,heatmapHalf:`半年`,heatmapMonth:`月`,metricCost:`费用`,metricTokens:`Token`,heatmapTotal:`合计`,activeDays:`活跃天数`,streakDays:`连续使用`,subscriptionAutoDetect:`自动识别`,pluginAuthor:`作者`,pluginRepository:`仓库`,pluginNpm:`npm`,pluginLicense:`许可证`,tabToken:`用量`,tokenExport:`导出 Token`,tokenExportCsv:`按日 Token CSV`,tokenReasoningShare:`思考占比`,tokenReasoningShort:`思考`,tokenIo:`输入/输出比`,tokenPeak:`峰值日`,tokenDaily:`每日 Token`,tokenByModel:`模型 Token`,tokenMiss:`输入(缓存未命中)`,tokenHit:`输入(缓存命中)`,tokenOutput:`输出`,tokenViewStructure:`按结构`,tokenViewModel:`按模型`,tokenHitShort:`命中`,tokenMissShort:`未命中`,tokenTotal:`总 Token`,tokenShare:`占比`,usageStatsTool:`注入用量查询工具`,usageStatsToolHint:`让模型可在对话中查询用量/费用;会占用模型每次请求的上下文,coding 场景建议关闭(改后需重载应用生效)`,balanceGranted:`赠金余额`,balanceTopped:`充值余额`,balanceDaily:`日均消耗`,balanceDaysLong:`约可撑`,balanceDaysUnit:`天`,popTodayModel:`主力消耗模型余额`,popTitle:`用量速览`,popNoConsumption:`暂无消耗`,popDirectLead:`直联`,popSubLead:`订阅`,unpricedHint:`{count} 个模型未收录计价,费用已按 0 计`,searchEstimateHint:`含 {count} 次联网搜索请求的估算费用(每次约 {each};日志无用量事件,按次估算,可在配置 searchCallEstimateCny 调整或关闭)`,siteListDisplay:`中转站列表`,siteListDisplayHint:`隐藏「未识别」占位条目,净化中转站额度列表`,liveCostBar:`平价消耗胶囊`,liveCostBarHint:`输入框旁的即时代费条,悬浮可看详情`,liveCostBarPosition:`位置`,liveCostBarPosBelow:`输入框下方`,liveCostBarPosAbove:`输入框上方`,liveCostBarPosToolbar:`输入框内部`,exportCsvSite:`按站点 CSV`,panelRelayQuota:`中转站额度`,relayBalance:`余额`,relayNoQuota:`未读出额度`,relayWindowUsed:`已用`,relayKindNewApi:`New API`,relayKindSub2Api:`Sub2API`,relayKindUnknown:`未识别`},Ee={title:`Usage`,cost:`Cost`,todayCost:`Today`,monthCost:`This month`,yearCost:`This year`,monthProjected:`Projected`,liveTurn:`Turn`,liveSession:`Session`,calls:`Calls`,cacheHitRate:`Cache Hit`,tokens:`Tokens`,inputTokens:`Input`,outputTokens:`Output`,avgCost:`Avg cost`,kpiRange:`Range`,avgRangeToday:`Today`,avgRange7d:`7d`,avgRangeWeek:`Week`,avgRangeMonth:`Month`,avgRangeAll:`All`,trend:`Daily cost & calls`,trend7d:`7D`,trend30d:`30D`,trendMetric:`Trend metric`,trendMetricCost:`Cost`,trendMetricTokens:`Tokens`,pricingSearch:`Search model or vendor`,bandPinHint:`click to pin to the composer`,trendEmpty:`No trend data yet`,trendTotal:`Total`,roundsUnit:`turns`,healthModelsLive:`{n} models live`,healthVendorsDown:`{n} vendors down`,healthVendorsUnavailable:`{n} vendors unavailable`,budget:`Monthly budget`,budgetRemain:`Remaining`,budgetAmount:`Budget amount`,budgetSummary:`Used {used} / {total} this month; warn at 80%, pulse red at 100%`,sessions:`Sessions`,sessionTitle:`Title`,lastActive:`Last active`,sessionOverflow:`Top {limit} of {total} sessions by cost`,budgetTierBody:`This month {cost} reached {pct}% of the budget {budget}`,models:`Model billing`,providerBilling:`Provider billing & subscriptions`,channelUnknown:`Unknown routes`,directTag:`Direct`,relayTag:`Relay`,unknownTag:`Unknown`,planCountUnit:`plan(s)`,actual:`Actual`,pricing:`Model pricing`,input:`Input`,output:`Output`,cacheHit:`Cache hit`,peak:`Peak`,offPeak:`Off-peak`,flat:`Flat`,band:`Band`,close:`Close`,footer:`Polls every 30s · local dsh sessions only`,footerCredit:`dsh-ui-usage-billing {version} · MIT`,lastUpdated:`Updated`,noData:`No billing data yet`,todayRate:`Today rate`,rateLive:`Live`,rateBuiltin:`Built-in`,pricingSyncedAt:`Synced`,pricingSyncNow:`Sync now`,pricingSyncing:`Syncing…`,promoBadge:`Promo`,promoUntil:`Promo price until {date}, then list price resumes automatically`,promoOpenEnded:`End date not announced; billed at the discounted rate until further notice, then list price resumes`,pricingTip:`DeepSeek list rates: V4.1 Flash off-peak ¥1 miss / ¥0.02 cache-hit / ¥4 output; V4 Pro off-peak ¥4.5 miss / ¥0.15 cache-hit / ¥13.5 output; peak = 2× off-peak. Weekday 9-12 / 14-18 bills at peak, all other times (weekends included) at off-peak; billed at call time.`,pricingUnit:`Unit: CNY / per 1M tokens`,pricingNotes:`Pricing notes`,ubPeak:`Peak`,ubOff:`Off`,ubStd:`Std`,peakBand:`Peak/off-peak band`,pricingSource:`Data source`,noteCache:`Cache hits are billed at the cache rate, cutting cost.`,noteBand:`Peak and off-peak prices differ; off-peak is roughly half price.`,noteSource:`Prices come from the live rate + model catalog; unlisted models count as 0 and are flagged.`,balance:`Balance`,recharge:`Top up`,rechargeHint:`Open the vendor's official top-up page`,balanceUnconfigured:`Not set`,balanceUnauthorized:`Bad key`,balanceUnreachable:`Unavailable`,uncatalogued:`Not catalogued`,estimatedPricing:`Estimated`,balanceDays:`~{days} days left`,balanceLowBody:`{name} balance {balance}, ~{days} days left, please top up`,reconcileDrift:`Detected {provider} official balance moved {spent}, this panel recorded {today}; the gap usually comes from other tools or APIs consuming too`,reconcileDismiss:`Got it`,subscriptionNotConfigured:`Key not set`,subscriptionUnauthorized:`Bad key`,subscriptionUnavailable:`Unavailable`,subscriptionInvalid:`Bad response`,subscriptionRateLimited:`Rate limited`,subscriptionSession:`Current`,subscriptionWeekly:`Weekly`,subscriptionMonthly:`Monthly`,subscriptionBilling:`Billing`,subscriptionRemaining:`{pct}% left`,subscriptionExhausted:`Exhausted`,subscriptionReset:`Resets {date}`,subscriptionNoApi:`Provider does not offer a usage API`,floatWindow:`Model usage popover`,floatModeCombined:`Combined`,floatModeSubscription:`Subscription card`,floatMode:`Display mode`,floatTargets:`Targets`,floatWindowHint:`Usage summary floating on the footer card; Combined=current style, Subscription cards=one quota card at a time (switchable).`,floatPrimaryToday:`Today`,floatPrimaryWeek:`Week`,floatPrimaryMonth:`Month`,cardDisplay:`Billing card`,cardDisplayHint:`Switch the bottom-left billing card between cost and token usage, and pick the figure range (sparkline follows; the popover is unaffected).`,cardMetric:`Main metric`,cardMetricMoney:`Cost`,cardMetricTokens:`Token usage`,cardSpan:`Range`,cardSpanDay:`Day`,cardSpanWeek:`Week`,cardSpanMonth:`Month`,floatNoTargets:`No subscription selected — pick some in Settings.`,floatNoTargetsHint:`No subscription channel available.`,subscriptionsStale:`Subscription refresh failed — showing cached data`,staleLedgerNotice:`{count} sessions use legacy-algorithm archives (logs deleted); attribution may be off`,unreadableNotice:`{count} sessions are not counted yet (newer session format; data is intact and restores automatically after a dsh fix)`,tokenCacheWrite:`written`,toolRank:`Tool calls`,toolName:`Tool`,userPrices:`Custom prices`,userPricesHint:`Enter actual per-1M-token prices; main views are re-costed. Pick a model key from the dropdown candidates. Leave source empty for the model default, or enter a relay origin (protocol optional) to price only that source. Fill all three off-peak fields for peak/off-peak estimation; leave them empty for flat pricing.`,userPriceSave:`Save`,userPriceModel:`Model`,userPriceSource:`Source (relay origin)`,userPriceSourceHint:`Empty = default; e.g. https://api.relay.com`,userPriceOffPeak:`Off-peak price`,userPriceNormal:`Standard price`,userPriceCurrency:`Currency`,userPriceAdd:`Add`,userPriceRemoveSelected:`Remove selected`,userPriceSelect:`Select this row`,sessionStaleBadge:`legacy`,sessionUntitled:`Untitled session`,heatmapLess:`Less`,heatmapMore:`More`,currency:`Currency`,currencyCny:`CNY`,currencyUsd:`USD`,currencyEur:`EUR`,language:`Interface language`,heatmap:`Usage heatmap`,rounds:`Cost per turn`,roundsHint:`Last {count} rounds · bar tops show amount · fill = peak/off-peak`,anomaly:`Cost spike`,model:`Model`,thModel:`Model name`,thInputMiss:`Input (cache miss)`,thInputHit:`Input (cache hit)`,costAbbr:`cost`,tabOverview:`Overview`,tabTrends:`Trends`,tabProviders:`Bills`,tabPricing:`Rates`,tabSettings:`Settings`,budgetHint:`Set a monthly cap for projections and tier alerts`,peakAlertHint:`Alert before a tier switch, optionally via system notification`,peakAlertDescPeak:`About to enter peak hours — prices rise, plan long tasks ahead`,peakAlertDescOff:`About to enter off-peak hours — price halves, ideal for large batches`,peakAlertDescPeakZhipu:`Peak hours soon (weekdays 14:00–18:00) — Coding Plan credits will be deducted at full rate`,peakAlertDescOffZhipu:`Off-peak soon — Coding Plan credits will be deducted at 50% of base credits`,export:`Export`,exportCsvDay:`Daily CSV`,exportCsvSession:`Sessions CSV`,exportJson:`Full JSON`,peakShare:`Peak vs off-peak`,peakSharePerCall:`per-call attribution, full history`,offPeakSavings:`Shift peak to off-peak: save ~{amount}`,perfMax:`Max TTFT`,weekCost:`This week's spend`,roleCost:`Cost breakdown`,roleUser:`User input`,roleAssistant:`Assistant output`,roleTool:`Tool results`,roleHint:`Estimated: output priced exactly, input split by message size`,tierPeak:`Peak`,tierOff:`Off-peak`,tierToPeak:`until peak`,tierToOff:`until off-peak`,tierAlertEnterPeak:`Peak pricing (2x) starts in {minutes} min — non-urgent calls can wait`,tierAlertEnterOff:`Off-peak pricing (50% off) starts in {minutes} min`,tierAlertEnterPeakZhipu:`Zhipu peak hours in {minutes} min — Coding Plan credits burn at full rate`,tierAlertEnterOffZhipu:`Zhipu off-peak in {minutes} min — credit burn drops to 50%`,peakAlertTitlePeak:`Peak pricing incoming`,peakAlertTitleOff:`Off-peak incoming`,peakAlert:`Peak/off-peak alert`,peakAlertLeadMin:`Lead time (min)`,peakAlertPos:`Position`,peakAlertMode:`Remind mode`,peakAlertPosCorner:`Bottom-right`,peakAlertPosCenter:`Center`,peakAlertModePeak:`Entering peak only`,peakAlertModeOff:`Entering off-peak only`,peakAlertModeBoth:`Both`,peakAlertWebNotify:`Also send system notification`,peakAlertPreview:`Preview alert`,planTypeCode:`Subscription`,planTypeToken:`Usage`,subscriptionFeePerMonth:`{amount}/mo`,triggerToday:`Today's spend`,triggerMonth:`This month's spend`,triggerMonthTokens:`This month's tokens`,triggerTodayTokens:`Today's tokens`,triggerWeekTokens:`This week's tokens`,subscriptionTag:`Plan`,free:`Free`,perfSamples:`Samples`,perfTtft:`TTFT`,perfP50:`P50`,perfP90:`P90`,perfTps:`Speed`,perfLatency:`Total latency`,perfEstimated:`Estimated`,perfEmpty:`No performance data yet`,perfTpsUnit:`tok/s`,perfTitle:`Performance`,perfHint:`Per model & per hour; estimated samples are tool-continuation steps`,perfAll:`All`,perfChartEmpty:`No model selected or no data for this metric`,heatmapYear:`Year`,heatmapHalf:`Half`,heatmapMonth:`Month`,metricCost:`Cost`,metricTokens:`Tokens`,heatmapTotal:`Total`,activeDays:`Active days`,streakDays:`Streak`,subscriptionAutoDetect:`Auto`,pluginAuthor:`Author`,pluginRepository:`Repository`,pluginNpm:`npm`,pluginLicense:`License`,tabToken:`Usage`,tokenExport:`Export tokens`,tokenExportCsv:`Daily token CSV`,tokenReasoningShare:`Reasoning share`,tokenReasoningShort:`reasoning`,tokenIo:`In/out ratio`,tokenPeak:`Peak day`,tokenDaily:`Daily tokens`,tokenByModel:`Tokens by model`,tokenMiss:`Input (cache miss)`,tokenHit:`Input (cache hit)`,tokenOutput:`Output`,tokenViewStructure:`Structure`,tokenViewModel:`By model`,tokenHitShort:`Hit`,tokenMissShort:`Miss`,tokenTotal:`Total tokens`,tokenShare:`Share`,usageStatsTool:`Inject usage-stats tool`,usageStatsToolHint:`Lets the model query usage/cost inside a conversation; it consumes context per request, so keep it off for coding (takes effect after a reload)`,balanceGranted:`Granted`,balanceTopped:`Topped up`,balanceDaily:`Daily burn`,balanceDaysLong:`~days left`,balanceDaysUnit:`days`,popTodayModel:`Main model balance`,popTitle:`Usage overview`,popNoConsumption:`No usage yet`,popDirectLead:`Direct`,popSubLead:`Subscription`,unpricedHint:`{count} models not priced; their cost counts as 0`,searchEstimateHint:`Includes estimated cost of {count} web-search requests (~{each} each; no usage events logged, per-call estimate; tune via searchCallEstimateCny)`,siteListDisplay:`Relay lists`,siteListDisplayHint:`Hide "unidentified" placeholder rows in the relay quota list`,liveCostBar:`Live cost capsule`,liveCostBarHint:`Live cost bar beside the composer; hover for details`,liveCostBarPosition:`Position`,liveCostBarPosBelow:`Below composer`,liveCostBarPosAbove:`Above composer`,liveCostBarPosToolbar:`Inside composer`,exportCsvSite:`By site CSV`,panelRelayQuota:`Relay quotas`,relayBalance:`Balance`,relayNoQuota:`No quota`,relayWindowUsed:`used`,relayKindNewApi:`New API`,relayKindSub2Api:`Sub2API`,relayKindUnknown:`Unknown`},De={"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`},commandcode:{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`}},Oe={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 I(e){return e===``?e:Oe[e]??e}function ke(e){let t=De[I(e)];return t?.type===`code`?t.tier:void 0}let Ae=[{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}],je,L,Me,R,Ne,z;function B(e){let t=/:\/\//.test(e)?e:`https://${e}`;try{return new URL(t).origin}catch{return e.trim().toLowerCase().replace(/\/+$/,``)}}function V(e,t){return B(e)===B(t)}function Pe(e){z=e.length>0?e:void 0}function Fe(){return z}function Ie(e){return mt(e)}function Le(e,t){let n=Re(e,t);if(n!==void 0)return{input:n.input,cacheHit:n.cacheHit,output:n.output,...n.currency===void 0?{}:{currency:n.currency},...n.offPeak===void 0?{}:{offPeak:n.offPeak}}}function Re(e,t){if(z===void 0)return;let n=Ie(e),r=G(n),i=e=>Ie(e.key)===n||G(e.key)===r;if(t!==void 0){for(let e of z)if(e.origin!==void 0&&e.origin!==``&&i(e)&&V(e.origin,t))return e}for(let e of z)if((e.origin===void 0||e.origin===``)&&i(e))return e}function ze(e){if(z===void 0)return;let t=Ie(e),n=G(t);return z.find(e=>e.origin!==void 0&&e.origin!==``&&(Ie(e.key)===t||G(e.key)===n))}function Be(e){je=typeof e.rate==`number`&&Number.isFinite(e.rate)&&e.rate>0?e.rate:void 0,L=typeof e.rateEur==`number`&&Number.isFinite(e.rateEur)&&e.rateEur>0?e.rateEur:void 0,Me=e.prices,R=e.extraModels}function Ve(e){Ne=e}function He(){return je??6.79}function Ue(){return L??7.71}function We(){return{rate:He(),live:je!==void 0}}function Ge(){return{rate:Ue(),live:L!==void 0}}let H=.5;function Ke(e){return e==null||!Number.isFinite(e)?`peak`:U(e,Xe,!0)}function U(e,t,n=!1){if(qe(e)||n&&Ye(e))return`offPeak`;let r=Math.floor(Qe(e)/6e4);for(let e=0;e+1<t.length;e+=2){let n=t[e]??0,i=t[e+1]??0;if(r>=n&&r<i)return`peak`}return`offPeak`}function qe(e){let t=new Date(e+288e5).getUTCDay();return t===0||t===6}function Je(e){return new Date(e+288e5).toISOString().slice(0,10).replace(/-/g,``)}function Ye(e){return`20260925 20260926 20260927 20261001 20261002 20261003 20261004 20261005 20261006 20261007`.includes(Je(e))}let Xe=[540,720,840,1080],Ze=[840,1080];function Qe(e){return((e+288e5)%864e5+864e5)%864e5}function $e(e,t,n=!1){let r=U(e,t,n),i=Qe(e);for(let a=0;a<10;a++){let o=a*864e5-i;for(let i of t){let a=o+i*6e4;if(!(a<=0)&&U(e+a,t,n)!==r)return{tier:r,nextSwitchInMs:a}}}let a=t[0]??0;return{tier:r,nextSwitchInMs:864e5-i+a*6e4}}function et(e,t,n,r=!1){let{nextSwitchInMs:i}=$e(e,t,r);if(i>n)return null;let a=e+i;return{entering:U(a,t,r),atMs:a}}function tt(e,t){if(e===void 0||e===``)return`none`;let n=mt(e),r=W().find(e=>e.key===n)?.provider;return r===`DeepSeek`?`deepseek-metered`:t&&r===`智谱 AI`?`zhipu-coding-plan`:`none`}function nt(e,t){switch(t){case`deepseek-metered`:return $e(e,Xe,!0);case`zhipu-coding-plan`:return $e(e,Ze);case`none`:return null}}function rt(e,t,n){switch(t){case`deepseek-metered`:return et(e,Xe,n,!0);case`zhipu-coding-plan`:return et(e,Ze,n);case`none`:return null}}function it(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 at=[],ot={};function st(e,t){at=e,ot=t,ut=void 0}function W(){return at}function ct(){return ot}let lt={key:`other`,name:`其他模型`,provider:`Custom`,colorVar:`dsw-static-neutral-bluish-500`,price:{currency:`CNY`,input:0,cacheHit:0,cacheMiss:0,output:0}};function G(e){return String(e).toLowerCase().replace(/\([^)]*\)/g,``).replace(/[^a-z0-9]+/g,``)}let ut;function dt(){if(ut!==void 0)return ut;let e=new Map,t=(t,n)=>{let r=G(t);r!==``&&!e.has(r)&&e.set(r,n)};for(let e of at)t(e.key,e.key);for(let[e,n]of Object.entries(ot))t(e,n);for(let e of Ae)t(e.key,e.key);return ut=e,e}function ft(e){let t=[],n=e=>{e!==``&&!t.includes(e)&&t.push(e)},r=e=>{let t=e;for(;;){let e=t.replace(/[-_]\d{3,}$/u,``);if(e===t||e===``)return;t=e,n(t)}},i=e.lastIndexOf(`/`);if(i>0&&i<e.length-1){let t=e.slice(i+1);n(t),r(t)}return r(e),t}function pt(e){let t=ct()[e];if(t!==void 0)return t;let n=G(e);if(n===``)return;let r=dt().get(n);return r===void 0?(R??[]).find(e=>G(e.key)===n)?.key:r}function mt(e){let t=ct()[e]??e;if(t===e){let t=G(e);if(t!==``){let e=dt().get(t);if(e!==void 0)return e;let n=(R??[]).find(e=>G(e.key)===t);if(n!==void 0)return n.key}for(let t of ft(e)){let e=pt(t);if(e!==void 0)return e}}return t}function ht(e){let t=mt(e),n=Me?.[t];if(n!==void 0)return n;let r=Ae.find(e=>e.key.toLowerCase()===t.toLowerCase());if(r!==void 0)return{input:r.input,cacheHit:r.cacheHit,output:r.output}}function gt(e){let t=mt(e),n=W().find(e=>e.key===t),r=R?.find(e=>e.key===t),i=n??(r===void 0?W().at(-1)??lt:_t(r)),a=Le(t);if(a!==void 0)return{...i,userPriced:!0,price:{currency:a.currency??`CNY`,input:a.input,cacheHit:a.cacheHit,output:a.output,...a.offPeak===void 0?{}:{offPeak:a.offPeak}}};let o=ht(t);return o===void 0?i:{...i,price:{currency:`USD`,input:o.input,cacheHit:o.cacheHit,output:o.output}}}function _t(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 vt(e,t){let n=e.endsAtMs!==void 0&&t>=e.endsAtMs;return Number.isFinite(t)&&!n&&e.factor>0&&e.factor<1}function yt(e,t){let{promo:n}=e;if(n===void 0||!vt(n,t))return e;let r=e=>n.factors?.[e]??n.factor,i=e=>({input:e.input*r(`input`),cacheHit:e.cacheHit*r(`cacheHit`),...e.cacheMiss===void 0?{}:{cacheMiss:e.cacheMiss*r(`cacheMiss`)},output:e.output*r(`output`)});return{...e,price:{...i(e.price),currency:e.price.currency,...e.price.offPeak===void 0?{}:{offPeak:i(e.price.offPeak)}}}}function bt(e=Date.now()){let t=[...W().filter(e=>e.retired!==!0).map(t=>yt(t,e))],n=new Set(t.map(e=>e.key.toLowerCase())),r=new Set(t.map(e=>G(e.key)));for(let e of Ne??[]){let i=e.id.toLowerCase();if((()=>{let t=mt(e.id);return W().find(e=>e.key===t)})()!==void 0)continue;let a=G(e.id);if(n.has(i)||a!==``&&r.has(a))continue;let o=(R??[]).find(e=>G(e.key)===a),s;if(o!==void 0)s=_t(o),e.name!==void 0&&e.name!==``&&(s={...s,name:e.name});else{let t=ht(i);s=t===void 0?{key:mt(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=Le(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 xt(e){let t=getComputedStyle(document.documentElement).getPropertyValue(`--${e}`).trim();return t===``?`#8b95a3`:t}function St(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*He():a}function Ct(e,t,n=H,r=Date.now()){let i=yt(e,r),a=St(i.price,t,i.price.currency),o=i.price.offPeak===void 0?a:St(i.price.offPeak,t,i.price.currency);return a*n+o*(1-n)}function wt(e){let t=He();return t>0?e/t:e}function Tt(e,t){if(t===`usd`)return wt(e);if(t===`eur`){let t=Ue();return t>0?e/t:e}return e}function K(e,t=`cny`){let n=Number(e),r=t===`usd`?`$`:t===`eur`?`€`:`¥`;return!Number.isFinite(n)||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 Et(e,t=`CNY`){return`${t===`USD`?`$`:t===`EUR`?`€`:`¥`}${e.toFixed(e>=10?1:2)}`}function Dt(e,t,n,r){if(r<=0||!Number.isFinite(r))return e;let i=t===`USD`?e*r:e;if(n===`cny`)return i;if(n===`usd`)return i/r;let a=Ge().rate;return a>0?i/a:i}function q(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 Ot(e){let t=Number(e);return Number.isFinite(t)?`${t.toFixed(1)}%`:`0.0%`}let J={top:18,right:40,bottom:26,left:46};function Y(e){let[,t,n]=e.split(`-`);return`${Number(t)}/${Number(n)}`}function kt(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(Math.round(e))}function At(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 jt={key:`__total__`,name:``,color:``};function Mt({data:e,models:t=[],currency:n=`cny`,metric:r=`cost`,t:i}){let a=i??(e=>Te[e]),[o,s]=(0,d.useState)(null),c=e=>K(Tt(e,n),n),l=e=>r===`tokens`?kt(e):c(e),u=e=>r===`tokens`?e.tokens??0:e.cost,f=(0,d.useMemo)(()=>{let n=e.length;if(n===0)return null;let i=680-J.left-J.right,o=220-J.top-J.bottom,s=e=>n===1?J.left+i/2:J.left+i*e/(n-1),c=Math.max(...r===`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),l=e=>J.top+o-e/c*o,d=Math.max(...e.map(e=>e.calls),1),f=e=>J.top+o-e/d*o,p=i/n,m=Math.min(18,p*.6);return{n,plotW:i,plotH:o,inner:s,yCost:l,yCalls:f,barW:m,bars:e.flatMap((e,n)=>{let i=s(n)-m/2;if(t.length===0||r===`tokens`)return[{date:e.date,model:{...jt,name:a(`trendTotal`)},x:i,base:0,value:u(e),topRounded:!0}];let o=null;for(let n of t)(e.byModel?.[n.key]??0)>0&&(o=n.key);let c=0;return t.map(t=>{let n=e.byModel?.[t.key]??0,r={date:e.date,model:t,x:i,base:c,value:n,topRounded:t.key===o};return c+=n,r})}),costTicks:[0,.25,.5,.75,1].map(e=>c*e).reverse(),callsTicks:[0,.25,.5,.75,1].map(e=>d*e).reverse(),linePath:e.map((e,t)=>{let n=f(e.calls);return`${t===0?`M`:`L`}${s(t)} ${n}`}).join(` `)}},[e,t,r]);if(f===null)return(0,m.jsx)(`div`,{className:F.chartEmpty,children:a(`trendEmpty`)});let{n:p,plotW:h,plotH:g,inner:_,yCost:v,yCalls:y,barW:b,bars:x,costTicks:S,callsTicks:C,linePath:w}=f,T=o===null?void 0:e[o],ee=At(p,Math.max(1,Math.ceil(p/8)));return(0,m.jsxs)(`div`,{className:F.chartWrap,children:[(0,m.jsxs)(`svg`,{viewBox:`0 0 680 220`,className:F.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-J.left)/h,r=Math.round(n*(p-1));s(Math.min(Math.max(r,0),p-1))},children:[S.map((e,t)=>{let n=v(e);return(0,m.jsxs)(`g`,{children:[(0,m.jsx)(`line`,{x1:J.left,x2:680-J.right,y1:n,y2:n,className:F.chartGrid}),(0,m.jsx)(`text`,{x:J.left-8,y:n+3,textAnchor:`end`,className:F.chartAxisLabel,children:l(e)})]},`cost-${t}`)}),x.map(t=>{if(t.value>0)return(0,m.jsx)(`rect`,{x:t.x,y:v(t.base+t.value),width:b,height:v(t.base)-v(t.base+t.value),rx:t.topRounded?2:0,className:t.model.color===``?F.chartBar:F.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,m.jsx)(`rect`,{x:t.x,y:v(0)-1,width:b,height:1,rx:0,className:F.chartBarPlaceholder},`${t.date}-${t.model.key}-placeholder`):null}),(0,m.jsx)(`path`,{d:w,fill:`none`,className:F.chartLine}),C.map((e,t)=>{let n=y(e);return(0,m.jsx)(`text`,{x:680-J.right+8,y:n+3,textAnchor:`start`,className:F.chartAxisLabel,children:kt(e)},`calls-${t}`)}),ee.map(t=>{let n=e[t];return n===void 0?null:(0,m.jsx)(`text`,{x:_(t),y:214,textAnchor:`middle`,className:F.chartAxisLabel,children:Y(n.date)},n.date)}),o!==null&&(0,m.jsx)(`line`,{x1:_(o),x2:_(o),y1:J.top,y2:J.top+g,className:F.chartCrosshair})]}),T!==void 0&&o!==null&&(0,m.jsxs)(`div`,{className:F.chartTooltip,style:{left:`${_(o)/680*100}%`,top:`${v(T.cost)/220*100}%`},children:[(0,m.jsx)(`div`,{className:F.chartTooltipDate,children:T.date}),r!==`tokens`&&t.filter(e=>(T.byModel?.[e.key]??0)>0).map(e=>(0,m.jsxs)(`div`,{className:F.chartTooltipRow,children:[(0,m.jsx)(`span`,{className:F.chartTooltipSwatch,style:{background:e.color}}),e.name,` `,(0,m.jsx)(`strong`,{children:c(T.byModel?.[e.key]??0)})]},e.key)),(0,m.jsxs)(`div`,{className:F.chartTooltipRow,children:[(0,m.jsx)(`span`,{className:F.chartLegendBar}),a(`trendTotal`),` `,(0,m.jsx)(`strong`,{children:r===`tokens`?kt(T.tokens??0):c(T.cost)})]}),(0,m.jsxs)(`div`,{className:F.chartTooltipRow,children:[(0,m.jsx)(`span`,{className:F.chartLegendLine}),a(`calls`),` `,(0,m.jsx)(`strong`,{children:T.calls.toLocaleString()})]})]}),t.length>0&&r!==`tokens`&&(0,m.jsxs)(`div`,{className:F.chartLegend,children:[t.map(e=>(0,m.jsxs)(`span`,{children:[(0,m.jsx)(`span`,{className:F.chartTooltipSwatch,style:{background:e.color}}),e.name]},e.key)),(0,m.jsxs)(`span`,{children:[(0,m.jsx)(`span`,{className:F.chartLegendLine}),a(`calls`)]})]})]})}let X={top:14,right:42,bottom:22,left:46};function Nt(e){return e.slice(5,13).replace(`T`,` `)}function Pt(e){return String(e>=100?Math.round(e):Number(e.toFixed(1)))}function Ft(e){return e<1e4?`${Math.round(e)} ms`:e<6e4?`${(e/1e3).toFixed(1)} s`:`${(e/6e4).toFixed(1)} min`}function It(e){return e>=1e3?`${(e/1e3).toFixed(1)}k`:e.toFixed(1)}function Lt(e,t,n){return t===`ttft`?`${Math.round(e)} ms`:`${e.toFixed(1)} ${n(`perfTpsUnit`)}`}function Rt({perf:e,models:t,t:n}){let[r,i]=(0,d.useState)(()=>xe()),[a,o]=(0,d.useState)(null),s=e=>{i(e),Se(e)},c=e=>t.find(t=>t.key===e)?.color??`#8b95a3`,l=(0,d.useMemo)(()=>e===void 0?[]:Object.entries(e.byModel).map(([e,n])=>({key:e,name:t.find(t=>t.key===e)?.name??e,color:c(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]),u=(0,d.useMemo)(()=>{if(e===void 0)return[];if(r.models!==void 0){let t=new Set(Object.keys(e.byModel));return r.models.filter(e=>t.has(e))}return l.slice(0,5).map(e=>e.key)},[e,l,r.models]),f=(0,d.useMemo)(()=>{if(e===void 0)return null;let t=Object.keys(e.byHourModel).sort().slice(-48);if(t.length===0)return null;let n=t.length,i=680-X.left-X.right,a=180-X.top-X.bottom,o=e=>n===1?X.left+i/2:X.left+i*e/(n-1),s=new Set(u),c=e=>r.metric===`ttft`?e?.ttftAvg:e?.tpsAvg,d=[],f=0;for(let r of l){if(!s.has(r.key))continue;let i=[];for(let a=0;a<n;a++){let n=t[a];if(n===void 0)continue;let s=c(e.byHourModel[n]?.[r.key]);s===void 0||!Number.isFinite(s)||(i.push({i:a,x:o(a),y:0,v:s}),s>f&&(f=s))}d.push({key:r.key,name:r.name,color:r.color,segments:[],points:i})}let p=d.reduce((e,t)=>e+t.points.length,0);f=Math.max(f,1);let m=e=>X.top+a-e/f*a;for(let e of d){let t=``,n=-2;for(let r of e.points)r.y=m(r.v),t!==``&&r.i!==n+1&&(e.segments.push(t),t=``),t+=`${t===``?`M`:`L`}${r.x} ${r.y} `,n=r.i;t!==``&&e.segments.push(t)}let h=Math.max(1,Math.ceil(n/8)),g=[];for(let e=0;e<n;e+=h)g.push(e);return g[g.length-1]!==n-1&&g.push(n-1),{hourKeys:t,n,plotW:i,plotH:a,inner:o,yOf:m,series:d,ticks:[0,.5,1].map(e=>f*e).reverse(),xTicks:g,totalPoints:p}},[e,l,u,r.metric]);if(e===void 0||l.length===0)return(0,m.jsx)(`div`,{className:F.chartEmpty,"data-testid":`billing-perf-empty`,children:n(`perfEmpty`)});let p=e=>{let t=u.includes(e)?u.filter(t=>t!==e):[...u,e];s({metric:r.metric,models:t})},h=e=>{s({metric:e,...r.models===void 0?{}:{models:r.models}})},g=a===null||f===null?[]:f.series.flatMap(e=>{let t=e.points.find(e=>e.i===a);return t===void 0?[]:[{key:e.key,name:e.name,color:e.color,v:t.v}]});return(0,m.jsxs)(`div`,{"data-testid":`billing-perf-panel`,children:[(0,m.jsx)(`div`,{className:F.tableScroll,"data-testid":`billing-perf-table`,children:(0,m.jsxs)(`table`,{className:F.modelTable,children:[(0,m.jsx)(`thead`,{children:(0,m.jsxs)(`tr`,{children:[(0,m.jsx)(`th`,{children:n(`model`)}),(0,m.jsx)(`th`,{className:F.numCol,children:n(`perfSamples`)}),(0,m.jsx)(`th`,{className:F.numCol,children:n(`perfTtft`)}),(0,m.jsx)(`th`,{className:F.numCol,children:n(`perfP50`)}),(0,m.jsx)(`th`,{className:F.numCol,children:n(`perfP90`)}),(0,m.jsx)(`th`,{className:F.numCol,children:n(`perfMax`)}),(0,m.jsx)(`th`,{className:F.numCol,children:n(`perfTps`)}),(0,m.jsx)(`th`,{className:F.numCol,children:n(`perfLatency`)}),(0,m.jsx)(`th`,{className:F.numCol,children:n(`perfEstimated`)})]})}),(0,m.jsx)(`tbody`,{children:l.map(e=>(0,m.jsxs)(`tr`,{children:[(0,m.jsx)(`td`,{children:(0,m.jsxs)(`span`,{className:F.modelCell,children:[(0,m.jsx)(`span`,{className:F.modelDot,style:{background:e.color}}),(0,m.jsx)(`span`,{className:F.modelName,children:e.name})]})}),(0,m.jsx)(`td`,{className:F.numCol,children:e.samples.toLocaleString()}),(0,m.jsx)(`td`,{className:F.numCol,children:Ft(e.ttftAvg)}),(0,m.jsx)(`td`,{className:F.numCol,children:Ft(e.ttftP50)}),(0,m.jsx)(`td`,{className:F.numCol,children:Ft(e.ttftP90)}),(0,m.jsx)(`td`,{className:F.numCol,children:e.ttftMax===void 0?(0,m.jsx)(`span`,{className:F.na,children:`—`}):(0,m.jsxs)(`span`,{children:[Ft(e.ttftMax),e.ttftSpikes!==void 0&&e.ttftSpikes>0?` (${e.ttftSpikes}↑)`:``]})}),(0,m.jsx)(`td`,{className:F.numCol,children:e.tpsAvg===void 0?(0,m.jsx)(`span`,{className:F.na,children:`—`}):It(e.tpsAvg)}),(0,m.jsx)(`td`,{className:F.numCol,children:Ft(e.latencyAvg)}),(0,m.jsx)(`td`,{className:F.numCol,children:e.estimatedSamples>0?e.estimatedSamples:(0,m.jsx)(`span`,{className:F.na,children:`—`})})]},e.key))})]})}),f!==null&&(0,m.jsxs)(`div`,{"data-testid":`billing-perf-hour`,children:[(0,m.jsx)(`div`,{className:F.perfBar,children:(0,m.jsx)(`span`,{className:F.rangeToggle,role:`group`,"aria-label":n(`perfTitle`),children:[`ttft`,`tps`].map(e=>(0,m.jsx)(`button`,{type:`button`,className:y(F.rangeButton,r.metric===e&&F.rangeButtonActive),"aria-pressed":r.metric===e,"data-testid":`billing-perf-tab-${e}`,onClick:()=>{h(e)},children:e===`ttft`?`${n(`perfTtft`)} (ms)`:`${n(`perfTps`)} (${n(`perfTpsUnit`)})`},e))})}),(0,m.jsxs)(`div`,{className:F.perfChips,role:`group`,"aria-label":n(`model`),children:[(0,m.jsx)(`button`,{type:`button`,className:F.perfChip,"data-testid":`billing-perf-chip-all`,onClick:()=>{s({metric:r.metric,models:l.map(e=>e.key)})},children:n(`perfAll`)}),l.map(e=>{let t=u.includes(e.key);return(0,m.jsxs)(`button`,{type:`button`,className:y(F.perfChip,!t&&F.perfChipOff),style:t?{color:e.color,borderColor:`color-mix(in srgb, ${e.color} 45%, transparent)`}:void 0,"aria-pressed":t,"data-testid":`billing-perf-chip-${e.key}`,onClick:()=>{p(e.key)},children:[(0,m.jsx)(`span`,{className:F.perfChipDot,style:{background:t?e.color:`var(--dsw-alias-label-dimmed)`}}),e.name]},e.key)})]}),f.totalPoints>0?(0,m.jsxs)(`div`,{className:F.chartWrap,children:[(0,m.jsxs)(`svg`,{viewBox:`0 0 680 180`,className:F.chartSvg,role:`img`,"aria-label":`Hourly perf comparison by model`,onMouseLeave:()=>{o(null)},onMouseMove:e=>{let t=e.currentTarget.getBoundingClientRect(),n=((e.clientX-t.left)/t.width*680-X.left)/f.plotW,r=Math.round(n*(f.n-1));o(Math.min(Math.max(r,0),f.n-1))},children:[f.ticks.map((e,t)=>{let n=f.yOf(e);return(0,m.jsxs)(`g`,{children:[(0,m.jsx)(`line`,{x1:X.left,x2:680-X.right,y1:n,y2:n,className:F.chartGrid}),(0,m.jsx)(`text`,{x:X.left-8,y:n+3,textAnchor:`end`,className:F.chartAxisLabel,children:Pt(e)})]},`tick-${t}`)}),f.series.map(e=>e.segments.map((t,n)=>(0,m.jsx)(`path`,{d:t,fill:`none`,className:F.chartLine,style:{stroke:e.color}},`${e.key}-${n}`))),f.xTicks.map(e=>{let t=f.hourKeys[e];return t===void 0?null:(0,m.jsx)(`text`,{x:f.inner(e),y:174,textAnchor:`middle`,className:F.chartAxisLabel,children:Nt(t)},t)}),a!==null&&(0,m.jsx)(`line`,{x1:f.inner(a),x2:f.inner(a),y1:X.top,y2:X.top+f.plotH,className:F.chartCrosshair}),a!==null&&f.series.map(e=>{let t=e.points.find(e=>e.i===a);return t===void 0?null:(0,m.jsx)(`circle`,{cx:t.x,cy:t.y,r:3.5,fill:e.color,className:F.chartHoverDot},`${e.key}-dot`)})]}),a!==null&&g.length>0&&(0,m.jsxs)(`div`,{className:F.chartTooltip,"data-testid":`billing-perf-tooltip`,style:{left:`${f.inner(a)/680*100}%`,top:`${(X.top+f.plotH/2)/180*100}%`},children:[(0,m.jsx)(`div`,{className:F.chartTooltipDate,children:Nt(f.hourKeys[a]??``)}),g.map(e=>(0,m.jsxs)(`div`,{className:F.chartTooltipRow,children:[(0,m.jsx)(`span`,{className:F.chartTooltipSwatch,style:{background:e.color}}),e.name,` `,(0,m.jsx)(`strong`,{children:Lt(e.v,r.metric,n)})]},e.key))]})]}):(0,m.jsx)(`div`,{className:F.chartEmpty,"data-testid":`billing-perf-chart-empty`,children:n(`perfChartEmpty`)})]}),f===null&&(0,m.jsx)(`div`,{className:F.chartEmpty,"data-testid":`billing-perf-chart-empty`,children:n(`perfChartEmpty`)})]})}let zt=`@kenz1117/dsh-ui-usage-billing`,Bt=`kenz1117`;function Vt({t:e,version:t}){return(0,m.jsxs)(`section`,{className:F.setCard,"data-testid":`billing-plugin-info`,children:[(0,m.jsxs)(`div`,{className:F.plgHead,children:[(0,m.jsx)(`span`,{className:F.plgIcon,"aria-hidden":`true`,children:(0,m.jsx)(`svg`,{width:`20`,height:`20`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,m.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,m.jsxs)(`div`,{className:F.plgTitle,children:[(0,m.jsxs)(`div`,{className:F.plgNameRow,children:[(0,m.jsx)(`h3`,{className:F.plgName,children:zt}),(0,m.jsx)(`span`,{className:F.plgTag,children:t===void 0?`—`:`v${t}`})]}),(0,m.jsx)(`p`,{className:F.plgDesc,children:`Usage billing dashboard for DeepSeek Harness`})]})]}),(0,m.jsxs)(`div`,{className:F.plgGrid,children:[(0,m.jsxs)(`div`,{className:F.plgItem,children:[(0,m.jsx)(`span`,{className:F.plgLabel,children:e(`pluginAuthor`)}),(0,m.jsxs)(`a`,{className:F.plgLink,href:`https://github.com/${Bt}`,target:`_blank`,rel:`noreferrer`,children:[`KenZ`,` (`,Bt,`)`]})]}),(0,m.jsxs)(`div`,{className:F.plgItem,children:[(0,m.jsx)(`span`,{className:F.plgLabel,children:e(`pluginRepository`)}),(0,m.jsx)(`a`,{className:F.plgLink,href:`https://github.com/kenz1117/dsh-ui-usage-billing`,target:`_blank`,rel:`noreferrer`,children:`GitHub`})]}),(0,m.jsxs)(`div`,{className:F.plgItem,children:[(0,m.jsx)(`span`,{className:F.plgLabel,children:e(`pluginNpm`)}),(0,m.jsx)(`a`,{className:F.plgLink,href:`https://www.npmjs.com/package/@kenz1117/dsh-ui-usage-billing`,target:`_blank`,rel:`noreferrer`,children:zt})]}),(0,m.jsxs)(`div`,{className:F.plgItem,children:[(0,m.jsx)(`span`,{className:F.plgLabel,children:e(`pluginLicense`)}),(0,m.jsx)(`span`,{className:F.plgVal,children:`MIT`})]})]})]})}function Ht(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 Ut(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(Math.round(e))}let Z={top:14,right:18,bottom:22,left:46},Wt=`var(--ds-blue)`,Gt=`var(--ds-cyan)`,Kt=`var(--ds-amber)`;function qt(e,t,n,r){return JSON.stringify({days:e,models:t,dayModels:n,total:r},null,2)}function Jt(e){let{stats:t,trendDays:n,onTrendDays:r,t:i}=e,a=e.money,o=e.models??[],{byDay:s,byModel:c,total:l}=t,[u,f]=(0,d.useState)(null),[p,h]=(0,d.useState)(`structure`),[g,_]=(0,d.useState)(null),v=t.byDayModels!==void 0,b=e=>{h(e),_(null)},x=(0,d.useMemo)(()=>{let e=t.byRole;if(e===void 0)return[];let n=e.user+e.assistant+e.tool;return n<=0?[]:[{label:i(`roleUser`),value:e.user,seg:F.shareSegUser},{label:i(`roleAssistant`),value:e.assistant,seg:F.shareSegAssistant},{label:i(`roleTool`),value:e.tool,seg:F.shareSegTool}].map(e=>({...e,pct:e.value/n*100}))},[t.byRole,i]),S=(0,d.useMemo)(()=>{let e=[];for(let t=n-1;t>=0;--t){let n=new Date;n.setDate(n.getDate()-t);let r=Ht(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]),C=(0,d.useMemo)(()=>{let e=[];for(let r=n-1;r>=0;--r){let n=new Date;n.setDate(n.getDate()-r);let i=Ht(n.getTime()),a=t.byDayModels?.[i],o={},s=0;if(a!==void 0)for(let[e,t]of Object.entries(a)){let n=t.cacheHit??0,r=t.cacheMiss??0,i=t.output??0,a=n+r+i;a<=0||(o[e]={hit:n,miss:r,output:i,total:a},s+=a)}e.push({date:i,models:o,total:s})}return e},[t.byDayModels,n]),w=(0,d.useMemo)(()=>{let e=new Map;for(let t of C)for(let[n,r]of Object.entries(t.models))e.set(n,(e.get(n)??0)+r.total);return[...e.entries()].sort((e,t)=>t[1]-e[1]).map(([e])=>({key:e,name:o.find(t=>t.key===e)?.name??gt(e).name,color:o.find(t=>t.key===e)?.color??`#8b95a3`}))},[C,o]),T=g!==null&&w.some(e=>e.key===g)?g:null,ee=e=>{if(v){if(p!==`model`){h(`model`),_(e);return}_(t=>t===e?null:e)}},E=(0,d.useMemo)(()=>{let e=0;return Object.entries(c).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:gt(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}))},[c]),D=(0,d.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]),O=(0,d.useMemo)(()=>{let e=S.length;if(e===0)return null;let t=680-Z.left-Z.right,n=200-Z.top-Z.bottom,r=Math.max(...p===`model`?C.map(e=>e.total):S.map(e=>e.miss+e.hit+e.output),1),i=e=>Z.top+n-e/r*n,a=t/e,o=Math.min(20,a*.6),s=n=>e===1?Z.left+t/2:Z.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,groupW:a}},[S,C,p]),te=()=>{let e=new Blob([Yt(S)],{type:`text/csv`}),t=document.createElement(`a`);t.href=URL.createObjectURL(e),t.download=`token-daily-${Ht()}.csv`,t.click(),setTimeout(()=>URL.revokeObjectURL(t.href),0)},k=()=>{let e=new Blob([qt(S,E,C,l)],{type:`application/json`}),t=document.createElement(`a`);t.href=URL.createObjectURL(e),t.download=`token-${Ht()}.json`,t.click(),setTimeout(()=>URL.revokeObjectURL(t.href),0)},A=u===null?void 0:S[u],j=u===null?void 0:C[u],ne=O===null?0:Math.ceil(80/Math.max(O.groupW,1)),M=u===null||O===null?void 0:u>=O.n-ne?F.chartTooltipAlignRight:u<ne?F.chartTooltipAlignLeft:void 0;return(0,m.jsxs)(`div`,{className:F.tokenPanel,"data-testid":`billing-token-panel`,children:[(0,m.jsxs)(`div`,{className:F.exportBar,role:`group`,"aria-label":i(`tokenExport`),children:[(0,m.jsx)(`span`,{className:F.exportLabel,children:i(`export`)}),(0,m.jsx)(`button`,{type:`button`,className:F.exportButton,"data-testid":`billing-token-export-csv`,onClick:te,children:i(`tokenExportCsv`)}),(0,m.jsx)(`button`,{type:`button`,className:F.exportButton,"data-testid":`billing-token-export-json`,onClick:k,children:i(`exportJson`)})]}),(0,m.jsxs)(`section`,{className:F.panel,"data-testid":`billing-token-daily`,children:[(0,m.jsxs)(`div`,{className:F.panelHead,children:[(0,m.jsx)(`h3`,{className:F.panelTitle,children:i(`tokenDaily`)}),(0,m.jsxs)(`span`,{className:F.panelHeadControls,children:[v&&(0,m.jsx)(`span`,{className:F.rangeToggle,role:`group`,"aria-label":i(`tokenDaily`),children:[`structure`,`model`].map(e=>(0,m.jsx)(`button`,{type:`button`,className:y(F.rangeButton,p===e&&F.rangeButtonActive),"aria-pressed":p===e,onClick:()=>{b(e)},"data-testid":`billing-token-view-${e}`,children:i(e===`structure`?`tokenViewStructure`:`tokenViewModel`)},e))}),(0,m.jsx)(`span`,{className:F.rangeToggle,role:`group`,"aria-label":i(`tokenDaily`),children:[7,30].map(e=>(0,m.jsx)(`button`,{type:`button`,className:y(F.rangeButton,n===e&&F.rangeButtonActive),"aria-pressed":n===e,onClick:()=>{r(e)},"data-testid":`billing-token-${e}d`,children:i(e===7?`trend7d`:`trend30d`)},e))})]})]}),O===null||p===`model`&&w.length===0?(0,m.jsx)(`div`,{className:F.chartEmpty,children:i(`trendEmpty`)}):(0,m.jsxs)(`div`,{className:F.chartWrap,children:[(0,m.jsxs)(`svg`,{viewBox:`0 0 680 200`,className:F.chartSvg,role:`img`,"aria-label":i(`tokenDaily`),onMouseLeave:()=>{f(null)},onMouseMove:e=>{let t=e.currentTarget.getBoundingClientRect(),n=((e.clientX-t.left)/t.width*680-Z.left)/O.plotW,r=Math.round(n*(O.n-1));f(Math.min(Math.max(r,0),O.n-1))},children:[[0,.5,1].map(e=>{let t=O.max*e,n=O.y(t);return(0,m.jsxs)(`g`,{children:[(0,m.jsx)(`line`,{x1:Z.left,x2:680-Z.right,y1:n,y2:n,className:F.chartGrid}),(0,m.jsx)(`text`,{x:Z.left-8,y:n+3,textAnchor:`end`,className:F.chartAxisLabel,children:Ut(t)})]},e)}),p===`structure`?S.map((e,t)=>{let n=O.inner(t)-O.barW/2,r=O.y(0),i=O.y(e.miss),a=O.y(e.miss+e.hit),o=O.y(e.miss+e.hit+e.output);return(0,m.jsxs)(`g`,{children:[(0,m.jsx)(`rect`,{x:n,y:i,width:O.barW,height:r-i,fill:Wt}),(0,m.jsx)(`rect`,{x:n,y:a,width:O.barW,height:i-a,fill:Gt}),(0,m.jsx)(`rect`,{x:n,y:o,width:O.barW,height:a-o,fill:Kt})]},e.date)}):C.map((e,t)=>{let n=O.inner(t)-O.barW/2,r=0;return(0,m.jsx)(`g`,{children:w.map(t=>{let i=e.models[t.key];if(i===void 0)return null;let a=O.y(r);r+=i.total;let o=O.y(r),s=T!==null&&t.key!==T;return(0,m.jsx)(`rect`,{x:n,y:o,width:O.barW,height:a-o,fill:t.color,opacity:s?.15:1},t.key)})},e.date)}),O.indices.map(e=>{let t=S[e];return t===void 0?null:(0,m.jsx)(`text`,{x:O.inner(e),y:194,textAnchor:`middle`,className:F.chartAxisLabel,children:t.date.slice(5)},t.date)}),u!==null&&(0,m.jsx)(`line`,{x1:O.inner(u),x2:O.inner(u),y1:Z.top,y2:Z.top+O.plotH,className:F.chartCrosshair})]}),u!==null&&p===`structure`&&A!==void 0&&(0,m.jsxs)(`div`,{className:y(F.chartTooltip,M),"data-testid":`billing-token-tooltip`,style:{left:`${O.inner(u)/680*100}%`,top:`${O.y(A.miss+A.hit+A.output)/200*100}%`},children:[(0,m.jsxs)(`div`,{className:F.chartTooltipHead,children:[(0,m.jsx)(`span`,{className:F.chartTooltipDate,children:A.date}),(0,m.jsx)(`strong`,{children:(A.miss+A.hit+A.output).toLocaleString()})]}),(0,m.jsxs)(`div`,{className:y(F.chartTooltipRow,F.chartTooltipSplit),children:[(0,m.jsxs)(`span`,{className:F.chartTooltipLabel,children:[(0,m.jsx)(`span`,{className:F.chartTooltipSwatch,style:{background:Gt}}),i(`tokenHit`)]}),(0,m.jsx)(`strong`,{children:A.hit.toLocaleString()})]}),(0,m.jsxs)(`div`,{className:y(F.chartTooltipRow,F.chartTooltipSplit),children:[(0,m.jsxs)(`span`,{className:F.chartTooltipLabel,children:[(0,m.jsx)(`span`,{className:F.chartTooltipSwatch,style:{background:Wt}}),i(`tokenMiss`)]}),(0,m.jsx)(`strong`,{children:A.miss.toLocaleString()})]}),(0,m.jsxs)(`div`,{className:y(F.chartTooltipRow,F.chartTooltipSplit),children:[(0,m.jsxs)(`span`,{className:F.chartTooltipLabel,children:[(0,m.jsx)(`span`,{className:F.chartTooltipSwatch,style:{background:Kt}}),i(`tokenOutput`)]}),(0,m.jsx)(`strong`,{children:A.output.toLocaleString()})]})]}),u!==null&&p===`model`&&j!==void 0&&(0,m.jsxs)(`div`,{className:y(F.chartTooltip,M),"data-testid":`billing-token-tooltip`,style:{left:`${O.inner(u)/680*100}%`,top:`${O.y(j.total)/200*100}%`},children:[(0,m.jsxs)(`div`,{className:F.chartTooltipHead,children:[(0,m.jsx)(`span`,{className:F.chartTooltipDate,children:j.date}),(0,m.jsx)(`strong`,{children:j.total.toLocaleString()})]}),w.map(e=>{let t=j.models[e.key];return t===void 0?null:(0,m.jsxs)(`div`,{className:F.chartTooltipModel,children:[(0,m.jsxs)(`div`,{className:y(F.chartTooltipRow,F.chartTooltipSplit),children:[(0,m.jsxs)(`span`,{className:F.chartTooltipLabel,children:[(0,m.jsx)(`span`,{className:F.chartTooltipSwatch,style:{background:e.color}}),e.name]}),(0,m.jsx)(`strong`,{children:t.total.toLocaleString()})]}),(0,m.jsxs)(`div`,{className:F.chartTooltipModelDetail,children:[i(`tokenHitShort`),` `,t.hit.toLocaleString(),` · `,i(`tokenMissShort`),` `,t.miss.toLocaleString(),` · `,i(`tokenOutput`),` `,t.output.toLocaleString()]})]},e.key)})]}),(0,m.jsx)(`div`,{className:F.chartLegend,children:p===`structure`?(0,m.jsxs)(m.Fragment,{children:[(0,m.jsxs)(`span`,{children:[(0,m.jsx)(`span`,{className:F.chartTooltipSwatch,style:{background:Wt}}),i(`tokenMiss`)]}),(0,m.jsxs)(`span`,{children:[(0,m.jsx)(`span`,{className:F.chartTooltipSwatch,style:{background:Gt}}),i(`tokenHit`)]}),(0,m.jsxs)(`span`,{children:[(0,m.jsx)(`span`,{className:F.chartTooltipSwatch,style:{background:Kt}}),i(`tokenOutput`)]})]}):w.map(e=>(0,m.jsxs)(`button`,{type:`button`,className:y(F.chartLegendItem,T===e.key&&F.chartLegendItemActive),"aria-pressed":T===e.key,"data-testid":`billing-token-legend-${e.key}`,onClick:()=>{ee(e.key)},children:[(0,m.jsx)(`span`,{className:F.chartTooltipSwatch,style:{background:e.color}}),e.name]},e.key))})]})]}),(0,m.jsxs)(`section`,{className:F.panel,"data-testid":`billing-token-models`,children:[(0,m.jsx)(`div`,{className:F.panelHead,children:(0,m.jsx)(`h3`,{className:F.panelTitle,children:i(`tokenByModel`)})}),E.length===0?(0,m.jsx)(`div`,{className:F.emptyRow,children:i(`noData`)}):(0,m.jsx)(`div`,{className:F.tableScroll,children:(0,m.jsxs)(`table`,{className:F.modelTable,"data-testid":`billing-token-model-table`,children:[(0,m.jsx)(`thead`,{children:(0,m.jsxs)(`tr`,{children:[(0,m.jsx)(`th`,{children:i(`model`)}),(0,m.jsx)(`th`,{className:F.numCol,children:i(`inputTokens`)}),(0,m.jsx)(`th`,{className:F.numCol,children:i(`outputTokens`)}),(0,m.jsx)(`th`,{className:F.numCol,children:i(`tokenReasoningShort`)}),(0,m.jsx)(`th`,{className:F.numCol,children:i(`cacheHitRate`)}),(0,m.jsx)(`th`,{className:F.numCol,children:i(`tokenTotal`)}),(0,m.jsx)(`th`,{className:F.numCol,children:i(`tokenShare`)}),(0,m.jsx)(`th`,{className:F.numCol,children:i(`calls`)})]})}),(0,m.jsx)(`tbody`,{children:E.map(e=>(0,m.jsxs)(`tr`,{"data-testid":`billing-token-model`,className:y(v&&F.modelRowFocusable,T===e.key&&F.modelRowActive),"aria-selected":v?T===e.key:void 0,onClick:v?()=>{ee(e.key)}:void 0,children:[(0,m.jsx)(`td`,{children:(0,m.jsx)(`span`,{className:F.modelName,children:e.name})}),(0,m.jsx)(`td`,{className:F.numCol,children:q(e.input)}),(0,m.jsx)(`td`,{className:F.numCol,children:q(e.output)}),(0,m.jsx)(`td`,{className:F.numCol,children:e.reasoning>0?q(e.reasoning):(0,m.jsx)(`span`,{className:F.na,children:`—`})}),(0,m.jsxs)(`td`,{className:F.numCol,children:[e.cacheHitRate.toFixed(1),`%`]}),(0,m.jsx)(`td`,{className:F.numCol,children:q(e.total)}),(0,m.jsx)(`td`,{className:F.numCol,children:(0,m.jsxs)(`span`,{className:F.tokenModelShareRow,children:[(0,m.jsx)(`span`,{className:F.tokenModelBar,children:(0,m.jsxs)(`span`,{className:F.tokenModelParts,style:{width:`${(e.share*100).toFixed(2)}%`},children:[(0,m.jsx)(`span`,{className:F.tokenModelPartIn,style:{width:`${e.total>0?e.input/e.total*100:0}%`}}),(0,m.jsx)(`span`,{className:F.tokenModelPartOut,style:{width:`${e.total>0?e.output/e.total*100:0}%`}})]})}),(e.share*100).toFixed(1),`%`]})}),(0,m.jsx)(`td`,{className:F.numCol,children:e.calls.toLocaleString()})]},e.key))})]})})]}),D.totalCalls>0&&(0,m.jsxs)(`section`,{className:F.panel,"data-testid":`billing-token-tools`,children:[(0,m.jsx)(`div`,{className:F.panelHead,children:(0,m.jsx)(`h3`,{className:F.panelTitle,children:i(`toolRank`)})}),(0,m.jsx)(`div`,{className:F.tableScroll,children:(0,m.jsxs)(`table`,{className:F.modelTable,"data-testid":`billing-tool-table`,children:[(0,m.jsx)(`thead`,{children:(0,m.jsxs)(`tr`,{children:[(0,m.jsx)(`th`,{children:i(`toolName`)}),(0,m.jsx)(`th`,{className:F.numCol,children:i(`calls`)}),(0,m.jsx)(`th`,{className:F.numCol,children:i(`tokenShare`)})]})}),(0,m.jsx)(`tbody`,{children:[...D.top,...D.rest].map(([e,t])=>(0,m.jsxs)(`tr`,{"data-testid":`billing-tool-row`,children:[(0,m.jsx)(`td`,{children:(0,m.jsx)(`span`,{className:F.modelName,children:e})}),(0,m.jsx)(`td`,{className:F.numCol,children:t.toLocaleString()}),(0,m.jsxs)(`td`,{className:F.numCol,children:[(t/D.totalCalls*100).toFixed(1),`%`]})]},e))})]})})]}),x.length>0&&(0,m.jsxs)(`section`,{className:F.panel,"data-testid":`billing-panel-roles`,children:[(0,m.jsxs)(`div`,{className:F.panelHead,children:[(0,m.jsx)(`h3`,{className:F.panelTitle,children:i(`roleCost`)}),(0,m.jsx)(`span`,{className:F.panelHint,children:i(`roleHint`)})]}),(0,m.jsx)(`div`,{className:F.shareTrack,"data-testid":`billing-role-track`,children:x.map(e=>(0,m.jsx)(`div`,{className:y(F.shareSeg,e.seg),style:{width:`${e.pct}%`}},e.label))}),(0,m.jsx)(`div`,{className:F.shareLegend,children:x.map(e=>(0,m.jsxs)(`span`,{className:F.shareItem,children:[(0,m.jsx)(`span`,{className:y(F.shareDot,e.seg)}),e.label,(0,m.jsxs)(`span`,{className:F.shareValue,children:[a(e.value),` · `,e.pct.toFixed(1),`%`]})]},e.label))})]})]})}function Yt(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 Xt(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${n(t.getHours())}:${n(t.getMinutes())}`}function Zt(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 Qt(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 $t({rounds:e,flags:t,currency:n,t:r}){let i=(0,d.useMemo)(()=>e.slice(-40),[e]),a=(0,d.useMemo)(()=>new Set(t.map(e=>`${e.sessionId}:${e.turn}`)),[t]),o=(0,d.useMemo)(()=>Math.max(1e-4,...i.map(e=>e.cost)),[i]);if(i.length===0)return(0,m.jsxs)(`div`,{className:F.roundsEmpty,children:[r(`model`),` —`]});let s=e=>K(Tt(e,n),n);return(0,m.jsxs)(`div`,{className:F.rounds,children:[(0,m.jsx)(`div`,{className:F.roundsBars,role:`img`,"aria-label":`cost per turn`,children:i.map(e=>{let t=a.has(`${e.sessionId}:${e.turn}`),n=Math.max(1,e.cost/o*100),i=Ke(e.startedAt)===`peak`;return(0,m.jsxs)(`div`,{className:y(F.roundsBarCol,i?F.roundsBarColPeak:F.roundsBarColOff),children:[(0,m.jsx)(`span`,{className:F.roundsBarLabel,style:{bottom:`${n}%`},children:s(e.cost)}),(0,m.jsx)(`div`,{className:F.roundsBarWrap,children:(0,m.jsx)(`div`,{className:t?F.roundsBarFlagged:F.roundsBar,style:{height:`${n}%`},"data-testid":`round-bar`,title:`${r(`model`)} ${e.model} · ${s(e.cost)} · ${Zt(e.startedAt)}${e.endedAt===void 0?``:` → ${Xt(e.endedAt)} (${Qt(e.endedAt-e.startedAt)})`}`,children:t&&(0,m.jsx)(`span`,{className:F.roundsFlagMark,"aria-hidden":`true`})})})]},`${e.sessionId}:${e.turn}`)})}),(0,m.jsxs)(`div`,{className:F.roundsAxis,children:[(0,m.jsxs)(`span`,{children:[r(`costAbbr`),` `,s(o)]}),(0,m.jsxs)(`span`,{children:[i.length,` `,r(`roundsUnit`)]})]})]})}let en=[`color-mix(in srgb, var(--ds-blue) 10%, var(--dsb-3))`,`color-mix(in srgb, var(--ds-blue) 30%, var(--dsb-3))`,`color-mix(in srgb, var(--ds-blue) 60%, var(--dsb-3))`,`color-mix(in srgb, var(--ds-blue) 90%, var(--dsb-3))`,`var(--ds-blue)`],tn=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`];function nn(e){let t=e=>String(e).padStart(2,`0`);return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}`}function rn(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:nn(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:nn(e),dayNum:e.getDate(),value:0,level:0,placeholder:!0});continue}let d=nn(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 an(e,t,n=52){let r=new Map;for(let t of e)r.set(t.date,t.value);let i=0;for(let e of r.values())e>i&&(i=e);let a=nn(t),o=new Date(t);o.setHours(0,0,0,0),o.setDate(o.getDate()-o.getDay());let s=new Date(o);s.setDate(o.getDate()-(n-1)*7);let c=[];for(let e=0;e<n;e+=1){let t=[];for(let n=0;n<7;n+=1){let o=new Date(s);o.setDate(s.getDate()+e*7+n);let c=nn(o),l=c>a,u=l?0:r.get(c)??0,d=0;if(!l&&u>0&&i>0){let e=Math.ceil(u/i*4);d=Math.min(4,Math.max(1,e))}t.push({date:c,dayNum:o.getDate(),value:u,level:d,placeholder:l})}c.push(t)}return c}function on({days:e,currency:t,now:n,t:r,range:i=`month`,unit:a=`cost`}){let[o,s]=(0,d.useState)(null),c=e=>K(Tt(e,t),t),l=e=>a===`tokens`?q(e):c(e),u=(0,d.useMemo)(()=>rn(e,n??new Date),[e,n]);if(i!==`month`){let t=an(e,n??new Date,i===`half`?26:52),a=[],o=-1;return t.forEach((e,t)=>{let n=Number(e[0]?.date.slice(5,7)??0);n!==o&&(a.push({index:t,label:tn[n-1]??``}),o=n)}),(0,m.jsxs)(`div`,{className:F.heatmapYear+(i===`half`?` `+F.heatmapHalf:``),"data-testid":i===`half`?`heatmap-half`:`heatmap-year`,children:[(0,m.jsxs)(`div`,{className:F.heatmapYearBody,children:[(0,m.jsx)(`div`,{className:F.heatmapYearWeekdays,"aria-hidden":`true`,children:[{label:`Mon`,row:1},{label:`Wed`,row:3},{label:`Fri`,row:5}].map(e=>(0,m.jsx)(`span`,{className:F.heatmapYearWeekday,style:{gridRow:e.row},children:e.label},e.label))}),(0,m.jsxs)(`div`,{className:F.heatmapYearScroll,children:[(0,m.jsx)(`div`,{className:F.heatmapYearMonths,"aria-hidden":`true`,"data-testid":`heatmap-year-months`,children:a.map(e=>(0,m.jsx)(`span`,{className:F.heatmapYearMonth,style:{gridColumn:e.index+1},children:e.label},e.index))}),(0,m.jsx)(`div`,{className:F.heatmapYearGrid,role:`img`,"aria-label":`yearly cost heatmap`,"data-testid":`heatmap-year-grid`,children:t.flat().map(e=>(0,m.jsx)(`button`,{type:`button`,className:F.heatmapYearCell,"data-testid":`heatmap-year-cell`,"data-level":e.level,style:{background:en[e.level]},title:`${e.date} · ${l(e.value)}`,"aria-label":`${e.date}: ${l(e.value)}`},e.date))})]})]}),(0,m.jsxs)(`div`,{className:F.heatmapFooter,children:[(0,m.jsx)(`span`,{className:F.heatmapLegendText,children:r(`heatmapLess`)}),(0,m.jsx)(`span`,{className:F.heatmapLegend,children:en.map((e,t)=>(0,m.jsx)(`i`,{style:{background:e}},t))}),(0,m.jsx)(`span`,{className:F.heatmapLegendText,children:r(`heatmapMore`)})]})]})}return(0,m.jsxs)(`div`,{className:F.heatmap,children:[(0,m.jsx)(`div`,{className:F.heatmapGrid,role:`img`,"aria-label":`daily cost heatmap`,children:u.map(e=>e.map(e=>e.placeholder?(0,m.jsx)(`div`,{className:F.heatmapCellEmpty,children:e.dayNum},e.date):(0,m.jsx)(`button`,{type:`button`,className:F.heatmapCell,"data-testid":`heatmap-cell`,"data-level":e.level,style:{background:en[e.level]},title:`${e.date} · ${l(e.value)}`,"aria-label":`${e.date}: ${l(e.value)}`,onMouseEnter:()=>{s(e)},onMouseLeave:()=>{s(null)},onFocus:()=>{s(e)},onBlur:()=>{s(null)},children:e.dayNum},e.date)))}),(0,m.jsxs)(`div`,{className:F.heatmapFooter,children:[(0,m.jsx)(`span`,{className:F.heatmapLegendText,children:r(`heatmapLess`)}),(0,m.jsx)(`span`,{className:F.heatmapLegend,children:en.map((e,t)=>(0,m.jsx)(`i`,{style:{background:e}},t))}),(0,m.jsx)(`span`,{className:F.heatmapLegendText,children:r(`heatmapMore`)}),o!==null&&(0,m.jsxs)(`span`,{className:F.heatmapHover,"data-testid":`heatmap-hover`,children:[o.date,` · `,l(o.value)]})]})]})}let sn={window:6,threshold:2,reasonFactor:1.8,reasonHitDropPp:15};function cn(e){if(e.length===0)return null;let t=0;for(let n of e)t+=n;return t/e.length}function ln(e){let t=e.cacheHit+e.cacheMiss;return t<=0?null:e.cacheHit/t*100}function un(e,t){let n=t?.window??sn.window,r=t?.threshold??sn.threshold,i=t?.reasonFactor??sn.reasonFactor,a=t?.reasonHitDropPp??sn.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=ln(t),p=cn(s),m=[];if(p!==null&&p>0&&t.cost>p*r){let n=cn(c),r=cn(l),s=cn(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 dn(e){return/[",\r\n]/.test(e)?`"${e.replace(/"/g,`""`)}"`:e}function fn(e){return/^[=+\-@\t\r]/.test(e)?`'${e}`:e}function pn(e){return e.toFixed(2)}function mn(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,pn(n.cost)].join(`,`)})].join(`
3
3
  `)}function hn(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[dn(fn(n)),r,t.calls,pn(t.cost)].join(`,`)})].join(`
4
4
  `)}function gn(e){return e===void 0?``:e.split(/[\\/]/).filter(Boolean).pop()??e}function _n(e){return[`session_id,title,project,calls,cost_cny,last_active`,...e.map(e=>[dn(fn(e.id)),dn(fn(e.title??``)),dn(fn(gn(e.cwd))),e.calls,pn(e.cost),e.lastActive>0?new Date(e.lastActive).toISOString():``].join(`,`))].join(`
package/lib/index.js CHANGED
@@ -690,15 +690,13 @@ function formatTokens(value) {
690
690
  //#endregion
691
691
  //#region lib/types/builtin-catalog.js
692
692
  /**
693
- * Built-in catalog of current mainstream models as of 2026-08-16, priced from
693
+ * Built-in catalog of current mainstream models as of 2026-09-29, priced from
694
694
  * each provider's official price page. Domestic providers are OpenAI-API
695
695
  * compatible and publish RMB prices directly; overseas providers publish USD
696
696
  * and convert through the exchange rate at estimate time. Retired models
697
697
  * (GPT-4o family, Gemini 2.x, GLM-4.x-lite, older Qwen) are deliberately
698
- * absent, as are Anthropic Claude models (their native API is not
699
- * OpenAI-compatible, so the harness cannot drive them directly). DeepSeek
700
- * keys match the harness stats file so real usage prices from the catalog;
701
- * unknown keys fall back to `other`.
698
+ * absent. DeepSeek keys match the harness stats file so real usage prices
699
+ * from the catalog; unknown keys fall back to `other`.
702
700
  *
703
701
  * Time-of-day billing (peak/off-peak) is now real: DeepSeek V4 officially
704
702
  * splits peak (09:00-12:00 / 14:00-18:00 Beijing) at 2x the off-peak rate
@@ -873,7 +871,7 @@ const BUILTIN_MODEL_CATALOG = [
873
871
  price: {
874
872
  currency: "CNY",
875
873
  input: 6,
876
- cacheHit: 1.2,
874
+ cacheHit: 1.3,
877
875
  output: 24
878
876
  }
879
877
  },
@@ -930,32 +928,29 @@ const BUILTIN_MODEL_CATALOG = [
930
928
  colorVar: "dsw-static-blue-400",
931
929
  price: {
932
930
  currency: "CNY",
933
- input: 1,
931
+ input: .8,
934
932
  cacheHit: .1,
935
- output: 3
933
+ output: 2.7
936
934
  },
937
- extraRows: [
938
- {
939
- label: "显式缓存创建",
940
- input: 1.25
941
- },
942
- {
943
- label: "显式缓存命中",
944
- input: .1
945
- },
946
- {
947
- label: "Batch File",
948
- input: .5,
949
- output: 1.5,
950
- note: "长期半价"
951
- },
952
- {
953
- label: "Batch Chat",
954
- input: 1,
955
- output: 3,
956
- note: "与标准价一致"
957
- }
958
- ]
935
+ extraRows: [{
936
+ label: "显式缓存创建",
937
+ input: 1.25
938
+ }, {
939
+ label: "显式缓存命中",
940
+ input: .1
941
+ }]
942
+ },
943
+ {
944
+ key: "qwen-3.8-27b",
945
+ name: "Qwen3.8 27B",
946
+ provider: "阿里通义",
947
+ colorVar: "dsw-static-blue-300",
948
+ price: {
949
+ currency: "CNY",
950
+ input: 3,
951
+ cacheHit: .6,
952
+ output: 12
953
+ }
959
954
  },
960
955
  {
961
956
  key: "qwen-max",
@@ -1068,7 +1063,7 @@ const BUILTIN_MODEL_CATALOG = [
1068
1063
  price: {
1069
1064
  currency: "CNY",
1070
1065
  input: .2,
1071
- cacheHit: .02,
1066
+ cacheHit: .04,
1072
1067
  output: 2
1073
1068
  }
1074
1069
  },
@@ -1120,6 +1115,18 @@ const BUILTIN_MODEL_CATALOG = [
1120
1115
  output: 15
1121
1116
  }
1122
1117
  },
1118
+ {
1119
+ key: "doubao-seed-2.1-lite",
1120
+ name: "Doubao Seed-2.1 Lite",
1121
+ provider: "字节豆包",
1122
+ colorVar: "dsw-static-red-300",
1123
+ price: {
1124
+ currency: "CNY",
1125
+ input: .8,
1126
+ cacheHit: .16,
1127
+ output: 2.7
1128
+ }
1129
+ },
1123
1130
  {
1124
1131
  key: "kimi",
1125
1132
  name: "Kimi K2.7 Code",
@@ -1386,6 +1393,30 @@ const BUILTIN_MODEL_CATALOG = [
1386
1393
  output: 50
1387
1394
  }
1388
1395
  },
1396
+ {
1397
+ key: "gpt-6-sol",
1398
+ name: "GPT-6 Sol",
1399
+ provider: "OpenAI",
1400
+ colorVar: "ds-green",
1401
+ price: {
1402
+ currency: "USD",
1403
+ input: 2,
1404
+ cacheHit: .2,
1405
+ output: 10
1406
+ }
1407
+ },
1408
+ {
1409
+ key: "gpt-6-luna",
1410
+ name: "GPT-6 Luna",
1411
+ provider: "OpenAI",
1412
+ colorVar: "dsw-static-green-400",
1413
+ price: {
1414
+ currency: "USD",
1415
+ input: .1,
1416
+ cacheHit: .01,
1417
+ output: .5
1418
+ }
1419
+ },
1389
1420
  {
1390
1421
  key: "gpt-5.6-sol",
1391
1422
  name: "GPT-5.6 Sol",
@@ -1447,6 +1478,54 @@ const BUILTIN_MODEL_CATALOG = [
1447
1478
  peakHours: GEMINI_PEAK_HOURS,
1448
1479
  tierSemantics: "latency"
1449
1480
  },
1481
+ {
1482
+ key: "gemini-3.8-flash",
1483
+ name: "Gemini 3.8 Flash",
1484
+ provider: "Google",
1485
+ colorVar: "ds-blue",
1486
+ price: {
1487
+ currency: "USD",
1488
+ input: 1.5,
1489
+ cacheHit: .15,
1490
+ output: 7.5,
1491
+ offPeak: {
1492
+ input: .75,
1493
+ cacheHit: .075,
1494
+ output: 3.75
1495
+ }
1496
+ },
1497
+ promo: {
1498
+ factor: .5,
1499
+ endsAtMs: Date.UTC(2026, 11, 31, 16, 0, 0),
1500
+ note: "introductory 促销至 2026-12-31"
1501
+ },
1502
+ peakHours: GEMINI_PEAK_HOURS,
1503
+ tierSemantics: "latency"
1504
+ },
1505
+ {
1506
+ key: "gemini-3.7-flash",
1507
+ name: "Gemini 3.7 Flash",
1508
+ provider: "Google",
1509
+ colorVar: "dsw-static-blue-300",
1510
+ price: {
1511
+ currency: "USD",
1512
+ input: 1.5,
1513
+ cacheHit: .15,
1514
+ output: 7.5,
1515
+ offPeak: {
1516
+ input: .75,
1517
+ cacheHit: .075,
1518
+ output: 3.75
1519
+ }
1520
+ },
1521
+ promo: {
1522
+ factor: .5,
1523
+ endsAtMs: Date.UTC(2026, 11, 31, 16, 0, 0),
1524
+ note: "introductory 促销至 2026-12-31"
1525
+ },
1526
+ peakHours: GEMINI_PEAK_HOURS,
1527
+ tierSemantics: "latency"
1528
+ },
1450
1529
  {
1451
1530
  key: "gemini-flash",
1452
1531
  name: "Gemini 3.6 Flash",
@@ -1463,6 +1542,11 @@ const BUILTIN_MODEL_CATALOG = [
1463
1542
  output: 3.75
1464
1543
  }
1465
1544
  },
1545
+ promo: {
1546
+ factor: .5,
1547
+ endsAtMs: Date.UTC(2026, 11, 31, 16, 0, 0),
1548
+ note: "introductory 促销至 2026-12-31"
1549
+ },
1466
1550
  peakHours: GEMINI_PEAK_HOURS,
1467
1551
  tierSemantics: "latency"
1468
1552
  },
@@ -1502,6 +1586,18 @@ const BUILTIN_MODEL_CATALOG = [
1502
1586
  output: 2.5
1503
1587
  }
1504
1588
  },
1589
+ {
1590
+ key: "grok-build-0.1",
1591
+ name: "Grok Build 0.1",
1592
+ provider: "xAI",
1593
+ colorVar: "dsw-static-neutral-bluish-500",
1594
+ price: {
1595
+ currency: "USD",
1596
+ input: 1,
1597
+ cacheHit: .2,
1598
+ output: 2
1599
+ }
1600
+ },
1505
1601
  {
1506
1602
  key: "llama",
1507
1603
  name: "Llama 4 Maverick",
@@ -1586,6 +1682,42 @@ const BUILTIN_MODEL_CATALOG = [
1586
1682
  output: 10
1587
1683
  }
1588
1684
  },
1685
+ {
1686
+ key: "claude-fable-5-1",
1687
+ name: "Claude Fable 5.1",
1688
+ provider: "Anthropic",
1689
+ colorVar: "ds-red",
1690
+ price: {
1691
+ currency: "USD",
1692
+ input: 10,
1693
+ cacheHit: .25,
1694
+ output: 50
1695
+ }
1696
+ },
1697
+ {
1698
+ key: "claude-opus-5-5",
1699
+ name: "Claude Opus 5.5",
1700
+ provider: "Anthropic",
1701
+ colorVar: "ds-red",
1702
+ price: {
1703
+ currency: "USD",
1704
+ input: 4,
1705
+ cacheHit: .2,
1706
+ output: 20
1707
+ }
1708
+ },
1709
+ {
1710
+ key: "claude-sonnet-5-5",
1711
+ name: "Claude Sonnet 5.5",
1712
+ provider: "Anthropic",
1713
+ colorVar: "dsw-static-red-400",
1714
+ price: {
1715
+ currency: "USD",
1716
+ input: 2,
1717
+ cacheHit: .2,
1718
+ output: 10
1719
+ }
1720
+ },
1589
1721
  {
1590
1722
  key: "mistral-large-2512",
1591
1723
  name: "Mistral Large 3",
@@ -1876,10 +2008,9 @@ const BUILTIN_MODEL_CATALOG = [
1876
2008
  price: {
1877
2009
  currency: "CNY",
1878
2010
  input: 6.5,
1879
- cacheHit: 1.3,
2011
+ cacheHit: 1.7,
1880
2012
  output: 27
1881
- },
1882
- estimated: true
2013
+ }
1883
2014
  },
1884
2015
  {
1885
2016
  key: "kimi-k2.6-fast",
@@ -1989,6 +2120,13 @@ const BUILTIN_MODEL_KEY_ALIASES = {
1989
2120
  "claude-haiku-4.5": "claude-haiku-4-5",
1990
2121
  "claude-opus-5": "claude-opus-5",
1991
2122
  "claude-sonnet-5": "claude-sonnet-5",
2123
+ "claude-fable-5-1": "claude-fable-5-1",
2124
+ "claude-fable-5.1": "claude-fable-5-1",
2125
+ "claude-fable": "claude-fable-5-1",
2126
+ "claude-opus-5-5": "claude-opus-5-5",
2127
+ "claude-opus-5.5": "claude-opus-5-5",
2128
+ "claude-sonnet-5-5": "claude-sonnet-5-5",
2129
+ "claude-sonnet-5.5": "claude-sonnet-5-5",
1992
2130
  "mistral-large-2512": "mistral-large-2512",
1993
2131
  "mistral-large-3": "mistral-large-2512",
1994
2132
  "mistral-small-2603": "mistral-small-2603",
@@ -2020,8 +2158,12 @@ const BUILTIN_MODEL_KEY_ALIASES = {
2020
2158
  "doubao-seed-2.1-pro-290000": "doubao-seed-2.1-pro",
2021
2159
  "doubao-seed-2.1-turbo": "doubao-seed-2.1-turbo",
2022
2160
  "doubao-seed-2-1-turbo": "doubao-seed-2.1-turbo",
2161
+ "doubao-seed-2.1-lite": "doubao-seed-2.1-lite",
2162
+ "doubao-seed-2-1-lite": "doubao-seed-2.1-lite",
2023
2163
  "qwen3.8-max": "qwen-3.8-max",
2024
2164
  "qwen3.8-flash": "qwen-3.8-flash",
2165
+ "qwen3.8-27b": "qwen-3.8-27b",
2166
+ "qwen-3.8-27b": "qwen-3.8-27b",
2025
2167
  "qwen3.7-max": "qwen-max",
2026
2168
  "qwen3.6-max": "qwen3.6-max",
2027
2169
  "qwen3.6-max-preview": "qwen3.6-max",
@@ -2066,7 +2208,15 @@ const BUILTIN_MODEL_KEY_ALIASES = {
2066
2208
  "minimax-m2-7-highspeed": "minimax-m2.7-highspeed",
2067
2209
  "minimax-m2-7-high-speed": "minimax-m2.7-highspeed",
2068
2210
  "gpt-6": "gpt-6-astra",
2069
- "gpt-6-astra": "gpt-6-astra"
2211
+ "gpt-6-astra": "gpt-6-astra",
2212
+ "gpt-6-sol": "gpt-6-sol",
2213
+ "gpt-6-luna": "gpt-6-luna",
2214
+ "gemini-3.8-flash": "gemini-3.8-flash",
2215
+ "gemini-3-8-flash": "gemini-3.8-flash",
2216
+ "gemini-3.7-flash": "gemini-3.7-flash",
2217
+ "gemini-3-7-flash": "gemini-3.7-flash",
2218
+ "grok-build-0.1": "grok-build-0.1",
2219
+ "grok-build": "grok-build-0.1"
2070
2220
  };
2071
2221
  //#endregion
2072
2222
  //#region lib/types/aggregate.js
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.4.11",
4
+ "version": "1.4.13",
5
5
  "keywords": [
6
6
  "deepseek-harness",
7
7
  "deepseek",