@kenz1117/dsh-ui-usage-billing 1.4.28 → 1.4.29
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 +1 -1
- package/lib/index.js +19 -71
- package/package.json +1 -1
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}function b(e,t){try{localStorage.setItem(e,t)}catch{}}function x(e){try{return localStorage.getItem(e)??void 0}catch{return}}function S(e){let t=x(e);if(t!==void 0)try{return JSON.parse(t)}catch{return}}let C={mode:`combined`,targets:[]},w=`dsh.ui-usage-billing.float`;function T(){let e=()=>({...C,targets:[...C.targets]}),t=S(w);if(typeof t!=`object`||!t)return e();let n=t;return{mode:n.mode===`subscription`?`subscription`:`combined`,targets:Array.isArray(n.targets)?n.targets.filter(e=>typeof e==`string`):[]}}function ee(e){b(w,JSON.stringify(e))}let E={metric:`money`,span:`day`},D=`dsh.ui-usage-billing.card`;function O(){let e=S(D);if(typeof e!=`object`||!e)return{...E};let t=e;return{metric:t.metric===`tokens`?`tokens`:`money`,span:t.span===`week`||t.span===`month`?t.span:`day`}}function te(e){b(D,JSON.stringify(e))}let ne=`dsh.ui-usage-billing.kpi-range`;function k(){let e=x(ne);return e===`today`||e===`7d`||e===`week`||e===`month`||e===`all`?e:`all`}function re(e){b(ne,e)}let ie={hideUnidentified:!0},A=`dsh.ui-usage-billing.sites`;function ae(){let e=S(A);return typeof e!=`object`||!e?{...ie}:{hideUnidentified:e.hideUnidentified!==!1}}function oe(e){b(A,JSON.stringify(e))}let se={show:!0,position:`toolbar`},ce=`dsh.ui-usage-billing.livecost`,j=`dsh.ui-usage-billing.livecost-pref`;function le(){let e=S(ce);if(typeof e!=`object`||!e)return{...se};let t=e;return{show:t.show!==!1,position:t.position===`above`||t.position===`toolbar`||t.position===`below`?t.position:se.position}}function M(e){b(ce,JSON.stringify(e))}let N=`dsh.ui-usage-billing.currency`,ue=`dsh.ui-usage-billing.currency-pref`;function de(){let e=x(N);return e===`usd`||e===`cny`||e===`eur`?e:`cny`}function fe(e){b(N,e)}let pe=`dsh.ui-usage-billing.pinned`,me=`dsh.ui-usage-billing.pinned-pref`;function he(){let e=S(pe);return Array.isArray(e)?e.filter(e=>typeof e==`string`&&e!==``):[]}function ge(e){b(pe,JSON.stringify(e))}let _e=`dsh.ui-usage-billing.provider-expanded`;function ve(){let e=S(_e);return Array.isArray(e)?e.filter(e=>typeof e==`string`&&/^(ch|sub|bal):/.test(e)):[]}function ye(e){b(_e,JSON.stringify(e))}let be=`dsh.ui-usage-billing.providers-today`;function xe(){return x(be)===`1`}function Se(e){b(be,e?`1`:`0`)}let P=`dsh.ui-usage-billing.language`;function Ce(){let e=x(P);if(e===`en`||e===`zh`)return e;let t=de()===`usd`?`en`:`zh`;return we(t),t}function we(e){b(P,e)}function Te(e){let t=he(),n=t.includes(e)?t.filter(t=>t!==e):[...t,e];return ge(n),n}let F=`dsh.ui-usage-billing.prices`;function Ee(){let e=S(F);if(e==null)return[];let t=[],n=(e,n)=>{if(typeof n!=`object`||!n)return;let r=n,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})}t.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(e))for(let t of e){if(typeof t!=`object`||!t)continue;let e=t;typeof e.key==`string`&&e.key!==``&&n(e.key,t)}else if(typeof e==`object`)for(let[t,r]of Object.entries(e))n(t,r);return t}function De(e){b(F,JSON.stringify(e))}let Oe={metric:`ttft`},ke=`dsh.ui-usage-billing.perf`;function Ae(){let e=S(ke);if(typeof e!=`object`||!e)return{...Oe};let t=e;return{metric:t.metric===`tps`?`tps`:`ttft`,...Array.isArray(t.models)?{models:t.models.filter(e=>typeof e==`string`)}:{}}}function je(e){b(ke,JSON.stringify(e))}let Me=`@kenz1117/dsh-ui-usage-billing/UsageBilling.module.css`;if(typeof document<`u`&&document.querySelector(`style[data-plugin-css=`+JSON.stringify(Me)+`]`)===null){let e=document.createElement(`style`);e.dataset.plugin=`@kenz1117/dsh-ui-usage-billing`,e.dataset.pluginCss=Me,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)}.ppxb1W_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}.ppxb1W_railButton:hover,.ppxb1W_railButton:focus-visible{border-color:var(--ds-blue);color:var(--ds-blue);outline:none}.ppxb1W_railButton svg{width:26px;height:26px}.ppxb1W_triggerBudgetPulse{border-color:color-mix(in srgb, var(--ds-red) 55%, transparent);animation:2s ease-in-out infinite ppxb1W_budgetPulse}.ppxb1W_triggerBudgetOver{animation-duration:1.2s}@keyframes ppxb1W_budgetPulse{0%,to{box-shadow:0 1px 2px #0000000a,0 0 #ef444400}50%{box-shadow:0 1px 2px #0000000a,0 0 0 3px #ef444429}}.ppxb1W_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}.ppxb1W_trigger:hover,.ppxb1W_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)}.ppxb1W_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}.ppxb1W_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%)}.ppxb1W_trigger:hover:after,.ppxb1W_trigger:focus-visible:after{animation:.9s ease-out ppxb1W_triggerScan}@keyframes ppxb1W_triggerScan{0%{opacity:0;transform:translate(-110%)}25%{opacity:1}to{opacity:0;transform:translate(110%)}}@media (prefers-reduced-motion:reduce){.ppxb1W_triggerSparkBar,.ppxb1W_trigger:hover:after,.ppxb1W_trigger:focus-visible:after{animation:none}.ppxb1W_triggerGaugeNeedle,.ppxb1W_triggerGaugeArc{transition:none}.ppxb1W_triggerBudgetPulse{animation:none}}.ppxb1W_triggerIcon{width:32px;height:32px;color:var(--ds-blue);flex:none;justify-content:center;align-items:center;display:inline-flex}.ppxb1W_triggerIcon svg{width:30px;height:30px}.ppxb1W_triggerGaugeNeedle{transition:transform 1.1s cubic-bezier(.22,1,.36,1)}.ppxb1W_triggerGaugeArc{transition:stroke-dasharray 1.1s cubic-bezier(.22,1,.36,1)}.ppxb1W_triggerBudgetHot{color:var(--ds-red)}.ppxb1W_triggerMain{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.ppxb1W_triggerPrimary{flex-direction:column;gap:1px;min-width:0;display:flex}.ppxb1W_triggerValueRow{align-items:baseline;gap:2px;min-width:0;display:flex}.ppxb1W_triggerLabel{color:var(--ds-t-3);white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:11px;line-height:15px;overflow:hidden}.ppxb1W_triggerYen{color:var(--ds-t-3);font-variant-numeric:tabular-nums;font-size:12px;font-weight:600;line-height:16px}.ppxb1W_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}.ppxb1W_triggerSpark{flex:none;align-items:flex-end;gap:2px;height:20px;display:flex}.ppxb1W_triggerSparkBar,.ppxb1W_triggerSparkHot{background:var(--ds-blue);opacity:.6;border-radius:1px 1px 0 0;width:3px}.ppxb1W_triggerSparkHot{opacity:1}.ppxb1W_triggerSparkBar{animation:3.6s ease-in-out infinite ppxb1W_triggerSparkBreath}.ppxb1W_triggerSparkBar:nth-child(2n){animation-delay:-1.2s}.ppxb1W_triggerSparkBar:nth-child(3n){animation-delay:-2.4s}@keyframes ppxb1W_triggerSparkBreath{0%,to{opacity:.6}50%{opacity:.34}}.ppxb1W_triggerWrap{flex:auto;width:100%;min-width:96px;max-width:100%;display:block;position:relative;container:ppxb1W_billing-trigger/inline-size}@container ppxb1W_billing-trigger (width<=210px){.ppxb1W_trigger{box-shadow:none;-webkit-backdrop-filter:none;background:0 0;border:none;border-radius:12px;padding:7px 8px}.ppxb1W_trigger:before,.ppxb1W_trigger:after{display:none}.ppxb1W_trigger:hover,.ppxb1W_trigger:focus-visible{background:var(--dsw-alias-interactive-bg-hover);box-shadow:none;border-color:#0000;transform:none}.ppxb1W_triggerSpark,.ppxb1W_triggerLabel{display:none}}@container ppxb1W_billing-trigger (width<=140px){.ppxb1W_triggerMain{display:none}}.ppxb1W_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%))}.ppxb1W_triggerPop,.ppxb1W_triggerPop *{box-sizing:border-box}.ppxb1W_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}.ppxb1W_triggerPopShown{opacity:1;visibility:visible;transition:opacity var(--ds-t-fast), transform var(--ds-t-fast), visibility 0s linear 0s;transform:translateY(-100%)}.ppxb1W_popHead{justify-content:space-between;align-items:baseline;gap:8px;display:flex}.ppxb1W_popTitle{letter-spacing:.06em;text-transform:uppercase;color:var(--ds-t-3);font-size:12px;font-weight:700;line-height:18px}.ppxb1W_metricGrid{grid-template-columns:repeat(3,1fr);gap:10px 12px;display:grid}.ppxb1W_metricCell{flex-direction:column;gap:2px;min-width:0;display:flex}.ppxb1W_metricLabel{color:var(--ds-t-3);font-size:11px;line-height:14px}.ppxb1W_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}.ppxb1W_metricValueSuccess{color:var(--ds-green)}.ppxb1W_popModel{border-top:1px dashed var(--ds-border);flex-direction:column;gap:6px;margin-top:9px;padding-top:10px;display:flex}.ppxb1W_popModelLabel{color:var(--ds-t-3);font-size:10px;line-height:14px}.ppxb1W_popModelRow{align-items:center;gap:8px;min-width:0;display:flex}.ppxb1W_popDot{border-radius:999px;flex:none;width:6px;height:6px}.ppxb1W_popDotDirect{background:var(--ds-green)}.ppxb1W_popDotSub{background:var(--ds-amber)}.ppxb1W_popDotNeutral{background:var(--ds-t-3)}.ppxb1W_popTagPrimary,.ppxb1W_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}.ppxb1W_popTagPrimary{background:color-mix(in srgb, var(--ds-blue) 14%, transparent);color:var(--ds-blue)}.ppxb1W_popTagSub{background:color-mix(in srgb, var(--ds-amber) 18%, transparent);color:var(--ds-amber)}.ppxb1W_popModelName{color:var(--ds-t-2);text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:500;line-height:16px;overflow:hidden}.ppxb1W_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}.ppxb1W_popModelStatusLow{color:var(--ds-red)}.ppxb1W_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 ppxb1W_dashboardIn}@keyframes ppxb1W_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)}.ppxb1W_dashboard{flex-direction:column;width:100%;max-height:min(760px,88vh);display:flex}.ppxb1W_dashboardHead{border-bottom:1px solid var(--ds-border);justify-content:space-between;align-items:center;gap:12px;padding:12px 18px;display:flex}.ppxb1W_dashboardTitle{color:var(--ds-t-1);margin:0;font-size:14px;font-weight:600;line-height:20px}.ppxb1W_dashboardSubtitle{color:var(--ds-t-3);margin:2px 0 0;font-size:11px;line-height:16px}.ppxb1W_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}.ppxb1W_closeButton:hover{background:var(--dsb-3);color:var(--ds-t-1)}.ppxb1W_closeButton svg{stroke-width:2px;width:16px;height:16px}.ppxb1W_dashboardBody{flex-direction:column;gap:14px;padding:16px 24px 24px;display:flex;overflow-y:auto}.ppxb1W_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}.ppxb1W_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}.ppxb1W_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}.ppxb1W_tabButton:hover{color:var(--ds-t-2)}.ppxb1W_tabButton:focus-visible{color:var(--ds-t-2);box-shadow:0 0 0 1px var(--ds-border-strong);outline:none}.ppxb1W_tabButtonActive,.ppxb1W_tabButtonActive:hover,.ppxb1W_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}.ppxb1W_tabPanel{flex-direction:column;gap:14px;animation:.14s ease-out ppxb1W_tabPanelIn;display:flex}@keyframes ppxb1W_tabPanelIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.ppxb1W_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}.ppxb1W_reconcileIcon{color:var(--dsw-alias-label-tertiary);flex:none;margin-top:1px;display:inline-flex}.ppxb1W_reconcileText{flex:1}.ppxb1W_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}.ppxb1W_reconcileDismiss:hover{color:var(--dsw-alias-label-primary);background:color-mix(in srgb, var(--dsw-alias-label-primary) 8%, transparent)}.ppxb1W_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}.ppxb1W_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}.ppxb1W_heroTop{justify-content:space-between;align-items:center;gap:24px;display:flex}.ppxb1W_heroMain{flex-direction:column;gap:2px;min-width:0;display:flex}.ppxb1W_heroLabel{color:var(--ds-t-3);text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;font-size:11px;font-weight:500;line-height:15px}.ppxb1W_heroReadout{align-items:baseline;gap:4px;display:flex}.ppxb1W_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}.ppxb1W_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}.ppxb1W_heroMeta{color:var(--ds-t-2);white-space:nowrap;margin-top:2px;font-size:12px;line-height:16px}.ppxb1W_heroGauge{flex-direction:column;flex:none;align-items:center;gap:4px;width:96px;display:flex}.ppxb1W_heroGaugeDial{flex:none;width:96px;height:96px;position:relative}.ppxb1W_heroGaugeSvg{width:100%;height:100%;display:block;transform:rotate(-90deg)}.ppxb1W_heroGaugeTrack{fill:none;stroke:var(--dsb-3);stroke-width:7px}.ppxb1W_heroGaugeArc{fill:none;stroke:var(--ds-blue);stroke-width:7px;stroke-linecap:round;transition:stroke-dasharray var(--ds-t-fast)}.ppxb1W_heroGaugeArcOver{stroke:var(--ds-red)}.ppxb1W_heroGaugeCenter{flex-direction:column;justify-content:center;align-items:center;gap:1px;display:flex;position:absolute;inset:0}.ppxb1W_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}.ppxb1W_heroGaugeRemainOver{color:var(--ds-red)}.ppxb1W_heroGaugeLabel{color:var(--ds-t-3);font-size:11px;line-height:13px}.ppxb1W_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}.ppxb1W_heroSide{border-top:1px solid var(--ds-border);align-items:stretch;padding-top:12px;display:flex}.ppxb1W_heroSideItem{border-left:1px solid var(--ds-border);flex-direction:column;flex:1;gap:2px;min-width:0;padding-left:14px;display:flex}.ppxb1W_heroSideItem:first-child{border-left:none;padding-left:0}.ppxb1W_heroSideLabel{color:var(--ds-t-3);text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;font-size:10px;font-weight:500;line-height:13px}.ppxb1W_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}.ppxb1W_heroSideSpacer{flex:1;display:block}.ppxb1W_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}.ppxb1W_deltaUp{color:var(--ds-green);background:color-mix(in srgb, var(--ds-green) 12%, transparent)}.ppxb1W_deltaDown{color:var(--ds-red);background:color-mix(in srgb, var(--ds-red) 12%, transparent)}.ppxb1W_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}.ppxb1W_kpiZone{flex-direction:column;gap:8px;display:flex}.ppxb1W_kpiZoneHead{justify-content:flex-end;align-items:center;gap:8px;display:flex}.ppxb1W_kpiZoneLabel{color:var(--ds-t-3);font-size:11px;line-height:14px}.ppxb1W_kpiGrid{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;display:grid}.ppxb1W_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}.ppxb1W_kpiTile:hover{border-color:var(--ds-border-strong)}.ppxb1W_kpiLabel{color:var(--ds-t-3);text-transform:uppercase;letter-spacing:.04em;font-size:11px;font-weight:500;line-height:14px}.ppxb1W_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}.ppxb1W_kpiGreen{color:var(--ds-green)}.ppxb1W_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}.ppxb1W_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}.ppxb1W_panelHead{justify-content:space-between;align-items:baseline;gap:10px;display:flex}.ppxb1W_panelHeadControls{align-items:center;gap:8px;display:inline-flex}.ppxb1W_panelTitle{letter-spacing:-.005em;color:var(--ds-t-1);margin:0;font-size:13px;font-weight:600;line-height:20px}.ppxb1W_panelHint{color:var(--ds-t-3);white-space:nowrap;font-size:11px;line-height:16px}.ppxb1W_rangeToggle{border:1px solid var(--ds-border);background:var(--dsb-3);border-radius:8px;gap:2px;padding:2px;display:inline-flex}.ppxb1W_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}.ppxb1W_rangeButtonActive{background:var(--dsb-2);color:var(--ds-t-1);box-shadow:0 0 0 1px var(--ds-border-strong);font-weight:600}.ppxb1W_exportBar{justify-content:flex-end;align-items:center;gap:8px;display:flex}.ppxb1W_exportLabel{color:var(--ds-t-3);font-size:11px;line-height:16px}.ppxb1W_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}.ppxb1W_exportButton:hover,.ppxb1W_exportButton:focus-visible{border-color:var(--ds-border-strong);color:var(--ds-t-1);outline:none}.ppxb1W_exportButton:disabled{opacity:.45;cursor:not-allowed}.ppxb1W_exportButton:disabled:hover{border-color:var(--ds-border);color:var(--ds-t-2)}.ppxb1W_shareTrack{background:var(--dsb-3);border-radius:4px;height:8px;display:flex;overflow:hidden}.ppxb1W_shareSeg{height:100%;transition:width var(--ds-t-fast)}.ppxb1W_shareSegPeak{background:var(--ds-blue)}.ppxb1W_shareSegOff{background:color-mix(in srgb, var(--ds-blue) 30%, var(--dsb-3))}.ppxb1W_shareSegUser{background:var(--ds-blue)}.ppxb1W_shareSegAssistant{background:var(--ds-green)}.ppxb1W_shareSegTool{background:var(--ds-amber)}.ppxb1W_shareLegend{align-items:center;gap:16px;display:flex}.ppxb1W_shareItem{color:var(--ds-t-2);align-items:baseline;gap:6px;font-size:11px;line-height:17px;display:inline-flex}.ppxb1W_bucketCost{font-variant-numeric:tabular-nums;align-items:baseline;gap:3px;display:inline-flex}.ppxb1W_bucketOfficial{color:var(--ds-blue);font-weight:600}.ppxb1W_bucketSep{color:var(--ds-t-4)}.ppxb1W_bucketThird{color:var(--ds-t-2)}.ppxb1W_shareDot{border-radius:2px;flex:none;align-self:center;width:8px;height:8px}.ppxb1W_shareValue{color:var(--ds-t-1);font-variant-numeric:tabular-nums;font-weight:600}.ppxb1W_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}.ppxb1W_budgetInput:focus-visible{outline:none}.ppxb1W_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}.ppxb1W_switchOn{background:color-mix(in srgb, var(--ds-blue) 60%, transparent);border-color:#0000}.ppxb1W_switchKnob{width:12px;height:12px;transition:transform var(--ds-t-fast);background:#fff;border-radius:50%;position:absolute;top:2px;left:2px}.ppxb1W_switchOn .ppxb1W_switchKnob{transform:translate(14px)}.ppxb1W_budgetFillWarn{background:var(--ds-amber)}.ppxb1W_budgetFillOver{background:var(--ds-red)}.ppxb1W_chartWrap{width:100%;position:relative}.ppxb1W_chartSvg{width:100%;height:auto;display:block}.ppxb1W_chartEmpty{height:140px;color:var(--ds-t-3);justify-content:center;align-items:center;font-size:13px;display:flex}.ppxb1W_emptyRow{text-align:center;color:var(--ds-t-3);padding:28px 0;font-size:13px}.ppxb1W_chartGrid{stroke:var(--ds-border);stroke-width:1px}.ppxb1W_chartAxisLabel{fill:var(--ds-t-3);font-size:10px}.ppxb1W_chartBar{fill:var(--ds-blue);opacity:.7}.ppxb1W_chartBar:hover{opacity:1}.ppxb1W_chartStack{stroke:var(--dsb);stroke-width:.75px}.ppxb1W_chartStack:hover{opacity:.9}.ppxb1W_chartLine{stroke:var(--ds-blue);stroke-width:2px;stroke-linecap:round;stroke-linejoin:round}.ppxb1W_chartCrosshair{stroke:var(--ds-t-4);stroke-width:1px;stroke-dasharray:3 3}.ppxb1W_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))}.ppxb1W_chartTooltipAlignRight{transform:translate(calc(-100% - 8px),calc(-100% - 10px))}.ppxb1W_chartTooltipAlignLeft{transform:translate(8px,calc(-100% - 10px))}.ppxb1W_chartTooltipDate{color:var(--ds-t-1);margin-bottom:3px;font-size:11px;font-weight:600}.ppxb1W_chartTooltipRow{color:var(--ds-t-2);align-items:center;gap:5px;font-size:11px;line-height:17px;display:flex}.ppxb1W_chartTooltipRow strong{color:var(--ds-t-1);font-variant-numeric:tabular-nums;font-weight:600}.ppxb1W_chartTooltipHead{justify-content:space-between;align-items:baseline;gap:14px;margin-bottom:3px;display:flex}.ppxb1W_chartTooltipHead .ppxb1W_chartTooltipDate{margin-bottom:0}.ppxb1W_chartTooltipHead strong{color:var(--ds-t-1);font-variant-numeric:tabular-nums;font-size:11px;font-weight:600}.ppxb1W_chartTooltipSplit{justify-content:space-between;gap:14px}.ppxb1W_chartTooltipLabel{align-items:center;gap:5px;display:flex}.ppxb1W_chartTooltipModelDetail{color:var(--ds-t-3);font-variant-numeric:tabular-nums;margin:-2px 0 4px 13px;font-size:10.5px;line-height:14px}.ppxb1W_chartBarPlaceholder{fill:color-mix(in srgb, var(--ds-t-2) 30%, transparent)}.ppxb1W_chartLegendLine{background:var(--ds-blue);border-radius:2px;width:10px;height:3px;display:inline-block}.ppxb1W_chartLegendBar{background:var(--ds-blue);opacity:.5;border-radius:2px;width:7px;height:7px;display:inline-block}.ppxb1W_chartTooltipSwatch{border-radius:2px;flex:none;width:8px;height:8px;display:inline-block}.ppxb1W_chartLegend{color:var(--ds-t-2);justify-content:flex-end;gap:14px;margin-top:2px;font-size:11px;display:flex}.ppxb1W_chartLegend span{align-items:center;gap:5px;display:inline-flex}.ppxb1W_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}.ppxb1W_chartLegendItem:hover{color:var(--ds-t-1)}.ppxb1W_chartLegendItemActive{color:var(--ds-t-1);font-weight:600}.ppxb1W_perfBar{align-items:center;margin:10px 0 2px;display:flex}.ppxb1W_perfChips{flex-wrap:wrap;gap:6px;margin:6px 0 2px;display:flex}.ppxb1W_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}.ppxb1W_perfChip:hover{color:var(--ds-t-1)}.ppxb1W_perfChipOff{opacity:.45}.ppxb1W_perfChipDot{border-radius:2px;flex:none;width:8px;height:8px;display:inline-block}.ppxb1W_chartHoverDot{stroke:var(--dsb-2);stroke-width:1.5px}.ppxb1W_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}.ppxb1W_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}.ppxb1W_ubAlertLeft{align-items:center;gap:8px;display:inline-flex}.ppxb1W_ubRate{color:var(--ds-t-1);font-variant-numeric:tabular-nums;font-weight:600}.ppxb1W_ubAlertNote{color:var(--ds-t-2);margin:0}.ppxb1W_ubTag,.ppxb1W_ubTagSuccess,.ppxb1W_ubTagNeutral,.ppxb1W_ubTagAlert,.ppxb1W_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}.ppxb1W_ubTag{color:var(--ds-t-2);background:var(--dsb-2)}.ppxb1W_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)}.ppxb1W_ubTagNeutral{color:var(--ds-t-2);background:var(--dsb-2)}.ppxb1W_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)}.ppxb1W_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}.ppxb1W_ubExtraRow td{opacity:.72;padding-top:2px;padding-bottom:2px;font-size:12px}.ppxb1W_ubExtraName{color:var(--ds-t-2);margin-left:26px}.ppxb1W_ubExtraNote{color:var(--ds-t-3);margin-left:8px;font-size:10px}.ppxb1W_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}.ppxb1W_ubCardHead{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.ppxb1W_ubCardTitle{color:var(--ds-t-1);margin:0;font-size:13px;font-weight:600;line-height:18px}.ppxb1W_ubCardSub{color:var(--ds-t-3);font-size:11px;line-height:16px}.ppxb1W_ubTablewrap{border:1px solid var(--ds-border);border-radius:var(--ds-r-1);overflow:auto}.ppxb1W_ubTable{border-collapse:collapse;white-space:nowrap;width:100%;font-size:12px}.ppxb1W_ubTable th,.ppxb1W_ubTable td{border-bottom:1px solid var(--ds-border);text-align:left;color:var(--ds-t-1);padding:7px 9px}.ppxb1W_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}.ppxb1W_bandDots{flex:none;align-items:center;gap:5px;display:inline-flex}.ppxb1W_bandDot{cursor:pointer;background:0 0;border:1.5px solid;border-radius:999px;flex:none;width:9px;height:9px;padding:0}.ppxb1W_bandDotOn{background:currentColor}.ppxb1W_offPeak{color:var(--ds-blue)}.ppxb1W_soon{color:var(--ds-amber)}.ppxb1W_peak{color:var(--ds-red)}span.ppxb1W_bandDot{cursor:default}.ppxb1W_ubTable th,.ppxb1W_ubTable td:first-child{white-space:normal}.ppxb1W_ubTable tbody tr:last-child td{border-bottom:0}.ppxb1W_ubTable thead th,.ppxb1W_ubTable thead th.ppxb1W_numCol{color:var(--ds-t-3);text-transform:uppercase;letter-spacing:.04em;text-align:center;padding:6px 9px;font-size:11px;font-weight:500}.ppxb1W_ubModel{align-items:center;gap:6px;display:inline-flex}.ppxb1W_ubModelName{color:var(--ds-t-1);align-items:center;gap:4px;font-weight:500;display:inline-flex}.ppxb1W_ubChipPeak,.ppxb1W_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}.ppxb1W_ubChipLabel{font-size:10px;font-weight:600}.ppxb1W_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)}.ppxb1W_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)}.ppxb1W_ubNotes{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.ppxb1W_ubNotesItem{align-items:baseline;gap:10px;display:flex}.ppxb1W_ubNotesTerm{color:var(--ds-t-1);flex:0 0 72px;font-size:12px;font-weight:500}.ppxb1W_ubNotesDesc{min-width:0;color:var(--ds-t-2);flex:1;font-size:12px;line-height:17px}.ppxb1W_ubCardControlGroup{flex-wrap:wrap;align-items:center;gap:8px;display:inline-flex}.ppxb1W_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}.ppxb1W_modelTable{border-collapse:collapse;table-layout:fixed;width:100%;min-width:640px;font-size:12px}.ppxb1W_modelTable th:first-child{width:26%}.ppxb1W_modelTable th,.ppxb1W_modelTable td{border-bottom:1px solid var(--ds-border);text-align:left;white-space:nowrap;color:var(--ds-t-1);padding:10px 12px}.ppxb1W_modelTable tbody tr:last-child td{border-bottom:0}.ppxb1W_sessionGroupRow{cursor:pointer}.ppxb1W_sessionGroupRow .ppxb1W_modelName:before{content:"›";color:var(--ds-t-3);margin-right:6px;display:inline-block}.ppxb1W_sessionGroupRow[aria-expanded=true] .ppxb1W_modelName:before{transform:rotate(90deg)}.ppxb1W_sessionGroupRow:focus-visible{outline:2px solid var(--ds-border-strong);outline-offset:-2px}.ppxb1W_sessionChildRow td:first-child{padding-left:30px}.ppxb1W_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}.ppxb1W_modelTable tbody tr{transition:background-color .12s}.ppxb1W_modelTable tbody tr:hover{background:0 0}.ppxb1W_modelTable tbody tr.ppxb1W_modelRowFocusable{cursor:pointer}.ppxb1W_modelTable tbody tr.ppxb1W_modelRowActive,.ppxb1W_modelTable tbody tr.ppxb1W_modelRowActive:hover{background:color-mix(in srgb, var(--ds-blue) 10%, transparent)}.ppxb1W_numCol{text-align:right;font-family:var(--mono);font-variant-numeric:tabular-nums}.ppxb1W_modelTable .ppxb1W_numCol,.ppxb1W_ubTable .ppxb1W_numCol{text-align:right}.ppxb1W_na{color:var(--ds-t-4)}.ppxb1W_unknownHint{color:var(--ds-t-4);margin:0 0 8px;font-size:12px;line-height:18px}.ppxb1W_modelCell{align-items:center;gap:8px;display:inline-flex}.ppxb1W_modelDot{border-radius:2px;flex:none;width:8px;height:8px}.ppxb1W_modelName{color:var(--ds-t-1);font-weight:500;line-height:16px;display:block}.ppxb1W_modelProvider{color:var(--ds-t-3);font-size:10.5px;line-height:14px;display:block}.ppxb1W_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}.ppxb1W_siteRowName{align-items:center;gap:8px;min-width:0;display:inline-flex}.ppxb1W_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}.ppxb1W_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)}.ppxb1W_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)}.ppxb1W_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)}.ppxb1W_siteRowTitle{color:var(--ds-t-1);text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;line-height:18px;overflow:hidden}.ppxb1W_siteRowMeta{flex:none;align-items:center;gap:10px;display:inline-flex}.ppxb1W_siteRowCost{color:var(--ds-t-1);font-variant-numeric:tabular-nums;font-size:12.5px;font-weight:600;line-height:18px}.ppxb1W_siteRowCalls{color:var(--ds-t-2);font-variant-numeric:tabular-nums;font-size:11.5px;line-height:17px}.ppxb1W_siteRowCallsLow{color:var(--ds-red)}.ppxb1W_flatTag{color:var(--ds-t-3);font-size:10.5px;line-height:14px}.ppxb1W_healthDot{border-radius:50%;flex:none;width:6px;height:6px;display:inline-block}.ppxb1W_healthOk{background:var(--ds-green);box-shadow:0 0 0 3px color-mix(in srgb, var(--ds-green) 18%, transparent)}.ppxb1W_healthBad{background:var(--ds-red);box-shadow:0 0 0 3px color-mix(in srgb, var(--ds-red) 18%, transparent)}.ppxb1W_healthIdle{background:var(--ds-t-4)}.ppxb1W_dashboardRight{align-items:center;gap:8px;min-width:0;display:flex}.ppxb1W_healthBadge{white-space:nowrap;border-radius:999px;align-items:center;gap:6px;padding:3px 9px;font-size:11px;line-height:16px;display:inline-flex}.ppxb1W_healthBadgeOk{color:var(--ds-green);background:var(--dsb-2)}.ppxb1W_healthBadgeBad{color:var(--ds-red);background:var(--dsb-2)}.ppxb1W_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}.ppxb1W_planTagBadge{background:color-mix(in srgb, var(--ds-green) 20%, transparent);border-radius:4px;padding:0 4px;font-size:9px;line-height:12px}.ppxb1W_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}.ppxb1W_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}.ppxb1W_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}.ppxb1W_feeBarAbove{order:-1;align-self:center;margin-bottom:8px}.ppxb1W_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}.ppxb1W_feeInline .ppxb1W_feeChipPrimary,.ppxb1W_feeInline .ppxb1W_feeChipOff{height:18px;padding:0 7px}.ppxb1W_feeInlineNum{color:var(--ds-t-1);padding-right:6px;font-weight:600}.ppxb1W_feeInlineAlert{background:color-mix(in srgb, var(--ds-amber) 12%, transparent)}.ppxb1W_feeInlineAlert .ppxb1W_feeInlineNum{color:var(--ds-amber)}.ppxb1W_feeInlineError{background:color-mix(in srgb, var(--ds-red) 12%, transparent)}.ppxb1W_feeInlineError .ppxb1W_feeInlineNum{color:var(--ds-red)}.ppxb1W_feeBar .ppxb1W_feeSep{color:var(--ds-t-4)}.ppxb1W_feeCount{color:var(--ds-t-1);font-weight:600}.ppxb1W_feeSuffix{color:var(--ds-t-3)}.ppxb1W_feeItem{color:var(--ds-t-2);white-space:nowrap}.ppxb1W_feeNum{color:var(--ds-t-1);font-weight:600}.ppxb1W_feeSep{color:var(--ds-t-4)}.ppxb1W_feeChipPrimary,.ppxb1W_feeChipOff,.ppxb1W_feeChipAlert,.ppxb1W_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}.ppxb1W_feeChipPrimary{color:var(--ds-blue);border-color:color-mix(in srgb, var(--ds-blue) 30%, transparent)}.ppxb1W_feeChipOff{color:var(--ds-cyan);border-color:color-mix(in srgb, var(--ds-cyan) 30%, transparent)}.ppxb1W_feeChipAlert{color:var(--ds-amber);border-color:color-mix(in srgb, var(--ds-amber) 30%, transparent)}.ppxb1W_feeChipError{color:var(--ds-red);border-color:color-mix(in srgb, var(--ds-red) 30%, transparent)}.ppxb1W_balanceCell{align-items:center;gap:6px;display:inline-flex;position:relative}.ppxb1W_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}.ppxb1W_providerGroupRecharge:empty{background:0 0;border-color:#0000}.ppxb1W_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)}.ppxb1W_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}.ppxb1W_balanceDaysBadge:hover{border-color:var(--ds-t-3);color:var(--ds-t-1)}.ppxb1W_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)}.ppxb1W_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}.ppxb1W_balanceDetailHead{justify-content:space-between;align-items:center;gap:12px;display:flex}.ppxb1W_balanceDetailTitle{color:var(--ds-t-1);font-size:12px;font-weight:600}.ppxb1W_balanceDetailClose{cursor:pointer;color:var(--ds-t-3);background:0 0;border:none;font-size:14px;line-height:1}.ppxb1W_balanceDetailClose:hover{color:var(--ds-t-1)}.ppxb1W_balanceDetailGrid{flex-direction:column;gap:4px;display:inline-flex}.ppxb1W_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}.ppxb1W_balanceDetailLabel{color:var(--ds-t-3)}.ppxb1W_balanceDetailValue{color:var(--ds-t-1);font-weight:500}.ppxb1W_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}.ppxb1W_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}.ppxb1W_currencyButtonActive{background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary)}.ppxb1W_subscriptionGrid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px;margin-top:10px;display:grid}.ppxb1W_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}.ppxb1W_subscriptionHead{flex-wrap:wrap;align-items:baseline;gap:6px;margin-bottom:8px;display:flex}.ppxb1W_subscriptionName{color:var(--ds-t-1);font-size:13px;font-weight:600}.ppxb1W_subscriptionPlan{color:var(--ds-t-2);font-size:11px}.ppxb1W_subscriptionPlan[data-kind=code],.ppxb1W_subscriptionPlan[data-kind=token]{color:var(--ds-t-2);background:var(--dsb-3);border-radius:999px;padding:1px 8px;font-weight:500}.ppxb1W_subscriptionTier{color:var(--ds-t-3);margin-left:6px}.ppxb1W_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}.ppxb1W_subscriptionStatus{color:var(--ds-t-2);margin-bottom:6px;font-size:11px}.ppxb1W_subscriptionWindow{align-items:center;gap:10px;margin-top:8px;font-size:11px;display:flex}.ppxb1W_subscriptionWindowLabel{color:var(--ds-t-3);flex:0 0 44px}.ppxb1W_subscriptionTrack{background:var(--dsb-3);height:6px;box-shadow:inset 0 0 0 1px var(--ds-border);border-radius:3px;flex:1;overflow:hidden}.ppxb1W_subscriptionFill{background:var(--ds-blue);height:calc(100% - 2px);transition:width var(--ds-t-fast);border-radius:2px;margin:1px;display:block}.ppxb1W_subscriptionFillWarn{background:var(--ds-amber)}.ppxb1W_subscriptionFillOver{background:var(--ds-red)}.ppxb1W_subscriptionMeta{flex-direction:column;flex:none;align-items:flex-end;gap:2px;display:flex}.ppxb1W_subscriptionPct{text-align:right;min-width:52px;font-family:var(--mono);font-variant-numeric:tabular-nums;color:var(--ds-t-1);flex:none}.ppxb1W_subscriptionExhausted{color:var(--ds-red);min-width:52px;font-weight:600}.ppxb1W_subscriptionReset{color:var(--ds-t-3);white-space:nowrap;flex:none;font-size:10px}.ppxb1W_providerGroupList{flex-direction:column;gap:10px;display:flex}.ppxb1W_providerGroup{border:1px solid var(--ds-border);border-radius:var(--ds-r-2);background:var(--dsb-glass);padding:12px 14px}.ppxb1W_providerGroupHead{justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:10px;display:flex}.ppxb1W_providerGroupCollapsible{cursor:pointer}.ppxb1W_providerGroupCollapsible .ppxb1W_providerGroupTitle:before{content:"›";color:var(--ds-t-3);margin-right:6px;display:inline-block}.ppxb1W_providerGroupCollapsible[aria-expanded=true] .ppxb1W_providerGroupTitle:before{transform:rotate(90deg)}.ppxb1W_providerGroupCollapsible:focus-visible{outline:2px solid var(--ds-border-strong);outline-offset:2px;border-radius:6px}.ppxb1W_providerCtlRow{align-items:center;gap:12px;margin-bottom:10px;display:flex}.ppxb1W_providerTodayToggle{color:var(--ds-t-3);align-items:center;gap:7px;font-size:11px;display:inline-flex}.ppxb1W_providerGroupTitle{align-items:center;gap:7px;min-width:0;display:inline-flex}.ppxb1W_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}.ppxb1W_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)}.ppxb1W_kindBadgeUnknown{border-color:var(--ds-border);background:color-mix(in srgb, var(--ds-t-3) 12%, transparent);color:var(--ds-t-3)}.ppxb1W_providerGroupName{color:var(--ds-t-1);font-size:13px;font-weight:600;line-height:18px}.ppxb1W_providerGroupMeta{flex:none;align-items:center;gap:10px;display:inline-flex}.ppxb1W_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}.ppxb1W_providerGroupBalance,.ppxb1W_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}.ppxb1W_providerGroupCostLabel{font-size:11px}.ppxb1W_providerGroupCostValue{color:var(--ds-t-1);text-align:right;min-width:56px;font-weight:600}.ppxb1W_providerGroupBalanceLabel{color:var(--ds-t-3);font-size:11px;line-height:17px}.ppxb1W_rounds{margin-top:10px}.ppxb1W_roundsBars{align-items:flex-end;gap:3px;height:124px;padding:16px 2px 0;display:flex;overflow-x:auto}.ppxb1W_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}.ppxb1W_roundsBarColPeak{background:color-mix(in srgb, var(--ds-amber) 16%, transparent)}.ppxb1W_roundsBarColOff{background:var(--dsb-3)}.ppxb1W_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%)}.ppxb1W_roundsBarWrap{flex:1;align-items:flex-end;min-height:0;display:flex}.ppxb1W_roundsBar{background:var(--ds-blue);border-radius:2px 2px 0 0;width:100%;min-height:2px;position:relative}.ppxb1W_roundsBarFlagged{background:var(--ds-red);border-radius:2px 2px 0 0;width:100%;min-height:2px;position:relative}.ppxb1W_roundsFlagMark{background:var(--ds-red);border-radius:50%;width:7px;height:7px;position:absolute;top:-3px;right:-3px}.ppxb1W_roundsAxis{color:var(--ds-t-3);justify-content:space-between;margin-top:6px;font-size:10px;display:flex}.ppxb1W_roundsEmpty{color:var(--ds-t-2);margin-top:10px;font-size:12px}.ppxb1W_heatmap{margin-top:10px}.ppxb1W_heatmapGrid{grid-template-columns:repeat(7,minmax(0,1fr));gap:3px;display:grid}.ppxb1W_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}.ppxb1W_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}.ppxb1W_heatmapCell[data-level="0"],.ppxb1W_heatmapCell[data-level="1"],.ppxb1W_heatmapCell[data-level="2"]{color:var(--dsw-alias-label-primary)}.ppxb1W_heatmapCell[data-level="3"],.ppxb1W_heatmapCell[data-level="4"]{color:var(--dsw-static-neutral-bluish-00)}.ppxb1W_heatmapFooter{color:var(--dsw-alias-label-secondary);align-items:center;gap:8px;margin-top:10px;font-size:10px;display:flex}.ppxb1W_heatmapLegend{gap:3px;display:inline-flex}.ppxb1W_heatmapLegend i{border-radius:2px;width:14px;height:14px;display:block}.ppxb1W_heatmapHover{font-variant-numeric:tabular-nums;margin-left:auto;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace}.ppxb1W_heatmapRangeSwitch{gap:4px;margin-left:auto;display:inline-flex}.ppxb1W_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}.ppxb1W_heatmapRangeButtonActive{border-color:var(--ds-border-strong);color:var(--ds-t-1);font-weight:600}.ppxb1W_heatmapYear{flex-direction:column;gap:6px;display:flex}.ppxb1W_heatmapYearBody{align-items:flex-start;gap:6px;display:flex}.ppxb1W_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}.ppxb1W_heatmapYearWeekday{white-space:nowrap;text-align:right;height:11px}.ppxb1W_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}.ppxb1W_heatmapYearMonth{white-space:nowrap;overflow:visible}.ppxb1W_heatmapYearScroll{padding-bottom:2px;overflow-x:auto}.ppxb1W_heatmapYearGrid{grid-template-rows:repeat(7,11px);grid-auto-flow:column;gap:3px;min-width:max-content;display:grid}.ppxb1W_heatmapYearCell{cursor:pointer;border:0;border-radius:2px;width:11px;height:11px;padding:0}.ppxb1W_heatmapHalf .ppxb1W_heatmapYearWeekdays{grid-template-rows:repeat(7,16px);line-height:16px}.ppxb1W_heatmapHalf .ppxb1W_heatmapYearWeekday{height:16px}.ppxb1W_heatmapHalf .ppxb1W_heatmapYearMonths{grid-template-columns:repeat(26,16px)}.ppxb1W_heatmapHalf .ppxb1W_heatmapYearGrid{grid-template-rows:repeat(7,16px)}.ppxb1W_heatmapHalf .ppxb1W_heatmapYearCell{border-radius:3px;width:16px;height:16px}.ppxb1W_floatSub{flex-direction:column;gap:6px;min-width:0;display:flex}.ppxb1W_floatSubHead{flex-wrap:wrap;align-items:baseline;gap:6px;min-width:0;display:flex}.ppxb1W_floatSubName{color:var(--dsw-alias-label-primary);font-size:12px;font-weight:700}.ppxb1W_floatSubPlan{color:var(--dsw-alias-label-secondary);font-size:10px}.ppxb1W_floatSub .ppxb1W_subscriptionWindow{flex-wrap:wrap;gap:4px 10px}.ppxb1W_floatSub .ppxb1W_subscriptionWindowLabel{flex:none}.ppxb1W_floatSub .ppxb1W_subscriptionMeta{min-width:0;max-width:100%}.ppxb1W_floatSub .ppxb1W_subscriptionPct{min-width:0}.ppxb1W_floatSub .ppxb1W_subscriptionReset{white-space:normal;overflow-wrap:anywhere}.ppxb1W_triggerPopEmpty{color:var(--dsw-alias-label-tertiary);padding:2px 0;font-size:11px;line-height:1.5}.ppxb1W_triggerPopSwitcher{justify-content:flex-end;align-items:center;gap:8px;margin-top:2px;display:flex}.ppxb1W_triggerPopSwitchCount{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;font-size:10px}.ppxb1W_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}.ppxb1W_floatModeBtnOn{border-color:var(--ds-blue);color:var(--dsw-alias-label-primary);background:color-mix(in srgb, var(--ds-blue) 16%, transparent)}.ppxb1W_rdoRow{justify-content:space-between;align-items:center;gap:8px;margin-top:10px;display:flex}.ppxb1W_rdoLabel{color:var(--dsw-alias-label-secondary);font-size:12px}.ppxb1W_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}.ppxb1W_rdoSelect:hover{background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 85%, transparent)}.ppxb1W_rdoSelect:focus-visible{border-color:var(--ds-blue);outline:none}.ppxb1W_rdoChevron{color:var(--dsw-alias-label-tertiary);transition:transform .15s;display:inline-flex}.ppxb1W_rdoChevronOpen{transform:rotate(180deg)}.ppxb1W_floatTarget{color:var(--dsw-alias-label-secondary);cursor:pointer;align-items:center;gap:5px;font-size:12px;display:inline-flex}.ppxb1W_floatTargetLabel{color:var(--dsw-alias-label-secondary)}.ppxb1W_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}.ppxb1W_staleNoticeBody{flex:1;min-width:0}.ppxb1W_staleNoticeSub{margin-top:4px;display:block}.ppxb1W_plgHead{align-items:flex-start;gap:12px;display:flex}.ppxb1W_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}.ppxb1W_plgTitle{flex-direction:column;gap:4px;min-width:0;display:flex}.ppxb1W_plgNameRow{align-items:center;gap:8px;display:flex}.ppxb1W_plgName{color:var(--dsw-alias-label-primary);margin:0;font-size:13px;font-weight:600;line-height:18px}.ppxb1W_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}.ppxb1W_plgDesc{color:var(--dsw-alias-label-secondary);margin:0;font-size:11px;line-height:16px}.ppxb1W_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}.ppxb1W_plgItem{flex-direction:column;gap:2px;min-width:0;display:flex}.ppxb1W_plgLabel{color:var(--dsw-alias-label-tertiary);font-size:10px;line-height:14px}.ppxb1W_plgVal{color:var(--dsw-alias-label-primary);word-break:break-all;font-size:12px;line-height:17px}.ppxb1W_plgLink{color:var(--ds-blue);word-break:break-all;font-size:12px;line-height:17px;text-decoration:none}.ppxb1W_plgLink:hover{text-decoration:underline}.ppxb1W_tokenPanel{flex-direction:column;gap:14px;display:flex}.ppxb1W_tokenModelBar{background:var(--dsw-alias-bg-layer-2);border-radius:999px;height:8px;overflow:hidden}.ppxb1W_tokenModelParts{height:100%;display:flex}.ppxb1W_tokenModelPartIn{background:var(--ds-blue)}.ppxb1W_tokenModelPartOut{background:var(--ds-amber)}.ppxb1W_tokenModelShareRow{align-items:center;gap:6px;display:inline-flex}@media (width<=640px){.ppxb1W_kpiGrid{grid-template-columns:repeat(2,minmax(0,1fr))}.ppxb1W_hero{gap:14px}.ppxb1W_heroTop{flex-direction:column;align-items:flex-start;gap:12px}.ppxb1W_heroGauge{width:72px;height:72px}.ppxb1W_heroSide{gap:12px}.ppxb1W_heroSideSpacer{display:none}}.ppxb1W_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:ppxb1W_peakAlertIn var(--ds-t-fast);flex-direction:column;gap:12px;padding:14px 16px;display:flex;position:fixed}.ppxb1W_peakCardCorner{bottom:18px;right:18px}.ppxb1W_peakCardCenter{top:20%;left:50%;transform:translate(-50%)}.ppxb1W_peakCardPeak{color:var(--ds-blue)}.ppxb1W_peakCardOff{color:var(--ds-cyan)}.ppxb1W_peakHead{justify-content:space-between;align-items:center;gap:8px;display:flex}.ppxb1W_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}.ppxb1W_peakTagPrimary{background:var(--dsw-alias-bg-layer-3);color:var(--ds-blue)}.ppxb1W_peakTagSuccess{background:var(--dsw-alias-bg-layer-3);color:var(--ds-cyan)}.ppxb1W_peakDot{border-radius:999px;flex:none;width:6px;height:6px}.ppxb1W_peakDotPrimary{background:var(--ds-blue)}.ppxb1W_peakDotSuccess{background:var(--ds-cyan)}.ppxb1W_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}.ppxb1W_peakClose:hover{color:var(--ds-t-1);background:var(--dsw-alias-bg-layer-2)}.ppxb1W_peakCount{font-variant-numeric:tabular-nums;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:28px;font-weight:600;line-height:1}.ppxb1W_peakCountPrimary{color:var(--ds-blue)}.ppxb1W_peakCountSuccess{color:var(--ds-cyan)}.ppxb1W_peakDesc{color:var(--ds-t-1);margin:4px 0 0;font-size:12px;line-height:18px}@keyframes ppxb1W_peakAlertIn{0%{opacity:0}to{opacity:1}}.ppxb1W_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}.ppxb1W_setGrid3,.ppxb1W_setGrid2{gap:10px;display:grid}.ppxb1W_setGrid3{grid-template-columns:repeat(3,minmax(0,1fr))}.ppxb1W_setGrid2{grid-template-columns:repeat(2,minmax(0,1fr))}@media (width<=720px){.ppxb1W_setGrid3,.ppxb1W_setGrid2{grid-template-columns:1fr}}.ppxb1W_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}.ppxb1W_setCardHead{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.ppxb1W_setCardMeta{flex-direction:column;gap:4px;min-width:0;display:flex}.ppxb1W_setCardTitle{color:var(--ds-t-1);margin:0;font-size:13px;font-weight:600;line-height:18px}.ppxb1W_setCardDesc{color:var(--ds-t-3);margin:0;font-size:11px;line-height:16px}.ppxb1W_ctlCol{flex-direction:column;gap:10px;padding-top:2px;display:flex}.ppxb1W_ctlRow{align-items:center;gap:12px;min-height:28px;display:flex}.ppxb1W_ctlRowStretch{display:flex}.ppxb1W_ctlLabel{color:var(--ds-t-3);flex:0 0 96px;font-size:11px;line-height:16px}.ppxb1W_ctlGroup{flex-wrap:wrap;align-items:center;gap:8px;display:inline-flex}.ppxb1W_userPriceRow{border-bottom:1px solid var(--ds-border);align-items:center;gap:10px;padding:8px 0;display:flex}.ppxb1W_userPriceCheck{width:14px;height:14px;accent-color:var(--ds-blue);flex:none;margin:0}.ppxb1W_userPriceBody{flex-direction:column;flex:1;gap:8px;min-width:0;display:flex}.ppxb1W_userPriceLineMeta{grid-template-columns:minmax(0,1fr) minmax(0,1.4fr) auto;align-items:end;gap:8px 10px;display:grid}@media (width<=720px){.ppxb1W_userPriceLineMeta{grid-template-columns:repeat(2,minmax(0,1fr))}}.ppxb1W_userPriceLineMeta .ppxb1W_userPriceInput{box-sizing:border-box;width:100%;min-width:0;max-width:none}.ppxb1W_userPriceBody .ppxb1W_ctlGroup{flex-wrap:nowrap}.ppxb1W_userPriceLineMeta .ppxb1W_userPriceField .ppxb1W_ctlLabel{align-items:flex-end;min-height:30px;display:flex}.ppxb1W_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}.ppxb1W_userPricePriceLine>.ppxb1W_ctlLabel{color:var(--ds-t-3);flex:0 0 44px;font-size:11px}.ppxb1W_userPricePriceLine .ppxb1W_userPriceInputNum{box-sizing:border-box;flex:1 1 0;width:auto;min-width:120px;max-width:240px}.ppxb1W_userPriceField{flex-direction:column;gap:4px;min-width:0;display:flex}.ppxb1W_userPriceField .ppxb1W_ctlLabel{flex:none;font-size:11px}.ppxb1W_userPriceInput,.ppxb1W_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}.ppxb1W_userPriceInputNum{min-width:72px;max-width:88px}.ppxb1W_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}.ppxb1W_rdo input{opacity:0;pointer-events:none;position:absolute}.ppxb1W_rdoDot{border:1px solid var(--ds-border-strong);background:var(--dsb-3);border-radius:50%;flex:none;width:14px;height:14px;position:relative}.ppxb1W_rdo input:checked+.ppxb1W_rdoDot{border-color:var(--ds-blue)}.ppxb1W_rdo input:checked+.ppxb1W_rdoDot:after{content:"";background:var(--ds-blue);border-radius:50%;position:absolute;inset:3px}.ppxb1W_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}.ppxb1W_affix{color:var(--ds-t-3);font-size:11px;line-height:16px}.ppxb1W_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}.ppxb1W_progFill{background:var(--ds-blue);height:calc(100% - 2px);transition:width var(--ds-t-fast);border-radius:2px;margin:1px}.ppxb1W_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}.ppxb1W_btn:hover{border-color:var(--ds-blue);color:var(--ds-t-1);background:color-mix(in srgb, var(--ds-blue) 12%, transparent)}.ppxb1W_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 I={affix:`ppxb1W_affix`,balanceCell:`ppxb1W_balanceCell`,balanceDaysBadge:`ppxb1W_balanceDaysBadge`,balanceDaysBadgeLow:`ppxb1W_balanceDaysBadgeLow`,balanceDetailClose:`ppxb1W_balanceDetailClose`,balanceDetailGrid:`ppxb1W_balanceDetailGrid`,balanceDetailHead:`ppxb1W_balanceDetailHead`,balanceDetailLabel:`ppxb1W_balanceDetailLabel`,balanceDetailPop:`ppxb1W_balanceDetailPop`,balanceDetailRow:`ppxb1W_balanceDetailRow`,balanceDetailTitle:`ppxb1W_balanceDetailTitle`,balanceDetailValue:`ppxb1W_balanceDetailValue`,bandDot:`ppxb1W_bandDot`,bandDotOn:`ppxb1W_bandDotOn`,bandDots:`ppxb1W_bandDots`,"billing-trigger":`ppxb1W_billing-trigger`,btn:`ppxb1W_btn`,bucketCost:`ppxb1W_bucketCost`,bucketOfficial:`ppxb1W_bucketOfficial`,bucketSep:`ppxb1W_bucketSep`,bucketThird:`ppxb1W_bucketThird`,budgetFillOver:`ppxb1W_budgetFillOver`,budgetFillWarn:`ppxb1W_budgetFillWarn`,budgetInput:`ppxb1W_budgetInput`,budgetPulse:`ppxb1W_budgetPulse`,chartAxisLabel:`ppxb1W_chartAxisLabel`,chartBar:`ppxb1W_chartBar`,chartBarPlaceholder:`ppxb1W_chartBarPlaceholder`,chartCrosshair:`ppxb1W_chartCrosshair`,chartEmpty:`ppxb1W_chartEmpty`,chartGrid:`ppxb1W_chartGrid`,chartHoverDot:`ppxb1W_chartHoverDot`,chartLegend:`ppxb1W_chartLegend`,chartLegendBar:`ppxb1W_chartLegendBar`,chartLegendItem:`ppxb1W_chartLegendItem`,chartLegendItemActive:`ppxb1W_chartLegendItemActive`,chartLegendLine:`ppxb1W_chartLegendLine`,chartLine:`ppxb1W_chartLine`,chartStack:`ppxb1W_chartStack`,chartSvg:`ppxb1W_chartSvg`,chartTooltip:`ppxb1W_chartTooltip`,chartTooltipAlignLeft:`ppxb1W_chartTooltipAlignLeft`,chartTooltipAlignRight:`ppxb1W_chartTooltipAlignRight`,chartTooltipDate:`ppxb1W_chartTooltipDate`,chartTooltipHead:`ppxb1W_chartTooltipHead`,chartTooltipLabel:`ppxb1W_chartTooltipLabel`,chartTooltipModelDetail:`ppxb1W_chartTooltipModelDetail`,chartTooltipRow:`ppxb1W_chartTooltipRow`,chartTooltipSplit:`ppxb1W_chartTooltipSplit`,chartTooltipSwatch:`ppxb1W_chartTooltipSwatch`,chartWrap:`ppxb1W_chartWrap`,closeButton:`ppxb1W_closeButton`,ctlCol:`ppxb1W_ctlCol`,ctlGroup:`ppxb1W_ctlGroup`,ctlLabel:`ppxb1W_ctlLabel`,ctlRow:`ppxb1W_ctlRow`,ctlRowStretch:`ppxb1W_ctlRowStretch`,currencyButton:`ppxb1W_currencyButton`,currencyButtonActive:`ppxb1W_currencyButtonActive`,currencyToggle:`ppxb1W_currencyToggle`,dashboard:`ppxb1W_dashboard`,dashboardBody:`ppxb1W_dashboardBody`,dashboardHead:`ppxb1W_dashboardHead`,dashboardIn:`ppxb1W_dashboardIn`,dashboardModal:`ppxb1W_dashboardModal`,dashboardRight:`ppxb1W_dashboardRight`,dashboardSubtitle:`ppxb1W_dashboardSubtitle`,dashboardTitle:`ppxb1W_dashboardTitle`,delta:`ppxb1W_delta`,deltaDown:`ppxb1W_deltaDown`,deltaUp:`ppxb1W_deltaUp`,emptyRow:`ppxb1W_emptyRow`,estimatedTag:`ppxb1W_estimatedTag`,exportBar:`ppxb1W_exportBar`,exportButton:`ppxb1W_exportButton`,exportLabel:`ppxb1W_exportLabel`,feeBar:`ppxb1W_feeBar`,feeBarAbove:`ppxb1W_feeBarAbove`,feeChipAlert:`ppxb1W_feeChipAlert`,feeChipError:`ppxb1W_feeChipError`,feeChipOff:`ppxb1W_feeChipOff`,feeChipPrimary:`ppxb1W_feeChipPrimary`,feeCount:`ppxb1W_feeCount`,feeInline:`ppxb1W_feeInline`,feeInlineAlert:`ppxb1W_feeInlineAlert`,feeInlineError:`ppxb1W_feeInlineError`,feeInlineNum:`ppxb1W_feeInlineNum`,feeItem:`ppxb1W_feeItem`,feeNum:`ppxb1W_feeNum`,feeSep:`ppxb1W_feeSep`,feeSuffix:`ppxb1W_feeSuffix`,flatTag:`ppxb1W_flatTag`,floatModeBtn:`ppxb1W_floatModeBtn`,floatModeBtnOn:`ppxb1W_floatModeBtnOn`,floatSub:`ppxb1W_floatSub`,floatSubHead:`ppxb1W_floatSubHead`,floatSubName:`ppxb1W_floatSubName`,floatSubPlan:`ppxb1W_floatSubPlan`,floatTarget:`ppxb1W_floatTarget`,floatTargetLabel:`ppxb1W_floatTargetLabel`,healthBad:`ppxb1W_healthBad`,healthBadge:`ppxb1W_healthBadge`,healthBadgeBad:`ppxb1W_healthBadgeBad`,healthBadgeOk:`ppxb1W_healthBadgeOk`,healthDot:`ppxb1W_healthDot`,healthIdle:`ppxb1W_healthIdle`,healthOk:`ppxb1W_healthOk`,heatmap:`ppxb1W_heatmap`,heatmapCell:`ppxb1W_heatmapCell`,heatmapCellEmpty:`ppxb1W_heatmapCellEmpty`,heatmapFooter:`ppxb1W_heatmapFooter`,heatmapGrid:`ppxb1W_heatmapGrid`,heatmapHalf:`ppxb1W_heatmapHalf`,heatmapHover:`ppxb1W_heatmapHover`,heatmapLegend:`ppxb1W_heatmapLegend`,heatmapRangeButton:`ppxb1W_heatmapRangeButton`,heatmapRangeButtonActive:`ppxb1W_heatmapRangeButtonActive`,heatmapRangeSwitch:`ppxb1W_heatmapRangeSwitch`,heatmapYear:`ppxb1W_heatmapYear`,heatmapYearBody:`ppxb1W_heatmapYearBody`,heatmapYearCell:`ppxb1W_heatmapYearCell`,heatmapYearGrid:`ppxb1W_heatmapYearGrid`,heatmapYearMonth:`ppxb1W_heatmapYearMonth`,heatmapYearMonths:`ppxb1W_heatmapYearMonths`,heatmapYearScroll:`ppxb1W_heatmapYearScroll`,heatmapYearWeekday:`ppxb1W_heatmapYearWeekday`,heatmapYearWeekdays:`ppxb1W_heatmapYearWeekdays`,hero:`ppxb1W_hero`,heroCurrency:`ppxb1W_heroCurrency`,heroGauge:`ppxb1W_heroGauge`,heroGaugeArc:`ppxb1W_heroGaugeArc`,heroGaugeArcOver:`ppxb1W_heroGaugeArcOver`,heroGaugeCenter:`ppxb1W_heroGaugeCenter`,heroGaugeDial:`ppxb1W_heroGaugeDial`,heroGaugeLabel:`ppxb1W_heroGaugeLabel`,heroGaugeRemain:`ppxb1W_heroGaugeRemain`,heroGaugeRemainOver:`ppxb1W_heroGaugeRemainOver`,heroGaugeSub:`ppxb1W_heroGaugeSub`,heroGaugeSvg:`ppxb1W_heroGaugeSvg`,heroGaugeTrack:`ppxb1W_heroGaugeTrack`,heroLabel:`ppxb1W_heroLabel`,heroMain:`ppxb1W_heroMain`,heroMeta:`ppxb1W_heroMeta`,heroReadout:`ppxb1W_heroReadout`,heroSide:`ppxb1W_heroSide`,heroSideItem:`ppxb1W_heroSideItem`,heroSideLabel:`ppxb1W_heroSideLabel`,heroSideSpacer:`ppxb1W_heroSideSpacer`,heroSideValue:`ppxb1W_heroSideValue`,heroTop:`ppxb1W_heroTop`,heroValue:`ppxb1W_heroValue`,inp:`ppxb1W_inp`,kindBadge:`ppxb1W_kindBadge`,kindBadgeRelay:`ppxb1W_kindBadgeRelay`,kindBadgeUnknown:`ppxb1W_kindBadgeUnknown`,kpiDetail:`ppxb1W_kpiDetail`,kpiGreen:`ppxb1W_kpiGreen`,kpiGrid:`ppxb1W_kpiGrid`,kpiLabel:`ppxb1W_kpiLabel`,kpiTile:`ppxb1W_kpiTile`,kpiValue:`ppxb1W_kpiValue`,kpiZone:`ppxb1W_kpiZone`,kpiZoneHead:`ppxb1W_kpiZoneHead`,kpiZoneLabel:`ppxb1W_kpiZoneLabel`,metricCell:`ppxb1W_metricCell`,metricGrid:`ppxb1W_metricGrid`,metricLabel:`ppxb1W_metricLabel`,metricValue:`ppxb1W_metricValue`,metricValueSuccess:`ppxb1W_metricValueSuccess`,modalFooter:`ppxb1W_modalFooter`,modelCell:`ppxb1W_modelCell`,modelDot:`ppxb1W_modelDot`,modelName:`ppxb1W_modelName`,modelProvider:`ppxb1W_modelProvider`,modelRowActive:`ppxb1W_modelRowActive`,modelRowFocusable:`ppxb1W_modelRowFocusable`,modelTable:`ppxb1W_modelTable`,na:`ppxb1W_na`,numCol:`ppxb1W_numCol`,offPeak:`ppxb1W_offPeak`,panel:`ppxb1W_panel`,panelHead:`ppxb1W_panelHead`,panelHeadControls:`ppxb1W_panelHeadControls`,panelHint:`ppxb1W_panelHint`,panelTitle:`ppxb1W_panelTitle`,peak:`ppxb1W_peak`,peakAlertIn:`ppxb1W_peakAlertIn`,peakCard:`ppxb1W_peakCard`,peakCardCenter:`ppxb1W_peakCardCenter`,peakCardCorner:`ppxb1W_peakCardCorner`,peakCardOff:`ppxb1W_peakCardOff`,peakCardPeak:`ppxb1W_peakCardPeak`,peakClose:`ppxb1W_peakClose`,peakCount:`ppxb1W_peakCount`,peakCountPrimary:`ppxb1W_peakCountPrimary`,peakCountSuccess:`ppxb1W_peakCountSuccess`,peakDesc:`ppxb1W_peakDesc`,peakDot:`ppxb1W_peakDot`,peakDotPrimary:`ppxb1W_peakDotPrimary`,peakDotSuccess:`ppxb1W_peakDotSuccess`,peakHead:`ppxb1W_peakHead`,peakTag:`ppxb1W_peakTag`,peakTagPrimary:`ppxb1W_peakTagPrimary`,peakTagSuccess:`ppxb1W_peakTagSuccess`,perfBar:`ppxb1W_perfBar`,perfChip:`ppxb1W_perfChip`,perfChipDot:`ppxb1W_perfChipDot`,perfChipOff:`ppxb1W_perfChipOff`,perfChips:`ppxb1W_perfChips`,planTag:`ppxb1W_planTag`,planTagBadge:`ppxb1W_planTagBadge`,plgDesc:`ppxb1W_plgDesc`,plgGrid:`ppxb1W_plgGrid`,plgHead:`ppxb1W_plgHead`,plgIcon:`ppxb1W_plgIcon`,plgItem:`ppxb1W_plgItem`,plgLabel:`ppxb1W_plgLabel`,plgLink:`ppxb1W_plgLink`,plgName:`ppxb1W_plgName`,plgNameRow:`ppxb1W_plgNameRow`,plgTag:`ppxb1W_plgTag`,plgTitle:`ppxb1W_plgTitle`,plgVal:`ppxb1W_plgVal`,popDot:`ppxb1W_popDot`,popDotDirect:`ppxb1W_popDotDirect`,popDotNeutral:`ppxb1W_popDotNeutral`,popDotSub:`ppxb1W_popDotSub`,popHead:`ppxb1W_popHead`,popModel:`ppxb1W_popModel`,popModelLabel:`ppxb1W_popModelLabel`,popModelName:`ppxb1W_popModelName`,popModelRow:`ppxb1W_popModelRow`,popModelStatus:`ppxb1W_popModelStatus`,popModelStatusLow:`ppxb1W_popModelStatusLow`,popTagPrimary:`ppxb1W_popTagPrimary`,popTagSub:`ppxb1W_popTagSub`,popTitle:`ppxb1W_popTitle`,prog:`ppxb1W_prog`,progFill:`ppxb1W_progFill`,providerCtlRow:`ppxb1W_providerCtlRow`,providerGroup:`ppxb1W_providerGroup`,providerGroupBadge:`ppxb1W_providerGroupBadge`,providerGroupBalance:`ppxb1W_providerGroupBalance`,providerGroupBalanceLabel:`ppxb1W_providerGroupBalanceLabel`,providerGroupCollapsible:`ppxb1W_providerGroupCollapsible`,providerGroupCost:`ppxb1W_providerGroupCost`,providerGroupCostLabel:`ppxb1W_providerGroupCostLabel`,providerGroupCostValue:`ppxb1W_providerGroupCostValue`,providerGroupHead:`ppxb1W_providerGroupHead`,providerGroupList:`ppxb1W_providerGroupList`,providerGroupMeta:`ppxb1W_providerGroupMeta`,providerGroupName:`ppxb1W_providerGroupName`,providerGroupRecharge:`ppxb1W_providerGroupRecharge`,providerGroupTitle:`ppxb1W_providerGroupTitle`,providerTodayToggle:`ppxb1W_providerTodayToggle`,railButton:`ppxb1W_railButton`,rangeButton:`ppxb1W_rangeButton`,rangeButtonActive:`ppxb1W_rangeButtonActive`,rangeToggle:`ppxb1W_rangeToggle`,rdo:`ppxb1W_rdo`,rdoChevron:`ppxb1W_rdoChevron`,rdoChevronOpen:`ppxb1W_rdoChevronOpen`,rdoDot:`ppxb1W_rdoDot`,rdoLabel:`ppxb1W_rdoLabel`,rdoRow:`ppxb1W_rdoRow`,rdoSelect:`ppxb1W_rdoSelect`,reconcileDismiss:`ppxb1W_reconcileDismiss`,reconcileIcon:`ppxb1W_reconcileIcon`,reconcileNotice:`ppxb1W_reconcileNotice`,reconcileText:`ppxb1W_reconcileText`,rounds:`ppxb1W_rounds`,roundsAxis:`ppxb1W_roundsAxis`,roundsBar:`ppxb1W_roundsBar`,roundsBarCol:`ppxb1W_roundsBarCol`,roundsBarColOff:`ppxb1W_roundsBarColOff`,roundsBarColPeak:`ppxb1W_roundsBarColPeak`,roundsBarFlagged:`ppxb1W_roundsBarFlagged`,roundsBarLabel:`ppxb1W_roundsBarLabel`,roundsBarWrap:`ppxb1W_roundsBarWrap`,roundsBars:`ppxb1W_roundsBars`,roundsEmpty:`ppxb1W_roundsEmpty`,roundsFlagMark:`ppxb1W_roundsFlagMark`,sessionChildRow:`ppxb1W_sessionChildRow`,sessionGroupRow:`ppxb1W_sessionGroupRow`,setCard:`ppxb1W_setCard`,setCardDesc:`ppxb1W_setCardDesc`,setCardHead:`ppxb1W_setCardHead`,setCardMeta:`ppxb1W_setCardMeta`,setCardTitle:`ppxb1W_setCardTitle`,setCell:`ppxb1W_setCell`,setGrid2:`ppxb1W_setGrid2`,setGrid3:`ppxb1W_setGrid3`,shareDot:`ppxb1W_shareDot`,shareItem:`ppxb1W_shareItem`,shareLegend:`ppxb1W_shareLegend`,shareSeg:`ppxb1W_shareSeg`,shareSegAssistant:`ppxb1W_shareSegAssistant`,shareSegOff:`ppxb1W_shareSegOff`,shareSegPeak:`ppxb1W_shareSegPeak`,shareSegTool:`ppxb1W_shareSegTool`,shareSegUser:`ppxb1W_shareSegUser`,shareTrack:`ppxb1W_shareTrack`,shareValue:`ppxb1W_shareValue`,siteKindDirect:`ppxb1W_siteKindDirect`,siteKindSite:`ppxb1W_siteKindSite`,siteKindTag:`ppxb1W_siteKindTag`,siteKindUnknown:`ppxb1W_siteKindUnknown`,siteRow:`ppxb1W_siteRow`,siteRowCalls:`ppxb1W_siteRowCalls`,siteRowCallsLow:`ppxb1W_siteRowCallsLow`,siteRowCost:`ppxb1W_siteRowCost`,siteRowMeta:`ppxb1W_siteRowMeta`,siteRowName:`ppxb1W_siteRowName`,siteRowTitle:`ppxb1W_siteRowTitle`,soon:`ppxb1W_soon`,staleNotice:`ppxb1W_staleNotice`,staleNoticeBody:`ppxb1W_staleNoticeBody`,staleNoticeSub:`ppxb1W_staleNoticeSub`,subscriptionAuto:`ppxb1W_subscriptionAuto`,subscriptionCard:`ppxb1W_subscriptionCard`,subscriptionExhausted:`ppxb1W_subscriptionExhausted`,subscriptionFill:`ppxb1W_subscriptionFill`,subscriptionFillOver:`ppxb1W_subscriptionFillOver`,subscriptionFillWarn:`ppxb1W_subscriptionFillWarn`,subscriptionGrid:`ppxb1W_subscriptionGrid`,subscriptionHead:`ppxb1W_subscriptionHead`,subscriptionMeta:`ppxb1W_subscriptionMeta`,subscriptionName:`ppxb1W_subscriptionName`,subscriptionPct:`ppxb1W_subscriptionPct`,subscriptionPlan:`ppxb1W_subscriptionPlan`,subscriptionReset:`ppxb1W_subscriptionReset`,subscriptionStatus:`ppxb1W_subscriptionStatus`,subscriptionTier:`ppxb1W_subscriptionTier`,subscriptionTrack:`ppxb1W_subscriptionTrack`,subscriptionWindow:`ppxb1W_subscriptionWindow`,subscriptionWindowLabel:`ppxb1W_subscriptionWindowLabel`,switch:`ppxb1W_switch`,switchKnob:`ppxb1W_switchKnob`,switchOn:`ppxb1W_switchOn`,tabButton:`ppxb1W_tabButton`,tabButtonActive:`ppxb1W_tabButtonActive`,tabNav:`ppxb1W_tabNav`,tabPanel:`ppxb1W_tabPanel`,tabPanelIn:`ppxb1W_tabPanelIn`,tableScroll:`ppxb1W_tableScroll`,tokenModelBar:`ppxb1W_tokenModelBar`,tokenModelPartIn:`ppxb1W_tokenModelPartIn`,tokenModelPartOut:`ppxb1W_tokenModelPartOut`,tokenModelParts:`ppxb1W_tokenModelParts`,tokenModelShareRow:`ppxb1W_tokenModelShareRow`,tokenPanel:`ppxb1W_tokenPanel`,trigger:`ppxb1W_trigger`,triggerBudgetHot:`ppxb1W_triggerBudgetHot`,triggerBudgetOver:`ppxb1W_triggerBudgetOver`,triggerBudgetPulse:`ppxb1W_triggerBudgetPulse`,triggerGaugeArc:`ppxb1W_triggerGaugeArc`,triggerGaugeNeedle:`ppxb1W_triggerGaugeNeedle`,triggerIcon:`ppxb1W_triggerIcon`,triggerLabel:`ppxb1W_triggerLabel`,triggerMain:`ppxb1W_triggerMain`,triggerMetric:`ppxb1W_triggerMetric`,triggerPop:`ppxb1W_triggerPop`,triggerPopEmpty:`ppxb1W_triggerPopEmpty`,triggerPopShown:`ppxb1W_triggerPopShown`,triggerPopSwitchCount:`ppxb1W_triggerPopSwitchCount`,triggerPopSwitcher:`ppxb1W_triggerPopSwitcher`,triggerPrimary:`ppxb1W_triggerPrimary`,triggerScan:`ppxb1W_triggerScan`,triggerSpark:`ppxb1W_triggerSpark`,triggerSparkBar:`ppxb1W_triggerSparkBar`,triggerSparkBreath:`ppxb1W_triggerSparkBreath`,triggerSparkHot:`ppxb1W_triggerSparkHot`,triggerValueRow:`ppxb1W_triggerValueRow`,triggerWrap:`ppxb1W_triggerWrap`,triggerYen:`ppxb1W_triggerYen`,ubAlert:`ppxb1W_ubAlert`,ubAlertLeft:`ppxb1W_ubAlertLeft`,ubAlertNote:`ppxb1W_ubAlertNote`,ubCard:`ppxb1W_ubCard`,ubCardControlGroup:`ppxb1W_ubCardControlGroup`,ubCardHead:`ppxb1W_ubCardHead`,ubCardSub:`ppxb1W_ubCardSub`,ubCardTitle:`ppxb1W_ubCardTitle`,ubChipLabel:`ppxb1W_ubChipLabel`,ubChipOff:`ppxb1W_ubChipOff`,ubChipPeak:`ppxb1W_ubChipPeak`,ubExtraName:`ppxb1W_ubExtraName`,ubExtraNote:`ppxb1W_ubExtraNote`,ubExtraRow:`ppxb1W_ubExtraRow`,ubModel:`ppxb1W_ubModel`,ubModelName:`ppxb1W_ubModelName`,ubNotes:`ppxb1W_ubNotes`,ubNotesDesc:`ppxb1W_ubNotesDesc`,ubNotesItem:`ppxb1W_ubNotesItem`,ubNotesTerm:`ppxb1W_ubNotesTerm`,ubRate:`ppxb1W_ubRate`,ubSearch:`ppxb1W_ubSearch`,ubTable:`ppxb1W_ubTable`,ubTablewrap:`ppxb1W_ubTablewrap`,ubTag:`ppxb1W_ubTag`,ubTagAlert:`ppxb1W_ubTagAlert`,ubTagError:`ppxb1W_ubTagError`,ubTagNeutral:`ppxb1W_ubTagNeutral`,ubTagPromo:`ppxb1W_ubTagPromo`,ubTagSuccess:`ppxb1W_ubTagSuccess`,uncataloguedTag:`ppxb1W_uncataloguedTag`,unknownHint:`ppxb1W_unknownHint`,unpricedHint:`ppxb1W_unpricedHint`,userPriceBody:`ppxb1W_userPriceBody`,userPriceCheck:`ppxb1W_userPriceCheck`,userPriceField:`ppxb1W_userPriceField`,userPriceInput:`ppxb1W_userPriceInput`,userPriceInputNum:`ppxb1W_userPriceInputNum`,userPriceLineMeta:`ppxb1W_userPriceLineMeta`,userPricePriceLine:`ppxb1W_userPricePriceLine`,userPriceRow:`ppxb1W_userPriceRow`};let Ne=`usageBilling`,Pe={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:`未知`,unknownChannelHint:`通道未在插件配置中注册,支出主体无法核实,费用不计入口径,仅统计用量。`,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} 个会话的用量未完整计入(原始日志未动,不会丢失)`,unreadableNoLedgerNotice:`其中 {count} 个无历史存档,用量完全未计入`,unreadableFormatNotice:`其中 {count} 个因会话格式不受当前宿主支持:过新格式升级宿主后自动恢复,过旧格式(如 v0/v3)需先迁移`,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:`订阅`,cellEstimateHint:`本行无按量扣费记录(订阅通道不逐次计费),金额按目录价估算`,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:`未识别`,expandAll:`全部展开`,collapseAll:`全部收起`,todayOnly:`仅看今日`,todayNoConsumption:`今日暂无消耗`},Fe={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`,unknownChannelHint:`Channel is not registered in the plugin config; the spending party cannot be verified, so cost stays out of the totals while usage is still counted.`,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:`Usage from {count} sessions is not fully counted (raw logs untouched; no data lost)`,unreadableNoLedgerNotice:`{count} of them have no archived history and are not counted at all`,unreadableFormatNotice:`{count} of them use a session format this host cannot read: newer formats recover after a host upgrade; legacy formats (e.g. v0/v3) need a one-time migration`,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`,cellEstimateHint:`No pay-as-you-go charge recorded for this row (subscription routes are not billed per call); amount is a catalog-price estimate`,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 immediately)`,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`,expandAll:`Expand all`,collapseAll:`Collapse all`,todayOnly:`Today only`,todayNoConsumption:`No usage today`},L={"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`}},R={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 Ie(e){return e===``?e:R[e]??e}function Le(e){let t=L[Ie(e)];return t?.type===`code`?t.tier:void 0}let Re=[{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}],ze,Be,Ve,z,He,Ue;function We(e){let t=/:\/\//.test(e)?e:`https://${e}`;try{return new URL(t).origin}catch{return e.trim().toLowerCase().replace(/\/+$/,``)}}function Ge(e,t){return We(e)===We(t)}function B(e){Ue=e.length>0?e:void 0}function Ke(){return Ue}function V(e){return At(e)}function H(e,t){let n=qe(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 qe(e,t){if(Ue===void 0)return;let n=V(e),r=G(n),i=e=>V(e.key)===n||G(e.key)===r;if(t!==void 0){for(let e of Ue)if(e.origin!==void 0&&e.origin!==``&&i(e)&&Ge(e.origin,t))return e}for(let e of Ue)if((e.origin===void 0||e.origin===``)&&i(e))return e}function Je(e){if(Ue===void 0)return;let t=V(e),n=G(t);return Ue.find(e=>e.origin!==void 0&&e.origin!==``&&(V(e.key)===t||G(e.key)===n))}function Ye(e){ze=typeof e.rate==`number`&&Number.isFinite(e.rate)&&e.rate>0?e.rate:void 0,Be=typeof e.rateEur==`number`&&Number.isFinite(e.rateEur)&&e.rateEur>0?e.rateEur:void 0,Ve=e.prices,z=e.extraModels}function Xe(e){He=e}function Ze(){return ze??6.79}function Qe(){return Be??7.71}function $e(){return{rate:Ze(),live:ze!==void 0}}function et(){return{rate:Qe(),live:Be!==void 0}}let tt=.5;function U(e){return e==null||!Number.isFinite(e)?`peak`:nt(e,at,!0)}function nt(e,t,n=!1){if(W(e)||n&&it(e))return`offPeak`;let r=Math.floor(st(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 W(e){let t=new Date(e+288e5).getUTCDay();return t===0||t===6}function rt(e){return new Date(e+288e5).toISOString().slice(0,10).replace(/-/g,``)}function it(e){return`20260925 20260926 20260927 20261001 20261002 20261003 20261004 20261005 20261006 20261007`.includes(rt(e))}let at=[540,720,840,1080],ot=[840,1080];function st(e){return((e+288e5)%864e5+864e5)%864e5}function ct(e,t,n=!1){let r=nt(e,t,n),i=st(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)&&nt(e+a,t,n)!==r)return{tier:r,nextSwitchInMs:a}}}let a=t[0]??0;return{tier:r,nextSwitchInMs:864e5-i+a*6e4}}function lt(e,t,n,r=!1){let{nextSwitchInMs:i}=ct(e,t,r);if(i>n)return null;let a=e+i;return{entering:nt(a,t,r),atMs:a}}function ut(e,t){if(e===void 0||e===``)return`none`;let n=At(e),r=_t().find(e=>e.key===n)?.provider;return r===`DeepSeek`?`deepseek-metered`:t&&r===`智谱 AI`?`zhipu-coding-plan`:`none`}function dt(e,t){switch(t){case`deepseek-metered`:return ct(e,at,!0);case`zhipu-coding-plan`:return ct(e,ot);case`none`:return null}}function ft(e,t,n){switch(t){case`deepseek-metered`:return lt(e,at,n,!0);case`zhipu-coding-plan`:return lt(e,ot,n);case`none`:return null}}function pt(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 mt=[],ht={};function gt(e,t){mt=e,ht=t,bt=void 0}function _t(){return mt}function vt(){return ht}let yt={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 bt;function xt(){if(bt!==void 0)return bt;let e=new Map,t=(t,n)=>{let r=G(t);r!==``&&!e.has(r)&&e.set(r,n)};for(let e of mt)t(e.key,e.key);for(let[e,n]of Object.entries(ht))t(e,n);for(let e of Re)t(e.key,e.key);return bt=e,e}let St,Ct,wt;function Tt(){if(St===z)return;let e=new Map,t=new Map;for(let n of z??[]){t.has(n.key)||t.set(n.key,n);let r=G(n.key);r!==``&&!e.has(r)&&e.set(r,n)}St=z,Ct=e,wt=t}function Et(){return Tt(),Ct??new Map}function Dt(){return Tt(),wt??new Map}function Ot(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 kt(e){let t=vt()[e];if(t!==void 0)return t;let n=G(e);if(n===``)return;let r=xt().get(n);return r===void 0?Et().get(n)?.key:r}function At(e){let t=vt()[e]??e;if(t===e){let t=G(e);if(t!==``){let e=xt().get(t);if(e!==void 0)return e;let n=Et().get(t);if(n!==void 0)return n.key}for(let t of Ot(e)){let e=kt(t);if(e!==void 0)return e}}return t}function jt(e){let t=At(e),n=Ve?.[t];if(n!==void 0)return n;let r=Re.find(e=>e.key.toLowerCase()===t.toLowerCase());if(r!==void 0)return{input:r.input,cacheHit:r.cacheHit,output:r.output}}function Mt(e){let t=At(e),n=_t().find(e=>e.key===t),r=Dt().get(t),i=n??(r===void 0?_t().find(e=>e.key===`other`)??yt:Nt(r)),a=H(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=jt(t);return o===void 0||i.price.offPeak!==void 0?i:{...i,price:{currency:`USD`,input:o.input,cacheHit:o.cacheHit,output:o.output}}}function Nt(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 Pt(e,t){let n=e.endsAtMs!==void 0&&t>=e.endsAtMs;return Number.isFinite(t)&&!n&&e.factor>=0&&e.factor<1}function Ft(e,t){let{promo:n}=e;if(n===void 0||!Pt(n,t))return e;let r=e=>{let t=n.factors?.[e];return t!==void 0&&t>=0&&t<1?t: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 It(e=Date.now()){let t=[..._t().filter(e=>e.retired!==!0).map(t=>Ft(t,e))],n=new Set(t.map(e=>e.key.toLowerCase())),r=new Set(t.map(e=>G(e.key)));for(let e of He??[]){let i=e.id.toLowerCase();if((()=>{let t=At(e.id);return _t().find(e=>e.key===t)})()!==void 0)continue;let a=G(e.id);if(n.has(i)||a!==``&&r.has(a))continue;let o=Et().get(a),s;if(o!==void 0)s=Nt(o),e.name!==void 0&&e.name!==``&&(s={...s,name:e.name});else{let t=jt(i);s=t===void 0?{key:At(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=H(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 Lt(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*Ze():a}function Rt(e,t,n=tt,r=Date.now()){let i=Ft(e,r),a=Lt(i.price,t,i.price.currency),o=i.price.offPeak===void 0?a:Lt(i.price.offPeak,t,i.price.currency);return a*n+o*(1-n)}function zt(e){let t=Ze();return t>0?e/t:e}function Bt(e,t){if(t===`usd`)return zt(e);if(t===`eur`){let t=Qe();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 Vt(e,t=`CNY`){return`${t===`USD`?`$`:t===`EUR`?`€`:`¥`}${e.toFixed(e>=10?1:2)}`}function Ht(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=et().rate;return a>0?i/a:i}function q(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 J(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 Ut(e){let t=Number(e);return Number.isFinite(t)?`${t.toFixed(1)}%`:`0.0%`}function Y(e){return/[",\r\n]/.test(e)?`"${e.replace(/"/g,`""`)}"`:e}function Wt(e){return/^[=+\-@\t\r]/.test(e)?`'${e}`:e}function Gt(e){return e.toFixed(2)}function Kt(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,Gt(n.cost)].join(`,`)})].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}function b(e,t){try{localStorage.setItem(e,t)}catch{}}function x(e){try{return localStorage.getItem(e)??void 0}catch{return}}function S(e){let t=x(e);if(t!==void 0)try{return JSON.parse(t)}catch{return}}let C={mode:`combined`,targets:[]},w=`dsh.ui-usage-billing.float`;function T(){let e=()=>({...C,targets:[...C.targets]}),t=S(w);if(typeof t!=`object`||!t)return e();let n=t;return{mode:n.mode===`subscription`?`subscription`:`combined`,targets:Array.isArray(n.targets)?n.targets.filter(e=>typeof e==`string`):[]}}function ee(e){b(w,JSON.stringify(e))}let E={metric:`money`,span:`day`},D=`dsh.ui-usage-billing.card`;function O(){let e=S(D);if(typeof e!=`object`||!e)return{...E};let t=e;return{metric:t.metric===`tokens`?`tokens`:`money`,span:t.span===`week`||t.span===`month`?t.span:`day`}}function te(e){b(D,JSON.stringify(e))}let ne=`dsh.ui-usage-billing.kpi-range`;function k(){let e=x(ne);return e===`today`||e===`7d`||e===`week`||e===`month`||e===`all`?e:`all`}function re(e){b(ne,e)}let ie={hideUnidentified:!0},A=`dsh.ui-usage-billing.sites`;function ae(){let e=S(A);return typeof e!=`object`||!e?{...ie}:{hideUnidentified:e.hideUnidentified!==!1}}function oe(e){b(A,JSON.stringify(e))}let se={show:!0,position:`toolbar`},ce=`dsh.ui-usage-billing.livecost`,j=`dsh.ui-usage-billing.livecost-pref`;function le(){let e=S(ce);if(typeof e!=`object`||!e)return{...se};let t=e;return{show:t.show!==!1,position:t.position===`above`||t.position===`toolbar`||t.position===`below`?t.position:se.position}}function M(e){b(ce,JSON.stringify(e))}let N=`dsh.ui-usage-billing.currency`,ue=`dsh.ui-usage-billing.currency-pref`;function de(){let e=x(N);return e===`usd`||e===`cny`||e===`eur`?e:`cny`}function fe(e){b(N,e)}let pe=`dsh.ui-usage-billing.pinned`,me=`dsh.ui-usage-billing.pinned-pref`;function he(){let e=S(pe);return Array.isArray(e)?e.filter(e=>typeof e==`string`&&e!==``):[]}function ge(e){b(pe,JSON.stringify(e))}let _e=`dsh.ui-usage-billing.provider-expanded`;function ve(){let e=S(_e);return Array.isArray(e)?e.filter(e=>typeof e==`string`&&/^(ch|sub|bal):/.test(e)):[]}function ye(e){b(_e,JSON.stringify(e))}let be=`dsh.ui-usage-billing.providers-today`;function xe(){return x(be)===`1`}function Se(e){b(be,e?`1`:`0`)}let P=`dsh.ui-usage-billing.language`;function Ce(){let e=x(P);if(e===`en`||e===`zh`)return e;let t=de()===`usd`?`en`:`zh`;return we(t),t}function we(e){b(P,e)}function Te(e){let t=he(),n=t.includes(e)?t.filter(t=>t!==e):[...t,e];return ge(n),n}let F=`dsh.ui-usage-billing.prices`;function Ee(){let e=S(F);if(e==null)return[];let t=[],n=(e,n)=>{if(typeof n!=`object`||!n)return;let r=n,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})}t.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(e))for(let t of e){if(typeof t!=`object`||!t)continue;let e=t;typeof e.key==`string`&&e.key!==``&&n(e.key,t)}else if(typeof e==`object`)for(let[t,r]of Object.entries(e))n(t,r);return t}function De(e){b(F,JSON.stringify(e))}let Oe={metric:`ttft`},ke=`dsh.ui-usage-billing.perf`;function Ae(){let e=S(ke);if(typeof e!=`object`||!e)return{...Oe};let t=e;return{metric:t.metric===`tps`?`tps`:`ttft`,...Array.isArray(t.models)?{models:t.models.filter(e=>typeof e==`string`)}:{}}}function je(e){b(ke,JSON.stringify(e))}let Me=`@kenz1117/dsh-ui-usage-billing/UsageBilling.module.css`;if(typeof document<`u`&&document.querySelector(`style[data-plugin-css=`+JSON.stringify(Me)+`]`)===null){let e=document.createElement(`style`);e.dataset.plugin=`@kenz1117/dsh-ui-usage-billing`,e.dataset.pluginCss=Me,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_exportButton:disabled{opacity:.45;cursor:not-allowed}.KFXqYa_exportButton:disabled:hover{border-color:var(--ds-border);color:var(--ds-t-2)}.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_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_sessionGroupRow:focus-visible{outline:2px solid var(--ds-border-strong);outline-offset:-2px}.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_unknownHint{color:var(--ds-t-4);margin:0 0 8px;font-size:12px;line-height:18px}.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_providerGroupCollapsible{cursor:pointer}.KFXqYa_providerGroupCollapsible .KFXqYa_providerGroupTitle:before{content:"›";color:var(--ds-t-3);margin-right:6px;display:inline-block}.KFXqYa_providerGroupCollapsible[aria-expanded=true] .KFXqYa_providerGroupTitle:before{transform:rotate(90deg)}.KFXqYa_providerGroupCollapsible:focus-visible{outline:2px solid var(--ds-border-strong);outline-offset:2px;border-radius:6px}.KFXqYa_providerCtlRow{align-items:center;gap:12px;margin-bottom:10px;display:flex}.KFXqYa_providerTodayToggle{color:var(--ds-t-3);align-items:center;gap:7px;font-size:11px;display:inline-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_staleNoticeBody{flex:1;min-width:0}.KFXqYa_staleNoticeSub{margin-top:4px;display:block}.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 I={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`,providerCtlRow:`KFXqYa_providerCtlRow`,providerGroup:`KFXqYa_providerGroup`,providerGroupBadge:`KFXqYa_providerGroupBadge`,providerGroupBalance:`KFXqYa_providerGroupBalance`,providerGroupBalanceLabel:`KFXqYa_providerGroupBalanceLabel`,providerGroupCollapsible:`KFXqYa_providerGroupCollapsible`,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`,providerTodayToggle:`KFXqYa_providerTodayToggle`,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`,staleNoticeBody:`KFXqYa_staleNoticeBody`,staleNoticeSub:`KFXqYa_staleNoticeSub`,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`,unknownHint:`KFXqYa_unknownHint`,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`};let Ne=`usageBilling`,Pe={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:`未知`,unknownChannelHint:`通道未在插件配置中注册,支出主体无法核实,费用不计入口径,仅统计用量。`,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} 个会话的用量未完整计入(原始日志未动,不会丢失)`,unreadableNoLedgerNotice:`其中 {count} 个无历史存档,用量完全未计入`,unreadableFormatNotice:`其中 {count} 个因会话格式不受当前宿主支持:过新格式升级宿主后自动恢复,过旧格式(如 v0/v3)需先迁移`,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:`订阅`,cellEstimateHint:`本行无按量扣费记录(订阅通道不逐次计费),金额按目录价估算`,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:`未识别`,expandAll:`全部展开`,collapseAll:`全部收起`,todayOnly:`仅看今日`,todayNoConsumption:`今日暂无消耗`},Fe={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`,unknownChannelHint:`Channel is not registered in the plugin config; the spending party cannot be verified, so cost stays out of the totals while usage is still counted.`,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:`Usage from {count} sessions is not fully counted (raw logs untouched; no data lost)`,unreadableNoLedgerNotice:`{count} of them have no archived history and are not counted at all`,unreadableFormatNotice:`{count} of them use a session format this host cannot read: newer formats recover after a host upgrade; legacy formats (e.g. v0/v3) need a one-time migration`,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`,cellEstimateHint:`No pay-as-you-go charge recorded for this row (subscription routes are not billed per call); amount is a catalog-price estimate`,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 immediately)`,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`,expandAll:`Expand all`,collapseAll:`Collapse all`,todayOnly:`Today only`,todayNoConsumption:`No usage today`},L={"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`}},R={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 Ie(e){return e===``?e:R[e]??e}function Le(e){let t=L[Ie(e)];return t?.type===`code`?t.tier:void 0}let Re=[{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}],ze,Be,Ve,z,He,Ue;function We(e){let t=/:\/\//.test(e)?e:`https://${e}`;try{return new URL(t).origin}catch{return e.trim().toLowerCase().replace(/\/+$/,``)}}function Ge(e,t){return We(e)===We(t)}function B(e){Ue=e.length>0?e:void 0}function Ke(){return Ue}function V(e){return At(e)}function H(e,t){let n=qe(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 qe(e,t){if(Ue===void 0)return;let n=V(e),r=G(n),i=e=>V(e.key)===n||G(e.key)===r;if(t!==void 0){for(let e of Ue)if(e.origin!==void 0&&e.origin!==``&&i(e)&&Ge(e.origin,t))return e}for(let e of Ue)if((e.origin===void 0||e.origin===``)&&i(e))return e}function Je(e){if(Ue===void 0)return;let t=V(e),n=G(t);return Ue.find(e=>e.origin!==void 0&&e.origin!==``&&(V(e.key)===t||G(e.key)===n))}function Ye(e){ze=typeof e.rate==`number`&&Number.isFinite(e.rate)&&e.rate>0?e.rate:void 0,Be=typeof e.rateEur==`number`&&Number.isFinite(e.rateEur)&&e.rateEur>0?e.rateEur:void 0,Ve=e.prices,z=e.extraModels}function Xe(e){He=e}function Ze(){return ze??6.79}function Qe(){return Be??7.71}function $e(){return{rate:Ze(),live:ze!==void 0}}function et(){return{rate:Qe(),live:Be!==void 0}}let tt=.5;function U(e){return e==null||!Number.isFinite(e)?`peak`:nt(e,at,!0)}function nt(e,t,n=!1){if(W(e)||n&&it(e))return`offPeak`;let r=Math.floor(st(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 W(e){let t=new Date(e+288e5).getUTCDay();return t===0||t===6}function rt(e){return new Date(e+288e5).toISOString().slice(0,10).replace(/-/g,``)}function it(e){return`20260925 20260926 20260927 20261001 20261002 20261003 20261004 20261005 20261006 20261007`.includes(rt(e))}let at=[540,720,840,1080],ot=[840,1080];function st(e){return((e+288e5)%864e5+864e5)%864e5}function ct(e,t,n=!1){let r=nt(e,t,n),i=st(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)&&nt(e+a,t,n)!==r)return{tier:r,nextSwitchInMs:a}}}let a=t[0]??0;return{tier:r,nextSwitchInMs:864e5-i+a*6e4}}function lt(e,t,n,r=!1){let{nextSwitchInMs:i}=ct(e,t,r);if(i>n)return null;let a=e+i;return{entering:nt(a,t,r),atMs:a}}function ut(e,t){if(e===void 0||e===``)return`none`;let n=At(e),r=_t().find(e=>e.key===n)?.provider;return r===`DeepSeek`?`deepseek-metered`:t&&r===`智谱 AI`?`zhipu-coding-plan`:`none`}function dt(e,t){switch(t){case`deepseek-metered`:return ct(e,at,!0);case`zhipu-coding-plan`:return ct(e,ot);case`none`:return null}}function ft(e,t,n){switch(t){case`deepseek-metered`:return lt(e,at,n,!0);case`zhipu-coding-plan`:return lt(e,ot,n);case`none`:return null}}function pt(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 mt=[],ht={};function gt(e,t){mt=e,ht=t,bt=void 0}function _t(){return mt}function vt(){return ht}let yt={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 bt;function xt(){if(bt!==void 0)return bt;let e=new Map,t=(t,n)=>{let r=G(t);r!==``&&!e.has(r)&&e.set(r,n)};for(let e of mt)t(e.key,e.key);for(let[e,n]of Object.entries(ht))t(e,n);for(let e of Re)t(e.key,e.key);return bt=e,e}let St,Ct,wt;function Tt(){if(St===z)return;let e=new Map,t=new Map;for(let n of z??[]){t.has(n.key)||t.set(n.key,n);let r=G(n.key);r!==``&&!e.has(r)&&e.set(r,n)}St=z,Ct=e,wt=t}function Et(){return Tt(),Ct??new Map}function Dt(){return Tt(),wt??new Map}function Ot(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 kt(e){let t=vt()[e];if(t!==void 0)return t;let n=G(e);if(n===``)return;let r=xt().get(n);return r===void 0?Et().get(n)?.key:r}function At(e){let t=vt()[e]??e;if(t===e){let t=G(e);if(t!==``){let e=xt().get(t);if(e!==void 0)return e;let n=Et().get(t);if(n!==void 0)return n.key}for(let t of Ot(e)){let e=kt(t);if(e!==void 0)return e}}return t}function jt(e){let t=At(e),n=Ve?.[t];if(n!==void 0)return n;let r=Re.find(e=>e.key.toLowerCase()===t.toLowerCase());if(r!==void 0)return{input:r.input,cacheHit:r.cacheHit,output:r.output}}function Mt(e){let t=At(e),n=_t().find(e=>e.key===t),r=Dt().get(t),i=n??(r===void 0?_t().find(e=>e.key===`other`)??yt:Nt(r)),a=H(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=jt(t);return o===void 0||i.price.offPeak!==void 0?i:{...i,price:{currency:`USD`,input:o.input,cacheHit:o.cacheHit,output:o.output}}}function Nt(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 Pt(e,t){let n=e.endsAtMs!==void 0&&t>=e.endsAtMs;return Number.isFinite(t)&&!n&&e.factor>=0&&e.factor<1}function Ft(e,t){let{promo:n}=e;if(n===void 0||!Pt(n,t))return e;let r=e=>{let t=n.factors?.[e];return t!==void 0&&t>=0&&t<1?t: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 It(e=Date.now()){let t=[..._t().filter(e=>e.retired!==!0).map(t=>Ft(t,e))],n=new Set(t.map(e=>e.key.toLowerCase())),r=new Set(t.map(e=>G(e.key)));for(let e of He??[]){let i=e.id.toLowerCase();if((()=>{let t=At(e.id);return _t().find(e=>e.key===t)})()!==void 0)continue;let a=G(e.id);if(n.has(i)||a!==``&&r.has(a))continue;let o=Et().get(a),s;if(o!==void 0)s=Nt(o),e.name!==void 0&&e.name!==``&&(s={...s,name:e.name});else{let t=jt(i);s=t===void 0?{key:At(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=H(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 Lt(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*Ze():a}function Rt(e,t,n=tt,r=Date.now()){let i=Ft(e,r),a=Lt(i.price,t,i.price.currency),o=i.price.offPeak===void 0?a:Lt(i.price.offPeak,t,i.price.currency);return a*n+o*(1-n)}function zt(e){let t=Ze();return t>0?e/t:e}function Bt(e,t){if(t===`usd`)return zt(e);if(t===`eur`){let t=Qe();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 Vt(e,t=`CNY`){return`${t===`USD`?`$`:t===`EUR`?`€`:`¥`}${e.toFixed(e>=10?1:2)}`}function Ht(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=et().rate;return a>0?i/a:i}function q(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 J(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 Ut(e){let t=Number(e);return Number.isFinite(t)?`${t.toFixed(1)}%`:`0.0%`}function Y(e){return/[",\r\n]/.test(e)?`"${e.replace(/"/g,`""`)}"`:e}function Wt(e){return/^[=+\-@\t\r]/.test(e)?`'${e}`:e}function Gt(e){return e.toFixed(2)}function Kt(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,Gt(n.cost)].join(`,`)})].join(`
|
|
2
2
|
`)}function qt(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[Y(Wt(n)),r,t.calls,Gt(t.cost)].join(`,`)})].join(`
|
|
3
3
|
`)}function Jt(e){return e===void 0?``:e.split(/[\\/]/).filter(Boolean).pop()??e}function Yt(e){return[`session_id,title,project,calls,cost_cny,last_active`,...e.map(e=>[Y(Wt(e.id)),Y(Wt(e.title??``)),Y(Wt(Jt(e.cwd))),e.calls,Gt(e.cost),e.lastActive>0?new Date(e.lastActive).toISOString():``].join(`,`))].join(`
|
|
4
4
|
`)}function Xt(e,t,n){let r=[...n].sort(),i=r[0],a=r.at(-1);return`${e}${i!==void 0&&a!==void 0?`-${i}_${a}`:``}.${t}`}function Zt(e,t,n){let r=URL.createObjectURL(new Blob([t],{type:n})),i=document.createElement(`a`);i.href=r,i.download=e,i.click(),setTimeout(()=>URL.revokeObjectURL(r),0)}function Qt(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(Math.round(e))}let X={top:14,right:18,bottom:22,left:46},$t=`var(--ds-blue)`,en=`var(--ds-cyan)`,tn=`var(--ds-amber)`;function nn(e,t,n,r){return JSON.stringify({days:e,models:t,dayModels:n,total:r},null,2)}function rn(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:I.shareSegUser},{label:i(`roleAssistant`),value:e.assistant,seg:I.shareSegAssistant},{label:i(`roleTool`),value:e.tool,seg:I.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=q(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=q(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??Mt(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:Mt(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-X.left-X.right,n=200-X.top-X.bottom,r=Math.max(...p===`model`?C.map(e=>e.total):S.map(e=>e.miss+e.hit+e.output),1),i=e=>X.top+n-e/r*n,a=t/e,o=Math.min(20,a*.6),s=n=>e===1?X.left+t/2:X.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=()=>{Zt(`token-daily-${q()}.csv`,an(S),`text/csv`)},ne=()=>{Zt(`token-${q()}.json`,nn(S,E,C,l),`application/json`)},k=u===null?void 0:S[u],re=u===null?void 0:C[u],ie=O===null?0:Math.ceil(80/Math.max(O.groupW,1)),A=u===null||O===null?void 0:u>=O.n-ie?I.chartTooltipAlignRight:u<ie?I.chartTooltipAlignLeft:void 0;return(0,m.jsxs)(`div`,{className:I.tokenPanel,"data-testid":`billing-token-panel`,children:[(0,m.jsxs)(`div`,{className:I.exportBar,role:`group`,"aria-label":i(`tokenExport`),children:[(0,m.jsx)(`span`,{className:I.exportLabel,children:i(`export`)}),(0,m.jsx)(`button`,{type:`button`,className:I.exportButton,"data-testid":`billing-token-export-csv`,onClick:te,children:i(`tokenExportCsv`)}),(0,m.jsx)(`button`,{type:`button`,className:I.exportButton,"data-testid":`billing-token-export-json`,onClick:ne,children:i(`exportJson`)})]}),(0,m.jsxs)(`section`,{className:I.panel,"data-testid":`billing-token-daily`,children:[(0,m.jsxs)(`div`,{className:I.panelHead,children:[(0,m.jsx)(`h3`,{className:I.panelTitle,children:i(`tokenDaily`)}),(0,m.jsxs)(`span`,{className:I.panelHeadControls,children:[v&&(0,m.jsx)(`span`,{className:I.rangeToggle,role:`group`,"aria-label":i(`tokenDaily`),children:[`structure`,`model`].map(e=>(0,m.jsx)(`button`,{type:`button`,className:y(I.rangeButton,p===e&&I.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:I.rangeToggle,role:`group`,"aria-label":i(`tokenDaily`),children:[7,30].map(e=>(0,m.jsx)(`button`,{type:`button`,className:y(I.rangeButton,n===e&&I.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:I.chartEmpty,children:i(`trendEmpty`)}):(0,m.jsxs)(`div`,{className:I.chartWrap,children:[(0,m.jsxs)(`svg`,{viewBox:`0 0 680 200`,className:I.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-X.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:X.left,x2:680-X.right,y1:n,y2:n,className:I.chartGrid}),(0,m.jsx)(`text`,{x:X.left-8,y:n+3,textAnchor:`end`,className:I.chartAxisLabel,children:Qt(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:$t}),(0,m.jsx)(`rect`,{x:n,y:a,width:O.barW,height:i-a,fill:en}),(0,m.jsx)(`rect`,{x:n,y:o,width:O.barW,height:a-o,fill:tn})]},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:I.chartAxisLabel,children:t.date.slice(5)},t.date)}),u!==null&&(0,m.jsx)(`line`,{x1:O.inner(u),x2:O.inner(u),y1:X.top,y2:X.top+O.plotH,className:I.chartCrosshair})]}),u!==null&&p===`structure`&&k!==void 0&&(0,m.jsxs)(`div`,{className:y(I.chartTooltip,A),"data-testid":`billing-token-tooltip`,style:{left:`${O.inner(u)/680*100}%`,top:`${O.y(k.miss+k.hit+k.output)/200*100}%`},children:[(0,m.jsxs)(`div`,{className:I.chartTooltipHead,children:[(0,m.jsx)(`span`,{className:I.chartTooltipDate,children:k.date}),(0,m.jsx)(`strong`,{children:(k.miss+k.hit+k.output).toLocaleString()})]}),(0,m.jsxs)(`div`,{className:y(I.chartTooltipRow,I.chartTooltipSplit),children:[(0,m.jsxs)(`span`,{className:I.chartTooltipLabel,children:[(0,m.jsx)(`span`,{className:I.chartTooltipSwatch,style:{background:en}}),i(`tokenHit`)]}),(0,m.jsx)(`strong`,{children:k.hit.toLocaleString()})]}),(0,m.jsxs)(`div`,{className:y(I.chartTooltipRow,I.chartTooltipSplit),children:[(0,m.jsxs)(`span`,{className:I.chartTooltipLabel,children:[(0,m.jsx)(`span`,{className:I.chartTooltipSwatch,style:{background:$t}}),i(`tokenMiss`)]}),(0,m.jsx)(`strong`,{children:k.miss.toLocaleString()})]}),(0,m.jsxs)(`div`,{className:y(I.chartTooltipRow,I.chartTooltipSplit),children:[(0,m.jsxs)(`span`,{className:I.chartTooltipLabel,children:[(0,m.jsx)(`span`,{className:I.chartTooltipSwatch,style:{background:tn}}),i(`tokenOutput`)]}),(0,m.jsx)(`strong`,{children:k.output.toLocaleString()})]})]}),u!==null&&p===`model`&&re!==void 0&&(0,m.jsxs)(`div`,{className:y(I.chartTooltip,A),"data-testid":`billing-token-tooltip`,style:{left:`${O.inner(u)/680*100}%`,top:`${O.y(re.total)/200*100}%`},children:[(0,m.jsxs)(`div`,{className:I.chartTooltipHead,children:[(0,m.jsx)(`span`,{className:I.chartTooltipDate,children:re.date}),(0,m.jsx)(`strong`,{children:re.total.toLocaleString()})]}),w.map(e=>{let t=re.models[e.key];return t===void 0?null:(0,m.jsxs)(`div`,{className:I.chartTooltipModel,children:[(0,m.jsxs)(`div`,{className:y(I.chartTooltipRow,I.chartTooltipSplit),children:[(0,m.jsxs)(`span`,{className:I.chartTooltipLabel,children:[(0,m.jsx)(`span`,{className:I.chartTooltipSwatch,style:{background:e.color}}),e.name]}),(0,m.jsx)(`strong`,{children:t.total.toLocaleString()})]}),(0,m.jsxs)(`div`,{className:I.chartTooltipModelDetail,children:[i(`tokenHitShort`),` `,t.hit.toLocaleString(),` · `,i(`tokenMissShort`),` `,t.miss.toLocaleString(),` · `,i(`tokenOutput`),` `,t.output.toLocaleString()]})]},e.key)})]}),(0,m.jsx)(`div`,{className:I.chartLegend,children:p===`structure`?(0,m.jsxs)(m.Fragment,{children:[(0,m.jsxs)(`span`,{children:[(0,m.jsx)(`span`,{className:I.chartTooltipSwatch,style:{background:$t}}),i(`tokenMiss`)]}),(0,m.jsxs)(`span`,{children:[(0,m.jsx)(`span`,{className:I.chartTooltipSwatch,style:{background:en}}),i(`tokenHit`)]}),(0,m.jsxs)(`span`,{children:[(0,m.jsx)(`span`,{className:I.chartTooltipSwatch,style:{background:tn}}),i(`tokenOutput`)]})]}):w.map(e=>(0,m.jsxs)(`button`,{type:`button`,className:y(I.chartLegendItem,T===e.key&&I.chartLegendItemActive),"aria-pressed":T===e.key,"data-testid":`billing-token-legend-${e.key}`,onClick:()=>{ee(e.key)},children:[(0,m.jsx)(`span`,{className:I.chartTooltipSwatch,style:{background:e.color}}),e.name]},e.key))})]})]}),(0,m.jsxs)(`section`,{className:I.panel,"data-testid":`billing-token-models`,children:[(0,m.jsx)(`div`,{className:I.panelHead,children:(0,m.jsx)(`h3`,{className:I.panelTitle,children:i(`tokenByModel`)})}),E.length===0?(0,m.jsx)(`div`,{className:I.emptyRow,children:i(`noData`)}):(0,m.jsx)(`div`,{className:I.tableScroll,children:(0,m.jsxs)(`table`,{className:I.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:I.numCol,children:i(`inputTokens`)}),(0,m.jsx)(`th`,{className:I.numCol,children:i(`outputTokens`)}),(0,m.jsx)(`th`,{className:I.numCol,children:i(`tokenReasoningShort`)}),(0,m.jsx)(`th`,{className:I.numCol,children:i(`cacheHitRate`)}),(0,m.jsx)(`th`,{className:I.numCol,children:i(`tokenTotal`)}),(0,m.jsx)(`th`,{className:I.numCol,children:i(`tokenShare`)}),(0,m.jsx)(`th`,{className:I.numCol,children:i(`calls`)})]})}),(0,m.jsx)(`tbody`,{children:E.map(e=>(0,m.jsxs)(`tr`,{"data-testid":`billing-token-model`,className:y(v&&I.modelRowFocusable,T===e.key&&I.modelRowActive),"aria-selected":v?T===e.key:void 0,onClick:v?()=>{ee(e.key)}:void 0,tabIndex:v?0:void 0,onKeyDown:v?t=>{(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),ee(e.key))}:void 0,children:[(0,m.jsx)(`td`,{children:(0,m.jsx)(`span`,{className:I.modelName,children:e.name})}),(0,m.jsx)(`td`,{className:I.numCol,children:J(e.input)}),(0,m.jsx)(`td`,{className:I.numCol,children:J(e.output)}),(0,m.jsx)(`td`,{className:I.numCol,children:e.reasoning>0?J(e.reasoning):(0,m.jsx)(`span`,{className:I.na,children:`—`})}),(0,m.jsxs)(`td`,{className:I.numCol,children:[e.cacheHitRate.toFixed(1),`%`]}),(0,m.jsx)(`td`,{className:I.numCol,children:J(e.total)}),(0,m.jsx)(`td`,{className:I.numCol,children:(0,m.jsxs)(`span`,{className:I.tokenModelShareRow,children:[(0,m.jsx)(`span`,{className:I.tokenModelBar,children:(0,m.jsxs)(`span`,{className:I.tokenModelParts,style:{width:`${(e.share*100).toFixed(2)}%`},children:[(0,m.jsx)(`span`,{className:I.tokenModelPartIn,style:{width:`${e.total>0?e.input/e.total*100:0}%`}}),(0,m.jsx)(`span`,{className:I.tokenModelPartOut,style:{width:`${e.total>0?e.output/e.total*100:0}%`}})]})}),(e.share*100).toFixed(1),`%`]})}),(0,m.jsx)(`td`,{className:I.numCol,children:e.calls.toLocaleString()})]},e.key))})]})})]}),D.totalCalls>0&&(0,m.jsxs)(`section`,{className:I.panel,"data-testid":`billing-token-tools`,children:[(0,m.jsx)(`div`,{className:I.panelHead,children:(0,m.jsx)(`h3`,{className:I.panelTitle,children:i(`toolRank`)})}),(0,m.jsx)(`div`,{className:I.tableScroll,children:(0,m.jsxs)(`table`,{className:I.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:I.numCol,children:i(`calls`)}),(0,m.jsx)(`th`,{className:I.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:I.modelName,children:e})}),(0,m.jsx)(`td`,{className:I.numCol,children:t.toLocaleString()}),(0,m.jsxs)(`td`,{className:I.numCol,children:[(t/D.totalCalls*100).toFixed(1),`%`]})]},e))})]})})]}),x.length>0&&(0,m.jsxs)(`section`,{className:I.panel,"data-testid":`billing-panel-roles`,children:[(0,m.jsxs)(`div`,{className:I.panelHead,children:[(0,m.jsx)(`h3`,{className:I.panelTitle,children:i(`roleCost`)}),(0,m.jsx)(`span`,{className:I.panelHint,children:i(`roleHint`)})]}),(0,m.jsx)(`div`,{className:I.shareTrack,"data-testid":`billing-role-track`,children:x.map(e=>(0,m.jsx)(`div`,{className:y(I.shareSeg,e.seg),style:{width:`${e.pct}%`}},e.label))}),(0,m.jsx)(`div`,{className:I.shareLegend,children:x.map(e=>(0,m.jsxs)(`span`,{className:I.shareItem,children:[(0,m.jsx)(`span`,{className:y(I.shareDot,e.seg)}),e.label,(0,m.jsxs)(`span`,{className:I.shareValue,children:[a(e.value),` · `,e.pct.toFixed(1),`%`]})]},e.label))})]})]})}function an(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(`
|
package/lib/index.js
CHANGED
|
@@ -2491,29 +2491,6 @@ const DEFAULT_SUBSCRIPTION_PROVIDERS = [
|
|
|
2491
2491
|
function isOfficialProvider(provider) {
|
|
2492
2492
|
return /^deepseek(?:-[a-z0-9-]+)?$/i.test(provider.trim());
|
|
2493
2493
|
}
|
|
2494
|
-
/**
|
|
2495
|
-
* 已知的「第三方插件注册 adapter」通道名单:这些 provider 由别的插件经
|
|
2496
|
-
* `ctx.llm.registerAdapter` 注册,**不经 llm-pi-ai 路由表**,因此
|
|
2497
|
-
* {@link siteRefOf} 的路由查询必然 miss。与订阅豁免(issue #37 的 grok
|
|
2498
|
-
* build)同构:显式列出、不做「猜通道」的通用发现——猜错会把来源不明的
|
|
2499
|
-
* 路由也归位成可计价通道,违背 issue #82「支出主体无法核实不计价」的初衷。
|
|
2500
|
-
*
|
|
2501
|
-
* 收录语义:这些通道的支出主体是可核实的(WorkBuddy = 腾讯 WorkBuddy
|
|
2502
|
-
* 桌面 App 账号),计费用模型官方目录价折算 Token 成本,与积分制解耦。
|
|
2503
|
-
* 它们**不是** DeepSeek 官方渠道——{@link isOfficialProvider} 与
|
|
2504
|
-
* {@link officialChannelOf} 都不会因本名单把调用算进官方口径。
|
|
2505
|
-
*/
|
|
2506
|
-
const KNOWN_ADAPTER_PROVIDERS = /* @__PURE__ */ new Set(["workbuddy", "workbuddy-ai"]);
|
|
2507
|
-
/**
|
|
2508
|
-
* 一个 provider 是否命中已知 adapter 通道名单。判定与 {@link isOfficialProvider}
|
|
2509
|
-
* 同姿态:trim + 大小写不敏感——dsh-workbuddy-connect 注册的是小写 id
|
|
2510
|
-
*(`workbuddy` / `workbuddy-ai`),宿主不强制 route 小写,按大小写归一化可避免
|
|
2511
|
-
* 日志里出现大小写变体时静默落回 unknown 桶。路由表命中仍优先于本名单
|
|
2512
|
-
*(见 {@link siteRefOf}),用户自配的大小写变体走配置路径。
|
|
2513
|
-
*/
|
|
2514
|
-
function isKnownAdapterProvider(provider) {
|
|
2515
|
-
return KNOWN_ADAPTER_PROVIDERS.has(provider.trim().toLowerCase());
|
|
2516
|
-
}
|
|
2517
2494
|
/** DeepSeek 官方直连端点的归一化 origin(`siteOriginOf` 口径):有 baseURL 的路由只有它算官方。 */
|
|
2518
2495
|
const OFFICIAL_DEEPSEEK_ORIGIN = "https://api.deepseek.com";
|
|
2519
2496
|
/**
|
|
@@ -2550,10 +2527,8 @@ function siteOriginOf(baseURL) {
|
|
|
2550
2527
|
* 网关)按 `direct` 归位——unknown 一刀切会把官方直连的费用堆进「未知路由」组、
|
|
2551
2528
|
* 且不算官方渠道(回归修复);订阅豁免命中的通道(显式 `subscriptionProviders`
|
|
2552
2529
|
* 配置或判定函数)同样按 `direct` 归位——订阅管理类插件注册的通道不经路由表,
|
|
2553
|
-
* unknown 桶既掩盖归属又按 token 误计费(issue #37 的 grok build
|
|
2554
|
-
*
|
|
2555
|
-
* `direct` 归位——支出主体可核实、按模型官方目录价计 Token 成本,unknown 桶会让
|
|
2556
|
-
* 费用恒为 0;其余配置外名称保留 unknown(无法核实通道)。
|
|
2530
|
+
* unknown 桶既掩盖归属又按 token 误计费(issue #37 的 grok build);其余配置外
|
|
2531
|
+
* 名称保留 unknown(无法核实通道)。
|
|
2557
2532
|
* @param provider - 会话日志里的 provider 路由名(request/header 的 `config.provider`)。
|
|
2558
2533
|
* @param routes - 当前 provider 路由视图(来自 llm-pi-ai providers)。
|
|
2559
2534
|
* @param opts - `subscription`:该调用是否已被订阅豁免判定命中。
|
|
@@ -2579,10 +2554,6 @@ function siteRefOf(provider, routes, opts = {}) {
|
|
|
2579
2554
|
kind: "direct",
|
|
2580
2555
|
provider
|
|
2581
2556
|
};
|
|
2582
|
-
if (isKnownAdapterProvider(provider)) return {
|
|
2583
|
-
kind: "direct",
|
|
2584
|
-
provider
|
|
2585
|
-
};
|
|
2586
2557
|
return {
|
|
2587
2558
|
kind: "unknown",
|
|
2588
2559
|
provider
|
|
@@ -3448,15 +3419,6 @@ function createUsageAggregator(persistence, options = {}) {
|
|
|
3448
3419
|
const searchEstimate = options.searchCallEstimateCny ?? .02;
|
|
3449
3420
|
const foldFingerprint = configFingerprint(subscriptionMatcher, officialProviderIds, routeAliases, searchEstimate);
|
|
3450
3421
|
const FOLD_CHUNK_EVENTS = 8e3;
|
|
3451
|
-
/** 惰性失效(价目表时序):账本/缓存行若以「当时不可计价」的模型落盘,
|
|
3452
|
-
* 而价目表现在能计价了,该行必须重折——否则显示层按实时价算出的
|
|
3453
|
-
* 「目录价预估」与服务端 cost=0 并存,出现「明细比总额高」的双口径
|
|
3454
|
-
* (真机复现:预热折叠早于 models.dev 价目表注入,step-5-preview
|
|
3455
|
-
* 折叠时刻 cost=0、渲染时刻 ≈¥38)。复用判定据此刻检查:不走配置指纹
|
|
3456
|
-
* (价目表不进指纹,否则 6h 一次的价格刷新会让全部历史行全量重折),
|
|
3457
|
-
* 也不 bump FOLD_VERSION(那是归账语义版本,价目表时序不是语义变更)。
|
|
3458
|
-
* 价目表变化后未受影响行(无 unpriced 模型)依旧零读取复用。 */
|
|
3459
|
-
const foldNeedsReprice = (fold) => fold.unpricedModels.some((key) => isPriced(key));
|
|
3460
3422
|
/** 把一份(全量或增量)折叠结果登记进 durable ledger;内容无变化时不落盘。 */
|
|
3461
3423
|
const recordLedger = (id, cwd, stamp, fold) => {
|
|
3462
3424
|
if (options.ledger === void 0) return;
|
|
@@ -3464,12 +3426,12 @@ function createUsageAggregator(persistence, options = {}) {
|
|
|
3464
3426
|
id,
|
|
3465
3427
|
...cwd === void 0 ? {} : { cwd },
|
|
3466
3428
|
...stamp === null ? {} : { stamp },
|
|
3467
|
-
foldVersion:
|
|
3429
|
+
foldVersion: 20,
|
|
3468
3430
|
fingerprint: foldFingerprint,
|
|
3469
3431
|
fold: serializeFold(fold)
|
|
3470
3432
|
};
|
|
3471
3433
|
const row = ledger.get(id);
|
|
3472
|
-
if (row === void 0 || row.stamp !== entry.stamp || row.cwd !== entry.cwd || row.foldVersion !== entry.foldVersion || row.fingerprint !== entry.fingerprint || stamp === null && JSON.stringify(row.fold) !== JSON.stringify(entry.fold)
|
|
3434
|
+
if (row === void 0 || row.stamp !== entry.stamp || row.cwd !== entry.cwd || row.foldVersion !== entry.foldVersion || row.fingerprint !== entry.fingerprint || stamp === null && JSON.stringify(row.fold) !== JSON.stringify(entry.fold)) {
|
|
3473
3435
|
ledger.set(id, entry);
|
|
3474
3436
|
ledgerNeedsSave = true;
|
|
3475
3437
|
}
|
|
@@ -3556,10 +3518,22 @@ function createUsageAggregator(persistence, options = {}) {
|
|
|
3556
3518
|
if (!ledger.has(id)) noLedgerUnreadable += 1;
|
|
3557
3519
|
continue;
|
|
3558
3520
|
}
|
|
3521
|
+
const hit = cache.get(id);
|
|
3522
|
+
if (hit !== void 0 && stamp !== null && hit.stamp === stamp) {
|
|
3523
|
+
cache.delete(id);
|
|
3524
|
+
cache.set(id, hit);
|
|
3525
|
+
folds.push({
|
|
3526
|
+
id,
|
|
3527
|
+
...meta.cwd === void 0 ? {} : { cwd: meta.cwd },
|
|
3528
|
+
fold: hit.fold
|
|
3529
|
+
});
|
|
3530
|
+
included.add(id);
|
|
3531
|
+
continue;
|
|
3532
|
+
}
|
|
3559
3533
|
try {
|
|
3560
3534
|
const cwd = meta.cwd;
|
|
3561
3535
|
const ledgerRow = ledger.get(id);
|
|
3562
|
-
if (ledgerRow !== void 0 && ledgerRow.stamp !== void 0 && stamp !== null && ledgerRow.stamp === stamp && (ledgerRow.foldVersion ?? 1) ===
|
|
3536
|
+
if (ledgerRow !== void 0 && ledgerRow.stamp !== void 0 && stamp !== null && ledgerRow.stamp === stamp && (ledgerRow.foldVersion ?? 1) === 20 && ledgerRow.fingerprint === foldFingerprint) {
|
|
3563
3537
|
const fold = deserializeFold(ledgerRow.fold);
|
|
3564
3538
|
folds.push({
|
|
3565
3539
|
id,
|
|
@@ -3569,20 +3543,8 @@ function createUsageAggregator(persistence, options = {}) {
|
|
|
3569
3543
|
included.add(id);
|
|
3570
3544
|
continue;
|
|
3571
3545
|
}
|
|
3572
|
-
const hit = cache.get(id);
|
|
3573
|
-
if (hit !== void 0 && stamp !== null && hit.stamp === stamp && ![...hit.fold.unpricedModels].some((key) => isPriced(key))) {
|
|
3574
|
-
cache.delete(id);
|
|
3575
|
-
cache.set(id, hit);
|
|
3576
|
-
folds.push({
|
|
3577
|
-
id,
|
|
3578
|
-
...meta.cwd === void 0 ? {} : { cwd: meta.cwd },
|
|
3579
|
-
fold: hit.fold
|
|
3580
|
-
});
|
|
3581
|
-
included.add(id);
|
|
3582
|
-
continue;
|
|
3583
|
-
}
|
|
3584
3546
|
const previous = cache.get(id);
|
|
3585
|
-
if (previous?.machine !== void 0 && previous.lastSeq !== void 0
|
|
3547
|
+
if (previous?.machine !== void 0 && previous.lastSeq !== void 0) {
|
|
3586
3548
|
const from = previous.lastSeq + 1;
|
|
3587
3549
|
const { events, inheritedEventCount } = await persistence.readFrom(meta.id, sessionLogOffsetOf(from));
|
|
3588
3550
|
const after = await stampOf(meta);
|
|
@@ -3659,7 +3621,7 @@ function createUsageAggregator(persistence, options = {}) {
|
|
|
3659
3621
|
for (const entry of ledger.values()) {
|
|
3660
3622
|
if (included.has(entry.id)) continue;
|
|
3661
3623
|
try {
|
|
3662
|
-
const stale = (entry.foldVersion ?? 1) <
|
|
3624
|
+
const stale = (entry.foldVersion ?? 1) < 20 || entry.fingerprint !== foldFingerprint;
|
|
3663
3625
|
folds.push({
|
|
3664
3626
|
id: entry.id,
|
|
3665
3627
|
...entry.cwd === void 0 ? {} : { cwd: entry.cwd },
|
|
@@ -7494,25 +7456,11 @@ function apply(ctx, config = {}) {
|
|
|
7494
7456
|
});
|
|
7495
7457
|
let live = { source: "builtin" };
|
|
7496
7458
|
let pricingSyncedAt = 0;
|
|
7497
|
-
/** 价目表代际:extraModels 的 key 集合稳定序列化。fetchLivePricing 每次都重建
|
|
7498
|
-
* 数组(引用必不同),引用比较恒真会退化成「每次刷新都跑一轮 reprice」;
|
|
7499
|
-
* key 集合变化才代表真的出现了「此前未收录、现在可计价」的模型。 */
|
|
7500
|
-
const priceGenerationOf = (snapshot) => (snapshot.extraModels ?? []).map((model) => model.key).sort().join(",");
|
|
7501
|
-
let priceGeneration = priceGenerationOf(live);
|
|
7502
7459
|
const refreshPricing = async () => {
|
|
7503
7460
|
live = await fetchLivePricing();
|
|
7504
7461
|
pricingSyncedAt = Date.now();
|
|
7505
7462
|
applyLivePricing(live);
|
|
7506
7463
|
pricingBodyCache = void 0;
|
|
7507
|
-
const nextGeneration = priceGenerationOf(live);
|
|
7508
|
-
if (nextGeneration !== priceGeneration) {
|
|
7509
|
-
priceGeneration = nextGeneration;
|
|
7510
|
-
aggregator.aggregate().then(() => {
|
|
7511
|
-
console.info("[usage-billing] repriced folds after pricing refresh; ledger aligned with live catalog");
|
|
7512
|
-
}).catch((error) => {
|
|
7513
|
-
console.warn("[usage-billing] reprice fold after pricing refresh failed; next aggregate retries:", error);
|
|
7514
|
-
});
|
|
7515
|
-
}
|
|
7516
7464
|
};
|
|
7517
7465
|
let pricingBodyCache;
|
|
7518
7466
|
const pricingBody = () => {
|
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.
|
|
4
|
+
"version": "1.4.29",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"deepseek-harness",
|
|
7
7
|
"deepseek",
|