@kenz1117/dsh-ui-usage-billing 1.4.6 → 1.4.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/client.js CHANGED
@@ -1,6 +1,6 @@
1
- window.__ModuleLoader__.load({id:`@kenz1117/dsh-ui-usage-billing`,factory:e=>{var t={exports:{}},n=t.exports;Object.defineProperty(n,Symbol.toStringTag,{value:`Module`});let r=e("react"),i=e("react-dom"),a=e("@deepseek-ai/dsh-client-ui-primitives"),o=e("react/jsx-runtime"),s=e("@deepseek-ai/dsh-client-store");function c(e){return e}function l(e){return c(e)}function u(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=u(e[t]))&&(r&&(r+=` `),r+=n)}else for(n in e)e[n]&&(r&&(r+=` `),r+=n);return r}function d(){for(var e,t,n=0,r=``,i=arguments.length;n<i;n++)(e=arguments[n])&&(t=u(e))&&(r&&(r+=` `),r+=t);return r}let f={mode:`combined`,targets:[]},p=`dsh.ui-usage-billing.float`;function m(){let e=()=>({...f,targets:[...f.targets]});try{let t=localStorage.getItem(p);if(t===null)return e();let n=JSON.parse(t);return{mode:n.mode===`subscription`?`subscription`:`combined`,targets:Array.isArray(n.targets)?n.targets.filter(e=>typeof e==`string`):[]}}catch{return e()}}function h(e){try{localStorage.setItem(p,JSON.stringify(e))}catch{}}let g={metric:`money`,span:`day`},_=`dsh.ui-usage-billing.card`;function v(){try{let e=localStorage.getItem(_);if(e===null)return{...g};let t=JSON.parse(e);return{metric:t.metric===`tokens`?`tokens`:`money`,span:t.span===`week`||t.span===`month`?t.span:`day`}}catch{return{...g}}}function y(e){try{localStorage.setItem(_,JSON.stringify(e))}catch{}}let b=`dsh.ui-usage-billing.kpi-range`;function x(){try{let e=localStorage.getItem(b);return e===`today`||e===`7d`||e===`week`||e===`month`||e===`all`?e:`all`}catch{return`all`}}function S(e){try{localStorage.setItem(b,e)}catch{}}let C={hideUnidentified:!0},w=`dsh.ui-usage-billing.sites`;function T(){try{let e=localStorage.getItem(w);return e===null?{...C}:{hideUnidentified:JSON.parse(e).hideUnidentified!==!1}}catch{return{...C}}}function E(e){try{localStorage.setItem(w,JSON.stringify(e))}catch{}}let D={show:!0,position:`toolbar`},O=`dsh.ui-usage-billing.livecost`,k=`dsh.ui-usage-billing.livecost-pref`;function A(){try{let e=localStorage.getItem(O);if(e===null)return{...D};let t=JSON.parse(e);return{show:t.show!==!1,position:t.position===`above`||t.position===`toolbar`||t.position===`below`?t.position:D.position}}catch{return{...D}}}function ee(e){try{localStorage.setItem(O,JSON.stringify(e))}catch{}}let j=`dsh.ui-usage-billing.currency`,M=`dsh.ui-usage-billing.currency-pref`;function te(){try{let e=localStorage.getItem(j);return e===`usd`||e===`cny`||e===`eur`?e:`cny`}catch{return`cny`}}function N(e){try{localStorage.setItem(j,e)}catch{}}let ne=`dsh.ui-usage-billing.pinned-pref`;function re(){try{let e=JSON.parse(localStorage.getItem(`dsh.ui-usage-billing.pinned`)??`[]`);return Array.isArray(e)?e.filter(e=>typeof e==`string`&&e!==``):[]}catch{return[]}}function ie(e){try{localStorage.setItem(`dsh.ui-usage-billing.pinned`,JSON.stringify(e))}catch{}}let ae=`dsh.ui-usage-billing.language`;function oe(){try{let e=localStorage.getItem(ae);if(e===`en`||e===`zh`)return e;let t=te()===`usd`?`en`:`zh`;return P(t),t}catch{return`zh`}}function P(e){try{localStorage.setItem(ae,e)}catch{}}function se(e){let t=re(),n=t.includes(e)?t.filter(t=>t!==e):[...t,e];return ie(n),n}let ce=`dsh.ui-usage-billing.prices`;function F(){try{let e=localStorage.getItem(ce);if(e===null)return[];let t=JSON.parse(e);if(t===null)return[];let n=[],r=(e,t)=>{if(typeof t!=`object`||!t)return;let r=t,i=Number(r.input),a=Number(r.cacheHit),o=Number(r.output);if(![i,a,o].every(e=>Number.isFinite(e)&&e>=0))return;let s=r.offPeak,c;if(typeof s==`object`&&s){let e=s,t=Number(e.input),n=Number(e.cacheHit),r=Number(e.output);[t,n,r].every(e=>Number.isFinite(e)&&e>=0)&&(c={input:t,cacheHit:n,output:r})}n.push({key:e,...typeof r.origin==`string`&&r.origin!==``?{origin:r.origin}:{},input:i,cacheHit:a,output:o,...c===void 0?{}:{offPeak:c},...r.currency===`USD`?{currency:`USD`}:{}})};if(Array.isArray(t))for(let e of t){if(typeof e!=`object`||!e)continue;let t=e;typeof t.key!=`string`||t.key===``||r(t.key,e)}else if(typeof t==`object`)for(let[e,n]of Object.entries(t))r(e,n);return n}catch{return[]}}function le(e){try{localStorage.setItem(ce,JSON.stringify(e))}catch{}}let ue={metric:`ttft`},de=`dsh.ui-usage-billing.perf`;function fe(){try{let e=localStorage.getItem(de);if(e===null)return{...ue};let t=JSON.parse(e);return{metric:t.metric===`tps`?`tps`:`ttft`,...Array.isArray(t.models)?{models:t.models.filter(e=>typeof e==`string`)}:{}}}catch{return{...ue}}}function pe(e){try{localStorage.setItem(de,JSON.stringify(e))}catch{}}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)}.VWh0dG_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}.VWh0dG_railButton:hover,.VWh0dG_railButton:focus-visible{border-color:var(--ds-blue);color:var(--ds-blue);outline:none}.VWh0dG_railButton svg{width:26px;height:26px}.VWh0dG_triggerBudgetPulse{border-color:color-mix(in srgb, var(--ds-red) 55%, transparent);animation:2s ease-in-out infinite VWh0dG_budgetPulse}.VWh0dG_triggerBudgetOver{animation-duration:1.2s}@keyframes VWh0dG_budgetPulse{0%,to{box-shadow:0 1px 2px #0000000a,0 0 #ef444400}50%{box-shadow:0 1px 2px #0000000a,0 0 0 3px #ef444429}}.VWh0dG_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}.VWh0dG_trigger:hover,.VWh0dG_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)}.VWh0dG_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}.VWh0dG_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%)}.VWh0dG_trigger:hover:after,.VWh0dG_trigger:focus-visible:after{animation:.9s ease-out VWh0dG_triggerScan}@keyframes VWh0dG_triggerScan{0%{opacity:0;transform:translate(-110%)}25%{opacity:1}to{opacity:0;transform:translate(110%)}}@media (prefers-reduced-motion:reduce){.VWh0dG_triggerSparkBar,.VWh0dG_trigger:hover:after,.VWh0dG_trigger:focus-visible:after{animation:none}.VWh0dG_triggerGaugeNeedle,.VWh0dG_triggerGaugeArc{transition:none}.VWh0dG_triggerBudgetPulse{animation:none}}.VWh0dG_triggerIcon{width:32px;height:32px;color:var(--ds-blue);flex:none;justify-content:center;align-items:center;display:inline-flex}.VWh0dG_triggerIcon svg{width:30px;height:30px}.VWh0dG_triggerGaugeNeedle{transition:transform 1.1s cubic-bezier(.22,1,.36,1)}.VWh0dG_triggerGaugeArc{transition:stroke-dasharray 1.1s cubic-bezier(.22,1,.36,1)}.VWh0dG_triggerBudgetHot{color:var(--ds-red)}.VWh0dG_triggerMain{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.VWh0dG_triggerPrimary{flex-direction:column;gap:1px;min-width:0;display:flex}.VWh0dG_triggerValueRow{align-items:baseline;gap:2px;min-width:0;display:flex}.VWh0dG_triggerLabel{color:var(--ds-t-3);white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:11px;line-height:15px;overflow:hidden}.VWh0dG_triggerYen{color:var(--ds-t-3);font-variant-numeric:tabular-nums;font-size:12px;font-weight:600;line-height:16px}.VWh0dG_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}.VWh0dG_triggerSpark{flex:none;align-items:flex-end;gap:2px;height:20px;display:flex}.VWh0dG_triggerSparkBar,.VWh0dG_triggerSparkHot{background:var(--ds-blue);opacity:.6;border-radius:1px 1px 0 0;width:3px}.VWh0dG_triggerSparkHot{opacity:1}.VWh0dG_triggerSparkBar{animation:3.6s ease-in-out infinite VWh0dG_triggerSparkBreath}.VWh0dG_triggerSparkBar:nth-child(2n){animation-delay:-1.2s}.VWh0dG_triggerSparkBar:nth-child(3n){animation-delay:-2.4s}@keyframes VWh0dG_triggerSparkBreath{0%,to{opacity:.6}50%{opacity:.34}}.VWh0dG_triggerWrap{flex:auto;width:100%;min-width:96px;max-width:100%;display:block;position:relative;container:VWh0dG_billing-trigger/inline-size}@container VWh0dG_billing-trigger (width<=200px){.VWh0dG_trigger{gap:6px;padding:8px 10px}.VWh0dG_triggerSpark{display:none}}@container VWh0dG_billing-trigger (width<=170px){.VWh0dG_triggerLabel{display:none}}@container VWh0dG_billing-trigger (width<=110px){.VWh0dG_triggerIcon,.VWh0dG_triggerSpark,.VWh0dG_triggerLabel{display:none}.VWh0dG_trigger{justify-content:center;padding:8px 6px}}.VWh0dG_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%))}.VWh0dG_triggerPop,.VWh0dG_triggerPop *{box-sizing:border-box}.VWh0dG_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}.VWh0dG_triggerPopShown{opacity:1;visibility:visible;transition:opacity var(--ds-t-fast), transform var(--ds-t-fast), visibility 0s linear 0s;transform:translateY(-100%)}.VWh0dG_popHead{justify-content:space-between;align-items:baseline;gap:8px;display:flex}.VWh0dG_popTitle{letter-spacing:.06em;text-transform:uppercase;color:var(--ds-t-3);font-size:12px;font-weight:700;line-height:18px}.VWh0dG_metricGrid{grid-template-columns:repeat(3,1fr);gap:10px 12px;display:grid}.VWh0dG_metricCell{flex-direction:column;gap:2px;min-width:0;display:flex}.VWh0dG_metricLabel{color:var(--ds-t-3);font-size:11px;line-height:14px}.VWh0dG_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}.VWh0dG_metricValueSuccess{color:var(--ds-green)}.VWh0dG_popModel{border-top:1px dashed var(--ds-border);flex-direction:column;gap:6px;margin-top:9px;padding-top:10px;display:flex}.VWh0dG_popModelLabel{color:var(--ds-t-3);font-size:10px;line-height:14px}.VWh0dG_popModelRow{align-items:center;gap:8px;min-width:0;display:flex}.VWh0dG_popDot{border-radius:999px;flex:none;width:6px;height:6px}.VWh0dG_popDotDirect{background:var(--ds-green)}.VWh0dG_popDotSub{background:var(--ds-amber)}.VWh0dG_popDotNeutral{background:var(--ds-t-3)}.VWh0dG_popTagPrimary,.VWh0dG_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}.VWh0dG_popTagPrimary{background:color-mix(in srgb, var(--ds-blue) 14%, transparent);color:var(--ds-blue)}.VWh0dG_popTagSub{background:color-mix(in srgb, var(--ds-amber) 18%, transparent);color:var(--ds-amber)}.VWh0dG_popModelName{color:var(--ds-t-2);text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:500;line-height:16px;overflow:hidden}.VWh0dG_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}.VWh0dG_popModelStatusLow{color:var(--ds-red)}.VWh0dG_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 VWh0dG_dashboardIn}@keyframes VWh0dG_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)}.VWh0dG_dashboard{flex-direction:column;width:100%;max-height:min(760px,88vh);display:flex}.VWh0dG_dashboardHead{border-bottom:1px solid var(--ds-border);justify-content:space-between;align-items:center;gap:12px;padding:12px 18px;display:flex}.VWh0dG_dashboardTitle{color:var(--ds-t-1);margin:0;font-size:14px;font-weight:600;line-height:20px}.VWh0dG_dashboardSubtitle{color:var(--ds-t-3);margin:2px 0 0;font-size:11px;line-height:16px}.VWh0dG_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}.VWh0dG_closeButton:hover{background:var(--dsb-3);color:var(--ds-t-1)}.VWh0dG_closeButton svg{stroke-width:2px;width:16px;height:16px}.VWh0dG_dashboardBody{flex-direction:column;gap:14px;padding:16px 24px 24px;display:flex;overflow-y:auto}.VWh0dG_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}.VWh0dG_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}.VWh0dG_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}.VWh0dG_tabButton:hover{color:var(--ds-t-2)}.VWh0dG_tabButton:focus-visible{color:var(--ds-t-2);box-shadow:0 0 0 1px var(--ds-border-strong);outline:none}.VWh0dG_tabButtonActive,.VWh0dG_tabButtonActive:hover,.VWh0dG_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}.VWh0dG_tabPanel{flex-direction:column;gap:14px;animation:.14s ease-out VWh0dG_tabPanelIn;display:flex}@keyframes VWh0dG_tabPanelIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.VWh0dG_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}.VWh0dG_reconcileIcon{color:var(--dsw-alias-label-tertiary);flex:none;margin-top:1px;display:inline-flex}.VWh0dG_reconcileText{flex:1}.VWh0dG_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}.VWh0dG_reconcileDismiss:hover{color:var(--dsw-alias-label-primary);background:color-mix(in srgb, var(--dsw-alias-label-primary) 8%, transparent)}.VWh0dG_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}.VWh0dG_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}.VWh0dG_heroTop{justify-content:space-between;align-items:center;gap:24px;display:flex}.VWh0dG_heroMain{flex-direction:column;gap:2px;min-width:0;display:flex}.VWh0dG_heroLabel{color:var(--ds-t-3);text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;font-size:11px;font-weight:500;line-height:15px}.VWh0dG_heroReadout{align-items:baseline;gap:4px;display:flex}.VWh0dG_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}.VWh0dG_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}.VWh0dG_heroMeta{color:var(--ds-t-2);white-space:nowrap;margin-top:2px;font-size:12px;line-height:16px}.VWh0dG_heroGauge{flex-direction:column;flex:none;align-items:center;gap:4px;width:96px;display:flex}.VWh0dG_heroGaugeDial{flex:none;width:96px;height:96px;position:relative}.VWh0dG_heroGaugeSvg{width:100%;height:100%;display:block;transform:rotate(-90deg)}.VWh0dG_heroGaugeTrack{fill:none;stroke:var(--dsb-3);stroke-width:7px}.VWh0dG_heroGaugeArc{fill:none;stroke:var(--ds-blue);stroke-width:7px;stroke-linecap:round;transition:stroke-dasharray var(--ds-t-fast)}.VWh0dG_heroGaugeArcOver{stroke:var(--ds-red)}.VWh0dG_heroGaugeCenter{flex-direction:column;justify-content:center;align-items:center;gap:1px;display:flex;position:absolute;inset:0}.VWh0dG_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}.VWh0dG_heroGaugeRemainOver{color:var(--ds-red)}.VWh0dG_heroGaugeLabel{color:var(--ds-t-3);font-size:11px;line-height:13px}.VWh0dG_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}.VWh0dG_heroSide{border-top:1px solid var(--ds-border);align-items:stretch;padding-top:12px;display:flex}.VWh0dG_heroSideItem{border-left:1px solid var(--ds-border);flex-direction:column;flex:1;gap:2px;min-width:0;padding-left:14px;display:flex}.VWh0dG_heroSideItem:first-child{border-left:none;padding-left:0}.VWh0dG_heroSideLabel{color:var(--ds-t-3);text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;font-size:10px;font-weight:500;line-height:13px}.VWh0dG_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}.VWh0dG_heroSideSpacer{flex:1;display:block}.VWh0dG_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}.VWh0dG_deltaUp{color:var(--ds-green);background:color-mix(in srgb, var(--ds-green) 12%, transparent)}.VWh0dG_deltaDown{color:var(--ds-red);background:color-mix(in srgb, var(--ds-red) 12%, transparent)}.VWh0dG_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}.VWh0dG_kpiZone{flex-direction:column;gap:8px;display:flex}.VWh0dG_kpiZoneHead{justify-content:flex-end;align-items:center;gap:8px;display:flex}.VWh0dG_kpiZoneLabel{color:var(--ds-t-3);font-size:11px;line-height:14px}.VWh0dG_kpiGrid{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;display:grid}.VWh0dG_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}.VWh0dG_kpiTile:hover{border-color:var(--ds-border-strong)}.VWh0dG_kpiLabel{color:var(--ds-t-3);text-transform:uppercase;letter-spacing:.04em;font-size:11px;font-weight:500;line-height:14px}.VWh0dG_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}.VWh0dG_kpiGreen{color:var(--ds-green)}.VWh0dG_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}.VWh0dG_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}.VWh0dG_panelHead{justify-content:space-between;align-items:baseline;gap:10px;display:flex}.VWh0dG_panelHeadControls{align-items:center;gap:8px;display:inline-flex}.VWh0dG_panelTitle{letter-spacing:-.005em;color:var(--ds-t-1);margin:0;font-size:13px;font-weight:600;line-height:20px}.VWh0dG_panelHint{color:var(--ds-t-3);white-space:nowrap;font-size:11px;line-height:16px}.VWh0dG_rangeToggle{border:1px solid var(--ds-border);background:var(--dsb-3);border-radius:8px;gap:2px;padding:2px;display:inline-flex}.VWh0dG_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}.VWh0dG_rangeButtonActive{background:var(--dsb-2);color:var(--ds-t-1);box-shadow:0 0 0 1px var(--ds-border-strong);font-weight:600}.VWh0dG_exportBar{justify-content:flex-end;align-items:center;gap:8px;display:flex}.VWh0dG_exportLabel{color:var(--ds-t-3);font-size:11px;line-height:16px}.VWh0dG_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}.VWh0dG_exportButton:hover,.VWh0dG_exportButton:focus-visible{border-color:var(--ds-border-strong);color:var(--ds-t-1);outline:none}.VWh0dG_shareTrack{background:var(--dsb-3);border-radius:4px;height:8px;display:flex;overflow:hidden}.VWh0dG_shareSeg{height:100%;transition:width var(--ds-t-fast)}.VWh0dG_shareSegPeak{background:var(--ds-blue)}.VWh0dG_shareSegOff{background:color-mix(in srgb, var(--ds-blue) 30%, var(--dsb-3))}.VWh0dG_shareSegUser{background:var(--ds-blue)}.VWh0dG_shareSegAssistant{background:var(--ds-green)}.VWh0dG_shareSegTool{background:var(--ds-amber)}.VWh0dG_shareLegend{align-items:center;gap:16px;display:flex}.VWh0dG_shareItem{color:var(--ds-t-2);align-items:baseline;gap:6px;font-size:11px;line-height:17px;display:inline-flex}.VWh0dG_bucketCost{font-variant-numeric:tabular-nums;align-items:baseline;gap:3px;display:inline-flex}.VWh0dG_bucketOfficial{color:var(--ds-blue);font-weight:600}.VWh0dG_bucketSep{color:var(--ds-t-4)}.VWh0dG_bucketThird{color:var(--ds-t-2)}.VWh0dG_shareDot{border-radius:2px;flex:none;align-self:center;width:8px;height:8px}.VWh0dG_shareValue{color:var(--ds-t-1);font-variant-numeric:tabular-nums;font-weight:600}.VWh0dG_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}.VWh0dG_budgetInput:focus-visible{outline:none}.VWh0dG_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}.VWh0dG_switchOn{background:color-mix(in srgb, var(--ds-blue) 60%, transparent);border-color:#0000}.VWh0dG_switchKnob{width:12px;height:12px;transition:transform var(--ds-t-fast);background:#fff;border-radius:50%;position:absolute;top:2px;left:2px}.VWh0dG_switchOn .VWh0dG_switchKnob{transform:translate(14px)}.VWh0dG_budgetFillWarn{background:var(--ds-amber)}.VWh0dG_budgetFillOver{background:var(--ds-red)}.VWh0dG_chartWrap{width:100%;position:relative}.VWh0dG_chartSvg{width:100%;height:auto;display:block}.VWh0dG_chartEmpty{height:140px;color:var(--ds-t-3);justify-content:center;align-items:center;font-size:13px;display:flex}.VWh0dG_emptyRow{text-align:center;color:var(--ds-t-3);padding:28px 0;font-size:13px}.VWh0dG_chartGrid{stroke:var(--ds-border);stroke-width:1px}.VWh0dG_chartAxisLabel{fill:var(--ds-t-3);font-size:10px}.VWh0dG_chartBar{fill:var(--ds-blue);opacity:.7}.VWh0dG_chartBar:hover{opacity:1}.VWh0dG_chartStack{stroke:var(--dsb);stroke-width:.75px}.VWh0dG_chartStack:hover{opacity:.9}.VWh0dG_chartLine{stroke:var(--ds-blue);stroke-width:2px;stroke-linecap:round;stroke-linejoin:round}.VWh0dG_chartCrosshair{stroke:var(--ds-t-4);stroke-width:1px;stroke-dasharray:3 3}.VWh0dG_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))}.VWh0dG_chartTooltipAlignRight{transform:translate(calc(-100% - 8px),calc(-100% - 10px))}.VWh0dG_chartTooltipAlignLeft{transform:translate(8px,calc(-100% - 10px))}.VWh0dG_chartTooltipDate{color:var(--ds-t-1);margin-bottom:3px;font-size:11px;font-weight:600}.VWh0dG_chartTooltipRow{color:var(--ds-t-2);align-items:center;gap:5px;font-size:11px;line-height:17px;display:flex}.VWh0dG_chartTooltipRow strong{color:var(--ds-t-1);font-variant-numeric:tabular-nums;font-weight:600}.VWh0dG_chartTooltipHead{justify-content:space-between;align-items:baseline;gap:14px;margin-bottom:3px;display:flex}.VWh0dG_chartTooltipHead .VWh0dG_chartTooltipDate{margin-bottom:0}.VWh0dG_chartTooltipHead strong{color:var(--ds-t-1);font-variant-numeric:tabular-nums;font-size:11px;font-weight:600}.VWh0dG_chartTooltipSplit{justify-content:space-between;gap:14px}.VWh0dG_chartTooltipLabel{align-items:center;gap:5px;display:flex}.VWh0dG_chartTooltipModelDetail{color:var(--ds-t-3);font-variant-numeric:tabular-nums;margin:-2px 0 4px 13px;font-size:10.5px;line-height:14px}.VWh0dG_chartBarPlaceholder{fill:color-mix(in srgb, var(--ds-t-2) 30%, transparent)}.VWh0dG_chartLegendLine{background:var(--ds-blue);border-radius:2px;width:10px;height:3px;display:inline-block}.VWh0dG_chartLegendBar{background:var(--ds-blue);opacity:.5;border-radius:2px;width:7px;height:7px;display:inline-block}.VWh0dG_chartTooltipSwatch{border-radius:2px;flex:none;width:8px;height:8px;display:inline-block}.VWh0dG_chartLegend{color:var(--ds-t-2);justify-content:flex-end;gap:14px;margin-top:2px;font-size:11px;display:flex}.VWh0dG_chartLegend span{align-items:center;gap:5px;display:inline-flex}.VWh0dG_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}.VWh0dG_chartLegendItem:hover{color:var(--ds-t-1)}.VWh0dG_chartLegendItemActive{color:var(--ds-t-1);font-weight:600}.VWh0dG_perfBar{align-items:center;margin:10px 0 2px;display:flex}.VWh0dG_perfChips{flex-wrap:wrap;gap:6px;margin:6px 0 2px;display:flex}.VWh0dG_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}.VWh0dG_perfChip:hover{color:var(--ds-t-1)}.VWh0dG_perfChipOff{opacity:.45}.VWh0dG_perfChipDot{border-radius:2px;flex:none;width:8px;height:8px;display:inline-block}.VWh0dG_chartHoverDot{stroke:var(--dsb-2);stroke-width:1.5px}.VWh0dG_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}.VWh0dG_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}.VWh0dG_ubAlertLeft{align-items:center;gap:8px;display:inline-flex}.VWh0dG_ubRate{color:var(--ds-t-1);font-variant-numeric:tabular-nums;font-weight:600}.VWh0dG_ubAlertNote{color:var(--ds-t-2);margin:0}.VWh0dG_ubTag,.VWh0dG_ubTagSuccess,.VWh0dG_ubTagNeutral,.VWh0dG_ubTagAlert,.VWh0dG_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}.VWh0dG_ubTag{color:var(--ds-t-2);background:var(--dsb-2)}.VWh0dG_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)}.VWh0dG_ubTagNeutral{color:var(--ds-t-2);background:var(--dsb-2)}.VWh0dG_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)}.VWh0dG_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}.VWh0dG_ubExtraRow td{opacity:.72;padding-top:2px;padding-bottom:2px;font-size:12px}.VWh0dG_ubExtraName{color:var(--ds-t-2);margin-left:26px}.VWh0dG_ubExtraNote{color:var(--ds-t-3);margin-left:8px;font-size:10px}.VWh0dG_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}.VWh0dG_ubCardHead{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.VWh0dG_ubCardTitle{color:var(--ds-t-1);margin:0;font-size:13px;font-weight:600;line-height:18px}.VWh0dG_ubCardSub{color:var(--ds-t-3);font-size:11px;line-height:16px}.VWh0dG_ubTablewrap{border:1px solid var(--ds-border);border-radius:var(--ds-r-1);overflow:auto}.VWh0dG_ubTable{border-collapse:collapse;white-space:nowrap;width:100%;font-size:12px}.VWh0dG_ubTable th,.VWh0dG_ubTable td{border-bottom:1px solid var(--ds-border);text-align:left;color:var(--ds-t-1);padding:7px 9px}.VWh0dG_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}.VWh0dG_bandDots{flex:none;align-items:center;gap:5px;display:inline-flex}.VWh0dG_bandDot{cursor:pointer;background:0 0;border:1.5px solid;border-radius:999px;flex:none;width:9px;height:9px;padding:0}.VWh0dG_bandDotOn{background:currentColor}.VWh0dG_offPeak{color:var(--ds-blue)}.VWh0dG_soon{color:var(--ds-amber)}.VWh0dG_peak{color:var(--ds-red)}span.VWh0dG_bandDot{cursor:default}.VWh0dG_ubTable th,.VWh0dG_ubTable td:first-child{white-space:normal}.VWh0dG_ubTable tbody tr:last-child td{border-bottom:0}.VWh0dG_ubTable thead th,.VWh0dG_ubTable thead th.VWh0dG_numCol{color:var(--ds-t-3);text-transform:uppercase;letter-spacing:.04em;text-align:center;padding:6px 9px;font-size:11px;font-weight:500}.VWh0dG_ubModel{align-items:center;gap:6px;display:inline-flex}.VWh0dG_vendorLetter{color:#fff;border-radius:4px;flex:none;justify-content:center;align-items:center;width:16px;height:16px;font-size:10px;font-weight:600;line-height:1;display:inline-flex}.VWh0dG_ubModelName{color:var(--ds-t-1);align-items:center;gap:4px;font-weight:500;display:inline-flex}.VWh0dG_ubChipPeak,.VWh0dG_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}.VWh0dG_ubChipLabel{font-size:10px;font-weight:600}.VWh0dG_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)}.VWh0dG_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)}.VWh0dG_ubNotes{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.VWh0dG_ubNotesItem{align-items:baseline;gap:10px;display:flex}.VWh0dG_ubNotesTerm{color:var(--ds-t-1);flex:0 0 72px;font-size:12px;font-weight:500}.VWh0dG_ubNotesDesc{min-width:0;color:var(--ds-t-2);flex:1;font-size:12px;line-height:17px}.VWh0dG_ubCardControlGroup{flex-wrap:wrap;align-items:center;gap:8px;display:inline-flex}.VWh0dG_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}.VWh0dG_modelTable{border-collapse:collapse;table-layout:fixed;width:100%;min-width:640px;font-size:12px}.VWh0dG_modelTable th:first-child{width:26%}.VWh0dG_modelTable th,.VWh0dG_modelTable td{border-bottom:1px solid var(--ds-border);text-align:left;white-space:nowrap;color:var(--ds-t-1);padding:10px 12px}.VWh0dG_modelTable tbody tr:last-child td{border-bottom:0}.VWh0dG_sessionGroupRow{cursor:pointer}.VWh0dG_sessionGroupRow .VWh0dG_modelName:before{content:"›";color:var(--ds-t-3);margin-right:6px;display:inline-block}.VWh0dG_sessionGroupRow[aria-expanded=true] .VWh0dG_modelName:before{transform:rotate(90deg)}.VWh0dG_sessionChildRow td:first-child{padding-left:30px}.VWh0dG_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}.VWh0dG_modelTable tbody tr{transition:background-color .12s}.VWh0dG_modelTable tbody tr:hover{background:0 0}.VWh0dG_modelTable tbody tr.VWh0dG_modelRowFocusable{cursor:pointer}.VWh0dG_modelTable tbody tr.VWh0dG_modelRowActive,.VWh0dG_modelTable tbody tr.VWh0dG_modelRowActive:hover{background:color-mix(in srgb, var(--ds-blue) 10%, transparent)}.VWh0dG_numCol{text-align:right;font-family:var(--mono);font-variant-numeric:tabular-nums}.VWh0dG_modelTable .VWh0dG_numCol,.VWh0dG_ubTable .VWh0dG_numCol{text-align:right}.VWh0dG_na{color:var(--ds-t-4)}.VWh0dG_modelCell{align-items:center;gap:8px;display:inline-flex}.VWh0dG_modelDot{border-radius:2px;flex:none;width:8px;height:8px}.VWh0dG_modelName{color:var(--ds-t-1);font-weight:500;line-height:16px;display:block}.VWh0dG_modelProvider{color:var(--ds-t-3);font-size:10.5px;line-height:14px;display:block}.VWh0dG_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}.VWh0dG_siteRowName{align-items:center;gap:8px;min-width:0;display:inline-flex}.VWh0dG_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}.VWh0dG_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)}.VWh0dG_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)}.VWh0dG_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)}.VWh0dG_siteRowTitle{color:var(--ds-t-1);text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;line-height:18px;overflow:hidden}.VWh0dG_siteRowMeta{flex:none;align-items:center;gap:10px;display:inline-flex}.VWh0dG_siteRowCost{color:var(--ds-t-1);font-variant-numeric:tabular-nums;font-size:12.5px;font-weight:600;line-height:18px}.VWh0dG_siteRowCalls{color:var(--ds-t-2);font-variant-numeric:tabular-nums;font-size:11.5px;line-height:17px}.VWh0dG_siteRowCallsLow{color:var(--ds-red)}.VWh0dG_flatTag{color:var(--ds-t-3);font-size:10.5px;line-height:14px}.VWh0dG_healthDot{border-radius:50%;flex:none;width:6px;height:6px;display:inline-block}.VWh0dG_healthOk{background:var(--ds-green);box-shadow:0 0 0 3px color-mix(in srgb, var(--ds-green) 18%, transparent)}.VWh0dG_healthBad{background:var(--ds-red);box-shadow:0 0 0 3px color-mix(in srgb, var(--ds-red) 18%, transparent)}.VWh0dG_healthIdle{background:var(--ds-t-4)}.VWh0dG_dashboardRight{align-items:center;gap:8px;min-width:0;display:flex}.VWh0dG_healthBadge{white-space:nowrap;border-radius:999px;align-items:center;gap:6px;padding:3px 9px;font-size:11px;line-height:16px;display:inline-flex}.VWh0dG_healthBadgeOk{color:var(--ds-green);background:var(--dsb-2)}.VWh0dG_healthBadgeBad{color:var(--ds-red);background:var(--dsb-2)}.VWh0dG_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}.VWh0dG_planTagBadge{background:color-mix(in srgb, var(--ds-green) 20%, transparent);border-radius:4px;padding:0 4px;font-size:9px;line-height:12px}.VWh0dG_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}.VWh0dG_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}.VWh0dG_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}.VWh0dG_feeBarAbove{order:-1;align-self:center;margin-bottom:8px}.VWh0dG_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}.VWh0dG_feeInline .VWh0dG_feeChipPrimary,.VWh0dG_feeInline .VWh0dG_feeChipOff{height:18px;padding:0 7px}.VWh0dG_feeInlineNum{color:var(--ds-t-1);padding-right:6px;font-weight:600}.VWh0dG_feeInlineAlert{background:color-mix(in srgb, var(--ds-amber) 12%, transparent)}.VWh0dG_feeInlineAlert .VWh0dG_feeInlineNum{color:var(--ds-amber)}.VWh0dG_feeInlineError{background:color-mix(in srgb, var(--ds-red) 12%, transparent)}.VWh0dG_feeInlineError .VWh0dG_feeInlineNum{color:var(--ds-red)}.VWh0dG_feeBar .VWh0dG_feeSep{color:var(--ds-t-4)}.VWh0dG_feeCount{color:var(--ds-t-1);font-weight:600}.VWh0dG_feeSuffix{color:var(--ds-t-3)}.VWh0dG_feeItem{color:var(--ds-t-2);white-space:nowrap}.VWh0dG_feeNum{color:var(--ds-t-1);font-weight:600}.VWh0dG_feeSep{color:var(--ds-t-4)}.VWh0dG_feeChipPrimary,.VWh0dG_feeChipOff,.VWh0dG_feeChipAlert,.VWh0dG_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}.VWh0dG_feeChipPrimary{color:var(--ds-blue);border-color:color-mix(in srgb, var(--ds-blue) 30%, transparent)}.VWh0dG_feeChipOff{color:var(--ds-cyan);border-color:color-mix(in srgb, var(--ds-cyan) 30%, transparent)}.VWh0dG_feeChipAlert{color:var(--ds-amber);border-color:color-mix(in srgb, var(--ds-amber) 30%, transparent)}.VWh0dG_feeChipError{color:var(--ds-red);border-color:color-mix(in srgb, var(--ds-red) 30%, transparent)}.VWh0dG_balanceCell{align-items:center;gap:6px;display:inline-flex;position:relative}.VWh0dG_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}.VWh0dG_providerGroupRecharge:empty{background:0 0;border-color:#0000}.VWh0dG_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)}.VWh0dG_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}.VWh0dG_balanceDaysBadge:hover{border-color:var(--ds-t-3);color:var(--ds-t-1)}.VWh0dG_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)}.VWh0dG_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}.VWh0dG_balanceDetailHead{justify-content:space-between;align-items:center;gap:12px;display:flex}.VWh0dG_balanceDetailTitle{color:var(--ds-t-1);font-size:12px;font-weight:600}.VWh0dG_balanceDetailClose{cursor:pointer;color:var(--ds-t-3);background:0 0;border:none;font-size:14px;line-height:1}.VWh0dG_balanceDetailClose:hover{color:var(--ds-t-1)}.VWh0dG_balanceDetailGrid{flex-direction:column;gap:4px;display:inline-flex}.VWh0dG_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}.VWh0dG_balanceDetailLabel{color:var(--ds-t-3)}.VWh0dG_balanceDetailValue{color:var(--ds-t-1);font-weight:500}.VWh0dG_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}.VWh0dG_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}.VWh0dG_currencyButtonActive{background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary)}.VWh0dG_subscriptionGrid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px;margin-top:10px;display:grid}.VWh0dG_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}.VWh0dG_subscriptionHead{flex-wrap:wrap;align-items:baseline;gap:6px;margin-bottom:8px;display:flex}.VWh0dG_subscriptionName{color:var(--ds-t-1);font-size:13px;font-weight:600}.VWh0dG_subscriptionPlan{color:var(--ds-t-2);font-size:11px}.VWh0dG_subscriptionPlan[data-kind=code],.VWh0dG_subscriptionPlan[data-kind=token]{color:var(--ds-t-2);background:var(--dsb-3);border-radius:999px;padding:1px 8px;font-weight:500}.VWh0dG_subscriptionTier{color:var(--ds-t-3);margin-left:6px}.VWh0dG_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}.VWh0dG_subscriptionStatus{color:var(--ds-t-2);margin-bottom:6px;font-size:11px}.VWh0dG_subscriptionWindow{align-items:center;gap:10px;margin-top:8px;font-size:11px;display:flex}.VWh0dG_subscriptionWindowLabel{color:var(--ds-t-3);flex:0 0 44px}.VWh0dG_subscriptionTrack{background:var(--dsb-3);height:6px;box-shadow:inset 0 0 0 1px var(--ds-border);border-radius:3px;flex:1;overflow:hidden}.VWh0dG_subscriptionFill{background:var(--ds-blue);height:calc(100% - 2px);transition:width var(--ds-t-fast);border-radius:2px;margin:1px;display:block}.VWh0dG_subscriptionFillWarn{background:var(--ds-amber)}.VWh0dG_subscriptionFillOver{background:var(--ds-red)}.VWh0dG_subscriptionMeta{flex-direction:column;flex:none;align-items:flex-end;gap:2px;display:flex}.VWh0dG_subscriptionPct{text-align:right;min-width:52px;font-family:var(--mono);font-variant-numeric:tabular-nums;color:var(--ds-t-1);flex:none}.VWh0dG_subscriptionExhausted{color:var(--ds-red);min-width:52px;font-weight:600}.VWh0dG_subscriptionReset{color:var(--ds-t-3);white-space:nowrap;flex:none;font-size:10px}.VWh0dG_providerGroupList{flex-direction:column;gap:10px;display:flex}.VWh0dG_providerGroup{border:1px solid var(--ds-border);border-radius:var(--ds-r-2);background:var(--dsb-glass);padding:12px 14px}.VWh0dG_providerGroupHead{justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:10px;display:flex}.VWh0dG_providerGroupTitle{align-items:center;gap:7px;min-width:0;display:inline-flex}.VWh0dG_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}.VWh0dG_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)}.VWh0dG_kindBadgeUnknown{border-color:var(--ds-border);background:color-mix(in srgb, var(--ds-t-3) 12%, transparent);color:var(--ds-t-3)}.VWh0dG_providerGroupName{color:var(--ds-t-1);font-size:13px;font-weight:600;line-height:18px}.VWh0dG_providerGroupMeta{flex:none;align-items:center;gap:10px;display:inline-flex}.VWh0dG_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}.VWh0dG_providerGroupBalance,.VWh0dG_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}.VWh0dG_providerGroupCostLabel{font-size:11px}.VWh0dG_providerGroupCostValue{color:var(--ds-t-1);text-align:right;min-width:56px;font-weight:600}.VWh0dG_providerGroupBalanceLabel{color:var(--ds-t-3);font-size:11px;line-height:17px}.VWh0dG_rounds{margin-top:10px}.VWh0dG_roundsBars{align-items:flex-end;gap:3px;height:124px;padding:16px 2px 0;display:flex;overflow-x:auto}.VWh0dG_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}.VWh0dG_roundsBarColPeak{background:color-mix(in srgb, var(--ds-amber) 16%, transparent)}.VWh0dG_roundsBarColOff{background:var(--dsb-3)}.VWh0dG_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%)}.VWh0dG_roundsBarWrap{flex:1;align-items:flex-end;min-height:0;display:flex}.VWh0dG_roundsBar{background:var(--ds-blue);border-radius:2px 2px 0 0;width:100%;min-height:2px;position:relative}.VWh0dG_roundsBarFlagged{background:var(--ds-red);border-radius:2px 2px 0 0;width:100%;min-height:2px;position:relative}.VWh0dG_roundsFlagMark{background:var(--ds-red);border-radius:50%;width:7px;height:7px;position:absolute;top:-3px;right:-3px}.VWh0dG_roundsAxis{color:var(--ds-t-3);justify-content:space-between;margin-top:6px;font-size:10px;display:flex}.VWh0dG_roundsEmpty{color:var(--ds-t-2);margin-top:10px;font-size:12px}.VWh0dG_heatmap{margin-top:10px}.VWh0dG_heatmapGrid{grid-template-columns:repeat(7,minmax(0,1fr));gap:3px;display:grid}.VWh0dG_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}.VWh0dG_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}.VWh0dG_heatmapCell[data-level="0"],.VWh0dG_heatmapCell[data-level="1"],.VWh0dG_heatmapCell[data-level="2"]{color:var(--dsw-alias-label-primary)}.VWh0dG_heatmapCell[data-level="3"],.VWh0dG_heatmapCell[data-level="4"]{color:var(--dsw-static-neutral-bluish-00)}.VWh0dG_heatmapFooter{color:var(--dsw-alias-label-secondary);align-items:center;gap:8px;margin-top:10px;font-size:10px;display:flex}.VWh0dG_heatmapLegend{gap:3px;display:inline-flex}.VWh0dG_heatmapLegend i{border-radius:2px;width:14px;height:14px;display:block}.VWh0dG_heatmapHover{font-variant-numeric:tabular-nums;margin-left:auto;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace}.VWh0dG_heatmapRangeSwitch{gap:4px;margin-left:auto;display:inline-flex}.VWh0dG_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}.VWh0dG_heatmapRangeButtonActive{border-color:var(--ds-border-strong);color:var(--ds-t-1);font-weight:600}.VWh0dG_heatmapYear{flex-direction:column;gap:6px;display:flex}.VWh0dG_heatmapYearBody{align-items:flex-start;gap:6px;display:flex}.VWh0dG_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}.VWh0dG_heatmapYearWeekday{white-space:nowrap;text-align:right;height:11px}.VWh0dG_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}.VWh0dG_heatmapYearMonth{white-space:nowrap;overflow:visible}.VWh0dG_heatmapYearScroll{padding-bottom:2px;overflow-x:auto}.VWh0dG_heatmapYearGrid{grid-template-rows:repeat(7,11px);grid-auto-flow:column;gap:3px;min-width:max-content;display:grid}.VWh0dG_heatmapYearCell{cursor:pointer;border:0;border-radius:2px;width:11px;height:11px;padding:0}.VWh0dG_heatmapHalf .VWh0dG_heatmapYearWeekdays{grid-template-rows:repeat(7,16px);line-height:16px}.VWh0dG_heatmapHalf .VWh0dG_heatmapYearWeekday{height:16px}.VWh0dG_heatmapHalf .VWh0dG_heatmapYearMonths{grid-template-columns:repeat(26,16px)}.VWh0dG_heatmapHalf .VWh0dG_heatmapYearGrid{grid-template-rows:repeat(7,16px)}.VWh0dG_heatmapHalf .VWh0dG_heatmapYearCell{border-radius:3px;width:16px;height:16px}.VWh0dG_floatSub{flex-direction:column;gap:6px;min-width:0;display:flex}.VWh0dG_floatSubHead{flex-wrap:wrap;align-items:baseline;gap:6px;min-width:0;display:flex}.VWh0dG_floatSubName{color:var(--dsw-alias-label-primary);font-size:12px;font-weight:700}.VWh0dG_floatSubPlan{color:var(--dsw-alias-label-secondary);font-size:10px}.VWh0dG_floatSub .VWh0dG_subscriptionWindow{flex-wrap:wrap;gap:4px 10px}.VWh0dG_floatSub .VWh0dG_subscriptionWindowLabel{flex:none}.VWh0dG_floatSub .VWh0dG_subscriptionMeta{min-width:0;max-width:100%}.VWh0dG_floatSub .VWh0dG_subscriptionPct{min-width:0}.VWh0dG_floatSub .VWh0dG_subscriptionReset{white-space:normal;overflow-wrap:anywhere}.VWh0dG_triggerPopEmpty{color:var(--dsw-alias-label-tertiary);padding:2px 0;font-size:11px;line-height:1.5}.VWh0dG_triggerPopSwitcher{justify-content:flex-end;align-items:center;gap:8px;margin-top:2px;display:flex}.VWh0dG_triggerPopSwitchCount{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;font-size:10px}.VWh0dG_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}.VWh0dG_floatModeBtnOn{border-color:var(--ds-blue);color:var(--dsw-alias-label-primary);background:color-mix(in srgb, var(--ds-blue) 16%, transparent)}.VWh0dG_rdoRow{justify-content:space-between;align-items:center;gap:8px;margin-top:10px;display:flex}.VWh0dG_rdoLabel{color:var(--dsw-alias-label-secondary);font-size:12px}.VWh0dG_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}.VWh0dG_rdoSelect:hover{background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 85%, transparent)}.VWh0dG_rdoSelect:focus-visible{border-color:var(--ds-blue);outline:none}.VWh0dG_rdoChevron{color:var(--dsw-alias-label-tertiary);transition:transform .15s;display:inline-flex}.VWh0dG_rdoChevronOpen{transform:rotate(180deg)}.VWh0dG_floatTarget{color:var(--dsw-alias-label-secondary);cursor:pointer;align-items:center;gap:5px;font-size:12px;display:inline-flex}.VWh0dG_floatTargetLabel{color:var(--dsw-alias-label-secondary)}.VWh0dG_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}.VWh0dG_plgHead{align-items:flex-start;gap:12px;display:flex}.VWh0dG_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}.VWh0dG_plgTitle{flex-direction:column;gap:4px;min-width:0;display:flex}.VWh0dG_plgNameRow{align-items:center;gap:8px;display:flex}.VWh0dG_plgName{color:var(--dsw-alias-label-primary);margin:0;font-size:13px;font-weight:600;line-height:18px}.VWh0dG_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}.VWh0dG_plgDesc{color:var(--dsw-alias-label-secondary);margin:0;font-size:11px;line-height:16px}.VWh0dG_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}.VWh0dG_plgItem{flex-direction:column;gap:2px;min-width:0;display:flex}.VWh0dG_plgLabel{color:var(--dsw-alias-label-tertiary);font-size:10px;line-height:14px}.VWh0dG_plgVal{color:var(--dsw-alias-label-primary);word-break:break-all;font-size:12px;line-height:17px}.VWh0dG_plgLink{color:var(--ds-blue);word-break:break-all;font-size:12px;line-height:17px;text-decoration:none}.VWh0dG_plgLink:hover{text-decoration:underline}.VWh0dG_tokenPanel{flex-direction:column;gap:14px;display:flex}.VWh0dG_tokenModelBar{background:var(--dsw-alias-bg-layer-2);border-radius:999px;height:8px;overflow:hidden}.VWh0dG_tokenModelParts{height:100%;display:flex}.VWh0dG_tokenModelPartIn{background:var(--ds-blue)}.VWh0dG_tokenModelPartOut{background:var(--ds-amber)}.VWh0dG_tokenModelShareRow{align-items:center;gap:6px;display:inline-flex}@media (width<=640px){.VWh0dG_kpiGrid{grid-template-columns:repeat(2,minmax(0,1fr))}.VWh0dG_hero{gap:14px}.VWh0dG_heroTop{flex-direction:column;align-items:flex-start;gap:12px}.VWh0dG_heroGauge{width:72px;height:72px}.VWh0dG_heroSide{gap:12px}.VWh0dG_heroSideSpacer{display:none}}.VWh0dG_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:VWh0dG_peakAlertIn var(--ds-t-fast);flex-direction:column;gap:12px;padding:14px 16px;display:flex;position:fixed}.VWh0dG_peakCardCorner{bottom:18px;right:18px}.VWh0dG_peakCardCenter{top:20%;left:50%;transform:translate(-50%)}.VWh0dG_peakCardPeak{color:var(--ds-blue)}.VWh0dG_peakCardOff{color:var(--ds-cyan)}.VWh0dG_peakHead{justify-content:space-between;align-items:center;gap:8px;display:flex}.VWh0dG_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}.VWh0dG_peakTagPrimary{background:var(--dsw-alias-bg-layer-3);color:var(--ds-blue)}.VWh0dG_peakTagSuccess{background:var(--dsw-alias-bg-layer-3);color:var(--ds-cyan)}.VWh0dG_peakDot{border-radius:999px;flex:none;width:6px;height:6px}.VWh0dG_peakDotPrimary{background:var(--ds-blue)}.VWh0dG_peakDotSuccess{background:var(--ds-cyan)}.VWh0dG_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}.VWh0dG_peakClose:hover{color:var(--ds-t-1);background:var(--dsw-alias-bg-layer-2)}.VWh0dG_peakCount{font-variant-numeric:tabular-nums;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:28px;font-weight:600;line-height:1}.VWh0dG_peakCountPrimary{color:var(--ds-blue)}.VWh0dG_peakCountSuccess{color:var(--ds-cyan)}.VWh0dG_peakDesc{color:var(--ds-t-1);margin:4px 0 0;font-size:12px;line-height:18px}@keyframes VWh0dG_peakAlertIn{0%{opacity:0}to{opacity:1}}.VWh0dG_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}.VWh0dG_setGrid3,.VWh0dG_setGrid2{gap:10px;display:grid}.VWh0dG_setGrid3{grid-template-columns:repeat(3,minmax(0,1fr))}.VWh0dG_setGrid2{grid-template-columns:repeat(2,minmax(0,1fr))}@media (width<=720px){.VWh0dG_setGrid3,.VWh0dG_setGrid2{grid-template-columns:1fr}}.VWh0dG_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}.VWh0dG_setCardHead{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.VWh0dG_setCardMeta{flex-direction:column;gap:4px;min-width:0;display:flex}.VWh0dG_setCardTitle{color:var(--ds-t-1);margin:0;font-size:13px;font-weight:600;line-height:18px}.VWh0dG_setCardDesc{color:var(--ds-t-3);margin:0;font-size:11px;line-height:16px}.VWh0dG_ctlCol{flex-direction:column;gap:10px;padding-top:2px;display:flex}.VWh0dG_ctlRow{align-items:center;gap:12px;min-height:28px;display:flex}.VWh0dG_ctlRowStretch{display:flex}.VWh0dG_ctlLabel{color:var(--ds-t-3);flex:0 0 96px;font-size:11px;line-height:16px}.VWh0dG_ctlGroup{flex-wrap:wrap;align-items:center;gap:8px;display:inline-flex}.VWh0dG_userPriceRow{border-bottom:1px solid var(--ds-border);align-items:center;gap:10px;padding:8px 0;display:flex}.VWh0dG_userPriceCheck{width:14px;height:14px;accent-color:var(--ds-blue);flex:none;margin:0}.VWh0dG_userPriceBody{flex-direction:column;flex:1;gap:8px;min-width:0;display:flex}.VWh0dG_userPriceLineMeta{grid-template-columns:minmax(0,1fr) minmax(0,1.4fr) auto;align-items:end;gap:8px 10px;display:grid}@media (width<=720px){.VWh0dG_userPriceLineMeta{grid-template-columns:repeat(2,minmax(0,1fr))}}.VWh0dG_userPriceLineMeta .VWh0dG_userPriceInput{box-sizing:border-box;width:100%;min-width:0;max-width:none}.VWh0dG_userPriceBody .VWh0dG_ctlGroup{flex-wrap:nowrap}.VWh0dG_userPriceLineMeta .VWh0dG_userPriceField .VWh0dG_ctlLabel{align-items:flex-end;min-height:30px;display:flex}.VWh0dG_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}.VWh0dG_userPricePriceLine>.VWh0dG_ctlLabel{color:var(--ds-t-3);flex:0 0 44px;font-size:11px}.VWh0dG_userPricePriceLine .VWh0dG_userPriceInputNum{box-sizing:border-box;flex:1 1 0;width:auto;min-width:120px;max-width:240px}.VWh0dG_userPriceField{flex-direction:column;gap:4px;min-width:0;display:flex}.VWh0dG_userPriceField .VWh0dG_ctlLabel{flex:none;font-size:11px}.VWh0dG_userPriceInput,.VWh0dG_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}.VWh0dG_userPriceInputNum{min-width:72px;max-width:88px}.VWh0dG_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}.VWh0dG_rdo input{opacity:0;pointer-events:none;position:absolute}.VWh0dG_rdoDot{border:1px solid var(--ds-border-strong);background:var(--dsb-3);border-radius:50%;flex:none;width:14px;height:14px;position:relative}.VWh0dG_rdo input:checked+.VWh0dG_rdoDot{border-color:var(--ds-blue)}.VWh0dG_rdo input:checked+.VWh0dG_rdoDot:after{content:"";background:var(--ds-blue);border-radius:50%;position:absolute;inset:3px}.VWh0dG_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}.VWh0dG_affix{color:var(--ds-t-3);font-size:11px;line-height:16px}.VWh0dG_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}.VWh0dG_progFill{background:var(--ds-blue);height:calc(100% - 2px);transition:width var(--ds-t-fast);border-radius:2px;margin:1px}.VWh0dG_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}.VWh0dG_btn:hover{border-color:var(--ds-blue);color:var(--ds-t-1);background:color-mix(in srgb, var(--ds-blue) 12%, transparent)}.VWh0dG_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:`VWh0dG_affix`,balanceCell:`VWh0dG_balanceCell`,balanceDaysBadge:`VWh0dG_balanceDaysBadge`,balanceDaysBadgeLow:`VWh0dG_balanceDaysBadgeLow`,balanceDetailClose:`VWh0dG_balanceDetailClose`,balanceDetailGrid:`VWh0dG_balanceDetailGrid`,balanceDetailHead:`VWh0dG_balanceDetailHead`,balanceDetailLabel:`VWh0dG_balanceDetailLabel`,balanceDetailPop:`VWh0dG_balanceDetailPop`,balanceDetailRow:`VWh0dG_balanceDetailRow`,balanceDetailTitle:`VWh0dG_balanceDetailTitle`,balanceDetailValue:`VWh0dG_balanceDetailValue`,bandDot:`VWh0dG_bandDot`,bandDotOn:`VWh0dG_bandDotOn`,bandDots:`VWh0dG_bandDots`,"billing-trigger":`VWh0dG_billing-trigger`,btn:`VWh0dG_btn`,bucketCost:`VWh0dG_bucketCost`,bucketOfficial:`VWh0dG_bucketOfficial`,bucketSep:`VWh0dG_bucketSep`,bucketThird:`VWh0dG_bucketThird`,budgetFillOver:`VWh0dG_budgetFillOver`,budgetFillWarn:`VWh0dG_budgetFillWarn`,budgetInput:`VWh0dG_budgetInput`,budgetPulse:`VWh0dG_budgetPulse`,chartAxisLabel:`VWh0dG_chartAxisLabel`,chartBar:`VWh0dG_chartBar`,chartBarPlaceholder:`VWh0dG_chartBarPlaceholder`,chartCrosshair:`VWh0dG_chartCrosshair`,chartEmpty:`VWh0dG_chartEmpty`,chartGrid:`VWh0dG_chartGrid`,chartHoverDot:`VWh0dG_chartHoverDot`,chartLegend:`VWh0dG_chartLegend`,chartLegendBar:`VWh0dG_chartLegendBar`,chartLegendItem:`VWh0dG_chartLegendItem`,chartLegendItemActive:`VWh0dG_chartLegendItemActive`,chartLegendLine:`VWh0dG_chartLegendLine`,chartLine:`VWh0dG_chartLine`,chartStack:`VWh0dG_chartStack`,chartSvg:`VWh0dG_chartSvg`,chartTooltip:`VWh0dG_chartTooltip`,chartTooltipAlignLeft:`VWh0dG_chartTooltipAlignLeft`,chartTooltipAlignRight:`VWh0dG_chartTooltipAlignRight`,chartTooltipDate:`VWh0dG_chartTooltipDate`,chartTooltipHead:`VWh0dG_chartTooltipHead`,chartTooltipLabel:`VWh0dG_chartTooltipLabel`,chartTooltipModelDetail:`VWh0dG_chartTooltipModelDetail`,chartTooltipRow:`VWh0dG_chartTooltipRow`,chartTooltipSplit:`VWh0dG_chartTooltipSplit`,chartTooltipSwatch:`VWh0dG_chartTooltipSwatch`,chartWrap:`VWh0dG_chartWrap`,closeButton:`VWh0dG_closeButton`,ctlCol:`VWh0dG_ctlCol`,ctlGroup:`VWh0dG_ctlGroup`,ctlLabel:`VWh0dG_ctlLabel`,ctlRow:`VWh0dG_ctlRow`,ctlRowStretch:`VWh0dG_ctlRowStretch`,currencyButton:`VWh0dG_currencyButton`,currencyButtonActive:`VWh0dG_currencyButtonActive`,currencyToggle:`VWh0dG_currencyToggle`,dashboard:`VWh0dG_dashboard`,dashboardBody:`VWh0dG_dashboardBody`,dashboardHead:`VWh0dG_dashboardHead`,dashboardIn:`VWh0dG_dashboardIn`,dashboardModal:`VWh0dG_dashboardModal`,dashboardRight:`VWh0dG_dashboardRight`,dashboardSubtitle:`VWh0dG_dashboardSubtitle`,dashboardTitle:`VWh0dG_dashboardTitle`,delta:`VWh0dG_delta`,deltaDown:`VWh0dG_deltaDown`,deltaUp:`VWh0dG_deltaUp`,emptyRow:`VWh0dG_emptyRow`,estimatedTag:`VWh0dG_estimatedTag`,exportBar:`VWh0dG_exportBar`,exportButton:`VWh0dG_exportButton`,exportLabel:`VWh0dG_exportLabel`,feeBar:`VWh0dG_feeBar`,feeBarAbove:`VWh0dG_feeBarAbove`,feeChipAlert:`VWh0dG_feeChipAlert`,feeChipError:`VWh0dG_feeChipError`,feeChipOff:`VWh0dG_feeChipOff`,feeChipPrimary:`VWh0dG_feeChipPrimary`,feeCount:`VWh0dG_feeCount`,feeInline:`VWh0dG_feeInline`,feeInlineAlert:`VWh0dG_feeInlineAlert`,feeInlineError:`VWh0dG_feeInlineError`,feeInlineNum:`VWh0dG_feeInlineNum`,feeItem:`VWh0dG_feeItem`,feeNum:`VWh0dG_feeNum`,feeSep:`VWh0dG_feeSep`,feeSuffix:`VWh0dG_feeSuffix`,flatTag:`VWh0dG_flatTag`,floatModeBtn:`VWh0dG_floatModeBtn`,floatModeBtnOn:`VWh0dG_floatModeBtnOn`,floatSub:`VWh0dG_floatSub`,floatSubHead:`VWh0dG_floatSubHead`,floatSubName:`VWh0dG_floatSubName`,floatSubPlan:`VWh0dG_floatSubPlan`,floatTarget:`VWh0dG_floatTarget`,floatTargetLabel:`VWh0dG_floatTargetLabel`,healthBad:`VWh0dG_healthBad`,healthBadge:`VWh0dG_healthBadge`,healthBadgeBad:`VWh0dG_healthBadgeBad`,healthBadgeOk:`VWh0dG_healthBadgeOk`,healthDot:`VWh0dG_healthDot`,healthIdle:`VWh0dG_healthIdle`,healthOk:`VWh0dG_healthOk`,heatmap:`VWh0dG_heatmap`,heatmapCell:`VWh0dG_heatmapCell`,heatmapCellEmpty:`VWh0dG_heatmapCellEmpty`,heatmapFooter:`VWh0dG_heatmapFooter`,heatmapGrid:`VWh0dG_heatmapGrid`,heatmapHalf:`VWh0dG_heatmapHalf`,heatmapHover:`VWh0dG_heatmapHover`,heatmapLegend:`VWh0dG_heatmapLegend`,heatmapRangeButton:`VWh0dG_heatmapRangeButton`,heatmapRangeButtonActive:`VWh0dG_heatmapRangeButtonActive`,heatmapRangeSwitch:`VWh0dG_heatmapRangeSwitch`,heatmapYear:`VWh0dG_heatmapYear`,heatmapYearBody:`VWh0dG_heatmapYearBody`,heatmapYearCell:`VWh0dG_heatmapYearCell`,heatmapYearGrid:`VWh0dG_heatmapYearGrid`,heatmapYearMonth:`VWh0dG_heatmapYearMonth`,heatmapYearMonths:`VWh0dG_heatmapYearMonths`,heatmapYearScroll:`VWh0dG_heatmapYearScroll`,heatmapYearWeekday:`VWh0dG_heatmapYearWeekday`,heatmapYearWeekdays:`VWh0dG_heatmapYearWeekdays`,hero:`VWh0dG_hero`,heroCurrency:`VWh0dG_heroCurrency`,heroGauge:`VWh0dG_heroGauge`,heroGaugeArc:`VWh0dG_heroGaugeArc`,heroGaugeArcOver:`VWh0dG_heroGaugeArcOver`,heroGaugeCenter:`VWh0dG_heroGaugeCenter`,heroGaugeDial:`VWh0dG_heroGaugeDial`,heroGaugeLabel:`VWh0dG_heroGaugeLabel`,heroGaugeRemain:`VWh0dG_heroGaugeRemain`,heroGaugeRemainOver:`VWh0dG_heroGaugeRemainOver`,heroGaugeSub:`VWh0dG_heroGaugeSub`,heroGaugeSvg:`VWh0dG_heroGaugeSvg`,heroGaugeTrack:`VWh0dG_heroGaugeTrack`,heroLabel:`VWh0dG_heroLabel`,heroMain:`VWh0dG_heroMain`,heroMeta:`VWh0dG_heroMeta`,heroReadout:`VWh0dG_heroReadout`,heroSide:`VWh0dG_heroSide`,heroSideItem:`VWh0dG_heroSideItem`,heroSideLabel:`VWh0dG_heroSideLabel`,heroSideSpacer:`VWh0dG_heroSideSpacer`,heroSideValue:`VWh0dG_heroSideValue`,heroTop:`VWh0dG_heroTop`,heroValue:`VWh0dG_heroValue`,inp:`VWh0dG_inp`,kindBadge:`VWh0dG_kindBadge`,kindBadgeRelay:`VWh0dG_kindBadgeRelay`,kindBadgeUnknown:`VWh0dG_kindBadgeUnknown`,kpiDetail:`VWh0dG_kpiDetail`,kpiGreen:`VWh0dG_kpiGreen`,kpiGrid:`VWh0dG_kpiGrid`,kpiLabel:`VWh0dG_kpiLabel`,kpiTile:`VWh0dG_kpiTile`,kpiValue:`VWh0dG_kpiValue`,kpiZone:`VWh0dG_kpiZone`,kpiZoneHead:`VWh0dG_kpiZoneHead`,kpiZoneLabel:`VWh0dG_kpiZoneLabel`,metricCell:`VWh0dG_metricCell`,metricGrid:`VWh0dG_metricGrid`,metricLabel:`VWh0dG_metricLabel`,metricValue:`VWh0dG_metricValue`,metricValueSuccess:`VWh0dG_metricValueSuccess`,modalFooter:`VWh0dG_modalFooter`,modelCell:`VWh0dG_modelCell`,modelDot:`VWh0dG_modelDot`,modelName:`VWh0dG_modelName`,modelProvider:`VWh0dG_modelProvider`,modelRowActive:`VWh0dG_modelRowActive`,modelRowFocusable:`VWh0dG_modelRowFocusable`,modelTable:`VWh0dG_modelTable`,na:`VWh0dG_na`,numCol:`VWh0dG_numCol`,offPeak:`VWh0dG_offPeak`,panel:`VWh0dG_panel`,panelHead:`VWh0dG_panelHead`,panelHeadControls:`VWh0dG_panelHeadControls`,panelHint:`VWh0dG_panelHint`,panelTitle:`VWh0dG_panelTitle`,peak:`VWh0dG_peak`,peakAlertIn:`VWh0dG_peakAlertIn`,peakCard:`VWh0dG_peakCard`,peakCardCenter:`VWh0dG_peakCardCenter`,peakCardCorner:`VWh0dG_peakCardCorner`,peakCardOff:`VWh0dG_peakCardOff`,peakCardPeak:`VWh0dG_peakCardPeak`,peakClose:`VWh0dG_peakClose`,peakCount:`VWh0dG_peakCount`,peakCountPrimary:`VWh0dG_peakCountPrimary`,peakCountSuccess:`VWh0dG_peakCountSuccess`,peakDesc:`VWh0dG_peakDesc`,peakDot:`VWh0dG_peakDot`,peakDotPrimary:`VWh0dG_peakDotPrimary`,peakDotSuccess:`VWh0dG_peakDotSuccess`,peakHead:`VWh0dG_peakHead`,peakTag:`VWh0dG_peakTag`,peakTagPrimary:`VWh0dG_peakTagPrimary`,peakTagSuccess:`VWh0dG_peakTagSuccess`,perfBar:`VWh0dG_perfBar`,perfChip:`VWh0dG_perfChip`,perfChipDot:`VWh0dG_perfChipDot`,perfChipOff:`VWh0dG_perfChipOff`,perfChips:`VWh0dG_perfChips`,planTag:`VWh0dG_planTag`,planTagBadge:`VWh0dG_planTagBadge`,plgDesc:`VWh0dG_plgDesc`,plgGrid:`VWh0dG_plgGrid`,plgHead:`VWh0dG_plgHead`,plgIcon:`VWh0dG_plgIcon`,plgItem:`VWh0dG_plgItem`,plgLabel:`VWh0dG_plgLabel`,plgLink:`VWh0dG_plgLink`,plgName:`VWh0dG_plgName`,plgNameRow:`VWh0dG_plgNameRow`,plgTag:`VWh0dG_plgTag`,plgTitle:`VWh0dG_plgTitle`,plgVal:`VWh0dG_plgVal`,popDot:`VWh0dG_popDot`,popDotDirect:`VWh0dG_popDotDirect`,popDotNeutral:`VWh0dG_popDotNeutral`,popDotSub:`VWh0dG_popDotSub`,popHead:`VWh0dG_popHead`,popModel:`VWh0dG_popModel`,popModelLabel:`VWh0dG_popModelLabel`,popModelName:`VWh0dG_popModelName`,popModelRow:`VWh0dG_popModelRow`,popModelStatus:`VWh0dG_popModelStatus`,popModelStatusLow:`VWh0dG_popModelStatusLow`,popTagPrimary:`VWh0dG_popTagPrimary`,popTagSub:`VWh0dG_popTagSub`,popTitle:`VWh0dG_popTitle`,prog:`VWh0dG_prog`,progFill:`VWh0dG_progFill`,providerGroup:`VWh0dG_providerGroup`,providerGroupBadge:`VWh0dG_providerGroupBadge`,providerGroupBalance:`VWh0dG_providerGroupBalance`,providerGroupBalanceLabel:`VWh0dG_providerGroupBalanceLabel`,providerGroupCost:`VWh0dG_providerGroupCost`,providerGroupCostLabel:`VWh0dG_providerGroupCostLabel`,providerGroupCostValue:`VWh0dG_providerGroupCostValue`,providerGroupHead:`VWh0dG_providerGroupHead`,providerGroupList:`VWh0dG_providerGroupList`,providerGroupMeta:`VWh0dG_providerGroupMeta`,providerGroupName:`VWh0dG_providerGroupName`,providerGroupRecharge:`VWh0dG_providerGroupRecharge`,providerGroupTitle:`VWh0dG_providerGroupTitle`,railButton:`VWh0dG_railButton`,rangeButton:`VWh0dG_rangeButton`,rangeButtonActive:`VWh0dG_rangeButtonActive`,rangeToggle:`VWh0dG_rangeToggle`,rdo:`VWh0dG_rdo`,rdoChevron:`VWh0dG_rdoChevron`,rdoChevronOpen:`VWh0dG_rdoChevronOpen`,rdoDot:`VWh0dG_rdoDot`,rdoLabel:`VWh0dG_rdoLabel`,rdoRow:`VWh0dG_rdoRow`,rdoSelect:`VWh0dG_rdoSelect`,reconcileDismiss:`VWh0dG_reconcileDismiss`,reconcileIcon:`VWh0dG_reconcileIcon`,reconcileNotice:`VWh0dG_reconcileNotice`,reconcileText:`VWh0dG_reconcileText`,rounds:`VWh0dG_rounds`,roundsAxis:`VWh0dG_roundsAxis`,roundsBar:`VWh0dG_roundsBar`,roundsBarCol:`VWh0dG_roundsBarCol`,roundsBarColOff:`VWh0dG_roundsBarColOff`,roundsBarColPeak:`VWh0dG_roundsBarColPeak`,roundsBarFlagged:`VWh0dG_roundsBarFlagged`,roundsBarLabel:`VWh0dG_roundsBarLabel`,roundsBarWrap:`VWh0dG_roundsBarWrap`,roundsBars:`VWh0dG_roundsBars`,roundsEmpty:`VWh0dG_roundsEmpty`,roundsFlagMark:`VWh0dG_roundsFlagMark`,sessionChildRow:`VWh0dG_sessionChildRow`,sessionGroupRow:`VWh0dG_sessionGroupRow`,setCard:`VWh0dG_setCard`,setCardDesc:`VWh0dG_setCardDesc`,setCardHead:`VWh0dG_setCardHead`,setCardMeta:`VWh0dG_setCardMeta`,setCardTitle:`VWh0dG_setCardTitle`,setCell:`VWh0dG_setCell`,setGrid2:`VWh0dG_setGrid2`,setGrid3:`VWh0dG_setGrid3`,shareDot:`VWh0dG_shareDot`,shareItem:`VWh0dG_shareItem`,shareLegend:`VWh0dG_shareLegend`,shareSeg:`VWh0dG_shareSeg`,shareSegAssistant:`VWh0dG_shareSegAssistant`,shareSegOff:`VWh0dG_shareSegOff`,shareSegPeak:`VWh0dG_shareSegPeak`,shareSegTool:`VWh0dG_shareSegTool`,shareSegUser:`VWh0dG_shareSegUser`,shareTrack:`VWh0dG_shareTrack`,shareValue:`VWh0dG_shareValue`,siteKindDirect:`VWh0dG_siteKindDirect`,siteKindSite:`VWh0dG_siteKindSite`,siteKindTag:`VWh0dG_siteKindTag`,siteKindUnknown:`VWh0dG_siteKindUnknown`,siteRow:`VWh0dG_siteRow`,siteRowCalls:`VWh0dG_siteRowCalls`,siteRowCallsLow:`VWh0dG_siteRowCallsLow`,siteRowCost:`VWh0dG_siteRowCost`,siteRowMeta:`VWh0dG_siteRowMeta`,siteRowName:`VWh0dG_siteRowName`,siteRowTitle:`VWh0dG_siteRowTitle`,soon:`VWh0dG_soon`,staleNotice:`VWh0dG_staleNotice`,subscriptionAuto:`VWh0dG_subscriptionAuto`,subscriptionCard:`VWh0dG_subscriptionCard`,subscriptionExhausted:`VWh0dG_subscriptionExhausted`,subscriptionFill:`VWh0dG_subscriptionFill`,subscriptionFillOver:`VWh0dG_subscriptionFillOver`,subscriptionFillWarn:`VWh0dG_subscriptionFillWarn`,subscriptionGrid:`VWh0dG_subscriptionGrid`,subscriptionHead:`VWh0dG_subscriptionHead`,subscriptionMeta:`VWh0dG_subscriptionMeta`,subscriptionName:`VWh0dG_subscriptionName`,subscriptionPct:`VWh0dG_subscriptionPct`,subscriptionPlan:`VWh0dG_subscriptionPlan`,subscriptionReset:`VWh0dG_subscriptionReset`,subscriptionStatus:`VWh0dG_subscriptionStatus`,subscriptionTier:`VWh0dG_subscriptionTier`,subscriptionTrack:`VWh0dG_subscriptionTrack`,subscriptionWindow:`VWh0dG_subscriptionWindow`,subscriptionWindowLabel:`VWh0dG_subscriptionWindowLabel`,switch:`VWh0dG_switch`,switchKnob:`VWh0dG_switchKnob`,switchOn:`VWh0dG_switchOn`,tabButton:`VWh0dG_tabButton`,tabButtonActive:`VWh0dG_tabButtonActive`,tabNav:`VWh0dG_tabNav`,tabPanel:`VWh0dG_tabPanel`,tabPanelIn:`VWh0dG_tabPanelIn`,tableScroll:`VWh0dG_tableScroll`,tokenModelBar:`VWh0dG_tokenModelBar`,tokenModelPartIn:`VWh0dG_tokenModelPartIn`,tokenModelPartOut:`VWh0dG_tokenModelPartOut`,tokenModelParts:`VWh0dG_tokenModelParts`,tokenModelShareRow:`VWh0dG_tokenModelShareRow`,tokenPanel:`VWh0dG_tokenPanel`,trigger:`VWh0dG_trigger`,triggerBudgetHot:`VWh0dG_triggerBudgetHot`,triggerBudgetOver:`VWh0dG_triggerBudgetOver`,triggerBudgetPulse:`VWh0dG_triggerBudgetPulse`,triggerGaugeArc:`VWh0dG_triggerGaugeArc`,triggerGaugeNeedle:`VWh0dG_triggerGaugeNeedle`,triggerIcon:`VWh0dG_triggerIcon`,triggerLabel:`VWh0dG_triggerLabel`,triggerMain:`VWh0dG_triggerMain`,triggerMetric:`VWh0dG_triggerMetric`,triggerPop:`VWh0dG_triggerPop`,triggerPopEmpty:`VWh0dG_triggerPopEmpty`,triggerPopShown:`VWh0dG_triggerPopShown`,triggerPopSwitchCount:`VWh0dG_triggerPopSwitchCount`,triggerPopSwitcher:`VWh0dG_triggerPopSwitcher`,triggerPrimary:`VWh0dG_triggerPrimary`,triggerScan:`VWh0dG_triggerScan`,triggerSpark:`VWh0dG_triggerSpark`,triggerSparkBar:`VWh0dG_triggerSparkBar`,triggerSparkBreath:`VWh0dG_triggerSparkBreath`,triggerSparkHot:`VWh0dG_triggerSparkHot`,triggerValueRow:`VWh0dG_triggerValueRow`,triggerWrap:`VWh0dG_triggerWrap`,triggerYen:`VWh0dG_triggerYen`,ubAlert:`VWh0dG_ubAlert`,ubAlertLeft:`VWh0dG_ubAlertLeft`,ubAlertNote:`VWh0dG_ubAlertNote`,ubCard:`VWh0dG_ubCard`,ubCardControlGroup:`VWh0dG_ubCardControlGroup`,ubCardHead:`VWh0dG_ubCardHead`,ubCardSub:`VWh0dG_ubCardSub`,ubCardTitle:`VWh0dG_ubCardTitle`,ubChipLabel:`VWh0dG_ubChipLabel`,ubChipOff:`VWh0dG_ubChipOff`,ubChipPeak:`VWh0dG_ubChipPeak`,ubExtraName:`VWh0dG_ubExtraName`,ubExtraNote:`VWh0dG_ubExtraNote`,ubExtraRow:`VWh0dG_ubExtraRow`,ubModel:`VWh0dG_ubModel`,ubModelName:`VWh0dG_ubModelName`,ubNotes:`VWh0dG_ubNotes`,ubNotesDesc:`VWh0dG_ubNotesDesc`,ubNotesItem:`VWh0dG_ubNotesItem`,ubNotesTerm:`VWh0dG_ubNotesTerm`,ubRate:`VWh0dG_ubRate`,ubSearch:`VWh0dG_ubSearch`,ubTable:`VWh0dG_ubTable`,ubTablewrap:`VWh0dG_ubTablewrap`,ubTag:`VWh0dG_ubTag`,ubTagAlert:`VWh0dG_ubTagAlert`,ubTagError:`VWh0dG_ubTagError`,ubTagNeutral:`VWh0dG_ubTagNeutral`,ubTagPromo:`VWh0dG_ubTagPromo`,ubTagSuccess:`VWh0dG_ubTagSuccess`,uncataloguedTag:`VWh0dG_uncataloguedTag`,unpricedHint:`VWh0dG_unpricedHint`,userPriceBody:`VWh0dG_userPriceBody`,userPriceCheck:`VWh0dG_userPriceCheck`,userPriceField:`VWh0dG_userPriceField`,userPriceInput:`VWh0dG_userPriceInput`,userPriceInputNum:`VWh0dG_userPriceInputNum`,userPriceLineMeta:`VWh0dG_userPriceLineMeta`,userPricePriceLine:`VWh0dG_userPricePriceLine`,userPriceRow:`VWh0dG_userPriceRow`,vendorLetter:`VWh0dG_vendorLetter`};let he=`usageBilling`,ge={title:`使用统计`,cost:`费用`,todayCost:`今日费用`,monthCost:`本月费用`,yearCost:`本年费用`,monthProjected:`本月预计`,liveTurn:`本轮`,liveSession:`会话`,calls:`调用`,cacheHitRate:`缓存命中率`,tokens:`Token`,inputTokens:`输入`,outputTokens:`输出`,avgCost:`平均成本`,kpiRange:`统计范围`,avgRangeToday:`今日`,avgRange7d:`近7天`,avgRangeWeek:`本周`,avgRangeMonth:`本月`,avgRangeAll:`累计`,trend:`每日费用与调用趋势`,trend7d:`7 天`,trend30d:`30 天`,trendMetric:`趋势指标`,trendMetricCost:`费用`,trendMetricTokens:`Token`,pricingSearch:`搜索模型 / 厂商`,bandPinHint:`点击固定到输入框`,trendEmpty:`暂无趋势数据`,trendTotal:`总计`,roundsUnit:`轮`,healthModelsLive:`{n} 模型可用`,healthVendorsDown:`{n} 厂商失效`,healthVendorsUnavailable:`{n} 厂商不可用`,budget:`本月预算`,budgetRemain:`剩余预算`,budgetAmount:`预算金额`,budgetSummary:`本月已用 {used} / {total};达到 80% 时提醒,达到 100% 时红色脉冲警示`,sessions:`会话明细`,sessionTitle:`标题`,lastActive:`最后活跃`,sessionOverflow:`仅显示花费前 {limit} 个,共 {total} 个会话`,budgetTierBody:`本月花费 {cost} 已达预算 {budget} 的 {pct}%`,models:`模型计费明细`,providerBilling:`提供商计费与订阅`,channelUnknown:`未知路由`,directTag:`直连`,relayTag:`中转`,unknownTag:`未知`,planCountUnit:`套餐`,actual:`实际`,pricing:`模型单价表`,input:`输入`,output:`输出`,cacheHit:`缓存命中`,peak:`高峰`,offPeak:`低谷`,flat:`全天统一`,band:`时段`,close:`关闭`,footer:`每 30s 自动轮询 · 仅统计本机 dsh 会话`,footerCredit:`dsh-ui-usage-billing {version} · MIT`,lastUpdated:`数据更新于`,noData:`暂无计费数据`,todayRate:`今日汇率`,rateLive:`实时`,rateBuiltin:`内置`,pricingSyncedAt:`上次同步`,pricingSyncNow:`立即同步`,pricingSyncing:`同步中…`,promoBadge:`促`,promoUntil:`促销价至 {date},之后自动恢复刊例价`,promoOpenEnded:`厂商未公布截止时间,当前按折扣计价;公告截止后自动恢复刊例价`,pricingTip:`DeepSeek 现行刊例:V4.1 Flash 谷档 未命中 ¥1 / 缓存命中 ¥0.02 / 输出 ¥4;V4 Pro 谷档 未命中 ¥4.5 / 缓存命中 ¥0.15 / 输出 ¥13.5;峰价均为谷价 × 2。工作日 9-12 / 14-18 为高峰价,其余时段(含周末全天)为低谷价;费用按调用时刻计。`,pricingUnit:`单位:人民币 / 每百万 Token`,pricingNotes:`计价说明`,ubPeak:`峰`,ubOff:`谷`,ubStd:`标准`,peakBand:`峰谷分带`,pricingSource:`数据来源`,noteCache:`命中部分按缓存价计费,显著降低成本。`,noteBand:`高峰与空闲时段单价不同,空闲约半价。`,noteSource:`价格来自实时汇率 + 模型定价目录,未收录模型按 0 计并提示。`,balance:`余额`,recharge:`充值`,rechargeHint:`打开该厂商官方平台的充值页`,balanceUnconfigured:`未配置`,balanceUnauthorized:`密钥无效`,balanceUnreachable:`查询失败`,uncatalogued:`未收录`,estimatedPricing:`估算价`,balanceDays:`约可撑 {days} 天`,balanceLowBody:`{name} 余额 {balance},约可撑 {days} 天,请及时充值`,reconcileDrift:`系统监控到{provider}官方余额变动 {spent},本面板记录 {today},差额通常由其它工具或 API 的消耗所致`,reconcileDismiss:`知道了`,subscriptionNotConfigured:`未配置密钥`,subscriptionUnauthorized:`密钥无效`,subscriptionUnavailable:`查询失败`,subscriptionInvalid:`响应异常`,subscriptionRateLimited:`触发限流`,subscriptionSession:`本次`,subscriptionWeekly:`本周`,subscriptionMonthly:`本月`,subscriptionBilling:`计费周期`,subscriptionRemaining:`剩余 {pct}%`,subscriptionExhausted:`已用尽`,subscriptionReset:`{date} 重置`,subscriptionNoApi:`该厂商暂未提供用量查询接口`,floatWindow:`模型用量悬浮窗`,floatModeCombined:`综合`,floatModeSubscription:`订阅卡`,floatMode:`展示模式`,floatTargets:`订阅目标`,floatWindowHint:`悬浮在左下角计费卡上的用量速览;综合=当前样式,订阅卡=每次展示一张订阅额度卡(可切换)。`,floatPrimaryToday:`今日`,floatPrimaryWeek:`本周`,floatPrimaryMonth:`本月`,cardDisplay:`计费卡显示`,cardDisplayHint:`切换左下角计费卡的主指标与主数字统计范围(迷你柱跟随视角,悬浮窗不受影响)。`,cardMetric:`主指标`,cardMetricMoney:`花费金额`,cardMetricTokens:`Token 消耗`,cardSpan:`统计范围`,cardSpanDay:`日`,cardSpanWeek:`周`,cardSpanMonth:`月`,floatNoTargets:`未指定订阅通道,请在设置中勾选要展示的订阅。`,floatNoTargetsHint:`暂无可选的订阅通道。`,subscriptionsStale:`订阅额度刷新失败,以下为缓存数据`,staleLedgerNotice:`{count} 个会话出自旧版算法存档(日志已删,无法重算),模型归属可能有误差`,tokenCacheWrite:`写入`,toolRank:`工具排行`,toolName:`工具`,userPrices:`自定义单价`,userPricesHint:`为未收录或变价模型填入实付单价,总览与日趋势按此重估;模型可用下拉候选(目录键或模型 id);来源留空=该模型默认价,填入中转站域名=仅该来源的同名模型用此价(协议可省);低谷价三栏填后按峰/谷混合估算,留空=平档`,userPriceSave:`保存`,userPriceModel:`模型`,userPriceSource:`来源(中转站域名)`,userPriceSourceHint:`留空=默认价,或 https://api.中转站.com`,userPriceOffPeak:`低谷价`,userPriceNormal:`标准价`,userPriceCurrency:`币种`,userPriceAdd:`新增`,userPriceRemoveSelected:`删除所选`,userPriceSelect:`选择此行`,sessionStaleBadge:`旧版统计`,sessionUntitled:`未命名会话`,heatmapLess:`少`,heatmapMore:`多`,currency:`币种`,currencyCny:`人民币`,currencyUsd:`美元`,currencyEur:`欧元`,language:`界面语言`,heatmap:`用量热力图`,rounds:`每轮费用`,roundsHint:`最近 {count} 轮 · 柱顶为金额 · 底色为峰谷时段`,anomaly:`成本突增`,model:`模型`,thModel:`模型名称`,thInputMiss:`输入缓存未命中`,thInputHit:`输入缓存命中`,costAbbr:`费用`,tabOverview:`概览`,tabTrends:`趋势`,tabProviders:`账单`,tabPricing:`费率`,tabSettings:`设置`,budgetHint:`设置月度上限,用于本月预计与超支分段提醒`,peakAlertHint:`在切档前弹窗提醒,可选同步系统通知`,peakAlertDescPeak:`即将进入高峰时段,价格将上调,请提前安排长任务`,peakAlertDescOff:`即将进入平价时段,价格减半,适合运行大批量任务`,peakAlertDescPeakZhipu:`即将进入高峰时段(工作日 14:00–18:00),Coding Plan 额度将按基础积分全额抵扣`,peakAlertDescOffZhipu:`即将进入非高峰时段,Coding Plan 额度按基础积分 5 折抵扣`,export:`导出`,exportCsvDay:`按日 CSV`,exportCsvSession:`按会话 CSV`,exportJson:`全量 JSON`,peakShare:`峰谷时段占比`,peakSharePerCall:`按调用时刻精确判档`,offPeakSavings:`挪谷可省约 {amount}`,perfMax:`最大 TTFT`,weekCost:`本周消耗金额`,roleCost:`费用构成`,roleUser:`用户输入`,roleAssistant:`助手输出`,roleTool:`工具结果`,roleHint:`估算:输出按实测计价,输入按消息长度摊分`,tierPeak:`峰时`,tierOff:`平价`,tierToPeak:`后转峰时`,tierToOff:`后转平价`,tierAlertEnterPeak:`{minutes} 分钟后进入峰时(DeepSeek 高峰价 ×2),不急的调用可稍等`,tierAlertEnterOff:`{minutes} 分钟后进入平价(价格减半)`,tierAlertEnterPeakZhipu:`{minutes} 分钟后进入智谱高峰时段,Coding Plan 额度将全额抵扣`,tierAlertEnterOffZhipu:`{minutes} 分钟后进入智谱非高峰时段,额度按基础积分 5 折抵扣`,peakAlertTitlePeak:`即将进入高峰价`,peakAlertTitleOff:`即将进入平价`,peakAlert:`峰谷切换提醒`,peakAlertLeadMin:`提前量(分钟)`,peakAlertPos:`位置`,peakAlertMode:`提醒模式`,peakAlertPosCorner:`右下角`,peakAlertPosCenter:`屏幕居中`,peakAlertModePeak:`仅进入峰时`,peakAlertModeOff:`仅进入平价`,peakAlertModeBoth:`峰与谷都提醒`,peakAlertWebNotify:`同时发系统通知`,peakAlertPreview:`预览提醒`,planTypeCode:`订阅制`,planTypeToken:`按量`,subscriptionFeePerMonth:`{amount}/月`,triggerToday:`今日消耗金额`,triggerMonth:`当月消耗金额`,triggerMonthTokens:`当月消耗 Token`,triggerTodayTokens:`今日消耗 Token`,triggerWeekTokens:`本周消耗 Token`,subscriptionTag:`订阅`,free:`免费`,perfSamples:`样本`,perfTtft:`首字延时`,perfP50:`P50`,perfP90:`P90`,perfTps:`生成速度`,perfLatency:`总延迟`,perfEstimated:`估算样本`,perfEmpty:`暂无性能数据`,perfTpsUnit:`tok/s`,perfTitle:`性能`,perfHint:`按模型与按小时聚合;估算样本为工具续写步骤`,perfAll:`全选`,perfChartEmpty:`未选择模型或该指标暂无数据`,heatmapYear:`年`,heatmapHalf:`半年`,heatmapMonth:`月`,metricCost:`费用`,metricTokens:`Token`,heatmapTotal:`合计`,activeDays:`活跃天数`,streakDays:`连续使用`,subscriptionAutoDetect:`自动识别`,pluginAuthor:`作者`,pluginRepository:`仓库`,pluginNpm:`npm`,pluginLicense:`许可证`,tabToken:`用量`,tokenExport:`导出 Token`,tokenExportCsv:`按日 Token CSV`,tokenReasoningShare:`思考占比`,tokenReasoningShort:`思考`,tokenIo:`输入/输出比`,tokenPeak:`峰值日`,tokenDaily:`每日 Token`,tokenByModel:`模型 Token`,tokenMiss:`输入(缓存未命中)`,tokenHit:`输入(缓存命中)`,tokenOutput:`输出`,tokenViewStructure:`按结构`,tokenViewModel:`按模型`,tokenHitShort:`命中`,tokenMissShort:`未命中`,tokenTotal:`总 Token`,tokenShare:`占比`,usageStatsTool:`注入用量查询工具`,usageStatsToolHint:`让模型可在对话中查询用量/费用;会占用模型每次请求的上下文,coding 场景建议关闭(改后需重载应用生效)`,balanceGranted:`赠金余额`,balanceTopped:`充值余额`,balanceDaily:`日均消耗`,balanceDaysLong:`约可撑`,balanceDaysUnit:`天`,popTodayModel:`主力消耗模型余额`,popTitle:`用量速览`,popNoConsumption:`暂无消耗`,popDirectLead:`直联`,popSubLead:`订阅`,unpricedHint:`{count} 个模型未收录计价,费用已按 0 计`,searchEstimateHint:`含 {count} 次联网搜索请求的估算费用(每次约 {each};日志无用量事件,按次估算,可在配置 searchCallEstimateCny 调整或关闭)`,siteListDisplay:`中转站列表`,siteListDisplayHint:`隐藏「未识别」占位条目,净化中转站额度列表`,liveCostBar:`平价消耗胶囊`,liveCostBarHint:`输入框旁的即时代费条,悬浮可看详情`,liveCostBarPosition:`位置`,liveCostBarPosBelow:`输入框下方`,liveCostBarPosAbove:`输入框上方`,liveCostBarPosToolbar:`输入框内部`,exportCsvSite:`按站点 CSV`,panelRelayQuota:`中转站额度`,relayBalance:`余额`,relayNoQuota:`未读出额度`,relayWindowUsed:`已用`,relayKindNewApi:`New API`,relayKindSub2Api:`Sub2API`,relayKindUnknown:`未识别`},_e={title:`Usage`,cost:`Cost`,todayCost:`Today`,monthCost:`This month`,yearCost:`This year`,monthProjected:`Projected`,liveTurn:`Turn`,liveSession:`Session`,calls:`Calls`,cacheHitRate:`Cache Hit`,tokens:`Tokens`,inputTokens:`Input`,outputTokens:`Output`,avgCost:`Avg cost`,kpiRange:`Range`,avgRangeToday:`Today`,avgRange7d:`7d`,avgRangeWeek:`Week`,avgRangeMonth:`Month`,avgRangeAll:`All`,trend:`Daily cost & calls`,trend7d:`7D`,trend30d:`30D`,trendMetric:`Trend metric`,trendMetricCost:`Cost`,trendMetricTokens:`Tokens`,pricingSearch:`Search model or vendor`,bandPinHint:`click to pin to the composer`,trendEmpty:`No trend data yet`,trendTotal:`Total`,roundsUnit:`turns`,healthModelsLive:`{n} models live`,healthVendorsDown:`{n} vendors down`,healthVendorsUnavailable:`{n} vendors unavailable`,budget:`Monthly budget`,budgetRemain:`Remaining`,budgetAmount:`Budget amount`,budgetSummary:`Used {used} / {total} this month; warn at 80%, pulse red at 100%`,sessions:`Sessions`,sessionTitle:`Title`,lastActive:`Last active`,sessionOverflow:`Top {limit} of {total} sessions by cost`,budgetTierBody:`This month {cost} reached {pct}% of the budget {budget}`,models:`Model billing`,providerBilling:`Provider billing & subscriptions`,channelUnknown:`Unknown routes`,directTag:`Direct`,relayTag:`Relay`,unknownTag:`Unknown`,planCountUnit:`plan(s)`,actual:`Actual`,pricing:`Model pricing`,input:`Input`,output:`Output`,cacheHit:`Cache hit`,peak:`Peak`,offPeak:`Off-peak`,flat:`Flat`,band:`Band`,close:`Close`,footer:`Polls every 30s · local dsh sessions only`,footerCredit:`dsh-ui-usage-billing {version} · MIT`,lastUpdated:`Updated`,noData:`No billing data yet`,todayRate:`Today rate`,rateLive:`Live`,rateBuiltin:`Built-in`,pricingSyncedAt:`Synced`,pricingSyncNow:`Sync now`,pricingSyncing:`Syncing…`,promoBadge:`Promo`,promoUntil:`Promo price until {date}, then list price resumes automatically`,promoOpenEnded:`End date not announced; billed at the discounted rate until further notice, then list price resumes`,pricingTip:`DeepSeek list rates: V4.1 Flash off-peak ¥1 miss / ¥0.02 cache-hit / ¥4 output; V4 Pro off-peak ¥4.5 miss / ¥0.15 cache-hit / ¥13.5 output; peak = 2× off-peak. Weekday 9-12 / 14-18 bills at peak, all other times (weekends included) at off-peak; billed at call time.`,pricingUnit:`Unit: CNY / per 1M tokens`,pricingNotes:`Pricing notes`,ubPeak:`Peak`,ubOff:`Off`,ubStd:`Std`,peakBand:`Peak/off-peak band`,pricingSource:`Data source`,noteCache:`Cache hits are billed at the cache rate, cutting cost.`,noteBand:`Peak and off-peak prices differ; off-peak is roughly half price.`,noteSource:`Prices come from the live rate + model catalog; unlisted models count as 0 and are flagged.`,balance:`Balance`,recharge:`Top up`,rechargeHint:`Open the vendor's official top-up page`,balanceUnconfigured:`Not set`,balanceUnauthorized:`Bad key`,balanceUnreachable:`Unavailable`,uncatalogued:`Not catalogued`,estimatedPricing:`Estimated`,balanceDays:`~{days} days left`,balanceLowBody:`{name} balance {balance}, ~{days} days left, please top up`,reconcileDrift:`Detected {provider} official balance moved {spent}, this panel recorded {today}; the gap usually comes from other tools or APIs consuming too`,reconcileDismiss:`Got it`,subscriptionNotConfigured:`Key not set`,subscriptionUnauthorized:`Bad key`,subscriptionUnavailable:`Unavailable`,subscriptionInvalid:`Bad response`,subscriptionRateLimited:`Rate limited`,subscriptionSession:`Current`,subscriptionWeekly:`Weekly`,subscriptionMonthly:`Monthly`,subscriptionBilling:`Billing`,subscriptionRemaining:`{pct}% left`,subscriptionExhausted:`Exhausted`,subscriptionReset:`Resets {date}`,subscriptionNoApi:`Provider does not offer a usage API`,floatWindow:`Model usage popover`,floatModeCombined:`Combined`,floatModeSubscription:`Subscription card`,floatMode:`Display mode`,floatTargets:`Targets`,floatWindowHint:`Usage summary floating on the footer card; Combined=current style, Subscription cards=one quota card at a time (switchable).`,floatPrimaryToday:`Today`,floatPrimaryWeek:`Week`,floatPrimaryMonth:`Month`,cardDisplay:`Billing card`,cardDisplayHint:`Switch the bottom-left billing card between cost and token usage, and pick the figure range (sparkline follows; the popover is unaffected).`,cardMetric:`Main metric`,cardMetricMoney:`Cost`,cardMetricTokens:`Token usage`,cardSpan:`Range`,cardSpanDay:`Day`,cardSpanWeek:`Week`,cardSpanMonth:`Month`,floatNoTargets:`No subscription selected — pick some in Settings.`,floatNoTargetsHint:`No subscription channel available.`,subscriptionsStale:`Subscription refresh failed — showing cached data`,staleLedgerNotice:`{count} sessions use legacy-algorithm archives (logs deleted); attribution may be off`,tokenCacheWrite:`written`,toolRank:`Tool calls`,toolName:`Tool`,userPrices:`Custom prices`,userPricesHint:`Enter actual per-1M-token prices; main views are re-costed. Pick a model key from the dropdown candidates. Leave source empty for the model default, or enter a relay origin (protocol optional) to price only that source. Fill all three off-peak fields for peak/off-peak estimation; leave them empty for flat pricing.`,userPriceSave:`Save`,userPriceModel:`Model`,userPriceSource:`Source (relay origin)`,userPriceSourceHint:`Empty = default; e.g. https://api.relay.com`,userPriceOffPeak:`Off-peak price`,userPriceNormal:`Standard price`,userPriceCurrency:`Currency`,userPriceAdd:`Add`,userPriceRemoveSelected:`Remove selected`,userPriceSelect:`Select this row`,sessionStaleBadge:`legacy`,sessionUntitled:`Untitled session`,heatmapLess:`Less`,heatmapMore:`More`,currency:`Currency`,currencyCny:`CNY`,currencyUsd:`USD`,currencyEur:`EUR`,language:`Interface language`,heatmap:`Usage heatmap`,rounds:`Cost per turn`,roundsHint:`Last {count} rounds · bar tops show amount · fill = peak/off-peak`,anomaly:`Cost spike`,model:`Model`,thModel:`Model name`,thInputMiss:`Input (cache miss)`,thInputHit:`Input (cache hit)`,costAbbr:`cost`,tabOverview:`Overview`,tabTrends:`Trends`,tabProviders:`Bills`,tabPricing:`Rates`,tabSettings:`Settings`,budgetHint:`Set a monthly cap for projections and tier alerts`,peakAlertHint:`Alert before a tier switch, optionally via system notification`,peakAlertDescPeak:`About to enter peak hours — prices rise, plan long tasks ahead`,peakAlertDescOff:`About to enter off-peak hours — price halves, ideal for large batches`,peakAlertDescPeakZhipu:`Peak hours soon (weekdays 14:00–18:00) — Coding Plan credits will be deducted at full rate`,peakAlertDescOffZhipu:`Off-peak soon — Coding Plan credits will be deducted at 50% of base credits`,export:`Export`,exportCsvDay:`Daily CSV`,exportCsvSession:`Sessions CSV`,exportJson:`Full JSON`,peakShare:`Peak vs off-peak`,peakSharePerCall:`per-call attribution, full history`,offPeakSavings:`Shift peak to off-peak: save ~{amount}`,perfMax:`Max TTFT`,weekCost:`This week's spend`,roleCost:`Cost breakdown`,roleUser:`User input`,roleAssistant:`Assistant output`,roleTool:`Tool results`,roleHint:`Estimated: output priced exactly, input split by message size`,tierPeak:`Peak`,tierOff:`Off-peak`,tierToPeak:`until peak`,tierToOff:`until off-peak`,tierAlertEnterPeak:`Peak pricing (2x) starts in {minutes} min — non-urgent calls can wait`,tierAlertEnterOff:`Off-peak pricing (50% off) starts in {minutes} min`,tierAlertEnterPeakZhipu:`Zhipu peak hours in {minutes} min — Coding Plan credits burn at full rate`,tierAlertEnterOffZhipu:`Zhipu off-peak in {minutes} min — credit burn drops to 50%`,peakAlertTitlePeak:`Peak pricing incoming`,peakAlertTitleOff:`Off-peak incoming`,peakAlert:`Peak/off-peak alert`,peakAlertLeadMin:`Lead time (min)`,peakAlertPos:`Position`,peakAlertMode:`Remind mode`,peakAlertPosCorner:`Bottom-right`,peakAlertPosCenter:`Center`,peakAlertModePeak:`Entering peak only`,peakAlertModeOff:`Entering off-peak only`,peakAlertModeBoth:`Both`,peakAlertWebNotify:`Also send system notification`,peakAlertPreview:`Preview alert`,planTypeCode:`Subscription`,planTypeToken:`Usage`,subscriptionFeePerMonth:`{amount}/mo`,triggerToday:`Today's spend`,triggerMonth:`This month's spend`,triggerMonthTokens:`This month's tokens`,triggerTodayTokens:`Today's tokens`,triggerWeekTokens:`This week's tokens`,subscriptionTag:`Plan`,free:`Free`,perfSamples:`Samples`,perfTtft:`TTFT`,perfP50:`P50`,perfP90:`P90`,perfTps:`Speed`,perfLatency:`Total latency`,perfEstimated:`Estimated`,perfEmpty:`No performance data yet`,perfTpsUnit:`tok/s`,perfTitle:`Performance`,perfHint:`Per model & per hour; estimated samples are tool-continuation steps`,perfAll:`All`,perfChartEmpty:`No model selected or no data for this metric`,heatmapYear:`Year`,heatmapHalf:`Half`,heatmapMonth:`Month`,metricCost:`Cost`,metricTokens:`Tokens`,heatmapTotal:`Total`,activeDays:`Active days`,streakDays:`Streak`,subscriptionAutoDetect:`Auto`,pluginAuthor:`Author`,pluginRepository:`Repository`,pluginNpm:`npm`,pluginLicense:`License`,tabToken:`Usage`,tokenExport:`Export tokens`,tokenExportCsv:`Daily token CSV`,tokenReasoningShare:`Reasoning share`,tokenReasoningShort:`reasoning`,tokenIo:`In/out ratio`,tokenPeak:`Peak day`,tokenDaily:`Daily tokens`,tokenByModel:`Tokens by model`,tokenMiss:`Input (cache miss)`,tokenHit:`Input (cache hit)`,tokenOutput:`Output`,tokenViewStructure:`Structure`,tokenViewModel:`By model`,tokenHitShort:`Hit`,tokenMissShort:`Miss`,tokenTotal:`Total tokens`,tokenShare:`Share`,usageStatsTool:`Inject usage-stats tool`,usageStatsToolHint:`Lets the model query usage/cost inside a conversation; it consumes context per request, so keep it off for coding (takes effect after a reload)`,balanceGranted:`Granted`,balanceTopped:`Topped up`,balanceDaily:`Daily burn`,balanceDaysLong:`~days left`,balanceDaysUnit:`days`,popTodayModel:`Main model balance`,popTitle:`Usage overview`,popNoConsumption:`No usage yet`,popDirectLead:`Direct`,popSubLead:`Subscription`,unpricedHint:`{count} models not priced; their cost counts as 0`,searchEstimateHint:`Includes estimated cost of {count} web-search requests (~{each} each; no usage events logged, per-call estimate; tune via searchCallEstimateCny)`,siteListDisplay:`Relay lists`,siteListDisplayHint:`Hide "unidentified" placeholder rows in the relay quota list`,liveCostBar:`Live cost capsule`,liveCostBarHint:`Live cost bar beside the composer; hover for details`,liveCostBarPosition:`Position`,liveCostBarPosBelow:`Below composer`,liveCostBarPosAbove:`Above composer`,liveCostBarPosToolbar:`Inside composer`,exportCsvSite:`By site CSV`,panelRelayQuota:`Relay quotas`,relayBalance:`Balance`,relayNoQuota:`No quota`,relayWindowUsed:`used`,relayKindNewApi:`New API`,relayKindSub2Api:`Sub2API`,relayKindUnknown:`Unknown`},ve={"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`}},ye={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 be(e){return e===``?e:ye[e]??e}function xe(e){let t=ve[be(e)];return t?.type===`code`?t.tier:void 0}let Se=[{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}],Ce,we,Te,Ee,De,L;function Oe(e){let t=/:\/\//.test(e)?e:`https://${e}`;try{return new URL(t).origin}catch{return e.trim().toLowerCase().replace(/\/+$/,``)}}function ke(e,t){return Oe(e)===Oe(t)}function Ae(e){L=e.length>0?e:void 0}function je(){return L}function R(e){return it(e)}function z(e,t){let n=Me(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 Me(e,t){if(L===void 0)return;let n=R(e),r=G(n),i=e=>R(e.key)===n||G(e.key)===r;if(t!==void 0){for(let e of L)if(!(e.origin===void 0||e.origin===``)&&i(e)&&ke(e.origin,t))return e}for(let e of L)if(!(e.origin!==void 0&&e.origin!==``)&&i(e))return e}function Ne(e){if(L===void 0)return;let t=R(e),n=G(t);return L.find(e=>e.origin!==void 0&&e.origin!==``&&(R(e.key)===t||G(e.key)===n))}function B(e){Ce=typeof e.rate==`number`&&Number.isFinite(e.rate)&&e.rate>0?e.rate:void 0,we=typeof e.rateEur==`number`&&Number.isFinite(e.rateEur)&&e.rateEur>0?e.rateEur:void 0,Te=e.prices,Ee=e.extraModels}function V(e){De=e}function H(){return Ce??6.79}function U(){return we??7.71}function Pe(){return{rate:H(),live:Ce!==void 0}}function Fe(){return{rate:U(),live:we!==void 0}}let Ie=.5;function Le(e){return e==null||!Number.isFinite(e)?`peak`:Re(e,Be)}function Re(e,t){if(ze(e))return`offPeak`;let n=Math.floor(He(e)/6e4);for(let e=0;e+1<t.length;e+=2){let r=t[e]??0,i=t[e+1]??0;if(n>=r&&n<i)return`peak`}return`offPeak`}function ze(e){let t=new Date(e+8*36e5).getUTCDay();return t===0||t===6}let Be=[540,720,840,1080],Ve=[840,1080];function He(e){return((e+8*36e5)%864e5+864e5)%864e5}function Ue(e,t){let n=Re(e,t),r=He(e);for(let i=0;i<7;i++){let a=i*864e5-r;for(let r of t){let i=a+r*6e4;if(!(i<=0)&&Re(e+i,t)!==n)return{tier:n,nextSwitchInMs:i}}}let i=t[0]??0;return{tier:n,nextSwitchInMs:864e5-r+i*6e4}}function W(e,t,n){let{nextSwitchInMs:r}=Ue(e,t);if(r>n)return null;let i=e+r;return{entering:Re(i,t),atMs:i}}function We(e,t){if(e===void 0||e===``)return`none`;let n=it(e),r=Ze().find(e=>e.key===n)?.provider;return r===`DeepSeek`?`deepseek-metered`:t&&r===`智谱 AI`?`zhipu-coding-plan`:`none`}function Ge(e,t){switch(t){case`deepseek-metered`:return Ue(e,Be);case`zhipu-coding-plan`:return Ue(e,Ve);case`none`:return null}}function Ke(e,t,n){switch(t){case`deepseek-metered`:return W(e,Be,n);case`zhipu-coding-plan`:return W(e,Ve,n);case`none`:return null}}function qe(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 Je=[],Ye={};function Xe(e,t){Je=e,Ye=t,et=void 0}function Ze(){return Je}function Qe(){return Ye}let $e={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 et;function tt(){if(et!==void 0)return et;let e=new Map,t=(t,n)=>{let r=G(t);r!==``&&!e.has(r)&&e.set(r,n)};for(let e of Je)t(e.key,e.key);for(let[e,n]of Object.entries(Ye))t(e,n);for(let e of Se)t(e.key,e.key);return et=e,e}function nt(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 rt(e){let t=Qe()[e];if(t!==void 0)return t;let n=G(e);if(n===``)return;let r=tt().get(n);return r===void 0?(Ee??[]).find(e=>G(e.key)===n)?.key:r}function it(e){let t=Qe()[e]??e;if(t===e){let t=G(e);if(t!==``){let e=tt().get(t);if(e!==void 0)return e;let n=(Ee??[]).find(e=>G(e.key)===t);if(n!==void 0)return n.key}for(let t of nt(e)){let e=rt(t);if(e!==void 0)return e}}return t}function at(e){let t=it(e),n=Te?.[t];if(n!==void 0)return n;let r=Se.find(e=>e.key.toLowerCase()===t.toLowerCase());if(r!==void 0)return{input:r.input,cacheHit:r.cacheHit,output:r.output}}function ot(e){let t=it(e),n=Ze().find(e=>e.key===t),r=Ee?.find(e=>e.key===t),i=n??(r===void 0?Ze().at(-1)??$e:st(r)),a=z(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=at(t);return o===void 0?i:{...i,price:{currency:`USD`,input:o.input,cacheHit:o.cacheHit,output:o.output}}}function st(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 ct(e,t){let n=e.endsAtMs!==void 0&&t>=e.endsAtMs;return Number.isFinite(t)&&!n&&e.factor>0&&e.factor<1}function lt(e,t){let{promo:n}=e;if(n===void 0||!ct(n,t))return e;let r=e=>n.factors?.[e]??n.factor,i=e=>({input:e.input*r(`input`),cacheHit:e.cacheHit*r(`cacheHit`),...e.cacheMiss===void 0?{}:{cacheMiss:e.cacheMiss*r(`cacheMiss`)},output:e.output*r(`output`)});return{...e,price:{...i(e.price),currency:e.price.currency,...e.price.offPeak===void 0?{}:{offPeak:i(e.price.offPeak)}}}}function ut(e=Date.now()){let t=[...Ze().filter(e=>e.retired!==!0).map(t=>lt(t,e))],n=new Set(t.map(e=>e.key.toLowerCase())),r=new Set(t.map(e=>G(e.key)));for(let e of De??[]){let i=e.id.toLowerCase();if((()=>{let t=it(e.id);return Ze().find(e=>e.key===t)})()!==void 0)continue;let a=G(e.id);if(n.has(i)||a!==``&&r.has(a))continue;let o=(Ee??[]).find(e=>G(e.key)===a),s;if(o!==void 0)s=st(o),e.name!==void 0&&e.name!==``&&(s={...s,name:e.name});else{let t=at(i);s=t===void 0?{key:it(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=z(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 dt(e){let t=getComputedStyle(document.documentElement).getPropertyValue(`--${e}`).trim();return t===``?`#8b95a3`:t}function ft(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*H():a}function pt(e,t,n=Ie,r=Date.now()){let i=lt(e,r),a=ft(i.price,t,i.price.currency),o=i.price.offPeak===void 0?a:ft(i.price.offPeak,t,i.price.currency);return a*n+o*(1-n)}function mt(e){let t=H();return t>0?e/t:e}function ht(e,t){if(t===`usd`)return mt(e);if(t===`eur`){let t=U();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 gt(e,t=`CNY`){return`${t===`USD`?`$`:t===`EUR`?`€`:`¥`}${e.toFixed(e>=10?1:2)}`}function _t(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=Fe().rate;return a>0?i/a:i}function q(e){return e>=1e9?`${(e/1e9).toFixed(2)}B`:e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(0)}K`:String(e)}function vt(e){let t=Number(e);return Number.isFinite(t)?`${t.toFixed(1)}%`:`0.0%`}let J={top:18,right:40,bottom:26,left:46};function yt(e){let[,t,n]=e.split(`-`);return`${Number(t)}/${Number(n)}`}function bt(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(Math.round(e))}function xt(e,t){let n=[];for(let r=0;r<e;r+=t)n.push(r);return e>0&&n[n.length-1]!==e-1&&n.push(e-1),n}let St={key:`__total__`,name:``,color:``};function Ct({data:e,models:t=[],currency:n=`cny`,metric:i=`cost`,t:a}){let s=a??(e=>ge[e]),[c,l]=(0,r.useState)(null),u=e=>K(ht(e,n),n),d=e=>i===`tokens`?bt(e):u(e),f=e=>i===`tokens`?e.tokens??0:e.cost,p=(0,r.useMemo)(()=>{let n=e.length;if(n===0)return null;let r=680-J.left-J.right,a=220-J.top-J.bottom,o=e=>n===1?J.left+r/2:J.left+r*e/(n-1),c=Math.max(...i===`tokens`?e.map(e=>e.tokens??0):e.map(e=>Math.max(e.cost,Object.values(e.byModel??{}).reduce((e,t)=>e+t,0))),1e-4),l=e=>J.top+a-e/c*a,u=Math.max(...e.map(e=>e.calls),1),d=e=>J.top+a-e/u*a,p=r/n,m=Math.min(18,p*.6);return{n,plotW:r,plotH:a,inner:o,yCost:l,yCalls:d,barW:m,bars:e.flatMap((e,n)=>{let r=o(n)-m/2;if(t.length===0||i===`tokens`)return[{date:e.date,model:{...St,name:s(`trendTotal`)},x:r,base:0,value:f(e),topRounded:!0}];let a=null;for(let n of t)(e.byModel?.[n.key]??0)>0&&(a=n.key);let c=0;return t.map(t=>{let n=e.byModel?.[t.key]??0,i={date:e.date,model:t,x:r,base:c,value:n,topRounded:t.key===a};return c+=n,i})}),costTicks:[0,.25,.5,.75,1].map(e=>c*e).reverse(),callsTicks:[0,.25,.5,.75,1].map(e=>u*e).reverse(),linePath:e.map((e,t)=>{let n=d(e.calls);return`${t===0?`M`:`L`}${o(t)} ${n}`}).join(` `)}},[e,t,i]);if(p===null)return(0,o.jsx)(`div`,{className:I.chartEmpty,children:s(`trendEmpty`)});let{n:m,plotW:h,plotH:g,inner:_,yCost:v,yCalls:y,barW:b,bars:x,costTicks:S,callsTicks:C,linePath:w}=p,T=c===null?void 0:e[c],E=xt(m,Math.max(1,Math.ceil(m/8)));return(0,o.jsxs)(`div`,{className:I.chartWrap,children:[(0,o.jsxs)(`svg`,{viewBox:`0 0 680 220`,className:I.chartSvg,role:`img`,"aria-label":`Daily cost by model and total calls`,onMouseLeave:()=>{l(null)},onMouseMove:e=>{let t=e.currentTarget.getBoundingClientRect(),n=((e.clientX-t.left)/t.width*680-J.left)/h,r=Math.round(n*(m-1));l(Math.min(Math.max(r,0),m-1))},children:[S.map((e,t)=>{let n=v(e);return(0,o.jsxs)(`g`,{children:[(0,o.jsx)(`line`,{x1:J.left,x2:680-J.right,y1:n,y2:n,className:I.chartGrid}),(0,o.jsx)(`text`,{x:J.left-8,y:n+3,textAnchor:`end`,className:I.chartAxisLabel,children:d(e)})]},`cost-${t}`)}),x.map(t=>{if(t.value>0)return(0,o.jsx)(`rect`,{x:t.x,y:v(t.base+t.value),width:b,height:v(t.base)-v(t.base+t.value),rx:t.topRounded?2:0,className:t.model.color===``?I.chartBar:I.chartStack,style:t.model.color===``?void 0:{fill:t.model.color}},`${t.date}-${t.model.key}`);let n=e.find(e=>e.date===t.date);return n!==void 0&&n.calls>0&&t.base===0?(0,o.jsx)(`rect`,{x:t.x,y:v(0)-1,width:b,height:1,rx:0,className:I.chartBarPlaceholder},`${t.date}-${t.model.key}-placeholder`):null}),(0,o.jsx)(`path`,{d:w,fill:`none`,className:I.chartLine}),C.map((e,t)=>{let n=y(e);return(0,o.jsx)(`text`,{x:680-J.right+8,y:n+3,textAnchor:`start`,className:I.chartAxisLabel,children:bt(e)},`calls-${t}`)}),E.map(t=>{let n=e[t];return n===void 0?null:(0,o.jsx)(`text`,{x:_(t),y:214,textAnchor:`middle`,className:I.chartAxisLabel,children:yt(n.date)},n.date)}),c!==null&&(0,o.jsx)(`line`,{x1:_(c),x2:_(c),y1:J.top,y2:J.top+g,className:I.chartCrosshair})]}),T!==void 0&&c!==null&&(0,o.jsxs)(`div`,{className:I.chartTooltip,style:{left:`${_(c)/680*100}%`,top:`${v(T.cost)/220*100}%`},children:[(0,o.jsx)(`div`,{className:I.chartTooltipDate,children:T.date}),i!==`tokens`&&t.filter(e=>(T.byModel?.[e.key]??0)>0).map(e=>(0,o.jsxs)(`div`,{className:I.chartTooltipRow,children:[(0,o.jsx)(`span`,{className:I.chartTooltipSwatch,style:{background:e.color}}),e.name,` `,(0,o.jsx)(`strong`,{children:u(T.byModel?.[e.key]??0)})]},e.key)),(0,o.jsxs)(`div`,{className:I.chartTooltipRow,children:[(0,o.jsx)(`span`,{className:I.chartLegendBar}),s(`trendTotal`),` `,(0,o.jsx)(`strong`,{children:i===`tokens`?bt(T.tokens??0):u(T.cost)})]}),(0,o.jsxs)(`div`,{className:I.chartTooltipRow,children:[(0,o.jsx)(`span`,{className:I.chartLegendLine}),s(`calls`),` `,(0,o.jsx)(`strong`,{children:T.calls.toLocaleString()})]})]}),t.length>0&&i!==`tokens`&&(0,o.jsxs)(`div`,{className:I.chartLegend,children:[t.map(e=>(0,o.jsxs)(`span`,{children:[(0,o.jsx)(`span`,{className:I.chartTooltipSwatch,style:{background:e.color}}),e.name]},e.key)),(0,o.jsxs)(`span`,{children:[(0,o.jsx)(`span`,{className:I.chartLegendLine}),s(`calls`)]})]})]})}let Y={top:14,right:42,bottom:22,left:46};function wt(e){return e.slice(5,13).replace(`T`,` `)}function Tt(e){return String(e>=100?Math.round(e):Number(e.toFixed(1)))}function Et(e){return e<1e4?`${Math.round(e)} ms`:e<6e4?`${(e/1e3).toFixed(1)} s`:`${(e/6e4).toFixed(1)} min`}function Dt(e){return e>=1e3?`${(e/1e3).toFixed(1)}k`:e.toFixed(1)}function Ot(e,t,n){return t===`ttft`?`${Math.round(e)} ms`:`${e.toFixed(1)} ${n(`perfTpsUnit`)}`}function kt({perf:e,models:t,t:n}){let[i,a]=(0,r.useState)(()=>fe()),[s,c]=(0,r.useState)(null),l=e=>{a(e),pe(e)},u=e=>t.find(t=>t.key===e)?.color??`#8b95a3`,f=(0,r.useMemo)(()=>e===void 0?[]:Object.entries(e.byModel).map(([e,n])=>({key:e,name:t.find(t=>t.key===e)?.name??e,color:u(e),samples:n.samples,ttftAvg:n.ttftAvg,ttftP50:n.ttftP50,ttftP90:n.ttftP90,...n.ttftMax===void 0?{}:{ttftMax:n.ttftMax},...n.ttftSpikes===void 0?{}:{ttftSpikes:n.ttftSpikes},...n.tpsAvg===void 0?{}:{tpsAvg:n.tpsAvg},latencyAvg:n.latencyAvg,estimatedSamples:n.estimatedSamples})).sort((e,t)=>t.samples-e.samples||t.ttftP90-e.ttftP90),[e,t]),p=(0,r.useMemo)(()=>{if(e===void 0)return[];if(i.models!==void 0){let t=new Set(Object.keys(e.byModel));return i.models.filter(e=>t.has(e))}return f.slice(0,5).map(e=>e.key)},[e,f,i.models]),m=(0,r.useMemo)(()=>{if(e===void 0)return null;let t=Object.keys(e.byHourModel).sort().slice(-48);if(t.length===0)return null;let n=t.length,r=680-Y.left-Y.right,a=180-Y.top-Y.bottom,o=e=>n===1?Y.left+r/2:Y.left+r*e/(n-1),s=new Set(p),c=e=>i.metric===`ttft`?e?.ttftAvg:e?.tpsAvg,l=[],u=0;for(let r of f){if(!s.has(r.key))continue;let i=[];for(let a=0;a<n;a++){let n=t[a];if(n===void 0)continue;let s=c(e.byHourModel[n]?.[r.key]);s===void 0||!Number.isFinite(s)||(i.push({i:a,x:o(a),y:0,v:s}),s>u&&(u=s))}l.push({key:r.key,name:r.name,color:r.color,segments:[],points:i})}let d=l.reduce((e,t)=>e+t.points.length,0);u=Math.max(u,1);let m=e=>Y.top+a-e/u*a;for(let e of l){let t=``,n=-2;for(let r of e.points)r.y=m(r.v),t!==``&&r.i!==n+1&&(e.segments.push(t),t=``),t+=`${t===``?`M`:`L`}${r.x} ${r.y} `,n=r.i;t!==``&&e.segments.push(t)}let h=Math.max(1,Math.ceil(n/8)),g=[];for(let e=0;e<n;e+=h)g.push(e);return g[g.length-1]!==n-1&&g.push(n-1),{hourKeys:t,n,plotW:r,plotH:a,inner:o,yOf:m,series:l,ticks:[0,.5,1].map(e=>u*e).reverse(),xTicks:g,totalPoints:d}},[e,f,p,i.metric]);if(e===void 0||f.length===0)return(0,o.jsx)(`div`,{className:I.chartEmpty,"data-testid":`billing-perf-empty`,children:n(`perfEmpty`)});let h=e=>{let t=p.includes(e)?p.filter(t=>t!==e):[...p,e];l({metric:i.metric,models:t})},g=e=>{l({metric:e,...i.models===void 0?{}:{models:i.models}})},_=s===null||m===null?[]:m.series.flatMap(e=>{let t=e.points.find(e=>e.i===s);return t===void 0?[]:[{key:e.key,name:e.name,color:e.color,v:t.v}]});return(0,o.jsxs)(`div`,{"data-testid":`billing-perf-panel`,children:[(0,o.jsx)(`div`,{className:I.tableScroll,"data-testid":`billing-perf-table`,children:(0,o.jsxs)(`table`,{className:I.modelTable,children:[(0,o.jsx)(`thead`,{children:(0,o.jsxs)(`tr`,{children:[(0,o.jsx)(`th`,{children:n(`model`)}),(0,o.jsx)(`th`,{className:I.numCol,children:n(`perfSamples`)}),(0,o.jsx)(`th`,{className:I.numCol,children:n(`perfTtft`)}),(0,o.jsx)(`th`,{className:I.numCol,children:n(`perfP50`)}),(0,o.jsx)(`th`,{className:I.numCol,children:n(`perfP90`)}),(0,o.jsx)(`th`,{className:I.numCol,children:n(`perfMax`)}),(0,o.jsx)(`th`,{className:I.numCol,children:n(`perfTps`)}),(0,o.jsx)(`th`,{className:I.numCol,children:n(`perfLatency`)}),(0,o.jsx)(`th`,{className:I.numCol,children:n(`perfEstimated`)})]})}),(0,o.jsx)(`tbody`,{children:f.map(e=>(0,o.jsxs)(`tr`,{children:[(0,o.jsx)(`td`,{children:(0,o.jsxs)(`span`,{className:I.modelCell,children:[(0,o.jsx)(`span`,{className:I.modelDot,style:{background:e.color}}),(0,o.jsx)(`span`,{className:I.modelName,children:e.name})]})}),(0,o.jsx)(`td`,{className:I.numCol,children:e.samples.toLocaleString()}),(0,o.jsx)(`td`,{className:I.numCol,children:Et(e.ttftAvg)}),(0,o.jsx)(`td`,{className:I.numCol,children:Et(e.ttftP50)}),(0,o.jsx)(`td`,{className:I.numCol,children:Et(e.ttftP90)}),(0,o.jsx)(`td`,{className:I.numCol,children:e.ttftMax===void 0?(0,o.jsx)(`span`,{className:I.na,children:`—`}):(0,o.jsxs)(`span`,{children:[Et(e.ttftMax),e.ttftSpikes!==void 0&&e.ttftSpikes>0?` (${e.ttftSpikes}↑)`:``]})}),(0,o.jsx)(`td`,{className:I.numCol,children:e.tpsAvg===void 0?(0,o.jsx)(`span`,{className:I.na,children:`—`}):Dt(e.tpsAvg)}),(0,o.jsx)(`td`,{className:I.numCol,children:Et(e.latencyAvg)}),(0,o.jsx)(`td`,{className:I.numCol,children:e.estimatedSamples>0?e.estimatedSamples:(0,o.jsx)(`span`,{className:I.na,children:`—`})})]},e.key))})]})}),m!==null&&(0,o.jsxs)(`div`,{"data-testid":`billing-perf-hour`,children:[(0,o.jsx)(`div`,{className:I.perfBar,children:(0,o.jsx)(`span`,{className:I.rangeToggle,role:`group`,"aria-label":n(`perfTitle`),children:[`ttft`,`tps`].map(e=>(0,o.jsx)(`button`,{type:`button`,className:d(I.rangeButton,i.metric===e&&I.rangeButtonActive),"aria-pressed":i.metric===e,"data-testid":`billing-perf-tab-${e}`,onClick:()=>{g(e)},children:e===`ttft`?`${n(`perfTtft`)} (ms)`:`${n(`perfTps`)} (${n(`perfTpsUnit`)})`},e))})}),(0,o.jsxs)(`div`,{className:I.perfChips,role:`group`,"aria-label":n(`model`),children:[(0,o.jsx)(`button`,{type:`button`,className:I.perfChip,"data-testid":`billing-perf-chip-all`,onClick:()=>{l({metric:i.metric,models:f.map(e=>e.key)})},children:n(`perfAll`)}),f.map(e=>{let t=p.includes(e.key);return(0,o.jsxs)(`button`,{type:`button`,className:d(I.perfChip,!t&&I.perfChipOff),style:t?{color:e.color,borderColor:`color-mix(in srgb, ${e.color} 45%, transparent)`}:void 0,"aria-pressed":t,"data-testid":`billing-perf-chip-${e.key}`,onClick:()=>{h(e.key)},children:[(0,o.jsx)(`span`,{className:I.perfChipDot,style:{background:t?e.color:`var(--dsw-alias-label-dimmed)`}}),e.name]},e.key)})]}),m.totalPoints>0?(0,o.jsxs)(`div`,{className:I.chartWrap,children:[(0,o.jsxs)(`svg`,{viewBox:`0 0 680 180`,className:I.chartSvg,role:`img`,"aria-label":`Hourly perf comparison by model`,onMouseLeave:()=>{c(null)},onMouseMove:e=>{let t=e.currentTarget.getBoundingClientRect(),n=((e.clientX-t.left)/t.width*680-Y.left)/m.plotW,r=Math.round(n*(m.n-1));c(Math.min(Math.max(r,0),m.n-1))},children:[m.ticks.map((e,t)=>{let n=m.yOf(e);return(0,o.jsxs)(`g`,{children:[(0,o.jsx)(`line`,{x1:Y.left,x2:680-Y.right,y1:n,y2:n,className:I.chartGrid}),(0,o.jsx)(`text`,{x:Y.left-8,y:n+3,textAnchor:`end`,className:I.chartAxisLabel,children:Tt(e)})]},`tick-${t}`)}),m.series.map(e=>e.segments.map((t,n)=>(0,o.jsx)(`path`,{d:t,fill:`none`,className:I.chartLine,style:{stroke:e.color}},`${e.key}-${n}`))),m.xTicks.map(e=>{let t=m.hourKeys[e];return t===void 0?null:(0,o.jsx)(`text`,{x:m.inner(e),y:174,textAnchor:`middle`,className:I.chartAxisLabel,children:wt(t)},t)}),s!==null&&(0,o.jsx)(`line`,{x1:m.inner(s),x2:m.inner(s),y1:Y.top,y2:Y.top+m.plotH,className:I.chartCrosshair}),s!==null&&m.series.map(e=>{let t=e.points.find(e=>e.i===s);return t===void 0?null:(0,o.jsx)(`circle`,{cx:t.x,cy:t.y,r:3.5,fill:e.color,className:I.chartHoverDot},`${e.key}-dot`)})]}),s!==null&&_.length>0&&(0,o.jsxs)(`div`,{className:I.chartTooltip,"data-testid":`billing-perf-tooltip`,style:{left:`${m.inner(s)/680*100}%`,top:`${(Y.top+m.plotH/2)/180*100}%`},children:[(0,o.jsx)(`div`,{className:I.chartTooltipDate,children:wt(m.hourKeys[s]??``)}),_.map(e=>(0,o.jsxs)(`div`,{className:I.chartTooltipRow,children:[(0,o.jsx)(`span`,{className:I.chartTooltipSwatch,style:{background:e.color}}),e.name,` `,(0,o.jsx)(`strong`,{children:Ot(e.v,i.metric,n)})]},e.key))]})]}):(0,o.jsx)(`div`,{className:I.chartEmpty,"data-testid":`billing-perf-chart-empty`,children:n(`perfChartEmpty`)})]}),m===null&&(0,o.jsx)(`div`,{className:I.chartEmpty,"data-testid":`billing-perf-chart-empty`,children:n(`perfChartEmpty`)})]})}let X=`@kenz1117/dsh-ui-usage-billing`,At=`kenz1117`;function jt({t:e,version:t}){return(0,o.jsxs)(`section`,{className:I.setCard,"data-testid":`billing-plugin-info`,children:[(0,o.jsxs)(`div`,{className:I.plgHead,children:[(0,o.jsx)(`span`,{className:I.plgIcon,"aria-hidden":`true`,children:(0,o.jsx)(`svg`,{width:`20`,height:`20`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,o.jsx)(`path`,{d:`M10 3a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a2 2 0 0 0 4 0V4a1 1 0 0 1 1-1h1a1 1 0 0 1 1 1v1a2 2 0 0 0 4 0 1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-1a2 2 0 0 0 0 4h1a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-1a2 2 0 0 0-4 0v1a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-2a2 2 0 0 0-4 0v1a1 1 0 0 1-1 1h-1a1 1 0 0 1-1-1v-1a2 2 0 0 0-4 0 1 1 0 0 1-1 1H3a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1h1a2 2 0 0 0 0-4H3a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1h1a2 2 0 0 0 4 0z`})})}),(0,o.jsxs)(`div`,{className:I.plgTitle,children:[(0,o.jsxs)(`div`,{className:I.plgNameRow,children:[(0,o.jsx)(`h3`,{className:I.plgName,children:X}),(0,o.jsx)(`span`,{className:I.plgTag,children:t===void 0?`—`:`v${t}`})]}),(0,o.jsx)(`p`,{className:I.plgDesc,children:`Usage billing dashboard for DeepSeek Harness`})]})]}),(0,o.jsxs)(`div`,{className:I.plgGrid,children:[(0,o.jsxs)(`div`,{className:I.plgItem,children:[(0,o.jsx)(`span`,{className:I.plgLabel,children:e(`pluginAuthor`)}),(0,o.jsxs)(`a`,{className:I.plgLink,href:`https://github.com/${At}`,target:`_blank`,rel:`noreferrer`,children:[`KenZ`,` (`,At,`)`]})]}),(0,o.jsxs)(`div`,{className:I.plgItem,children:[(0,o.jsx)(`span`,{className:I.plgLabel,children:e(`pluginRepository`)}),(0,o.jsx)(`a`,{className:I.plgLink,href:`https://github.com/kenz1117/dsh-ui-usage-billing`,target:`_blank`,rel:`noreferrer`,children:`GitHub`})]}),(0,o.jsxs)(`div`,{className:I.plgItem,children:[(0,o.jsx)(`span`,{className:I.plgLabel,children:e(`pluginNpm`)}),(0,o.jsx)(`a`,{className:I.plgLink,href:`https://www.npmjs.com/package/@kenz1117/dsh-ui-usage-billing`,target:`_blank`,rel:`noreferrer`,children:X})]}),(0,o.jsxs)(`div`,{className:I.plgItem,children:[(0,o.jsx)(`span`,{className:I.plgLabel,children:e(`pluginLicense`)}),(0,o.jsx)(`span`,{className:I.plgVal,children:`MIT`})]})]})]})}function Mt(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 Nt(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(Math.round(e))}let Z={top:14,right:18,bottom:22,left:46},Pt=`var(--ds-blue)`,Ft=`var(--ds-cyan)`,It=`var(--ds-amber)`;function Lt(e,t,n,r){return JSON.stringify({days:e,models:t,dayModels:n,total:r},null,2)}function Rt(e){let{stats:t,trendDays:n,onTrendDays:i,t:a}=e,s=e.money,c=e.models??[],{byDay:l,byModel:u,total:f}=t,[p,m]=(0,r.useState)(null),[h,g]=(0,r.useState)(`structure`),[_,v]=(0,r.useState)(null),y=t.byDayModels!==void 0,b=e=>{g(e),v(null)},x=(0,r.useMemo)(()=>{let e=t.byRole;if(e===void 0)return[];let n=e.user+e.assistant+e.tool;return n<=0?[]:[{label:a(`roleUser`),value:e.user,seg:I.shareSegUser},{label:a(`roleAssistant`),value:e.assistant,seg:I.shareSegAssistant},{label:a(`roleTool`),value:e.tool,seg:I.shareSegTool}].map(e=>({...e,pct:e.value/n*100}))},[t.byRole,a]),S=(0,r.useMemo)(()=>{let e=[];for(let t=n-1;t>=0;--t){let n=new Date;n.setDate(n.getDate()-t);let r=Mt(n.getTime()),i=l[r];e.push({date:r,miss:i?.cacheMiss??0,hit:i?.cacheHit??0,output:i?.output??0,reasoning:i?.reasoning??0})}return e},[l,n]),C=(0,r.useMemo)(()=>{let e=[];for(let r=n-1;r>=0;--r){let n=new Date;n.setDate(n.getDate()-r);let i=Mt(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,r.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:c.find(t=>t.key===e)?.name??ot(e).name,color:c.find(t=>t.key===e)?.color??`#8b95a3`}))},[C,c]),T=_!==null&&w.some(e=>e.key===_)?_:null,E=e=>{if(y){if(h!==`model`){g(`model`),v(e);return}v(t=>t===e?null:e)}},D=(0,r.useMemo)(()=>{let e=0;return Object.entries(u).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:ot(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}))},[u]),O=(0,r.useMemo)(()=>{let e=Object.entries(t.byTool??{}),n=e.slice(0,8),r=e.slice(8).reduce((e,[,t])=>e+t,0),i=e.reduce((e,[,t])=>e+t,0);return{top:n,rest:r>0?[[`…`,r]]:[],totalCalls:i}},[t.byTool]),k=(0,r.useMemo)(()=>{let e=S.length;if(e===0)return null;let t=680-Z.left-Z.right,n=200-Z.top-Z.bottom,r=Math.max(...h===`model`?C.map(e=>e.total):S.map(e=>e.miss+e.hit+e.output),1),i=e=>Z.top+n-e/r*n,a=t/e,o=Math.min(20,a*.6),s=n=>e===1?Z.left+t/2:Z.left+t*n/(e-1),c=Math.max(1,Math.ceil(e/8)),l=[];for(let t=0;t<e;t+=c)l.push(t);return e>0&&l[l.length-1]!==e-1&&l.push(e-1),{n:e,plotW:t,plotH:n,max:r,y:i,barW:o,inner:s,indices:l,groupW:a}},[S,C,h]),A=()=>{let e=new Blob([zt(S)],{type:`text/csv`}),t=document.createElement(`a`);t.href=URL.createObjectURL(e),t.download=`token-daily-${Mt()}.csv`,t.click(),setTimeout(()=>URL.revokeObjectURL(t.href),0)},ee=()=>{let e=new Blob([Lt(S,D,C,f)],{type:`application/json`}),t=document.createElement(`a`);t.href=URL.createObjectURL(e),t.download=`token-${Mt()}.json`,t.click(),setTimeout(()=>URL.revokeObjectURL(t.href),0)},j=p===null?void 0:S[p],M=p===null?void 0:C[p],te=k===null?0:Math.ceil(80/Math.max(k.groupW,1)),N=p===null||k===null?void 0:p>=k.n-te?I.chartTooltipAlignRight:p<te?I.chartTooltipAlignLeft:void 0;return(0,o.jsxs)(`div`,{className:I.tokenPanel,"data-testid":`billing-token-panel`,children:[(0,o.jsxs)(`div`,{className:I.exportBar,role:`group`,"aria-label":a(`tokenExport`),children:[(0,o.jsx)(`span`,{className:I.exportLabel,children:a(`export`)}),(0,o.jsx)(`button`,{type:`button`,className:I.exportButton,"data-testid":`billing-token-export-csv`,onClick:A,children:a(`tokenExportCsv`)}),(0,o.jsx)(`button`,{type:`button`,className:I.exportButton,"data-testid":`billing-token-export-json`,onClick:ee,children:a(`exportJson`)})]}),(0,o.jsxs)(`section`,{className:I.panel,"data-testid":`billing-token-daily`,children:[(0,o.jsxs)(`div`,{className:I.panelHead,children:[(0,o.jsx)(`h3`,{className:I.panelTitle,children:a(`tokenDaily`)}),(0,o.jsxs)(`span`,{className:I.panelHeadControls,children:[y&&(0,o.jsx)(`span`,{className:I.rangeToggle,role:`group`,"aria-label":a(`tokenDaily`),children:[`structure`,`model`].map(e=>(0,o.jsx)(`button`,{type:`button`,className:d(I.rangeButton,h===e&&I.rangeButtonActive),"aria-pressed":h===e,onClick:()=>{b(e)},"data-testid":`billing-token-view-${e}`,children:a(e===`structure`?`tokenViewStructure`:`tokenViewModel`)},e))}),(0,o.jsx)(`span`,{className:I.rangeToggle,role:`group`,"aria-label":a(`tokenDaily`),children:[7,30].map(e=>(0,o.jsx)(`button`,{type:`button`,className:d(I.rangeButton,n===e&&I.rangeButtonActive),"aria-pressed":n===e,onClick:()=>{i(e)},"data-testid":`billing-token-${e}d`,children:a(e===7?`trend7d`:`trend30d`)},e))})]})]}),k===null||h===`model`&&w.length===0?(0,o.jsx)(`div`,{className:I.chartEmpty,children:a(`trendEmpty`)}):(0,o.jsxs)(`div`,{className:I.chartWrap,children:[(0,o.jsxs)(`svg`,{viewBox:`0 0 680 200`,className:I.chartSvg,role:`img`,"aria-label":a(`tokenDaily`),onMouseLeave:()=>{m(null)},onMouseMove:e=>{let t=e.currentTarget.getBoundingClientRect(),n=((e.clientX-t.left)/t.width*680-Z.left)/k.plotW,r=Math.round(n*(k.n-1));m(Math.min(Math.max(r,0),k.n-1))},children:[[0,.5,1].map(e=>{let t=k.max*e,n=k.y(t);return(0,o.jsxs)(`g`,{children:[(0,o.jsx)(`line`,{x1:Z.left,x2:680-Z.right,y1:n,y2:n,className:I.chartGrid}),(0,o.jsx)(`text`,{x:Z.left-8,y:n+3,textAnchor:`end`,className:I.chartAxisLabel,children:Nt(t)})]},e)}),h===`structure`?S.map((e,t)=>{let n=k.inner(t)-k.barW/2,r=k.y(0),i=k.y(e.miss),a=k.y(e.miss+e.hit),s=k.y(e.miss+e.hit+e.output);return(0,o.jsxs)(`g`,{children:[(0,o.jsx)(`rect`,{x:n,y:i,width:k.barW,height:r-i,fill:Pt}),(0,o.jsx)(`rect`,{x:n,y:a,width:k.barW,height:i-a,fill:Ft}),(0,o.jsx)(`rect`,{x:n,y:s,width:k.barW,height:a-s,fill:It})]},e.date)}):C.map((e,t)=>{let n=k.inner(t)-k.barW/2,r=0;return(0,o.jsx)(`g`,{children:w.map(t=>{let i=e.models[t.key];if(i===void 0)return null;let a=k.y(r);r+=i.total;let s=k.y(r),c=T!==null&&t.key!==T;return(0,o.jsx)(`rect`,{x:n,y:s,width:k.barW,height:a-s,fill:t.color,opacity:c?.15:1},t.key)})},e.date)}),k.indices.map(e=>{let t=S[e];return t===void 0?null:(0,o.jsx)(`text`,{x:k.inner(e),y:194,textAnchor:`middle`,className:I.chartAxisLabel,children:t.date.slice(5)},t.date)}),p!==null&&(0,o.jsx)(`line`,{x1:k.inner(p),x2:k.inner(p),y1:Z.top,y2:Z.top+k.plotH,className:I.chartCrosshair})]}),p!==null&&h===`structure`&&j!==void 0&&(0,o.jsxs)(`div`,{className:d(I.chartTooltip,N),"data-testid":`billing-token-tooltip`,style:{left:`${k.inner(p)/680*100}%`,top:`${k.y(j.miss+j.hit+j.output)/200*100}%`},children:[(0,o.jsxs)(`div`,{className:I.chartTooltipHead,children:[(0,o.jsx)(`span`,{className:I.chartTooltipDate,children:j.date}),(0,o.jsx)(`strong`,{children:(j.miss+j.hit+j.output).toLocaleString()})]}),(0,o.jsxs)(`div`,{className:d(I.chartTooltipRow,I.chartTooltipSplit),children:[(0,o.jsxs)(`span`,{className:I.chartTooltipLabel,children:[(0,o.jsx)(`span`,{className:I.chartTooltipSwatch,style:{background:Ft}}),a(`tokenHit`)]}),(0,o.jsx)(`strong`,{children:j.hit.toLocaleString()})]}),(0,o.jsxs)(`div`,{className:d(I.chartTooltipRow,I.chartTooltipSplit),children:[(0,o.jsxs)(`span`,{className:I.chartTooltipLabel,children:[(0,o.jsx)(`span`,{className:I.chartTooltipSwatch,style:{background:Pt}}),a(`tokenMiss`)]}),(0,o.jsx)(`strong`,{children:j.miss.toLocaleString()})]}),(0,o.jsxs)(`div`,{className:d(I.chartTooltipRow,I.chartTooltipSplit),children:[(0,o.jsxs)(`span`,{className:I.chartTooltipLabel,children:[(0,o.jsx)(`span`,{className:I.chartTooltipSwatch,style:{background:It}}),a(`tokenOutput`)]}),(0,o.jsx)(`strong`,{children:j.output.toLocaleString()})]})]}),p!==null&&h===`model`&&M!==void 0&&(0,o.jsxs)(`div`,{className:d(I.chartTooltip,N),"data-testid":`billing-token-tooltip`,style:{left:`${k.inner(p)/680*100}%`,top:`${k.y(M.total)/200*100}%`},children:[(0,o.jsxs)(`div`,{className:I.chartTooltipHead,children:[(0,o.jsx)(`span`,{className:I.chartTooltipDate,children:M.date}),(0,o.jsx)(`strong`,{children:M.total.toLocaleString()})]}),w.map(e=>{let t=M.models[e.key];return t===void 0?null:(0,o.jsxs)(`div`,{className:I.chartTooltipModel,children:[(0,o.jsxs)(`div`,{className:d(I.chartTooltipRow,I.chartTooltipSplit),children:[(0,o.jsxs)(`span`,{className:I.chartTooltipLabel,children:[(0,o.jsx)(`span`,{className:I.chartTooltipSwatch,style:{background:e.color}}),e.name]}),(0,o.jsx)(`strong`,{children:t.total.toLocaleString()})]}),(0,o.jsxs)(`div`,{className:I.chartTooltipModelDetail,children:[a(`tokenHitShort`),` `,t.hit.toLocaleString(),` · `,a(`tokenMissShort`),` `,t.miss.toLocaleString(),` · `,a(`tokenOutput`),` `,t.output.toLocaleString()]})]},e.key)})]}),(0,o.jsx)(`div`,{className:I.chartLegend,children:h===`structure`?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(`span`,{children:[(0,o.jsx)(`span`,{className:I.chartTooltipSwatch,style:{background:Pt}}),a(`tokenMiss`)]}),(0,o.jsxs)(`span`,{children:[(0,o.jsx)(`span`,{className:I.chartTooltipSwatch,style:{background:Ft}}),a(`tokenHit`)]}),(0,o.jsxs)(`span`,{children:[(0,o.jsx)(`span`,{className:I.chartTooltipSwatch,style:{background:It}}),a(`tokenOutput`)]})]}):w.map(e=>(0,o.jsxs)(`button`,{type:`button`,className:d(I.chartLegendItem,T===e.key&&I.chartLegendItemActive),"aria-pressed":T===e.key,"data-testid":`billing-token-legend-${e.key}`,onClick:()=>{E(e.key)},children:[(0,o.jsx)(`span`,{className:I.chartTooltipSwatch,style:{background:e.color}}),e.name]},e.key))})]})]}),(0,o.jsxs)(`section`,{className:I.panel,"data-testid":`billing-token-models`,children:[(0,o.jsx)(`div`,{className:I.panelHead,children:(0,o.jsx)(`h3`,{className:I.panelTitle,children:a(`tokenByModel`)})}),D.length===0?(0,o.jsx)(`div`,{className:I.emptyRow,children:a(`noData`)}):(0,o.jsx)(`div`,{className:I.tableScroll,children:(0,o.jsxs)(`table`,{className:I.modelTable,"data-testid":`billing-token-model-table`,children:[(0,o.jsx)(`thead`,{children:(0,o.jsxs)(`tr`,{children:[(0,o.jsx)(`th`,{children:a(`model`)}),(0,o.jsx)(`th`,{className:I.numCol,children:a(`inputTokens`)}),(0,o.jsx)(`th`,{className:I.numCol,children:a(`outputTokens`)}),(0,o.jsx)(`th`,{className:I.numCol,children:a(`tokenReasoningShort`)}),(0,o.jsx)(`th`,{className:I.numCol,children:a(`cacheHitRate`)}),(0,o.jsx)(`th`,{className:I.numCol,children:a(`tokenTotal`)}),(0,o.jsx)(`th`,{className:I.numCol,children:a(`tokenShare`)}),(0,o.jsx)(`th`,{className:I.numCol,children:a(`calls`)})]})}),(0,o.jsx)(`tbody`,{children:D.map(e=>(0,o.jsxs)(`tr`,{"data-testid":`billing-token-model`,className:d(y&&I.modelRowFocusable,T===e.key&&I.modelRowActive),"aria-selected":y?T===e.key:void 0,onClick:y?()=>{E(e.key)}:void 0,children:[(0,o.jsx)(`td`,{children:(0,o.jsx)(`span`,{className:I.modelName,children:e.name})}),(0,o.jsx)(`td`,{className:I.numCol,children:q(e.input)}),(0,o.jsx)(`td`,{className:I.numCol,children:q(e.output)}),(0,o.jsx)(`td`,{className:I.numCol,children:e.reasoning>0?q(e.reasoning):(0,o.jsx)(`span`,{className:I.na,children:`—`})}),(0,o.jsxs)(`td`,{className:I.numCol,children:[e.cacheHitRate.toFixed(1),`%`]}),(0,o.jsx)(`td`,{className:I.numCol,children:q(e.total)}),(0,o.jsx)(`td`,{className:I.numCol,children:(0,o.jsxs)(`span`,{className:I.tokenModelShareRow,children:[(0,o.jsx)(`span`,{className:I.tokenModelBar,children:(0,o.jsxs)(`span`,{className:I.tokenModelParts,style:{width:`${(e.share*100).toFixed(2)}%`},children:[(0,o.jsx)(`span`,{className:I.tokenModelPartIn,style:{width:`${e.total>0?e.input/e.total*100:0}%`}}),(0,o.jsx)(`span`,{className:I.tokenModelPartOut,style:{width:`${e.total>0?e.output/e.total*100:0}%`}})]})}),(e.share*100).toFixed(1),`%`]})}),(0,o.jsx)(`td`,{className:I.numCol,children:e.calls.toLocaleString()})]},e.key))})]})})]}),O.totalCalls>0&&(0,o.jsxs)(`section`,{className:I.panel,"data-testid":`billing-token-tools`,children:[(0,o.jsx)(`div`,{className:I.panelHead,children:(0,o.jsx)(`h3`,{className:I.panelTitle,children:a(`toolRank`)})}),(0,o.jsx)(`div`,{className:I.tableScroll,children:(0,o.jsxs)(`table`,{className:I.modelTable,"data-testid":`billing-tool-table`,children:[(0,o.jsx)(`thead`,{children:(0,o.jsxs)(`tr`,{children:[(0,o.jsx)(`th`,{children:a(`toolName`)}),(0,o.jsx)(`th`,{className:I.numCol,children:a(`calls`)}),(0,o.jsx)(`th`,{className:I.numCol,children:a(`tokenShare`)})]})}),(0,o.jsx)(`tbody`,{children:[...O.top,...O.rest].map(([e,t])=>(0,o.jsxs)(`tr`,{"data-testid":`billing-tool-row`,children:[(0,o.jsx)(`td`,{children:(0,o.jsx)(`span`,{className:I.modelName,children:e})}),(0,o.jsx)(`td`,{className:I.numCol,children:t.toLocaleString()}),(0,o.jsxs)(`td`,{className:I.numCol,children:[(t/O.totalCalls*100).toFixed(1),`%`]})]},e))})]})})]}),x.length>0&&(0,o.jsxs)(`section`,{className:I.panel,"data-testid":`billing-panel-roles`,children:[(0,o.jsxs)(`div`,{className:I.panelHead,children:[(0,o.jsx)(`h3`,{className:I.panelTitle,children:a(`roleCost`)}),(0,o.jsx)(`span`,{className:I.panelHint,children:a(`roleHint`)})]}),(0,o.jsx)(`div`,{className:I.shareTrack,"data-testid":`billing-role-track`,children:x.map(e=>(0,o.jsx)(`div`,{className:d(I.shareSeg,e.seg),style:{width:`${e.pct}%`}},e.label))}),(0,o.jsx)(`div`,{className:I.shareLegend,children:x.map(e=>(0,o.jsxs)(`span`,{className:I.shareItem,children:[(0,o.jsx)(`span`,{className:d(I.shareDot,e.seg)}),e.label,(0,o.jsxs)(`span`,{className:I.shareValue,children:[s(e.value),` · `,e.pct.toFixed(1),`%`]})]},e.label))})]})]})}function zt(e){return[`date,missInput,cacheHit,output,reasoning,total`,...e.map(e=>`${e.date},${e.miss},${e.hit},${e.output},${e.reasoning},${e.miss+e.hit+e.output}`)].join(`
2
- `)}function Bt(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${n(t.getHours())}:${n(t.getMinutes())}`}function Vt(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}`}function Ht(e){let t=Math.round(e/1e3);return t<60?`${t}s`:`${Math.floor(t/60)}m${String(t%60).padStart(2,`0`)}s`}function Ut({rounds:e,flags:t,currency:n,t:i}){let a=(0,r.useMemo)(()=>e.slice(-40),[e]),s=(0,r.useMemo)(()=>new Set(t.map(e=>`${e.sessionId}:${e.turn}`)),[t]),c=(0,r.useMemo)(()=>Math.max(1e-4,...a.map(e=>e.cost)),[a]);if(a.length===0)return(0,o.jsxs)(`div`,{className:I.roundsEmpty,children:[i(`model`),` —`]});let l=e=>K(ht(e,n),n);return(0,o.jsxs)(`div`,{className:I.rounds,children:[(0,o.jsx)(`div`,{className:I.roundsBars,role:`img`,"aria-label":`cost per turn`,children:a.map(e=>{let t=s.has(`${e.sessionId}:${e.turn}`),n=Math.max(1,e.cost/c*100),r=Le(e.startedAt)===`peak`;return(0,o.jsxs)(`div`,{className:d(I.roundsBarCol,r?I.roundsBarColPeak:I.roundsBarColOff),children:[(0,o.jsx)(`span`,{className:I.roundsBarLabel,style:{bottom:`${n}%`},children:l(e.cost)}),(0,o.jsx)(`div`,{className:I.roundsBarWrap,children:(0,o.jsx)(`div`,{className:t?I.roundsBarFlagged:I.roundsBar,style:{height:`${n}%`},"data-testid":`round-bar`,title:`${i(`model`)} ${e.model} · ${l(e.cost)} · ${Vt(e.startedAt)}${e.endedAt===void 0?``:` → ${Bt(e.endedAt)} (${Ht(e.endedAt-e.startedAt)})`}`,children:t&&(0,o.jsx)(`span`,{className:I.roundsFlagMark,"aria-hidden":`true`})})})]},`${e.sessionId}:${e.turn}`)})}),(0,o.jsxs)(`div`,{className:I.roundsAxis,children:[(0,o.jsxs)(`span`,{children:[i(`costAbbr`),` `,l(c)]}),(0,o.jsxs)(`span`,{children:[a.length,` `,i(`roundsUnit`)]})]})]})}let Wt=[`color-mix(in srgb, var(--ds-blue) 10%, var(--dsb-3))`,`color-mix(in srgb, var(--ds-blue) 30%, var(--dsb-3))`,`color-mix(in srgb, var(--ds-blue) 60%, var(--dsb-3))`,`color-mix(in srgb, var(--ds-blue) 90%, var(--dsb-3))`,`var(--ds-blue)`],Gt=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`];function Kt(e){let t=e=>String(e).padStart(2,`0`);return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}`}function qt(e,t){let n=new Map;for(let t of e)n.set(t.date,t.value);let r=0;for(let e of n.values())e>r&&(r=e);let i=t.getFullYear(),a=t.getMonth(),o=t.getDate(),s=new Date(i,a+1,0).getDate(),c=new Date(i,a,1).getDay(),l=c+s,u=Math.ceil(l/7),d=[];for(let e=0;e<u;e+=1){let t=[];for(let l=0;l<7;l+=1){let u=e*7+l-c+1;if(u<1){let e=new Date(i,a,u);t.push({date:Kt(e),dayNum:e.getDate(),value:0,level:0,placeholder:!0});continue}if(u>s){let e=new Date(i,a+1,u-s);t.push({date:Kt(e),dayNum:e.getDate(),value:0,level:0,placeholder:!0});continue}let d=Kt(new Date(i,a,u)),f=n.get(d)??0,p=0;if(f>0&&r>0){let e=Math.ceil(f/r*4);p=Math.min(4,Math.max(1,e))}let m=u>o;t.push({date:d,dayNum:u,value:m?0:f,level:m?0:p,placeholder:m})}d.push(t)}return d}function Jt(e,t,n=52){let r=new Map;for(let t of e)r.set(t.date,t.value);let i=0;for(let e of r.values())e>i&&(i=e);let a=Kt(t),o=new Date(t);o.setHours(0,0,0,0),o.setDate(o.getDate()-o.getDay());let s=new Date(o);s.setDate(o.getDate()-(n-1)*7);let c=[];for(let e=0;e<n;e+=1){let t=[];for(let n=0;n<7;n+=1){let o=new Date(s);o.setDate(s.getDate()+e*7+n);let c=Kt(o),l=c>a,u=l?0:r.get(c)??0,d=0;if(!l&&u>0&&i>0){let e=Math.ceil(u/i*4);d=Math.min(4,Math.max(1,e))}t.push({date:c,dayNum:o.getDate(),value:u,level:d,placeholder:l})}c.push(t)}return c}function Yt({days:e,currency:t,now:n,t:i,range:a=`month`,unit:s=`cost`}){let[c,l]=(0,r.useState)(null),u=e=>K(ht(e,t),t),d=e=>s===`tokens`?q(e):u(e),f=(0,r.useMemo)(()=>qt(e,n??new Date),[e,n]);if(a!==`month`){let t=Jt(e,n??new Date,a===`half`?26:52),r=[],s=-1;return t.forEach((e,t)=>{let n=Number(e[0]?.date.slice(5,7)??0);n!==s&&(r.push({index:t,label:Gt[n-1]??``}),s=n)}),(0,o.jsxs)(`div`,{className:I.heatmapYear+(a===`half`?` `+I.heatmapHalf:``),"data-testid":a===`half`?`heatmap-half`:`heatmap-year`,children:[(0,o.jsxs)(`div`,{className:I.heatmapYearBody,children:[(0,o.jsx)(`div`,{className:I.heatmapYearWeekdays,"aria-hidden":`true`,children:[{label:`Mon`,row:1},{label:`Wed`,row:3},{label:`Fri`,row:5}].map(e=>(0,o.jsx)(`span`,{className:I.heatmapYearWeekday,style:{gridRow:e.row},children:e.label},e.label))}),(0,o.jsxs)(`div`,{className:I.heatmapYearScroll,children:[(0,o.jsx)(`div`,{className:I.heatmapYearMonths,"aria-hidden":`true`,"data-testid":`heatmap-year-months`,children:r.map(e=>(0,o.jsx)(`span`,{className:I.heatmapYearMonth,style:{gridColumn:e.index+1},children:e.label},e.index))}),(0,o.jsx)(`div`,{className:I.heatmapYearGrid,role:`img`,"aria-label":`yearly cost heatmap`,"data-testid":`heatmap-year-grid`,children:t.flat().map(e=>(0,o.jsx)(`button`,{type:`button`,className:I.heatmapYearCell,"data-testid":`heatmap-year-cell`,"data-level":e.level,style:{background:Wt[e.level]},title:`${e.date} · ${d(e.value)}`,"aria-label":`${e.date}: ${d(e.value)}`},e.date))})]})]}),(0,o.jsxs)(`div`,{className:I.heatmapFooter,children:[(0,o.jsx)(`span`,{className:I.heatmapLegendText,children:i(`heatmapLess`)}),(0,o.jsx)(`span`,{className:I.heatmapLegend,children:Wt.map((e,t)=>(0,o.jsx)(`i`,{style:{background:e}},t))}),(0,o.jsx)(`span`,{className:I.heatmapLegendText,children:i(`heatmapMore`)})]})]})}return(0,o.jsxs)(`div`,{className:I.heatmap,children:[(0,o.jsx)(`div`,{className:I.heatmapGrid,role:`img`,"aria-label":`daily cost heatmap`,children:f.map(e=>e.map(e=>e.placeholder?(0,o.jsx)(`div`,{className:I.heatmapCellEmpty,children:e.dayNum},e.date):(0,o.jsx)(`button`,{type:`button`,className:I.heatmapCell,"data-testid":`heatmap-cell`,"data-level":e.level,style:{background:Wt[e.level]},title:`${e.date} · ${d(e.value)}`,"aria-label":`${e.date}: ${d(e.value)}`,onMouseEnter:()=>{l(e)},onMouseLeave:()=>{l(null)},onFocus:()=>{l(e)},onBlur:()=>{l(null)},children:e.dayNum},e.date)))}),(0,o.jsxs)(`div`,{className:I.heatmapFooter,children:[(0,o.jsx)(`span`,{className:I.heatmapLegendText,children:i(`heatmapLess`)}),(0,o.jsx)(`span`,{className:I.heatmapLegend,children:Wt.map((e,t)=>(0,o.jsx)(`i`,{style:{background:e}},t))}),(0,o.jsx)(`span`,{className:I.heatmapLegendText,children:i(`heatmapMore`)}),c!==null&&(0,o.jsxs)(`span`,{className:I.heatmapHover,"data-testid":`heatmap-hover`,children:[c.date,` · `,d(c.value)]})]})]})}let Xt={window:6,threshold:2,reasonFactor:1.8,reasonHitDropPp:15};function Zt(e){if(e.length===0)return null;let t=0;for(let n of e)t+=n;return t/e.length}function Qt(e){let t=e.cacheHit+e.cacheMiss;return t<=0?null:e.cacheHit/t*100}function $t(e,t){let n=t?.window??Xt.window,r=t?.threshold??Xt.threshold,i=t?.reasonFactor??Xt.reasonFactor,a=t?.reasonHitDropPp??Xt.reasonHitDropPp,o=[];if(n<=0||r<=0)return o;let s=[],c=[],l=[],u=[];for(let t of e){if(t.cost<=0)continue;let e=t.output,d=t.input,f=Qt(t),p=Zt(s),m=[];if(p!==null&&p>0&&t.cost>p*r){let n=Zt(c),r=Zt(l),s=Zt(u);n!==null&&n>0&&e>n*i&&m.push(`output-growth`),r!==null&&r>0&&d>r*i&&m.push(`context-bloat`),s!==null&&f!==null&&f<s-a&&m.push(`cache-hit-drop`),o.push({sessionId:t.sessionId,turn:t.turn,cost:t.cost,reasons:m})}for(s.push(t.cost),c.push(e),l.push(d),f!==null&&u.push(f);s.length>n;)s.shift();for(;c.length>n;)c.shift();for(;l.length>n;)l.shift();for(;u.length>n;)u.shift()}return o}function en(e){return/[",\r\n]/.test(e)?`"${e.replace(/"/g,`""`)}"`:e}function tn(e){return/^[=+\-@\t\r]/.test(e)?`'${e}`:e}function nn(e){return e.toFixed(2)}function rn(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,nn(n.cost)].join(`,`)})].join(`
3
- `)}function an(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[en(tn(n)),r,t.calls,nn(t.cost)].join(`,`)})].join(`
4
- `)}function on(e){return e===void 0?``:e.split(/[\\/]/).filter(Boolean).pop()??e}function sn(e){return[`session_id,title,project,calls,cost_cny,last_active`,...e.map(e=>[en(tn(e.id)),en(tn(e.title??``)),en(tn(on(e.cwd))),e.calls,nn(e.cost),e.lastActive>0?new Date(e.lastActive).toISOString():``].join(`,`))].join(`
5
- `)}function cn(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 ln(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 un(e,t){return e==null?null:Number.isFinite(e.nextSwitchInMs)&&e.nextSwitchInMs<=t?`soon`:e.tier===`peak`?`peak`:`offPeak`}let dn={显式缓存创建:`Explicit cache write`,显式缓存命中:`Explicit cache hit`,长期半价:`Half price`,与标准价一致:`Same as standard`,"限时 5 折":`Limited-time 50% off`};function fn(e,t){return e===void 0||t!==`en`?e:dn[e]??e}function pn(e,t){let n=t.trim().toLowerCase();return n===``?e:e.filter(e=>e.key.toLowerCase().includes(n)||(e.name??``).toLowerCase().includes(n)||(e.provider??``).toLowerCase().includes(n))}let mn={"智谱 AI":`Zhipu AI`,阿里通义:`Alibaba Qwen`,字节豆包:`ByteDance Doubao`,月之暗面:`Moonshot AI`,小米:`Xiaomi`,百度文心:`Baidu ERNIE`,腾讯混元:`Tencent Hunyuan`,零一万物:`01.AI`,阶跃星辰:`StepFun`,科大讯飞:`iFlytek Spark`,商汤:`SenseNova`,百川智能:`Baichuan`,"小米 Token Plan(海外)":`Xiaomi Token Plan (Global)`,"小米 Token Plan(国内)":`Xiaomi Token Plan (CN)`,"小米 Token Plan(新加坡)":`Xiaomi Token Plan (SG)`,"火山引擎 Token Plan":`Volcengine Token Plan`,"火山方舟 Token Plan":`Volcengine Ark Token Plan`,"豆包 Token Plan":`Doubao Token Plan`,"百度文心 Plan":`Baidu ERNIE Plan`,"MiniMax Token Plan(国内)":`MiniMax Token Plan (CN)`};function hn(e,t){return t===`en`?mn[e]??e:e}let gn={"https://tokenhub.tencentmaas.com":`腾讯云 TokenHub`,"https://api.lkeap.cloud.tencent.com":`腾讯云 Token Plan`,"https://api.deepseek.com":`DeepSeek 官方`},_n={"腾讯云 TokenHub":`Tencent Cloud TokenHub`,"腾讯云 Token Plan":`Tencent Cloud Token Plan`,"DeepSeek 官方":`DeepSeek Official`};function vn(e){try{return new URL(e).host}catch{return e}}function yn(e,t=`zh`){if(e.startsWith(`site:`)){let n=e.slice(5),r=gn[n];return r===void 0?vn(n):t===`en`?_n[r]??r:r}if(e.startsWith(`direct:`)){let n=e.slice(7);return/^deepseek(?:-[a-z0-9-]+)?$/i.test(n)?t===`en`?`DeepSeek Official`:`DeepSeek 官方`:`${t===`en`?`Direct`:`直连`} · ${n}`}}let bn=[`直连 · `,`Direct · `];function xn(e){for(let t of bn)if(e.startsWith(t))return e.slice(t.length)}let Sn=`dsh-billing-peak-alert-v1`,Cn={enabled:!1,leadMin:2,position:`bottom-right`,webNotify:!0,mode:`both`};function wn(){try{let e=localStorage.getItem(Sn);if(e===null)return{...Cn};let t=JSON.parse(e),n=t.mode===`peak`||t.mode===`offPeak`?t.mode:Cn.mode,r=t.position===`center`?`center`:`bottom-right`;return{enabled:t.enabled===!0,leadMin:typeof t.leadMin==`number`&&Number.isFinite(t.leadMin)?Math.min(30,Math.max(1,Math.round(t.leadMin))):Cn.leadMin,position:r,webNotify:t.webNotify!==!1,mode:n}}catch{return{...Cn}}}function Tn(e){try{localStorage.setItem(Sn,JSON.stringify(e))}catch{}}function En(e,t,n,r){if(!t.enabled)return null;let i=Ke(e,r,t.leadMin*6e4);return i===null||t.mode===`peak`&&i.entering!==`peak`||t.mode===`offPeak`&&i.entering!==`offPeak`||i.atMs===n?null:{...i,channel:r}}function Dn({hit:e,config:t,t:n,onDismiss:i}){let[a,s]=(0,r.useState)(()=>Date.now());if((0,r.useEffect)(()=>{let e=setInterval(()=>s(Date.now()),1e3);return()=>clearInterval(e)},[]),(0,r.useEffect)(()=>{a>=e.atMs&&i()},[a,e.atMs,i]),a>=e.atMs)return null;let c=Math.max(1,Math.round((e.atMs-a)/6e4)),l=e.entering,u=n(l===`peak`?`tierPeak`:`tierOff`),f=n(e.channel===`zhipu-coding-plan`?l===`peak`?`peakAlertDescPeakZhipu`:`peakAlertDescOffZhipu`:l===`peak`?`peakAlertDescPeak`:`peakAlertDescOff`),p=l===`peak`;return(0,o.jsxs)(`div`,{className:d(I.peakCard,p?I.peakCardPeak:I.peakCardOff,t.position===`center`?I.peakCardCenter:I.peakCardCorner),"data-testid":`billing-peak-alert`,role:`alert`,children:[(0,o.jsxs)(`div`,{className:I.peakHead,children:[(0,o.jsxs)(`span`,{className:d(I.peakTag,p?I.peakTagPrimary:I.peakTagSuccess),children:[(0,o.jsx)(`span`,{className:d(I.peakDot,p?I.peakDotPrimary:I.peakDotSuccess),"aria-hidden":`true`}),u]}),(0,o.jsx)(`button`,{type:`button`,className:I.peakClose,onClick:i,"aria-label":n(`close`),children:`×`})]}),(0,o.jsxs)(`div`,{className:d(I.peakCount,p?I.peakCountPrimary:I.peakCountSuccess),children:[c,`min`]}),(0,o.jsx)(`p`,{className:I.peakDesc,children:f})]})}let On=[{id:`overview`,labelKey:`tabOverview`},{id:`providers`,labelKey:`tabProviders`},{id:`token`,labelKey:`tabToken`},{id:`trends`,labelKey:`tabTrends`},{id:`pricing`,labelKey:`tabPricing`},{id:`settings`,labelKey:`tabSettings`}],kn=[50,80,100],An={checked:!1,available:!1,models:0,failures:0,okProviders:[],badProviders:[]},jn={DeepSeek:[`deepseek`],"智谱 AI":[`zhipu`,`glm`,`z.ai`],阿里通义:[`qwen`,`tongyi`,`dashscope`,`aliyun`],字节豆包:[`doubao`,`volcengine`,`ark`],月之暗面:[`moonshot`,`kimi`],小米:[`xiaomi`,`mi`,`mimo`],MiniMax:[`minimax`],百度文心:[`ernie`,`wenxin`,`qianfan`,`baidu`],腾讯混元:[`hunyuan`,`tencent`],零一万物:[`01.ai`,`lingyi`,`yi`],阶跃星辰:[`step`,`stepfun`,`step-3.7`],科大讯飞:[`spark`,`xfyun`,`iflytek`],商汤:[`sensenova`,`sensetime`],百川智能:[`baichuan`],OpenAI:[`openai`],Google:[`google`,`gemini`],xAI:[`xai`,`grok`],Meta:[`meta`,`llama`],Anthropic:[`claude`,`anthropic`],"Mistral AI":[`mistral`,`ministral`,`devstral`],Cohere:[`cohere`,`command`],美团:[`longcat`,`meituan`],面壁智能:[`minicpm`,`modelbest`],小红书:[`dots`,`rednote`,`xiaohongshu`]};function Q(e){return e.trim().toLowerCase().replace(/[\s_/-]+/g,``)}function Mn(e,t){if(e.length===0||t.length===0)return!1;if(e===t)return!0;let[n,r]=e.length<=t.length?[e,t]:[t,e];return n.length>=3&&r.includes(n)}function Nn(e,t){let n=Q(e),r=Q(t);if(Mn(n,r))return!0;let i=jn[e];return i!==void 0&&i.some(e=>Mn(Q(e),r))}function Pn(e){let t=e.trim().toLowerCase(),n=t.replace(/[\s_/-]+/g,``);if(n.length!==0){for(let[e,n]of Object.entries(jn))for(let r of n){let n=Q(r);if(n.length!==0&&(t===n||t.startsWith(`${n}-`)||t.startsWith(`${n}/`)||t.startsWith(`${n}_`)||t.includes(`${n}-`)||t.includes(`${n}/`)||t.includes(`${n}_`)))return e}for(let[e,t]of Object.entries(jn))for(let r of t){let t=Q(r);if(!(t.length<4)&&n.includes(t))return e}}}let Fn={"kimi-coding":`月之暗面`,"zai-coding-cn":`智谱 AI`,"zai-coding":`智谱 AI`,"qwen-token-plan":`阿里通义`,"qwen-token-plan-cn":`阿里通义`,"xiaomi-token-plan-ams":`小米`,"xiaomi-token-plan-cn":`小米`,"xiaomi-token-plan-sgp":`小米`,"volcengine-token-plan":`字节豆包`,"ark-token-plan":`字节豆包`,"doubao-token-plan":`字节豆包`,ernie:`百度文心`,baidu:`百度文心`,wenxin:`百度文心`,minimax:`MiniMax`,"minimax-cn":`MiniMax`,"minimax-token-plan":`MiniMax`,"minimax-token-plan-cn":`MiniMax`,"hunyuan-token-plan":`腾讯混元`,"tencent-token-plan":`腾讯混元`,"hy-token-plan":`腾讯混元`,"xinghuo-token-plan":`讯飞星火`,"xfyun-coding":`讯飞星火`,"spark-coding":`讯飞星火`,"huawei-token-plan":`华为云`,"pangu-token-plan":`华为云`,"huawei-maas-token-plan":`华为云`,"volcengine-agent-plan":`字节豆包`,"ark-agent-plan":`字节豆包`,"baidu-token-plan":`百度文心`,"ernie-token-plan":`百度文心`,"wenxin-token-plan":`百度文心`,opencode:`OpenCode`,"opencode-go":`OpenCode`};function In(e){let t=Fn[e];return t===void 0?Pn(e)??e:t}let Ln=`https://platform.kimi.com/console/pay`,Rn=`https://open.bigmodel.cn/finance-center/finance/pay`,zn=`https://bailian.console.aliyun.com/`,Bn=`https://console.volcengine.com/ark`,Vn=`https://console.anthropic.com/settings/billing`,Hn=`https://console.cloud.google.com/billing`,Un=`https://console.x.ai/`,Wn=`https://platform.xiaomimimo.com/console/balance`,Gn=`https://console.cloud.tencent.com/expense/recharge`,Kn={deepseek:`https://platform.deepseek.com/top_up`,minimax:`https://platform.minimax.cn/console/recharge-records`,moonshot:Ln,kimi:Ln,zhipu:Rn,bigmodel:Rn,qwen:zn,dashscope:zn,doubao:Bn,volcengine:Bn,ark:Bn,openai:`https://platform.openai.com/settings/organization/billing`,anthropic:Vn,claude:Vn,google:Hn,gemini:Hn,xai:Un,grok:Un,siliconflow:`https://cloud.siliconflow.cn/account/charge`,hunyuan:Gn,tencent:Gn,腾讯云:Gn,xiaomi:Wn,mimo:Wn,mi:Wn,qianfan:`https://console.bce.baidu.com/qianfan/overview`};function qn(e){let t=Kn[e];if(t!==void 0)return t;let n=Object.keys(Kn).find(t=>e.startsWith(t));return n===void 0?void 0:Kn[n]}function Jn(e){let t=Q(e),n=qn(t);if(n!==void 0)return n;for(let[e,n]of Object.entries(jn))if(Mn(Q(e),t))for(let e of n){let t=qn(Q(e));if(t!==void 0)return t}}function Yn(e,t){let n=Object.keys(e).filter(e=>e<=t).sort().slice(-7);return n.length===0?0:n.reduce((t,n)=>t+(e[n]?.cost??0),0)/n.length}function Xn(e,t,n){let r=Object.keys(e).filter(e=>e.startsWith(t)),i=t.split(`-`),a=new Date(Number(i[0]),Number(i[1]),0).getDate(),o=r.length>0?r.reduce((t,n)=>t+(e[n]?.cost??0),0)/r.length:Yn(e,n);return o<=0?0:o*a}function Zn(e){let t=je();if(t===void 0||e.byDayModels===void 0)return e;let n=Pe().rate,r=e.byDayModelsSite!==void 0,i={},a={},o=new Map,s=0,c=e=>t.some(t=>t.origin!==void 0&&t.origin!==``&&(t.key===e||G(t.key)===G(e))),l=(e,t,r)=>{if(e===void 0)return r;let i=Math.min(t.cacheHit,t.cacheMiss+t.cacheHit),a=r=>{let a=(t.cacheMiss*r.input+i*r.cacheHit+t.output*r.output)/1e6;return e.currency===`USD`?a*n:a};return e.offPeak===void 0?a(e):a(e)*Ie+a(e.offPeak)*(1-Ie)};for(let[t,n]of Object.entries(e.byDayModels)){let u=0,d={};for(let[i,a]of Object.entries(n)){let n=z(i)??Ne(i),s=r&&c(i),f;if((n!==void 0||s)&&s&&e.byDayModelsSite?.[t]?.[i]!==void 0){let r=0;for(let[a,o]of Object.entries(e.byDayModelsSite[t][i])){let e=a.startsWith(`site:`)?a.slice(5):void 0,t=e===void 0?void 0:z(i,e);r+=l(t??n,o,o.cost)}f=r}else f=l(n,a,a.cost);u+=f,d[i]={...a,cost:f},o.set(i,(o.get(i)??0)+f)}let f=e.byDay[t];f!==void 0&&(i[t]={...f,cost:u}),a[t]=d,s+=u}return{...e,total:{...e.total,cost:s},byDay:i,byDayModels:a,byModel:Object.fromEntries(Object.entries(e.byModel).map(([e,t])=>{let n=o.get(e);return[e,n===void 0?t:{...t,cost:n}]})),unpricedModels:(e.unpricedModels??[]).filter(e=>!z(e)&&!Ne(e))}}function Qn(){return typeof Notification<`u`&&Notification.permission===`granted`}let $n=new Set;function er(e,t){$n.has(e)||($n.add(e),fetch(`/api/billing/notify-claim`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({key:e})}).then(e=>e.json()).then(e=>{e.claimed!==!1&&t()}).catch(()=>t()))}function tr(e){return Object.keys(e).length}function nr(e,t=Date.now()){let n=0,r=new Date(t);for(;$(r.getTime())in e;)n+=1,r.setDate(r.getDate()-1);return n}function rr(e){let t=[];for(let n=6;n>=0;--n){let r=new Date;r.setDate(r.getDate()-n);let i=$(r.getTime());t.push({date:i,cost:e[i]?.cost??0})}return t}function ir(e,t,n=e=>e.cost){let r=new Date(`${t}T00:00:00`),i=(r.getDay()+6)%7,a=0;for(let t=0;t<=i;t+=1){let i=new Date(r);i.setDate(i.getDate()-t);let o=e[$(i.getTime())];o!==void 0&&(a+=n(o))}return a}function ar(e,t,n){let r=new Date(`${t}T00:00:00`),i=(r.getDay()+6)%7,a=new Date(r);a.setDate(a.getDate()-i);let o=$(a.getTime()),s=new Date(r);s.setDate(s.getDate()-6);let c=$(s.getTime()),l=0,u=0,d=0,f=0,p=0,m=0,h=0,g,_=0;for(let[r,i]of Object.entries(e)){if(!(n===`today`?r===t:n===`7d`?r>=c&&r<=t:n===`week`?r>=o&&r<=t:r.startsWith(t.slice(0,7))))continue;l+=i.cost,u+=i.calls,d+=i.input,f+=i.output,p+=i.cacheHit,m+=i.cacheMiss,h+=i.reasoning??0;let e=i.cacheMiss+i.cacheHit+i.output;e>_&&(_=e,g=r)}return{cost:l,calls:u,input:d,output:f,cacheHit:p,cacheMiss:m,reasoning:h,peakDay:g,peakTokens:_}}function or(e,t){return e.checked?e.okProviders.some(e=>Nn(t,e))?I.healthOk:e.badProviders.some(e=>Nn(t,e))?I.healthBad:I.healthIdle:I.healthIdle}function sr(e){let t=new Map,n=[];for(let r of e){if(r.title===void 0||r.title===``){n.push(r);continue}let e=t.get(r.title);if(e===void 0){let e={...r,mergedCount:1};t.set(r.title,e),n.push(e);continue}e.children===void 0&&(e.children=[{...e}]),e.children.push({...r}),e.calls+=r.calls,e.cost+=r.cost,e.lastActive=Math.max(e.lastActive,r.lastActive),r.stale===!0&&(e.stale=!0),e.mergedCount=(e.mergedCount??1)+1}return n.sort((e,t)=>t.cost-e.cost||t.lastActive-e.lastActive)}function cr(e,t){switch(e){case`ok`:return``;case`not-configured`:return t(`subscriptionNotConfigured`);case`unauthorized`:return t(`subscriptionUnauthorized`);case`rate-limited`:return t(`subscriptionRateLimited`);case`invalid-response`:return t(`subscriptionInvalid`);default:return t(`subscriptionUnavailable`)}}function lr(e,t){switch(e){case`session`:return t(`subscriptionSession`);case`weekly`:return t(`subscriptionWeekly`);case`monthly`:return t(`subscriptionMonthly`);case`billing`:return t(`subscriptionBilling`)}}function ur(e,t){switch(e){case`new-api`:return t(`relayKindNewApi`);case`sub2api`:return t(`relayKindSub2Api`);default:return t(`relayKindUnknown`)}}let dr={"new-api":I.siteKindSite,sub2api:I.siteKindDirect,unknown:I.siteKindUnknown},fr=3e4;function $(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 pr(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}let mr=[`#4f8cff`,`#2dd4bf`,`#a78bfa`,`#f59e0b`,`#f472b6`,`#fbbf24`,`#38bdf8`,`#6366f1`,`#f97316`,`#14b8a6`],hr={total:{calls:0,input:0,output:0,cacheHit:0,cacheMiss:0,cost:0,reasoning:0},byModel:{},byDay:{},byDayModels:{}};async function gr(){try{let e=await fetch(`/api/billing/usage-stats`);if(!e.ok)return null;let t=await e.text(),n=JSON.parse(t);if(typeof n!=`object`||!n||!(`total`in n))return null;let r=n,i=e=>typeof e==`object`&&!!e;return{total:r.total??hr.total,byModel:r.byModel??{},byDay:r.byDay??{},...r.byDayModels===void 0?{}:{byDayModels:r.byDayModels},...i(r.byDayModelsSite)?{byDayModelsSite:r.byDayModelsSite}:{},...r.updatedAt===void 0?{}:{updatedAt:r.updatedAt},...typeof r.budget==`number`?{budget:r.budget}:{},...typeof r.lowBalanceThreshold==`number`?{lowBalanceThreshold:r.lowBalanceThreshold}:{},...Array.isArray(r.bySession)?{bySession:r.bySession}:{},...Array.isArray(r.byTurn)?{byTurn:r.byTurn}:{},...Array.isArray(r.byWorkspace)?{byWorkspace:r.byWorkspace}:{},...i(r.bySite)?{bySite:r.bySite}:{},...i(r.byTier)?{byTier:r.byTier}:{},...i(r.byTool)?{byTool:r.byTool}:{},...Array.isArray(r.unpricedModels)?{unpricedModels:r.unpricedModels}:{},...typeof r.staleLedgerSessions==`number`?{staleLedgerSessions:r.staleLedgerSessions}:{},...typeof r.searchCallEstimateCny==`number`?{searchCallEstimateCny:r.searchCallEstimateCny}:{},...r.byRole!==null&&typeof r.byRole==`object`?{byRole:r.byRole}:{},...r.perf!==null&&typeof r.perf==`object`&&r.perf.byModel!==null&&typeof r.perf.byModel==`object`&&r.perf.byHourModel!==null&&typeof r.perf.byHourModel==`object`?{perf:r.perf}:{},...typeof r.pluginVersion==`string`?{pluginVersion:r.pluginVersion}:{}}}catch{return null}}let _r=!1,vr=0;async function yr(e=0){try{let t=await fetch(`/api/billing/pricing`);if(!t.ok){_r=!1;return}let n=await t.text(),r=JSON.parse(n);if(typeof r!=`object`||!r||!(`source`in r)){_r=!1;return}let i=r;Array.isArray(i.catalog)&&i.catalog.length>0&&i.aliases!==null&&typeof i.aliases==`object`&&Xe(i.catalog,i.aliases);let a=r;if(a.source===`builtin`&&e<3){if(e===0){if(_r)return;_r=!0}setTimeout(()=>{yr(e+1)},2e3);return}_r=!1,vr=a.syncedAt??0,B(a)}catch{_r=!1}}async function br(){try{return(await fetch(`/api/billing/pricing/refresh`,{method:`POST`,headers:{"content-type":`application/json`},body:`{}`})).ok?(await yr(),!0):!1}catch{return!1}}async function xr(){try{let e=await fetch(`/api/billing/balance`);if(!e.ok)return{balances:[]};let t=await e.text(),n=JSON.parse(t);if(typeof n!=`object`||!n)return{balances:[]};let r=n;return{balances:Array.isArray(r.balances)?r.balances:[],...r.reconcile===void 0?{}:{reconcile:r.reconcile}}}catch{return{balances:[]}}}async function Sr(){let e=await fetch(`/api/billing/subscriptions`);if(!e.ok)throw Error(`subscriptions HTTP ${String(e.status)}`);let t=await e.text(),n=JSON.parse(t);if(typeof n==`object`&&n&&`quotas`in n)return n.quotas;throw Error(`subscriptions: invalid response`)}async function Cr(){let e=await fetch(`/api/billing/relay-quotas`);if(!e.ok)throw Error(`relay-quotas HTTP ${String(e.status)}`);let t=await e.text(),n=JSON.parse(t);if(typeof n==`object`&&n&&`quotas`in n)return n.quotas;throw Error(`relay-quotas: invalid response`)}async function wr(){try{let e=await fetch(`/api/billing/usage-tool`);if(!e.ok)return;let t=JSON.parse(await e.text());return typeof t.enabled==`boolean`?t.enabled:void 0}catch{return}}async function Tr(e){try{let t=await fetch(`/api/billing/usage-tool`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({enabled:e})});return t.ok?JSON.parse(await t.text()).ok===!0:!1}catch{return!1}}let Er=e=>e.models.reduce((e,t)=>e+(t.actual??(t.plan===!0?0:t.estimated)),0);function Dr(e){let t=t=>K(ht(t,e.currency),e.currency),{wide:n,t:a,onOpen:s,monthCost:c,todayCost:l,weekCost:u,days:f,vendorStatus:p,dash:m,floatPrefs:h,subscriptions:g,cardPrefs:_,monthTokens:v,todayTokens:y,weekTokens:b,budgetPressure:x}=e,S=(0,r.useMemo)(()=>h.targets.map(e=>g.find(t=>t.provider===e)).filter(e=>e!==void 0),[h.targets,g]),[C,w]=(0,r.useState)(0),T=S.length===0?0:Math.min(C,S.length-1),E=S[T];(0,r.useEffect)(()=>{if(h.mode!==`subscription`||S.length<2)return;let e=setInterval(()=>w(e=>(e+1)%S.length),1500);return()=>clearInterval(e)},[h.mode,S.length]);let D=(0,r.useRef)(null),[O,k]=(0,r.useState)(!1),[A,ee]=(0,r.useState)({left:0,top:0}),j=(0,r.useRef)(void 0),M=(0,r.useCallback)(()=>{window.clearTimeout(j.current),k(!0)},[]),te=(0,r.useCallback)(()=>{window.clearTimeout(j.current),j.current=window.setTimeout(()=>k(!1),120)},[]);(0,r.useEffect)(()=>()=>window.clearTimeout(j.current),[]);let N=(0,r.useCallback)(()=>{let e=D.current?.getBoundingClientRect();e!==void 0&&ee({left:e.left,top:e.top-8})},[]);(0,r.useEffect)(()=>{if(!O)return;let e=()=>N();return window.addEventListener(`scroll`,e,!0),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`scroll`,e,!0),window.removeEventListener(`resize`,e)}},[O,N]);let ne=f.length>0?f.reduce((e,t)=>e+t.cost,0)/f.length:0,re=ne>0?Math.max(0,Math.min(1,l/ne)):0,ie=-80+re*160,ae=(0,o.jsxs)(`svg`,{viewBox:`0 0 40 40`,fill:`none`,stroke:`currentColor`,strokeLinecap:`round`,"aria-hidden":`true`,children:[(0,o.jsx)(`path`,{d:`M5.23 26.4A15 15 0 0 1 34.77 26.4`,strokeWidth:3,opacity:.16}),(0,o.jsx)(`path`,{d:`M5.23 26.4A15 15 0 0 1 34.77 26.4`,strokeWidth:3,strokeDasharray:`${(41.9*re).toFixed(2)} 41.9`,className:I.triggerGaugeArc}),(0,o.jsx)(`path`,{d:`M5.23 26.4 8.18 26.92M10.36 17.51 12.29 19.81M20 14v3M27.71 19.81 29.64 17.51M31.82 26.92 34.77 26.4`,strokeWidth:1.6,opacity:.7}),(0,o.jsx)(`path`,{d:`M7.01 21.5 8.31 22.25M14.87 14.91 15.38 16.31M24.62 16.31 25.13 14.91M31.69 22.25 32.99 21.5`,strokeWidth:1.2,opacity:.38}),(0,o.jsx)(`line`,{x1:`20`,y1:`29`,x2:`20`,y2:`19.5`,strokeWidth:2,className:I.triggerGaugeNeedle,style:{transform:`rotate(${ie}deg)`,transformOrigin:`20px 29px`}}),(0,o.jsx)(`circle`,{cx:`20`,cy:`29`,r:`1.5`,fill:`currentColor`,stroke:`none`})]});if(!n)return(0,o.jsx)(`button`,{type:`button`,className:d(I.railButton,x!==`none`&&I.triggerBudgetPulse,x===`over`&&I.triggerBudgetOver),"data-testid":`billing-rail-button`,onClick:s,title:`${a(`title`)} · ${t(_.span===`day`?l:_.span===`week`?u:c)}`,children:ae});let oe=_.metric===`tokens`,P=f.map(e=>oe?e.tokens:e.cost),se=Math.max(...P,0),ce=P.map(e=>se>0?4+e/se*12:4);return(0,o.jsxs)(`span`,{ref:D,className:I.triggerWrap,onMouseEnter:()=>{N(),M()},onMouseLeave:te,onFocusCapture:()=>{N(),M()},onBlurCapture:()=>k(!1),children:[(0,o.jsxs)(`button`,{type:`button`,className:d(I.trigger,x!==`none`&&I.triggerBudgetPulse,x===`over`&&I.triggerBudgetOver),"data-testid":`billing-trigger`,onClick:s,title:`${a(`title`)} · ${t(_.span===`day`?l:_.span===`week`?u:c)}`,children:[(0,o.jsx)(`span`,{className:d(I.triggerIcon,x!==`none`&&I.triggerBudgetHot),"data-testid":`billing-trigger-icon`,children:ae}),(0,o.jsx)(`span`,{className:I.triggerMain,children:(0,o.jsxs)(`span`,{className:I.triggerPrimary,children:[(0,o.jsx)(`span`,{className:I.triggerLabel,children:oe?_.span===`day`?a(`triggerTodayTokens`):_.span===`week`?a(`triggerWeekTokens`):a(`triggerMonthTokens`):_.span===`day`?a(`triggerToday`):_.span===`week`?a(`weekCost`):a(`triggerMonth`)}),(()=>{let e=_.span===`day`?oe?y:l:_.span===`week`?oe?b:u:oe?v:c;return oe?(0,o.jsx)(`span`,{className:I.triggerMetric,"data-testid":`billing-trigger-span-tokens`,children:q(e)}):(0,o.jsxs)(`span`,{className:I.triggerValueRow,children:[(0,o.jsx)(`span`,{className:I.triggerYen,"aria-hidden":`true`,children:t(e).charAt(0)}),(0,o.jsx)(`span`,{className:I.triggerMetric,"data-testid":`billing-trigger-span-money`,children:t(e).slice(1)})]})})()]})}),(0,o.jsx)(`span`,{className:I.triggerSpark,"data-testid":`billing-trigger-spark`,"aria-hidden":`true`,children:ce.map((e,t)=>(0,o.jsx)(`span`,{className:t===ce.length-1?I.triggerSparkHot:I.triggerSparkBar,style:{height:`${e}px`}},f[t]?.date??String(t)))})]}),(0,i.createPortal)((0,o.jsx)(`span`,{className:d(I.triggerPop,O&&I.triggerPopShown),style:{left:`${A.left}px`,top:`${A.top}px`},"data-testid":`billing-trigger-pop`,"aria-hidden":!O,onMouseEnter:M,onMouseLeave:te,children:h.mode===`subscription`?(0,o.jsx)(o.Fragment,{children:S.length===0?(0,o.jsx)(`span`,{className:I.triggerPopEmpty,children:a(`floatNoTargets`)}):(0,o.jsxs)(o.Fragment,{children:[E!==void 0&&(0,o.jsxs)(`div`,{className:I.floatSub,"data-testid":`billing-float-subscription`,children:[(0,o.jsxs)(`div`,{className:I.floatSubHead,children:[(0,o.jsx)(`span`,{className:I.floatSubName,children:E.displayName}),E.plan!==void 0&&(0,o.jsx)(`span`,{className:I.floatSubPlan,children:E.plan})]}),E.windows.map(e=>(()=>{let t=Math.min(100,Math.max(0,e.usedPercent)),n=Math.min(100,Math.max(0,e.remainingPercent))<=0;return(0,o.jsxs)(`div`,{className:I.subscriptionWindow,children:[(0,o.jsx)(`span`,{className:I.subscriptionWindowLabel,children:lr(e.kind,a)}),(0,o.jsx)(`span`,{className:I.subscriptionTrack,"aria-hidden":`true`,children:(0,o.jsx)(`span`,{className:d(I.subscriptionFill,t>=100&&I.subscriptionFillOver,t>=80&&t<100&&I.subscriptionFillWarn),style:{width:`${t}%`}})}),(0,o.jsxs)(`span`,{className:I.subscriptionMeta,children:[(0,o.jsx)(`span`,{className:d(I.subscriptionPct,n&&I.subscriptionExhausted),children:n?a(`subscriptionExhausted`):a(`subscriptionRemaining`).replace(`{pct}`,String(e.remainingPercent))}),e.resetsAt!==void 0&&(0,o.jsx)(`span`,{className:I.subscriptionReset,children:a(`subscriptionReset`).replace(`{date}`,`${$(new Date(e.resetsAt).getTime())} ${pr(new Date(e.resetsAt).getTime())}`)})]})]},e.kind)})())]}),S.length>1&&(0,o.jsx)(`span`,{className:I.triggerPopSwitcher,"data-testid":`billing-float-switcher`,children:(0,o.jsxs)(`span`,{className:I.triggerPopSwitchCount,children:[T+1,`/`,S.length]})})]})}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(`span`,{className:I.popHead,children:(0,o.jsx)(`span`,{className:I.popTitle,children:a(`popTitle`)})}),(0,o.jsxs)(`span`,{className:I.metricGrid,children:[(0,o.jsxs)(`span`,{className:I.metricCell,children:[(0,o.jsx)(`span`,{className:I.metricLabel,children:a(`floatPrimaryToday`)}),(0,o.jsx)(`span`,{className:I.metricValue,children:t(l)})]}),(0,o.jsxs)(`span`,{className:I.metricCell,children:[(0,o.jsx)(`span`,{className:I.metricLabel,children:a(`floatPrimaryWeek`)}),(0,o.jsx)(`span`,{className:I.metricValue,children:t(u)})]}),(0,o.jsxs)(`span`,{className:I.metricCell,children:[(0,o.jsx)(`span`,{className:I.metricLabel,children:a(`floatPrimaryMonth`)}),(0,o.jsx)(`span`,{className:I.metricValue,children:t(c)})]}),(0,o.jsxs)(`span`,{className:I.metricCell,children:[(0,o.jsx)(`span`,{className:I.metricLabel,children:a(`input`)}),(0,o.jsx)(`span`,{className:I.metricValue,children:q(m.input)})]}),(0,o.jsxs)(`span`,{className:I.metricCell,children:[(0,o.jsx)(`span`,{className:I.metricLabel,children:a(`output`)}),(0,o.jsx)(`span`,{className:I.metricValue,children:q(m.output)})]}),(0,o.jsxs)(`span`,{className:I.metricCell,children:[(0,o.jsx)(`span`,{className:I.metricLabel,children:a(`cacheHit`)}),(0,o.jsx)(`span`,{className:d(I.metricValue,I.metricValueSuccess),children:vt(m.cacheRead+m.cacheMiss>0?m.cacheRead/(m.cacheRead+m.cacheMiss)*100:0)})]})]}),(0,o.jsxs)(`span`,{className:I.popModel,children:[(0,o.jsx)(`span`,{className:I.popModelLabel,children:a(`popTodayModel`)}),p.direct!==void 0||p.sub!==void 0?(0,o.jsxs)(o.Fragment,{children:[p.direct!==void 0&&(0,o.jsxs)(`span`,{className:I.popModelRow,children:[(0,o.jsx)(`span`,{className:d(I.popDot,I.popDotDirect),"aria-hidden":`true`}),(0,o.jsx)(`span`,{className:I.popTagPrimary,children:a(`popDirectLead`)}),(0,o.jsx)(`span`,{className:I.popModelName,children:p.direct.name}),(0,o.jsx)(`span`,{className:d(I.popModelStatus,p.direct.low&&I.popModelStatusLow),children:p.direct.text})]}),p.sub!==void 0&&(0,o.jsxs)(`span`,{className:I.popModelRow,children:[(0,o.jsx)(`span`,{className:d(I.popDot,I.popDotSub),"aria-hidden":`true`}),(0,o.jsx)(`span`,{className:I.popTagSub,children:a(`popSubLead`)}),(0,o.jsx)(`span`,{className:I.popModelName,children:p.sub.name}),(0,o.jsx)(`span`,{className:d(I.popModelStatus,p.sub.low&&I.popModelStatusLow),children:p.sub.text})]})]}):(0,o.jsxs)(`span`,{className:I.popModelRow,children:[(0,o.jsx)(`span`,{className:d(I.popDot,I.popDotNeutral),"aria-hidden":`true`}),(0,o.jsx)(`span`,{className:I.popModelStatus,children:a(`popNoConsumption`)})]})]})]})}),document.body)]})}function Or({balance:e,days:t,dailyBurn:n,money:r,t:i,onClose:a}){let s=t=>t===void 0?void 0:e.currency===`USD`?`$${t.toFixed(2)}`:r(t),c=s(e.totalBalance),l=s(e.grantedBalance),u=s(e.toppedUpBalance);return(0,o.jsxs)(`span`,{className:I.balanceDetailPop,"data-testid":`billing-balance-detail-pop`,children:[(0,o.jsxs)(`span`,{className:I.balanceDetailHead,children:[(0,o.jsx)(`span`,{className:I.balanceDetailTitle,children:e.displayName}),(0,o.jsx)(`button`,{type:`button`,className:I.balanceDetailClose,"aria-label":i(`close`),onClick:a,children:`×`})]}),(0,o.jsxs)(`span`,{className:I.balanceDetailGrid,children:[c!==void 0&&(0,o.jsx)(kr,{label:i(`balance`),value:c}),l!==void 0&&(0,o.jsx)(kr,{label:i(`balanceGranted`),value:l}),u!==void 0&&(0,o.jsx)(kr,{label:i(`balanceTopped`),value:u}),(0,o.jsx)(kr,{label:i(`balanceDaily`),value:r(n)}),(0,o.jsx)(kr,{label:i(`balanceDaysLong`),value:`${t} ${i(`balanceDaysUnit`)}`})]})]})}function kr({label:e,value:t}){return(0,o.jsxs)(`span`,{className:I.balanceDetailRow,children:[(0,o.jsx)(`span`,{className:I.balanceDetailLabel,children:e}),(0,o.jsx)(`span`,{className:I.balanceDetailValue,children:t})]})}function Ar({userPrices:e,onUserPrices:t,t:n}){let[i,a]=(0,r.useState)(()=>[...e]),[s,c]=(0,r.useState)(new Set),l=e=>c(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n}),u=()=>{a(e=>e.filter((e,t)=>!s.has(t))),c(new Set)},f=(e,t)=>a(n=>n.map((n,r)=>r===e?{...n,...t}:n)),p=()=>a(e=>[...e,{key:``,input:0,cacheHit:0,output:0}]),m=e=>{let t=i[e]?.offPeak;return{input:t===void 0?``:String(t.input),cacheHit:t===void 0?``:String(t.cacheHit),output:t===void 0?``:String(t.output)}},h=(e,t,n)=>a(r=>r.map((r,i)=>{if(i!==e)return r;let a={...m(e),[t]:n},o=[a.input,a.cacheHit,a.output].some(e=>e.trim()!==``),s=[a.input,a.cacheHit,a.output].map(e=>Number(e)),c=o&&s.every(e=>Number.isFinite(e)&&e>=0)&&s.some(e=>e>0),{offPeak:l,...u}=r;return c?{...u,offPeak:{input:s[0]??0,cacheHit:s[1]??0,output:s[2]??0}}:u})),g=()=>t(i.filter(e=>e.key.trim()!==``).map(e=>({...e,key:e.key.trim(),...e.origin===void 0||e.origin.trim()===``?{}:{origin:Oe(e.origin.trim())}}))),_=ut().map(e=>e.key),v=(e,t)=>a(n=>n.map((n,r)=>{if(r!==e)return n;let{currency:i,...a}=n;return t===`USD`?{...a,currency:`USD`}:a})),y=e=>Number.isFinite(e)&&e!==0?String(e):``,b=(e,t,n)=>{let r=Number(n);f(e,{[t]:Number.isFinite(r)&&r>=0?r:0})};return(0,o.jsxs)(`section`,{className:I.setCard,"data-testid":`billing-user-prices`,children:[(0,o.jsx)(`div`,{className:I.setCardHead,children:(0,o.jsxs)(`div`,{className:I.setCardMeta,children:[(0,o.jsx)(`h3`,{className:I.setCardTitle,children:n(`userPrices`)}),(0,o.jsx)(`p`,{className:I.setCardDesc,children:n(`userPricesHint`)})]})}),(0,o.jsxs)(`div`,{className:I.ctlCol,children:[(0,o.jsx)(`datalist`,{id:`billing-price-model-keys`,children:_.map(e=>(0,o.jsx)(`option`,{value:e},e))}),i.map((e,t)=>(0,o.jsxs)(`div`,{className:I.userPriceRow,"data-testid":`billing-user-price-row`,children:[(0,o.jsx)(`input`,{type:`checkbox`,className:I.userPriceCheck,"data-testid":`billing-user-price-select`,checked:s.has(t),"aria-label":n(`userPriceSelect`),onChange:()=>l(t)}),(0,o.jsxs)(`div`,{className:I.userPriceBody,children:[(0,o.jsxs)(`div`,{className:I.userPriceLineMeta,children:[(0,o.jsxs)(`div`,{className:I.userPriceField,children:[(0,o.jsx)(`span`,{className:I.ctlLabel,children:n(`userPriceModel`)}),(0,o.jsx)(`input`,{className:I.userPriceInput,"data-testid":`billing-user-price-model`,type:`text`,list:`billing-price-model-keys`,value:e.key,placeholder:`flash`,"aria-label":n(`userPriceModel`),onChange:e=>f(t,{key:e.target.value})})]}),(0,o.jsxs)(`div`,{className:I.userPriceField,children:[(0,o.jsx)(`span`,{className:I.ctlLabel,children:n(`userPriceSource`)}),(0,o.jsx)(`input`,{className:I.userPriceInput,"data-testid":`billing-user-price-origin`,type:`text`,value:e.origin??``,placeholder:n(`userPriceSourceHint`),"aria-label":n(`userPriceSource`),onChange:e=>f(t,{origin:e.target.value.trim()})})]}),(0,o.jsxs)(`div`,{className:I.userPriceField,children:[(0,o.jsx)(`span`,{className:I.ctlLabel,children:n(`userPriceCurrency`)}),(0,o.jsxs)(`div`,{className:I.ctlGroup,children:[(0,o.jsx)(`button`,{type:`button`,className:d(I.floatModeBtn,e.currency!==`USD`&&I.floatModeBtnOn),onClick:()=>v(t,`CNY`),children:`CNY`}),(0,o.jsx)(`button`,{type:`button`,className:d(I.floatModeBtn,e.currency===`USD`&&I.floatModeBtnOn),onClick:()=>v(t,`USD`),children:`USD`})]})]})]}),(0,o.jsxs)(`div`,{className:I.userPricePriceLine,"data-testid":`billing-user-price-normal`,children:[(0,o.jsx)(`span`,{className:I.ctlLabel,children:n(`userPriceNormal`)}),[`input`,`cacheHit`,`output`].map(r=>(0,o.jsx)(`input`,{className:I.userPriceInputNum,type:`number`,min:0,step:.01,placeholder:n(r===`input`?`tokenMiss`:r===`cacheHit`?`tokenHit`:`tokenOutput`),"aria-label":`${n(`userPriceNormal`)} ${n(r===`input`?`tokenMiss`:r===`cacheHit`?`tokenHit`:`tokenOutput`)}`,value:y(e[r]),onChange:e=>b(t,r,e.target.value)},r))]}),(()=>{let e=m(t);return(0,o.jsxs)(`div`,{className:I.userPricePriceLine,"data-testid":`billing-user-price-offpeak`,children:[(0,o.jsx)(`span`,{className:I.ctlLabel,children:n(`userPriceOffPeak`)}),[`input`,`cacheHit`,`output`].map(r=>(0,o.jsx)(`input`,{className:I.userPriceInputNum,type:`number`,min:0,step:.01,placeholder:n(r===`input`?`tokenMiss`:r===`cacheHit`?`tokenHit`:`tokenOutput`),"aria-label":`${n(`userPriceOffPeak`)} ${n(r===`input`?`tokenMiss`:r===`cacheHit`?`tokenHit`:`tokenOutput`)}`,value:e[r],onChange:e=>h(t,r,e.target.value)},r))]})})()]})]},t)),(0,o.jsxs)(`div`,{className:I.ctlRow,children:[(0,o.jsx)(`button`,{type:`button`,className:I.exportButton,"data-testid":`billing-user-price-add`,onClick:p,children:n(`userPriceAdd`)}),(0,o.jsxs)(`button`,{type:`button`,className:I.exportButton,"data-testid":`billing-user-price-remove-selected`,disabled:s.size===0,onClick:u,children:[n(`userPriceRemoveSelected`),s.size>0?` (${s.size})`:``]}),(0,o.jsx)(`button`,{type:`button`,className:I.exportButton,"data-testid":`billing-user-price-save`,onClick:g,children:n(`userPriceSave`)})]})]})]})}function jr({stats:e,t,onClose:n,userPrices:i,onUserPrices:s,health:c,balances:l,reconcile:u,quotas:f,relayQuotas:p,currency:m,onCurrency:h,language:g,onLanguage:_,turns:v,renderSlot:y,budgetEnabled:b,budgetAmount:C,onToggleBudget:w,onBudgetAmount:T,peakConfig:E,onPeakConfig:D,onPreviewPeak:O,floatPrefs:k,onFloatPrefs:A,cardPrefs:ee,onCardPrefs:j,sitePrefs:M,onSitePrefs:te,liveCostPrefs:N,onLiveCostPrefs:ne,quotasStale:ie}){let[ae,oe]=(0,r.useState)(`cost`),{total:P,byModel:ce,byDay:F}=e,[le,ue]=(0,r.useState)(`overview`),[de,fe]=(0,r.useState)(7),[pe,me]=(0,r.useState)(()=>{try{return window.localStorage.getItem(`dsh-billing:reconcile-dismissed`)??``}catch{return``}}),he=()=>{let e=new Date,t=e=>String(e).padStart(2,`0`);return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}`},ge=(0,r.useCallback)(()=>{let e=he();me(e);try{window.localStorage.setItem(`dsh-billing:reconcile-dismissed`,e)}catch{}},[]),[_e,ve]=(0,r.useState)(`month`),[ye,be]=(0,r.useState)(`cost`),[Se,Ce]=(0,r.useState)(x),we=(0,r.useMemo)(()=>f.filter(e=>e.status===`ok`&&e.windows.length>0).map(e=>({id:e.provider,label:e.displayName})),[f]),[Te,Ee]=(0,r.useState)(),[De,L]=(0,r.useState)(new Set),Oe=(0,r.useCallback)(e=>{L(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),[ke,Ae]=(0,r.useState)(!1);(0,r.useEffect)(()=>{let e=!0;return wr().then(t=>{e&&t!==void 0&&Ae(t)}),()=>{e=!1}},[]);let je=(0,r.useCallback)(()=>{let e=!ke;Ae(e),Tr(e).then(t=>{t||Ae(!e)})},[ke]),R=Pe(),[z,Me]=(0,r.useState)(!1),Ne=(0,r.useCallback)(()=>{z||(Me(!0),br().finally(()=>{Me(!1)}))},[z]),B=vr,V=e=>K(ht(e,m),m),H=m===`usd`?`$`:m===`eur`?`€`:`¥`,U=g,Fe=e=>hn(e,U),[Ie,Le]=(0,r.useState)(``),[Re,ze]=(0,r.useState)(()=>re()),[Be,Ve]=(0,r.useState)(()=>Date.now());(0,r.useEffect)(()=>{let e=setInterval(()=>{Ve(Date.now())},3e4);return()=>{clearInterval(e)}},[]);let He=f.some(e=>e.displayName===`Z.ai Coding Plan`&&e.status===`ok`),Ue=E.leadMin*6e4,W=(e,n)=>e===0?t(`free`):gt(_t(e,n,m,R.rate),m===`usd`?`USD`:m===`eur`?`EUR`:`CNY`),Ke=(0,r.useMemo)(()=>$t([...v].reverse()),[v]),qe={peak:e.byTier?.peak.cost??0,offPeak:e.byTier?.offPeak.cost??0},Je=qe.peak/2,Ye=Yn(F,$()),Xe=e=>l.find(t=>Q(t.provider)===Q(e)),Ze=e=>e.balance?.error===`unconfigured`&&e.models.length>0&&e.models.every(e=>e.plan),Qe=e=>{if(e===void 0)return(0,o.jsx)(`span`,{className:I.na,children:`—`});if(e.error===`unconfigured`)return t(`balanceUnconfigured`);if(e.error===`unauthorized`)return t(`balanceUnauthorized`);if(e.error===`unreachable`)return t(`balanceUnreachable`);if(e.totalBalance===void 0)return(0,o.jsx)(`span`,{className:I.na,children:`—`});let n=e.currency===`USD`?`$${e.totalBalance.toFixed(2)}`:V(e.totalBalance),r=e.currency===`USD`?e.totalBalance*R.rate:e.totalBalance,i=Ye>0?Math.floor(r/Ye):void 0;return(0,o.jsxs)(`span`,{className:I.balanceCell,children:[(0,o.jsx)(`span`,{children:n}),i!==void 0&&i>=0&&(0,o.jsx)(`button`,{type:`button`,className:d(I.balanceDaysBadge,i<=3&&I.balanceDaysBadgeLow),"data-testid":`billing-balance-days-badge`,title:t(`balanceDays`).replace(`{days}`,String(i)),"aria-label":`${e.displayName} ${t(`balanceDays`).replace(`{days}`,String(i))}`,onClick:()=>{Ee(Te===e.provider?void 0:e.provider)},children:`?`}),Te===e.provider&&(0,o.jsx)(Or,{balance:e,days:i??0,dailyBurn:Ye,money:V,t,onClose:()=>{Ee(void 0)}})]})},$e=Object.keys(F).sort(),G=$(),et=F[G]?.cost??0,tt=G.slice(0,7),nt=G.slice(0,4),rt=$e.reduce((e,t)=>e+(t.startsWith(tt)?F[t]?.cost??0:0),0),it=$e.reduce((e,t)=>e+(t.startsWith(nt)?F[t]?.cost??0:0),0),at=(0,r.useMemo)(()=>Xn(F,tt,G)+f.reduce((e,t)=>e+(t.planType===`code`?t.subscriptionAmount??0:0),0),[F,tt,G,f]),st=(0,r.useMemo)(()=>{if(!(b&&C>0))return null;let e=C-rt;return{over:e<=0,remainRatio:Math.max(0,Math.min(1,e/C)),remainCny:Math.max(0,e)}},[b,C,rt]),lt=(0,r.useMemo)(()=>{let e=[];for(let t=de-1;t>=0;--t){let n=new Date;n.setDate(n.getDate()-t),e.push($(n.getTime()))}return e},[de]),ft=lt.at(-1)??G,mt=(0,r.useMemo)(()=>Object.entries(F).map(([e,t])=>({date:e,value:ye===`tokens`?t.input+t.output+t.cacheHit+t.cacheMiss:t.cost})),[F,ye]),J=(0,r.useMemo)(()=>mt.reduce((e,t)=>e+t.value,0),[mt]),yt=tr(F),bt=nr(F),xt=(0,r.useMemo)(()=>lt.map(t=>{let n={},r=e.byDayModels?.[t];if(r!==void 0)for(let[e,t]of Object.entries(r))t.cost>0&&(n[e]=t.cost);let i=F[t];return{date:t,cost:i?.cost??0,calls:i?.calls??0,byModel:n,tokens:i===void 0?0:i.input+i.output+i.cacheHit+i.cacheMiss}}),[lt,F,e.byDayModels]),St=(0,r.useMemo)(()=>Object.entries(ce).filter(([,e])=>e.calls>0).map(([e,t])=>{let n=ot(e),r=n.key===`other`,i=r?Pn(e):void 0,a={input:t.input,cacheHit:t.cacheHit,cacheMiss:t.cacheMiss,output:t.output};return{key:e,name:r?e:n.name,provider:i??n.provider,calls:t.calls,input:t.input,output:t.output,cacheHitRate:t.cacheHit+t.cacheMiss>0?t.cacheHit/(t.cacheHit+t.cacheMiss)*100:0,estimated:pt(n,a),plan:t.plan===!0,...t.cost>0?{actual:t.cost}:{},uncatalogued:r,estimatedPricing:n.estimated===!0,officialCalls:t.officialCalls??0,officialCost:t.officialCost??0}}).sort((e,t)=>(t.actual??t.estimated)-(e.actual??e.estimated)).map((e,t)=>({...e,color:mr[t%mr.length]??`#8b95a3`})),[ce]),Y=(0,r.useMemo)(()=>M.hideUnidentified?p.filter(e=>e.kind!==`unknown`):p,[p,M.hideUnidentified]),wt=(0,r.useMemo)(()=>{let n=new Map;for(let t of Object.values(e.byDayModelsSite??{}))for(let[e,r]of Object.entries(t))for(let[t,i]of Object.entries(r)){let r=n.get(t);r===void 0&&(r=new Map,n.set(t,r));let a=r.get(e)??{calls:0,input:0,output:0,cacheHit:0,cacheMiss:0,cost:0};a.calls+=i.calls,a.input+=i.input,a.output+=i.output,a.cacheHit+=i.cacheHit,a.cacheMiss+=i.cacheMiss,a.cost+=i.cost,r.set(e,a)}let r=new Map;for(let[t,i]of n){let n=[...i.entries()].filter(([,e])=>e.calls>0).map(([t,n],r)=>{let i=ot(t),a=i.key===`other`,o=a?Pn(t)??i.provider:i.provider;return{key:t,name:a?t:i.name,provider:o,color:mr[r%mr.length]??`#8b95a3`,calls:n.calls,input:n.input,output:n.output,cacheHitRate:n.cacheHit+n.cacheMiss>0?n.cacheHit/(n.cacheHit+n.cacheMiss)*100:0,estimated:pt(i,{input:n.input,cacheHit:n.cacheHit,cacheMiss:n.cacheMiss,output:n.output}),plan:e.byModel?.[t]?.plan===!0,...n.cost>0?{actual:n.cost}:{},uncatalogued:a,estimatedPricing:i.estimated===!0,officialCalls:0,officialCost:0}}).sort((e,t)=>(t.actual??t.estimated)-(e.actual??e.estimated));n.length>0&&r.set(t,n)}let i=e=>yn(e,U)??t(`channelUnknown`),a=new Map,o=new Map,s=e=>e.startsWith(`direct:`)?`direct`:e.startsWith(`site:`)?`site`:`unknown`,u={direct:2,site:1,unknown:0,vendor:0};for(let[e,t]of r){let n=i(e),r=a.get(n);if(r===void 0)a.set(n,[...t]),o.set(n,s(e));else{r.push(...t),r.sort((e,t)=>(t.actual??t.estimated)-(e.actual??e.estimated));let i=o.get(n)??`unknown`,a=s(e);u[a]>u[i]&&o.set(n,a)}}let d=new Map,p=new Map;for(let e of f){if(e.status===`not-configured`)continue;let t=e.displayName??In(e.provider),n=i(`direct:${e.provider}`),r=a.has(t)?t:a.has(n)?n:void 0,o=r??`sub:${In(e.provider)}`;p.set(o,r??In(e.provider));let s=d.get(o);s===void 0?d.set(o,[e]):s.push(e)}let m=e=>e===i(`direct:deepseek`)||e===i(`site:https://api.deepseek.com`)?Xe(`deepseek`)??Xe(e):Xe(e),h=[];for(let[e,t]of a)h.push({name:e,models:t,subscriptions:d.get(e)??[],balance:m(e),dot:or(c,t[0]?.provider??``),channelKind:o.get(e)??`unknown`});for(let[e,t]of p)a.has(e)||h.push({name:t,models:[],subscriptions:d.get(e)??[],balance:Xe(t),dot:or(c,t),channelKind:`vendor`});let g=new Set(h.flatMap(e=>[Q(e.name),...e.balance===void 0?[]:[Q(e.balance.provider)]]));for(let e of l)g.has(Q(e.provider))||(e.error===void 0||e.provider.startsWith(`custom:`))&&h.push({name:e.displayName,models:[],subscriptions:[],balance:e,dot:or(c,e.displayName),channelKind:`vendor`});return h.sort((e,t)=>{let n=Er(t)-Er(e);return n===0?e.models.length===0&&t.models.length===0?0:t.models.length===0?-1:e.models.length===0?1:e.name.localeCompare(t.name,`zh`):n})},[e.byDayModelsSite,e.byModel,f,l,c,U,t]),Tt=(0,o.jsx)(`thead`,{children:(0,o.jsxs)(`tr`,{children:[(0,o.jsx)(`th`,{children:t(`model`)}),(0,o.jsx)(`th`,{className:I.numCol,children:t(`calls`)}),(0,o.jsx)(`th`,{className:I.numCol,children:t(`inputTokens`)}),(0,o.jsx)(`th`,{className:I.numCol,children:t(`outputTokens`)}),(0,o.jsx)(`th`,{className:I.numCol,children:t(`cacheHitRate`)}),(0,o.jsx)(`th`,{className:I.numCol,children:t(`actual`)})]})}),Et=e=>{let n=e.color??(e.colorVar===void 0?void 0:dt(e.colorVar));return(0,o.jsxs)(`span`,{className:I.modelCell,children:[(0,o.jsx)(Mr,{provider:e.provider,...n===void 0?{}:{colorVar:n}}),(0,o.jsxs)(`span`,{children:[(0,o.jsxs)(`span`,{className:I.modelName,children:[e.name,e.uncatalogued&&(0,o.jsx)(`span`,{className:I.uncataloguedTag,"data-testid":`billing-uncatalogued-tag`,children:t(`uncatalogued`)}),e.estimatedPricing&&(0,o.jsx)(`span`,{className:I.estimatedTag,"data-testid":`billing-estimated-tag`,children:t(`estimatedPricing`)})]}),(0,o.jsx)(`span`,{className:I.modelProvider,children:Fe(e.provider)})]})]})},Dt=St.reduce((e,t)=>e+t.estimated,0),Ot=P.cost>0?P.cost:Dt,X=(0,r.useMemo)(()=>{if(Se===`all`){let e,t=0;for(let[n,r]of Object.entries(F)){let i=r.cacheMiss+r.cacheHit+r.output;i>t&&(t=i,e=n)}return{cost:Ot,calls:P.calls,input:P.input,output:P.output,cacheHit:P.cacheHit,cacheMiss:P.cacheMiss,reasoning:P.reasoning??0,peakDay:e,peakTokens:t}}return ar(F,$(),Se)},[Se,Ot,P,F]),At=(0,r.useMemo)(()=>St.map(e=>({key:e.key,name:e.name,color:e.color})),[St]),Mt=xt.length>=2?xt.at(-2)?.cost??0:0,Z=Mt>0?(et-Mt)/Mt*100:0;return(0,o.jsx)(a.Modal,{open:!0,onClose:n,title:t(`title`),headless:!0,className:d(I.dashboardModal,`dsh-billing-modal`),children:(0,o.jsxs)(`div`,{className:I.dashboard,"data-testid":`billing-dashboard`,children:[(0,o.jsxs)(`div`,{className:I.dashboardHead,"data-testid":`billing-dashboard-head`,children:[(0,o.jsxs)(`div`,{children:[y(`billing.dashboard.decor`,{position:`head`}),(0,o.jsxs)(`div`,{className:I.headTitleRow,children:[(0,o.jsx)(`h2`,{className:I.dashboardTitle,children:t(`title`)}),y(`billing.dashboard.decor`,{position:`headTitle`})]}),(0,o.jsxs)(`p`,{className:I.dashboardSubtitle,children:[t(`lastUpdated`),` `,ft,e.timezone===void 0?null:` · ${e.timezone.name} (${e.timezone.offset})`]})]}),(0,o.jsxs)(`div`,{className:I.dashboardRight,children:[(0,o.jsx)(`span`,{className:I.currencyToggle,role:`group`,"aria-label":t(`language`),children:[`en`,`zh`].map(e=>(0,o.jsx)(`button`,{type:`button`,className:d(I.currencyButton,g===e&&I.currencyButtonActive),"aria-pressed":g===e,"data-testid":`billing-language-${e}`,onClick:()=>{_(e)},children:e===`en`?`EN`:`中`},e))}),(0,o.jsx)(`span`,{className:I.currencyToggle,role:`group`,"aria-label":t(`currency`),children:[`cny`,`usd`,`eur`].map(e=>(0,o.jsx)(`button`,{type:`button`,className:d(I.currencyButton,m===e&&I.currencyButtonActive),"aria-pressed":m===e,"data-testid":`billing-currency-${e}`,title:t(e===`cny`?`currencyCny`:e===`usd`?`currencyUsd`:`currencyEur`),onClick:()=>{h(e)},children:e===`cny`?`¥ CNY`:e===`usd`?`$ USD`:`€ EUR`},e))}),c.checked&&(0,o.jsxs)(`span`,{className:d(I.healthBadge,c.available?I.healthBadgeOk:I.healthBadgeBad),children:[(0,o.jsx)(`span`,{className:d(I.healthDot,c.available?I.healthOk:I.healthBad),"aria-hidden":`true`}),c.available?`${t(`healthModelsLive`).replace(`{n}`,String(c.models))}${c.failures>0?` · ${t(`healthVendorsDown`).replace(`{n}`,String(c.failures))}`:``}`:t(`healthVendorsUnavailable`).replace(`{n}`,String(c.failures))]}),(0,o.jsx)(`button`,{type:`button`,className:I.closeButton,"aria-label":t(`close`),"data-testid":`billing-close`,onClick:n,children:(0,o.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"aria-hidden":`true`,children:[(0,o.jsx)(`path`,{d:`M18 6 6 18`}),(0,o.jsx)(`path`,{d:`m6 6 12 12`})]})})]})]}),(0,o.jsx)(`nav`,{className:I.tabNav,"data-testid":`billing-tab-nav`,role:`tablist`,"aria-label":t(`title`),children:On.map(e=>(0,o.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":le===e.id,className:d(I.tabButton,le===e.id&&I.tabButtonActive),"data-testid":`billing-tab-${e.id}`,onClick:()=>{ue(e.id)},children:t(e.labelKey)},e.id))}),(0,o.jsxs)(`div`,{className:I.dashboardBody,children:[le===`overview`&&(0,o.jsxs)(`div`,{className:I.tabPanel,"data-testid":`billing-tab-panel-overview`,children:[u?.kind===`drift`&&u.spent!==void 0&&pe!==he()&&(0,o.jsxs)(`div`,{className:I.reconcileNotice,"data-testid":`billing-reconcile-notice`,role:`note`,children:[(0,o.jsx)(`span`,{className:I.reconcileIcon,"aria-hidden":`true`,children:(0,o.jsxs)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,o.jsx)(`circle`,{cx:`12`,cy:`12`,r:`9`}),(0,o.jsx)(`line`,{x1:`12`,y1:`10`,x2:`12`,y2:`16`}),(0,o.jsx)(`line`,{x1:`12`,y1:`7.5`,x2:`12.01`,y2:`7.5`})]})}),(0,o.jsx)(`span`,{className:I.reconcileText,children:t(`reconcileDrift`).replace(`{provider}`,u.provider??``).replace(`{spent}`,V(u.spent)).replace(`{today}`,V(u.todayOfficialCost??0))}),(0,o.jsx)(`button`,{type:`button`,className:I.reconcileDismiss,"data-testid":`billing-reconcile-dismiss`,onClick:ge,children:t(`reconcileDismiss`)})]}),(0,o.jsxs)(`section`,{className:I.hero,"data-testid":`billing-hero`,children:[y(`billing.dashboard.decor`,{position:`hero`}),(0,o.jsxs)(`div`,{className:I.heroTop,children:[(0,o.jsxs)(`div`,{className:I.heroMain,children:[(0,o.jsx)(`span`,{className:I.heroLabel,children:t(`monthCost`)}),(0,o.jsxs)(`div`,{className:I.heroReadout,children:[(0,o.jsx)(`span`,{className:I.heroCurrency,"aria-hidden":`true`,children:H}),(0,o.jsx)(`span`,{className:I.heroValue,children:V(rt).slice(1)})]}),(0,o.jsxs)(`span`,{className:I.heroMeta,children:[P.calls.toLocaleString(),` `,t(`calls`)]})]}),st!==null&&(0,o.jsxs)(`div`,{className:I.heroGauge,"data-testid":`billing-hero-gauge`,children:[(0,o.jsxs)(`div`,{className:I.heroGaugeDial,children:[(0,o.jsxs)(`svg`,{className:I.heroGaugeSvg,viewBox:`0 0 120 120`,"aria-hidden":`true`,children:[(0,o.jsx)(`circle`,{className:I.heroGaugeTrack,cx:`60`,cy:`60`,r:`52`}),(0,o.jsx)(`circle`,{className:d(I.heroGaugeArc,st.over&&I.heroGaugeArcOver),cx:`60`,cy:`60`,r:`52`,style:{strokeDasharray:`${st.remainRatio*326.7} 326.7`}})]}),(0,o.jsxs)(`span`,{className:I.heroGaugeCenter,children:[(0,o.jsxs)(`span`,{className:d(I.heroGaugeRemain,st.over&&I.heroGaugeRemainOver),children:[H,ht(st.remainCny,m).toFixed(2)]}),(0,o.jsx)(`span`,{className:I.heroGaugeLabel,children:t(`budgetRemain`)})]})]}),(0,o.jsxs)(`span`,{className:I.heroGaugeSub,children:[V(rt),` / `,V(C)]})]})]}),(0,o.jsxs)(`div`,{className:I.heroSide,children:[(0,o.jsxs)(`div`,{className:I.heroSideItem,children:[(0,o.jsx)(`span`,{className:I.heroSideLabel,children:t(`yearCost`)}),(0,o.jsx)(`span`,{className:I.heroSideValue,children:V(it)})]}),(0,o.jsxs)(`div`,{className:I.heroSideItem,children:[(0,o.jsx)(`span`,{className:I.heroSideLabel,children:t(`todayCost`)}),(0,o.jsxs)(`span`,{className:I.heroSideValue,children:[V(et),(0,o.jsxs)(`span`,{className:d(I.delta,Z>=0?I.deltaUp:I.deltaDown),children:[Z>=0?`▲`:`▼`,` `,Math.abs(Z).toFixed(1),`%`]})]})]}),at>0&&(0,o.jsxs)(`div`,{className:I.heroSideItem,children:[(0,o.jsx)(`span`,{className:I.heroSideLabel,children:t(`monthProjected`)}),(0,o.jsx)(`span`,{className:I.heroSideValue,children:V(at)})]}),at<=0&&(0,o.jsx)(`span`,{className:I.heroSideSpacer,"aria-hidden":`true`})]})]}),(e.unpricedModels?.length??0)>0&&(0,o.jsx)(`div`,{className:I.unpricedHint,"data-testid":`billing-unpriced-hint`,children:t(`unpricedHint`).replace(`{count}`,String(e.unpricedModels?.length??0))}),(e.total.searchCalls??0)>0&&(0,o.jsx)(`div`,{className:I.unpricedHint,"data-testid":`billing-search-estimate-hint`,children:t(`searchEstimateHint`).replace(`{count}`,String(e.total.searchCalls??0)).replace(`{each}`,V(e.searchCallEstimateCny??0))}),(0,o.jsxs)(`div`,{className:I.kpiZone,children:[(0,o.jsxs)(`div`,{className:I.kpiZoneHead,children:[(0,o.jsx)(`span`,{className:I.kpiZoneLabel,children:t(`kpiRange`)}),(0,o.jsx)(`div`,{className:I.heatmapRangeSwitch,"data-testid":`billing-kpi-range`,role:`group`,"aria-label":t(`kpiRange`),children:[[`today`,`avgRangeToday`],[`7d`,`avgRange7d`],[`week`,`avgRangeWeek`],[`month`,`avgRangeMonth`],[`all`,`avgRangeAll`]].map(([e,n])=>(0,o.jsx)(`button`,{type:`button`,className:d(I.heatmapRangeButton,Se===e&&I.heatmapRangeButtonActive),"data-testid":`billing-kpi-range-${e}`,"aria-pressed":Se===e,onClick:()=>{Ce(e),S(e)},children:t(n)},e))})]}),(0,o.jsxs)(`section`,{className:I.kpiGrid,"data-testid":`billing-kpi-grid`,children:[(0,o.jsxs)(`div`,{className:I.kpiTile,"data-testid":`billing-kpi-tile`,children:[(0,o.jsx)(`span`,{className:I.kpiLabel,children:t(`cacheHitRate`)}),(0,o.jsx)(`span`,{className:d(I.kpiValue,I.kpiGreen),children:vt(X.cacheHit+X.cacheMiss>0?X.cacheHit/(X.cacheHit+X.cacheMiss)*100:0)}),(0,o.jsxs)(`span`,{className:I.kpiDetail,children:[q(X.cacheHit),` / `,q(X.cacheHit+X.cacheMiss),(P.cacheWrite??0)>0?` · ${t(`tokenCacheWrite`)} ${q(P.cacheWrite??0)}`:``]})]}),(0,o.jsxs)(`div`,{className:I.kpiTile,children:[(0,o.jsx)(`span`,{className:I.kpiLabel,children:t(`tokens`)}),(0,o.jsx)(`span`,{className:I.kpiValue,children:q(X.input+X.output)}),(0,o.jsxs)(`span`,{className:I.kpiDetail,children:[t(`inputTokens`),` `,q(X.input),` · `,t(`outputTokens`),` `,q(X.output)]})]}),(0,o.jsxs)(`div`,{className:I.kpiTile,"data-testid":`billing-kpi-avg`,children:[(0,o.jsx)(`span`,{className:I.kpiLabel,children:t(`avgCost`)}),(0,o.jsx)(`span`,{className:I.kpiValue,children:V(X.calls>0?X.cost/X.calls:0)}),(0,o.jsxs)(`span`,{className:I.kpiDetail,children:[t(`calls`),` `,X.calls.toLocaleString()]})]}),(0,o.jsxs)(`div`,{className:I.kpiTile,children:[(0,o.jsx)(`span`,{className:I.kpiLabel,children:t(`calls`)}),(0,o.jsx)(`span`,{className:I.kpiValue,children:X.calls.toLocaleString()}),(0,o.jsxs)(`span`,{className:I.kpiDetail,children:[St.length,` `,t(`models`)]})]}),(0,o.jsxs)(`div`,{className:I.kpiTile,"data-testid":`billing-kpi-think`,children:[(0,o.jsx)(`span`,{className:I.kpiLabel,children:t(`tokenReasoningShare`)}),(0,o.jsx)(`span`,{className:d(I.kpiValue,I.kpiGreen),children:vt(X.output>0?X.reasoning/X.output*100:0)}),(0,o.jsx)(`span`,{className:I.kpiDetail,children:q(X.reasoning)})]}),(0,o.jsxs)(`div`,{className:I.kpiTile,"data-testid":`billing-kpi-io`,children:[(0,o.jsx)(`span`,{className:I.kpiLabel,children:t(`tokenIo`)}),(0,o.jsx)(`span`,{className:I.kpiValue,children:(X.output>0?X.input/X.output:0).toFixed(2)}),(0,o.jsxs)(`span`,{className:I.kpiDetail,children:[q(X.input),` / `,q(X.output)]})]}),(0,o.jsxs)(`div`,{className:I.kpiTile,"data-testid":`billing-kpi-peak`,children:[(0,o.jsx)(`span`,{className:I.kpiLabel,children:t(`tokenPeak`)}),(0,o.jsx)(`span`,{className:I.kpiValue,children:X.peakTokens>0?Nt(X.peakTokens):`—`}),(0,o.jsx)(`span`,{className:I.kpiDetail,children:X.peakDay??`—`})]})]})]}),(0,o.jsxs)(`section`,{className:I.panel,"data-testid":`billing-panel-heatmap`,children:[(0,o.jsxs)(`div`,{className:I.panelHead,children:[(0,o.jsx)(`h3`,{className:I.panelTitle,children:t(`heatmap`)}),(0,o.jsx)(`div`,{className:I.heatmapRangeSwitch,"data-testid":`billing-heatmap-metric`,role:`group`,"aria-label":t(`heatmap`),children:[`cost`,`tokens`].map(e=>(0,o.jsx)(`button`,{type:`button`,className:d(I.heatmapRangeButton,ye===e&&I.heatmapRangeButtonActive),"data-testid":`billing-heatmap-metric-${e}`,"aria-pressed":ye===e,onClick:()=>{be(e)},children:t(e===`cost`?`metricCost`:`metricTokens`)},e))}),(0,o.jsx)(`div`,{className:I.heatmapRangeSwitch,"data-testid":`billing-heatmap-range`,role:`group`,"aria-label":t(`heatmap`),children:[`month`,`half`,`year`].map(e=>(0,o.jsx)(`button`,{type:`button`,className:d(I.heatmapRangeButton,_e===e&&I.heatmapRangeButtonActive),"data-testid":`billing-heatmap-range-${e}`,"aria-pressed":_e===e,onClick:()=>{ve(e)},children:t(e===`month`?`heatmapMonth`:e===`half`?`heatmapHalf`:`heatmapYear`)},e))}),(0,o.jsxs)(`span`,{className:I.panelHint,"data-testid":`billing-heatmap-summary`,children:[t(`heatmapTotal`),` `,ye===`tokens`?q(J):V(J),` · `,t(`activeDays`),` `,yt,` · `,t(`streakDays`),` `,bt]})]}),(0,o.jsx)(Yt,{days:mt,currency:m,t,range:_e,unit:ye})]})]}),le===`settings`&&(0,o.jsxs)(`div`,{className:I.tabPanel,"data-testid":`billing-tab-panel-settings`,children:[(0,o.jsxs)(`section`,{className:I.setCard,"data-testid":`billing-budget`,children:[(0,o.jsxs)(`div`,{className:I.setCardHead,children:[(0,o.jsxs)(`div`,{className:I.setCardMeta,children:[(0,o.jsx)(`h3`,{className:I.setCardTitle,children:t(`budget`)}),(0,o.jsx)(`p`,{className:I.setCardDesc,children:t(`budgetHint`)})]}),(0,o.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":b,"aria-label":t(`budget`),"data-testid":`billing-budget-toggle`,className:d(I.switch,b&&I.switchOn),onClick:w,children:(0,o.jsx)(`span`,{className:I.switchKnob})})]}),b&&(0,o.jsxs)(`div`,{className:I.ctlCol,children:[(0,o.jsxs)(`div`,{className:I.ctlRow,children:[(0,o.jsx)(`span`,{className:I.ctlLabel,children:t(`budgetAmount`)}),(0,o.jsxs)(`span`,{className:I.inp,"data-testid":`billing-budget-input-wrap`,children:[(0,o.jsx)(`span`,{className:I.affix,"aria-hidden":`true`,children:`¥`}),(0,o.jsx)(`input`,{className:I.budgetInput,"data-testid":`billing-budget-input`,type:`number`,min:0,step:1,value:C===0?``:C,placeholder:e.budget===void 0?`0`:String(e.budget),"aria-label":`${t(`budget`)}(${m===`usd`?`USD`:m===`eur`?`EUR`:`CNY`})`,title:`${t(`budget`)}(${m===`usd`?`USD`:m===`eur`?`EUR`:`CNY`})`,onChange:e=>{T(e.target.valueAsNumber)}})]})]}),C>0&&(()=>{let e=rt/C*100;return(0,o.jsx)(`div`,{className:I.ctlRowStretch,children:(0,o.jsx)(`div`,{className:I.prog,role:`progressbar`,"aria-valuenow":Math.min(e,100),"aria-valuemin":0,"aria-valuemax":100,"aria-label":t(`budget`),"data-testid":`billing-budget-track`,children:(0,o.jsx)(`div`,{className:d(I.progFill,e>=100&&I.budgetFillOver,e>=80&&e<100&&I.budgetFillWarn),style:{width:`${Math.min(e,100)}%`}})})})})(),C>0&&(0,o.jsx)(`p`,{className:I.setCardDesc,"data-testid":`billing-budget-value`,children:t(`budgetSummary`).replace(`{used}`,V(rt)).replace(`{total}`,V(C))})]})]}),(0,o.jsxs)(`section`,{className:I.setCard,"data-testid":`billing-peak-alert-settings`,children:[(0,o.jsxs)(`div`,{className:I.setCardHead,children:[(0,o.jsxs)(`div`,{className:I.setCardMeta,children:[(0,o.jsx)(`h3`,{className:I.setCardTitle,children:t(`peakAlert`)}),(0,o.jsx)(`p`,{className:I.setCardDesc,children:t(`peakAlertHint`)})]}),(0,o.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":E.enabled,"aria-label":t(`peakAlert`),"data-testid":`billing-peak-alert-toggle`,className:d(I.switch,E.enabled&&I.switchOn),onClick:()=>{D({...E,enabled:!E.enabled})},children:(0,o.jsx)(`span`,{className:I.switchKnob})})]}),E.enabled&&(0,o.jsxs)(`div`,{className:I.ctlCol,children:[(0,o.jsxs)(`label`,{className:I.ctlRow,children:[(0,o.jsx)(`span`,{className:I.ctlLabel,children:t(`peakAlertLeadMin`)}),(0,o.jsx)(`span`,{className:I.inp,children:(0,o.jsx)(`input`,{type:`number`,min:1,max:30,step:1,value:E.leadMin,className:I.budgetInput,"aria-label":t(`peakAlertLeadMin`),onChange:e=>{let t=Number(e.target.valueAsNumber);D({...E,leadMin:Number.isFinite(t)?Math.min(30,Math.max(1,Math.round(t))):E.leadMin})}})})]}),(0,o.jsxs)(`div`,{className:I.ctlRow,children:[(0,o.jsx)(`span`,{className:I.ctlLabel,children:t(`peakAlertPos`)}),(0,o.jsx)(`div`,{className:I.ctlGroup,role:`radiogroup`,"aria-label":t(`peakAlertPos`),children:[`bottom-right`,`center`].map(e=>(0,o.jsxs)(`label`,{className:I.rdo,children:[(0,o.jsx)(`input`,{type:`radio`,name:`peak-pos`,checked:E.position===e,onChange:()=>D({...E,position:e})}),(0,o.jsx)(`span`,{className:I.rdoDot,"aria-hidden":`true`}),t(e===`bottom-right`?`peakAlertPosCorner`:`peakAlertPosCenter`)]},e))})]}),(0,o.jsxs)(`div`,{className:I.ctlRow,children:[(0,o.jsx)(`span`,{className:I.ctlLabel,children:t(`peakAlertMode`)}),(0,o.jsx)(`div`,{className:I.ctlGroup,role:`radiogroup`,"aria-label":t(`peakAlertMode`),children:[`both`,`peak`,`offPeak`].map(e=>(0,o.jsxs)(`label`,{className:I.rdo,children:[(0,o.jsx)(`input`,{type:`radio`,name:`peak-mode`,checked:E.mode===e,onChange:()=>D({...E,mode:e})}),(0,o.jsx)(`span`,{className:I.rdoDot,"aria-hidden":`true`}),t(e===`both`?`peakAlertModeBoth`:e===`peak`?`peakAlertModePeak`:`peakAlertModeOff`)]},e))})]}),(0,o.jsxs)(`label`,{className:I.ctlRow,children:[(0,o.jsx)(`span`,{className:I.ctlLabel,children:t(`peakAlertWebNotify`)}),(0,o.jsx)(`input`,{type:`checkbox`,checked:E.webNotify,"aria-label":t(`peakAlertWebNotify`),onChange:e=>{D({...E,webNotify:e.target.checked})}})]}),(0,o.jsx)(`div`,{className:I.ctlRow,children:(0,o.jsx)(`button`,{type:`button`,className:I.btn,onClick:O,children:t(`peakAlertPreview`)})})]})]}),(0,o.jsx)(`section`,{className:I.setCard,"data-testid":`billing-toggle-setting`,children:(0,o.jsxs)(`div`,{className:I.setGrid3,children:[(0,o.jsx)(`div`,{className:I.setCell,"data-testid":`billing-usage-stats-tool-setting`,children:(0,o.jsxs)(`div`,{className:I.setCardHead,children:[(0,o.jsxs)(`div`,{className:I.setCardMeta,children:[(0,o.jsx)(`h3`,{className:I.setCardTitle,children:t(`usageStatsTool`)}),(0,o.jsx)(`p`,{className:I.setCardDesc,children:t(`usageStatsToolHint`)})]}),(0,o.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":ke,"aria-label":t(`usageStatsTool`),"data-testid":`billing-usage-stats-tool-toggle`,className:d(I.switch,ke&&I.switchOn),onClick:je,children:(0,o.jsx)(`span`,{className:I.switchKnob})})]})}),(0,o.jsxs)(`div`,{className:I.setCell,"data-testid":`billing-livecost-setting`,children:[(0,o.jsxs)(`div`,{className:I.setCardHead,children:[(0,o.jsxs)(`div`,{className:I.setCardMeta,children:[(0,o.jsx)(`h3`,{className:I.setCardTitle,children:t(`liveCostBar`)}),(0,o.jsx)(`p`,{className:I.setCardDesc,children:t(`liveCostBarHint`)})]}),(0,o.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":N.show,"aria-label":t(`liveCostBar`),"data-testid":`billing-livecost-toggle`,className:d(I.switch,N.show&&I.switchOn),onClick:()=>ne({...N,show:!N.show}),children:(0,o.jsx)(`span`,{className:I.switchKnob})})]}),N.show&&(0,o.jsxs)(`div`,{className:I.rdoRow,"data-testid":`billing-livecost-position`,children:[(0,o.jsx)(`span`,{className:I.rdoLabel,children:t(`liveCostBarPosition`)}),(0,o.jsx)(Pr,{liveCostPrefs:N,onLiveCostPrefs:ne,t})]})]}),(0,o.jsx)(`div`,{className:I.setCell,"data-testid":`billing-site-list-setting`,children:(0,o.jsxs)(`div`,{className:I.setCardHead,children:[(0,o.jsxs)(`div`,{className:I.setCardMeta,children:[(0,o.jsx)(`h3`,{className:I.setCardTitle,children:t(`siteListDisplay`)}),(0,o.jsx)(`p`,{className:I.setCardDesc,children:t(`siteListDisplayHint`)})]}),(0,o.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":M.hideUnidentified,"aria-label":t(`siteListDisplay`),"data-testid":`billing-site-hide-unidentified`,className:d(I.switch,M.hideUnidentified&&I.switchOn),onClick:()=>te({hideUnidentified:!M.hideUnidentified}),children:(0,o.jsx)(`span`,{className:I.switchKnob})})]})})]})}),(0,o.jsx)(`section`,{className:I.setCard,"data-testid":`billing-display-setting`,children:(0,o.jsxs)(`div`,{className:I.setGrid2,children:[(0,o.jsxs)(`div`,{className:I.setCell,"data-testid":`billing-float-setting`,children:[(0,o.jsx)(`div`,{className:I.setCardHead,children:(0,o.jsxs)(`div`,{className:I.setCardMeta,children:[(0,o.jsx)(`h3`,{className:I.setCardTitle,children:t(`floatWindow`)}),(0,o.jsx)(`p`,{className:I.setCardDesc,children:t(`floatWindowHint`)})]})}),(0,o.jsxs)(`div`,{className:I.ctlCol,children:[(0,o.jsxs)(`div`,{className:I.ctlRow,children:[(0,o.jsx)(`span`,{className:I.ctlLabel,children:t(`floatMode`)}),(0,o.jsxs)(`div`,{className:I.ctlGroup,"data-testid":`billing-float-mode`,children:[(0,o.jsx)(`button`,{type:`button`,className:d(I.floatModeBtn,k.mode===`combined`&&I.floatModeBtnOn),"data-testid":`billing-float-mode-combined`,onClick:()=>A({mode:`combined`,targets:k.targets}),children:t(`floatModeCombined`)}),(0,o.jsx)(`button`,{type:`button`,className:d(I.floatModeBtn,k.mode===`subscription`&&I.floatModeBtnOn),"data-testid":`billing-float-mode-subscription`,onClick:()=>A({mode:`subscription`,targets:k.targets}),children:t(`floatModeSubscription`)})]})]}),k.mode===`subscription`&&(0,o.jsxs)(`div`,{className:I.ctlRow,children:[(0,o.jsx)(`span`,{className:I.ctlLabel,children:t(`floatTargets`)}),(0,o.jsxs)(`span`,{className:I.ctlGroup,"data-testid":`billing-float-targets`,children:[we.map(e=>{let t=k.targets.includes(e.id);return(0,o.jsxs)(`label`,{className:I.floatTarget,children:[(0,o.jsx)(`input`,{type:`checkbox`,checked:t,"data-testid":`billing-float-target-${e.id}`,onChange:()=>A({mode:`subscription`,targets:t?k.targets.filter(t=>t!==e.id):[...k.targets,e.id]})}),(0,o.jsx)(`span`,{className:I.floatTargetLabel,children:e.label})]},e.id)}),we.length===0&&(0,o.jsx)(`span`,{className:I.setCardDesc,children:t(`floatNoTargetsHint`)})]})]})]})]}),(0,o.jsxs)(`div`,{className:I.setCell,"data-testid":`billing-card-setting`,children:[(0,o.jsx)(`div`,{className:I.setCardHead,children:(0,o.jsxs)(`div`,{className:I.setCardMeta,children:[(0,o.jsx)(`h3`,{className:I.setCardTitle,children:t(`cardDisplay`)}),(0,o.jsx)(`p`,{className:I.setCardDesc,children:t(`cardDisplayHint`)})]})}),(0,o.jsxs)(`div`,{className:I.ctlCol,children:[(0,o.jsxs)(`div`,{className:I.ctlRow,children:[(0,o.jsx)(`span`,{className:I.ctlLabel,children:t(`cardMetric`)}),(0,o.jsxs)(`div`,{className:I.ctlGroup,"data-testid":`billing-card-metric`,children:[(0,o.jsx)(`button`,{type:`button`,className:d(I.floatModeBtn,ee.metric===`money`&&I.floatModeBtnOn),"data-testid":`billing-card-money`,onClick:()=>j({...ee,metric:`money`}),children:t(`cardMetricMoney`)}),(0,o.jsx)(`button`,{type:`button`,className:d(I.floatModeBtn,ee.metric===`tokens`&&I.floatModeBtnOn),"data-testid":`billing-card-tokens`,onClick:()=>j({...ee,metric:`tokens`}),children:t(`cardMetricTokens`)})]})]}),(0,o.jsxs)(`div`,{className:I.ctlRow,children:[(0,o.jsx)(`span`,{className:I.ctlLabel,children:t(`cardSpan`)}),(0,o.jsx)(`div`,{className:I.ctlGroup,"data-testid":`billing-card-span`,children:[[`day`,`cardSpanDay`],[`week`,`cardSpanWeek`],[`month`,`cardSpanMonth`]].map(([e,n])=>(0,o.jsx)(`button`,{type:`button`,className:d(I.floatModeBtn,ee.span===e&&I.floatModeBtnOn),"data-testid":`billing-card-span-${e}`,"aria-pressed":ee.span===e,onClick:()=>j({...ee,span:e}),children:t(n)},e))})]})]})]})]})}),(0,o.jsx)(Ar,{userPrices:i,onUserPrices:s,t}),(0,o.jsx)(jt,{t,version:e.pluginVersion})]}),le===`trends`&&(0,o.jsxs)(`div`,{className:I.tabPanel,"data-testid":`billing-tab-panel-trends`,children:[(0,o.jsxs)(`section`,{className:d(I.ubCard,I.trendPanel),"data-testid":`billing-panel-trend`,children:[(0,o.jsxs)(`div`,{className:I.ubCardHead,children:[(0,o.jsx)(`h3`,{className:I.ubCardTitle,children:t(`trend`)}),y(`billing.dashboard.decor`,{position:`trend`}),(0,o.jsxs)(`span`,{className:I.ubCardControlGroup,children:[(0,o.jsx)(`span`,{className:I.rangeToggle,role:`group`,"aria-label":t(`trend`),children:[7,30].map(e=>(0,o.jsx)(`button`,{type:`button`,className:d(I.rangeButton,de===e&&I.rangeButtonActive),"aria-pressed":de===e,"data-testid":`billing-trend-${e}d`,onClick:()=>{fe(e)},children:t(e===7?`trend7d`:`trend30d`)},e))}),(0,o.jsx)(`span`,{className:I.rangeToggle,role:`group`,"aria-label":t(`trendMetric`),children:[`cost`,`tokens`].map(e=>(0,o.jsx)(`button`,{type:`button`,className:d(I.rangeButton,ae===e&&I.rangeButtonActive),"aria-pressed":ae===e,"data-testid":`billing-trend-metric-${e}`,onClick:()=>{oe(e)},children:t(e===`cost`?`trendMetricCost`:`trendMetricTokens`)},e))})]}),(0,o.jsx)(`span`,{className:I.ubCardSub,children:ft})]}),(0,o.jsx)(Ct,{data:xt,models:At,currency:m,metric:ae,t})]}),v.length>0&&(0,o.jsxs)(`section`,{className:I.ubCard,"data-testid":`billing-panel-rounds`,children:[(0,o.jsxs)(`div`,{className:I.ubCardHead,children:[(0,o.jsx)(`h3`,{className:I.ubCardTitle,children:t(`rounds`)}),Ke.length>0&&(0,o.jsxs)(`span`,{className:I.ubTagError,"data-testid":`billing-rounds-flag-count`,children:[Ke.length,` `,t(`anomaly`)]})]}),(0,o.jsx)(`p`,{className:I.ubCardSub,children:t(`roundsHint`).replace(`{count}`,String(v.length))}),(0,o.jsx)(Ut,{rounds:v,flags:Ke,currency:m,t})]}),e.byTier!==void 0&&(()=>{let e=qe.peak+qe.offPeak;if(e<=0)return null;let n=qe.peak/e*100;return(0,o.jsxs)(`section`,{className:I.ubCard,"data-testid":`billing-panel-share`,children:[(0,o.jsxs)(`div`,{className:I.ubCardHead,children:[(0,o.jsx)(`h3`,{className:I.ubCardTitle,children:t(`peakShare`)}),(0,o.jsx)(`span`,{className:I.ubCardSub,children:t(`peakSharePerCall`)})]}),(0,o.jsxs)(`div`,{className:I.shareTrack,"data-testid":`billing-share-track`,children:[(0,o.jsx)(`div`,{className:d(I.shareSeg,I.shareSegPeak),style:{width:`${n}%`}}),(0,o.jsx)(`div`,{className:d(I.shareSeg,I.shareSegOff),style:{width:`${100-n}%`}})]}),(0,o.jsxs)(`div`,{className:I.shareLegend,children:[(0,o.jsxs)(`span`,{className:I.shareItem,children:[(0,o.jsx)(`span`,{className:I.shareDot,style:{background:`var(--ds-blue)`}}),t(`peak`),(0,o.jsxs)(`span`,{className:I.shareValue,"data-testid":`billing-share-peak`,children:[V(qe.peak),` · `,n.toFixed(1),`%`]})]}),(0,o.jsxs)(`span`,{className:I.shareItem,children:[(0,o.jsx)(`span`,{className:I.shareDot,style:{background:`color-mix(in srgb, var(--ds-blue) 30%, var(--dsb-3))`}}),t(`offPeak`),(0,o.jsxs)(`span`,{className:I.shareValue,"data-testid":`billing-share-offpeak`,children:[V(qe.offPeak),` · `,(100-n).toFixed(1),`%`]})]})]}),Je>0&&(0,o.jsx)(`div`,{className:I.staleNotice,"data-testid":`billing-share-savings`,children:t(`offPeakSavings`).replace(`{amount}`,V(Je))})]})})()]}),le===`providers`&&(0,o.jsxs)(`div`,{className:I.tabPanel,"data-testid":`billing-tab-panel-providers`,children:[Y.length>0&&(0,o.jsxs)(`section`,{className:I.panel,"data-testid":`billing-panel-relay-quota`,children:[(0,o.jsx)(`div`,{className:I.panelHead,children:(0,o.jsx)(`h3`,{className:I.panelTitle,children:t(`panelRelayQuota`)})}),(0,o.jsx)(`div`,{className:I.providerGroupList,"data-testid":`billing-relay-quotas`,children:Y.map(e=>(0,o.jsxs)(`div`,{className:I.siteRow,"data-testid":`billing-relay-quota`,children:[(0,o.jsxs)(`span`,{className:I.siteRowName,children:[(0,o.jsx)(`span`,{className:d(I.siteKindTag,dr[e.kind]),children:ur(e.kind,t)}),(0,o.jsx)(`span`,{className:I.siteRowTitle,children:e.origin})]}),(0,o.jsxs)(`span`,{className:I.siteRowMeta,children:[e.balance!==void 0&&(0,o.jsxs)(`span`,{className:I.siteRowCost,children:[t(`relayBalance`),` `,e.balance.toFixed(2)]}),(e.windows?.length??0)>0?e.windows?.map(e=>{let n=e.remainingPercent<20;return(0,o.jsxs)(`span`,{className:d(I.siteRowCalls,n&&I.siteRowCallsLow),children:[t(`relayWindowUsed`),` `,e.usedPercent,`%`]},e.kind)}):(0,o.jsx)(`span`,{className:I.siteRowCalls,children:t(`relayNoQuota`)})]})]},e.route))})]}),(0,o.jsxs)(`section`,{className:I.panel,"data-testid":`billing-panel-providers`,children:[(0,o.jsxs)(`div`,{className:I.panelHead,children:[(0,o.jsx)(`h3`,{className:I.panelTitle,children:t(`providerBilling`)}),y(`billing.dashboard.decor`,{position:`models`}),(0,o.jsx)(`span`,{className:I.panelHint,children:e.updatedAt===void 0?``:`${t(`lastUpdated`)} ${pr(e.updatedAt)}`})]}),ie&&(0,o.jsx)(`div`,{className:I.staleNotice,"data-testid":`billing-subscriptions-stale`,children:t(`subscriptionsStale`)}),wt.length===0?(0,o.jsx)(`div`,{className:I.emptyRow,"data-testid":`billing-provider-empty`,children:t(`noData`)}):(0,o.jsx)(`div`,{className:I.providerGroupList,"data-testid":`billing-provider-groups`,children:wt.map(e=>(0,o.jsxs)(`div`,{className:I.providerGroup,"data-testid":`billing-provider-group`,children:[(0,o.jsxs)(`div`,{className:I.providerGroupHead,children:[(0,o.jsxs)(`span`,{className:I.providerGroupTitle,children:[(0,o.jsx)(`span`,{className:d(I.healthDot,e.dot),"aria-hidden":`true`}),(()=>{let n=Fe(e.name),r=e.channelKind===`direct`?xn(n):void 0,i=e.channelKind===`direct`?t(`directTag`):e.channelKind===`site`?t(`relayTag`):e.channelKind===`unknown`?t(`unknownTag`):void 0;return(0,o.jsxs)(o.Fragment,{children:[i!==void 0&&(0,o.jsx)(`span`,{className:d(I.kindBadge,e.channelKind===`direct`&&I.kindBadgeDirect,e.channelKind===`site`&&I.kindBadgeRelay,e.channelKind===`unknown`&&I.kindBadgeUnknown),"data-testid":`billing-kind-badge`,children:i}),e.channelKind!==`unknown`&&(0,o.jsx)(`span`,{className:I.providerGroupName,children:r??n})]})})(),e.subscriptions.length>0&&(0,o.jsxs)(`span`,{className:I.providerGroupBadge,"data-testid":`billing-provider-sub-count`,children:[e.subscriptions.length,` `,t(`planCountUnit`)]})]}),(0,o.jsxs)(`span`,{className:I.providerGroupMeta,children:[(0,o.jsxs)(`span`,{className:I.providerGroupCost,"data-testid":`billing-provider-cost`,children:[(0,o.jsx)(`span`,{className:I.providerGroupCostLabel,children:t(`cost`)}),(0,o.jsx)(`span`,{className:I.providerGroupCostValue,children:V(Er(e))})]}),!Ze(e)&&e.balance!==void 0?(0,o.jsxs)(`span`,{className:I.providerGroupBalance,"data-testid":`billing-provider-balance`,children:[(0,o.jsx)(`span`,{className:I.providerGroupBalanceLabel,children:t(`balance`)}),Qe(e.balance)]}):(0,o.jsx)(`span`,{className:I.providerGroupBalance,"aria-hidden":`true`}),Jn(e.name)===void 0?(0,o.jsx)(`span`,{className:I.providerGroupRecharge,"aria-hidden":`true`}):(0,o.jsx)(`a`,{className:I.providerGroupRecharge,"data-testid":`billing-group-recharge`,href:Jn(e.name),target:`_blank`,rel:`noreferrer`,title:t(`rechargeHint`),"aria-label":`${Fe(e.name)} ${t(`recharge`)}`,children:t(`recharge`)})]})]}),e.models.length>0&&(0,o.jsx)(`div`,{className:d(I.tableScroll,I.modelTableScroll),"data-testid":`billing-table-scroll`,children:(0,o.jsxs)(`table`,{className:I.modelTable,children:[Tt,(0,o.jsx)(`tbody`,{children:e.models.map(e=>(0,o.jsxs)(`tr`,{children:[(0,o.jsx)(`td`,{children:Et(e)}),(0,o.jsx)(`td`,{className:I.numCol,children:e.calls.toLocaleString()}),(0,o.jsx)(`td`,{className:I.numCol,children:q(e.input)}),(0,o.jsx)(`td`,{className:I.numCol,children:q(e.output)}),(0,o.jsx)(`td`,{className:I.numCol,children:vt(e.cacheHitRate)}),(0,o.jsx)(`td`,{className:I.numCol,children:e.plan?(0,o.jsxs)(`span`,{className:I.planTag,children:[e.estimated>0?(0,o.jsxs)(`span`,{children:[`≈`,V(e.estimated)]}):null,(0,o.jsx)(`span`,{className:I.planTagBadge,"data-testid":`billing-plan-badge`,children:t(`subscriptionTag`)})]}):e.actual===void 0?(0,o.jsx)(`span`,{className:I.na,children:`—`}):(()=>{let t=e.officialCost,n=e.actual-t;return t>0&&n>0?(0,o.jsxs)(`span`,{className:I.bucketCost,children:[(0,o.jsx)(`span`,{className:I.bucketOfficial,children:V(t)}),(0,o.jsx)(`span`,{className:I.bucketSep,children:`/`}),(0,o.jsx)(`span`,{className:I.bucketThird,children:V(n)})]}):V(e.actual)})()})]},e.key))})]})}),e.subscriptions.length>0&&(0,o.jsx)(`div`,{className:I.subscriptionGrid,"data-testid":`billing-subscriptions-grid`,children:e.subscriptions.map(e=>{let n=cr(e.status,t);return(0,o.jsxs)(`div`,{className:I.subscriptionCard,"data-testid":`billing-subscription-card`,children:[(0,o.jsxs)(`div`,{className:I.subscriptionHead,children:[(0,o.jsx)(`span`,{className:I.subscriptionName,children:Fe(e.displayName)}),e.planType===`code`&&(()=>{let n=xe(e.provider),r=n===void 0?void 0:t(`subscriptionFeePerMonth`).replace(`{amount}`,n.currency===`USD`?`$${n.amount}`:`¥${n.amount}`);return(0,o.jsxs)(`span`,{className:I.subscriptionPlan,"data-kind":`code`,children:[r??(e.subscriptionAmount!==void 0&&e.subscriptionAmount>0?t(`subscriptionFeePerMonth`).replace(`{amount}`,V(e.subscriptionAmount)):t(`planTypeCode`)),n?.label!==void 0&&(0,o.jsx)(`span`,{className:I.subscriptionTier,"data-testid":`billing-tier-${e.provider}`,children:n.label}),n!==void 0&&(0,o.jsx)(`span`,{className:I.subscriptionAuto,"data-testid":`billing-auto-${e.provider}`,children:t(`subscriptionAutoDetect`)})]})})(),e.planType===`token`&&(0,o.jsx)(`span`,{className:I.subscriptionPlan,"data-kind":`token`,children:t(`planTypeToken`)}),e.plan!==void 0&&(0,o.jsx)(`span`,{className:I.subscriptionPlan,children:e.plan})]}),n!==``&&(0,o.jsx)(`div`,{className:I.subscriptionStatus,children:n}),e.windows.length===0&&n===``&&(0,o.jsx)(`div`,{className:I.subscriptionStatus,children:t(`subscriptionNoApi`)}),e.windows.map(e=>(()=>{let n=Math.min(100,Math.max(0,e.usedPercent)),r=Math.min(100,Math.max(0,e.remainingPercent))<=0;return(0,o.jsxs)(`div`,{className:I.subscriptionWindow,children:[(0,o.jsx)(`span`,{className:I.subscriptionWindowLabel,children:lr(e.kind,t)}),(0,o.jsx)(`span`,{className:I.subscriptionTrack,"aria-hidden":`true`,children:(0,o.jsx)(`span`,{className:d(I.subscriptionFill,n>=100&&I.subscriptionFillOver,n>=80&&n<100&&I.subscriptionFillWarn),style:{width:`${n}%`}})}),(0,o.jsxs)(`span`,{className:I.subscriptionMeta,children:[(0,o.jsx)(`span`,{className:d(I.subscriptionPct,r&&I.subscriptionExhausted),children:r?t(`subscriptionExhausted`):t(`subscriptionRemaining`).replace(`{pct}`,String(e.remainingPercent))}),e.resetsAt!==void 0&&(0,o.jsx)(`span`,{className:I.subscriptionReset,children:t(`subscriptionReset`).replace(`{date}`,`${$(new Date(e.resetsAt).getTime())} ${pr(new Date(e.resetsAt).getTime())}`)})]})]},e.kind)})())]},e.provider)})})]},e.name))})]}),(0,o.jsxs)(`div`,{className:I.exportBar,"data-testid":`billing-export-bar`,role:`group`,"aria-label":t(`export`),children:[(0,o.jsx)(`span`,{className:I.exportLabel,children:t(`export`)}),(0,o.jsx)(`button`,{type:`button`,className:I.exportButton,"data-testid":`billing-export-day`,onClick:()=>{ln(cn(`usage-daily`,`csv`,Object.keys(F)),rn(F),`text/csv`)},children:t(`exportCsvDay`)}),e.bySession!==void 0&&(0,o.jsx)(`button`,{type:`button`,className:I.exportButton,"data-testid":`billing-export-sessions`,onClick:()=>{ln(cn(`usage-sessions`,`csv`,Object.keys(F)),sn(e.bySession??[]),`text/csv`)},children:t(`exportCsvSession`)}),e.bySite!==void 0&&(0,o.jsx)(`button`,{type:`button`,className:I.exportButton,"data-testid":`billing-export-sites`,onClick:()=>{ln(cn(`usage-sites`,`csv`,Object.keys(F)),an(e.bySite??{}),`text/csv`)},children:t(`exportCsvSite`)}),(0,o.jsx)(`button`,{type:`button`,className:I.exportButton,"data-testid":`billing-export-json`,onClick:()=>{ln(cn(`usage-stats`,`json`,Object.keys(F)),JSON.stringify(e,null,2),`application/json`)},children:t(`exportJson`)})]}),e.bySession!==void 0&&(0,o.jsxs)(`section`,{className:I.ubCard,"data-testid":`billing-panel-sessions`,children:[(0,o.jsxs)(`div`,{className:I.ubCardHead,children:[(0,o.jsx)(`h3`,{className:I.ubCardTitle,children:t(`sessions`)}),(0,o.jsx)(`span`,{className:I.ubCardSub,children:e.bySession.length>20?t(`sessionOverflow`).replace(`{limit}`,`20`).replace(`{total}`,String(e.bySession.length)):`${e.bySession.length}`})]}),(e.staleLedgerSessions??0)>0&&(0,o.jsx)(`div`,{className:I.staleNotice,"data-testid":`billing-sessions-stale`,children:t(`staleLedgerNotice`).replace(`{count}`,String(e.staleLedgerSessions))}),(0,o.jsx)(`div`,{className:I.ubTablewrap,"data-testid":`billing-sessions-table`,children:(0,o.jsxs)(`table`,{className:I.ubTable,children:[(0,o.jsx)(`thead`,{children:(0,o.jsxs)(`tr`,{children:[(0,o.jsx)(`th`,{children:t(`sessionTitle`)}),(0,o.jsx)(`th`,{className:I.numCol,children:t(`calls`)}),(0,o.jsx)(`th`,{className:I.numCol,children:t(`actual`)}),(0,o.jsx)(`th`,{className:I.numCol,children:t(`lastActive`)})]})}),(0,o.jsxs)(`tbody`,{children:[sr(e.bySession??[]).length===0&&(0,o.jsx)(`tr`,{children:(0,o.jsx)(`td`,{colSpan:4,className:I.emptyRow,children:t(`noData`)})}),sr(e.bySession??[]).slice(0,20).map(e=>{let n=e.children!==void 0,i=n&&De.has(e.id),a=e=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(`td`,{className:I.numCol,children:e.calls.toLocaleString()}),(0,o.jsx)(`td`,{className:I.numCol,children:V(e.cost)}),(0,o.jsx)(`td`,{className:I.numCol,children:e.lastActive>0?`${$(e.lastActive)} ${pr(e.lastActive)}`:`—`})]});return(0,o.jsxs)(r.Fragment,{children:[(0,o.jsxs)(`tr`,{className:n?I.sessionGroupRow:void 0,"aria-expanded":n?i:void 0,onClick:n?()=>{Oe(e.id)}:void 0,children:[(0,o.jsxs)(`td`,{children:[(0,o.jsxs)(`span`,{className:I.modelName,children:[e.title??`${t(`sessionUntitled`)} · ${e.id.slice(0,8)}`,(e.mergedCount??1)>1?` ×${e.mergedCount}`:``]}),e.stale===!0&&(0,o.jsx)(`span`,{className:d(I.ubTag,I.ubTagNeutral),"data-testid":`billing-session-stale`,children:t(`sessionStaleBadge`)})]}),a(e)]}),i&&e.children?.map(e=>(0,o.jsxs)(`tr`,{className:I.sessionChildRow,children:[(0,o.jsx)(`td`,{children:(0,o.jsx)(`span`,{className:I.modelProvider,children:e.id.slice(0,8)})}),a(e)]},e.id))]},e.id)})]})]})})]})]}),le===`token`&&(0,o.jsxs)(`div`,{className:I.tabPanel,"data-testid":`billing-tab-panel-token`,children:[(0,o.jsx)(Rt,{stats:e,trendDays:de,onTrendDays:fe,models:At,money:V,t}),e.perf!==void 0&&(0,o.jsxs)(`section`,{className:I.panel,"data-testid":`billing-panel-perf`,children:[(0,o.jsxs)(`div`,{className:I.panelHead,children:[(0,o.jsx)(`h3`,{className:I.panelTitle,children:t(`perfTitle`)}),(0,o.jsx)(`span`,{className:I.panelHint,children:t(`perfHint`)})]}),(0,o.jsx)(kt,{perf:e.perf,models:At,t})]})]}),le===`pricing`&&(0,o.jsxs)(`div`,{className:I.tabPanel,"data-testid":`billing-tab-panel-pricing`,children:[(0,o.jsxs)(`div`,{className:I.ubAlert,role:`note`,children:[(0,o.jsxs)(`div`,{className:I.ubAlertLeft,children:[(0,o.jsxs)(`span`,{className:I.ubRate,"data-testid":`billing-rate`,children:[t(`todayRate`),` 1 USD = `,K(R.rate)]}),(0,o.jsx)(`span`,{className:d(I.ubTag,R.live?I.ubTagSuccess:I.ubTagNeutral),children:R.live?t(`rateLive`):t(`rateBuiltin`)}),B>0&&(0,o.jsxs)(`span`,{className:I.ubTag,"data-testid":`billing-pricing-synced`,children:[t(`pricingSyncedAt`),` `,new Date(B).toLocaleTimeString(U===`zh`?`zh-CN`:`en-US`,{hour:`2-digit`,minute:`2-digit`})]}),(0,o.jsx)(`button`,{type:`button`,className:I.heatmapRangeButton,"data-testid":`billing-pricing-sync`,disabled:z,onClick:Ne,children:t(z?`pricingSyncing`:`pricingSyncNow`)})]}),(0,o.jsx)(`p`,{className:I.ubAlertNote,children:t(`pricingTip`)})]}),(0,o.jsxs)(`section`,{className:I.ubCard,"data-testid":`billing-panel-pricing`,children:[(0,o.jsxs)(`div`,{className:I.ubCardHead,children:[(0,o.jsx)(`h3`,{className:I.ubCardTitle,children:t(`pricing`)}),(0,o.jsx)(`span`,{className:I.ubCardSub,children:t(`pricingUnit`)}),(0,o.jsx)(`input`,{className:I.ubSearch,type:`search`,value:Ie,placeholder:t(`pricingSearch`),"aria-label":t(`pricingSearch`),"data-testid":`billing-pricing-search`,onChange:e=>{Le(e.target.value)}})]}),(0,o.jsx)(`div`,{className:I.ubTablewrap,children:(0,o.jsxs)(`table`,{className:I.ubTable,children:[(0,o.jsx)(`thead`,{children:(0,o.jsxs)(`tr`,{children:[(0,o.jsx)(`th`,{children:t(`thModel`)}),(0,o.jsx)(`th`,{className:I.numCol,children:t(`thInputMiss`)}),(0,o.jsx)(`th`,{className:I.numCol,children:t(`thInputHit`)}),(0,o.jsx)(`th`,{className:I.numCol,children:t(`output`)}),(0,o.jsx)(`th`,{className:I.numCol,colSpan:2,children:t(`band`)})]})}),(0,o.jsx)(`tbody`,{children:pn(ut(),Ie).map(e=>{let n=e.price.input>0||e.price.output>0;return(0,o.jsxs)(r.Fragment,{children:[(0,o.jsxs)(`tr`,{children:[(0,o.jsx)(`td`,{children:(0,o.jsxs)(`span`,{className:I.ubModel,children:[(()=>{let n=un(Ge(Be,We(e.key,He)),Ue);if(n===null)return null;let r=Re.includes(e.key),i=`${e.name} · ${t(n===`peak`?`peak`:`offPeak`)} · ${t(`bandPinHint`)}`;return(0,o.jsx)(`button`,{type:`button`,className:d(I.bandDot,I[n],r&&I.bandDotOn),"data-testid":`billing-band-dot`,"aria-pressed":r,"aria-label":i,title:i,onClick:()=>{ze(se(e.key)),window.dispatchEvent(new CustomEvent(`dsh.ui-usage-billing.pinned-pref`))}})})(),(0,o.jsx)(Mr,{provider:e.provider,colorVar:dt(e.colorVar)}),(0,o.jsxs)(`span`,{className:I.ubModelName,children:[e.name,e.uncatalogued&&(0,o.jsx)(`span`,{className:I.ubTagAlert,"data-testid":`billing-price-uncatalogued`,children:t(`uncatalogued`)}),e.promo!==void 0&&ct(e.promo,Date.now())&&(0,o.jsx)(a.Tooltip,{label:[e.promo.note,e.promo.endsAtMs===void 0?t(`promoOpenEnded`):t(`promoUntil`,{date:new Date(e.promo.endsAtMs).toLocaleDateString()})].filter(Boolean).join(` · `),side:`top`,maxWidth:280,children:(0,o.jsx)(`span`,{className:I.ubTagPromo,"data-testid":`billing-price-promo`,children:t(`promoBadge`)})})]})]})}),(0,o.jsx)(`td`,{className:I.numCol,children:n?W(e.price.input,e.price.currency):(0,o.jsx)(`span`,{className:I.na,children:`—`})}),(0,o.jsx)(`td`,{className:I.numCol,children:n?W(e.price.cacheHit,e.price.currency):(0,o.jsx)(`span`,{className:I.na,children:`—`})}),(0,o.jsx)(`td`,{className:I.numCol,children:n?W(e.price.output,e.price.currency):(0,o.jsx)(`span`,{className:I.na,children:`—`})}),n&&e.price.offPeak!==void 0&&e.peakHours!==void 0?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(`td`,{className:I.numCol,children:(0,o.jsxs)(`span`,{className:I.ubChipPeak,children:[(0,o.jsx)(`span`,{className:I.ubChipLabel,children:e.tierSemantics===`latency`?t(`ubStd`):t(`ubPeak`)}),(0,o.jsxs)(`span`,{className:I.num,children:[W(e.price.input,e.price.currency),`/`,W(e.price.output,e.price.currency)]})]})}),(0,o.jsx)(`td`,{className:I.numCol,children:(0,o.jsxs)(`span`,{className:I.ubChipOff,children:[(0,o.jsx)(`span`,{className:I.ubChipLabel,children:e.tierSemantics===`latency`?`Flex`:t(`ubOff`)}),(0,o.jsxs)(`span`,{className:I.num,children:[W(e.price.offPeak.input,e.price.currency),` / `,W(e.price.offPeak.output,e.price.currency)]})]})})]}):(0,o.jsx)(`td`,{className:I.numCol,colSpan:2,children:n?(0,o.jsx)(`span`,{className:I.flatTag,children:t(`flat`)}):(0,o.jsx)(`span`,{className:I.na,children:`—`})})]}),(e.extraRows??[]).map(t=>(0,o.jsxs)(`tr`,{className:I.ubExtraRow,children:[(0,o.jsxs)(`td`,{children:[(0,o.jsx)(`span`,{className:I.ubExtraName,children:fn(t.label,U)}),t.note!==void 0&&(0,o.jsx)(`span`,{className:I.ubExtraNote,children:fn(t.note,U)})]}),(0,o.jsx)(`td`,{className:I.numCol,children:t.input===void 0?(0,o.jsx)(`span`,{className:I.na,children:`—`}):W(t.input,e.price.currency)}),(0,o.jsx)(`td`,{className:I.numCol,children:(0,o.jsx)(`span`,{className:I.na,children:`—`})}),(0,o.jsx)(`td`,{className:I.numCol,children:t.output===void 0?(0,o.jsx)(`span`,{className:I.na,children:`—`}):W(t.output,e.price.currency)}),(0,o.jsx)(`td`,{className:I.numCol,colSpan:2,children:(0,o.jsx)(`span`,{className:I.na,children:`—`})})]},`${e.key}:${t.label}`))]},e.key)})})]})})]}),(0,o.jsxs)(`section`,{className:I.ubCard,children:[(0,o.jsx)(`div`,{className:I.ubCardHead,children:(0,o.jsx)(`h3`,{className:I.ubCardTitle,children:t(`pricingNotes`)})}),(0,o.jsxs)(`ul`,{className:I.ubNotes,children:[(0,o.jsxs)(`li`,{className:I.ubNotesItem,children:[(0,o.jsx)(`span`,{className:I.ubNotesTerm,children:t(`cacheHit`)}),(0,o.jsx)(`span`,{className:I.ubNotesDesc,children:t(`noteCache`)})]}),(0,o.jsxs)(`li`,{className:I.ubNotesItem,children:[(0,o.jsx)(`span`,{className:I.ubNotesTerm,children:t(`peakBand`)}),(0,o.jsx)(`span`,{className:I.ubNotesDesc,children:t(`noteBand`)})]}),(0,o.jsxs)(`li`,{className:I.ubNotesItem,children:[(0,o.jsx)(`span`,{className:I.ubNotesTerm,children:t(`pricingSource`)}),(0,o.jsx)(`span`,{className:I.ubNotesDesc,children:t(`noteSource`)})]})]})]})]}),y(`billing.dashboard.decor`,{position:`footer`})]}),(0,o.jsxs)(`footer`,{className:I.modalFooter,"data-testid":`billing-footer`,children:[(0,o.jsx)(`span`,{children:t(`footer`)}),(0,o.jsx)(`span`,{children:t(`footerCredit`).replace(`{version}`,e.pluginVersion===void 0?`—`:`v${e.pluginVersion}`)})]})]})})}function Mr({provider:e,colorVar:t}){return(0,o.jsx)(`span`,{className:I.vendorLetter,style:t===void 0?void 0:{background:t},"aria-hidden":`true`,children:e.trim().charAt(0).toUpperCase()})}let Nr=[`below`,`above`,`toolbar`];function Pr({liveCostPrefs:e,onLiveCostPrefs:t,t:n}){let[i,s]=(0,r.useState)(!1),c={below:n(`liveCostBarPosBelow`),above:n(`liveCostBarPosAbove`),toolbar:n(`liveCostBarPosToolbar`)};return(0,o.jsx)(a.Menu,{open:i,align:`end`,portal:!0,compact:!0,items:Nr.map(e=>({id:e,label:c[e]})),selectedId:e.position,onSelect:n=>{s(!1);let r=Nr.find(e=>e===n);r!==void 0&&t({...e,position:r})},onClose:()=>{s(!1)},anchor:(0,o.jsxs)(`button`,{type:`button`,className:I.rdoSelect,"data-testid":`billing-livecost-position-select`,"aria-haspopup":`menu`,"aria-expanded":i,onClick:()=>{s(!i)},children:[(0,o.jsx)(`span`,{children:c[e.position]}),(0,o.jsx)(`span`,{className:d(I.rdoChevron,i&&I.rdoChevronOpen),"aria-hidden":!0,children:(0,o.jsx)(a.IconChevronDownOutline14,{})})]})})}function Fr(e){let{t,checkModels:n,publishCosts:i,registerOpen:a,renderSlot:s,useStore:c,actions:l}=e,[u,d]=(0,r.useState)(hr),[f,p]=(0,r.useState)(An),[g,_]=(0,r.useState)([]),[b,x]=(0,r.useState)(void 0),[S,C]=(0,r.useState)([]),[w,D]=(0,r.useState)(!1),[O,j]=(0,r.useState)([]),[ne,re]=(0,r.useState)(()=>te()),[ie,ae]=(0,r.useState)(()=>oe()),se=(0,r.useCallback)(e=>{ae(e),P(e),window.dispatchEvent(new CustomEvent(`dsh.ui-usage-billing.language-pref`))},[]),ce=(0,r.useCallback)(e=>{re(e),N(e),window.dispatchEvent(new CustomEvent(M))},[]),[ue,de]=(0,r.useState)(()=>m()),fe=(0,r.useCallback)(e=>{de(e),h(e)},[]),[pe,me]=(0,r.useState)(()=>T()),I=(0,r.useCallback)(e=>{me(e),E(e)},[]),[he,ve]=(0,r.useState)(()=>A()),ye=(0,r.useCallback)(e=>{ve(e),ee(e),window.dispatchEvent(new CustomEvent(k))},[]),[be,xe]=(0,r.useState)(()=>v()),Se=(0,r.useCallback)(e=>{xe(e),y(e)},[]),[Ce,we]=(0,r.useState)(()=>{let e=F();return Ae(e),e}),Te=(0,r.useCallback)(e=>{we(e),Ae(e),le(e)},[]),Ee=(0,r.useMemo)(()=>Zn(u),[u,Ce]),De=ie,L=(0,r.useCallback)((e,n)=>{let r=(De===`en`?_e:ge)[e]??t(e);if(n===void 0)return r;let i=r;for(let[e,t]of Object.entries(n))i=i.replaceAll(`{${e}}`,String(t));return i},[De,t]),[Oe,ke]=(0,r.useState)(!1),je=(0,r.useCallback)(()=>{ke(!1)},[]),R=(0,r.useCallback)(()=>{gr().then(e=>{e!==null&&d(Zn(e))}),xr().then(({balances:e,reconcile:t})=>{e.length>0&&_(e),x(t)}),Sr().then(e=>{e.length>0&&C(e),D(!1)}).catch(()=>{D(!0)}),Cr().then(e=>{j(e)}).catch(()=>{})},[]),z=(0,r.useCallback)(()=>{R(),yr(),ke(!0)},[R]);(0,r.useEffect)(()=>{R(),yr()},[R]);let[Me,Ne]=(0,r.useState)(()=>typeof document>`u`||!document.hidden);(0,r.useEffect)(()=>{if(typeof document>`u`)return;let e=()=>{Ne(!document.hidden),document.hidden||(R(),yr())};return document.addEventListener(`visibilitychange`,e),()=>{document.removeEventListener(`visibilitychange`,e)}},[R]),(0,r.useEffect)(()=>{if(!Me)return;let e=setInterval(()=>{R(),yr()},Oe?fr:3e5);return()=>{clearInterval(e)}},[R,Oe,Me]),(0,r.useEffect)(()=>{let e=!0;return n().then(t=>{e&&(p(t),V(t.catalog??[]))}),()=>{e=!1}},[n]);let B=$(),H=Object.entries(u.byDay).filter(([e])=>e.startsWith(B.slice(0,7))).reduce((e,[,t])=>e+t.cost,0),U=u.byDay[B]?.cost??0,Fe=ir(u.byDay,B),Ie=(0,r.useMemo)(()=>rr(u.byDay).map(e=>{let t=u.byDay[e.date];return{date:e.date,cost:e.cost,tokens:t===void 0?0:t.input+t.output}}),[u.byDay]),Re=Object.entries(u.byDay).filter(([e])=>e.startsWith(B.slice(0,7))).reduce((e,[,t])=>e+t.input+t.output,0),ze=(()=>{let e=u.byDay[B];return e===void 0?0:e.input+e.output})(),Be=ir(u.byDay,B,e=>e.input+e.output),Ve=c(e=>e.enabled),He=c(e=>e.amount),Ue=c(e=>e.tierAlertDays),W=c(e=>e.lastTierSwitchAt),[Ge,Ke]=(0,r.useState)(()=>wn()),[qe,Je]=(0,r.useState)(null),[Ye,Xe]=(0,r.useState)(null),[Ze,Qe]=(0,r.useState)(()=>Date.now());(0,r.useEffect)(()=>{let e=setInterval(()=>Qe(Date.now()),fr);return()=>{clearInterval(e)}},[]);let $e=(0,r.useCallback)(e=>{Ke(e),Tn(e)},[]),G=S.some(e=>e.displayName===`Z.ai Coding Plan`&&e.status===`ok`),et=We(u.byTurn?.[0]?.model,G),tt=(0,r.useCallback)(()=>{Xe({entering:Le(Date.now())===`peak`?`offPeak`:`peak`,atMs:Date.now()+3*6e4,channel:et})},[et]),nt=He>0?He:u.budget??0,rt=Ve&&nt>0?H/nt>=1?`over`:H/nt>=.8?`warn`:`none`:`none`,it=(0,r.useCallback)(()=>{let e=!Ve;l.setEnabled(e),e&&typeof Notification<`u`&&Notification.permission==="default"&&Notification.requestPermission()},[l,Ve]);(0,r.useEffect)(()=>{if(!Ve||nt<=0)return;let e=H/nt*100,t=kn.filter(t=>e>=t&&Ue?.[String(t)]!==B);if(t.length===0)return;let n=t[t.length-1]??100;if(l.markTierAlerted(t,B),!Qn())return;let r=L(`budgetTierBody`).replace(`{cost}`,K(H)).replace(`{budget}`,K(nt)).replace(`{pct}`,String(n));er(`budget:${n}:${B}`,()=>{new Notification(L(`budget`),{body:r})})},[Ve,nt,H,Ue,B,l,L]),(0,r.useEffect)(()=>{let e=En(Ze,Ge,W,et);if(e===null||(l.markTierSwitchAlerted(e.atMs),Je(e),!Ge.webNotify||!Qn()))return;let t=Math.max(1,Math.round((e.atMs-Ze)/6e4)),n=L(e.entering===`peak`?`peakAlertTitlePeak`:`peakAlertTitleOff`),r=L(e.channel===`zhipu-coding-plan`?e.entering===`peak`?`tierAlertEnterPeakZhipu`:`tierAlertEnterOffZhipu`:e.entering===`peak`?`tierAlertEnterPeak`:`tierAlertEnterOff`).replace(`{minutes}`,String(t));er(`peak:${e.atMs}`,()=>{new Notification(n,{body:r})})},[Ze,W,Ge,et,S,u.byTurn,l,L]);let at=c(e=>e.lastBalanceAlertDay),st=u.lowBalanceThreshold??50,ct=(0,r.useMemo)(()=>{if(g.length===0)return;let e=Yn(u.byDay,B),t=Pe().rate;for(let n of g){if(n.totalBalance===void 0||n.error!==void 0)continue;let r=n.currency===`USD`?n.totalBalance*t:n.totalBalance;if(r>=st)continue;let i=e>0?Math.floor(r/e):void 0;return{name:n.displayName,cny:r,days:i}}},[g,u.lowBalanceThreshold,u.byDay,B]);(0,r.useEffect)(()=>{if(ct===void 0||at===B||(l.markBalanceAlerted(B),!Qn()))return;let e=L(`balanceLowBody`).replace(`{name}`,ct.name).replace(`{balance}`,K(ct.cny)).replace(`{days}`,ct.days===void 0?`—`:String(ct.days));er(`balance:${B}`,()=>{new Notification(L(`balance`),{body:e})})},[ct,at,B,l,L]);let lt=(0,r.useMemo)(()=>{let e=B.slice(0,7),t=new Map;for(let[n,r]of Object.entries(u.byDayModels??{}))if(n.startsWith(e))for(let[e,n]of Object.entries(r)){if(n.cost<=0)continue;let r=ot(e).provider,i=u.byModel?.[e]?.plan===!0,a=t.get(r)??{cost:0,plan:i};a.cost+=n.cost,i||(a.plan=!1),t.set(r,a)}let n,r;for(let e of t){let t=e[1].plan?r:n;(t===void 0||e[1].cost>t[1].cost)&&(e[1].plan?r=e:n=e)}let i=e=>{let t=g.find(t=>Q(t.provider)===Q(e));if(t===void 0||t.totalBalance===void 0){if(e===`Custom`){let e=g.filter(e=>e.totalBalance!==void 0&&e.error===void 0),t=e[0];return t!==void 0&&e.length===1?i(t.provider):void 0}return{text:t?.error===`unauthorized`?L(`balanceUnauthorized`):t?.error===`unreachable`||t?.error===`invalid`?L(`balanceUnreachable`):L(`balanceUnconfigured`),low:!1}}let n=t.currency===`USD`?`$${t.totalBalance.toFixed(2)}`:K(t.totalBalance),r=Pe().rate;return{text:n,low:(t.currency===`USD`?t.totalBalance*r:t.totalBalance)<st}},a=e=>{let t=S.find(t=>t.displayName===e||In(t.provider)===e);if(t===void 0||t.windows.length===0)return{text:L(`subscriptionNoApi`),low:!1};let n=t.windows.reduce((e,t)=>Math.min(e,t.remainingPercent),100);return{text:n<=0?L(`subscriptionExhausted`):L(`subscriptionRemaining`).replace(`{pct}`,String(n)),low:n<20}},o=n===void 0?void 0:i(n[0]);return{direct:n===void 0||o===void 0?void 0:{name:n[0],...o},sub:r===void 0?void 0:{name:r[0],...a(r[0])}}},[u.byDayModels,u.byModel,u.lowBalanceThreshold,g,S,B]),ut=(0,r.useMemo)(()=>{let e=u.total;return{input:e.input,output:e.output,cacheRead:e.cacheHit,cacheMiss:e.cacheMiss,calls:e.calls}},[u]);(0,r.useEffect)(()=>{i({todayCost:U,monthCost:H})},[U,H,i]),(0,r.useEffect)(()=>a(z),[a,z]);let dt=(0,r.useMemo)(()=>u.byTurn??[],[u.byTurn]);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(Dr,{...e,t:L,currency:ne,onOpen:z,monthCost:H,todayCost:U,weekCost:Fe,days:Ie,vendorStatus:lt,dash:ut,cardPrefs:be,monthTokens:Re,todayTokens:ze,weekTokens:Be,floatPrefs:ue,subscriptions:S,budgetPressure:rt}),Oe&&(0,o.jsx)(jr,{stats:Ee,t:L,onClose:je,userPrices:Ce,onUserPrices:Te,health:f,balances:g,...b===void 0?{}:{reconcile:b},quotas:S,relayQuotas:O,currency:ne,onCurrency:ce,language:ie,onLanguage:se,turns:dt,renderSlot:s,budgetEnabled:Ve,budgetAmount:nt,onToggleBudget:it,onBudgetAmount:l.setAmount,peakConfig:Ge,onPeakConfig:$e,onPreviewPeak:tt,floatPrefs:ue,onFloatPrefs:fe,cardPrefs:be,onCardPrefs:Se,sitePrefs:pe,onSitePrefs:I,liveCostPrefs:he,onLiveCostPrefs:ye,quotasStale:w}),(qe!==null||Ye!==null)&&(0,o.jsx)(Dn,{hit:qe??Ye,config:Ge,t:L,onDismiss:()=>{Je(null),Xe(null)}})]})}function Ir(e,t){return t===void 0||e?.bySession===void 0?0:e.bySession.find(e=>e.id===t)?.cost??0}function Lr(e,t){if(t===void 0||e?.byTurn===void 0)return 0;let n=0,r=-1;for(let i of e.byTurn)i.sessionId===t&&(r===-1||i.turn>r)&&(r=i.turn,n=i.cost);return n}function Rr(e,t=20){let n=[];for(let r of e)if(r.status===`ok`)for(let e of r.windows)e.remainingPercent>t||n.push({name:r.displayName,kind:e.kind,pct:e.remainingPercent});return n.sort((e,t)=>e.pct-t.pct).slice(0,3)}function zr(e,t){if(t===void 0||e?.byTurn===void 0)return;let n=-1,r;for(let i of e.byTurn)i.sessionId===t&&(n===-1||i.turn>n)&&(n=i.turn,r=i.model);return r}async function Br(){try{let e=await fetch(`/api/billing/usage-stats`);if(!e.ok)return null;let t=await e.text(),n=JSON.parse(t);if(typeof n!=`object`||!n)return null;let r=n;return{...Array.isArray(r.bySession)?{bySession:r.bySession}:{},...Array.isArray(r.byTurn)?{byTurn:r.byTurn}:{}}}catch{return null}}async function Vr(){try{let e=await fetch(`/api/billing/subscriptions`);if(!e.ok)return[];let t=JSON.parse(await e.text());if(typeof t!=`object`||!t||!(`quotas`in t))return[];let n=t.quotas;return Array.isArray(n)?n:[]}catch{return[]}}function Hr(e){switch(e){case`session`:return`subscriptionSession`;case`weekly`:return`subscriptionWeekly`;case`monthly`:return`subscriptionMonthly`;default:return`subscriptionBilling`}}function Ur({hasBandPlan:e}){let[t,n]=(0,r.useState)(()=>re()),[i,a]=(0,r.useState)(()=>Date.now());if((0,r.useEffect)(()=>{let e=()=>{n(re())};window.addEventListener(ne,e),window.addEventListener(`storage`,e);let t=setInterval(()=>{a(Date.now())},3e4);return()=>{window.removeEventListener(ne,e),window.removeEventListener(`storage`,e),clearInterval(t)}},[]),t.length===0)return null;let s=wn().leadMin*6e4,c=t.map(t=>({key:t,state:un(Ge(i,We(t,e)),s)})).filter(e=>e.state!==null);return c.length===0?null:(0,o.jsx)(`span`,{className:I.bandDots,"data-testid":`billing-pinned-dots`,children:c.map(e=>(0,o.jsx)(`span`,{className:d(I.bandDot,I.bandDotOn,I[e.state]),role:`img`,"aria-label":e.key,title:e.key},e.key))})}function Wr(){let[e,t]=(0,r.useState)(()=>te());return(0,r.useEffect)(()=>{let e=()=>{t(te())};return window.addEventListener(M,e),window.addEventListener(`storage`,e),()=>{window.removeEventListener(M,e),window.removeEventListener(`storage`,e)}},[]),e}function Gr(){let[e,t]=(0,r.useState)(()=>A().show),[n,i]=(0,r.useState)(()=>A().position);return(0,r.useEffect)(()=>{let e=()=>{t(A().show),i(A().position)};return window.addEventListener(k,e),window.addEventListener(`storage`,e),()=>{window.removeEventListener(k,e),window.removeEventListener(`storage`,e)}},[]),{visible:e,position:n}}function Kr(e){let[t,n]=(0,r.useState)(null),[i,a]=(0,r.useState)([]),[o,s]=(0,r.useState)(()=>Date.now());(0,r.useEffect)(()=>{let e=!1,t=()=>{Br().then(t=>{!e&&t!==null&&n(t)}),Vr().then(t=>{e||a(t)}),e||s(Date.now())};t();let r=setInterval(t,3e4);return()=>{e=!0,clearInterval(r)}},[e]);let c=(0,r.useMemo)(()=>Ir(t,e),[t,e]),l=(0,r.useMemo)(()=>Lr(t,e),[t,e]),u=(0,r.useMemo)(()=>Rr(i),[i]),d=(0,r.useMemo)(()=>We(zr(t,e),i.some(e=>e.displayName===`Z.ai Coding Plan`&&e.status===`ok`)),[t,e,i]);return{sessionCost:c,turnCost:l,tier:(0,r.useMemo)(()=>Ge(o,d),[o,d]),chips:u,hasBandPlan:i.some(e=>e.displayName===`Z.ai Coding Plan`&&e.status===`ok`)}}function qr({sessionId:e,t}){let{visible:n,position:r}=Gr(),{sessionCost:i,turnCost:a,tier:s,chips:c,hasBandPlan:l}=Kr(e),u=Wr(),f=e=>K(ht(e,u),u),p=i>0||a>0,m=s?.tier===`peak`;return!n||r===`toolbar`?null:(0,o.jsxs)(`span`,{className:r===`above`?d(I.feeBar,I.feeBarAbove):I.feeBar,"data-testid":`billing-live-cost-bar`,children:[(0,o.jsx)(Ur,{hasBandPlan:l}),s!==null&&(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(`span`,{className:m?I.feeChipPrimary:I.feeChipOff,"data-testid":`billing-live-tier`,children:t(m?`tierPeak`:`tierOff`)}),(0,o.jsx)(`span`,{className:I.feeCount,children:qe(s.nextSwitchInMs)}),(0,o.jsx)(`span`,{className:I.feeSuffix,children:t(m?`tierToOff`:`tierToPeak`)})]}),p&&(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(`span`,{className:I.feeSep,"aria-hidden":`true`,children:`·`}),(0,o.jsxs)(`span`,{className:I.feeItem,"data-testid":`billing-live-turn`,children:[t(`liveTurn`),` `,(0,o.jsx)(`span`,{className:I.feeNum,children:f(a)})]}),(0,o.jsx)(`span`,{className:I.feeSep,"aria-hidden":`true`,children:`·`}),(0,o.jsxs)(`span`,{className:I.feeItem,"data-testid":`billing-live-session`,children:[t(`liveSession`),` `,(0,o.jsx)(`span`,{className:I.feeNum,children:f(i)})]})]}),c.map(e=>(0,o.jsxs)(`span`,{children:[(0,o.jsx)(`span`,{className:I.feeSep,"aria-hidden":`true`,children:`·`}),(0,o.jsxs)(`span`,{className:e.pct<=10?I.feeChipError:I.feeChipAlert,"data-testid":`billing-live-quota`,children:[e.name,` `,t(Hr(e.kind)),` `,e.pct,`%`]})]},`${e.name}:${e.kind}`))]})}function Jr({sessionId:e,t}){let n=Wr(),r=e=>K(ht(e,n),n),{visible:i,position:s}=Gr(),{sessionCost:c,turnCost:l,tier:u,chips:d,hasBandPlan:f}=Kr(e);if(!i||s!==`toolbar`)return null;let p=u?.tier===`peak`,m=d.reduce((e,t)=>Math.min(e,t.pct),100),h=m<=10?I.feeInlineError:m<=20?I.feeInlineAlert:I.feeInline,g=[...u===null?[]:[`${qe(u.nextSwitchInMs)} ${t(p?`tierToOff`:`tierToPeak`)}`],`${t(`liveTurn`)} ${r(l)}`,`${t(`liveSession`)} ${r(c)}`,...d.map(e=>`${e.name} ${t(Hr(e.kind))} ${e.pct}%`)].join(` · `);return(0,o.jsx)(a.Tooltip,{label:g,side:`top`,delayMs:500,children:(0,o.jsxs)(`span`,{className:h,"data-testid":`billing-live-cost-chip`,role:`note`,"aria-label":g,children:[(0,o.jsx)(Ur,{hasBandPlan:f}),u!==null&&(0,o.jsx)(`span`,{className:p?I.feeChipPrimary:I.feeChipOff,"data-testid":`billing-live-tier`,children:t(p?`tierPeak`:`tierOff`)}),c>0&&(0,o.jsx)(`span`,{className:I.feeInlineNum,children:r(c)})]})})}function Yr(){let e,t,n=new Set;return{readCosts:()=>e,subscribeCosts:t=>(t(e),n.add(t),()=>{n.delete(t)}),openDashboard:()=>{t?.()},publishCosts:t=>{e=t;for(let e of n)try{e(t)}catch{}},registerOpen:e=>(t=e,()=>{t===e&&(t=void 0)})}}function Xr(){return(0,s.defineStore)({init:()=>({enabled:!1,amount:0,tierAlertDays:{},lastBalanceAlertDay:``,lastTierSwitchAt:0}),persist:`dsh.ui-usage-billing.budget`,actions:{setEnabled:(e,t)=>{e.enabled=t},setAmount:(e,t)=>{e.amount=Number.isFinite(t)&&t>0?t:0},markTierAlerted:(e,t,n)=>{e.tierAlertDays??={};for(let r of t)e.tierAlertDays[String(r)]=n},markBalanceAlerted:(e,t)=>{e.lastBalanceAlertDay=t},markTierSwitchAlerted:(e,t)=>{e.lastTierSwitchAt=t}}})}let Zr={enabled:!1,timeout:0};function Qr(){try{let e=localStorage.getItem(`dsh-billing-completion-notify-v1`);if(e===null)return{...Zr};let t=JSON.parse(e);return{enabled:t.enabled===!0,timeout:typeof t.timeout==`number`?t.timeout:0}}catch{return{...Zr}}}function $r(e){return e.completed===!0?!0:e.running===!1}function ei(e,t){let n=new Set,r=new Set,i,a=e.getSnapshot();for(let e of a.ids){let t=a.byId[e];t!==void 0&&(r.add(String(e)),$r(t)&&n.add(String(e)))}let o=e=>{let{enabled:n,timeout:r}=t();if(n&&!(typeof Notification>`u`)&&Notification.permission===`granted`)try{let t=new Notification(e,{body:e,tag:`dsh-billing-completion`,requireInteraction:r===0});r>0&&(i!==void 0&&clearTimeout(i),i=setTimeout(()=>t.close(),r*1e3))}catch{}},s=e.subscribe(()=>{let t=e.getSnapshot(),i=[];for(let e of t.ids){let a=t.byId[e];if(a===void 0)continue;let o=String(e),s=$r(a),c=!r.has(o);c&&r.add(o),s&&!c&&!n.has(o)&&i.push(a.title??a.id??o),s?n.add(o):n.delete(o)}if(i.length>0){let e=i.length===1?i[0]:`${i.length} 个会话已完成`;e!==void 0&&o(e)}});return()=>{s(),i!==void 0&&clearTimeout(i)}}let ti=[`slots`,`locale`,`remote`,`sessions`];function ni(e){let t=Yr();e.provide(`billingMetrics`,t);let n=Xr();e.effect(()=>e.locale.register(he,{zh:ge,en:_e}),`ui-usage-billing: dictionaries`),e.slots.inject(`sidebar.footer.action`,()=>e.slots.register({name:`sidebar.footer.action`,id:`usage-billing`,order:-10,locale:he,children:{"billing.dashboard.decor":{kind:`list`,scope:`root`}},store:n,inject:()=>({checkModels:async()=>{try{let[t,n]=await Promise.all([e.remote.llm.listProviders(),e.remote.llm.listConfigurableProviders()]);if(!t.ok||!n.ok)return{checked:!0,available:!1,models:0,failures:0,okProviders:[],badProviders:[]};let r=new Map(n.value.map(e=>[e.provider,e])),i=await Promise.all(t.value.map(async t=>{let n=r.get(t.id);if(n===void 0)return{provider:t,models:[]};let i=await e.remote.llm.discoverModels(n.settingsNs,{provider:t.id});return i.ok?{provider:t,models:i.value}:{provider:t,failed:!0}})),a=[],o=[],s=[],c=0;for(let e of i){if(`failed`in e){s.push(e.provider.name);continue}o.push(e.provider.name),c+=e.models.length;for(let t of e.models)a.push({id:t.id,...typeof t.name==`string`&&t.name!==``?{name:t.name}:{},provider:e.provider.name})}return{checked:!0,available:o.length>0,models:c,failures:s.length,okProviders:o,badProviders:s,catalog:a}}catch{return{checked:!1,available:!1,models:0,failures:0,okProviders:[],badProviders:[]}}},publishCosts:e=>{t.publishCosts(e)},registerOpen:e=>t.registerOpen(e)})},Fr)),e.slots.inject(`conversation.composer.dock`,()=>e.slots.register({name:`conversation.composer.dock`,id:`usage-billing-cost`,order:0,locale:he,inject:e=>({sessionId:l(e)})},qr)),e.slots.inject(`conversation.input.right`,()=>e.slots.register({name:`conversation.input.right`,id:`usage-billing-cost-chip`,order:0,locale:he,inject:e=>({sessionId:l(e)})},Jr)),e.effect(()=>ei(e.sessions.list,Qr),`ui-usage-billing: completion notifier`)}return n.UsageBilling=Fr,n.apply=ni,n.inject=ti,t.exports}});
1
+ window.__ModuleLoader__.load({id:`@kenz1117/dsh-ui-usage-billing`,factory:e=>{var t={exports:{}},n=t.exports;Object.defineProperty(n,Symbol.toStringTag,{value:`Module`});var r=Object.create,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.getPrototypeOf,c=Object.prototype.hasOwnProperty,l=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var s=o(t),l=0,u=s.length,d;l<u;l++)d=s[l],!c.call(e,d)&&d!==n&&i(e,d,{get:(e=>t[e]).bind(null,d),enumerable:!(r=a(t,d))||r.enumerable});return e},u=(e,t,n)=>(n=e==null?{}:r(s(e)),l(t||!e||!e.__esModule||!c.call(e,`default`)?i(n,`default`,{value:e,enumerable:!0}):n,e));let d=e("react"),f=e("react-dom"),p=e("@deepseek-ai/dsh-client-ui-primitives");p=u(p,1);let m=e("react/jsx-runtime"),h=e("@deepseek-ai/dsh-client-store");function g(e){return e}function _(e){return g(e)}function v(e){var t,n,r=``;if(typeof e==`string`||typeof e==`number`)r+=e;else if(typeof e==`object`){if(Array.isArray(e)){var i=e.length;for(t=0;t<i;t++)e[t]&&(n=v(e[t]))&&(r&&(r+=` `),r+=n)}else for(n in e)e[n]&&(r&&(r+=` `),r+=n)}return r}function y(){for(var e,t,n=0,r=``,i=arguments.length;n<i;n++)(e=arguments[n])&&(t=v(e))&&(r&&(r+=` `),r+=t);return r}let b={mode:`combined`,targets:[]},x=`dsh.ui-usage-billing.float`;function S(){let e=()=>({...b,targets:[...b.targets]});try{let t=localStorage.getItem(x);if(t===null)return e();let n=JSON.parse(t);return{mode:n.mode===`subscription`?`subscription`:`combined`,targets:Array.isArray(n.targets)?n.targets.filter(e=>typeof e==`string`):[]}}catch{return e()}}function C(e){try{localStorage.setItem(x,JSON.stringify(e))}catch{}}let w={metric:`money`,span:`day`},T=`dsh.ui-usage-billing.card`;function ee(){try{let e=localStorage.getItem(T);if(e===null)return{...w};let t=JSON.parse(e);return{metric:t.metric===`tokens`?`tokens`:`money`,span:t.span===`week`||t.span===`month`?t.span:`day`}}catch{return{...w}}}function E(e){try{localStorage.setItem(T,JSON.stringify(e))}catch{}}let D=`dsh.ui-usage-billing.kpi-range`;function O(){try{let e=localStorage.getItem(D);return e===`today`||e===`7d`||e===`week`||e===`month`||e===`all`?e:`all`}catch{return`all`}}function te(e){try{localStorage.setItem(D,e)}catch{}}let k={hideUnidentified:!0},A=`dsh.ui-usage-billing.sites`;function j(){try{let e=localStorage.getItem(A);return e===null?{...k}:{hideUnidentified:JSON.parse(e).hideUnidentified!==!1}}catch{return{...k}}}function ne(e){try{localStorage.setItem(A,JSON.stringify(e))}catch{}}let M={show:!0,position:`toolbar`},re=`dsh.ui-usage-billing.livecost`,ie=`dsh.ui-usage-billing.livecost-pref`;function ae(){try{let e=localStorage.getItem(re);if(e===null)return{...M};let t=JSON.parse(e);return{show:t.show!==!1,position:t.position===`above`||t.position===`toolbar`||t.position===`below`?t.position:M.position}}catch{return{...M}}}function oe(e){try{localStorage.setItem(re,JSON.stringify(e))}catch{}}let N=`dsh.ui-usage-billing.currency`,se=`dsh.ui-usage-billing.currency-pref`;function P(){try{let e=localStorage.getItem(N);return e===`usd`||e===`cny`||e===`eur`?e:`cny`}catch{return`cny`}}function F(e){try{localStorage.setItem(N,e)}catch{}}let ce=`dsh.ui-usage-billing.pinned-pref`;function le(){try{let e=JSON.parse(localStorage.getItem(`dsh.ui-usage-billing.pinned`)??`[]`);return Array.isArray(e)?e.filter(e=>typeof e==`string`&&e!==``):[]}catch{return[]}}function ue(e){try{localStorage.setItem(`dsh.ui-usage-billing.pinned`,JSON.stringify(e))}catch{}}let de=`dsh.ui-usage-billing.language`;function fe(){try{let e=localStorage.getItem(de);if(e===`en`||e===`zh`)return e;let t=P()===`usd`?`en`:`zh`;return pe(t),t}catch{return`zh`}}function pe(e){try{localStorage.setItem(de,e)}catch{}}function me(e){let t=le(),n=t.includes(e)?t.filter(t=>t!==e):[...t,e];return ue(n),n}let he=`dsh.ui-usage-billing.prices`;function ge(){try{let e=localStorage.getItem(he);if(e===null)return[];let t=JSON.parse(e);if(t===null)return[];let n=[],r=(e,t)=>{if(typeof t!=`object`||!t)return;let r=t,i=Number(r.input),a=Number(r.cacheHit),o=Number(r.output);if(![i,a,o].every(e=>Number.isFinite(e)&&e>=0))return;let s=r.offPeak,c;if(typeof s==`object`&&s){let e=s,t=Number(e.input),n=Number(e.cacheHit),r=Number(e.output);[t,n,r].every(e=>Number.isFinite(e)&&e>=0)&&(c={input:t,cacheHit:n,output:r})}n.push({key:e,...typeof r.origin==`string`&&r.origin!==``?{origin:r.origin}:{},input:i,cacheHit:a,output:o,...c===void 0?{}:{offPeak:c},...r.currency===`USD`?{currency:`USD`}:{}})};if(Array.isArray(t))for(let e of t){if(typeof e!=`object`||!e)continue;let t=e;typeof t.key==`string`&&t.key!==``&&r(t.key,e)}else if(typeof t==`object`)for(let[e,n]of Object.entries(t))r(e,n);return n}catch{return[]}}function _e(e){try{localStorage.setItem(he,JSON.stringify(e))}catch{}}let ve={metric:`ttft`},ye=`dsh.ui-usage-billing.perf`;function be(){try{let e=localStorage.getItem(ye);if(e===null)return{...ve};let t=JSON.parse(e);return{metric:t.metric===`tps`?`tps`:`ttft`,...Array.isArray(t.models)?{models:t.models.filter(e=>typeof e==`string`)}:{}}}catch{return{...ve}}}function xe(e){try{localStorage.setItem(ye,JSON.stringify(e))}catch{}}let Se=`@kenz1117/dsh-ui-usage-billing/UsageBilling.module.css`;if(typeof document<`u`&&document.querySelector(`style[data-plugin-css=`+JSON.stringify(Se)+`]`)===null){let e=document.createElement(`style`);e.dataset.plugin=`@kenz1117/dsh-ui-usage-billing`,e.dataset.pluginCss=Se,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<=200px){.KFXqYa_trigger{gap:6px;padding:8px 10px}.KFXqYa_triggerSpark{display:none}}@container KFXqYa_billing-trigger (width<=170px){.KFXqYa_triggerLabel{display:none}}@container KFXqYa_billing-trigger (width<=110px){.KFXqYa_triggerIcon,.KFXqYa_triggerSpark,.KFXqYa_triggerLabel{display:none}.KFXqYa_trigger{justify-content:center;padding:8px 6px}}.KFXqYa_triggerPop{box-sizing:border-box;border:1px solid var(--ds-border-strong);border-radius:var(--ds-r-3);background:var(--dsb-glass-strong);-webkit-backdrop-filter:blur(14px)saturate(1.2);width:256px;box-shadow:var(--ds-shadow-2);opacity:0;visibility:hidden;pointer-events:none;transition:opacity var(--ds-t-fast), transform var(--ds-t-fast), visibility 0s linear .16s;z-index:2000;flex-direction:column;gap:5px;padding:10px 12px;display:flex;position:fixed;top:0;left:0;overflow:hidden;transform:translateY(calc(4px - 100%))}.KFXqYa_triggerPop,.KFXqYa_triggerPop *{box-sizing:border-box}.KFXqYa_triggerPop:before{content:"";background:linear-gradient(90deg, transparent 10%, var(--ds-amber) 50%, transparent 90%);opacity:.65;pointer-events:none;height:1.5px;position:absolute;top:0;left:0;right:0}.KFXqYa_triggerPopShown{opacity:1;visibility:visible;transition:opacity var(--ds-t-fast), transform var(--ds-t-fast), visibility 0s linear 0s;transform:translateY(-100%)}.KFXqYa_popHead{justify-content:space-between;align-items:baseline;gap:8px;display:flex}.KFXqYa_popTitle{letter-spacing:.06em;text-transform:uppercase;color:var(--ds-t-3);font-size:12px;font-weight:700;line-height:18px}.KFXqYa_metricGrid{grid-template-columns:repeat(3,1fr);gap:10px 12px;display:grid}.KFXqYa_metricCell{flex-direction:column;gap:2px;min-width:0;display:flex}.KFXqYa_metricLabel{color:var(--ds-t-3);font-size:11px;line-height:14px}.KFXqYa_metricValue{color:var(--ds-t-1);font-variant-numeric:tabular-nums;white-space:nowrap;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:13px;font-weight:700;line-height:16px}.KFXqYa_metricValueSuccess{color:var(--ds-green)}.KFXqYa_popModel{border-top:1px dashed var(--ds-border);flex-direction:column;gap:6px;margin-top:9px;padding-top:10px;display:flex}.KFXqYa_popModelLabel{color:var(--ds-t-3);font-size:10px;line-height:14px}.KFXqYa_popModelRow{align-items:center;gap:8px;min-width:0;display:flex}.KFXqYa_popDot{border-radius:999px;flex:none;width:6px;height:6px}.KFXqYa_popDotDirect{background:var(--ds-green)}.KFXqYa_popDotSub{background:var(--ds-amber)}.KFXqYa_popDotNeutral{background:var(--ds-t-3)}.KFXqYa_popTagPrimary,.KFXqYa_popTagSub{white-space:nowrap;border-radius:5px;flex:none;align-items:center;height:18px;padding:0 6px;font-size:10px;font-weight:600;line-height:14px;display:inline-flex}.KFXqYa_popTagPrimary{background:color-mix(in srgb, var(--ds-blue) 14%, transparent);color:var(--ds-blue)}.KFXqYa_popTagSub{background:color-mix(in srgb, var(--ds-amber) 18%, transparent);color:var(--ds-amber)}.KFXqYa_popModelName{color:var(--ds-t-2);text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:500;line-height:16px;overflow:hidden}.KFXqYa_popModelStatus{color:var(--ds-t-1);font-variant-numeric:tabular-nums;white-space:nowrap;margin-left:auto;font-size:11px;font-weight:600;line-height:16px}.KFXqYa_popModelStatusLow{color:var(--ds-red)}.KFXqYa_dashboardModal{border:1px solid var(--ds-border-strong);border-radius:var(--ds-r-3);background:var(--dsb-2);width:min(760px,100vw - 48px);max-height:min(760px,88vh);box-shadow:var(--ds-shadow-2);animation:.16s ease-out KFXqYa_dashboardIn}@keyframes KFXqYa_dashboardIn{0%{opacity:0;transform:translateY(4px)scale(.98)}to{opacity:1;transform:none}}div[role=presentation]:has(>.dsh-billing-modal)>div[aria-hidden=true]:first-child{backdrop-filter:blur(8px)saturate(1.25)}.KFXqYa_dashboard{flex-direction:column;width:100%;max-height:min(760px,88vh);display:flex}.KFXqYa_dashboardHead{border-bottom:1px solid var(--ds-border);justify-content:space-between;align-items:center;gap:12px;padding:12px 18px;display:flex}.KFXqYa_dashboardTitle{color:var(--ds-t-1);margin:0;font-size:14px;font-weight:600;line-height:20px}.KFXqYa_dashboardSubtitle{color:var(--ds-t-3);margin:2px 0 0;font-size:11px;line-height:16px}.KFXqYa_closeButton{border:1px solid var(--ds-border);border-radius:var(--ds-r-1);width:32px;height:32px;color:var(--ds-t-2);cursor:pointer;transition:background-color var(--ds-t-fast), color var(--ds-t-fast);background:0 0;flex:none;justify-content:center;align-items:center;display:inline-flex}.KFXqYa_closeButton:hover{background:var(--dsb-3);color:var(--ds-t-1)}.KFXqYa_closeButton svg{stroke-width:2px;width:16px;height:16px}.KFXqYa_dashboardBody{flex-direction:column;gap:14px;padding:16px 24px 24px;display:flex;overflow-y:auto}.KFXqYa_modalFooter{border-top:1px solid var(--ds-border);color:var(--ds-t-3);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;padding:8px 18px;font-size:11px;line-height:16px;display:flex}.KFXqYa_tabNav{border:1px solid var(--ds-border);border-radius:var(--ds-r-1);background:var(--dsb);align-items:center;gap:4px;margin:14px 24px 0;padding:4px;display:flex}.KFXqYa_tabButton{color:var(--ds-t-3);cursor:pointer;transition:background-color var(--ds-t-fast), color var(--ds-t-fast), box-shadow var(--ds-t-fast);background:0 0;border:none;border-radius:6px;padding:6px 12px;font-size:12px;font-weight:500;line-height:16px}.KFXqYa_tabButton:hover{color:var(--ds-t-2)}.KFXqYa_tabButton:focus-visible{color:var(--ds-t-2);box-shadow:0 0 0 1px var(--ds-border-strong);outline:none}.KFXqYa_tabButtonActive,.KFXqYa_tabButtonActive:hover,.KFXqYa_tabButtonActive:focus-visible{background:var(--dsb-3);color:var(--ds-t-1);box-shadow:0 0 0 1px var(--ds-border-strong) inset;font-weight:600}.KFXqYa_tabPanel{flex-direction:column;gap:14px;animation:.14s ease-out KFXqYa_tabPanelIn;display:flex}@keyframes KFXqYa_tabPanelIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.KFXqYa_reconcileNotice{border:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 78%, transparent);background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 62%, transparent);color:var(--dsw-alias-label-secondary);border-radius:10px;align-items:flex-start;gap:10px;padding:10px 12px;font-size:12px;line-height:1.55;display:flex}.KFXqYa_reconcileIcon{color:var(--dsw-alias-label-tertiary);flex:none;margin-top:1px;display:inline-flex}.KFXqYa_reconcileText{flex:1}.KFXqYa_reconcileDismiss{color:var(--dsw-alias-label-tertiary);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:6px;flex:none;padding:2px 8px;font-size:12px;line-height:1.4;transition:color .15s,background-color .15s}.KFXqYa_reconcileDismiss:hover{color:var(--dsw-alias-label-primary);background:color-mix(in srgb, var(--dsw-alias-label-primary) 8%, transparent)}.KFXqYa_hero{border:1px solid var(--ds-border);border-radius:var(--ds-r-3);background:var(--dsb-glass-strong);flex-direction:column;gap:12px;padding:18px 20px;display:flex;position:relative;overflow:hidden}.KFXqYa_hero:after{content:"";background:linear-gradient(90deg, transparent 10%, var(--ds-amber) 50%, transparent 90%);opacity:.65;pointer-events:none;height:1.5px;position:absolute;top:0;left:0;right:0}.KFXqYa_heroTop{justify-content:space-between;align-items:center;gap:24px;display:flex}.KFXqYa_heroMain{flex-direction:column;gap:2px;min-width:0;display:flex}.KFXqYa_heroLabel{color:var(--ds-t-3);text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;font-size:11px;font-weight:500;line-height:15px}.KFXqYa_heroReadout{align-items:baseline;gap:4px;display:flex}.KFXqYa_heroCurrency{letter-spacing:-.01em;color:var(--ds-t-2);font-variant-numeric:tabular-nums;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:22px;font-weight:600;line-height:26px}.KFXqYa_heroValue{letter-spacing:-.03em;font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--ds-t-1);font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:52px;font-weight:600;line-height:56px}.KFXqYa_heroMeta{color:var(--ds-t-2);white-space:nowrap;margin-top:2px;font-size:12px;line-height:16px}.KFXqYa_heroGauge{flex-direction:column;flex:none;align-items:center;gap:4px;width:96px;display:flex}.KFXqYa_heroGaugeDial{flex:none;width:96px;height:96px;position:relative}.KFXqYa_heroGaugeSvg{width:100%;height:100%;display:block;transform:rotate(-90deg)}.KFXqYa_heroGaugeTrack{fill:none;stroke:var(--dsb-3);stroke-width:7px}.KFXqYa_heroGaugeArc{fill:none;stroke:var(--ds-blue);stroke-width:7px;stroke-linecap:round;transition:stroke-dasharray var(--ds-t-fast)}.KFXqYa_heroGaugeArcOver{stroke:var(--ds-red)}.KFXqYa_heroGaugeCenter{flex-direction:column;justify-content:center;align-items:center;gap:1px;display:flex;position:absolute;inset:0}.KFXqYa_heroGaugeRemain{letter-spacing:-.02em;font-variant-numeric:tabular-nums;color:var(--ds-t-1);font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:16px;font-weight:600;line-height:18px}.KFXqYa_heroGaugeRemainOver{color:var(--ds-red)}.KFXqYa_heroGaugeLabel{color:var(--ds-t-3);font-size:11px;line-height:13px}.KFXqYa_heroGaugeSub{font-variant-numeric:tabular-nums;color:var(--ds-t-2);white-space:nowrap;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;line-height:12px}.KFXqYa_heroSide{border-top:1px solid var(--ds-border);align-items:stretch;padding-top:12px;display:flex}.KFXqYa_heroSideItem{border-left:1px solid var(--ds-border);flex-direction:column;flex:1;gap:2px;min-width:0;padding-left:14px;display:flex}.KFXqYa_heroSideItem:first-child{border-left:none;padding-left:0}.KFXqYa_heroSideLabel{color:var(--ds-t-3);text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;font-size:10px;font-weight:500;line-height:13px}.KFXqYa_heroSideValue{color:var(--ds-t-1);font-variant-numeric:tabular-nums;letter-spacing:-.01em;white-space:nowrap;align-items:baseline;gap:6px;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:15px;font-weight:600;line-height:20px;display:inline-flex}.KFXqYa_heroSideSpacer{flex:1;display:block}.KFXqYa_delta{font-variant-numeric:tabular-nums;border-radius:999px;align-items:center;gap:2px;margin-left:6px;padding:1px 7px;font-size:10.5px;font-weight:600;line-height:16px;display:inline-flex}.KFXqYa_deltaUp{color:var(--ds-green);background:color-mix(in srgb, var(--ds-green) 12%, transparent)}.KFXqYa_deltaDown{color:var(--ds-red);background:color-mix(in srgb, var(--ds-red) 12%, transparent)}.KFXqYa_unpricedHint{border:1px solid color-mix(in srgb, var(--ds-amber) 30%, transparent);background:color-mix(in srgb, var(--ds-amber) 8%, transparent);color:var(--ds-amber);border-radius:8px;align-items:center;padding:8px 12px;font-size:11.5px;font-weight:500;line-height:17px;display:flex}.KFXqYa_kpiZone{flex-direction:column;gap:8px;display:flex}.KFXqYa_kpiZoneHead{justify-content:flex-end;align-items:center;gap:8px;display:flex}.KFXqYa_kpiZoneLabel{color:var(--ds-t-3);font-size:11px;line-height:14px}.KFXqYa_kpiGrid{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;display:grid}.KFXqYa_kpiTile{border:1px solid var(--ds-border);border-radius:var(--ds-r-2);background:var(--dsb-glass);transition:border-color var(--ds-t-fast);flex-direction:column;gap:2px;padding:14px 16px;display:flex;position:relative;overflow:hidden}.KFXqYa_kpiTile:hover{border-color:var(--ds-border-strong)}.KFXqYa_kpiLabel{color:var(--ds-t-3);text-transform:uppercase;letter-spacing:.04em;font-size:11px;font-weight:500;line-height:14px}.KFXqYa_kpiValue{color:var(--ds-t-1);font-variant-numeric:tabular-nums;letter-spacing:-.01em;margin-top:6px;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:22px;font-weight:600;line-height:26px}.KFXqYa_kpiGreen{color:var(--ds-green)}.KFXqYa_kpiDetail{color:var(--ds-t-3);white-space:nowrap;text-overflow:ellipsis;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:11px;line-height:15px;overflow:hidden}.KFXqYa_panel{border:1px solid var(--ds-border);border-radius:var(--ds-r-2);background:var(--dsb-glass);transition:border-color var(--ds-t-fast);flex-direction:column;gap:8px;padding:12px 14px;display:flex}.KFXqYa_panelHead{justify-content:space-between;align-items:baseline;gap:10px;display:flex}.KFXqYa_panelHeadControls{align-items:center;gap:8px;display:inline-flex}.KFXqYa_panelTitle{letter-spacing:-.005em;color:var(--ds-t-1);margin:0;font-size:13px;font-weight:600;line-height:20px}.KFXqYa_panelHint{color:var(--ds-t-3);white-space:nowrap;font-size:11px;line-height:16px}.KFXqYa_rangeToggle{border:1px solid var(--ds-border);background:var(--dsb-3);border-radius:8px;gap:2px;padding:2px;display:inline-flex}.KFXqYa_rangeButton{color:var(--ds-t-3);cursor:pointer;transition:background-color var(--ds-t-fast), color var(--ds-t-fast);background:0 0;border:none;border-radius:6px;padding:2px 8px;font-size:11px;line-height:16px}.KFXqYa_rangeButtonActive{background:var(--dsb-2);color:var(--ds-t-1);box-shadow:0 0 0 1px var(--ds-border-strong);font-weight:600}.KFXqYa_exportBar{justify-content:flex-end;align-items:center;gap:8px;display:flex}.KFXqYa_exportLabel{color:var(--ds-t-3);font-size:11px;line-height:16px}.KFXqYa_exportButton{border:1px solid var(--ds-border);color:var(--ds-t-2);cursor:pointer;transition:border-color var(--ds-t-fast), color var(--ds-t-fast), background-color var(--ds-t-fast);background:0 0;border-radius:999px;padding:4px 12px;font-size:11.5px;line-height:16px}.KFXqYa_exportButton:hover,.KFXqYa_exportButton:focus-visible{border-color:var(--ds-border-strong);color:var(--ds-t-1);outline:none}.KFXqYa_shareTrack{background:var(--dsb-3);border-radius:4px;height:8px;display:flex;overflow:hidden}.KFXqYa_shareSeg{height:100%;transition:width var(--ds-t-fast)}.KFXqYa_shareSegPeak{background:var(--ds-blue)}.KFXqYa_shareSegOff{background:color-mix(in srgb, var(--ds-blue) 30%, var(--dsb-3))}.KFXqYa_shareSegUser{background:var(--ds-blue)}.KFXqYa_shareSegAssistant{background:var(--ds-green)}.KFXqYa_shareSegTool{background:var(--ds-amber)}.KFXqYa_shareLegend{align-items:center;gap:16px;display:flex}.KFXqYa_shareItem{color:var(--ds-t-2);align-items:baseline;gap:6px;font-size:11px;line-height:17px;display:inline-flex}.KFXqYa_bucketCost{font-variant-numeric:tabular-nums;align-items:baseline;gap:3px;display:inline-flex}.KFXqYa_bucketOfficial{color:var(--ds-blue);font-weight:600}.KFXqYa_bucketSep{color:var(--ds-t-4)}.KFXqYa_bucketThird{color:var(--ds-t-2)}.KFXqYa_shareDot{border-radius:2px;flex:none;align-self:center;width:8px;height:8px}.KFXqYa_shareValue{color:var(--ds-t-1);font-variant-numeric:tabular-nums;font-weight:600}.KFXqYa_budgetInput{width:64px;color:var(--ds-t-1);font-variant-numeric:tabular-nums;text-align:right;background:0 0;border:none;padding:0;font-size:12px;line-height:16px}.KFXqYa_budgetInput:focus-visible{outline:none}.KFXqYa_switch{border:1px solid var(--ds-border);background:var(--dsb-3);cursor:pointer;width:32px;height:18px;transition:background-color var(--ds-t-fast), border-color var(--ds-t-fast);border-radius:999px;flex:none;padding:0;position:relative}.KFXqYa_switchOn{background:color-mix(in srgb, var(--ds-blue) 60%, transparent);border-color:#0000}.KFXqYa_switchKnob{width:12px;height:12px;transition:transform var(--ds-t-fast);background:#fff;border-radius:50%;position:absolute;top:2px;left:2px}.KFXqYa_switchOn .KFXqYa_switchKnob{transform:translate(14px)}.KFXqYa_budgetFillWarn{background:var(--ds-amber)}.KFXqYa_budgetFillOver{background:var(--ds-red)}.KFXqYa_chartWrap{width:100%;position:relative}.KFXqYa_chartSvg{width:100%;height:auto;display:block}.KFXqYa_chartEmpty{height:140px;color:var(--ds-t-3);justify-content:center;align-items:center;font-size:13px;display:flex}.KFXqYa_emptyRow{text-align:center;color:var(--ds-t-3);padding:28px 0;font-size:13px}.KFXqYa_chartGrid{stroke:var(--ds-border);stroke-width:1px}.KFXqYa_chartAxisLabel{fill:var(--ds-t-3);font-size:10px}.KFXqYa_chartBar{fill:var(--ds-blue);opacity:.7}.KFXqYa_chartBar:hover{opacity:1}.KFXqYa_chartStack{stroke:var(--dsb);stroke-width:.75px}.KFXqYa_chartStack:hover{opacity:.9}.KFXqYa_chartLine{stroke:var(--ds-blue);stroke-width:2px;stroke-linecap:round;stroke-linejoin:round}.KFXqYa_chartCrosshair{stroke:var(--ds-t-4);stroke-width:1px;stroke-dasharray:3 3}.KFXqYa_chartTooltip{pointer-events:none;z-index:2;border:1px solid var(--ds-border-strong);background:var(--dsb-2);box-shadow:var(--ds-shadow-1);white-space:nowrap;border-radius:8px;padding:8px 10px;position:absolute;transform:translate(-50%,calc(-100% - 10px))}.KFXqYa_chartTooltipAlignRight{transform:translate(calc(-100% - 8px),calc(-100% - 10px))}.KFXqYa_chartTooltipAlignLeft{transform:translate(8px,calc(-100% - 10px))}.KFXqYa_chartTooltipDate{color:var(--ds-t-1);margin-bottom:3px;font-size:11px;font-weight:600}.KFXqYa_chartTooltipRow{color:var(--ds-t-2);align-items:center;gap:5px;font-size:11px;line-height:17px;display:flex}.KFXqYa_chartTooltipRow strong{color:var(--ds-t-1);font-variant-numeric:tabular-nums;font-weight:600}.KFXqYa_chartTooltipHead{justify-content:space-between;align-items:baseline;gap:14px;margin-bottom:3px;display:flex}.KFXqYa_chartTooltipHead .KFXqYa_chartTooltipDate{margin-bottom:0}.KFXqYa_chartTooltipHead strong{color:var(--ds-t-1);font-variant-numeric:tabular-nums;font-size:11px;font-weight:600}.KFXqYa_chartTooltipSplit{justify-content:space-between;gap:14px}.KFXqYa_chartTooltipLabel{align-items:center;gap:5px;display:flex}.KFXqYa_chartTooltipModelDetail{color:var(--ds-t-3);font-variant-numeric:tabular-nums;margin:-2px 0 4px 13px;font-size:10.5px;line-height:14px}.KFXqYa_chartBarPlaceholder{fill:color-mix(in srgb, var(--ds-t-2) 30%, transparent)}.KFXqYa_chartLegendLine{background:var(--ds-blue);border-radius:2px;width:10px;height:3px;display:inline-block}.KFXqYa_chartLegendBar{background:var(--ds-blue);opacity:.5;border-radius:2px;width:7px;height:7px;display:inline-block}.KFXqYa_chartTooltipSwatch{border-radius:2px;flex:none;width:8px;height:8px;display:inline-block}.KFXqYa_chartLegend{color:var(--ds-t-2);justify-content:flex-end;gap:14px;margin-top:2px;font-size:11px;display:flex}.KFXqYa_chartLegend span{align-items:center;gap:5px;display:inline-flex}.KFXqYa_chartLegendItem{font:inherit;color:inherit;cursor:pointer;background:0 0;border:none;align-items:center;gap:5px;padding:0;transition:color .12s;display:inline-flex}.KFXqYa_chartLegendItem:hover{color:var(--ds-t-1)}.KFXqYa_chartLegendItemActive{color:var(--ds-t-1);font-weight:600}.KFXqYa_perfBar{align-items:center;margin:10px 0 2px;display:flex}.KFXqYa_perfChips{flex-wrap:wrap;gap:6px;margin:6px 0 2px;display:flex}.KFXqYa_perfChip{border:1px solid var(--ds-border);background:var(--dsb-3);color:var(--ds-t-2);cursor:pointer;transition:border-color var(--ds-t-fast), color var(--ds-t-fast), opacity var(--ds-t-fast);border-radius:999px;align-items:center;gap:5px;padding:2px 9px;font-size:11px;line-height:16px;display:inline-flex}.KFXqYa_perfChip:hover{color:var(--ds-t-1)}.KFXqYa_perfChipOff{opacity:.45}.KFXqYa_perfChipDot{border-radius:2px;flex:none;width:8px;height:8px;display:inline-block}.KFXqYa_chartHoverDot{stroke:var(--dsb-2);stroke-width:1.5px}.KFXqYa_tableScroll{border:1px solid var(--ds-border);border-radius:var(--ds-r-2);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);overflow:auto}.KFXqYa_ubAlert{border:1px solid color-mix(in srgb, var(--ds-blue) 30%, transparent);border-radius:var(--ds-r-1);background:color-mix(in srgb, var(--ds-blue) 8%, transparent);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;padding:10px 14px;font-size:12px;line-height:17px;display:flex}.KFXqYa_ubAlertLeft{align-items:center;gap:8px;display:inline-flex}.KFXqYa_ubRate{color:var(--ds-t-1);font-variant-numeric:tabular-nums;font-weight:600}.KFXqYa_ubAlertNote{color:var(--ds-t-2);margin:0}.KFXqYa_ubTag,.KFXqYa_ubTagSuccess,.KFXqYa_ubTagNeutral,.KFXqYa_ubTagAlert,.KFXqYa_ubTagPromo{border:1px solid var(--ds-border-strong);white-space:nowrap;border-radius:999px;align-items:center;gap:4px;padding:1px 5px;font-size:10px;font-weight:600;line-height:14px;display:inline-flex}.KFXqYa_ubTag{color:var(--ds-t-2);background:var(--dsb-2)}.KFXqYa_ubTagSuccess{color:var(--ds-green);border-color:color-mix(in srgb, var(--ds-green) 36%, transparent);background:color-mix(in srgb, var(--ds-green) 12%, transparent)}.KFXqYa_ubTagNeutral{color:var(--ds-t-2);background:var(--dsb-2)}.KFXqYa_ubTagAlert{color:var(--ds-amber);border-color:color-mix(in srgb, var(--ds-amber) 36%, transparent);background:color-mix(in srgb, var(--ds-amber) 12%, transparent)}.KFXqYa_ubTagPromo{color:var(--ds-red);border-color:color-mix(in srgb, var(--ds-red) 36%, transparent);background:color-mix(in srgb, var(--ds-red) 12%, transparent);cursor:help}.KFXqYa_ubExtraRow td{opacity:.72;padding-top:2px;padding-bottom:2px;font-size:12px}.KFXqYa_ubExtraName{color:var(--ds-t-2);margin-left:26px}.KFXqYa_ubExtraNote{color:var(--ds-t-3);margin-left:8px;font-size:10px}.KFXqYa_ubCard{border:1px solid var(--ds-border);border-radius:var(--ds-r-2);background:var(--dsb-glass);flex-direction:column;gap:12px;padding:16px 18px;display:flex}.KFXqYa_ubCardHead{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.KFXqYa_ubCardTitle{color:var(--ds-t-1);margin:0;font-size:13px;font-weight:600;line-height:18px}.KFXqYa_ubCardSub{color:var(--ds-t-3);font-size:11px;line-height:16px}.KFXqYa_ubTablewrap{border:1px solid var(--ds-border);border-radius:var(--ds-r-1);overflow:auto}.KFXqYa_ubTable{border-collapse:collapse;white-space:nowrap;width:100%;font-size:12px}.KFXqYa_ubTable th,.KFXqYa_ubTable td{border-bottom:1px solid var(--ds-border);text-align:left;color:var(--ds-t-1);padding:7px 9px}.KFXqYa_ubSearch{border:1px solid var(--ds-border);border-radius:var(--ds-r-1);width:200px;max-width:45%;color:var(--ds-t-1);background:0 0;outline:none;align-self:center;margin-left:auto;padding:5px 9px;font-size:12px;line-height:18px}.KFXqYa_bandDots{flex:none;align-items:center;gap:5px;display:inline-flex}.KFXqYa_bandDot{cursor:pointer;background:0 0;border:1.5px solid;border-radius:999px;flex:none;width:9px;height:9px;padding:0}.KFXqYa_bandDotOn{background:currentColor}.KFXqYa_offPeak{color:var(--ds-blue)}.KFXqYa_soon{color:var(--ds-amber)}.KFXqYa_peak{color:var(--ds-red)}span.KFXqYa_bandDot{cursor:default}.KFXqYa_ubTable th,.KFXqYa_ubTable td:first-child{white-space:normal}.KFXqYa_ubTable tbody tr:last-child td{border-bottom:0}.KFXqYa_ubTable thead th,.KFXqYa_ubTable thead th.KFXqYa_numCol{color:var(--ds-t-3);text-transform:uppercase;letter-spacing:.04em;text-align:center;padding:6px 9px;font-size:11px;font-weight:500}.KFXqYa_ubModel{align-items:center;gap:6px;display:inline-flex}.KFXqYa_vendorLetter{color:#fff;border-radius:4px;flex:none;justify-content:center;align-items:center;width:16px;height:16px;font-size:10px;font-weight:600;line-height:1;display:inline-flex}.KFXqYa_ubModelName{color:var(--ds-t-1);align-items:center;gap:4px;font-weight:500;display:inline-flex}.KFXqYa_ubChipPeak,.KFXqYa_ubChipOff{font-variant-numeric:tabular-nums;border-radius:999px;align-items:center;gap:4px;height:18px;padding:0 6px;font-size:11px;line-height:16px;display:inline-flex}.KFXqYa_ubChipLabel{font-size:10px;font-weight:600}.KFXqYa_ubChipPeak{background:color-mix(in srgb, var(--ds-blue) 12%, transparent);border:1px solid color-mix(in srgb, var(--ds-blue) 36%, transparent);color:var(--ds-blue)}.KFXqYa_ubChipOff{background:color-mix(in srgb, var(--ds-green) 12%, transparent);border:1px solid color-mix(in srgb, var(--ds-green) 36%, transparent);color:var(--ds-green)}.KFXqYa_ubNotes{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.KFXqYa_ubNotesItem{align-items:baseline;gap:10px;display:flex}.KFXqYa_ubNotesTerm{color:var(--ds-t-1);flex:0 0 72px;font-size:12px;font-weight:500}.KFXqYa_ubNotesDesc{min-width:0;color:var(--ds-t-2);flex:1;font-size:12px;line-height:17px}.KFXqYa_ubCardControlGroup{flex-wrap:wrap;align-items:center;gap:8px;display:inline-flex}.KFXqYa_ubTagError{white-space:nowrap;background:color-mix(in srgb, var(--ds-red) 12%, transparent);border:1px solid color-mix(in srgb, var(--ds-red) 36%, transparent);height:18px;color:var(--ds-red);border-radius:999px;align-items:center;padding:0 7px;font-size:10px;font-weight:600;line-height:14px;display:inline-flex}.KFXqYa_modelTable{border-collapse:collapse;table-layout:fixed;width:100%;min-width:640px;font-size:12px}.KFXqYa_modelTable th:first-child{width:26%}.KFXqYa_modelTable th,.KFXqYa_modelTable td{border-bottom:1px solid var(--ds-border);text-align:left;white-space:nowrap;color:var(--ds-t-1);padding:10px 12px}.KFXqYa_modelTable tbody tr:last-child td{border-bottom:0}.KFXqYa_sessionGroupRow{cursor:pointer}.KFXqYa_sessionGroupRow .KFXqYa_modelName:before{content:"›";color:var(--ds-t-3);margin-right:6px;display:inline-block}.KFXqYa_sessionGroupRow[aria-expanded=true] .KFXqYa_modelName:before{transform:rotate(90deg)}.KFXqYa_sessionChildRow td:first-child{padding-left:30px}.KFXqYa_modelTable thead th{color:var(--ds-t-3);text-transform:uppercase;letter-spacing:.04em;background:0 0;padding:8px 12px;font-size:11px;font-weight:500}.KFXqYa_modelTable tbody tr{transition:background-color .12s}.KFXqYa_modelTable tbody tr:hover{background:0 0}.KFXqYa_modelTable tbody tr.KFXqYa_modelRowFocusable{cursor:pointer}.KFXqYa_modelTable tbody tr.KFXqYa_modelRowActive,.KFXqYa_modelTable tbody tr.KFXqYa_modelRowActive:hover{background:color-mix(in srgb, var(--ds-blue) 10%, transparent)}.KFXqYa_numCol{text-align:right;font-family:var(--mono);font-variant-numeric:tabular-nums}.KFXqYa_modelTable .KFXqYa_numCol,.KFXqYa_ubTable .KFXqYa_numCol{text-align:right}.KFXqYa_na{color:var(--ds-t-4)}.KFXqYa_modelCell{align-items:center;gap:8px;display:inline-flex}.KFXqYa_modelDot{border-radius:2px;flex:none;width:8px;height:8px}.KFXqYa_modelName{color:var(--ds-t-1);font-weight:500;line-height:16px;display:block}.KFXqYa_modelProvider{color:var(--ds-t-3);font-size:10.5px;line-height:14px;display:block}.KFXqYa_siteRow{border:1px solid var(--ds-border);border-radius:var(--ds-r-1);background:var(--dsb-2);justify-content:space-between;align-items:center;gap:12px;padding:8px 10px;display:flex}.KFXqYa_siteRowName{align-items:center;gap:8px;min-width:0;display:inline-flex}.KFXqYa_siteKindTag{white-space:nowrap;border:1px solid #0000;border-radius:999px;flex:none;align-items:center;padding:2px 7px;font-size:10px;font-weight:600;line-height:14px;display:inline-flex}.KFXqYa_siteKindSite{color:var(--ds-blue);border-color:color-mix(in srgb, var(--ds-blue) 36%, transparent);background:color-mix(in srgb, var(--ds-blue) 12%, transparent)}.KFXqYa_siteKindDirect{color:var(--ds-green);border-color:color-mix(in srgb, var(--ds-green) 36%, transparent);background:color-mix(in srgb, var(--ds-green) 12%, transparent)}.KFXqYa_siteKindUnknown{color:var(--ds-red);border-color:color-mix(in srgb, var(--ds-red) 36%, transparent);background:color-mix(in srgb, var(--ds-red) 12%, transparent)}.KFXqYa_siteRowTitle{color:var(--ds-t-1);text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;line-height:18px;overflow:hidden}.KFXqYa_siteRowMeta{flex:none;align-items:center;gap:10px;display:inline-flex}.KFXqYa_siteRowCost{color:var(--ds-t-1);font-variant-numeric:tabular-nums;font-size:12.5px;font-weight:600;line-height:18px}.KFXqYa_siteRowCalls{color:var(--ds-t-2);font-variant-numeric:tabular-nums;font-size:11.5px;line-height:17px}.KFXqYa_siteRowCallsLow{color:var(--ds-red)}.KFXqYa_flatTag{color:var(--ds-t-3);font-size:10.5px;line-height:14px}.KFXqYa_healthDot{border-radius:50%;flex:none;width:6px;height:6px;display:inline-block}.KFXqYa_healthOk{background:var(--ds-green);box-shadow:0 0 0 3px color-mix(in srgb, var(--ds-green) 18%, transparent)}.KFXqYa_healthBad{background:var(--ds-red);box-shadow:0 0 0 3px color-mix(in srgb, var(--ds-red) 18%, transparent)}.KFXqYa_healthIdle{background:var(--ds-t-4)}.KFXqYa_dashboardRight{align-items:center;gap:8px;min-width:0;display:flex}.KFXqYa_healthBadge{white-space:nowrap;border-radius:999px;align-items:center;gap:6px;padding:3px 9px;font-size:11px;line-height:16px;display:inline-flex}.KFXqYa_healthBadgeOk{color:var(--ds-green);background:var(--dsb-2)}.KFXqYa_healthBadgeBad{color:var(--ds-red);background:var(--dsb-2)}.KFXqYa_planTag{color:var(--ds-green);white-space:nowrap;align-items:center;gap:4px;font-size:10px;font-weight:500;line-height:14px;display:inline-flex}.KFXqYa_planTagBadge{background:color-mix(in srgb, var(--ds-green) 20%, transparent);border-radius:4px;padding:0 4px;font-size:9px;line-height:12px}.KFXqYa_uncataloguedTag{border:1px solid color-mix(in srgb, var(--ds-amber) 36%, transparent);vertical-align:1px;color:var(--ds-amber);background:color-mix(in srgb, var(--ds-amber) 12%, transparent);border-radius:999px;margin-left:6px;padding:0 6px;font-size:10px;font-weight:600;line-height:16px;display:inline-block}.KFXqYa_estimatedTag{border:1px solid color-mix(in srgb, var(--ds-blue) 36%, transparent);vertical-align:1px;color:var(--ds-blue);background:color-mix(in srgb, var(--ds-blue) 12%, transparent);border-radius:999px;margin-left:6px;padding:0 6px;font-size:10px;font-weight:600;line-height:16px;display:inline-block}.KFXqYa_feeBar{border:1px solid var(--ds-border-strong);background:var(--dsb-glass-strong);backdrop-filter:blur(14px)saturate(1.3);color:var(--ds-t-2);font-variant-numeric:tabular-nums;border-radius:999px;flex-wrap:wrap;align-items:center;gap:8px;padding:6px 12px;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:11px;line-height:16px;display:inline-flex}.KFXqYa_feeBarAbove{order:-1;align-self:center;margin-bottom:8px}.KFXqYa_feeInline{font-variant-numeric:tabular-nums;white-space:nowrap;cursor:default;border-radius:999px;align-self:center;align-items:center;gap:5px;height:22px;padding:0 4px;font-size:11px;line-height:16px;display:inline-flex}.KFXqYa_feeInline .KFXqYa_feeChipPrimary,.KFXqYa_feeInline .KFXqYa_feeChipOff{height:18px;padding:0 7px}.KFXqYa_feeInlineNum{color:var(--ds-t-1);padding-right:6px;font-weight:600}.KFXqYa_feeInlineAlert{background:color-mix(in srgb, var(--ds-amber) 12%, transparent)}.KFXqYa_feeInlineAlert .KFXqYa_feeInlineNum{color:var(--ds-amber)}.KFXqYa_feeInlineError{background:color-mix(in srgb, var(--ds-red) 12%, transparent)}.KFXqYa_feeInlineError .KFXqYa_feeInlineNum{color:var(--ds-red)}.KFXqYa_feeBar .KFXqYa_feeSep{color:var(--ds-t-4)}.KFXqYa_feeCount{color:var(--ds-t-1);font-weight:600}.KFXqYa_feeSuffix{color:var(--ds-t-3)}.KFXqYa_feeItem{color:var(--ds-t-2);white-space:nowrap}.KFXqYa_feeNum{color:var(--ds-t-1);font-weight:600}.KFXqYa_feeSep{color:var(--ds-t-4)}.KFXqYa_feeChipPrimary,.KFXqYa_feeChipOff,.KFXqYa_feeChipAlert,.KFXqYa_feeChipError{border:1px solid var(--ds-border);background:var(--dsb-3);font-variant-numeric:tabular-nums;white-space:nowrap;border-radius:999px;align-items:center;height:20px;padding:0 8px;font-size:10px;font-weight:600;line-height:14px;display:inline-flex}.KFXqYa_feeChipPrimary{color:var(--ds-blue);border-color:color-mix(in srgb, var(--ds-blue) 30%, transparent)}.KFXqYa_feeChipOff{color:var(--ds-cyan);border-color:color-mix(in srgb, var(--ds-cyan) 30%, transparent)}.KFXqYa_feeChipAlert{color:var(--ds-amber);border-color:color-mix(in srgb, var(--ds-amber) 30%, transparent)}.KFXqYa_feeChipError{color:var(--ds-red);border-color:color-mix(in srgb, var(--ds-red) 30%, transparent)}.KFXqYa_balanceCell{align-items:center;gap:6px;display:inline-flex;position:relative}.KFXqYa_providerGroupRecharge{border:1px solid color-mix(in srgb, var(--ds-c-1) 38%, transparent);background:color-mix(in srgb, var(--ds-c-1) 8%, transparent);color:var(--ds-c-1);white-space:nowrap;border-radius:999px;justify-content:center;align-items:center;min-width:48px;padding:1px 8px;font-size:10.5px;font-weight:600;line-height:16px;text-decoration:none;display:inline-flex}.KFXqYa_providerGroupRecharge:empty{background:0 0;border-color:#0000}.KFXqYa_providerGroupRecharge:hover{background:color-mix(in srgb, var(--ds-c-1) 15%, transparent);border-color:color-mix(in srgb, var(--ds-c-1) 60%, transparent)}.KFXqYa_balanceDaysBadge{border:1px solid var(--ds-border-strong);background:var(--dsb-2);min-width:16px;height:16px;color:var(--ds-t-2);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;padding:0 4px;font-size:10px;font-weight:600;line-height:1;display:inline-flex}.KFXqYa_balanceDaysBadge:hover{border-color:var(--ds-t-3);color:var(--ds-t-1)}.KFXqYa_balanceDaysBadgeLow{color:var(--ds-red);border-color:color-mix(in srgb, var(--ds-red) 36%, transparent);background:color-mix(in srgb, var(--ds-red) 12%, transparent)}.KFXqYa_balanceDetailPop{z-index:20;background:var(--dsb-2);border:1px solid var(--ds-border-strong);min-width:180px;box-shadow:var(--ds-shadow-1);white-space:nowrap;border-radius:8px;flex-direction:column;gap:6px;padding:8px 10px;display:inline-flex;position:absolute;top:calc(100% + 6px);right:0}.KFXqYa_balanceDetailHead{justify-content:space-between;align-items:center;gap:12px;display:flex}.KFXqYa_balanceDetailTitle{color:var(--ds-t-1);font-size:12px;font-weight:600}.KFXqYa_balanceDetailClose{cursor:pointer;color:var(--ds-t-3);background:0 0;border:none;font-size:14px;line-height:1}.KFXqYa_balanceDetailClose:hover{color:var(--ds-t-1)}.KFXqYa_balanceDetailGrid{flex-direction:column;gap:4px;display:inline-flex}.KFXqYa_balanceDetailRow{color:var(--ds-t-2);font-variant-numeric:tabular-nums;justify-content:space-between;gap:16px;font-size:11px;line-height:15px;display:flex}.KFXqYa_balanceDetailLabel{color:var(--ds-t-3)}.KFXqYa_balanceDetailValue{color:var(--ds-t-1);font-weight:500}.KFXqYa_currencyToggle{background:var(--dsw-alias-bg-layer-3);border:none;border-radius:8px;align-items:center;gap:2px;margin-right:8px;padding:2px;display:inline-flex}.KFXqYa_currencyButton{color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;background:0 0;border:0;border-radius:6px;padding:4px 8px;font-size:11px;font-weight:700;line-height:1}.KFXqYa_currencyButtonActive{background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary)}.KFXqYa_subscriptionGrid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px;margin-top:10px;display:grid}.KFXqYa_subscriptionCard{border:1px solid var(--ds-border);border-radius:var(--ds-r-2);background:var(--dsb-glass);-webkit-backdrop-filter:blur(12px)saturate(1.3);transition:border-color var(--ds-t-fast);padding:14px 16px;position:relative;overflow:hidden}.KFXqYa_subscriptionHead{flex-wrap:wrap;align-items:baseline;gap:6px;margin-bottom:8px;display:flex}.KFXqYa_subscriptionName{color:var(--ds-t-1);font-size:13px;font-weight:600}.KFXqYa_subscriptionPlan{color:var(--ds-t-2);font-size:11px}.KFXqYa_subscriptionPlan[data-kind=code],.KFXqYa_subscriptionPlan[data-kind=token]{color:var(--ds-t-2);background:var(--dsb-3);border-radius:999px;padding:1px 8px;font-weight:500}.KFXqYa_subscriptionTier{color:var(--ds-t-3);margin-left:6px}.KFXqYa_subscriptionAuto{border:1px solid color-mix(in srgb, var(--ds-blue) 36%, transparent);color:var(--ds-blue);background:color-mix(in srgb, var(--ds-blue) 12%, transparent);border-radius:999px;margin-left:6px;padding:1px 6px;font-size:10px}.KFXqYa_subscriptionStatus{color:var(--ds-t-2);margin-bottom:6px;font-size:11px}.KFXqYa_subscriptionWindow{align-items:center;gap:10px;margin-top:8px;font-size:11px;display:flex}.KFXqYa_subscriptionWindowLabel{color:var(--ds-t-3);flex:0 0 44px}.KFXqYa_subscriptionTrack{background:var(--dsb-3);height:6px;box-shadow:inset 0 0 0 1px var(--ds-border);border-radius:3px;flex:1;overflow:hidden}.KFXqYa_subscriptionFill{background:var(--ds-blue);height:calc(100% - 2px);transition:width var(--ds-t-fast);border-radius:2px;margin:1px;display:block}.KFXqYa_subscriptionFillWarn{background:var(--ds-amber)}.KFXqYa_subscriptionFillOver{background:var(--ds-red)}.KFXqYa_subscriptionMeta{flex-direction:column;flex:none;align-items:flex-end;gap:2px;display:flex}.KFXqYa_subscriptionPct{text-align:right;min-width:52px;font-family:var(--mono);font-variant-numeric:tabular-nums;color:var(--ds-t-1);flex:none}.KFXqYa_subscriptionExhausted{color:var(--ds-red);min-width:52px;font-weight:600}.KFXqYa_subscriptionReset{color:var(--ds-t-3);white-space:nowrap;flex:none;font-size:10px}.KFXqYa_providerGroupList{flex-direction:column;gap:10px;display:flex}.KFXqYa_providerGroup{border:1px solid var(--ds-border);border-radius:var(--ds-r-2);background:var(--dsb-glass);padding:12px 14px}.KFXqYa_providerGroupHead{justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:10px;display:flex}.KFXqYa_providerGroupTitle{align-items:center;gap:7px;min-width:0;display:inline-flex}.KFXqYa_kindBadge{border:1px solid color-mix(in srgb, var(--ds-c-1) 32%, transparent);background:color-mix(in srgb, var(--ds-c-1) 10%, transparent);color:var(--ds-c-1);border-radius:4px;flex:none;padding:1px 6px;font-size:10px;font-weight:600;line-height:15px}.KFXqYa_kindBadgeRelay{border-color:color-mix(in srgb, var(--ds-c-2) 32%, transparent);background:color-mix(in srgb, var(--ds-c-2) 10%, transparent);color:var(--ds-c-2)}.KFXqYa_kindBadgeUnknown{border-color:var(--ds-border);background:color-mix(in srgb, var(--ds-t-3) 12%, transparent);color:var(--ds-t-3)}.KFXqYa_providerGroupName{color:var(--ds-t-1);font-size:13px;font-weight:600;line-height:18px}.KFXqYa_providerGroupMeta{flex:none;align-items:center;gap:10px;display:inline-flex}.KFXqYa_providerGroupBadge{border:1px solid color-mix(in srgb, var(--ds-green) 36%, transparent);color:var(--ds-green);background:color-mix(in srgb, var(--ds-green) 12%, transparent);border-radius:999px;justify-content:center;align-items:center;padding:1px 8px;font-size:10px;font-weight:500;line-height:16px;display:inline-flex}.KFXqYa_providerGroupBalance,.KFXqYa_providerGroupCost{color:var(--ds-t-2);font-variant-numeric:tabular-nums;white-space:nowrap;justify-content:flex-end;align-items:baseline;gap:6px;min-width:118px;font-size:12px;line-height:17px;display:inline-flex}.KFXqYa_providerGroupCostLabel{font-size:11px}.KFXqYa_providerGroupCostValue{color:var(--ds-t-1);text-align:right;min-width:56px;font-weight:600}.KFXqYa_providerGroupBalanceLabel{color:var(--ds-t-3);font-size:11px;line-height:17px}.KFXqYa_rounds{margin-top:10px}.KFXqYa_roundsBars{align-items:flex-end;gap:3px;height:124px;padding:16px 2px 0;display:flex;overflow-x:auto}.KFXqYa_roundsBarCol{border-radius:5px 5px 0 0;flex-direction:column;flex:1 0 28px;justify-content:flex-end;align-items:stretch;height:100%;display:flex;position:relative}.KFXqYa_roundsBarColPeak{background:color-mix(in srgb, var(--ds-amber) 16%, transparent)}.KFXqYa_roundsBarColOff{background:var(--dsb-3)}.KFXqYa_roundsBarLabel{text-align:center;color:var(--ds-t-2);white-space:nowrap;text-overflow:ellipsis;max-width:100%;font-size:9px;line-height:1.2;position:absolute;bottom:0;left:0;right:0;overflow:hidden;transform:translateY(-100%)}.KFXqYa_roundsBarWrap{flex:1;align-items:flex-end;min-height:0;display:flex}.KFXqYa_roundsBar{background:var(--ds-blue);border-radius:2px 2px 0 0;width:100%;min-height:2px;position:relative}.KFXqYa_roundsBarFlagged{background:var(--ds-red);border-radius:2px 2px 0 0;width:100%;min-height:2px;position:relative}.KFXqYa_roundsFlagMark{background:var(--ds-red);border-radius:50%;width:7px;height:7px;position:absolute;top:-3px;right:-3px}.KFXqYa_roundsAxis{color:var(--ds-t-3);justify-content:space-between;margin-top:6px;font-size:10px;display:flex}.KFXqYa_roundsEmpty{color:var(--ds-t-2);margin-top:10px;font-size:12px}.KFXqYa_heatmap{margin-top:10px}.KFXqYa_heatmapGrid{grid-template-columns:repeat(7,minmax(0,1fr));gap:3px;display:grid}.KFXqYa_heatmapCellEmpty{box-sizing:border-box;border:1px dashed var(--ds-border);height:30px;color:var(--ds-t-4);font-variant-numeric:tabular-nums;background:0 0;border-radius:2px;justify-content:center;align-items:center;font-size:11px;display:flex}.KFXqYa_heatmapCell{font-variant-numeric:tabular-nums;cursor:pointer;border:0;border-radius:2px;justify-content:center;align-items:center;height:30px;padding:0;font-size:11px;display:flex}.KFXqYa_heatmapCell[data-level="0"],.KFXqYa_heatmapCell[data-level="1"],.KFXqYa_heatmapCell[data-level="2"]{color:var(--dsw-alias-label-primary)}.KFXqYa_heatmapCell[data-level="3"],.KFXqYa_heatmapCell[data-level="4"]{color:var(--dsw-static-neutral-bluish-00)}.KFXqYa_heatmapFooter{color:var(--dsw-alias-label-secondary);align-items:center;gap:8px;margin-top:10px;font-size:10px;display:flex}.KFXqYa_heatmapLegend{gap:3px;display:inline-flex}.KFXqYa_heatmapLegend i{border-radius:2px;width:14px;height:14px;display:block}.KFXqYa_heatmapHover{font-variant-numeric:tabular-nums;margin-left:auto;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace}.KFXqYa_heatmapRangeSwitch{gap:4px;margin-left:auto;display:inline-flex}.KFXqYa_heatmapRangeButton{border:1px solid var(--ds-border);color:var(--ds-t-2);cursor:pointer;background:0 0;border-radius:6px;padding:2px 8px;font-size:11px;line-height:1.4}.KFXqYa_heatmapRangeButtonActive{border-color:var(--ds-border-strong);color:var(--ds-t-1);font-weight:600}.KFXqYa_heatmapYear{flex-direction:column;gap:6px;display:flex}.KFXqYa_heatmapYearBody{align-items:flex-start;gap:6px;display:flex}.KFXqYa_heatmapYearWeekdays{color:var(--ds-t-3);flex:none;grid-template-rows:repeat(7,11px);gap:3px;padding-top:12px;font-size:9px;line-height:11px;display:grid}.KFXqYa_heatmapYearWeekday{white-space:nowrap;text-align:right;height:11px}.KFXqYa_heatmapYearMonths{min-width:max-content;color:var(--ds-t-3);grid-template-columns:repeat(52,11px);gap:3px;font-size:9px;line-height:12px;display:grid;overflow:visible}.KFXqYa_heatmapYearMonth{white-space:nowrap;overflow:visible}.KFXqYa_heatmapYearScroll{padding-bottom:2px;overflow-x:auto}.KFXqYa_heatmapYearGrid{grid-template-rows:repeat(7,11px);grid-auto-flow:column;gap:3px;min-width:max-content;display:grid}.KFXqYa_heatmapYearCell{cursor:pointer;border:0;border-radius:2px;width:11px;height:11px;padding:0}.KFXqYa_heatmapHalf .KFXqYa_heatmapYearWeekdays{grid-template-rows:repeat(7,16px);line-height:16px}.KFXqYa_heatmapHalf .KFXqYa_heatmapYearWeekday{height:16px}.KFXqYa_heatmapHalf .KFXqYa_heatmapYearMonths{grid-template-columns:repeat(26,16px)}.KFXqYa_heatmapHalf .KFXqYa_heatmapYearGrid{grid-template-rows:repeat(7,16px)}.KFXqYa_heatmapHalf .KFXqYa_heatmapYearCell{border-radius:3px;width:16px;height:16px}.KFXqYa_floatSub{flex-direction:column;gap:6px;min-width:0;display:flex}.KFXqYa_floatSubHead{flex-wrap:wrap;align-items:baseline;gap:6px;min-width:0;display:flex}.KFXqYa_floatSubName{color:var(--dsw-alias-label-primary);font-size:12px;font-weight:700}.KFXqYa_floatSubPlan{color:var(--dsw-alias-label-secondary);font-size:10px}.KFXqYa_floatSub .KFXqYa_subscriptionWindow{flex-wrap:wrap;gap:4px 10px}.KFXqYa_floatSub .KFXqYa_subscriptionWindowLabel{flex:none}.KFXqYa_floatSub .KFXqYa_subscriptionMeta{min-width:0;max-width:100%}.KFXqYa_floatSub .KFXqYa_subscriptionPct{min-width:0}.KFXqYa_floatSub .KFXqYa_subscriptionReset{white-space:normal;overflow-wrap:anywhere}.KFXqYa_triggerPopEmpty{color:var(--dsw-alias-label-tertiary);padding:2px 0;font-size:11px;line-height:1.5}.KFXqYa_triggerPopSwitcher{justify-content:flex-end;align-items:center;gap:8px;margin-top:2px;display:flex}.KFXqYa_triggerPopSwitchCount{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;font-size:10px}.KFXqYa_floatModeBtn{border:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 75%, transparent);background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 60%, transparent);color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;border-radius:10px;flex:1;padding:7px 10px;font-size:12px}.KFXqYa_floatModeBtnOn{border-color:var(--ds-blue);color:var(--dsw-alias-label-primary);background:color-mix(in srgb, var(--ds-blue) 16%, transparent)}.KFXqYa_rdoRow{justify-content:space-between;align-items:center;gap:8px;margin-top:10px;display:flex}.KFXqYa_rdoLabel{color:var(--dsw-alias-label-secondary);font-size:12px}.KFXqYa_rdoSelect{border:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 75%, transparent);background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 60%, transparent);color:var(--dsw-alias-label-primary);white-space:nowrap;cursor:pointer;border-radius:10px;align-items:center;gap:5px;padding:5px 8px 5px 10px;font-size:12px;display:inline-flex}.KFXqYa_rdoSelect:hover{background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 85%, transparent)}.KFXqYa_rdoSelect:focus-visible{border-color:var(--ds-blue);outline:none}.KFXqYa_rdoChevron{color:var(--dsw-alias-label-tertiary);transition:transform .15s;display:inline-flex}.KFXqYa_rdoChevronOpen{transform:rotate(180deg)}.KFXqYa_floatTarget{color:var(--dsw-alias-label-secondary);cursor:pointer;align-items:center;gap:5px;font-size:12px;display:inline-flex}.KFXqYa_floatTargetLabel{color:var(--dsw-alias-label-secondary)}.KFXqYa_staleNotice{color:var(--ds-amber);background:color-mix(in srgb, var(--ds-amber) 12%, transparent);border:1px solid color-mix(in srgb, var(--ds-amber) 30%, transparent);border-radius:10px;align-items:center;gap:6px;margin:0 0 10px;padding:8px 10px;font-size:11px;display:flex}.KFXqYa_plgHead{align-items:flex-start;gap:12px;display:flex}.KFXqYa_plgIcon{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);width:40px;height:40px;color:var(--dsw-alias-label-secondary);border-radius:10px;flex:none;justify-content:center;align-items:center;display:inline-flex}.KFXqYa_plgTitle{flex-direction:column;gap:4px;min-width:0;display:flex}.KFXqYa_plgNameRow{align-items:center;gap:8px;display:flex}.KFXqYa_plgName{color:var(--dsw-alias-label-primary);margin:0;font-size:13px;font-weight:600;line-height:18px}.KFXqYa_plgTag{height:18px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-3);white-space:nowrap;border-radius:5px;align-items:center;padding:0 6px;font-size:10px;font-weight:600;display:inline-flex}.KFXqYa_plgDesc{color:var(--dsw-alias-label-secondary);margin:0;font-size:11px;line-height:16px}.KFXqYa_plgGrid{border-top:1px solid var(--dsw-alias-border-l1);grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding-top:12px;display:grid}.KFXqYa_plgItem{flex-direction:column;gap:2px;min-width:0;display:flex}.KFXqYa_plgLabel{color:var(--dsw-alias-label-tertiary);font-size:10px;line-height:14px}.KFXqYa_plgVal{color:var(--dsw-alias-label-primary);word-break:break-all;font-size:12px;line-height:17px}.KFXqYa_plgLink{color:var(--ds-blue);word-break:break-all;font-size:12px;line-height:17px;text-decoration:none}.KFXqYa_plgLink:hover{text-decoration:underline}.KFXqYa_tokenPanel{flex-direction:column;gap:14px;display:flex}.KFXqYa_tokenModelBar{background:var(--dsw-alias-bg-layer-2);border-radius:999px;height:8px;overflow:hidden}.KFXqYa_tokenModelParts{height:100%;display:flex}.KFXqYa_tokenModelPartIn{background:var(--ds-blue)}.KFXqYa_tokenModelPartOut{background:var(--ds-amber)}.KFXqYa_tokenModelShareRow{align-items:center;gap:6px;display:inline-flex}@media (width<=640px){.KFXqYa_kpiGrid{grid-template-columns:repeat(2,minmax(0,1fr))}.KFXqYa_hero{gap:14px}.KFXqYa_heroTop{flex-direction:column;align-items:flex-start;gap:12px}.KFXqYa_heroGauge{width:72px;height:72px}.KFXqYa_heroSide{gap:12px}.KFXqYa_heroSideSpacer{display:none}}.KFXqYa_peakCard{z-index:2000;border-radius:var(--ds-r-2);border:1px solid var(--ds-border-strong);background:var(--dsb-glass-strong);-webkit-backdrop-filter:blur(14px)saturate(1.2);min-width:280px;max-width:380px;box-shadow:var(--ds-shadow-2);animation:KFXqYa_peakAlertIn var(--ds-t-fast);flex-direction:column;gap:12px;padding:14px 16px;display:flex;position:fixed}.KFXqYa_peakCardCorner{bottom:18px;right:18px}.KFXqYa_peakCardCenter{top:20%;left:50%;transform:translate(-50%)}.KFXqYa_peakCardPeak{color:var(--ds-blue)}.KFXqYa_peakCardOff{color:var(--ds-cyan)}.KFXqYa_peakHead{justify-content:space-between;align-items:center;gap:8px;display:flex}.KFXqYa_peakTag{white-space:nowrap;border-radius:6px;align-items:center;gap:6px;height:20px;padding:0 8px;font-size:11px;font-weight:600;line-height:14px;display:inline-flex}.KFXqYa_peakTagPrimary{background:var(--dsw-alias-bg-layer-3);color:var(--ds-blue)}.KFXqYa_peakTagSuccess{background:var(--dsw-alias-bg-layer-3);color:var(--ds-cyan)}.KFXqYa_peakDot{border-radius:999px;flex:none;width:6px;height:6px}.KFXqYa_peakDotPrimary{background:var(--ds-blue)}.KFXqYa_peakDotSuccess{background:var(--ds-cyan)}.KFXqYa_peakClose{width:24px;height:24px;color:var(--ds-t-3);cursor:pointer;transition:background-color var(--ds-t-fast), color var(--ds-t-fast);background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;font-size:15px;line-height:1;display:inline-flex}.KFXqYa_peakClose:hover{color:var(--ds-t-1);background:var(--dsw-alias-bg-layer-2)}.KFXqYa_peakCount{font-variant-numeric:tabular-nums;font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:28px;font-weight:600;line-height:1}.KFXqYa_peakCountPrimary{color:var(--ds-blue)}.KFXqYa_peakCountSuccess{color:var(--ds-cyan)}.KFXqYa_peakDesc{color:var(--ds-t-1);margin:4px 0 0;font-size:12px;line-height:18px}@keyframes KFXqYa_peakAlertIn{0%{opacity:0}to{opacity:1}}.KFXqYa_setCard{border:1px solid var(--ds-border);border-radius:var(--ds-r-2);background:var(--dsb-glass);flex-direction:column;gap:12px;padding:16px 18px;display:flex}.KFXqYa_setGrid3,.KFXqYa_setGrid2{gap:10px;display:grid}.KFXqYa_setGrid3{grid-template-columns:repeat(3,minmax(0,1fr))}.KFXqYa_setGrid2{grid-template-columns:repeat(2,minmax(0,1fr))}@media (width<=720px){.KFXqYa_setGrid3,.KFXqYa_setGrid2{grid-template-columns:1fr}}.KFXqYa_setCell{border:1px solid var(--ds-border);border-radius:var(--ds-r-1);flex-direction:column;gap:8px;min-width:0;padding:12px 14px;display:flex}.KFXqYa_setCardHead{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.KFXqYa_setCardMeta{flex-direction:column;gap:4px;min-width:0;display:flex}.KFXqYa_setCardTitle{color:var(--ds-t-1);margin:0;font-size:13px;font-weight:600;line-height:18px}.KFXqYa_setCardDesc{color:var(--ds-t-3);margin:0;font-size:11px;line-height:16px}.KFXqYa_ctlCol{flex-direction:column;gap:10px;padding-top:2px;display:flex}.KFXqYa_ctlRow{align-items:center;gap:12px;min-height:28px;display:flex}.KFXqYa_ctlRowStretch{display:flex}.KFXqYa_ctlLabel{color:var(--ds-t-3);flex:0 0 96px;font-size:11px;line-height:16px}.KFXqYa_ctlGroup{flex-wrap:wrap;align-items:center;gap:8px;display:inline-flex}.KFXqYa_userPriceRow{border-bottom:1px solid var(--ds-border);align-items:center;gap:10px;padding:8px 0;display:flex}.KFXqYa_userPriceCheck{width:14px;height:14px;accent-color:var(--ds-blue);flex:none;margin:0}.KFXqYa_userPriceBody{flex-direction:column;flex:1;gap:8px;min-width:0;display:flex}.KFXqYa_userPriceLineMeta{grid-template-columns:minmax(0,1fr) minmax(0,1.4fr) auto;align-items:end;gap:8px 10px;display:grid}@media (width<=720px){.KFXqYa_userPriceLineMeta{grid-template-columns:repeat(2,minmax(0,1fr))}}.KFXqYa_userPriceLineMeta .KFXqYa_userPriceInput{box-sizing:border-box;width:100%;min-width:0;max-width:none}.KFXqYa_userPriceBody .KFXqYa_ctlGroup{flex-wrap:nowrap}.KFXqYa_userPriceLineMeta .KFXqYa_userPriceField .KFXqYa_ctlLabel{align-items:flex-end;min-height:30px;display:flex}.KFXqYa_userPricePriceLine{border-left:2px solid var(--ds-amber);flex-wrap:wrap;align-items:center;gap:10px;width:calc(100% - 22px);margin-left:10px;padding:2px 0 6px 12px;display:flex}.KFXqYa_userPricePriceLine>.KFXqYa_ctlLabel{color:var(--ds-t-3);flex:0 0 44px;font-size:11px}.KFXqYa_userPricePriceLine .KFXqYa_userPriceInputNum{box-sizing:border-box;flex:1 1 0;width:auto;min-width:120px;max-width:240px}.KFXqYa_userPriceField{flex-direction:column;gap:4px;min-width:0;display:flex}.KFXqYa_userPriceField .KFXqYa_ctlLabel{flex:none;font-size:11px}.KFXqYa_userPriceInput,.KFXqYa_userPriceInputNum{border:1px solid var(--ds-border);background:var(--dsb-3);min-width:96px;max-width:160px;color:var(--ds-t-1);border-radius:6px;padding:4px 8px;font-size:12px;line-height:16px}.KFXqYa_userPriceInputNum{min-width:72px;max-width:88px}.KFXqYa_rdo{color:var(--ds-t-2);cursor:pointer;white-space:nowrap;align-items:center;gap:6px;font-size:12px;line-height:16px;display:inline-flex}.KFXqYa_rdo input{opacity:0;pointer-events:none;position:absolute}.KFXqYa_rdoDot{border:1px solid var(--ds-border-strong);background:var(--dsb-3);border-radius:50%;flex:none;width:14px;height:14px;position:relative}.KFXqYa_rdo input:checked+.KFXqYa_rdoDot{border-color:var(--ds-blue)}.KFXqYa_rdo input:checked+.KFXqYa_rdoDot:after{content:"";background:var(--ds-blue);border-radius:50%;position:absolute;inset:3px}.KFXqYa_inp{border:1px solid var(--ds-border);background:var(--dsb-3);border-radius:6px;align-items:center;gap:4px;padding:2px 6px;display:inline-flex}.KFXqYa_affix{color:var(--ds-t-3);font-size:11px;line-height:16px}.KFXqYa_prog{background:var(--dsb-3);min-width:0;height:6px;box-shadow:inset 0 0 0 1px var(--ds-border);border-radius:3px;flex:1;overflow:hidden}.KFXqYa_progFill{background:var(--ds-blue);height:calc(100% - 2px);transition:width var(--ds-t-fast);border-radius:2px;margin:1px}.KFXqYa_btn{border:1px solid var(--ds-border);height:28px;color:var(--ds-t-2);cursor:pointer;transition:border-color var(--ds-t-fast), color var(--ds-t-fast), background-color var(--ds-t-fast);background:0 0;border-radius:999px;align-items:center;gap:6px;padding:0 12px;font-size:12px;line-height:16px;display:inline-flex}.KFXqYa_btn:hover{border-color:var(--ds-blue);color:var(--ds-t-1);background:color-mix(in srgb, var(--ds-blue) 12%, transparent)}.KFXqYa_modelTable tbody td:not(:first-child) tbody td:not(:first-child){text-align:right;font-family:var(--mono);font-variant-numeric:tabular-nums;color:var(--ds-t-1)}`,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`,providerGroup:`KFXqYa_providerGroup`,providerGroupBadge:`KFXqYa_providerGroupBadge`,providerGroupBalance:`KFXqYa_providerGroupBalance`,providerGroupBalanceLabel:`KFXqYa_providerGroupBalanceLabel`,providerGroupCost:`KFXqYa_providerGroupCost`,providerGroupCostLabel:`KFXqYa_providerGroupCostLabel`,providerGroupCostValue:`KFXqYa_providerGroupCostValue`,providerGroupHead:`KFXqYa_providerGroupHead`,providerGroupList:`KFXqYa_providerGroupList`,providerGroupMeta:`KFXqYa_providerGroupMeta`,providerGroupName:`KFXqYa_providerGroupName`,providerGroupRecharge:`KFXqYa_providerGroupRecharge`,providerGroupTitle:`KFXqYa_providerGroupTitle`,railButton:`KFXqYa_railButton`,rangeButton:`KFXqYa_rangeButton`,rangeButtonActive:`KFXqYa_rangeButtonActive`,rangeToggle:`KFXqYa_rangeToggle`,rdo:`KFXqYa_rdo`,rdoChevron:`KFXqYa_rdoChevron`,rdoChevronOpen:`KFXqYa_rdoChevronOpen`,rdoDot:`KFXqYa_rdoDot`,rdoLabel:`KFXqYa_rdoLabel`,rdoRow:`KFXqYa_rdoRow`,rdoSelect:`KFXqYa_rdoSelect`,reconcileDismiss:`KFXqYa_reconcileDismiss`,reconcileIcon:`KFXqYa_reconcileIcon`,reconcileNotice:`KFXqYa_reconcileNotice`,reconcileText:`KFXqYa_reconcileText`,rounds:`KFXqYa_rounds`,roundsAxis:`KFXqYa_roundsAxis`,roundsBar:`KFXqYa_roundsBar`,roundsBarCol:`KFXqYa_roundsBarCol`,roundsBarColOff:`KFXqYa_roundsBarColOff`,roundsBarColPeak:`KFXqYa_roundsBarColPeak`,roundsBarFlagged:`KFXqYa_roundsBarFlagged`,roundsBarLabel:`KFXqYa_roundsBarLabel`,roundsBarWrap:`KFXqYa_roundsBarWrap`,roundsBars:`KFXqYa_roundsBars`,roundsEmpty:`KFXqYa_roundsEmpty`,roundsFlagMark:`KFXqYa_roundsFlagMark`,sessionChildRow:`KFXqYa_sessionChildRow`,sessionGroupRow:`KFXqYa_sessionGroupRow`,setCard:`KFXqYa_setCard`,setCardDesc:`KFXqYa_setCardDesc`,setCardHead:`KFXqYa_setCardHead`,setCardMeta:`KFXqYa_setCardMeta`,setCardTitle:`KFXqYa_setCardTitle`,setCell:`KFXqYa_setCell`,setGrid2:`KFXqYa_setGrid2`,setGrid3:`KFXqYa_setGrid3`,shareDot:`KFXqYa_shareDot`,shareItem:`KFXqYa_shareItem`,shareLegend:`KFXqYa_shareLegend`,shareSeg:`KFXqYa_shareSeg`,shareSegAssistant:`KFXqYa_shareSegAssistant`,shareSegOff:`KFXqYa_shareSegOff`,shareSegPeak:`KFXqYa_shareSegPeak`,shareSegTool:`KFXqYa_shareSegTool`,shareSegUser:`KFXqYa_shareSegUser`,shareTrack:`KFXqYa_shareTrack`,shareValue:`KFXqYa_shareValue`,siteKindDirect:`KFXqYa_siteKindDirect`,siteKindSite:`KFXqYa_siteKindSite`,siteKindTag:`KFXqYa_siteKindTag`,siteKindUnknown:`KFXqYa_siteKindUnknown`,siteRow:`KFXqYa_siteRow`,siteRowCalls:`KFXqYa_siteRowCalls`,siteRowCallsLow:`KFXqYa_siteRowCallsLow`,siteRowCost:`KFXqYa_siteRowCost`,siteRowMeta:`KFXqYa_siteRowMeta`,siteRowName:`KFXqYa_siteRowName`,siteRowTitle:`KFXqYa_siteRowTitle`,soon:`KFXqYa_soon`,staleNotice:`KFXqYa_staleNotice`,subscriptionAuto:`KFXqYa_subscriptionAuto`,subscriptionCard:`KFXqYa_subscriptionCard`,subscriptionExhausted:`KFXqYa_subscriptionExhausted`,subscriptionFill:`KFXqYa_subscriptionFill`,subscriptionFillOver:`KFXqYa_subscriptionFillOver`,subscriptionFillWarn:`KFXqYa_subscriptionFillWarn`,subscriptionGrid:`KFXqYa_subscriptionGrid`,subscriptionHead:`KFXqYa_subscriptionHead`,subscriptionMeta:`KFXqYa_subscriptionMeta`,subscriptionName:`KFXqYa_subscriptionName`,subscriptionPct:`KFXqYa_subscriptionPct`,subscriptionPlan:`KFXqYa_subscriptionPlan`,subscriptionReset:`KFXqYa_subscriptionReset`,subscriptionStatus:`KFXqYa_subscriptionStatus`,subscriptionTier:`KFXqYa_subscriptionTier`,subscriptionTrack:`KFXqYa_subscriptionTrack`,subscriptionWindow:`KFXqYa_subscriptionWindow`,subscriptionWindowLabel:`KFXqYa_subscriptionWindowLabel`,switch:`KFXqYa_switch`,switchKnob:`KFXqYa_switchKnob`,switchOn:`KFXqYa_switchOn`,tabButton:`KFXqYa_tabButton`,tabButtonActive:`KFXqYa_tabButtonActive`,tabNav:`KFXqYa_tabNav`,tabPanel:`KFXqYa_tabPanel`,tabPanelIn:`KFXqYa_tabPanelIn`,tableScroll:`KFXqYa_tableScroll`,tokenModelBar:`KFXqYa_tokenModelBar`,tokenModelPartIn:`KFXqYa_tokenModelPartIn`,tokenModelPartOut:`KFXqYa_tokenModelPartOut`,tokenModelParts:`KFXqYa_tokenModelParts`,tokenModelShareRow:`KFXqYa_tokenModelShareRow`,tokenPanel:`KFXqYa_tokenPanel`,trigger:`KFXqYa_trigger`,triggerBudgetHot:`KFXqYa_triggerBudgetHot`,triggerBudgetOver:`KFXqYa_triggerBudgetOver`,triggerBudgetPulse:`KFXqYa_triggerBudgetPulse`,triggerGaugeArc:`KFXqYa_triggerGaugeArc`,triggerGaugeNeedle:`KFXqYa_triggerGaugeNeedle`,triggerIcon:`KFXqYa_triggerIcon`,triggerLabel:`KFXqYa_triggerLabel`,triggerMain:`KFXqYa_triggerMain`,triggerMetric:`KFXqYa_triggerMetric`,triggerPop:`KFXqYa_triggerPop`,triggerPopEmpty:`KFXqYa_triggerPopEmpty`,triggerPopShown:`KFXqYa_triggerPopShown`,triggerPopSwitchCount:`KFXqYa_triggerPopSwitchCount`,triggerPopSwitcher:`KFXqYa_triggerPopSwitcher`,triggerPrimary:`KFXqYa_triggerPrimary`,triggerScan:`KFXqYa_triggerScan`,triggerSpark:`KFXqYa_triggerSpark`,triggerSparkBar:`KFXqYa_triggerSparkBar`,triggerSparkBreath:`KFXqYa_triggerSparkBreath`,triggerSparkHot:`KFXqYa_triggerSparkHot`,triggerValueRow:`KFXqYa_triggerValueRow`,triggerWrap:`KFXqYa_triggerWrap`,triggerYen:`KFXqYa_triggerYen`,ubAlert:`KFXqYa_ubAlert`,ubAlertLeft:`KFXqYa_ubAlertLeft`,ubAlertNote:`KFXqYa_ubAlertNote`,ubCard:`KFXqYa_ubCard`,ubCardControlGroup:`KFXqYa_ubCardControlGroup`,ubCardHead:`KFXqYa_ubCardHead`,ubCardSub:`KFXqYa_ubCardSub`,ubCardTitle:`KFXqYa_ubCardTitle`,ubChipLabel:`KFXqYa_ubChipLabel`,ubChipOff:`KFXqYa_ubChipOff`,ubChipPeak:`KFXqYa_ubChipPeak`,ubExtraName:`KFXqYa_ubExtraName`,ubExtraNote:`KFXqYa_ubExtraNote`,ubExtraRow:`KFXqYa_ubExtraRow`,ubModel:`KFXqYa_ubModel`,ubModelName:`KFXqYa_ubModelName`,ubNotes:`KFXqYa_ubNotes`,ubNotesDesc:`KFXqYa_ubNotesDesc`,ubNotesItem:`KFXqYa_ubNotesItem`,ubNotesTerm:`KFXqYa_ubNotesTerm`,ubRate:`KFXqYa_ubRate`,ubSearch:`KFXqYa_ubSearch`,ubTable:`KFXqYa_ubTable`,ubTablewrap:`KFXqYa_ubTablewrap`,ubTag:`KFXqYa_ubTag`,ubTagAlert:`KFXqYa_ubTagAlert`,ubTagError:`KFXqYa_ubTagError`,ubTagNeutral:`KFXqYa_ubTagNeutral`,ubTagPromo:`KFXqYa_ubTagPromo`,ubTagSuccess:`KFXqYa_ubTagSuccess`,uncataloguedTag:`KFXqYa_uncataloguedTag`,unpricedHint:`KFXqYa_unpricedHint`,userPriceBody:`KFXqYa_userPriceBody`,userPriceCheck:`KFXqYa_userPriceCheck`,userPriceField:`KFXqYa_userPriceField`,userPriceInput:`KFXqYa_userPriceInput`,userPriceInputNum:`KFXqYa_userPriceInputNum`,userPriceLineMeta:`KFXqYa_userPriceLineMeta`,userPricePriceLine:`KFXqYa_userPricePriceLine`,userPriceRow:`KFXqYa_userPriceRow`,vendorLetter:`KFXqYa_vendorLetter`};let Ce=`usageBilling`,we={title:`使用统计`,cost:`费用`,todayCost:`今日费用`,monthCost:`本月费用`,yearCost:`本年费用`,monthProjected:`本月预计`,liveTurn:`本轮`,liveSession:`会话`,calls:`调用`,cacheHitRate:`缓存命中率`,tokens:`Token`,inputTokens:`输入`,outputTokens:`输出`,avgCost:`平均成本`,kpiRange:`统计范围`,avgRangeToday:`今日`,avgRange7d:`近7天`,avgRangeWeek:`本周`,avgRangeMonth:`本月`,avgRangeAll:`累计`,trend:`每日费用与调用趋势`,trend7d:`7 天`,trend30d:`30 天`,trendMetric:`趋势指标`,trendMetricCost:`费用`,trendMetricTokens:`Token`,pricingSearch:`搜索模型 / 厂商`,bandPinHint:`点击固定到输入框`,trendEmpty:`暂无趋势数据`,trendTotal:`总计`,roundsUnit:`轮`,healthModelsLive:`{n} 模型可用`,healthVendorsDown:`{n} 厂商失效`,healthVendorsUnavailable:`{n} 厂商不可用`,budget:`本月预算`,budgetRemain:`剩余预算`,budgetAmount:`预算金额`,budgetSummary:`本月已用 {used} / {total};达到 80% 时提醒,达到 100% 时红色脉冲警示`,sessions:`会话明细`,sessionTitle:`标题`,lastActive:`最后活跃`,sessionOverflow:`仅显示花费前 {limit} 个,共 {total} 个会话`,budgetTierBody:`本月花费 {cost} 已达预算 {budget} 的 {pct}%`,models:`模型计费明细`,providerBilling:`提供商计费与订阅`,channelUnknown:`未知路由`,directTag:`直连`,relayTag:`中转`,unknownTag:`未知`,planCountUnit:`套餐`,actual:`实际`,pricing:`模型单价表`,input:`输入`,output:`输出`,cacheHit:`缓存命中`,peak:`高峰`,offPeak:`低谷`,flat:`全天统一`,band:`时段`,close:`关闭`,footer:`每 30s 自动轮询 · 仅统计本机 dsh 会话`,footerCredit:`dsh-ui-usage-billing {version} · MIT`,lastUpdated:`数据更新于`,noData:`暂无计费数据`,todayRate:`今日汇率`,rateLive:`实时`,rateBuiltin:`内置`,pricingSyncedAt:`上次同步`,pricingSyncNow:`立即同步`,pricingSyncing:`同步中…`,promoBadge:`促`,promoUntil:`促销价至 {date},之后自动恢复刊例价`,promoOpenEnded:`厂商未公布截止时间,当前按折扣计价;公告截止后自动恢复刊例价`,pricingTip:`DeepSeek 现行刊例:V4.1 Flash 谷档 未命中 ¥1 / 缓存命中 ¥0.02 / 输出 ¥4;V4 Pro 谷档 未命中 ¥4.5 / 缓存命中 ¥0.15 / 输出 ¥13.5;峰价均为谷价 × 2。工作日 9-12 / 14-18 为高峰价,其余时段(含周末全天)为低谷价;费用按调用时刻计。`,pricingUnit:`单位:人民币 / 每百万 Token`,pricingNotes:`计价说明`,ubPeak:`峰`,ubOff:`谷`,ubStd:`标准`,peakBand:`峰谷分带`,pricingSource:`数据来源`,noteCache:`命中部分按缓存价计费,显著降低成本。`,noteBand:`高峰与空闲时段单价不同,空闲约半价。`,noteSource:`价格来自实时汇率 + 模型定价目录,未收录模型按 0 计并提示。`,balance:`余额`,recharge:`充值`,rechargeHint:`打开该厂商官方平台的充值页`,balanceUnconfigured:`未配置`,balanceUnauthorized:`密钥无效`,balanceUnreachable:`查询失败`,uncatalogued:`未收录`,estimatedPricing:`估算价`,balanceDays:`约可撑 {days} 天`,balanceLowBody:`{name} 余额 {balance},约可撑 {days} 天,请及时充值`,reconcileDrift:`系统监控到{provider}官方余额变动 {spent},本面板记录 {today},差额通常由其它工具或 API 的消耗所致`,reconcileDismiss:`知道了`,subscriptionNotConfigured:`未配置密钥`,subscriptionUnauthorized:`密钥无效`,subscriptionUnavailable:`查询失败`,subscriptionInvalid:`响应异常`,subscriptionRateLimited:`触发限流`,subscriptionSession:`本次`,subscriptionWeekly:`本周`,subscriptionMonthly:`本月`,subscriptionBilling:`计费周期`,subscriptionRemaining:`剩余 {pct}%`,subscriptionExhausted:`已用尽`,subscriptionReset:`{date} 重置`,subscriptionNoApi:`该厂商暂未提供用量查询接口`,floatWindow:`模型用量悬浮窗`,floatModeCombined:`综合`,floatModeSubscription:`订阅卡`,floatMode:`展示模式`,floatTargets:`订阅目标`,floatWindowHint:`悬浮在左下角计费卡上的用量速览;综合=当前样式,订阅卡=每次展示一张订阅额度卡(可切换)。`,floatPrimaryToday:`今日`,floatPrimaryWeek:`本周`,floatPrimaryMonth:`本月`,cardDisplay:`计费卡显示`,cardDisplayHint:`切换左下角计费卡的主指标与主数字统计范围(迷你柱跟随视角,悬浮窗不受影响)。`,cardMetric:`主指标`,cardMetricMoney:`花费金额`,cardMetricTokens:`Token 消耗`,cardSpan:`统计范围`,cardSpanDay:`日`,cardSpanWeek:`周`,cardSpanMonth:`月`,floatNoTargets:`未指定订阅通道,请在设置中勾选要展示的订阅。`,floatNoTargetsHint:`暂无可选的订阅通道。`,subscriptionsStale:`订阅额度刷新失败,以下为缓存数据`,staleLedgerNotice:`{count} 个会话出自旧版算法存档(日志已删,无法重算),模型归属可能有误差`,unreadableNotice:`{count} 个会话因会话格式版本较新暂未统计(原始数据仍在,升级 dsh 兼容修复后自动恢复)`,tokenCacheWrite:`写入`,toolRank:`工具排行`,toolName:`工具`,userPrices:`自定义单价`,userPricesHint:`为未收录或变价模型填入实付单价,总览与日趋势按此重估;模型可用下拉候选(目录键或模型 id);来源留空=该模型默认价,填入中转站域名=仅该来源的同名模型用此价(协议可省);低谷价三栏填后按峰/谷混合估算,留空=平档`,userPriceSave:`保存`,userPriceModel:`模型`,userPriceSource:`来源(中转站域名)`,userPriceSourceHint:`留空=默认价,或 https://api.中转站.com`,userPriceOffPeak:`低谷价`,userPriceNormal:`标准价`,userPriceCurrency:`币种`,userPriceAdd:`新增`,userPriceRemoveSelected:`删除所选`,userPriceSelect:`选择此行`,sessionStaleBadge:`旧版统计`,sessionUntitled:`未命名会话`,heatmapLess:`少`,heatmapMore:`多`,currency:`币种`,currencyCny:`人民币`,currencyUsd:`美元`,currencyEur:`欧元`,language:`界面语言`,heatmap:`用量热力图`,rounds:`每轮费用`,roundsHint:`最近 {count} 轮 · 柱顶为金额 · 底色为峰谷时段`,anomaly:`成本突增`,model:`模型`,thModel:`模型名称`,thInputMiss:`输入缓存未命中`,thInputHit:`输入缓存命中`,costAbbr:`费用`,tabOverview:`概览`,tabTrends:`趋势`,tabProviders:`账单`,tabPricing:`费率`,tabSettings:`设置`,budgetHint:`设置月度上限,用于本月预计与超支分段提醒`,peakAlertHint:`在切档前弹窗提醒,可选同步系统通知`,peakAlertDescPeak:`即将进入高峰时段,价格将上调,请提前安排长任务`,peakAlertDescOff:`即将进入平价时段,价格减半,适合运行大批量任务`,peakAlertDescPeakZhipu:`即将进入高峰时段(工作日 14:00–18:00),Coding Plan 额度将按基础积分全额抵扣`,peakAlertDescOffZhipu:`即将进入非高峰时段,Coding Plan 额度按基础积分 5 折抵扣`,export:`导出`,exportCsvDay:`按日 CSV`,exportCsvSession:`按会话 CSV`,exportJson:`全量 JSON`,peakShare:`峰谷时段占比`,peakSharePerCall:`按调用时刻精确判档`,offPeakSavings:`挪谷可省约 {amount}`,perfMax:`最大 TTFT`,weekCost:`本周消耗金额`,roleCost:`费用构成`,roleUser:`用户输入`,roleAssistant:`助手输出`,roleTool:`工具结果`,roleHint:`估算:输出按实测计价,输入按消息长度摊分`,tierPeak:`峰时`,tierOff:`平价`,tierToPeak:`后转峰时`,tierToOff:`后转平价`,tierAlertEnterPeak:`{minutes} 分钟后进入峰时(DeepSeek 高峰价 ×2),不急的调用可稍等`,tierAlertEnterOff:`{minutes} 分钟后进入平价(价格减半)`,tierAlertEnterPeakZhipu:`{minutes} 分钟后进入智谱高峰时段,Coding Plan 额度将全额抵扣`,tierAlertEnterOffZhipu:`{minutes} 分钟后进入智谱非高峰时段,额度按基础积分 5 折抵扣`,peakAlertTitlePeak:`即将进入高峰价`,peakAlertTitleOff:`即将进入平价`,peakAlert:`峰谷切换提醒`,peakAlertLeadMin:`提前量(分钟)`,peakAlertPos:`位置`,peakAlertMode:`提醒模式`,peakAlertPosCorner:`右下角`,peakAlertPosCenter:`屏幕居中`,peakAlertModePeak:`仅进入峰时`,peakAlertModeOff:`仅进入平价`,peakAlertModeBoth:`峰与谷都提醒`,peakAlertWebNotify:`同时发系统通知`,peakAlertPreview:`预览提醒`,planTypeCode:`订阅制`,planTypeToken:`按量`,subscriptionFeePerMonth:`{amount}/月`,triggerToday:`今日消耗金额`,triggerMonth:`当月消耗金额`,triggerMonthTokens:`当月消耗 Token`,triggerTodayTokens:`今日消耗 Token`,triggerWeekTokens:`本周消耗 Token`,subscriptionTag:`订阅`,free:`免费`,perfSamples:`样本`,perfTtft:`首字延时`,perfP50:`P50`,perfP90:`P90`,perfTps:`生成速度`,perfLatency:`总延迟`,perfEstimated:`估算样本`,perfEmpty:`暂无性能数据`,perfTpsUnit:`tok/s`,perfTitle:`性能`,perfHint:`按模型与按小时聚合;估算样本为工具续写步骤`,perfAll:`全选`,perfChartEmpty:`未选择模型或该指标暂无数据`,heatmapYear:`年`,heatmapHalf:`半年`,heatmapMonth:`月`,metricCost:`费用`,metricTokens:`Token`,heatmapTotal:`合计`,activeDays:`活跃天数`,streakDays:`连续使用`,subscriptionAutoDetect:`自动识别`,pluginAuthor:`作者`,pluginRepository:`仓库`,pluginNpm:`npm`,pluginLicense:`许可证`,tabToken:`用量`,tokenExport:`导出 Token`,tokenExportCsv:`按日 Token CSV`,tokenReasoningShare:`思考占比`,tokenReasoningShort:`思考`,tokenIo:`输入/输出比`,tokenPeak:`峰值日`,tokenDaily:`每日 Token`,tokenByModel:`模型 Token`,tokenMiss:`输入(缓存未命中)`,tokenHit:`输入(缓存命中)`,tokenOutput:`输出`,tokenViewStructure:`按结构`,tokenViewModel:`按模型`,tokenHitShort:`命中`,tokenMissShort:`未命中`,tokenTotal:`总 Token`,tokenShare:`占比`,usageStatsTool:`注入用量查询工具`,usageStatsToolHint:`让模型可在对话中查询用量/费用;会占用模型每次请求的上下文,coding 场景建议关闭(改后需重载应用生效)`,balanceGranted:`赠金余额`,balanceTopped:`充值余额`,balanceDaily:`日均消耗`,balanceDaysLong:`约可撑`,balanceDaysUnit:`天`,popTodayModel:`主力消耗模型余额`,popTitle:`用量速览`,popNoConsumption:`暂无消耗`,popDirectLead:`直联`,popSubLead:`订阅`,unpricedHint:`{count} 个模型未收录计价,费用已按 0 计`,searchEstimateHint:`含 {count} 次联网搜索请求的估算费用(每次约 {each};日志无用量事件,按次估算,可在配置 searchCallEstimateCny 调整或关闭)`,siteListDisplay:`中转站列表`,siteListDisplayHint:`隐藏「未识别」占位条目,净化中转站额度列表`,liveCostBar:`平价消耗胶囊`,liveCostBarHint:`输入框旁的即时代费条,悬浮可看详情`,liveCostBarPosition:`位置`,liveCostBarPosBelow:`输入框下方`,liveCostBarPosAbove:`输入框上方`,liveCostBarPosToolbar:`输入框内部`,exportCsvSite:`按站点 CSV`,panelRelayQuota:`中转站额度`,relayBalance:`余额`,relayNoQuota:`未读出额度`,relayWindowUsed:`已用`,relayKindNewApi:`New API`,relayKindSub2Api:`Sub2API`,relayKindUnknown:`未识别`},Te={title:`Usage`,cost:`Cost`,todayCost:`Today`,monthCost:`This month`,yearCost:`This year`,monthProjected:`Projected`,liveTurn:`Turn`,liveSession:`Session`,calls:`Calls`,cacheHitRate:`Cache Hit`,tokens:`Tokens`,inputTokens:`Input`,outputTokens:`Output`,avgCost:`Avg cost`,kpiRange:`Range`,avgRangeToday:`Today`,avgRange7d:`7d`,avgRangeWeek:`Week`,avgRangeMonth:`Month`,avgRangeAll:`All`,trend:`Daily cost & calls`,trend7d:`7D`,trend30d:`30D`,trendMetric:`Trend metric`,trendMetricCost:`Cost`,trendMetricTokens:`Tokens`,pricingSearch:`Search model or vendor`,bandPinHint:`click to pin to the composer`,trendEmpty:`No trend data yet`,trendTotal:`Total`,roundsUnit:`turns`,healthModelsLive:`{n} models live`,healthVendorsDown:`{n} vendors down`,healthVendorsUnavailable:`{n} vendors unavailable`,budget:`Monthly budget`,budgetRemain:`Remaining`,budgetAmount:`Budget amount`,budgetSummary:`Used {used} / {total} this month; warn at 80%, pulse red at 100%`,sessions:`Sessions`,sessionTitle:`Title`,lastActive:`Last active`,sessionOverflow:`Top {limit} of {total} sessions by cost`,budgetTierBody:`This month {cost} reached {pct}% of the budget {budget}`,models:`Model billing`,providerBilling:`Provider billing & subscriptions`,channelUnknown:`Unknown routes`,directTag:`Direct`,relayTag:`Relay`,unknownTag:`Unknown`,planCountUnit:`plan(s)`,actual:`Actual`,pricing:`Model pricing`,input:`Input`,output:`Output`,cacheHit:`Cache hit`,peak:`Peak`,offPeak:`Off-peak`,flat:`Flat`,band:`Band`,close:`Close`,footer:`Polls every 30s · local dsh sessions only`,footerCredit:`dsh-ui-usage-billing {version} · MIT`,lastUpdated:`Updated`,noData:`No billing data yet`,todayRate:`Today rate`,rateLive:`Live`,rateBuiltin:`Built-in`,pricingSyncedAt:`Synced`,pricingSyncNow:`Sync now`,pricingSyncing:`Syncing…`,promoBadge:`Promo`,promoUntil:`Promo price until {date}, then list price resumes automatically`,promoOpenEnded:`End date not announced; billed at the discounted rate until further notice, then list price resumes`,pricingTip:`DeepSeek list rates: V4.1 Flash off-peak ¥1 miss / ¥0.02 cache-hit / ¥4 output; V4 Pro off-peak ¥4.5 miss / ¥0.15 cache-hit / ¥13.5 output; peak = 2× off-peak. Weekday 9-12 / 14-18 bills at peak, all other times (weekends included) at off-peak; billed at call time.`,pricingUnit:`Unit: CNY / per 1M tokens`,pricingNotes:`Pricing notes`,ubPeak:`Peak`,ubOff:`Off`,ubStd:`Std`,peakBand:`Peak/off-peak band`,pricingSource:`Data source`,noteCache:`Cache hits are billed at the cache rate, cutting cost.`,noteBand:`Peak and off-peak prices differ; off-peak is roughly half price.`,noteSource:`Prices come from the live rate + model catalog; unlisted models count as 0 and are flagged.`,balance:`Balance`,recharge:`Top up`,rechargeHint:`Open the vendor's official top-up page`,balanceUnconfigured:`Not set`,balanceUnauthorized:`Bad key`,balanceUnreachable:`Unavailable`,uncatalogued:`Not catalogued`,estimatedPricing:`Estimated`,balanceDays:`~{days} days left`,balanceLowBody:`{name} balance {balance}, ~{days} days left, please top up`,reconcileDrift:`Detected {provider} official balance moved {spent}, this panel recorded {today}; the gap usually comes from other tools or APIs consuming too`,reconcileDismiss:`Got it`,subscriptionNotConfigured:`Key not set`,subscriptionUnauthorized:`Bad key`,subscriptionUnavailable:`Unavailable`,subscriptionInvalid:`Bad response`,subscriptionRateLimited:`Rate limited`,subscriptionSession:`Current`,subscriptionWeekly:`Weekly`,subscriptionMonthly:`Monthly`,subscriptionBilling:`Billing`,subscriptionRemaining:`{pct}% left`,subscriptionExhausted:`Exhausted`,subscriptionReset:`Resets {date}`,subscriptionNoApi:`Provider does not offer a usage API`,floatWindow:`Model usage popover`,floatModeCombined:`Combined`,floatModeSubscription:`Subscription card`,floatMode:`Display mode`,floatTargets:`Targets`,floatWindowHint:`Usage summary floating on the footer card; Combined=current style, Subscription cards=one quota card at a time (switchable).`,floatPrimaryToday:`Today`,floatPrimaryWeek:`Week`,floatPrimaryMonth:`Month`,cardDisplay:`Billing card`,cardDisplayHint:`Switch the bottom-left billing card between cost and token usage, and pick the figure range (sparkline follows; the popover is unaffected).`,cardMetric:`Main metric`,cardMetricMoney:`Cost`,cardMetricTokens:`Token usage`,cardSpan:`Range`,cardSpanDay:`Day`,cardSpanWeek:`Week`,cardSpanMonth:`Month`,floatNoTargets:`No subscription selected — pick some in Settings.`,floatNoTargetsHint:`No subscription channel available.`,subscriptionsStale:`Subscription refresh failed — showing cached data`,staleLedgerNotice:`{count} sessions use legacy-algorithm archives (logs deleted); attribution may be off`,unreadableNotice:`{count} sessions are not counted yet (newer session format; data is intact and restores automatically after a dsh fix)`,tokenCacheWrite:`written`,toolRank:`Tool calls`,toolName:`Tool`,userPrices:`Custom prices`,userPricesHint:`Enter actual per-1M-token prices; main views are re-costed. Pick a model key from the dropdown candidates. Leave source empty for the model default, or enter a relay origin (protocol optional) to price only that source. Fill all three off-peak fields for peak/off-peak estimation; leave them empty for flat pricing.`,userPriceSave:`Save`,userPriceModel:`Model`,userPriceSource:`Source (relay origin)`,userPriceSourceHint:`Empty = default; e.g. https://api.relay.com`,userPriceOffPeak:`Off-peak price`,userPriceNormal:`Standard price`,userPriceCurrency:`Currency`,userPriceAdd:`Add`,userPriceRemoveSelected:`Remove selected`,userPriceSelect:`Select this row`,sessionStaleBadge:`legacy`,sessionUntitled:`Untitled session`,heatmapLess:`Less`,heatmapMore:`More`,currency:`Currency`,currencyCny:`CNY`,currencyUsd:`USD`,currencyEur:`EUR`,language:`Interface language`,heatmap:`Usage heatmap`,rounds:`Cost per turn`,roundsHint:`Last {count} rounds · bar tops show amount · fill = peak/off-peak`,anomaly:`Cost spike`,model:`Model`,thModel:`Model name`,thInputMiss:`Input (cache miss)`,thInputHit:`Input (cache hit)`,costAbbr:`cost`,tabOverview:`Overview`,tabTrends:`Trends`,tabProviders:`Bills`,tabPricing:`Rates`,tabSettings:`Settings`,budgetHint:`Set a monthly cap for projections and tier alerts`,peakAlertHint:`Alert before a tier switch, optionally via system notification`,peakAlertDescPeak:`About to enter peak hours — prices rise, plan long tasks ahead`,peakAlertDescOff:`About to enter off-peak hours — price halves, ideal for large batches`,peakAlertDescPeakZhipu:`Peak hours soon (weekdays 14:00–18:00) — Coding Plan credits will be deducted at full rate`,peakAlertDescOffZhipu:`Off-peak soon — Coding Plan credits will be deducted at 50% of base credits`,export:`Export`,exportCsvDay:`Daily CSV`,exportCsvSession:`Sessions CSV`,exportJson:`Full JSON`,peakShare:`Peak vs off-peak`,peakSharePerCall:`per-call attribution, full history`,offPeakSavings:`Shift peak to off-peak: save ~{amount}`,perfMax:`Max TTFT`,weekCost:`This week's spend`,roleCost:`Cost breakdown`,roleUser:`User input`,roleAssistant:`Assistant output`,roleTool:`Tool results`,roleHint:`Estimated: output priced exactly, input split by message size`,tierPeak:`Peak`,tierOff:`Off-peak`,tierToPeak:`until peak`,tierToOff:`until off-peak`,tierAlertEnterPeak:`Peak pricing (2x) starts in {minutes} min — non-urgent calls can wait`,tierAlertEnterOff:`Off-peak pricing (50% off) starts in {minutes} min`,tierAlertEnterPeakZhipu:`Zhipu peak hours in {minutes} min — Coding Plan credits burn at full rate`,tierAlertEnterOffZhipu:`Zhipu off-peak in {minutes} min — credit burn drops to 50%`,peakAlertTitlePeak:`Peak pricing incoming`,peakAlertTitleOff:`Off-peak incoming`,peakAlert:`Peak/off-peak alert`,peakAlertLeadMin:`Lead time (min)`,peakAlertPos:`Position`,peakAlertMode:`Remind mode`,peakAlertPosCorner:`Bottom-right`,peakAlertPosCenter:`Center`,peakAlertModePeak:`Entering peak only`,peakAlertModeOff:`Entering off-peak only`,peakAlertModeBoth:`Both`,peakAlertWebNotify:`Also send system notification`,peakAlertPreview:`Preview alert`,planTypeCode:`Subscription`,planTypeToken:`Usage`,subscriptionFeePerMonth:`{amount}/mo`,triggerToday:`Today's spend`,triggerMonth:`This month's spend`,triggerMonthTokens:`This month's tokens`,triggerTodayTokens:`Today's tokens`,triggerWeekTokens:`This week's tokens`,subscriptionTag:`Plan`,free:`Free`,perfSamples:`Samples`,perfTtft:`TTFT`,perfP50:`P50`,perfP90:`P90`,perfTps:`Speed`,perfLatency:`Total latency`,perfEstimated:`Estimated`,perfEmpty:`No performance data yet`,perfTpsUnit:`tok/s`,perfTitle:`Performance`,perfHint:`Per model & per hour; estimated samples are tool-continuation steps`,perfAll:`All`,perfChartEmpty:`No model selected or no data for this metric`,heatmapYear:`Year`,heatmapHalf:`Half`,heatmapMonth:`Month`,metricCost:`Cost`,metricTokens:`Tokens`,heatmapTotal:`Total`,activeDays:`Active days`,streakDays:`Streak`,subscriptionAutoDetect:`Auto`,pluginAuthor:`Author`,pluginRepository:`Repository`,pluginNpm:`npm`,pluginLicense:`License`,tabToken:`Usage`,tokenExport:`Export tokens`,tokenExportCsv:`Daily token CSV`,tokenReasoningShare:`Reasoning share`,tokenReasoningShort:`reasoning`,tokenIo:`In/out ratio`,tokenPeak:`Peak day`,tokenDaily:`Daily tokens`,tokenByModel:`Tokens by model`,tokenMiss:`Input (cache miss)`,tokenHit:`Input (cache hit)`,tokenOutput:`Output`,tokenViewStructure:`Structure`,tokenViewModel:`By model`,tokenHitShort:`Hit`,tokenMissShort:`Miss`,tokenTotal:`Total tokens`,tokenShare:`Share`,usageStatsTool:`Inject usage-stats tool`,usageStatsToolHint:`Lets the model query usage/cost inside a conversation; it consumes context per request, so keep it off for coding (takes effect after a reload)`,balanceGranted:`Granted`,balanceTopped:`Topped up`,balanceDaily:`Daily burn`,balanceDaysLong:`~days left`,balanceDaysUnit:`days`,popTodayModel:`Main model balance`,popTitle:`Usage overview`,popNoConsumption:`No usage yet`,popDirectLead:`Direct`,popSubLead:`Subscription`,unpricedHint:`{count} models not priced; their cost counts as 0`,searchEstimateHint:`Includes estimated cost of {count} web-search requests (~{each} each; no usage events logged, per-call estimate; tune via searchCallEstimateCny)`,siteListDisplay:`Relay lists`,siteListDisplayHint:`Hide "unidentified" placeholder rows in the relay quota list`,liveCostBar:`Live cost capsule`,liveCostBarHint:`Live cost bar beside the composer; hover for details`,liveCostBarPosition:`Position`,liveCostBarPosBelow:`Below composer`,liveCostBarPosAbove:`Above composer`,liveCostBarPosToolbar:`Inside composer`,exportCsvSite:`By site CSV`,panelRelayQuota:`Relay quotas`,relayBalance:`Balance`,relayNoQuota:`No quota`,relayWindowUsed:`used`,relayKindNewApi:`New API`,relayKindSub2Api:`Sub2API`,relayKindUnknown:`Unknown`},Ee={"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`}},De={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 L(e){return e===``?e:De[e]??e}function Oe(e){let t=Ee[L(e)];return t?.type===`code`?t.tier:void 0}let ke=[{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}],Ae,R,je,z,Me,B;function V(e){let t=/:\/\//.test(e)?e:`https://${e}`;try{return new URL(t).origin}catch{return e.trim().toLowerCase().replace(/\/+$/,``)}}function H(e,t){return V(e)===V(t)}function Ne(e){B=e.length>0?e:void 0}function Pe(){return B}function Fe(e){return ft(e)}function Ie(e,t){let n=Le(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 Le(e,t){if(B===void 0)return;let n=Fe(e),r=G(n),i=e=>Fe(e.key)===n||G(e.key)===r;if(t!==void 0){for(let e of B)if(e.origin!==void 0&&e.origin!==``&&i(e)&&H(e.origin,t))return e}for(let e of B)if((e.origin===void 0||e.origin===``)&&i(e))return e}function Re(e){if(B===void 0)return;let t=Fe(e),n=G(t);return B.find(e=>e.origin!==void 0&&e.origin!==``&&(Fe(e.key)===t||G(e.key)===n))}function ze(e){Ae=typeof e.rate==`number`&&Number.isFinite(e.rate)&&e.rate>0?e.rate:void 0,R=typeof e.rateEur==`number`&&Number.isFinite(e.rateEur)&&e.rateEur>0?e.rateEur:void 0,je=e.prices,z=e.extraModels}function Be(e){Me=e}function Ve(){return Ae??6.79}function He(){return R??7.71}function Ue(){return{rate:Ve(),live:Ae!==void 0}}function We(){return{rate:He(),live:R!==void 0}}let U=.5;function Ge(e){return e==null||!Number.isFinite(e)?`peak`:Ke(e,Je)}function Ke(e,t){if(qe(e))return`offPeak`;let n=Math.floor(Xe(e)/6e4);for(let e=0;e+1<t.length;e+=2){let r=t[e]??0,i=t[e+1]??0;if(n>=r&&n<i)return`peak`}return`offPeak`}function qe(e){let t=new Date(e+288e5).getUTCDay();return t===0||t===6}let Je=[540,720,840,1080],Ye=[840,1080];function Xe(e){return((e+288e5)%864e5+864e5)%864e5}function Ze(e,t){let n=Ke(e,t),r=Xe(e);for(let i=0;i<7;i++){let a=i*864e5-r;for(let r of t){let i=a+r*6e4;if(!(i<=0)&&Ke(e+i,t)!==n)return{tier:n,nextSwitchInMs:i}}}let i=t[0]??0;return{tier:n,nextSwitchInMs:864e5-r+i*6e4}}function Qe(e,t,n){let{nextSwitchInMs:r}=Ze(e,t);if(r>n)return null;let i=e+r;return{entering:Ke(i,t),atMs:i}}function $e(e,t){if(e===void 0||e===``)return`none`;let n=ft(e),r=at().find(e=>e.key===n)?.provider;return r===`DeepSeek`?`deepseek-metered`:t&&r===`智谱 AI`?`zhipu-coding-plan`:`none`}function et(e,t){switch(t){case`deepseek-metered`:return Ze(e,Je);case`zhipu-coding-plan`:return Ze(e,Ye);case`none`:return null}}function tt(e,t,n){switch(t){case`deepseek-metered`:return Qe(e,Je,n);case`zhipu-coding-plan`:return Qe(e,Ye,n);case`none`:return null}}function nt(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 rt=[],W={};function it(e,t){rt=e,W=t,ct=void 0}function at(){return rt}function ot(){return W}let st={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 ct;function lt(){if(ct!==void 0)return ct;let e=new Map,t=(t,n)=>{let r=G(t);r!==``&&!e.has(r)&&e.set(r,n)};for(let e of rt)t(e.key,e.key);for(let[e,n]of Object.entries(W))t(e,n);for(let e of ke)t(e.key,e.key);return ct=e,e}function ut(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 dt(e){let t=ot()[e];if(t!==void 0)return t;let n=G(e);if(n===``)return;let r=lt().get(n);return r===void 0?(z??[]).find(e=>G(e.key)===n)?.key:r}function ft(e){let t=ot()[e]??e;if(t===e){let t=G(e);if(t!==``){let e=lt().get(t);if(e!==void 0)return e;let n=(z??[]).find(e=>G(e.key)===t);if(n!==void 0)return n.key}for(let t of ut(e)){let e=dt(t);if(e!==void 0)return e}}return t}function pt(e){let t=ft(e),n=je?.[t];if(n!==void 0)return n;let r=ke.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=ft(e),n=at().find(e=>e.key===t),r=z?.find(e=>e.key===t),i=n??(r===void 0?at().at(-1)??st:ht(r)),a=Ie(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=pt(t);return o===void 0?i:{...i,price:{currency:`USD`,input:o.input,cacheHit:o.cacheHit,output:o.output}}}function ht(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 gt(e,t){let n=e.endsAtMs!==void 0&&t>=e.endsAtMs;return Number.isFinite(t)&&!n&&e.factor>0&&e.factor<1}function _t(e,t){let{promo:n}=e;if(n===void 0||!gt(n,t))return e;let r=e=>n.factors?.[e]??n.factor,i=e=>({input:e.input*r(`input`),cacheHit:e.cacheHit*r(`cacheHit`),...e.cacheMiss===void 0?{}:{cacheMiss:e.cacheMiss*r(`cacheMiss`)},output:e.output*r(`output`)});return{...e,price:{...i(e.price),currency:e.price.currency,...e.price.offPeak===void 0?{}:{offPeak:i(e.price.offPeak)}}}}function vt(e=Date.now()){let t=[...at().filter(e=>e.retired!==!0).map(t=>_t(t,e))],n=new Set(t.map(e=>e.key.toLowerCase())),r=new Set(t.map(e=>G(e.key)));for(let e of Me??[]){let i=e.id.toLowerCase();if((()=>{let t=ft(e.id);return at().find(e=>e.key===t)})()!==void 0)continue;let a=G(e.id);if(n.has(i)||a!==``&&r.has(a))continue;let o=(z??[]).find(e=>G(e.key)===a),s;if(o!==void 0)s=ht(o),e.name!==void 0&&e.name!==``&&(s={...s,name:e.name});else{let t=pt(i);s=t===void 0?{key:ft(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=Ie(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 yt(e){let t=getComputedStyle(document.documentElement).getPropertyValue(`--${e}`).trim();return t===``?`#8b95a3`:t}function bt(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*Ve():a}function xt(e,t,n=U,r=Date.now()){let i=_t(e,r),a=bt(i.price,t,i.price.currency),o=i.price.offPeak===void 0?a:bt(i.price.offPeak,t,i.price.currency);return a*n+o*(1-n)}function St(e){let t=Ve();return t>0?e/t:e}function Ct(e,t){if(t===`usd`)return St(e);if(t===`eur`){let t=He();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 wt(e,t=`CNY`){return`${t===`USD`?`$`:t===`EUR`?`€`:`¥`}${e.toFixed(e>=10?1:2)}`}function Tt(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=We().rate;return a>0?i/a:i}function q(e){return e>=1e9?`${(e/1e9).toFixed(2)}B`:e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(0)}K`:String(e)}function Et(e){let t=Number(e);return Number.isFinite(t)?`${t.toFixed(1)}%`:`0.0%`}let J={top:18,right:40,bottom:26,left:46};function Dt(e){let[,t,n]=e.split(`-`);return`${Number(t)}/${Number(n)}`}function Ot(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(Math.round(e))}function Y(e,t){let n=[];for(let r=0;r<e;r+=t)n.push(r);return e>0&&n[n.length-1]!==e-1&&n.push(e-1),n}let kt={key:`__total__`,name:``,color:``};function At({data:e,models:t=[],currency:n=`cny`,metric:r=`cost`,t:i}){let a=i??(e=>we[e]),[o,s]=(0,d.useState)(null),c=e=>K(Ct(e,n),n),l=e=>r===`tokens`?Ot(e):c(e),u=e=>r===`tokens`?e.tokens??0:e.cost,f=(0,d.useMemo)(()=>{let n=e.length;if(n===0)return null;let i=680-J.left-J.right,o=220-J.top-J.bottom,s=e=>n===1?J.left+i/2:J.left+i*e/(n-1),c=Math.max(...r===`tokens`?e.map(e=>e.tokens??0):e.map(e=>Math.max(e.cost,Object.values(e.byModel??{}).reduce((e,t)=>e+t,0))),1e-4),l=e=>J.top+o-e/c*o,d=Math.max(...e.map(e=>e.calls),1),f=e=>J.top+o-e/d*o,p=i/n,m=Math.min(18,p*.6);return{n,plotW:i,plotH:o,inner:s,yCost:l,yCalls:f,barW:m,bars:e.flatMap((e,n)=>{let i=s(n)-m/2;if(t.length===0||r===`tokens`)return[{date:e.date,model:{...kt,name:a(`trendTotal`)},x:i,base:0,value:u(e),topRounded:!0}];let o=null;for(let n of t)(e.byModel?.[n.key]??0)>0&&(o=n.key);let c=0;return t.map(t=>{let n=e.byModel?.[t.key]??0,r={date:e.date,model:t,x:i,base:c,value:n,topRounded:t.key===o};return c+=n,r})}),costTicks:[0,.25,.5,.75,1].map(e=>c*e).reverse(),callsTicks:[0,.25,.5,.75,1].map(e=>d*e).reverse(),linePath:e.map((e,t)=>{let n=f(e.calls);return`${t===0?`M`:`L`}${s(t)} ${n}`}).join(` `)}},[e,t,r]);if(f===null)return(0,m.jsx)(`div`,{className:I.chartEmpty,children:a(`trendEmpty`)});let{n:p,plotW:h,plotH:g,inner:_,yCost:v,yCalls:y,barW:b,bars:x,costTicks:S,callsTicks:C,linePath:w}=f,T=o===null?void 0:e[o],ee=Y(p,Math.max(1,Math.ceil(p/8)));return(0,m.jsxs)(`div`,{className:I.chartWrap,children:[(0,m.jsxs)(`svg`,{viewBox:`0 0 680 220`,className:I.chartSvg,role:`img`,"aria-label":`Daily cost by model and total calls`,onMouseLeave:()=>{s(null)},onMouseMove:e=>{let t=e.currentTarget.getBoundingClientRect(),n=((e.clientX-t.left)/t.width*680-J.left)/h,r=Math.round(n*(p-1));s(Math.min(Math.max(r,0),p-1))},children:[S.map((e,t)=>{let n=v(e);return(0,m.jsxs)(`g`,{children:[(0,m.jsx)(`line`,{x1:J.left,x2:680-J.right,y1:n,y2:n,className:I.chartGrid}),(0,m.jsx)(`text`,{x:J.left-8,y:n+3,textAnchor:`end`,className:I.chartAxisLabel,children:l(e)})]},`cost-${t}`)}),x.map(t=>{if(t.value>0)return(0,m.jsx)(`rect`,{x:t.x,y:v(t.base+t.value),width:b,height:v(t.base)-v(t.base+t.value),rx:t.topRounded?2:0,className:t.model.color===``?I.chartBar:I.chartStack,style:t.model.color===``?void 0:{fill:t.model.color}},`${t.date}-${t.model.key}`);let n=e.find(e=>e.date===t.date);return n!==void 0&&n.calls>0&&t.base===0?(0,m.jsx)(`rect`,{x:t.x,y:v(0)-1,width:b,height:1,rx:0,className:I.chartBarPlaceholder},`${t.date}-${t.model.key}-placeholder`):null}),(0,m.jsx)(`path`,{d:w,fill:`none`,className:I.chartLine}),C.map((e,t)=>{let n=y(e);return(0,m.jsx)(`text`,{x:680-J.right+8,y:n+3,textAnchor:`start`,className:I.chartAxisLabel,children:Ot(e)},`calls-${t}`)}),ee.map(t=>{let n=e[t];return n===void 0?null:(0,m.jsx)(`text`,{x:_(t),y:214,textAnchor:`middle`,className:I.chartAxisLabel,children:Dt(n.date)},n.date)}),o!==null&&(0,m.jsx)(`line`,{x1:_(o),x2:_(o),y1:J.top,y2:J.top+g,className:I.chartCrosshair})]}),T!==void 0&&o!==null&&(0,m.jsxs)(`div`,{className:I.chartTooltip,style:{left:`${_(o)/680*100}%`,top:`${v(T.cost)/220*100}%`},children:[(0,m.jsx)(`div`,{className:I.chartTooltipDate,children:T.date}),r!==`tokens`&&t.filter(e=>(T.byModel?.[e.key]??0)>0).map(e=>(0,m.jsxs)(`div`,{className:I.chartTooltipRow,children:[(0,m.jsx)(`span`,{className:I.chartTooltipSwatch,style:{background:e.color}}),e.name,` `,(0,m.jsx)(`strong`,{children:c(T.byModel?.[e.key]??0)})]},e.key)),(0,m.jsxs)(`div`,{className:I.chartTooltipRow,children:[(0,m.jsx)(`span`,{className:I.chartLegendBar}),a(`trendTotal`),` `,(0,m.jsx)(`strong`,{children:r===`tokens`?Ot(T.tokens??0):c(T.cost)})]}),(0,m.jsxs)(`div`,{className:I.chartTooltipRow,children:[(0,m.jsx)(`span`,{className:I.chartLegendLine}),a(`calls`),` `,(0,m.jsx)(`strong`,{children:T.calls.toLocaleString()})]})]}),t.length>0&&r!==`tokens`&&(0,m.jsxs)(`div`,{className:I.chartLegend,children:[t.map(e=>(0,m.jsxs)(`span`,{children:[(0,m.jsx)(`span`,{className:I.chartTooltipSwatch,style:{background:e.color}}),e.name]},e.key)),(0,m.jsxs)(`span`,{children:[(0,m.jsx)(`span`,{className:I.chartLegendLine}),a(`calls`)]})]})]})}let X={top:14,right:42,bottom:22,left:46};function jt(e){return e.slice(5,13).replace(`T`,` `)}function Mt(e){return String(e>=100?Math.round(e):Number(e.toFixed(1)))}function Nt(e){return e<1e4?`${Math.round(e)} ms`:e<6e4?`${(e/1e3).toFixed(1)} s`:`${(e/6e4).toFixed(1)} min`}function Pt(e){return e>=1e3?`${(e/1e3).toFixed(1)}k`:e.toFixed(1)}function Ft(e,t,n){return t===`ttft`?`${Math.round(e)} ms`:`${e.toFixed(1)} ${n(`perfTpsUnit`)}`}function It({perf:e,models:t,t:n}){let[r,i]=(0,d.useState)(()=>be()),[a,o]=(0,d.useState)(null),s=e=>{i(e),xe(e)},c=e=>t.find(t=>t.key===e)?.color??`#8b95a3`,l=(0,d.useMemo)(()=>e===void 0?[]:Object.entries(e.byModel).map(([e,n])=>({key:e,name:t.find(t=>t.key===e)?.name??e,color:c(e),samples:n.samples,ttftAvg:n.ttftAvg,ttftP50:n.ttftP50,ttftP90:n.ttftP90,...n.ttftMax===void 0?{}:{ttftMax:n.ttftMax},...n.ttftSpikes===void 0?{}:{ttftSpikes:n.ttftSpikes},...n.tpsAvg===void 0?{}:{tpsAvg:n.tpsAvg},latencyAvg:n.latencyAvg,estimatedSamples:n.estimatedSamples})).sort((e,t)=>t.samples-e.samples||t.ttftP90-e.ttftP90),[e,t]),u=(0,d.useMemo)(()=>{if(e===void 0)return[];if(r.models!==void 0){let t=new Set(Object.keys(e.byModel));return r.models.filter(e=>t.has(e))}return l.slice(0,5).map(e=>e.key)},[e,l,r.models]),f=(0,d.useMemo)(()=>{if(e===void 0)return null;let t=Object.keys(e.byHourModel).sort().slice(-48);if(t.length===0)return null;let n=t.length,i=680-X.left-X.right,a=180-X.top-X.bottom,o=e=>n===1?X.left+i/2:X.left+i*e/(n-1),s=new Set(u),c=e=>r.metric===`ttft`?e?.ttftAvg:e?.tpsAvg,d=[],f=0;for(let r of l){if(!s.has(r.key))continue;let i=[];for(let a=0;a<n;a++){let n=t[a];if(n===void 0)continue;let s=c(e.byHourModel[n]?.[r.key]);s===void 0||!Number.isFinite(s)||(i.push({i:a,x:o(a),y:0,v:s}),s>f&&(f=s))}d.push({key:r.key,name:r.name,color:r.color,segments:[],points:i})}let p=d.reduce((e,t)=>e+t.points.length,0);f=Math.max(f,1);let m=e=>X.top+a-e/f*a;for(let e of d){let t=``,n=-2;for(let r of e.points)r.y=m(r.v),t!==``&&r.i!==n+1&&(e.segments.push(t),t=``),t+=`${t===``?`M`:`L`}${r.x} ${r.y} `,n=r.i;t!==``&&e.segments.push(t)}let h=Math.max(1,Math.ceil(n/8)),g=[];for(let e=0;e<n;e+=h)g.push(e);return g[g.length-1]!==n-1&&g.push(n-1),{hourKeys:t,n,plotW:i,plotH:a,inner:o,yOf:m,series:d,ticks:[0,.5,1].map(e=>f*e).reverse(),xTicks:g,totalPoints:p}},[e,l,u,r.metric]);if(e===void 0||l.length===0)return(0,m.jsx)(`div`,{className:I.chartEmpty,"data-testid":`billing-perf-empty`,children:n(`perfEmpty`)});let p=e=>{let t=u.includes(e)?u.filter(t=>t!==e):[...u,e];s({metric:r.metric,models:t})},h=e=>{s({metric:e,...r.models===void 0?{}:{models:r.models}})},g=a===null||f===null?[]:f.series.flatMap(e=>{let t=e.points.find(e=>e.i===a);return t===void 0?[]:[{key:e.key,name:e.name,color:e.color,v:t.v}]});return(0,m.jsxs)(`div`,{"data-testid":`billing-perf-panel`,children:[(0,m.jsx)(`div`,{className:I.tableScroll,"data-testid":`billing-perf-table`,children:(0,m.jsxs)(`table`,{className:I.modelTable,children:[(0,m.jsx)(`thead`,{children:(0,m.jsxs)(`tr`,{children:[(0,m.jsx)(`th`,{children:n(`model`)}),(0,m.jsx)(`th`,{className:I.numCol,children:n(`perfSamples`)}),(0,m.jsx)(`th`,{className:I.numCol,children:n(`perfTtft`)}),(0,m.jsx)(`th`,{className:I.numCol,children:n(`perfP50`)}),(0,m.jsx)(`th`,{className:I.numCol,children:n(`perfP90`)}),(0,m.jsx)(`th`,{className:I.numCol,children:n(`perfMax`)}),(0,m.jsx)(`th`,{className:I.numCol,children:n(`perfTps`)}),(0,m.jsx)(`th`,{className:I.numCol,children:n(`perfLatency`)}),(0,m.jsx)(`th`,{className:I.numCol,children:n(`perfEstimated`)})]})}),(0,m.jsx)(`tbody`,{children:l.map(e=>(0,m.jsxs)(`tr`,{children:[(0,m.jsx)(`td`,{children:(0,m.jsxs)(`span`,{className:I.modelCell,children:[(0,m.jsx)(`span`,{className:I.modelDot,style:{background:e.color}}),(0,m.jsx)(`span`,{className:I.modelName,children:e.name})]})}),(0,m.jsx)(`td`,{className:I.numCol,children:e.samples.toLocaleString()}),(0,m.jsx)(`td`,{className:I.numCol,children:Nt(e.ttftAvg)}),(0,m.jsx)(`td`,{className:I.numCol,children:Nt(e.ttftP50)}),(0,m.jsx)(`td`,{className:I.numCol,children:Nt(e.ttftP90)}),(0,m.jsx)(`td`,{className:I.numCol,children:e.ttftMax===void 0?(0,m.jsx)(`span`,{className:I.na,children:`—`}):(0,m.jsxs)(`span`,{children:[Nt(e.ttftMax),e.ttftSpikes!==void 0&&e.ttftSpikes>0?` (${e.ttftSpikes}↑)`:``]})}),(0,m.jsx)(`td`,{className:I.numCol,children:e.tpsAvg===void 0?(0,m.jsx)(`span`,{className:I.na,children:`—`}):Pt(e.tpsAvg)}),(0,m.jsx)(`td`,{className:I.numCol,children:Nt(e.latencyAvg)}),(0,m.jsx)(`td`,{className:I.numCol,children:e.estimatedSamples>0?e.estimatedSamples:(0,m.jsx)(`span`,{className:I.na,children:`—`})})]},e.key))})]})}),f!==null&&(0,m.jsxs)(`div`,{"data-testid":`billing-perf-hour`,children:[(0,m.jsx)(`div`,{className:I.perfBar,children:(0,m.jsx)(`span`,{className:I.rangeToggle,role:`group`,"aria-label":n(`perfTitle`),children:[`ttft`,`tps`].map(e=>(0,m.jsx)(`button`,{type:`button`,className:y(I.rangeButton,r.metric===e&&I.rangeButtonActive),"aria-pressed":r.metric===e,"data-testid":`billing-perf-tab-${e}`,onClick:()=>{h(e)},children:e===`ttft`?`${n(`perfTtft`)} (ms)`:`${n(`perfTps`)} (${n(`perfTpsUnit`)})`},e))})}),(0,m.jsxs)(`div`,{className:I.perfChips,role:`group`,"aria-label":n(`model`),children:[(0,m.jsx)(`button`,{type:`button`,className:I.perfChip,"data-testid":`billing-perf-chip-all`,onClick:()=>{s({metric:r.metric,models:l.map(e=>e.key)})},children:n(`perfAll`)}),l.map(e=>{let t=u.includes(e.key);return(0,m.jsxs)(`button`,{type:`button`,className:y(I.perfChip,!t&&I.perfChipOff),style:t?{color:e.color,borderColor:`color-mix(in srgb, ${e.color} 45%, transparent)`}:void 0,"aria-pressed":t,"data-testid":`billing-perf-chip-${e.key}`,onClick:()=>{p(e.key)},children:[(0,m.jsx)(`span`,{className:I.perfChipDot,style:{background:t?e.color:`var(--dsw-alias-label-dimmed)`}}),e.name]},e.key)})]}),f.totalPoints>0?(0,m.jsxs)(`div`,{className:I.chartWrap,children:[(0,m.jsxs)(`svg`,{viewBox:`0 0 680 180`,className:I.chartSvg,role:`img`,"aria-label":`Hourly perf comparison by model`,onMouseLeave:()=>{o(null)},onMouseMove:e=>{let t=e.currentTarget.getBoundingClientRect(),n=((e.clientX-t.left)/t.width*680-X.left)/f.plotW,r=Math.round(n*(f.n-1));o(Math.min(Math.max(r,0),f.n-1))},children:[f.ticks.map((e,t)=>{let n=f.yOf(e);return(0,m.jsxs)(`g`,{children:[(0,m.jsx)(`line`,{x1:X.left,x2:680-X.right,y1:n,y2:n,className:I.chartGrid}),(0,m.jsx)(`text`,{x:X.left-8,y:n+3,textAnchor:`end`,className:I.chartAxisLabel,children:Mt(e)})]},`tick-${t}`)}),f.series.map(e=>e.segments.map((t,n)=>(0,m.jsx)(`path`,{d:t,fill:`none`,className:I.chartLine,style:{stroke:e.color}},`${e.key}-${n}`))),f.xTicks.map(e=>{let t=f.hourKeys[e];return t===void 0?null:(0,m.jsx)(`text`,{x:f.inner(e),y:174,textAnchor:`middle`,className:I.chartAxisLabel,children:jt(t)},t)}),a!==null&&(0,m.jsx)(`line`,{x1:f.inner(a),x2:f.inner(a),y1:X.top,y2:X.top+f.plotH,className:I.chartCrosshair}),a!==null&&f.series.map(e=>{let t=e.points.find(e=>e.i===a);return t===void 0?null:(0,m.jsx)(`circle`,{cx:t.x,cy:t.y,r:3.5,fill:e.color,className:I.chartHoverDot},`${e.key}-dot`)})]}),a!==null&&g.length>0&&(0,m.jsxs)(`div`,{className:I.chartTooltip,"data-testid":`billing-perf-tooltip`,style:{left:`${f.inner(a)/680*100}%`,top:`${(X.top+f.plotH/2)/180*100}%`},children:[(0,m.jsx)(`div`,{className:I.chartTooltipDate,children:jt(f.hourKeys[a]??``)}),g.map(e=>(0,m.jsxs)(`div`,{className:I.chartTooltipRow,children:[(0,m.jsx)(`span`,{className:I.chartTooltipSwatch,style:{background:e.color}}),e.name,` `,(0,m.jsx)(`strong`,{children:Ft(e.v,r.metric,n)})]},e.key))]})]}):(0,m.jsx)(`div`,{className:I.chartEmpty,"data-testid":`billing-perf-chart-empty`,children:n(`perfChartEmpty`)})]}),f===null&&(0,m.jsx)(`div`,{className:I.chartEmpty,"data-testid":`billing-perf-chart-empty`,children:n(`perfChartEmpty`)})]})}let Lt=`@kenz1117/dsh-ui-usage-billing`,Rt=`kenz1117`;function zt({t:e,version:t}){return(0,m.jsxs)(`section`,{className:I.setCard,"data-testid":`billing-plugin-info`,children:[(0,m.jsxs)(`div`,{className:I.plgHead,children:[(0,m.jsx)(`span`,{className:I.plgIcon,"aria-hidden":`true`,children:(0,m.jsx)(`svg`,{width:`20`,height:`20`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,m.jsx)(`path`,{d:`M10 3a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a2 2 0 0 0 4 0V4a1 1 0 0 1 1-1h1a1 1 0 0 1 1 1v1a2 2 0 0 0 4 0 1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-1a2 2 0 0 0 0 4h1a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-1a2 2 0 0 0-4 0v1a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-2a2 2 0 0 0-4 0v1a1 1 0 0 1-1 1h-1a1 1 0 0 1-1-1v-1a2 2 0 0 0-4 0 1 1 0 0 1-1 1H3a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1h1a2 2 0 0 0 0-4H3a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1h1a2 2 0 0 0 4 0z`})})}),(0,m.jsxs)(`div`,{className:I.plgTitle,children:[(0,m.jsxs)(`div`,{className:I.plgNameRow,children:[(0,m.jsx)(`h3`,{className:I.plgName,children:Lt}),(0,m.jsx)(`span`,{className:I.plgTag,children:t===void 0?`—`:`v${t}`})]}),(0,m.jsx)(`p`,{className:I.plgDesc,children:`Usage billing dashboard for DeepSeek Harness`})]})]}),(0,m.jsxs)(`div`,{className:I.plgGrid,children:[(0,m.jsxs)(`div`,{className:I.plgItem,children:[(0,m.jsx)(`span`,{className:I.plgLabel,children:e(`pluginAuthor`)}),(0,m.jsxs)(`a`,{className:I.plgLink,href:`https://github.com/${Rt}`,target:`_blank`,rel:`noreferrer`,children:[`KenZ`,` (`,Rt,`)`]})]}),(0,m.jsxs)(`div`,{className:I.plgItem,children:[(0,m.jsx)(`span`,{className:I.plgLabel,children:e(`pluginRepository`)}),(0,m.jsx)(`a`,{className:I.plgLink,href:`https://github.com/kenz1117/dsh-ui-usage-billing`,target:`_blank`,rel:`noreferrer`,children:`GitHub`})]}),(0,m.jsxs)(`div`,{className:I.plgItem,children:[(0,m.jsx)(`span`,{className:I.plgLabel,children:e(`pluginNpm`)}),(0,m.jsx)(`a`,{className:I.plgLink,href:`https://www.npmjs.com/package/@kenz1117/dsh-ui-usage-billing`,target:`_blank`,rel:`noreferrer`,children:Lt})]}),(0,m.jsxs)(`div`,{className:I.plgItem,children:[(0,m.jsx)(`span`,{className:I.plgLabel,children:e(`pluginLicense`)}),(0,m.jsx)(`span`,{className:I.plgVal,children:`MIT`})]})]})]})}function Bt(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 Vt(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(Math.round(e))}let Z={top:14,right:18,bottom:22,left:46},Ht=`var(--ds-blue)`,Ut=`var(--ds-cyan)`,Wt=`var(--ds-amber)`;function Gt(e,t,n,r){return JSON.stringify({days:e,models:t,dayModels:n,total:r},null,2)}function Kt(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=Bt(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=Bt(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-Z.left-Z.right,n=200-Z.top-Z.bottom,r=Math.max(...p===`model`?C.map(e=>e.total):S.map(e=>e.miss+e.hit+e.output),1),i=e=>Z.top+n-e/r*n,a=t/e,o=Math.min(20,a*.6),s=n=>e===1?Z.left+t/2:Z.left+t*n/(e-1),c=Math.max(1,Math.ceil(e/8)),l=[];for(let t=0;t<e;t+=c)l.push(t);return e>0&&l[l.length-1]!==e-1&&l.push(e-1),{n:e,plotW:t,plotH:n,max:r,y:i,barW:o,inner:s,indices:l,groupW:a}},[S,C,p]),te=()=>{let e=new Blob([qt(S)],{type:`text/csv`}),t=document.createElement(`a`);t.href=URL.createObjectURL(e),t.download=`token-daily-${Bt()}.csv`,t.click(),setTimeout(()=>URL.revokeObjectURL(t.href),0)},k=()=>{let e=new Blob([Gt(S,E,C,l)],{type:`application/json`}),t=document.createElement(`a`);t.href=URL.createObjectURL(e),t.download=`token-${Bt()}.json`,t.click(),setTimeout(()=>URL.revokeObjectURL(t.href),0)},A=u===null?void 0:S[u],j=u===null?void 0:C[u],ne=O===null?0:Math.ceil(80/Math.max(O.groupW,1)),M=u===null||O===null?void 0:u>=O.n-ne?I.chartTooltipAlignRight:u<ne?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:k,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-Z.left)/O.plotW,r=Math.round(n*(O.n-1));f(Math.min(Math.max(r,0),O.n-1))},children:[[0,.5,1].map(e=>{let t=O.max*e,n=O.y(t);return(0,m.jsxs)(`g`,{children:[(0,m.jsx)(`line`,{x1:Z.left,x2:680-Z.right,y1:n,y2:n,className:I.chartGrid}),(0,m.jsx)(`text`,{x:Z.left-8,y:n+3,textAnchor:`end`,className:I.chartAxisLabel,children:Vt(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:Ht}),(0,m.jsx)(`rect`,{x:n,y:a,width:O.barW,height:i-a,fill:Ut}),(0,m.jsx)(`rect`,{x:n,y:o,width:O.barW,height:a-o,fill:Wt})]},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:Z.top,y2:Z.top+O.plotH,className:I.chartCrosshair})]}),u!==null&&p===`structure`&&A!==void 0&&(0,m.jsxs)(`div`,{className:y(I.chartTooltip,M),"data-testid":`billing-token-tooltip`,style:{left:`${O.inner(u)/680*100}%`,top:`${O.y(A.miss+A.hit+A.output)/200*100}%`},children:[(0,m.jsxs)(`div`,{className:I.chartTooltipHead,children:[(0,m.jsx)(`span`,{className:I.chartTooltipDate,children:A.date}),(0,m.jsx)(`strong`,{children:(A.miss+A.hit+A.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:Ut}}),i(`tokenHit`)]}),(0,m.jsx)(`strong`,{children:A.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:Ht}}),i(`tokenMiss`)]}),(0,m.jsx)(`strong`,{children:A.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:Wt}}),i(`tokenOutput`)]}),(0,m.jsx)(`strong`,{children:A.output.toLocaleString()})]})]}),u!==null&&p===`model`&&j!==void 0&&(0,m.jsxs)(`div`,{className:y(I.chartTooltip,M),"data-testid":`billing-token-tooltip`,style:{left:`${O.inner(u)/680*100}%`,top:`${O.y(j.total)/200*100}%`},children:[(0,m.jsxs)(`div`,{className:I.chartTooltipHead,children:[(0,m.jsx)(`span`,{className:I.chartTooltipDate,children:j.date}),(0,m.jsx)(`strong`,{children:j.total.toLocaleString()})]}),w.map(e=>{let t=j.models[e.key];return t===void 0?null:(0,m.jsxs)(`div`,{className: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:Ht}}),i(`tokenMiss`)]}),(0,m.jsxs)(`span`,{children:[(0,m.jsx)(`span`,{className:I.chartTooltipSwatch,style:{background:Ut}}),i(`tokenHit`)]}),(0,m.jsxs)(`span`,{children:[(0,m.jsx)(`span`,{className:I.chartTooltipSwatch,style:{background:Wt}}),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,children:[(0,m.jsx)(`td`,{children:(0,m.jsx)(`span`,{className:I.modelName,children:e.name})}),(0,m.jsx)(`td`,{className:I.numCol,children:q(e.input)}),(0,m.jsx)(`td`,{className:I.numCol,children:q(e.output)}),(0,m.jsx)(`td`,{className:I.numCol,children:e.reasoning>0?q(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:q(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 qt(e){return[`date,missInput,cacheHit,output,reasoning,total`,...e.map(e=>`${e.date},${e.miss},${e.hit},${e.output},${e.reasoning},${e.miss+e.hit+e.output}`)].join(`
2
+ `)}function Jt(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${n(t.getHours())}:${n(t.getMinutes())}`}function Yt(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}`}function Xt(e){let t=Math.round(e/1e3);return t<60?`${t}s`:`${Math.floor(t/60)}m${String(t%60).padStart(2,`0`)}s`}function Zt({rounds:e,flags:t,currency:n,t:r}){let i=(0,d.useMemo)(()=>e.slice(-40),[e]),a=(0,d.useMemo)(()=>new Set(t.map(e=>`${e.sessionId}:${e.turn}`)),[t]),o=(0,d.useMemo)(()=>Math.max(1e-4,...i.map(e=>e.cost)),[i]);if(i.length===0)return(0,m.jsxs)(`div`,{className:I.roundsEmpty,children:[r(`model`),` —`]});let s=e=>K(Ct(e,n),n);return(0,m.jsxs)(`div`,{className:I.rounds,children:[(0,m.jsx)(`div`,{className:I.roundsBars,role:`img`,"aria-label":`cost per turn`,children:i.map(e=>{let t=a.has(`${e.sessionId}:${e.turn}`),n=Math.max(1,e.cost/o*100),i=Ge(e.startedAt)===`peak`;return(0,m.jsxs)(`div`,{className:y(I.roundsBarCol,i?I.roundsBarColPeak:I.roundsBarColOff),children:[(0,m.jsx)(`span`,{className:I.roundsBarLabel,style:{bottom:`${n}%`},children:s(e.cost)}),(0,m.jsx)(`div`,{className:I.roundsBarWrap,children:(0,m.jsx)(`div`,{className:t?I.roundsBarFlagged:I.roundsBar,style:{height:`${n}%`},"data-testid":`round-bar`,title:`${r(`model`)} ${e.model} · ${s(e.cost)} · ${Yt(e.startedAt)}${e.endedAt===void 0?``:` → ${Jt(e.endedAt)} (${Xt(e.endedAt-e.startedAt)})`}`,children:t&&(0,m.jsx)(`span`,{className:I.roundsFlagMark,"aria-hidden":`true`})})})]},`${e.sessionId}:${e.turn}`)})}),(0,m.jsxs)(`div`,{className:I.roundsAxis,children:[(0,m.jsxs)(`span`,{children:[r(`costAbbr`),` `,s(o)]}),(0,m.jsxs)(`span`,{children:[i.length,` `,r(`roundsUnit`)]})]})]})}let Qt=[`color-mix(in srgb, var(--ds-blue) 10%, var(--dsb-3))`,`color-mix(in srgb, var(--ds-blue) 30%, var(--dsb-3))`,`color-mix(in srgb, var(--ds-blue) 60%, var(--dsb-3))`,`color-mix(in srgb, var(--ds-blue) 90%, var(--dsb-3))`,`var(--ds-blue)`],$t=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`];function en(e){let t=e=>String(e).padStart(2,`0`);return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}`}function tn(e,t){let n=new Map;for(let t of e)n.set(t.date,t.value);let r=0;for(let e of n.values())e>r&&(r=e);let i=t.getFullYear(),a=t.getMonth(),o=t.getDate(),s=new Date(i,a+1,0).getDate(),c=new Date(i,a,1).getDay(),l=c+s,u=Math.ceil(l/7),d=[];for(let e=0;e<u;e+=1){let t=[];for(let l=0;l<7;l+=1){let u=e*7+l-c+1;if(u<1){let e=new Date(i,a,u);t.push({date:en(e),dayNum:e.getDate(),value:0,level:0,placeholder:!0});continue}if(u>s){let e=new Date(i,a+1,u-s);t.push({date:en(e),dayNum:e.getDate(),value:0,level:0,placeholder:!0});continue}let d=en(new Date(i,a,u)),f=n.get(d)??0,p=0;if(f>0&&r>0){let e=Math.ceil(f/r*4);p=Math.min(4,Math.max(1,e))}let m=u>o;t.push({date:d,dayNum:u,value:m?0:f,level:m?0:p,placeholder:m})}d.push(t)}return d}function nn(e,t,n=52){let r=new Map;for(let t of e)r.set(t.date,t.value);let i=0;for(let e of r.values())e>i&&(i=e);let a=en(t),o=new Date(t);o.setHours(0,0,0,0),o.setDate(o.getDate()-o.getDay());let s=new Date(o);s.setDate(o.getDate()-(n-1)*7);let c=[];for(let e=0;e<n;e+=1){let t=[];for(let n=0;n<7;n+=1){let o=new Date(s);o.setDate(s.getDate()+e*7+n);let c=en(o),l=c>a,u=l?0:r.get(c)??0,d=0;if(!l&&u>0&&i>0){let e=Math.ceil(u/i*4);d=Math.min(4,Math.max(1,e))}t.push({date:c,dayNum:o.getDate(),value:u,level:d,placeholder:l})}c.push(t)}return c}function rn({days:e,currency:t,now:n,t:r,range:i=`month`,unit:a=`cost`}){let[o,s]=(0,d.useState)(null),c=e=>K(Ct(e,t),t),l=e=>a===`tokens`?q(e):c(e),u=(0,d.useMemo)(()=>tn(e,n??new Date),[e,n]);if(i!==`month`){let t=nn(e,n??new Date,i===`half`?26:52),a=[],o=-1;return t.forEach((e,t)=>{let n=Number(e[0]?.date.slice(5,7)??0);n!==o&&(a.push({index:t,label:$t[n-1]??``}),o=n)}),(0,m.jsxs)(`div`,{className:I.heatmapYear+(i===`half`?` `+I.heatmapHalf:``),"data-testid":i===`half`?`heatmap-half`:`heatmap-year`,children:[(0,m.jsxs)(`div`,{className:I.heatmapYearBody,children:[(0,m.jsx)(`div`,{className:I.heatmapYearWeekdays,"aria-hidden":`true`,children:[{label:`Mon`,row:1},{label:`Wed`,row:3},{label:`Fri`,row:5}].map(e=>(0,m.jsx)(`span`,{className:I.heatmapYearWeekday,style:{gridRow:e.row},children:e.label},e.label))}),(0,m.jsxs)(`div`,{className:I.heatmapYearScroll,children:[(0,m.jsx)(`div`,{className:I.heatmapYearMonths,"aria-hidden":`true`,"data-testid":`heatmap-year-months`,children:a.map(e=>(0,m.jsx)(`span`,{className:I.heatmapYearMonth,style:{gridColumn:e.index+1},children:e.label},e.index))}),(0,m.jsx)(`div`,{className:I.heatmapYearGrid,role:`img`,"aria-label":`yearly cost heatmap`,"data-testid":`heatmap-year-grid`,children:t.flat().map(e=>(0,m.jsx)(`button`,{type:`button`,className:I.heatmapYearCell,"data-testid":`heatmap-year-cell`,"data-level":e.level,style:{background:Qt[e.level]},title:`${e.date} · ${l(e.value)}`,"aria-label":`${e.date}: ${l(e.value)}`},e.date))})]})]}),(0,m.jsxs)(`div`,{className:I.heatmapFooter,children:[(0,m.jsx)(`span`,{className:I.heatmapLegendText,children:r(`heatmapLess`)}),(0,m.jsx)(`span`,{className:I.heatmapLegend,children:Qt.map((e,t)=>(0,m.jsx)(`i`,{style:{background:e}},t))}),(0,m.jsx)(`span`,{className:I.heatmapLegendText,children:r(`heatmapMore`)})]})]})}return(0,m.jsxs)(`div`,{className:I.heatmap,children:[(0,m.jsx)(`div`,{className:I.heatmapGrid,role:`img`,"aria-label":`daily cost heatmap`,children:u.map(e=>e.map(e=>e.placeholder?(0,m.jsx)(`div`,{className:I.heatmapCellEmpty,children:e.dayNum},e.date):(0,m.jsx)(`button`,{type:`button`,className:I.heatmapCell,"data-testid":`heatmap-cell`,"data-level":e.level,style:{background:Qt[e.level]},title:`${e.date} · ${l(e.value)}`,"aria-label":`${e.date}: ${l(e.value)}`,onMouseEnter:()=>{s(e)},onMouseLeave:()=>{s(null)},onFocus:()=>{s(e)},onBlur:()=>{s(null)},children:e.dayNum},e.date)))}),(0,m.jsxs)(`div`,{className:I.heatmapFooter,children:[(0,m.jsx)(`span`,{className:I.heatmapLegendText,children:r(`heatmapLess`)}),(0,m.jsx)(`span`,{className:I.heatmapLegend,children:Qt.map((e,t)=>(0,m.jsx)(`i`,{style:{background:e}},t))}),(0,m.jsx)(`span`,{className:I.heatmapLegendText,children:r(`heatmapMore`)}),o!==null&&(0,m.jsxs)(`span`,{className:I.heatmapHover,"data-testid":`heatmap-hover`,children:[o.date,` · `,l(o.value)]})]})]})}let an={window:6,threshold:2,reasonFactor:1.8,reasonHitDropPp:15};function on(e){if(e.length===0)return null;let t=0;for(let n of e)t+=n;return t/e.length}function sn(e){let t=e.cacheHit+e.cacheMiss;return t<=0?null:e.cacheHit/t*100}function cn(e,t){let n=t?.window??an.window,r=t?.threshold??an.threshold,i=t?.reasonFactor??an.reasonFactor,a=t?.reasonHitDropPp??an.reasonHitDropPp,o=[];if(n<=0||r<=0)return o;let s=[],c=[],l=[],u=[];for(let t of e){if(t.cost<=0)continue;let e=t.output,d=t.input,f=sn(t),p=on(s),m=[];if(p!==null&&p>0&&t.cost>p*r){let n=on(c),r=on(l),s=on(u);n!==null&&n>0&&e>n*i&&m.push(`output-growth`),r!==null&&r>0&&d>r*i&&m.push(`context-bloat`),s!==null&&f!==null&&f<s-a&&m.push(`cache-hit-drop`),o.push({sessionId:t.sessionId,turn:t.turn,cost:t.cost,reasons:m})}for(s.push(t.cost),c.push(e),l.push(d),f!==null&&u.push(f);s.length>n;)s.shift();for(;c.length>n;)c.shift();for(;l.length>n;)l.shift();for(;u.length>n;)u.shift()}return o}function ln(e){return/[",\r\n]/.test(e)?`"${e.replace(/"/g,`""`)}"`:e}function un(e){return/^[=+\-@\t\r]/.test(e)?`'${e}`:e}function dn(e){return e.toFixed(2)}function fn(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,dn(n.cost)].join(`,`)})].join(`
3
+ `)}function pn(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[ln(un(n)),r,t.calls,dn(t.cost)].join(`,`)})].join(`
4
+ `)}function mn(e){return e===void 0?``:e.split(/[\\/]/).filter(Boolean).pop()??e}function hn(e){return[`session_id,title,project,calls,cost_cny,last_active`,...e.map(e=>[ln(un(e.id)),ln(un(e.title??``)),ln(un(mn(e.cwd))),e.calls,dn(e.cost),e.lastActive>0?new Date(e.lastActive).toISOString():``].join(`,`))].join(`
5
+ `)}function gn(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 _n(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 vn(e,t){return e==null?null:Number.isFinite(e.nextSwitchInMs)&&e.nextSwitchInMs<=t?`soon`:e.tier===`peak`?`peak`:`offPeak`}let yn={显式缓存创建:`Explicit cache write`,显式缓存命中:`Explicit cache hit`,长期半价:`Half price`,与标准价一致:`Same as standard`,"限时 5 折":`Limited-time 50% off`};function bn(e,t){return e===void 0||t!==`en`?e:yn[e]??e}function xn(e,t){let n=t.trim().toLowerCase();return n===``?e:e.filter(e=>e.key.toLowerCase().includes(n)||(e.name??``).toLowerCase().includes(n)||(e.provider??``).toLowerCase().includes(n))}let Sn={"智谱 AI":`Zhipu AI`,阿里通义:`Alibaba Qwen`,字节豆包:`ByteDance Doubao`,月之暗面:`Moonshot AI`,小米:`Xiaomi`,百度文心:`Baidu ERNIE`,腾讯混元:`Tencent Hunyuan`,零一万物:`01.AI`,阶跃星辰:`StepFun`,科大讯飞:`iFlytek Spark`,商汤:`SenseNova`,百川智能:`Baichuan`,"小米 Token Plan(海外)":`Xiaomi Token Plan (Global)`,"小米 Token Plan(国内)":`Xiaomi Token Plan (CN)`,"小米 Token Plan(新加坡)":`Xiaomi Token Plan (SG)`,"火山引擎 Token Plan":`Volcengine Token Plan`,"火山方舟 Token Plan":`Volcengine Ark Token Plan`,"豆包 Token Plan":`Doubao Token Plan`,"百度文心 Plan":`Baidu ERNIE Plan`,"MiniMax Token Plan(国内)":`MiniMax Token Plan (CN)`};function Cn(e,t){return t===`en`?Sn[e]??e:e}let wn={"https://tokenhub.tencentmaas.com":`腾讯云 TokenHub`,"https://api.lkeap.cloud.tencent.com":`腾讯云 Token Plan`,"https://api.deepseek.com":`DeepSeek 官方`},Tn={"腾讯云 TokenHub":`Tencent Cloud TokenHub`,"腾讯云 Token Plan":`Tencent Cloud Token Plan`,"DeepSeek 官方":`DeepSeek Official`};function En(e){try{return new URL(e).host}catch{return e}}function Dn(e,t=`zh`){if(e.startsWith(`site:`)){let n=e.slice(5),r=wn[n];return r===void 0?En(n):t===`en`?Tn[r]??r:r}if(e.startsWith(`direct:`)){let n=e.slice(7);return/^deepseek(?:-[a-z0-9-]+)?$/i.test(n)?t===`en`?`DeepSeek Official`:`DeepSeek 官方`:`${t===`en`?`Direct`:`直连`} · ${n}`}}let On=[`直连 · `,`Direct · `];function kn(e){for(let t of On)if(e.startsWith(t))return e.slice(t.length)}let An=`dsh-billing-peak-alert-v1`,jn={enabled:!1,leadMin:2,position:`bottom-right`,webNotify:!0,mode:`both`};function Mn(){try{let e=localStorage.getItem(An);if(e===null)return{...jn};let t=JSON.parse(e),n=t.mode===`peak`||t.mode===`offPeak`?t.mode:jn.mode,r=t.position===`center`?`center`:`bottom-right`;return{enabled:t.enabled===!0,leadMin:typeof t.leadMin==`number`&&Number.isFinite(t.leadMin)?Math.min(30,Math.max(1,Math.round(t.leadMin))):jn.leadMin,position:r,webNotify:t.webNotify!==!1,mode:n}}catch{return{...jn}}}function Nn(e){try{localStorage.setItem(An,JSON.stringify(e))}catch{}}function Pn(e,t,n,r){if(!t.enabled)return null;let i=tt(e,r,t.leadMin*6e4);return i===null||t.mode===`peak`&&i.entering!==`peak`||t.mode===`offPeak`&&i.entering!==`offPeak`||i.atMs===n?null:{...i,channel:r}}function Fn({hit:e,config:t,t:n,onDismiss:r}){let[i,a]=(0,d.useState)(()=>Date.now());if((0,d.useEffect)(()=>{let e=setInterval(()=>a(Date.now()),1e3);return()=>clearInterval(e)},[]),(0,d.useEffect)(()=>{i>=e.atMs&&r()},[i,e.atMs,r]),i>=e.atMs)return null;let o=Math.max(1,Math.round((e.atMs-i)/6e4)),s=e.entering,c=n(s===`peak`?`tierPeak`:`tierOff`),l=n(e.channel===`zhipu-coding-plan`?s===`peak`?`peakAlertDescPeakZhipu`:`peakAlertDescOffZhipu`:s===`peak`?`peakAlertDescPeak`:`peakAlertDescOff`),u=s===`peak`;return(0,m.jsxs)(`div`,{className:y(I.peakCard,u?I.peakCardPeak:I.peakCardOff,t.position===`center`?I.peakCardCenter:I.peakCardCorner),"data-testid":`billing-peak-alert`,role:`alert`,children:[(0,m.jsxs)(`div`,{className:I.peakHead,children:[(0,m.jsxs)(`span`,{className:y(I.peakTag,u?I.peakTagPrimary:I.peakTagSuccess),children:[(0,m.jsx)(`span`,{className:y(I.peakDot,u?I.peakDotPrimary:I.peakDotSuccess),"aria-hidden":`true`}),c]}),(0,m.jsx)(`button`,{type:`button`,className:I.peakClose,onClick:r,"aria-label":n(`close`),children:`×`})]}),(0,m.jsxs)(`div`,{className:y(I.peakCount,u?I.peakCountPrimary:I.peakCountSuccess),children:[o,`min`]}),(0,m.jsx)(`p`,{className:I.peakDesc,children:l})]})}let In=p,Ln=In.IconChevronDownOutlineMedium??In.IconChevronDownOutline14,Rn=[{id:`overview`,labelKey:`tabOverview`},{id:`providers`,labelKey:`tabProviders`},{id:`token`,labelKey:`tabToken`},{id:`trends`,labelKey:`tabTrends`},{id:`pricing`,labelKey:`tabPricing`},{id:`settings`,labelKey:`tabSettings`}],zn=[50,80,100],Bn={checked:!1,available:!1,models:0,failures:0,okProviders:[],badProviders:[]},Vn={DeepSeek:[`deepseek`],"智谱 AI":[`zhipu`,`glm`,`z.ai`],阿里通义:[`qwen`,`tongyi`,`dashscope`,`aliyun`],字节豆包:[`doubao`,`volcengine`,`ark`],月之暗面:[`moonshot`,`kimi`],小米:[`xiaomi`,`mi`,`mimo`],MiniMax:[`minimax`],百度文心:[`ernie`,`wenxin`,`qianfan`,`baidu`],腾讯混元:[`hunyuan`,`tencent`],零一万物:[`01.ai`,`lingyi`,`yi`],阶跃星辰:[`step`,`stepfun`,`step-3.7`],科大讯飞:[`spark`,`xfyun`,`iflytek`],商汤:[`sensenova`,`sensetime`],百川智能:[`baichuan`],OpenAI:[`openai`],Google:[`google`,`gemini`],xAI:[`xai`,`grok`],Meta:[`meta`,`llama`],Anthropic:[`claude`,`anthropic`],"Mistral AI":[`mistral`,`ministral`,`devstral`],Cohere:[`cohere`,`command`],美团:[`longcat`,`meituan`],面壁智能:[`minicpm`,`modelbest`],小红书:[`dots`,`rednote`,`xiaohongshu`]};function Q(e){return e.trim().toLowerCase().replace(/[\s_/-]+/g,``)}function Hn(e,t){if(e.length===0||t.length===0)return!1;if(e===t)return!0;let[n,r]=e.length<=t.length?[e,t]:[t,e];return n.length>=3&&r.includes(n)}function Un(e,t){let n=Q(e),r=Q(t);if(Hn(n,r))return!0;let i=Vn[e];return i!==void 0&&i.some(e=>Hn(Q(e),r))}function Wn(e){let t=e.trim().toLowerCase(),n=t.replace(/[\s_/-]+/g,``);if(n.length!==0){for(let[e,n]of Object.entries(Vn))for(let r of n){let n=Q(r);if(n.length!==0&&(t===n||t.startsWith(`${n}-`)||t.startsWith(`${n}/`)||t.startsWith(`${n}_`)||t.includes(`${n}-`)||t.includes(`${n}/`)||t.includes(`${n}_`)))return e}for(let[e,t]of Object.entries(Vn))for(let r of t){let t=Q(r);if(!(t.length<4)&&n.includes(t))return e}}}let Gn={"kimi-coding":`月之暗面`,"zai-coding-cn":`智谱 AI`,"zai-coding":`智谱 AI`,"qwen-token-plan":`阿里通义`,"qwen-token-plan-cn":`阿里通义`,"xiaomi-token-plan-ams":`小米`,"xiaomi-token-plan-cn":`小米`,"xiaomi-token-plan-sgp":`小米`,"volcengine-token-plan":`字节豆包`,"ark-token-plan":`字节豆包`,"doubao-token-plan":`字节豆包`,ernie:`百度文心`,baidu:`百度文心`,wenxin:`百度文心`,minimax:`MiniMax`,"minimax-cn":`MiniMax`,"minimax-token-plan":`MiniMax`,"minimax-token-plan-cn":`MiniMax`,"hunyuan-token-plan":`腾讯混元`,"tencent-token-plan":`腾讯混元`,"hy-token-plan":`腾讯混元`,"xinghuo-token-plan":`讯飞星火`,"xfyun-coding":`讯飞星火`,"spark-coding":`讯飞星火`,"huawei-token-plan":`华为云`,"pangu-token-plan":`华为云`,"huawei-maas-token-plan":`华为云`,"volcengine-agent-plan":`字节豆包`,"ark-agent-plan":`字节豆包`,"baidu-token-plan":`百度文心`,"ernie-token-plan":`百度文心`,"wenxin-token-plan":`百度文心`,opencode:`OpenCode`,"opencode-go":`OpenCode`};function Kn(e){let t=Gn[e];return t===void 0?Wn(e)??e:t}let qn=`https://platform.kimi.com/console/pay`,Jn=`https://open.bigmodel.cn/finance-center/finance/pay`,Yn=`https://bailian.console.aliyun.com/`,Xn=`https://console.volcengine.com/ark`,Zn=`https://console.anthropic.com/settings/billing`,Qn=`https://console.cloud.google.com/billing`,$n=`https://console.x.ai/`,er=`https://platform.xiaomimimo.com/console/balance`,tr=`https://console.cloud.tencent.com/expense/recharge`,nr={deepseek:`https://platform.deepseek.com/top_up`,minimax:`https://platform.minimax.cn/console/recharge-records`,moonshot:qn,kimi:qn,zhipu:Jn,bigmodel:Jn,qwen:Yn,dashscope:Yn,doubao:Xn,volcengine:Xn,ark:Xn,openai:`https://platform.openai.com/settings/organization/billing`,anthropic:Zn,claude:Zn,google:Qn,gemini:Qn,xai:$n,grok:$n,siliconflow:`https://cloud.siliconflow.cn/account/charge`,hunyuan:tr,tencent:tr,腾讯云:tr,xiaomi:er,mimo:er,mi:er,qianfan:`https://console.bce.baidu.com/qianfan/overview`};function rr(e){let t=nr[e];if(t!==void 0)return t;let n=Object.keys(nr).find(t=>e.startsWith(t));return n===void 0?void 0:nr[n]}function ir(e){let t=Q(e),n=rr(t);if(n!==void 0)return n;for(let[e,n]of Object.entries(Vn))if(Hn(Q(e),t))for(let e of n){let t=rr(Q(e));if(t!==void 0)return t}}function ar(e,t){let n=Object.keys(e).filter(e=>e<=t).sort().slice(-7);return n.length===0?0:n.reduce((t,n)=>t+(e[n]?.cost??0),0)/n.length}function or(e,t,n){let r=Object.keys(e).filter(e=>e.startsWith(t)),i=t.split(`-`),a=new Date(Number(i[0]),Number(i[1]),0).getDate(),o=r.length>0?r.reduce((t,n)=>t+(e[n]?.cost??0),0)/r.length:ar(e,n);return o<=0?0:o*a}function sr(e){let t=Pe();if(t===void 0||e.byDayModels===void 0)return e;let n=Ue().rate,r=e.byDayModelsSite!==void 0,i={},a={},o=new Map,s=0,c=e=>t.some(t=>t.origin!==void 0&&t.origin!==``&&(t.key===e||G(t.key)===G(e))),l=(e,t,r)=>{if(e===void 0)return r;let i=Math.min(t.cacheHit,t.cacheMiss+t.cacheHit),a=r=>{let a=(t.cacheMiss*r.input+i*r.cacheHit+t.output*r.output)/1e6;return e.currency===`USD`?a*n:a};return e.offPeak===void 0?a(e):a(e)*U+a(e.offPeak)*.5};for(let[t,n]of Object.entries(e.byDayModels)){let u=0,d={};for(let[i,a]of Object.entries(n)){let n=Ie(i)??Re(i),s=r&&c(i),f;if((n!==void 0||s)&&s&&e.byDayModelsSite?.[t]?.[i]!==void 0){let r=0;for(let[a,o]of Object.entries(e.byDayModelsSite[t][i])){let e=a.startsWith(`site:`)?a.slice(5):void 0,t=e===void 0?void 0:Ie(i,e);r+=l(t??n,o,o.cost)}f=r}else f=l(n,a,a.cost);u+=f,d[i]={...a,cost:f},o.set(i,(o.get(i)??0)+f)}let f=e.byDay[t];f!==void 0&&(i[t]={...f,cost:u}),a[t]=d,s+=u}return{...e,total:{...e.total,cost:s},byDay:i,byDayModels:a,byModel:Object.fromEntries(Object.entries(e.byModel).map(([e,t])=>{let n=o.get(e);return[e,n===void 0?t:{...t,cost:n}]})),unpricedModels:(e.unpricedModels??[]).filter(e=>!Ie(e)&&!Re(e))}}function cr(){return typeof Notification<`u`&&Notification.permission===`granted`}let lr=new Set;function ur(e,t){lr.has(e)||(lr.add(e),fetch(`/api/billing/notify-claim`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({key:e})}).then(e=>e.json()).then(e=>{e.claimed!==!1&&t()}).catch(()=>t()))}function dr(e){return Object.keys(e).length}function fr(e,t=Date.now()){let n=0,r=new Date(t);for(;$(r.getTime())in e;)n+=1,r.setDate(r.getDate()-1);return n}function pr(e){let t=[];for(let n=6;n>=0;--n){let r=new Date;r.setDate(r.getDate()-n);let i=$(r.getTime());t.push({date:i,cost:e[i]?.cost??0})}return t}function mr(e,t,n=e=>e.cost){let r=new Date(`${t}T00:00:00`),i=(r.getDay()+6)%7,a=0;for(let t=0;t<=i;t+=1){let i=new Date(r);i.setDate(i.getDate()-t);let o=e[$(i.getTime())];o!==void 0&&(a+=n(o))}return a}function hr(e,t,n){let r=new Date(`${t}T00:00:00`),i=(r.getDay()+6)%7,a=new Date(r);a.setDate(a.getDate()-i);let o=$(a.getTime()),s=new Date(r);s.setDate(s.getDate()-6);let c=$(s.getTime()),l=0,u=0,d=0,f=0,p=0,m=0,h=0,g,_=0;for(let[r,i]of Object.entries(e)){if(!(n===`today`?r===t:n===`7d`?r>=c&&r<=t:n===`week`?r>=o&&r<=t:r.startsWith(t.slice(0,7))))continue;l+=i.cost,u+=i.calls,d+=i.input,f+=i.output,p+=i.cacheHit,m+=i.cacheMiss,h+=i.reasoning??0;let e=i.cacheMiss+i.cacheHit+i.output;e>_&&(_=e,g=r)}return{cost:l,calls:u,input:d,output:f,cacheHit:p,cacheMiss:m,reasoning:h,peakDay:g,peakTokens:_}}function gr(e,t){return e.checked?e.okProviders.some(e=>Un(t,e))?I.healthOk:e.badProviders.some(e=>Un(t,e))?I.healthBad:I.healthIdle:I.healthIdle}function _r(e){let t=new Map,n=[];for(let r of e){if(r.title===void 0||r.title===``){n.push(r);continue}let e=t.get(r.title);if(e===void 0){let e={...r,mergedCount:1};t.set(r.title,e),n.push(e);continue}e.children===void 0&&(e.children=[{...e}]),e.children.push({...r}),e.calls+=r.calls,e.cost+=r.cost,e.lastActive=Math.max(e.lastActive,r.lastActive),r.stale===!0&&(e.stale=!0),e.mergedCount=(e.mergedCount??1)+1}return n.sort((e,t)=>t.cost-e.cost||t.lastActive-e.lastActive)}function vr(e,t){switch(e){case`ok`:return``;case`not-configured`:return t(`subscriptionNotConfigured`);case`unauthorized`:return t(`subscriptionUnauthorized`);case`rate-limited`:return t(`subscriptionRateLimited`);case`invalid-response`:return t(`subscriptionInvalid`);default:return t(`subscriptionUnavailable`)}}function yr(e,t){switch(e){case`session`:return t(`subscriptionSession`);case`weekly`:return t(`subscriptionWeekly`);case`monthly`:return t(`subscriptionMonthly`);case`billing`:return t(`subscriptionBilling`)}}function br(e,t){switch(e){case`new-api`:return t(`relayKindNewApi`);case`sub2api`:return t(`relayKindSub2Api`);default:return t(`relayKindUnknown`)}}let xr={"new-api":I.siteKindSite,sub2api:I.siteKindDirect,unknown:I.siteKindUnknown},Sr=3e4;function $(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 Cr(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}let wr=[`#4f8cff`,`#2dd4bf`,`#a78bfa`,`#f59e0b`,`#f472b6`,`#fbbf24`,`#38bdf8`,`#6366f1`,`#f97316`,`#14b8a6`],Tr={total:{calls:0,input:0,output:0,cacheHit:0,cacheMiss:0,cost:0,reasoning:0},byModel:{},byDay:{},byDayModels:{}};async function Er(){try{let e=await fetch(`/api/billing/usage-stats`);if(!e.ok)return null;let t=await e.text(),n=JSON.parse(t);if(typeof n!=`object`||!n||!(`total`in n))return null;let r=n,i=e=>typeof e==`object`&&!!e;return{total:r.total??Tr.total,byModel:r.byModel??{},byDay:r.byDay??{},...r.byDayModels===void 0?{}:{byDayModels:r.byDayModels},...i(r.byDayModelsSite)?{byDayModelsSite:r.byDayModelsSite}:{},...r.updatedAt===void 0?{}:{updatedAt:r.updatedAt},...typeof r.budget==`number`?{budget:r.budget}:{},...typeof r.lowBalanceThreshold==`number`?{lowBalanceThreshold:r.lowBalanceThreshold}:{},...Array.isArray(r.bySession)?{bySession:r.bySession}:{},...Array.isArray(r.byTurn)?{byTurn:r.byTurn}:{},...Array.isArray(r.byWorkspace)?{byWorkspace:r.byWorkspace}:{},...i(r.bySite)?{bySite:r.bySite}:{},...i(r.byTier)?{byTier:r.byTier}:{},...i(r.byTool)?{byTool:r.byTool}:{},...Array.isArray(r.unpricedModels)?{unpricedModels:r.unpricedModels}:{},...typeof r.staleLedgerSessions==`number`?{staleLedgerSessions:r.staleLedgerSessions}:{},...typeof r.unreadableSessions==`number`?{unreadableSessions:r.unreadableSessions}:{},...typeof r.searchCallEstimateCny==`number`?{searchCallEstimateCny:r.searchCallEstimateCny}:{},...r.byRole!==null&&typeof r.byRole==`object`?{byRole:r.byRole}:{},...r.perf!==null&&typeof r.perf==`object`&&r.perf.byModel!==null&&typeof r.perf.byModel==`object`&&r.perf.byHourModel!==null&&typeof r.perf.byHourModel==`object`?{perf:r.perf}:{},...typeof r.pluginVersion==`string`?{pluginVersion:r.pluginVersion}:{}}}catch{return null}}let Dr=!1,Or=0;async function kr(e=0){try{let t=await fetch(`/api/billing/pricing`);if(!t.ok){Dr=!1;return}let n=await t.text(),r=JSON.parse(n);if(typeof r!=`object`||!r||!(`source`in r)){Dr=!1;return}let i=r;Array.isArray(i.catalog)&&i.catalog.length>0&&i.aliases!==null&&typeof i.aliases==`object`&&it(i.catalog,i.aliases);let a=r;if(a.source===`builtin`&&e<3){if(e===0){if(Dr)return;Dr=!0}setTimeout(()=>{kr(e+1)},2e3);return}Dr=!1,Or=a.syncedAt??0,ze(a)}catch{Dr=!1}}async function Ar(){try{return(await fetch(`/api/billing/pricing/refresh`,{method:`POST`,headers:{"content-type":`application/json`},body:`{}`})).ok?(await kr(),!0):!1}catch{return!1}}async function jr(){try{let e=await fetch(`/api/billing/balance`);if(!e.ok)return{balances:[]};let t=await e.text(),n=JSON.parse(t);if(typeof n!=`object`||!n)return{balances:[]};let r=n;return{balances:Array.isArray(r.balances)?r.balances:[],...r.reconcile===void 0?{}:{reconcile:r.reconcile}}}catch{return{balances:[]}}}async function Mr(){let e=await fetch(`/api/billing/subscriptions`);if(!e.ok)throw Error(`subscriptions HTTP ${String(e.status)}`);let t=await e.text(),n=JSON.parse(t);if(typeof n==`object`&&n&&`quotas`in n)return n.quotas;throw Error(`subscriptions: invalid response`)}async function Nr(){let e=await fetch(`/api/billing/relay-quotas`);if(!e.ok)throw Error(`relay-quotas HTTP ${String(e.status)}`);let t=await e.text(),n=JSON.parse(t);if(typeof n==`object`&&n&&`quotas`in n)return n.quotas;throw Error(`relay-quotas: invalid response`)}async function Pr(){try{let e=await fetch(`/api/billing/usage-tool`);if(!e.ok)return;let t=JSON.parse(await e.text());return typeof t.enabled==`boolean`?t.enabled:void 0}catch{return}}async function Fr(e){try{let t=await fetch(`/api/billing/usage-tool`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({enabled:e})});return t.ok?JSON.parse(await t.text()).ok===!0:!1}catch{return!1}}let Ir=e=>e.models.reduce((e,t)=>e+(t.actual??(t.plan===!0?0:t.estimated)),0);function Lr(e){let t=t=>K(Ct(t,e.currency),e.currency),{wide:n,t:r,onOpen:i,monthCost:a,todayCost:o,weekCost:s,days:c,vendorStatus:l,dash:u,floatPrefs:p,subscriptions:h,cardPrefs:g,monthTokens:_,todayTokens:v,weekTokens:b,budgetPressure:x}=e,S=(0,d.useMemo)(()=>p.targets.map(e=>h.find(t=>t.provider===e)).filter(e=>e!==void 0),[p.targets,h]),[C,w]=(0,d.useState)(0),T=S.length===0?0:Math.min(C,S.length-1),ee=S[T];(0,d.useEffect)(()=>{if(p.mode!==`subscription`||S.length<2)return;let e=setInterval(()=>w(e=>(e+1)%S.length),1500);return()=>clearInterval(e)},[p.mode,S.length]);let E=(0,d.useRef)(null),[D,O]=(0,d.useState)(!1),[te,k]=(0,d.useState)({left:0,top:0}),A=(0,d.useRef)(void 0),j=(0,d.useCallback)(()=>{window.clearTimeout(A.current),O(!0)},[]),ne=(0,d.useCallback)(()=>{window.clearTimeout(A.current),A.current=window.setTimeout(()=>O(!1),120)},[]);(0,d.useEffect)(()=>()=>window.clearTimeout(A.current),[]);let M=(0,d.useCallback)(()=>{let e=E.current?.getBoundingClientRect();e!==void 0&&k({left:e.left,top:e.top-8})},[]);(0,d.useEffect)(()=>{if(!D)return;let e=()=>M();return window.addEventListener(`scroll`,e,!0),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`scroll`,e,!0),window.removeEventListener(`resize`,e)}},[D,M]);let re=c.length>0?c.reduce((e,t)=>e+t.cost,0)/c.length:0,ie=re>0?Math.max(0,Math.min(1,o/re)):0,ae=-80+ie*160,oe=(0,m.jsxs)(`svg`,{viewBox:`0 0 40 40`,fill:`none`,stroke:`currentColor`,strokeLinecap:`round`,"aria-hidden":`true`,children:[(0,m.jsx)(`path`,{d:`M5.23 26.4A15 15 0 0 1 34.77 26.4`,strokeWidth:3,opacity:.16}),(0,m.jsx)(`path`,{d:`M5.23 26.4A15 15 0 0 1 34.77 26.4`,strokeWidth:3,strokeDasharray:`${(41.9*ie).toFixed(2)} 41.9`,className:I.triggerGaugeArc}),(0,m.jsx)(`path`,{d:`M5.23 26.4 8.18 26.92M10.36 17.51 12.29 19.81M20 14v3M27.71 19.81 29.64 17.51M31.82 26.92 34.77 26.4`,strokeWidth:1.6,opacity:.7}),(0,m.jsx)(`path`,{d:`M7.01 21.5 8.31 22.25M14.87 14.91 15.38 16.31M24.62 16.31 25.13 14.91M31.69 22.25 32.99 21.5`,strokeWidth:1.2,opacity:.38}),(0,m.jsx)(`line`,{x1:`20`,y1:`29`,x2:`20`,y2:`19.5`,strokeWidth:2,className:I.triggerGaugeNeedle,style:{transform:`rotate(${ae}deg)`,transformOrigin:`20px 29px`}}),(0,m.jsx)(`circle`,{cx:`20`,cy:`29`,r:`1.5`,fill:`currentColor`,stroke:`none`})]});if(!n)return(0,m.jsx)(`button`,{type:`button`,className:y(I.railButton,x!==`none`&&I.triggerBudgetPulse,x===`over`&&I.triggerBudgetOver),"data-testid":`billing-rail-button`,onClick:i,title:`${r(`title`)} · ${t(g.span===`day`?o:g.span===`week`?s:a)}`,children:oe});let N=g.metric===`tokens`,se=c.map(e=>N?e.tokens:e.cost),P=Math.max(...se,0),F=se.map(e=>P>0?4+e/P*12:4);return(0,m.jsxs)(`span`,{ref:E,className:I.triggerWrap,onMouseEnter:()=>{M(),j()},onMouseLeave:ne,onFocusCapture:()=>{M(),j()},onBlurCapture:()=>O(!1),children:[(0,m.jsxs)(`button`,{type:`button`,className:y(I.trigger,x!==`none`&&I.triggerBudgetPulse,x===`over`&&I.triggerBudgetOver),"data-testid":`billing-trigger`,onClick:i,title:`${r(`title`)} · ${t(g.span===`day`?o:g.span===`week`?s:a)}`,children:[(0,m.jsx)(`span`,{className:y(I.triggerIcon,x!==`none`&&I.triggerBudgetHot),"data-testid":`billing-trigger-icon`,children:oe}),(0,m.jsx)(`span`,{className:I.triggerMain,children:(0,m.jsxs)(`span`,{className:I.triggerPrimary,children:[(0,m.jsx)(`span`,{className:I.triggerLabel,children:N?g.span===`day`?r(`triggerTodayTokens`):g.span===`week`?r(`triggerWeekTokens`):r(`triggerMonthTokens`):g.span===`day`?r(`triggerToday`):g.span===`week`?r(`weekCost`):r(`triggerMonth`)}),(()=>{let e=g.span===`day`?N?v:o:g.span===`week`?N?b:s:N?_:a;return N?(0,m.jsx)(`span`,{className:I.triggerMetric,"data-testid":`billing-trigger-span-tokens`,children:q(e)}):(0,m.jsxs)(`span`,{className:I.triggerValueRow,children:[(0,m.jsx)(`span`,{className:I.triggerYen,"aria-hidden":`true`,children:t(e).charAt(0)}),(0,m.jsx)(`span`,{className:I.triggerMetric,"data-testid":`billing-trigger-span-money`,children:t(e).slice(1)})]})})()]})}),(0,m.jsx)(`span`,{className:I.triggerSpark,"data-testid":`billing-trigger-spark`,"aria-hidden":`true`,children:F.map((e,t)=>(0,m.jsx)(`span`,{className:t===F.length-1?I.triggerSparkHot:I.triggerSparkBar,style:{height:`${e}px`}},c[t]?.date??String(t)))})]}),(0,f.createPortal)((0,m.jsx)(`span`,{className:y(I.triggerPop,D&&I.triggerPopShown),style:{left:`${te.left}px`,top:`${te.top}px`},"data-testid":`billing-trigger-pop`,"aria-hidden":!D,onMouseEnter:j,onMouseLeave:ne,children:p.mode===`subscription`?(0,m.jsx)(m.Fragment,{children:S.length===0?(0,m.jsx)(`span`,{className:I.triggerPopEmpty,children:r(`floatNoTargets`)}):(0,m.jsxs)(m.Fragment,{children:[ee!==void 0&&(0,m.jsxs)(`div`,{className:I.floatSub,"data-testid":`billing-float-subscription`,children:[(0,m.jsxs)(`div`,{className:I.floatSubHead,children:[(0,m.jsx)(`span`,{className:I.floatSubName,children:ee.displayName}),ee.plan!==void 0&&(0,m.jsx)(`span`,{className:I.floatSubPlan,children:ee.plan})]}),ee.windows.map(e=>(()=>{let t=Math.min(100,Math.max(0,e.usedPercent)),n=Math.min(100,Math.max(0,e.remainingPercent))<=0;return(0,m.jsxs)(`div`,{className:I.subscriptionWindow,children:[(0,m.jsx)(`span`,{className:I.subscriptionWindowLabel,children:yr(e.kind,r)}),(0,m.jsx)(`span`,{className:I.subscriptionTrack,"aria-hidden":`true`,children:(0,m.jsx)(`span`,{className:y(I.subscriptionFill,t>=100&&I.subscriptionFillOver,t>=80&&t<100&&I.subscriptionFillWarn),style:{width:`${t}%`}})}),(0,m.jsxs)(`span`,{className:I.subscriptionMeta,children:[(0,m.jsx)(`span`,{className:y(I.subscriptionPct,n&&I.subscriptionExhausted),children:n?r(`subscriptionExhausted`):r(`subscriptionRemaining`).replace(`{pct}`,String(e.remainingPercent))}),e.resetsAt!==void 0&&(0,m.jsx)(`span`,{className:I.subscriptionReset,children:r(`subscriptionReset`).replace(`{date}`,`${$(new Date(e.resetsAt).getTime())} ${Cr(new Date(e.resetsAt).getTime())}`)})]})]},e.kind)})())]}),S.length>1&&(0,m.jsx)(`span`,{className:I.triggerPopSwitcher,"data-testid":`billing-float-switcher`,children:(0,m.jsxs)(`span`,{className:I.triggerPopSwitchCount,children:[T+1,`/`,S.length]})})]})}):(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(`span`,{className:I.popHead,children:(0,m.jsx)(`span`,{className:I.popTitle,children:r(`popTitle`)})}),(0,m.jsxs)(`span`,{className:I.metricGrid,children:[(0,m.jsxs)(`span`,{className:I.metricCell,children:[(0,m.jsx)(`span`,{className:I.metricLabel,children:r(`floatPrimaryToday`)}),(0,m.jsx)(`span`,{className:I.metricValue,children:t(o)})]}),(0,m.jsxs)(`span`,{className:I.metricCell,children:[(0,m.jsx)(`span`,{className:I.metricLabel,children:r(`floatPrimaryWeek`)}),(0,m.jsx)(`span`,{className:I.metricValue,children:t(s)})]}),(0,m.jsxs)(`span`,{className:I.metricCell,children:[(0,m.jsx)(`span`,{className:I.metricLabel,children:r(`floatPrimaryMonth`)}),(0,m.jsx)(`span`,{className:I.metricValue,children:t(a)})]}),(0,m.jsxs)(`span`,{className:I.metricCell,children:[(0,m.jsx)(`span`,{className:I.metricLabel,children:r(`input`)}),(0,m.jsx)(`span`,{className:I.metricValue,children:q(u.input)})]}),(0,m.jsxs)(`span`,{className:I.metricCell,children:[(0,m.jsx)(`span`,{className:I.metricLabel,children:r(`output`)}),(0,m.jsx)(`span`,{className:I.metricValue,children:q(u.output)})]}),(0,m.jsxs)(`span`,{className:I.metricCell,children:[(0,m.jsx)(`span`,{className:I.metricLabel,children:r(`cacheHit`)}),(0,m.jsx)(`span`,{className:y(I.metricValue,I.metricValueSuccess),children:Et(u.cacheRead+u.cacheMiss>0?u.cacheRead/(u.cacheRead+u.cacheMiss)*100:0)})]})]}),(0,m.jsxs)(`span`,{className:I.popModel,children:[(0,m.jsx)(`span`,{className:I.popModelLabel,children:r(`popTodayModel`)}),l.direct!==void 0||l.sub!==void 0?(0,m.jsxs)(m.Fragment,{children:[l.direct!==void 0&&(0,m.jsxs)(`span`,{className:I.popModelRow,children:[(0,m.jsx)(`span`,{className:y(I.popDot,I.popDotDirect),"aria-hidden":`true`}),(0,m.jsx)(`span`,{className:I.popTagPrimary,children:r(`popDirectLead`)}),(0,m.jsx)(`span`,{className:I.popModelName,children:l.direct.name}),(0,m.jsx)(`span`,{className:y(I.popModelStatus,l.direct.low&&I.popModelStatusLow),children:l.direct.text})]}),l.sub!==void 0&&(0,m.jsxs)(`span`,{className:I.popModelRow,children:[(0,m.jsx)(`span`,{className:y(I.popDot,I.popDotSub),"aria-hidden":`true`}),(0,m.jsx)(`span`,{className:I.popTagSub,children:r(`popSubLead`)}),(0,m.jsx)(`span`,{className:I.popModelName,children:l.sub.name}),(0,m.jsx)(`span`,{className:y(I.popModelStatus,l.sub.low&&I.popModelStatusLow),children:l.sub.text})]})]}):(0,m.jsxs)(`span`,{className:I.popModelRow,children:[(0,m.jsx)(`span`,{className:y(I.popDot,I.popDotNeutral),"aria-hidden":`true`}),(0,m.jsx)(`span`,{className:I.popModelStatus,children:r(`popNoConsumption`)})]})]})]})}),document.body)]})}function Rr({balance:e,days:t,dailyBurn:n,money:r,t:i,onClose:a}){let o=t=>t===void 0?void 0:e.currency===`USD`?`$${t.toFixed(2)}`:r(t),s=o(e.totalBalance),c=o(e.grantedBalance),l=o(e.toppedUpBalance);return(0,m.jsxs)(`span`,{className:I.balanceDetailPop,"data-testid":`billing-balance-detail-pop`,children:[(0,m.jsxs)(`span`,{className:I.balanceDetailHead,children:[(0,m.jsx)(`span`,{className:I.balanceDetailTitle,children:e.displayName}),(0,m.jsx)(`button`,{type:`button`,className:I.balanceDetailClose,"aria-label":i(`close`),onClick:a,children:`×`})]}),(0,m.jsxs)(`span`,{className:I.balanceDetailGrid,children:[s!==void 0&&(0,m.jsx)(zr,{label:i(`balance`),value:s}),c!==void 0&&(0,m.jsx)(zr,{label:i(`balanceGranted`),value:c}),l!==void 0&&(0,m.jsx)(zr,{label:i(`balanceTopped`),value:l}),(0,m.jsx)(zr,{label:i(`balanceDaily`),value:r(n)}),(0,m.jsx)(zr,{label:i(`balanceDaysLong`),value:`${t} ${i(`balanceDaysUnit`)}`})]})]})}function zr({label:e,value:t}){return(0,m.jsxs)(`span`,{className:I.balanceDetailRow,children:[(0,m.jsx)(`span`,{className:I.balanceDetailLabel,children:e}),(0,m.jsx)(`span`,{className:I.balanceDetailValue,children:t})]})}function Br({userPrices:e,onUserPrices:t,t:n}){let[r,i]=(0,d.useState)(()=>[...e]),[a,o]=(0,d.useState)(new Set),s=e=>o(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n}),c=()=>{i(e=>e.filter((e,t)=>!a.has(t))),o(new Set)},l=(e,t)=>i(n=>n.map((n,r)=>r===e?{...n,...t}:n)),u=()=>i(e=>[...e,{key:``,input:0,cacheHit:0,output:0}]),f=e=>{let t=r[e]?.offPeak;return{input:t===void 0?``:String(t.input),cacheHit:t===void 0?``:String(t.cacheHit),output:t===void 0?``:String(t.output)}},p=(e,t,n)=>i(r=>r.map((r,i)=>{if(i!==e)return r;let a={...f(e),[t]:n},o=[a.input,a.cacheHit,a.output].some(e=>e.trim()!==``),s=[a.input,a.cacheHit,a.output].map(e=>Number(e)),c=o&&s.every(e=>Number.isFinite(e)&&e>=0)&&s.some(e=>e>0),{offPeak:l,...u}=r;return c?{...u,offPeak:{input:s[0]??0,cacheHit:s[1]??0,output:s[2]??0}}:u})),h=()=>t(r.filter(e=>e.key.trim()!==``).map(e=>({...e,key:e.key.trim(),...e.origin===void 0||e.origin.trim()===``?{}:{origin:V(e.origin.trim())}}))),g=vt().map(e=>e.key),_=(e,t)=>i(n=>n.map((n,r)=>{if(r!==e)return n;let{currency:i,...a}=n;return t===`USD`?{...a,currency:`USD`}:a})),v=e=>Number.isFinite(e)&&e!==0?String(e):``,b=(e,t,n)=>{let r=Number(n);l(e,{[t]:Number.isFinite(r)&&r>=0?r:0})};return(0,m.jsxs)(`section`,{className:I.setCard,"data-testid":`billing-user-prices`,children:[(0,m.jsx)(`div`,{className:I.setCardHead,children:(0,m.jsxs)(`div`,{className:I.setCardMeta,children:[(0,m.jsx)(`h3`,{className:I.setCardTitle,children:n(`userPrices`)}),(0,m.jsx)(`p`,{className:I.setCardDesc,children:n(`userPricesHint`)})]})}),(0,m.jsxs)(`div`,{className:I.ctlCol,children:[(0,m.jsx)(`datalist`,{id:`billing-price-model-keys`,children:g.map(e=>(0,m.jsx)(`option`,{value:e},e))}),r.map((e,t)=>(0,m.jsxs)(`div`,{className:I.userPriceRow,"data-testid":`billing-user-price-row`,children:[(0,m.jsx)(`input`,{type:`checkbox`,className:I.userPriceCheck,"data-testid":`billing-user-price-select`,checked:a.has(t),"aria-label":n(`userPriceSelect`),onChange:()=>s(t)}),(0,m.jsxs)(`div`,{className:I.userPriceBody,children:[(0,m.jsxs)(`div`,{className:I.userPriceLineMeta,children:[(0,m.jsxs)(`div`,{className:I.userPriceField,children:[(0,m.jsx)(`span`,{className:I.ctlLabel,children:n(`userPriceModel`)}),(0,m.jsx)(`input`,{className:I.userPriceInput,"data-testid":`billing-user-price-model`,type:`text`,list:`billing-price-model-keys`,value:e.key,placeholder:`flash`,"aria-label":n(`userPriceModel`),onChange:e=>l(t,{key:e.target.value})})]}),(0,m.jsxs)(`div`,{className:I.userPriceField,children:[(0,m.jsx)(`span`,{className:I.ctlLabel,children:n(`userPriceSource`)}),(0,m.jsx)(`input`,{className:I.userPriceInput,"data-testid":`billing-user-price-origin`,type:`text`,value:e.origin??``,placeholder:n(`userPriceSourceHint`),"aria-label":n(`userPriceSource`),onChange:e=>l(t,{origin:e.target.value.trim()})})]}),(0,m.jsxs)(`div`,{className:I.userPriceField,children:[(0,m.jsx)(`span`,{className:I.ctlLabel,children:n(`userPriceCurrency`)}),(0,m.jsxs)(`div`,{className:I.ctlGroup,children:[(0,m.jsx)(`button`,{type:`button`,className:y(I.floatModeBtn,e.currency!==`USD`&&I.floatModeBtnOn),onClick:()=>_(t,`CNY`),children:`CNY`}),(0,m.jsx)(`button`,{type:`button`,className:y(I.floatModeBtn,e.currency===`USD`&&I.floatModeBtnOn),onClick:()=>_(t,`USD`),children:`USD`})]})]})]}),(0,m.jsxs)(`div`,{className:I.userPricePriceLine,"data-testid":`billing-user-price-normal`,children:[(0,m.jsx)(`span`,{className:I.ctlLabel,children:n(`userPriceNormal`)}),[`input`,`cacheHit`,`output`].map(r=>(0,m.jsx)(`input`,{className:I.userPriceInputNum,type:`number`,min:0,step:.01,placeholder:n(r===`input`?`tokenMiss`:r===`cacheHit`?`tokenHit`:`tokenOutput`),"aria-label":`${n(`userPriceNormal`)} ${n(r===`input`?`tokenMiss`:r===`cacheHit`?`tokenHit`:`tokenOutput`)}`,value:v(e[r]),onChange:e=>b(t,r,e.target.value)},r))]}),(()=>{let e=f(t);return(0,m.jsxs)(`div`,{className:I.userPricePriceLine,"data-testid":`billing-user-price-offpeak`,children:[(0,m.jsx)(`span`,{className:I.ctlLabel,children:n(`userPriceOffPeak`)}),[`input`,`cacheHit`,`output`].map(r=>(0,m.jsx)(`input`,{className:I.userPriceInputNum,type:`number`,min:0,step:.01,placeholder:n(r===`input`?`tokenMiss`:r===`cacheHit`?`tokenHit`:`tokenOutput`),"aria-label":`${n(`userPriceOffPeak`)} ${n(r===`input`?`tokenMiss`:r===`cacheHit`?`tokenHit`:`tokenOutput`)}`,value:e[r],onChange:e=>p(t,r,e.target.value)},r))]})})()]})]},t)),(0,m.jsxs)(`div`,{className:I.ctlRow,children:[(0,m.jsx)(`button`,{type:`button`,className:I.exportButton,"data-testid":`billing-user-price-add`,onClick:u,children:n(`userPriceAdd`)}),(0,m.jsxs)(`button`,{type:`button`,className:I.exportButton,"data-testid":`billing-user-price-remove-selected`,disabled:a.size===0,onClick:c,children:[n(`userPriceRemoveSelected`),a.size>0?` (${a.size})`:``]}),(0,m.jsx)(`button`,{type:`button`,className:I.exportButton,"data-testid":`billing-user-price-save`,onClick:h,children:n(`userPriceSave`)})]})]})]})}function Vr({stats:e,t,onClose:n,userPrices:r,onUserPrices:i,health:a,balances:o,reconcile:s,quotas:c,relayQuotas:l,currency:u,onCurrency:f,language:h,onLanguage:g,turns:_,renderSlot:v,budgetEnabled:b,budgetAmount:x,onToggleBudget:S,onBudgetAmount:C,peakConfig:w,onPeakConfig:T,onPreviewPeak:ee,floatPrefs:E,onFloatPrefs:D,cardPrefs:k,onCardPrefs:A,sitePrefs:j,onSitePrefs:ne,liveCostPrefs:M,onLiveCostPrefs:re,quotasStale:ie}){let[ae,oe]=(0,d.useState)(`cost`),{total:N,byModel:se,byDay:P}=e,[F,ce]=(0,d.useState)(`overview`),[ue,de]=(0,d.useState)(7),[fe,pe]=(0,d.useState)(()=>{try{return window.localStorage.getItem(`dsh-billing:reconcile-dismissed`)??``}catch{return``}}),he=()=>{let e=new Date,t=e=>String(e).padStart(2,`0`);return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}`},ge=(0,d.useCallback)(()=>{let e=he();pe(e);try{window.localStorage.setItem(`dsh-billing:reconcile-dismissed`,e)}catch{}},[]),[_e,ve]=(0,d.useState)(`month`),[ye,be]=(0,d.useState)(`cost`),[xe,Se]=(0,d.useState)(O),Ce=(0,d.useMemo)(()=>c.filter(e=>e.status===`ok`&&e.windows.length>0).map(e=>({id:e.provider,label:e.displayName})),[c]),[we,Te]=(0,d.useState)(),[Ee,De]=(0,d.useState)(new Set),L=(0,d.useCallback)(e=>{De(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),[ke,Ae]=(0,d.useState)(!1);(0,d.useEffect)(()=>{let e=!0;return Pr().then(t=>{e&&t!==void 0&&Ae(t)}),()=>{e=!1}},[]);let R=(0,d.useCallback)(()=>{let e=!ke;Ae(e),Fr(e).then(t=>{t||Ae(!e)})},[ke]),je=Ue(),[z,Me]=(0,d.useState)(!1),B=(0,d.useCallback)(()=>{z||(Me(!0),Ar().finally(()=>{Me(!1)}))},[z]),V=Or,H=e=>K(Ct(e,u),u),Ne=u===`usd`?`$`:u===`eur`?`€`:`¥`,Pe=h,Fe=e=>Cn(e,Pe),[Ie,Le]=(0,d.useState)(``),[Re,ze]=(0,d.useState)(()=>le()),[Be,Ve]=(0,d.useState)(()=>Date.now());(0,d.useEffect)(()=>{let e=setInterval(()=>{Ve(Date.now())},3e4);return()=>{clearInterval(e)}},[]);let He=c.some(e=>e.displayName===`Z.ai Coding Plan`&&e.status===`ok`),We=w.leadMin*6e4,U=(e,n)=>e===0?t(`free`):wt(Tt(e,n,u,je.rate),u===`usd`?`USD`:u===`eur`?`EUR`:`CNY`),Ge=(0,d.useMemo)(()=>cn([..._].reverse()),[_]),Ke={peak:e.byTier?.peak.cost??0,offPeak:e.byTier?.offPeak.cost??0},qe=Ke.peak/2,Je=ar(P,$()),Ye=e=>o.find(t=>Q(t.provider)===Q(e)),Xe=e=>e.balance?.error===`unconfigured`&&e.models.length>0&&e.models.every(e=>e.plan),Ze=e=>{if(e===void 0)return(0,m.jsx)(`span`,{className:I.na,children:`—`});if(e.error===`unconfigured`)return t(`balanceUnconfigured`);if(e.error===`unauthorized`)return t(`balanceUnauthorized`);if(e.error===`unreachable`)return t(`balanceUnreachable`);if(e.totalBalance===void 0)return(0,m.jsx)(`span`,{className:I.na,children:`—`});let n=e.currency===`USD`?`$${e.totalBalance.toFixed(2)}`:H(e.totalBalance),r=e.currency===`USD`?e.totalBalance*je.rate:e.totalBalance,i=Je>0?Math.floor(r/Je):void 0;return(0,m.jsxs)(`span`,{className:I.balanceCell,children:[(0,m.jsx)(`span`,{children:n}),i!==void 0&&i>=0&&(0,m.jsx)(`button`,{type:`button`,className:y(I.balanceDaysBadge,i<=3&&I.balanceDaysBadgeLow),"data-testid":`billing-balance-days-badge`,title:t(`balanceDays`).replace(`{days}`,String(i)),"aria-label":`${e.displayName} ${t(`balanceDays`).replace(`{days}`,String(i))}`,onClick:()=>{Te(we===e.provider?void 0:e.provider)},children:`?`}),we===e.provider&&(0,m.jsx)(Rr,{balance:e,days:i??0,dailyBurn:Je,money:H,t,onClose:()=>{Te(void 0)}})]})},Qe=Object.keys(P).sort(),tt=$(),nt=P[tt]?.cost??0,rt=tt.slice(0,7),W=tt.slice(0,4),it=Qe.reduce((e,t)=>e+(t.startsWith(rt)?P[t]?.cost??0:0),0),at=Qe.reduce((e,t)=>e+(t.startsWith(W)?P[t]?.cost??0:0),0),ot=(0,d.useMemo)(()=>or(P,rt,tt)+c.reduce((e,t)=>e+(t.planType===`code`?t.subscriptionAmount??0:0),0),[P,rt,tt,c]),st=(0,d.useMemo)(()=>{if(!(b&&x>0))return null;let e=x-it;return{over:e<=0,remainRatio:Math.max(0,Math.min(1,e/x)),remainCny:Math.max(0,e)}},[b,x,it]),G=(0,d.useMemo)(()=>{let e=[];for(let t=ue-1;t>=0;--t){let n=new Date;n.setDate(n.getDate()-t),e.push($(n.getTime()))}return e},[ue]),ct=G.at(-1)??tt,lt=(0,d.useMemo)(()=>Object.entries(P).map(([e,t])=>({date:e,value:ye===`tokens`?t.input+t.output+t.cacheHit+t.cacheMiss:t.cost})),[P,ye]),ut=(0,d.useMemo)(()=>lt.reduce((e,t)=>e+t.value,0),[lt]),dt=dr(P),ft=fr(P),pt=(0,d.useMemo)(()=>G.map(t=>{let n={},r=e.byDayModels?.[t];if(r!==void 0)for(let[e,t]of Object.entries(r))t.cost>0&&(n[e]=t.cost);let i=P[t];return{date:t,cost:i?.cost??0,calls:i?.calls??0,byModel:n,tokens:i===void 0?0:i.input+i.output+i.cacheHit+i.cacheMiss}}),[G,P,e.byDayModels]),ht=(0,d.useMemo)(()=>Object.entries(se).filter(([,e])=>e.calls>0).map(([e,t])=>{let n=mt(e),r=n.key===`other`,i=r?Wn(e):void 0,a={input:t.input,cacheHit:t.cacheHit,cacheMiss:t.cacheMiss,output:t.output};return{key:e,name:r?e:n.name,provider:i??n.provider,calls:t.calls,input:t.input,output:t.output,cacheHitRate:t.cacheHit+t.cacheMiss>0?t.cacheHit/(t.cacheHit+t.cacheMiss)*100:0,estimated:xt(n,a),plan:t.plan===!0,...t.cost>0?{actual:t.cost}:{},uncatalogued:r,estimatedPricing:n.estimated===!0,officialCalls:t.officialCalls??0,officialCost:t.officialCost??0}}).sort((e,t)=>(t.actual??t.estimated)-(e.actual??e.estimated)).map((e,t)=>({...e,color:wr[t%wr.length]??`#8b95a3`})),[se]),_t=(0,d.useMemo)(()=>j.hideUnidentified?l.filter(e=>e.kind!==`unknown`):l,[l,j.hideUnidentified]),bt=(0,d.useMemo)(()=>{let n=new Map;for(let t of Object.values(e.byDayModelsSite??{}))for(let[e,r]of Object.entries(t))for(let[t,i]of Object.entries(r)){let r=n.get(t);r===void 0&&(r=new Map,n.set(t,r));let a=r.get(e)??{calls:0,input:0,output:0,cacheHit:0,cacheMiss:0,cost:0};a.calls+=i.calls,a.input+=i.input,a.output+=i.output,a.cacheHit+=i.cacheHit,a.cacheMiss+=i.cacheMiss,a.cost+=i.cost,r.set(e,a)}let r=new Map;for(let[t,i]of n){let n=[...i.entries()].filter(([,e])=>e.calls>0).map(([t,n],r)=>{let i=mt(t),a=i.key===`other`,o=a?Wn(t)??i.provider:i.provider;return{key:t,name:a?t:i.name,provider:o,color:wr[r%wr.length]??`#8b95a3`,calls:n.calls,input:n.input,output:n.output,cacheHitRate:n.cacheHit+n.cacheMiss>0?n.cacheHit/(n.cacheHit+n.cacheMiss)*100:0,estimated:xt(i,{input:n.input,cacheHit:n.cacheHit,cacheMiss:n.cacheMiss,output:n.output}),plan:e.byModel?.[t]?.plan===!0,...n.cost>0?{actual:n.cost}:{},uncatalogued:a,estimatedPricing:i.estimated===!0,officialCalls:0,officialCost:0}}).sort((e,t)=>(t.actual??t.estimated)-(e.actual??e.estimated));n.length>0&&r.set(t,n)}let i=e=>Dn(e,Pe)??t(`channelUnknown`),s=new Map,l=new Map,u=e=>e.startsWith(`direct:`)?`direct`:e.startsWith(`site:`)?`site`:`unknown`,d={direct:2,site:1,unknown:0,vendor:0};for(let[e,t]of r){let n=i(e),r=s.get(n);if(r===void 0)s.set(n,[...t]),l.set(n,u(e));else{r.push(...t),r.sort((e,t)=>(t.actual??t.estimated)-(e.actual??e.estimated));let i=l.get(n)??`unknown`,a=u(e);d[a]>d[i]&&l.set(n,a)}}let f=new Map,p=new Map;for(let e of c){if(e.status===`not-configured`)continue;let t=e.displayName??Kn(e.provider),n=i(`direct:${e.provider}`),r=s.has(t)?t:s.has(n)?n:void 0,a=r??`sub:${Kn(e.provider)}`;p.set(a,r??Kn(e.provider));let o=f.get(a);o===void 0?f.set(a,[e]):o.push(e)}let m=e=>e===i(`direct:deepseek`)||e===i(`site:https://api.deepseek.com`)?Ye(`deepseek`)??Ye(e):Ye(e),h=[];for(let[e,t]of s)h.push({name:e,models:t,subscriptions:f.get(e)??[],balance:m(e),dot:gr(a,t[0]?.provider??``),channelKind:l.get(e)??`unknown`});for(let[e,t]of p)s.has(e)||h.push({name:t,models:[],subscriptions:f.get(e)??[],balance:Ye(t),dot:gr(a,t),channelKind:`vendor`});let g=new Set(h.flatMap(e=>[Q(e.name),...e.balance===void 0?[]:[Q(e.balance.provider)]]));for(let e of o)g.has(Q(e.provider))||(e.error===void 0||e.provider.startsWith(`custom:`))&&h.push({name:e.displayName,models:[],subscriptions:[],balance:e,dot:gr(a,e.displayName),channelKind:`vendor`});return h.sort((e,t)=>{let n=Ir(t)-Ir(e);return n===0?e.models.length===0&&t.models.length===0?0:t.models.length===0?-1:e.models.length===0?1:e.name.localeCompare(t.name,`zh`):n})},[e.byDayModelsSite,e.byModel,c,o,a,Pe,t]),St=(0,m.jsx)(`thead`,{children:(0,m.jsxs)(`tr`,{children:[(0,m.jsx)(`th`,{children:t(`model`)}),(0,m.jsx)(`th`,{className:I.numCol,children:t(`calls`)}),(0,m.jsx)(`th`,{className:I.numCol,children:t(`inputTokens`)}),(0,m.jsx)(`th`,{className:I.numCol,children:t(`outputTokens`)}),(0,m.jsx)(`th`,{className:I.numCol,children:t(`cacheHitRate`)}),(0,m.jsx)(`th`,{className:I.numCol,children:t(`actual`)})]})}),J=e=>{let n=e.color??(e.colorVar===void 0?void 0:yt(e.colorVar));return(0,m.jsxs)(`span`,{className:I.modelCell,children:[(0,m.jsx)(Hr,{provider:e.provider,...n===void 0?{}:{colorVar:n}}),(0,m.jsxs)(`span`,{children:[(0,m.jsxs)(`span`,{className:I.modelName,children:[e.name,e.uncatalogued&&(0,m.jsx)(`span`,{className:I.uncataloguedTag,"data-testid":`billing-uncatalogued-tag`,children:t(`uncatalogued`)}),e.estimatedPricing&&(0,m.jsx)(`span`,{className:I.estimatedTag,"data-testid":`billing-estimated-tag`,children:t(`estimatedPricing`)})]}),(0,m.jsx)(`span`,{className:I.modelProvider,children:Fe(e.provider)})]})]})},Dt=ht.reduce((e,t)=>e+t.estimated,0),Ot=N.cost>0?N.cost:Dt,Y=(0,d.useMemo)(()=>{if(xe===`all`){let e,t=0;for(let[n,r]of Object.entries(P)){let i=r.cacheMiss+r.cacheHit+r.output;i>t&&(t=i,e=n)}return{cost:Ot,calls:N.calls,input:N.input,output:N.output,cacheHit:N.cacheHit,cacheMiss:N.cacheMiss,reasoning:N.reasoning??0,peakDay:e,peakTokens:t}}return hr(P,$(),xe)},[xe,Ot,N,P]),kt=(0,d.useMemo)(()=>ht.map(e=>({key:e.key,name:e.name,color:e.color})),[ht]),X=pt.length>=2?pt.at(-2)?.cost??0:0,jt=X>0?(nt-X)/X*100:0;return(0,m.jsx)(p.Modal,{open:!0,onClose:n,title:t(`title`),headless:!0,className:y(I.dashboardModal,`dsh-billing-modal`),children:(0,m.jsxs)(`div`,{className:I.dashboard,"data-testid":`billing-dashboard`,children:[(0,m.jsxs)(`div`,{className:I.dashboardHead,"data-testid":`billing-dashboard-head`,children:[(0,m.jsxs)(`div`,{children:[v(`billing.dashboard.decor`,{position:`head`}),(0,m.jsxs)(`div`,{className:I.headTitleRow,children:[(0,m.jsx)(`h2`,{className:I.dashboardTitle,children:t(`title`)}),v(`billing.dashboard.decor`,{position:`headTitle`})]}),(0,m.jsxs)(`p`,{className:I.dashboardSubtitle,children:[t(`lastUpdated`),` `,ct,e.timezone===void 0?null:` · ${e.timezone.name} (${e.timezone.offset})`]})]}),(0,m.jsxs)(`div`,{className:I.dashboardRight,children:[(0,m.jsx)(`span`,{className:I.currencyToggle,role:`group`,"aria-label":t(`language`),children:[`en`,`zh`].map(e=>(0,m.jsx)(`button`,{type:`button`,className:y(I.currencyButton,h===e&&I.currencyButtonActive),"aria-pressed":h===e,"data-testid":`billing-language-${e}`,onClick:()=>{g(e)},children:e===`en`?`EN`:`中`},e))}),(0,m.jsx)(`span`,{className:I.currencyToggle,role:`group`,"aria-label":t(`currency`),children:[`cny`,`usd`,`eur`].map(e=>(0,m.jsx)(`button`,{type:`button`,className:y(I.currencyButton,u===e&&I.currencyButtonActive),"aria-pressed":u===e,"data-testid":`billing-currency-${e}`,title:t(e===`cny`?`currencyCny`:e===`usd`?`currencyUsd`:`currencyEur`),onClick:()=>{f(e)},children:e===`cny`?`¥ CNY`:e===`usd`?`$ USD`:`€ EUR`},e))}),a.checked&&(0,m.jsxs)(`span`,{className:y(I.healthBadge,a.available?I.healthBadgeOk:I.healthBadgeBad),children:[(0,m.jsx)(`span`,{className:y(I.healthDot,a.available?I.healthOk:I.healthBad),"aria-hidden":`true`}),a.available?`${t(`healthModelsLive`).replace(`{n}`,String(a.models))}${a.failures>0?` · ${t(`healthVendorsDown`).replace(`{n}`,String(a.failures))}`:``}`:t(`healthVendorsUnavailable`).replace(`{n}`,String(a.failures))]}),(0,m.jsx)(`button`,{type:`button`,className:I.closeButton,"aria-label":t(`close`),"data-testid":`billing-close`,onClick:n,children:(0,m.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"aria-hidden":`true`,children:[(0,m.jsx)(`path`,{d:`M18 6 6 18`}),(0,m.jsx)(`path`,{d:`m6 6 12 12`})]})})]})]}),(0,m.jsx)(`nav`,{className:I.tabNav,"data-testid":`billing-tab-nav`,role:`tablist`,"aria-label":t(`title`),children:Rn.map(e=>(0,m.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":F===e.id,className:y(I.tabButton,F===e.id&&I.tabButtonActive),"data-testid":`billing-tab-${e.id}`,onClick:()=>{ce(e.id)},children:t(e.labelKey)},e.id))}),(0,m.jsxs)(`div`,{className:I.dashboardBody,children:[F===`overview`&&(0,m.jsxs)(`div`,{className:I.tabPanel,"data-testid":`billing-tab-panel-overview`,children:[s?.kind===`drift`&&s.spent!==void 0&&fe!==he()&&(0,m.jsxs)(`div`,{className:I.reconcileNotice,"data-testid":`billing-reconcile-notice`,role:`note`,children:[(0,m.jsx)(`span`,{className:I.reconcileIcon,"aria-hidden":`true`,children:(0,m.jsxs)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,m.jsx)(`circle`,{cx:`12`,cy:`12`,r:`9`}),(0,m.jsx)(`line`,{x1:`12`,y1:`10`,x2:`12`,y2:`16`}),(0,m.jsx)(`line`,{x1:`12`,y1:`7.5`,x2:`12.01`,y2:`7.5`})]})}),(0,m.jsx)(`span`,{className:I.reconcileText,children:t(`reconcileDrift`).replace(`{provider}`,s.provider??``).replace(`{spent}`,H(s.spent)).replace(`{today}`,H(s.todayOfficialCost??0))}),(0,m.jsx)(`button`,{type:`button`,className:I.reconcileDismiss,"data-testid":`billing-reconcile-dismiss`,onClick:ge,children:t(`reconcileDismiss`)})]}),(0,m.jsxs)(`section`,{className:I.hero,"data-testid":`billing-hero`,children:[v(`billing.dashboard.decor`,{position:`hero`}),(0,m.jsxs)(`div`,{className:I.heroTop,children:[(0,m.jsxs)(`div`,{className:I.heroMain,children:[(0,m.jsx)(`span`,{className:I.heroLabel,children:t(`monthCost`)}),(0,m.jsxs)(`div`,{className:I.heroReadout,children:[(0,m.jsx)(`span`,{className:I.heroCurrency,"aria-hidden":`true`,children:Ne}),(0,m.jsx)(`span`,{className:I.heroValue,children:H(it).slice(1)})]}),(0,m.jsxs)(`span`,{className:I.heroMeta,children:[N.calls.toLocaleString(),` `,t(`calls`)]})]}),st!==null&&(0,m.jsxs)(`div`,{className:I.heroGauge,"data-testid":`billing-hero-gauge`,children:[(0,m.jsxs)(`div`,{className:I.heroGaugeDial,children:[(0,m.jsxs)(`svg`,{className:I.heroGaugeSvg,viewBox:`0 0 120 120`,"aria-hidden":`true`,children:[(0,m.jsx)(`circle`,{className:I.heroGaugeTrack,cx:`60`,cy:`60`,r:`52`}),(0,m.jsx)(`circle`,{className:y(I.heroGaugeArc,st.over&&I.heroGaugeArcOver),cx:`60`,cy:`60`,r:`52`,style:{strokeDasharray:`${st.remainRatio*326.7} 326.7`}})]}),(0,m.jsxs)(`span`,{className:I.heroGaugeCenter,children:[(0,m.jsxs)(`span`,{className:y(I.heroGaugeRemain,st.over&&I.heroGaugeRemainOver),children:[Ne,Ct(st.remainCny,u).toFixed(2)]}),(0,m.jsx)(`span`,{className:I.heroGaugeLabel,children:t(`budgetRemain`)})]})]}),(0,m.jsxs)(`span`,{className:I.heroGaugeSub,children:[H(it),` / `,H(x)]})]})]}),(0,m.jsxs)(`div`,{className:I.heroSide,children:[(0,m.jsxs)(`div`,{className:I.heroSideItem,children:[(0,m.jsx)(`span`,{className:I.heroSideLabel,children:t(`yearCost`)}),(0,m.jsx)(`span`,{className:I.heroSideValue,children:H(at)})]}),(0,m.jsxs)(`div`,{className:I.heroSideItem,children:[(0,m.jsx)(`span`,{className:I.heroSideLabel,children:t(`todayCost`)}),(0,m.jsxs)(`span`,{className:I.heroSideValue,children:[H(nt),(0,m.jsxs)(`span`,{className:y(I.delta,jt>=0?I.deltaUp:I.deltaDown),children:[jt>=0?`▲`:`▼`,` `,Math.abs(jt).toFixed(1),`%`]})]})]}),ot>0&&(0,m.jsxs)(`div`,{className:I.heroSideItem,children:[(0,m.jsx)(`span`,{className:I.heroSideLabel,children:t(`monthProjected`)}),(0,m.jsx)(`span`,{className:I.heroSideValue,children:H(ot)})]}),ot<=0&&(0,m.jsx)(`span`,{className:I.heroSideSpacer,"aria-hidden":`true`})]})]}),(e.unpricedModels?.length??0)>0&&(0,m.jsx)(`div`,{className:I.unpricedHint,"data-testid":`billing-unpriced-hint`,children:t(`unpricedHint`).replace(`{count}`,String(e.unpricedModels?.length??0))}),(e.total.searchCalls??0)>0&&(0,m.jsx)(`div`,{className:I.unpricedHint,"data-testid":`billing-search-estimate-hint`,children:t(`searchEstimateHint`).replace(`{count}`,String(e.total.searchCalls??0)).replace(`{each}`,H(e.searchCallEstimateCny??0))}),(e.unreadableSessions??0)>0&&(0,m.jsx)(`div`,{className:I.staleNotice,"data-testid":`billing-sessions-unreadable`,children:t(`unreadableNotice`).replace(`{count}`,String(e.unreadableSessions))}),(0,m.jsxs)(`div`,{className:I.kpiZone,children:[(0,m.jsxs)(`div`,{className:I.kpiZoneHead,children:[(0,m.jsx)(`span`,{className:I.kpiZoneLabel,children:t(`kpiRange`)}),(0,m.jsx)(`div`,{className:I.heatmapRangeSwitch,"data-testid":`billing-kpi-range`,role:`group`,"aria-label":t(`kpiRange`),children:[[`today`,`avgRangeToday`],[`7d`,`avgRange7d`],[`week`,`avgRangeWeek`],[`month`,`avgRangeMonth`],[`all`,`avgRangeAll`]].map(([e,n])=>(0,m.jsx)(`button`,{type:`button`,className:y(I.heatmapRangeButton,xe===e&&I.heatmapRangeButtonActive),"data-testid":`billing-kpi-range-${e}`,"aria-pressed":xe===e,onClick:()=>{Se(e),te(e)},children:t(n)},e))})]}),(0,m.jsxs)(`section`,{className:I.kpiGrid,"data-testid":`billing-kpi-grid`,children:[(0,m.jsxs)(`div`,{className:I.kpiTile,"data-testid":`billing-kpi-tile`,children:[(0,m.jsx)(`span`,{className:I.kpiLabel,children:t(`cacheHitRate`)}),(0,m.jsx)(`span`,{className:y(I.kpiValue,I.kpiGreen),children:Et(Y.cacheHit+Y.cacheMiss>0?Y.cacheHit/(Y.cacheHit+Y.cacheMiss)*100:0)}),(0,m.jsxs)(`span`,{className:I.kpiDetail,children:[q(Y.cacheHit),` / `,q(Y.cacheHit+Y.cacheMiss),(N.cacheWrite??0)>0?` · ${t(`tokenCacheWrite`)} ${q(N.cacheWrite??0)}`:``]})]}),(0,m.jsxs)(`div`,{className:I.kpiTile,children:[(0,m.jsx)(`span`,{className:I.kpiLabel,children:t(`tokens`)}),(0,m.jsx)(`span`,{className:I.kpiValue,children:q(Y.input+Y.output)}),(0,m.jsxs)(`span`,{className:I.kpiDetail,children:[t(`inputTokens`),` `,q(Y.input),` · `,t(`outputTokens`),` `,q(Y.output)]})]}),(0,m.jsxs)(`div`,{className:I.kpiTile,"data-testid":`billing-kpi-avg`,children:[(0,m.jsx)(`span`,{className:I.kpiLabel,children:t(`avgCost`)}),(0,m.jsx)(`span`,{className:I.kpiValue,children:H(Y.calls>0?Y.cost/Y.calls:0)}),(0,m.jsxs)(`span`,{className:I.kpiDetail,children:[t(`calls`),` `,Y.calls.toLocaleString()]})]}),(0,m.jsxs)(`div`,{className:I.kpiTile,children:[(0,m.jsx)(`span`,{className:I.kpiLabel,children:t(`calls`)}),(0,m.jsx)(`span`,{className:I.kpiValue,children:Y.calls.toLocaleString()}),(0,m.jsxs)(`span`,{className:I.kpiDetail,children:[ht.length,` `,t(`models`)]})]}),(0,m.jsxs)(`div`,{className:I.kpiTile,"data-testid":`billing-kpi-think`,children:[(0,m.jsx)(`span`,{className:I.kpiLabel,children:t(`tokenReasoningShare`)}),(0,m.jsx)(`span`,{className:y(I.kpiValue,I.kpiGreen),children:Et(Y.output>0?Y.reasoning/Y.output*100:0)}),(0,m.jsx)(`span`,{className:I.kpiDetail,children:q(Y.reasoning)})]}),(0,m.jsxs)(`div`,{className:I.kpiTile,"data-testid":`billing-kpi-io`,children:[(0,m.jsx)(`span`,{className:I.kpiLabel,children:t(`tokenIo`)}),(0,m.jsx)(`span`,{className:I.kpiValue,children:(Y.output>0?Y.input/Y.output:0).toFixed(2)}),(0,m.jsxs)(`span`,{className:I.kpiDetail,children:[q(Y.input),` / `,q(Y.output)]})]}),(0,m.jsxs)(`div`,{className:I.kpiTile,"data-testid":`billing-kpi-peak`,children:[(0,m.jsx)(`span`,{className:I.kpiLabel,children:t(`tokenPeak`)}),(0,m.jsx)(`span`,{className:I.kpiValue,children:Y.peakTokens>0?Vt(Y.peakTokens):`—`}),(0,m.jsx)(`span`,{className:I.kpiDetail,children:Y.peakDay??`—`})]})]})]}),(0,m.jsxs)(`section`,{className:I.panel,"data-testid":`billing-panel-heatmap`,children:[(0,m.jsxs)(`div`,{className:I.panelHead,children:[(0,m.jsx)(`h3`,{className:I.panelTitle,children:t(`heatmap`)}),(0,m.jsx)(`div`,{className:I.heatmapRangeSwitch,"data-testid":`billing-heatmap-metric`,role:`group`,"aria-label":t(`heatmap`),children:[`cost`,`tokens`].map(e=>(0,m.jsx)(`button`,{type:`button`,className:y(I.heatmapRangeButton,ye===e&&I.heatmapRangeButtonActive),"data-testid":`billing-heatmap-metric-${e}`,"aria-pressed":ye===e,onClick:()=>{be(e)},children:t(e===`cost`?`metricCost`:`metricTokens`)},e))}),(0,m.jsx)(`div`,{className:I.heatmapRangeSwitch,"data-testid":`billing-heatmap-range`,role:`group`,"aria-label":t(`heatmap`),children:[`month`,`half`,`year`].map(e=>(0,m.jsx)(`button`,{type:`button`,className:y(I.heatmapRangeButton,_e===e&&I.heatmapRangeButtonActive),"data-testid":`billing-heatmap-range-${e}`,"aria-pressed":_e===e,onClick:()=>{ve(e)},children:t(e===`month`?`heatmapMonth`:e===`half`?`heatmapHalf`:`heatmapYear`)},e))}),(0,m.jsxs)(`span`,{className:I.panelHint,"data-testid":`billing-heatmap-summary`,children:[t(`heatmapTotal`),` `,ye===`tokens`?q(ut):H(ut),` · `,t(`activeDays`),` `,dt,` · `,t(`streakDays`),` `,ft]})]}),(0,m.jsx)(rn,{days:lt,currency:u,t,range:_e,unit:ye})]})]}),F===`settings`&&(0,m.jsxs)(`div`,{className:I.tabPanel,"data-testid":`billing-tab-panel-settings`,children:[(0,m.jsxs)(`section`,{className:I.setCard,"data-testid":`billing-budget`,children:[(0,m.jsxs)(`div`,{className:I.setCardHead,children:[(0,m.jsxs)(`div`,{className:I.setCardMeta,children:[(0,m.jsx)(`h3`,{className:I.setCardTitle,children:t(`budget`)}),(0,m.jsx)(`p`,{className:I.setCardDesc,children:t(`budgetHint`)})]}),(0,m.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":b,"aria-label":t(`budget`),"data-testid":`billing-budget-toggle`,className:y(I.switch,b&&I.switchOn),onClick:S,children:(0,m.jsx)(`span`,{className:I.switchKnob})})]}),b&&(0,m.jsxs)(`div`,{className:I.ctlCol,children:[(0,m.jsxs)(`div`,{className:I.ctlRow,children:[(0,m.jsx)(`span`,{className:I.ctlLabel,children:t(`budgetAmount`)}),(0,m.jsxs)(`span`,{className:I.inp,"data-testid":`billing-budget-input-wrap`,children:[(0,m.jsx)(`span`,{className:I.affix,"aria-hidden":`true`,children:`¥`}),(0,m.jsx)(`input`,{className:I.budgetInput,"data-testid":`billing-budget-input`,type:`number`,min:0,step:1,value:x===0?``:x,placeholder:e.budget===void 0?`0`:String(e.budget),"aria-label":`${t(`budget`)}(${u===`usd`?`USD`:u===`eur`?`EUR`:`CNY`})`,title:`${t(`budget`)}(${u===`usd`?`USD`:u===`eur`?`EUR`:`CNY`})`,onChange:e=>{C(e.target.valueAsNumber)}})]})]}),x>0&&(()=>{let e=it/x*100;return(0,m.jsx)(`div`,{className:I.ctlRowStretch,children:(0,m.jsx)(`div`,{className:I.prog,role:`progressbar`,"aria-valuenow":Math.min(e,100),"aria-valuemin":0,"aria-valuemax":100,"aria-label":t(`budget`),"data-testid":`billing-budget-track`,children:(0,m.jsx)(`div`,{className:y(I.progFill,e>=100&&I.budgetFillOver,e>=80&&e<100&&I.budgetFillWarn),style:{width:`${Math.min(e,100)}%`}})})})})(),x>0&&(0,m.jsx)(`p`,{className:I.setCardDesc,"data-testid":`billing-budget-value`,children:t(`budgetSummary`).replace(`{used}`,H(it)).replace(`{total}`,H(x))})]})]}),(0,m.jsxs)(`section`,{className:I.setCard,"data-testid":`billing-peak-alert-settings`,children:[(0,m.jsxs)(`div`,{className:I.setCardHead,children:[(0,m.jsxs)(`div`,{className:I.setCardMeta,children:[(0,m.jsx)(`h3`,{className:I.setCardTitle,children:t(`peakAlert`)}),(0,m.jsx)(`p`,{className:I.setCardDesc,children:t(`peakAlertHint`)})]}),(0,m.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":w.enabled,"aria-label":t(`peakAlert`),"data-testid":`billing-peak-alert-toggle`,className:y(I.switch,w.enabled&&I.switchOn),onClick:()=>{T({...w,enabled:!w.enabled})},children:(0,m.jsx)(`span`,{className:I.switchKnob})})]}),w.enabled&&(0,m.jsxs)(`div`,{className:I.ctlCol,children:[(0,m.jsxs)(`label`,{className:I.ctlRow,children:[(0,m.jsx)(`span`,{className:I.ctlLabel,children:t(`peakAlertLeadMin`)}),(0,m.jsx)(`span`,{className:I.inp,children:(0,m.jsx)(`input`,{type:`number`,min:1,max:30,step:1,value:w.leadMin,className:I.budgetInput,"aria-label":t(`peakAlertLeadMin`),onChange:e=>{let t=Number(e.target.valueAsNumber);T({...w,leadMin:Number.isFinite(t)?Math.min(30,Math.max(1,Math.round(t))):w.leadMin})}})})]}),(0,m.jsxs)(`div`,{className:I.ctlRow,children:[(0,m.jsx)(`span`,{className:I.ctlLabel,children:t(`peakAlertPos`)}),(0,m.jsx)(`div`,{className:I.ctlGroup,role:`radiogroup`,"aria-label":t(`peakAlertPos`),children:[`bottom-right`,`center`].map(e=>(0,m.jsxs)(`label`,{className:I.rdo,children:[(0,m.jsx)(`input`,{type:`radio`,name:`peak-pos`,checked:w.position===e,onChange:()=>T({...w,position:e})}),(0,m.jsx)(`span`,{className:I.rdoDot,"aria-hidden":`true`}),t(e===`bottom-right`?`peakAlertPosCorner`:`peakAlertPosCenter`)]},e))})]}),(0,m.jsxs)(`div`,{className:I.ctlRow,children:[(0,m.jsx)(`span`,{className:I.ctlLabel,children:t(`peakAlertMode`)}),(0,m.jsx)(`div`,{className:I.ctlGroup,role:`radiogroup`,"aria-label":t(`peakAlertMode`),children:[`both`,`peak`,`offPeak`].map(e=>(0,m.jsxs)(`label`,{className:I.rdo,children:[(0,m.jsx)(`input`,{type:`radio`,name:`peak-mode`,checked:w.mode===e,onChange:()=>T({...w,mode:e})}),(0,m.jsx)(`span`,{className:I.rdoDot,"aria-hidden":`true`}),t(e===`both`?`peakAlertModeBoth`:e===`peak`?`peakAlertModePeak`:`peakAlertModeOff`)]},e))})]}),(0,m.jsxs)(`label`,{className:I.ctlRow,children:[(0,m.jsx)(`span`,{className:I.ctlLabel,children:t(`peakAlertWebNotify`)}),(0,m.jsx)(`input`,{type:`checkbox`,checked:w.webNotify,"aria-label":t(`peakAlertWebNotify`),onChange:e=>{T({...w,webNotify:e.target.checked})}})]}),(0,m.jsx)(`div`,{className:I.ctlRow,children:(0,m.jsx)(`button`,{type:`button`,className:I.btn,onClick:ee,children:t(`peakAlertPreview`)})})]})]}),(0,m.jsx)(`section`,{className:I.setCard,"data-testid":`billing-toggle-setting`,children:(0,m.jsxs)(`div`,{className:I.setGrid3,children:[(0,m.jsx)(`div`,{className:I.setCell,"data-testid":`billing-usage-stats-tool-setting`,children:(0,m.jsxs)(`div`,{className:I.setCardHead,children:[(0,m.jsxs)(`div`,{className:I.setCardMeta,children:[(0,m.jsx)(`h3`,{className:I.setCardTitle,children:t(`usageStatsTool`)}),(0,m.jsx)(`p`,{className:I.setCardDesc,children:t(`usageStatsToolHint`)})]}),(0,m.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":ke,"aria-label":t(`usageStatsTool`),"data-testid":`billing-usage-stats-tool-toggle`,className:y(I.switch,ke&&I.switchOn),onClick:R,children:(0,m.jsx)(`span`,{className:I.switchKnob})})]})}),(0,m.jsxs)(`div`,{className:I.setCell,"data-testid":`billing-livecost-setting`,children:[(0,m.jsxs)(`div`,{className:I.setCardHead,children:[(0,m.jsxs)(`div`,{className:I.setCardMeta,children:[(0,m.jsx)(`h3`,{className:I.setCardTitle,children:t(`liveCostBar`)}),(0,m.jsx)(`p`,{className:I.setCardDesc,children:t(`liveCostBarHint`)})]}),(0,m.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":M.show,"aria-label":t(`liveCostBar`),"data-testid":`billing-livecost-toggle`,className:y(I.switch,M.show&&I.switchOn),onClick:()=>re({...M,show:!M.show}),children:(0,m.jsx)(`span`,{className:I.switchKnob})})]}),M.show&&(0,m.jsxs)(`div`,{className:I.rdoRow,"data-testid":`billing-livecost-position`,children:[(0,m.jsx)(`span`,{className:I.rdoLabel,children:t(`liveCostBarPosition`)}),(0,m.jsx)(Wr,{liveCostPrefs:M,onLiveCostPrefs:re,t})]})]}),(0,m.jsx)(`div`,{className:I.setCell,"data-testid":`billing-site-list-setting`,children:(0,m.jsxs)(`div`,{className:I.setCardHead,children:[(0,m.jsxs)(`div`,{className:I.setCardMeta,children:[(0,m.jsx)(`h3`,{className:I.setCardTitle,children:t(`siteListDisplay`)}),(0,m.jsx)(`p`,{className:I.setCardDesc,children:t(`siteListDisplayHint`)})]}),(0,m.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":j.hideUnidentified,"aria-label":t(`siteListDisplay`),"data-testid":`billing-site-hide-unidentified`,className:y(I.switch,j.hideUnidentified&&I.switchOn),onClick:()=>ne({hideUnidentified:!j.hideUnidentified}),children:(0,m.jsx)(`span`,{className:I.switchKnob})})]})})]})}),(0,m.jsx)(`section`,{className:I.setCard,"data-testid":`billing-display-setting`,children:(0,m.jsxs)(`div`,{className:I.setGrid2,children:[(0,m.jsxs)(`div`,{className:I.setCell,"data-testid":`billing-float-setting`,children:[(0,m.jsx)(`div`,{className:I.setCardHead,children:(0,m.jsxs)(`div`,{className:I.setCardMeta,children:[(0,m.jsx)(`h3`,{className:I.setCardTitle,children:t(`floatWindow`)}),(0,m.jsx)(`p`,{className:I.setCardDesc,children:t(`floatWindowHint`)})]})}),(0,m.jsxs)(`div`,{className:I.ctlCol,children:[(0,m.jsxs)(`div`,{className:I.ctlRow,children:[(0,m.jsx)(`span`,{className:I.ctlLabel,children:t(`floatMode`)}),(0,m.jsxs)(`div`,{className:I.ctlGroup,"data-testid":`billing-float-mode`,children:[(0,m.jsx)(`button`,{type:`button`,className:y(I.floatModeBtn,E.mode===`combined`&&I.floatModeBtnOn),"data-testid":`billing-float-mode-combined`,onClick:()=>D({mode:`combined`,targets:E.targets}),children:t(`floatModeCombined`)}),(0,m.jsx)(`button`,{type:`button`,className:y(I.floatModeBtn,E.mode===`subscription`&&I.floatModeBtnOn),"data-testid":`billing-float-mode-subscription`,onClick:()=>D({mode:`subscription`,targets:E.targets}),children:t(`floatModeSubscription`)})]})]}),E.mode===`subscription`&&(0,m.jsxs)(`div`,{className:I.ctlRow,children:[(0,m.jsx)(`span`,{className:I.ctlLabel,children:t(`floatTargets`)}),(0,m.jsxs)(`span`,{className:I.ctlGroup,"data-testid":`billing-float-targets`,children:[Ce.map(e=>{let t=E.targets.includes(e.id);return(0,m.jsxs)(`label`,{className:I.floatTarget,children:[(0,m.jsx)(`input`,{type:`checkbox`,checked:t,"data-testid":`billing-float-target-${e.id}`,onChange:()=>D({mode:`subscription`,targets:t?E.targets.filter(t=>t!==e.id):[...E.targets,e.id]})}),(0,m.jsx)(`span`,{className:I.floatTargetLabel,children:e.label})]},e.id)}),Ce.length===0&&(0,m.jsx)(`span`,{className:I.setCardDesc,children:t(`floatNoTargetsHint`)})]})]})]})]}),(0,m.jsxs)(`div`,{className:I.setCell,"data-testid":`billing-card-setting`,children:[(0,m.jsx)(`div`,{className:I.setCardHead,children:(0,m.jsxs)(`div`,{className:I.setCardMeta,children:[(0,m.jsx)(`h3`,{className:I.setCardTitle,children:t(`cardDisplay`)}),(0,m.jsx)(`p`,{className:I.setCardDesc,children:t(`cardDisplayHint`)})]})}),(0,m.jsxs)(`div`,{className:I.ctlCol,children:[(0,m.jsxs)(`div`,{className:I.ctlRow,children:[(0,m.jsx)(`span`,{className:I.ctlLabel,children:t(`cardMetric`)}),(0,m.jsxs)(`div`,{className:I.ctlGroup,"data-testid":`billing-card-metric`,children:[(0,m.jsx)(`button`,{type:`button`,className:y(I.floatModeBtn,k.metric===`money`&&I.floatModeBtnOn),"data-testid":`billing-card-money`,onClick:()=>A({...k,metric:`money`}),children:t(`cardMetricMoney`)}),(0,m.jsx)(`button`,{type:`button`,className:y(I.floatModeBtn,k.metric===`tokens`&&I.floatModeBtnOn),"data-testid":`billing-card-tokens`,onClick:()=>A({...k,metric:`tokens`}),children:t(`cardMetricTokens`)})]})]}),(0,m.jsxs)(`div`,{className:I.ctlRow,children:[(0,m.jsx)(`span`,{className:I.ctlLabel,children:t(`cardSpan`)}),(0,m.jsx)(`div`,{className:I.ctlGroup,"data-testid":`billing-card-span`,children:[[`day`,`cardSpanDay`],[`week`,`cardSpanWeek`],[`month`,`cardSpanMonth`]].map(([e,n])=>(0,m.jsx)(`button`,{type:`button`,className:y(I.floatModeBtn,k.span===e&&I.floatModeBtnOn),"data-testid":`billing-card-span-${e}`,"aria-pressed":k.span===e,onClick:()=>A({...k,span:e}),children:t(n)},e))})]})]})]})]})}),(0,m.jsx)(Br,{userPrices:r,onUserPrices:i,t}),(0,m.jsx)(zt,{t,version:e.pluginVersion})]}),F===`trends`&&(0,m.jsxs)(`div`,{className:I.tabPanel,"data-testid":`billing-tab-panel-trends`,children:[(0,m.jsxs)(`section`,{className:y(I.ubCard,I.trendPanel),"data-testid":`billing-panel-trend`,children:[(0,m.jsxs)(`div`,{className:I.ubCardHead,children:[(0,m.jsx)(`h3`,{className:I.ubCardTitle,children:t(`trend`)}),v(`billing.dashboard.decor`,{position:`trend`}),(0,m.jsxs)(`span`,{className:I.ubCardControlGroup,children:[(0,m.jsx)(`span`,{className:I.rangeToggle,role:`group`,"aria-label":t(`trend`),children:[7,30].map(e=>(0,m.jsx)(`button`,{type:`button`,className:y(I.rangeButton,ue===e&&I.rangeButtonActive),"aria-pressed":ue===e,"data-testid":`billing-trend-${e}d`,onClick:()=>{de(e)},children:t(e===7?`trend7d`:`trend30d`)},e))}),(0,m.jsx)(`span`,{className:I.rangeToggle,role:`group`,"aria-label":t(`trendMetric`),children:[`cost`,`tokens`].map(e=>(0,m.jsx)(`button`,{type:`button`,className:y(I.rangeButton,ae===e&&I.rangeButtonActive),"aria-pressed":ae===e,"data-testid":`billing-trend-metric-${e}`,onClick:()=>{oe(e)},children:t(e===`cost`?`trendMetricCost`:`trendMetricTokens`)},e))})]}),(0,m.jsx)(`span`,{className:I.ubCardSub,children:ct})]}),(0,m.jsx)(At,{data:pt,models:kt,currency:u,metric:ae,t})]}),_.length>0&&(0,m.jsxs)(`section`,{className:I.ubCard,"data-testid":`billing-panel-rounds`,children:[(0,m.jsxs)(`div`,{className:I.ubCardHead,children:[(0,m.jsx)(`h3`,{className:I.ubCardTitle,children:t(`rounds`)}),Ge.length>0&&(0,m.jsxs)(`span`,{className:I.ubTagError,"data-testid":`billing-rounds-flag-count`,children:[Ge.length,` `,t(`anomaly`)]})]}),(0,m.jsx)(`p`,{className:I.ubCardSub,children:t(`roundsHint`).replace(`{count}`,String(_.length))}),(0,m.jsx)(Zt,{rounds:_,flags:Ge,currency:u,t})]}),e.byTier!==void 0&&(()=>{let e=Ke.peak+Ke.offPeak;if(e<=0)return null;let n=Ke.peak/e*100;return(0,m.jsxs)(`section`,{className:I.ubCard,"data-testid":`billing-panel-share`,children:[(0,m.jsxs)(`div`,{className:I.ubCardHead,children:[(0,m.jsx)(`h3`,{className:I.ubCardTitle,children:t(`peakShare`)}),(0,m.jsx)(`span`,{className:I.ubCardSub,children:t(`peakSharePerCall`)})]}),(0,m.jsxs)(`div`,{className:I.shareTrack,"data-testid":`billing-share-track`,children:[(0,m.jsx)(`div`,{className:y(I.shareSeg,I.shareSegPeak),style:{width:`${n}%`}}),(0,m.jsx)(`div`,{className:y(I.shareSeg,I.shareSegOff),style:{width:`${100-n}%`}})]}),(0,m.jsxs)(`div`,{className:I.shareLegend,children:[(0,m.jsxs)(`span`,{className:I.shareItem,children:[(0,m.jsx)(`span`,{className:I.shareDot,style:{background:`var(--ds-blue)`}}),t(`peak`),(0,m.jsxs)(`span`,{className:I.shareValue,"data-testid":`billing-share-peak`,children:[H(Ke.peak),` · `,n.toFixed(1),`%`]})]}),(0,m.jsxs)(`span`,{className:I.shareItem,children:[(0,m.jsx)(`span`,{className:I.shareDot,style:{background:`color-mix(in srgb, var(--ds-blue) 30%, var(--dsb-3))`}}),t(`offPeak`),(0,m.jsxs)(`span`,{className:I.shareValue,"data-testid":`billing-share-offpeak`,children:[H(Ke.offPeak),` · `,(100-n).toFixed(1),`%`]})]})]}),qe>0&&(0,m.jsx)(`div`,{className:I.staleNotice,"data-testid":`billing-share-savings`,children:t(`offPeakSavings`).replace(`{amount}`,H(qe))})]})})()]}),F===`providers`&&(0,m.jsxs)(`div`,{className:I.tabPanel,"data-testid":`billing-tab-panel-providers`,children:[_t.length>0&&(0,m.jsxs)(`section`,{className:I.panel,"data-testid":`billing-panel-relay-quota`,children:[(0,m.jsx)(`div`,{className:I.panelHead,children:(0,m.jsx)(`h3`,{className:I.panelTitle,children:t(`panelRelayQuota`)})}),(0,m.jsx)(`div`,{className:I.providerGroupList,"data-testid":`billing-relay-quotas`,children:_t.map(e=>(0,m.jsxs)(`div`,{className:I.siteRow,"data-testid":`billing-relay-quota`,children:[(0,m.jsxs)(`span`,{className:I.siteRowName,children:[(0,m.jsx)(`span`,{className:y(I.siteKindTag,xr[e.kind]),children:br(e.kind,t)}),(0,m.jsx)(`span`,{className:I.siteRowTitle,children:e.origin})]}),(0,m.jsxs)(`span`,{className:I.siteRowMeta,children:[e.balance!==void 0&&(0,m.jsxs)(`span`,{className:I.siteRowCost,children:[t(`relayBalance`),` `,e.balance.toFixed(2)]}),(e.windows?.length??0)>0?e.windows?.map(e=>{let n=e.remainingPercent<20;return(0,m.jsxs)(`span`,{className:y(I.siteRowCalls,n&&I.siteRowCallsLow),children:[t(`relayWindowUsed`),` `,e.usedPercent,`%`]},e.kind)}):(0,m.jsx)(`span`,{className:I.siteRowCalls,children:t(`relayNoQuota`)})]})]},e.route))})]}),(0,m.jsxs)(`section`,{className:I.panel,"data-testid":`billing-panel-providers`,children:[(0,m.jsxs)(`div`,{className:I.panelHead,children:[(0,m.jsx)(`h3`,{className:I.panelTitle,children:t(`providerBilling`)}),v(`billing.dashboard.decor`,{position:`models`}),(0,m.jsx)(`span`,{className:I.panelHint,children:e.updatedAt===void 0?``:`${t(`lastUpdated`)} ${Cr(e.updatedAt)}`})]}),ie&&(0,m.jsx)(`div`,{className:I.staleNotice,"data-testid":`billing-subscriptions-stale`,children:t(`subscriptionsStale`)}),bt.length===0?(0,m.jsx)(`div`,{className:I.emptyRow,"data-testid":`billing-provider-empty`,children:t(`noData`)}):(0,m.jsx)(`div`,{className:I.providerGroupList,"data-testid":`billing-provider-groups`,children:bt.map(e=>(0,m.jsxs)(`div`,{className:I.providerGroup,"data-testid":`billing-provider-group`,children:[(0,m.jsxs)(`div`,{className:I.providerGroupHead,children:[(0,m.jsxs)(`span`,{className:I.providerGroupTitle,children:[(0,m.jsx)(`span`,{className:y(I.healthDot,e.dot),"aria-hidden":`true`}),(()=>{let n=Fe(e.name),r=e.channelKind===`direct`?kn(n):void 0,i=e.channelKind===`direct`?t(`directTag`):e.channelKind===`site`?t(`relayTag`):e.channelKind===`unknown`?t(`unknownTag`):void 0;return(0,m.jsxs)(m.Fragment,{children:[i!==void 0&&(0,m.jsx)(`span`,{className:y(I.kindBadge,e.channelKind===`direct`&&I.kindBadgeDirect,e.channelKind===`site`&&I.kindBadgeRelay,e.channelKind===`unknown`&&I.kindBadgeUnknown),"data-testid":`billing-kind-badge`,children:i}),e.channelKind!==`unknown`&&(0,m.jsx)(`span`,{className:I.providerGroupName,children:r??n})]})})(),e.subscriptions.length>0&&(0,m.jsxs)(`span`,{className:I.providerGroupBadge,"data-testid":`billing-provider-sub-count`,children:[e.subscriptions.length,` `,t(`planCountUnit`)]})]}),(0,m.jsxs)(`span`,{className:I.providerGroupMeta,children:[(0,m.jsxs)(`span`,{className:I.providerGroupCost,"data-testid":`billing-provider-cost`,children:[(0,m.jsx)(`span`,{className:I.providerGroupCostLabel,children:t(`cost`)}),(0,m.jsx)(`span`,{className:I.providerGroupCostValue,children:H(Ir(e))})]}),!Xe(e)&&e.balance!==void 0?(0,m.jsxs)(`span`,{className:I.providerGroupBalance,"data-testid":`billing-provider-balance`,children:[(0,m.jsx)(`span`,{className:I.providerGroupBalanceLabel,children:t(`balance`)}),Ze(e.balance)]}):(0,m.jsx)(`span`,{className:I.providerGroupBalance,"aria-hidden":`true`}),ir(e.name)===void 0?(0,m.jsx)(`span`,{className:I.providerGroupRecharge,"aria-hidden":`true`}):(0,m.jsx)(`a`,{className:I.providerGroupRecharge,"data-testid":`billing-group-recharge`,href:ir(e.name),target:`_blank`,rel:`noreferrer`,title:t(`rechargeHint`),"aria-label":`${Fe(e.name)} ${t(`recharge`)}`,children:t(`recharge`)})]})]}),e.models.length>0&&(0,m.jsx)(`div`,{className:y(I.tableScroll,I.modelTableScroll),"data-testid":`billing-table-scroll`,children:(0,m.jsxs)(`table`,{className:I.modelTable,children:[St,(0,m.jsx)(`tbody`,{children:e.models.map(e=>(0,m.jsxs)(`tr`,{children:[(0,m.jsx)(`td`,{children:J(e)}),(0,m.jsx)(`td`,{className:I.numCol,children:e.calls.toLocaleString()}),(0,m.jsx)(`td`,{className:I.numCol,children:q(e.input)}),(0,m.jsx)(`td`,{className:I.numCol,children:q(e.output)}),(0,m.jsx)(`td`,{className:I.numCol,children:Et(e.cacheHitRate)}),(0,m.jsx)(`td`,{className:I.numCol,children:e.plan?(0,m.jsxs)(`span`,{className:I.planTag,children:[e.estimated>0?(0,m.jsxs)(`span`,{children:[`≈`,H(e.estimated)]}):null,(0,m.jsx)(`span`,{className:I.planTagBadge,"data-testid":`billing-plan-badge`,children:t(`subscriptionTag`)})]}):e.actual===void 0?(0,m.jsx)(`span`,{className:I.na,children:`—`}):(()=>{let t=e.officialCost,n=e.actual-t;return t>0&&n>0?(0,m.jsxs)(`span`,{className:I.bucketCost,children:[(0,m.jsx)(`span`,{className:I.bucketOfficial,children:H(t)}),(0,m.jsx)(`span`,{className:I.bucketSep,children:`/`}),(0,m.jsx)(`span`,{className:I.bucketThird,children:H(n)})]}):H(e.actual)})()})]},e.key))})]})}),e.subscriptions.length>0&&(0,m.jsx)(`div`,{className:I.subscriptionGrid,"data-testid":`billing-subscriptions-grid`,children:e.subscriptions.map(e=>{let n=vr(e.status,t);return(0,m.jsxs)(`div`,{className:I.subscriptionCard,"data-testid":`billing-subscription-card`,children:[(0,m.jsxs)(`div`,{className:I.subscriptionHead,children:[(0,m.jsx)(`span`,{className:I.subscriptionName,children:Fe(e.displayName)}),e.planType===`code`&&(()=>{let n=Oe(e.provider),r=n===void 0?void 0:t(`subscriptionFeePerMonth`).replace(`{amount}`,n.currency===`USD`?`$${n.amount}`:`¥${n.amount}`);return(0,m.jsxs)(`span`,{className:I.subscriptionPlan,"data-kind":`code`,children:[r??(e.subscriptionAmount!==void 0&&e.subscriptionAmount>0?t(`subscriptionFeePerMonth`).replace(`{amount}`,H(e.subscriptionAmount)):t(`planTypeCode`)),n?.label!==void 0&&(0,m.jsx)(`span`,{className:I.subscriptionTier,"data-testid":`billing-tier-${e.provider}`,children:n.label}),n!==void 0&&(0,m.jsx)(`span`,{className:I.subscriptionAuto,"data-testid":`billing-auto-${e.provider}`,children:t(`subscriptionAutoDetect`)})]})})(),e.planType===`token`&&(0,m.jsx)(`span`,{className:I.subscriptionPlan,"data-kind":`token`,children:t(`planTypeToken`)}),e.plan!==void 0&&(0,m.jsx)(`span`,{className:I.subscriptionPlan,children:e.plan})]}),n!==``&&(0,m.jsx)(`div`,{className:I.subscriptionStatus,children:n}),e.windows.length===0&&n===``&&(0,m.jsx)(`div`,{className:I.subscriptionStatus,children:t(`subscriptionNoApi`)}),e.windows.map(e=>(()=>{let n=Math.min(100,Math.max(0,e.usedPercent)),r=Math.min(100,Math.max(0,e.remainingPercent))<=0;return(0,m.jsxs)(`div`,{className:I.subscriptionWindow,children:[(0,m.jsx)(`span`,{className:I.subscriptionWindowLabel,children:yr(e.kind,t)}),(0,m.jsx)(`span`,{className:I.subscriptionTrack,"aria-hidden":`true`,children:(0,m.jsx)(`span`,{className:y(I.subscriptionFill,n>=100&&I.subscriptionFillOver,n>=80&&n<100&&I.subscriptionFillWarn),style:{width:`${n}%`}})}),(0,m.jsxs)(`span`,{className:I.subscriptionMeta,children:[(0,m.jsx)(`span`,{className:y(I.subscriptionPct,r&&I.subscriptionExhausted),children:r?t(`subscriptionExhausted`):t(`subscriptionRemaining`).replace(`{pct}`,String(e.remainingPercent))}),e.resetsAt!==void 0&&(0,m.jsx)(`span`,{className:I.subscriptionReset,children:t(`subscriptionReset`).replace(`{date}`,`${$(new Date(e.resetsAt).getTime())} ${Cr(new Date(e.resetsAt).getTime())}`)})]})]},e.kind)})())]},e.provider)})})]},e.name))})]}),(0,m.jsxs)(`div`,{className:I.exportBar,"data-testid":`billing-export-bar`,role:`group`,"aria-label":t(`export`),children:[(0,m.jsx)(`span`,{className:I.exportLabel,children:t(`export`)}),(0,m.jsx)(`button`,{type:`button`,className:I.exportButton,"data-testid":`billing-export-day`,onClick:()=>{_n(gn(`usage-daily`,`csv`,Object.keys(P)),fn(P),`text/csv`)},children:t(`exportCsvDay`)}),e.bySession!==void 0&&(0,m.jsx)(`button`,{type:`button`,className:I.exportButton,"data-testid":`billing-export-sessions`,onClick:()=>{_n(gn(`usage-sessions`,`csv`,Object.keys(P)),hn(e.bySession??[]),`text/csv`)},children:t(`exportCsvSession`)}),e.bySite!==void 0&&(0,m.jsx)(`button`,{type:`button`,className:I.exportButton,"data-testid":`billing-export-sites`,onClick:()=>{_n(gn(`usage-sites`,`csv`,Object.keys(P)),pn(e.bySite??{}),`text/csv`)},children:t(`exportCsvSite`)}),(0,m.jsx)(`button`,{type:`button`,className:I.exportButton,"data-testid":`billing-export-json`,onClick:()=>{_n(gn(`usage-stats`,`json`,Object.keys(P)),JSON.stringify(e,null,2),`application/json`)},children:t(`exportJson`)})]}),e.bySession!==void 0&&(0,m.jsxs)(`section`,{className:I.ubCard,"data-testid":`billing-panel-sessions`,children:[(0,m.jsxs)(`div`,{className:I.ubCardHead,children:[(0,m.jsx)(`h3`,{className:I.ubCardTitle,children:t(`sessions`)}),(0,m.jsx)(`span`,{className:I.ubCardSub,children:e.bySession.length>20?t(`sessionOverflow`).replace(`{limit}`,`20`).replace(`{total}`,String(e.bySession.length)):`${e.bySession.length}`})]}),(e.staleLedgerSessions??0)>0&&(0,m.jsx)(`div`,{className:I.staleNotice,"data-testid":`billing-sessions-stale`,children:t(`staleLedgerNotice`).replace(`{count}`,String(e.staleLedgerSessions))}),(0,m.jsx)(`div`,{className:I.ubTablewrap,"data-testid":`billing-sessions-table`,children:(0,m.jsxs)(`table`,{className:I.ubTable,children:[(0,m.jsx)(`thead`,{children:(0,m.jsxs)(`tr`,{children:[(0,m.jsx)(`th`,{children:t(`sessionTitle`)}),(0,m.jsx)(`th`,{className:I.numCol,children:t(`calls`)}),(0,m.jsx)(`th`,{className:I.numCol,children:t(`actual`)}),(0,m.jsx)(`th`,{className:I.numCol,children:t(`lastActive`)})]})}),(0,m.jsxs)(`tbody`,{children:[_r(e.bySession??[]).length===0&&(0,m.jsx)(`tr`,{children:(0,m.jsx)(`td`,{colSpan:4,className:I.emptyRow,children:t(`noData`)})}),_r(e.bySession??[]).slice(0,20).map(e=>{let n=e.children!==void 0,r=n&&Ee.has(e.id),i=e=>(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(`td`,{className:I.numCol,children:e.calls.toLocaleString()}),(0,m.jsx)(`td`,{className:I.numCol,children:H(e.cost)}),(0,m.jsx)(`td`,{className:I.numCol,children:e.lastActive>0?`${$(e.lastActive)} ${Cr(e.lastActive)}`:`—`})]});return(0,m.jsxs)(d.Fragment,{children:[(0,m.jsxs)(`tr`,{className:n?I.sessionGroupRow:void 0,"aria-expanded":n?r:void 0,onClick:n?()=>{L(e.id)}:void 0,children:[(0,m.jsxs)(`td`,{children:[(0,m.jsxs)(`span`,{className:I.modelName,children:[e.title??`${t(`sessionUntitled`)} · ${e.id.slice(0,8)}`,(e.mergedCount??1)>1?` ×${e.mergedCount}`:``]}),e.stale===!0&&(0,m.jsx)(`span`,{className:y(I.ubTag,I.ubTagNeutral),"data-testid":`billing-session-stale`,children:t(`sessionStaleBadge`)})]}),i(e)]}),r&&e.children?.map(e=>(0,m.jsxs)(`tr`,{className:I.sessionChildRow,children:[(0,m.jsx)(`td`,{children:(0,m.jsx)(`span`,{className:I.modelProvider,children:e.id.slice(0,8)})}),i(e)]},e.id))]},e.id)})]})]})})]})]}),F===`token`&&(0,m.jsxs)(`div`,{className:I.tabPanel,"data-testid":`billing-tab-panel-token`,children:[(0,m.jsx)(Kt,{stats:e,trendDays:ue,onTrendDays:de,models:kt,money:H,t}),e.perf!==void 0&&(0,m.jsxs)(`section`,{className:I.panel,"data-testid":`billing-panel-perf`,children:[(0,m.jsxs)(`div`,{className:I.panelHead,children:[(0,m.jsx)(`h3`,{className:I.panelTitle,children:t(`perfTitle`)}),(0,m.jsx)(`span`,{className:I.panelHint,children:t(`perfHint`)})]}),(0,m.jsx)(It,{perf:e.perf,models:kt,t})]})]}),F===`pricing`&&(0,m.jsxs)(`div`,{className:I.tabPanel,"data-testid":`billing-tab-panel-pricing`,children:[(0,m.jsxs)(`div`,{className:I.ubAlert,role:`note`,children:[(0,m.jsxs)(`div`,{className:I.ubAlertLeft,children:[(0,m.jsxs)(`span`,{className:I.ubRate,"data-testid":`billing-rate`,children:[t(`todayRate`),` 1 USD = `,K(je.rate)]}),(0,m.jsx)(`span`,{className:y(I.ubTag,je.live?I.ubTagSuccess:I.ubTagNeutral),children:je.live?t(`rateLive`):t(`rateBuiltin`)}),V>0&&(0,m.jsxs)(`span`,{className:I.ubTag,"data-testid":`billing-pricing-synced`,children:[t(`pricingSyncedAt`),` `,new Date(V).toLocaleTimeString(Pe===`zh`?`zh-CN`:`en-US`,{hour:`2-digit`,minute:`2-digit`})]}),(0,m.jsx)(`button`,{type:`button`,className:I.heatmapRangeButton,"data-testid":`billing-pricing-sync`,disabled:z,onClick:B,children:t(z?`pricingSyncing`:`pricingSyncNow`)})]}),(0,m.jsx)(`p`,{className:I.ubAlertNote,children:t(`pricingTip`)})]}),(0,m.jsxs)(`section`,{className:I.ubCard,"data-testid":`billing-panel-pricing`,children:[(0,m.jsxs)(`div`,{className:I.ubCardHead,children:[(0,m.jsx)(`h3`,{className:I.ubCardTitle,children:t(`pricing`)}),(0,m.jsx)(`span`,{className:I.ubCardSub,children:t(`pricingUnit`)}),(0,m.jsx)(`input`,{className:I.ubSearch,type:`search`,value:Ie,placeholder:t(`pricingSearch`),"aria-label":t(`pricingSearch`),"data-testid":`billing-pricing-search`,onChange:e=>{Le(e.target.value)}})]}),(0,m.jsx)(`div`,{className:I.ubTablewrap,children:(0,m.jsxs)(`table`,{className:I.ubTable,children:[(0,m.jsx)(`thead`,{children:(0,m.jsxs)(`tr`,{children:[(0,m.jsx)(`th`,{children:t(`thModel`)}),(0,m.jsx)(`th`,{className:I.numCol,children:t(`thInputMiss`)}),(0,m.jsx)(`th`,{className:I.numCol,children:t(`thInputHit`)}),(0,m.jsx)(`th`,{className:I.numCol,children:t(`output`)}),(0,m.jsx)(`th`,{className:I.numCol,colSpan:2,children:t(`band`)})]})}),(0,m.jsx)(`tbody`,{children:xn(vt(),Ie).map(e=>{let n=e.price.input>0||e.price.output>0;return(0,m.jsxs)(d.Fragment,{children:[(0,m.jsxs)(`tr`,{children:[(0,m.jsx)(`td`,{children:(0,m.jsxs)(`span`,{className:I.ubModel,children:[(()=>{let n=vn(et(Be,$e(e.key,He)),We);if(n===null)return null;let r=Re.includes(e.key),i=`${e.name} · ${t(n===`peak`?`peak`:`offPeak`)} · ${t(`bandPinHint`)}`;return(0,m.jsx)(`button`,{type:`button`,className:y(I.bandDot,I[n],r&&I.bandDotOn),"data-testid":`billing-band-dot`,"aria-pressed":r,"aria-label":i,title:i,onClick:()=>{ze(me(e.key)),window.dispatchEvent(new CustomEvent(`dsh.ui-usage-billing.pinned-pref`))}})})(),(0,m.jsx)(Hr,{provider:e.provider,colorVar:yt(e.colorVar)}),(0,m.jsxs)(`span`,{className:I.ubModelName,children:[e.name,e.uncatalogued&&(0,m.jsx)(`span`,{className:I.ubTagAlert,"data-testid":`billing-price-uncatalogued`,children:t(`uncatalogued`)}),e.promo!==void 0&&gt(e.promo,Date.now())&&(0,m.jsx)(p.Tooltip,{label:[e.promo.note,e.promo.endsAtMs===void 0?t(`promoOpenEnded`):t(`promoUntil`,{date:new Date(e.promo.endsAtMs).toLocaleDateString()})].filter(Boolean).join(` · `),side:`top`,maxWidth:280,children:(0,m.jsx)(`span`,{className:I.ubTagPromo,"data-testid":`billing-price-promo`,children:t(`promoBadge`)})})]})]})}),(0,m.jsx)(`td`,{className:I.numCol,children:n?U(e.price.input,e.price.currency):(0,m.jsx)(`span`,{className:I.na,children:`—`})}),(0,m.jsx)(`td`,{className:I.numCol,children:n?U(e.price.cacheHit,e.price.currency):(0,m.jsx)(`span`,{className:I.na,children:`—`})}),(0,m.jsx)(`td`,{className:I.numCol,children:n?U(e.price.output,e.price.currency):(0,m.jsx)(`span`,{className:I.na,children:`—`})}),n&&e.price.offPeak!==void 0&&e.peakHours!==void 0?(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(`td`,{className:I.numCol,children:(0,m.jsxs)(`span`,{className:I.ubChipPeak,children:[(0,m.jsx)(`span`,{className:I.ubChipLabel,children:e.tierSemantics===`latency`?t(`ubStd`):t(`ubPeak`)}),(0,m.jsxs)(`span`,{className:I.num,children:[U(e.price.input,e.price.currency),`/`,U(e.price.output,e.price.currency)]})]})}),(0,m.jsx)(`td`,{className:I.numCol,children:(0,m.jsxs)(`span`,{className:I.ubChipOff,children:[(0,m.jsx)(`span`,{className:I.ubChipLabel,children:e.tierSemantics===`latency`?`Flex`:t(`ubOff`)}),(0,m.jsxs)(`span`,{className:I.num,children:[U(e.price.offPeak.input,e.price.currency),` / `,U(e.price.offPeak.output,e.price.currency)]})]})})]}):(0,m.jsx)(`td`,{className:I.numCol,colSpan:2,children:n?(0,m.jsx)(`span`,{className:I.flatTag,children:t(`flat`)}):(0,m.jsx)(`span`,{className:I.na,children:`—`})})]}),(e.extraRows??[]).map(t=>(0,m.jsxs)(`tr`,{className:I.ubExtraRow,children:[(0,m.jsxs)(`td`,{children:[(0,m.jsx)(`span`,{className:I.ubExtraName,children:bn(t.label,Pe)}),t.note!==void 0&&(0,m.jsx)(`span`,{className:I.ubExtraNote,children:bn(t.note,Pe)})]}),(0,m.jsx)(`td`,{className:I.numCol,children:t.input===void 0?(0,m.jsx)(`span`,{className:I.na,children:`—`}):U(t.input,e.price.currency)}),(0,m.jsx)(`td`,{className:I.numCol,children:(0,m.jsx)(`span`,{className:I.na,children:`—`})}),(0,m.jsx)(`td`,{className:I.numCol,children:t.output===void 0?(0,m.jsx)(`span`,{className:I.na,children:`—`}):U(t.output,e.price.currency)}),(0,m.jsx)(`td`,{className:I.numCol,colSpan:2,children:(0,m.jsx)(`span`,{className:I.na,children:`—`})})]},`${e.key}:${t.label}`))]},e.key)})})]})})]}),(0,m.jsxs)(`section`,{className:I.ubCard,children:[(0,m.jsx)(`div`,{className:I.ubCardHead,children:(0,m.jsx)(`h3`,{className:I.ubCardTitle,children:t(`pricingNotes`)})}),(0,m.jsxs)(`ul`,{className:I.ubNotes,children:[(0,m.jsxs)(`li`,{className:I.ubNotesItem,children:[(0,m.jsx)(`span`,{className:I.ubNotesTerm,children:t(`cacheHit`)}),(0,m.jsx)(`span`,{className:I.ubNotesDesc,children:t(`noteCache`)})]}),(0,m.jsxs)(`li`,{className:I.ubNotesItem,children:[(0,m.jsx)(`span`,{className:I.ubNotesTerm,children:t(`peakBand`)}),(0,m.jsx)(`span`,{className:I.ubNotesDesc,children:t(`noteBand`)})]}),(0,m.jsxs)(`li`,{className:I.ubNotesItem,children:[(0,m.jsx)(`span`,{className:I.ubNotesTerm,children:t(`pricingSource`)}),(0,m.jsx)(`span`,{className:I.ubNotesDesc,children:t(`noteSource`)})]})]})]})]}),v(`billing.dashboard.decor`,{position:`footer`})]}),(0,m.jsxs)(`footer`,{className:I.modalFooter,"data-testid":`billing-footer`,children:[(0,m.jsx)(`span`,{children:t(`footer`)}),(0,m.jsx)(`span`,{children:t(`footerCredit`).replace(`{version}`,e.pluginVersion===void 0?`—`:`v${e.pluginVersion}`)})]})]})})}function Hr({provider:e,colorVar:t}){return(0,m.jsx)(`span`,{className:I.vendorLetter,style:t===void 0?void 0:{background:t},"aria-hidden":`true`,children:e.trim().charAt(0).toUpperCase()})}let Ur=[`below`,`above`,`toolbar`];function Wr({liveCostPrefs:e,onLiveCostPrefs:t,t:n}){let[r,i]=(0,d.useState)(!1),a={below:n(`liveCostBarPosBelow`),above:n(`liveCostBarPosAbove`),toolbar:n(`liveCostBarPosToolbar`)},o=Ur.map(e=>({id:e,label:a[e]}));return(0,m.jsx)(p.Menu,{open:r,align:`end`,portal:!0,compact:!0,items:o,selectedId:e.position,onSelect:n=>{i(!1);let r=Ur.find(e=>e===n);r!==void 0&&t({...e,position:r})},onClose:()=>{i(!1)},anchor:(0,m.jsxs)(`button`,{type:`button`,className:I.rdoSelect,"data-testid":`billing-livecost-position-select`,"aria-haspopup":`menu`,"aria-expanded":r,onClick:()=>{i(!r)},children:[(0,m.jsx)(`span`,{children:a[e.position]}),(0,m.jsx)(`span`,{className:y(I.rdoChevron,r&&I.rdoChevronOpen),"aria-hidden":!0,children:Ln?(0,m.jsx)(Ln,{}):null})]})})}function Gr(e){let{t,checkModels:n,publishCosts:r,registerOpen:i,renderSlot:a,useStore:o,actions:s}=e,[c,l]=(0,d.useState)(Tr),[u,f]=(0,d.useState)(Bn),[p,h]=(0,d.useState)([]),[g,_]=(0,d.useState)(void 0),[v,y]=(0,d.useState)([]),[b,x]=(0,d.useState)(!1),[w,T]=(0,d.useState)([]),[D,O]=(0,d.useState)(()=>P()),[te,k]=(0,d.useState)(()=>fe()),A=(0,d.useCallback)(e=>{k(e),pe(e),window.dispatchEvent(new CustomEvent(`dsh.ui-usage-billing.language-pref`))},[]),M=(0,d.useCallback)(e=>{O(e),F(e),window.dispatchEvent(new CustomEvent(se))},[]),[re,N]=(0,d.useState)(()=>S()),ce=(0,d.useCallback)(e=>{N(e),C(e)},[]),[le,ue]=(0,d.useState)(()=>j()),de=(0,d.useCallback)(e=>{ue(e),ne(e)},[]),[me,he]=(0,d.useState)(()=>ae()),ve=(0,d.useCallback)(e=>{he(e),oe(e),window.dispatchEvent(new CustomEvent(ie))},[]),[ye,be]=(0,d.useState)(()=>ee()),xe=(0,d.useCallback)(e=>{be(e),E(e)},[]),[Se,I]=(0,d.useState)(()=>{let e=ge();return Ne(e),e}),Ce=(0,d.useCallback)(e=>{I(e),Ne(e),_e(e)},[]),Ee=(0,d.useMemo)(()=>sr(c),[c,Se]),De=te,L=(0,d.useCallback)((e,n)=>{let r=(De===`en`?Te:we)[e]??t(e);if(n===void 0)return r;let i=r;for(let[e,t]of Object.entries(n))i=i.replaceAll(`{${e}}`,String(t));return i},[De,t]),[Oe,ke]=(0,d.useState)(!1),Ae=(0,d.useCallback)(()=>{ke(!1)},[]),R=(0,d.useCallback)(()=>{Er().then(e=>{e!==null&&l(sr(e))}),jr().then(({balances:e,reconcile:t})=>{e.length>0&&h(e),_(t)}),Mr().then(e=>{e.length>0&&y(e),x(!1)}).catch(()=>{x(!0)}),Nr().then(e=>{T(e)}).catch(()=>{})},[]),je=(0,d.useCallback)(()=>{R(),kr(),ke(!0)},[R]);(0,d.useEffect)(()=>{R(),kr()},[R]);let[z,Me]=(0,d.useState)(()=>typeof document>`u`||!document.hidden);(0,d.useEffect)(()=>{if(typeof document>`u`)return;let e=()=>{Me(!document.hidden),document.hidden||(R(),kr())};return document.addEventListener(`visibilitychange`,e),()=>{document.removeEventListener(`visibilitychange`,e)}},[R]),(0,d.useEffect)(()=>{if(!z)return;let e=setInterval(()=>{R(),kr()},Oe?Sr:3e5);return()=>{clearInterval(e)}},[R,Oe,z]),(0,d.useEffect)(()=>{let e=!0;return n().then(t=>{e&&(f(t),Be(t.catalog??[]))}),()=>{e=!1}},[n]);let B=$(),V=Object.entries(c.byDay).filter(([e])=>e.startsWith(B.slice(0,7))).reduce((e,[,t])=>e+t.cost,0),H=c.byDay[B]?.cost??0,Pe=mr(c.byDay,B),Fe=(0,d.useMemo)(()=>pr(c.byDay).map(e=>{let t=c.byDay[e.date];return{date:e.date,cost:e.cost,tokens:t===void 0?0:t.input+t.output}}),[c.byDay]),Ie=Object.entries(c.byDay).filter(([e])=>e.startsWith(B.slice(0,7))).reduce((e,[,t])=>e+t.input+t.output,0),Le=(()=>{let e=c.byDay[B];return e===void 0?0:e.input+e.output})(),Re=mr(c.byDay,B,e=>e.input+e.output),ze=o(e=>e.enabled),Ve=o(e=>e.amount),He=o(e=>e.tierAlertDays),We=o(e=>e.lastTierSwitchAt),[U,Ke]=(0,d.useState)(()=>Mn()),[qe,Je]=(0,d.useState)(null),[Ye,Xe]=(0,d.useState)(null),[Ze,Qe]=(0,d.useState)(()=>Date.now());(0,d.useEffect)(()=>{let e=setInterval(()=>Qe(Date.now()),Sr);return()=>{clearInterval(e)}},[]);let et=(0,d.useCallback)(e=>{Ke(e),Nn(e)},[]),tt=v.some(e=>e.displayName===`Z.ai Coding Plan`&&e.status===`ok`),nt=$e(c.byTurn?.[0]?.model,tt),rt=(0,d.useCallback)(()=>{Xe({entering:Ge(Date.now())===`peak`?`offPeak`:`peak`,atMs:Date.now()+18e4,channel:nt})},[nt]),W=Ve>0?Ve:c.budget??0,it=ze&&W>0?V/W>=1?`over`:V/W>=.8?`warn`:`none`:`none`,at=(0,d.useCallback)(()=>{let e=!ze;s.setEnabled(e),e&&typeof Notification<`u`&&Notification.permission==="default"&&Notification.requestPermission()},[s,ze]);(0,d.useEffect)(()=>{if(!ze||W<=0)return;let e=V/W*100,t=zn.filter(t=>e>=t&&He?.[String(t)]!==B);if(t.length===0)return;let n=t[t.length-1]??100;if(s.markTierAlerted(t,B),!cr())return;let r=L(`budgetTierBody`).replace(`{cost}`,K(V)).replace(`{budget}`,K(W)).replace(`{pct}`,String(n));ur(`budget:${n}:${B}`,()=>{new Notification(L(`budget`),{body:r})})},[ze,W,V,He,B,s,L]),(0,d.useEffect)(()=>{let e=Pn(Ze,U,We,nt);if(e===null||(s.markTierSwitchAlerted(e.atMs),Je(e),!U.webNotify||!cr()))return;let t=Math.max(1,Math.round((e.atMs-Ze)/6e4)),n=L(e.entering===`peak`?`peakAlertTitlePeak`:`peakAlertTitleOff`),r=L(e.channel===`zhipu-coding-plan`?e.entering===`peak`?`tierAlertEnterPeakZhipu`:`tierAlertEnterOffZhipu`:e.entering===`peak`?`tierAlertEnterPeak`:`tierAlertEnterOff`).replace(`{minutes}`,String(t));ur(`peak:${e.atMs}`,()=>{new Notification(n,{body:r})})},[Ze,We,U,nt,v,c.byTurn,s,L]);let ot=o(e=>e.lastBalanceAlertDay),st=c.lowBalanceThreshold??50,G=(0,d.useMemo)(()=>{if(p.length===0)return;let e=ar(c.byDay,B),t=Ue().rate;for(let n of p){if(n.totalBalance===void 0||n.error!==void 0)continue;let r=n.currency===`USD`?n.totalBalance*t:n.totalBalance;if(r>=st)continue;let i=e>0?Math.floor(r/e):void 0;return{name:n.displayName,cny:r,days:i}}},[p,c.lowBalanceThreshold,c.byDay,B]);(0,d.useEffect)(()=>{if(G===void 0||ot===B||(s.markBalanceAlerted(B),!cr()))return;let e=L(`balanceLowBody`).replace(`{name}`,G.name).replace(`{balance}`,K(G.cny)).replace(`{days}`,G.days===void 0?`—`:String(G.days));ur(`balance:${B}`,()=>{new Notification(L(`balance`),{body:e})})},[G,ot,B,s,L]);let ct=(0,d.useMemo)(()=>{let e=B.slice(0,7),t=new Map;for(let[n,r]of Object.entries(c.byDayModels??{}))if(n.startsWith(e))for(let[e,n]of Object.entries(r)){if(n.cost<=0)continue;let r=mt(e).provider,i=c.byModel?.[e]?.plan===!0,a=t.get(r)??{cost:0,plan:i};a.cost+=n.cost,i||(a.plan=!1),t.set(r,a)}let n,r;for(let e of t){let t=e[1].plan?r:n;(t===void 0||e[1].cost>t[1].cost)&&(e[1].plan?r=e:n=e)}let i=e=>{let t=p.find(t=>Q(t.provider)===Q(e));if(t===void 0||t.totalBalance===void 0){if(e===`Custom`){let e=p.filter(e=>e.totalBalance!==void 0&&e.error===void 0),t=e[0];return t!==void 0&&e.length===1?i(t.provider):void 0}return{text:t?.error===`unauthorized`?L(`balanceUnauthorized`):t?.error===`unreachable`||t?.error===`invalid`?L(`balanceUnreachable`):L(`balanceUnconfigured`),low:!1}}let n=t.currency===`USD`?`$${t.totalBalance.toFixed(2)}`:K(t.totalBalance),r=Ue().rate;return{text:n,low:(t.currency===`USD`?t.totalBalance*r:t.totalBalance)<st}},a=e=>{let t=v.find(t=>t.displayName===e||Kn(t.provider)===e);if(t===void 0||t.windows.length===0)return{text:L(`subscriptionNoApi`),low:!1};let n=t.windows.reduce((e,t)=>Math.min(e,t.remainingPercent),100);return{text:n<=0?L(`subscriptionExhausted`):L(`subscriptionRemaining`).replace(`{pct}`,String(n)),low:n<20}},o=n===void 0?void 0:i(n[0]);return{direct:n===void 0||o===void 0?void 0:{name:n[0],...o},sub:r===void 0?void 0:{name:r[0],...a(r[0])}}},[c.byDayModels,c.byModel,c.lowBalanceThreshold,p,v,B]),lt=(0,d.useMemo)(()=>{let e=c.total;return{input:e.input,output:e.output,cacheRead:e.cacheHit,cacheMiss:e.cacheMiss,calls:e.calls}},[c]);(0,d.useEffect)(()=>{r({todayCost:H,monthCost:V})},[H,V,r]),(0,d.useEffect)(()=>i(je),[i,je]);let ut=(0,d.useMemo)(()=>c.byTurn??[],[c.byTurn]);return(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(Lr,{...e,t:L,currency:D,onOpen:je,monthCost:V,todayCost:H,weekCost:Pe,days:Fe,vendorStatus:ct,dash:lt,cardPrefs:ye,monthTokens:Ie,todayTokens:Le,weekTokens:Re,floatPrefs:re,subscriptions:v,budgetPressure:it}),Oe&&(0,m.jsx)(Vr,{stats:Ee,t:L,onClose:Ae,userPrices:Se,onUserPrices:Ce,health:u,balances:p,...g===void 0?{}:{reconcile:g},quotas:v,relayQuotas:w,currency:D,onCurrency:M,language:te,onLanguage:A,turns:ut,renderSlot:a,budgetEnabled:ze,budgetAmount:W,onToggleBudget:at,onBudgetAmount:s.setAmount,peakConfig:U,onPeakConfig:et,onPreviewPeak:rt,floatPrefs:re,onFloatPrefs:ce,cardPrefs:ye,onCardPrefs:xe,sitePrefs:le,onSitePrefs:de,liveCostPrefs:me,onLiveCostPrefs:ve,quotasStale:b}),(qe!==null||Ye!==null)&&(0,m.jsx)(Fn,{hit:qe??Ye,config:U,t:L,onDismiss:()=>{Je(null),Xe(null)}})]})}function Kr(e,t){return t===void 0||e?.bySession===void 0?0:e.bySession.find(e=>e.id===t)?.cost??0}function qr(e,t){if(t===void 0||e?.byTurn===void 0)return 0;let n=0,r=-1;for(let i of e.byTurn)i.sessionId===t&&(r===-1||i.turn>r)&&(r=i.turn,n=i.cost);return n}function Jr(e,t=20){let n=[];for(let r of e)if(r.status===`ok`)for(let e of r.windows)e.remainingPercent>t||n.push({name:r.displayName,kind:e.kind,pct:e.remainingPercent});return n.sort((e,t)=>e.pct-t.pct).slice(0,3)}function Yr(e,t){if(t===void 0||e?.byTurn===void 0)return;let n=-1,r;for(let i of e.byTurn)i.sessionId===t&&(n===-1||i.turn>n)&&(n=i.turn,r=i.model);return r}async function Xr(){try{let e=await fetch(`/api/billing/usage-stats`);if(!e.ok)return null;let t=await e.text(),n=JSON.parse(t);if(typeof n!=`object`||!n)return null;let r=n;return{...Array.isArray(r.bySession)?{bySession:r.bySession}:{},...Array.isArray(r.byTurn)?{byTurn:r.byTurn}:{}}}catch{return null}}async function Zr(){try{let e=await fetch(`/api/billing/subscriptions`);if(!e.ok)return[];let t=JSON.parse(await e.text());if(typeof t!=`object`||!t||!(`quotas`in t))return[];let n=t.quotas;return Array.isArray(n)?n:[]}catch{return[]}}function Qr(e){switch(e){case`session`:return`subscriptionSession`;case`weekly`:return`subscriptionWeekly`;case`monthly`:return`subscriptionMonthly`;default:return`subscriptionBilling`}}function $r({hasBandPlan:e}){let[t,n]=(0,d.useState)(()=>le()),[r,i]=(0,d.useState)(()=>Date.now());if((0,d.useEffect)(()=>{let e=()=>{n(le())};window.addEventListener(ce,e),window.addEventListener(`storage`,e);let t=setInterval(()=>{i(Date.now())},3e4);return()=>{window.removeEventListener(ce,e),window.removeEventListener(`storage`,e),clearInterval(t)}},[]),t.length===0)return null;let a=Mn().leadMin*6e4,o=t.map(t=>({key:t,state:vn(et(r,$e(t,e)),a)})).filter(e=>e.state!==null);return o.length===0?null:(0,m.jsx)(`span`,{className:I.bandDots,"data-testid":`billing-pinned-dots`,children:o.map(e=>(0,m.jsx)(`span`,{className:y(I.bandDot,I.bandDotOn,I[e.state]),role:`img`,"aria-label":e.key,title:e.key},e.key))})}function ei(){let[e,t]=(0,d.useState)(()=>P());return(0,d.useEffect)(()=>{let e=()=>{t(P())};return window.addEventListener(se,e),window.addEventListener(`storage`,e),()=>{window.removeEventListener(se,e),window.removeEventListener(`storage`,e)}},[]),e}function ti(){let[e,t]=(0,d.useState)(()=>ae().show),[n,r]=(0,d.useState)(()=>ae().position);return(0,d.useEffect)(()=>{let e=()=>{t(ae().show),r(ae().position)};return window.addEventListener(ie,e),window.addEventListener(`storage`,e),()=>{window.removeEventListener(ie,e),window.removeEventListener(`storage`,e)}},[]),{visible:e,position:n}}function ni(e){let[t,n]=(0,d.useState)(null),[r,i]=(0,d.useState)([]),[a,o]=(0,d.useState)(()=>Date.now());(0,d.useEffect)(()=>{let e=!1,t=()=>{Xr().then(t=>{!e&&t!==null&&n(t)}),Zr().then(t=>{e||i(t)}),e||o(Date.now())};t();let r=setInterval(t,3e4);return()=>{e=!0,clearInterval(r)}},[e]);let s=(0,d.useMemo)(()=>Kr(t,e),[t,e]),c=(0,d.useMemo)(()=>qr(t,e),[t,e]),l=(0,d.useMemo)(()=>Jr(r),[r]),u=(0,d.useMemo)(()=>$e(Yr(t,e),r.some(e=>e.displayName===`Z.ai Coding Plan`&&e.status===`ok`)),[t,e,r]);return{sessionCost:s,turnCost:c,tier:(0,d.useMemo)(()=>et(a,u),[a,u]),chips:l,hasBandPlan:r.some(e=>e.displayName===`Z.ai Coding Plan`&&e.status===`ok`)}}function ri({sessionId:e,t}){let{visible:n,position:r}=ti(),{sessionCost:i,turnCost:a,tier:o,chips:s,hasBandPlan:c}=ni(e),l=ei(),u=e=>K(Ct(e,l),l),d=i>0||a>0,f=o?.tier===`peak`;return!n||r===`toolbar`?null:(0,m.jsxs)(`span`,{className:r===`above`?y(I.feeBar,I.feeBarAbove):I.feeBar,"data-testid":`billing-live-cost-bar`,children:[(0,m.jsx)($r,{hasBandPlan:c}),o!==null&&(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(`span`,{className:f?I.feeChipPrimary:I.feeChipOff,"data-testid":`billing-live-tier`,children:t(f?`tierPeak`:`tierOff`)}),(0,m.jsx)(`span`,{className:I.feeCount,children:nt(o.nextSwitchInMs)}),(0,m.jsx)(`span`,{className:I.feeSuffix,children:t(f?`tierToOff`:`tierToPeak`)})]}),d&&(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(`span`,{className:I.feeSep,"aria-hidden":`true`,children:`·`}),(0,m.jsxs)(`span`,{className:I.feeItem,"data-testid":`billing-live-turn`,children:[t(`liveTurn`),` `,(0,m.jsx)(`span`,{className:I.feeNum,children:u(a)})]}),(0,m.jsx)(`span`,{className:I.feeSep,"aria-hidden":`true`,children:`·`}),(0,m.jsxs)(`span`,{className:I.feeItem,"data-testid":`billing-live-session`,children:[t(`liveSession`),` `,(0,m.jsx)(`span`,{className:I.feeNum,children:u(i)})]})]}),s.map(e=>(0,m.jsxs)(`span`,{children:[(0,m.jsx)(`span`,{className:I.feeSep,"aria-hidden":`true`,children:`·`}),(0,m.jsxs)(`span`,{className:e.pct<=10?I.feeChipError:I.feeChipAlert,"data-testid":`billing-live-quota`,children:[e.name,` `,t(Qr(e.kind)),` `,e.pct,`%`]})]},`${e.name}:${e.kind}`))]})}function ii({sessionId:e,t}){let n=ei(),r=e=>K(Ct(e,n),n),{visible:i,position:a}=ti(),{sessionCost:o,turnCost:s,tier:c,chips:l,hasBandPlan:u}=ni(e);if(!i||a!==`toolbar`)return null;let d=c?.tier===`peak`,f=l.reduce((e,t)=>Math.min(e,t.pct),100),h=f<=10?I.feeInlineError:f<=20?I.feeInlineAlert:I.feeInline,g=[...c===null?[]:[`${nt(c.nextSwitchInMs)} ${t(d?`tierToOff`:`tierToPeak`)}`],`${t(`liveTurn`)} ${r(s)}`,`${t(`liveSession`)} ${r(o)}`,...l.map(e=>`${e.name} ${t(Qr(e.kind))} ${e.pct}%`)].join(` · `);return(0,m.jsx)(p.Tooltip,{label:g,side:`top`,delayMs:500,children:(0,m.jsxs)(`span`,{className:h,"data-testid":`billing-live-cost-chip`,role:`note`,"aria-label":g,children:[(0,m.jsx)($r,{hasBandPlan:u}),c!==null&&(0,m.jsx)(`span`,{className:d?I.feeChipPrimary:I.feeChipOff,"data-testid":`billing-live-tier`,children:t(d?`tierPeak`:`tierOff`)}),o>0&&(0,m.jsx)(`span`,{className:I.feeInlineNum,children:r(o)})]})})}function ai(){let e,t,n=new Set;return{readCosts:()=>e,subscribeCosts:t=>(t(e),n.add(t),()=>{n.delete(t)}),openDashboard:()=>{t?.()},publishCosts:t=>{e=t;for(let e of n)try{e(t)}catch{}},registerOpen:e=>(t=e,()=>{t===e&&(t=void 0)})}}function oi(){return(0,h.defineStore)({init:()=>({enabled:!1,amount:0,tierAlertDays:{},lastBalanceAlertDay:``,lastTierSwitchAt:0}),persist:`dsh.ui-usage-billing.budget`,actions:{setEnabled:(e,t)=>{e.enabled=t},setAmount:(e,t)=>{e.amount=Number.isFinite(t)&&t>0?t:0},markTierAlerted:(e,t,n)=>{e.tierAlertDays??={};for(let r of t)e.tierAlertDays[String(r)]=n},markBalanceAlerted:(e,t)=>{e.lastBalanceAlertDay=t},markTierSwitchAlerted:(e,t)=>{e.lastTierSwitchAt=t}}})}let si={enabled:!1,timeout:0};function ci(){try{let e=localStorage.getItem(`dsh-billing-completion-notify-v1`);if(e===null)return{...si};let t=JSON.parse(e);return{enabled:t.enabled===!0,timeout:typeof t.timeout==`number`?t.timeout:0}}catch{return{...si}}}function li(e){return e.completed===!0||e.running===!1}function ui(e,t){let n=new Set,r=new Set,i,a=e.getSnapshot();for(let e of a.ids){let t=a.byId[e];t!==void 0&&(r.add(String(e)),li(t)&&n.add(String(e)))}let o=e=>{let{enabled:n,timeout:r}=t();if(n&&!(typeof Notification>`u`)&&Notification.permission===`granted`)try{let t=new Notification(e,{body:e,tag:`dsh-billing-completion`,requireInteraction:r===0});r>0&&(i!==void 0&&clearTimeout(i),i=setTimeout(()=>t.close(),r*1e3))}catch{}},s=e.subscribe(()=>{let t=e.getSnapshot(),i=[];for(let e of t.ids){let a=t.byId[e];if(a===void 0)continue;let o=String(e),s=li(a),c=!r.has(o);c&&r.add(o),s&&!c&&!n.has(o)&&i.push(a.title??a.id??o),s?n.add(o):n.delete(o)}if(i.length>0){let e=i.length===1?i[0]:`${i.length} 个会话已完成`;e!==void 0&&o(e)}});return()=>{s(),i!==void 0&&clearTimeout(i)}}let di=[`slots`,`locale`,`remote`,`sessions`];function fi(e){let t=ai();e.provide(`billingMetrics`,t);let n=oi();e.effect(()=>e.locale.register(Ce,{zh:we,en:Te}),`ui-usage-billing: dictionaries`),e.slots.inject(`sidebar.footer.action`,()=>e.slots.register({name:`sidebar.footer.action`,id:`usage-billing`,order:-10,locale:Ce,children:{"billing.dashboard.decor":{kind:`list`,scope:`root`}},store:n,inject:()=>({checkModels:async()=>{try{let[t,n]=await Promise.all([e.remote.llm.listProviders(),e.remote.llm.listConfigurableProviders()]);if(!t.ok||!n.ok)return{checked:!0,available:!1,models:0,failures:0,okProviders:[],badProviders:[]};let r=new Map(n.value.map(e=>[e.provider,e])),i=await Promise.all(t.value.map(async t=>{let n=r.get(t.id);if(n===void 0)return{provider:t,models:[]};let i=await e.remote.llm.discoverModels(n.settingsNs,{provider:t.id});return i.ok?{provider:t,models:i.value}:{provider:t,failed:!0}})),a=[],o=[],s=[],c=0;for(let e of i){if(`failed`in e){s.push(e.provider.name);continue}o.push(e.provider.name),c+=e.models.length;for(let t of e.models)a.push({id:t.id,...typeof t.name==`string`&&t.name!==``?{name:t.name}:{},provider:e.provider.name})}return{checked:!0,available:o.length>0,models:c,failures:s.length,okProviders:o,badProviders:s,catalog:a}}catch{return{checked:!1,available:!1,models:0,failures:0,okProviders:[],badProviders:[]}}},publishCosts:e=>{t.publishCosts(e)},registerOpen:e=>t.registerOpen(e)})},Gr)),e.slots.inject(`conversation.composer.dock`,()=>e.slots.register({name:`conversation.composer.dock`,id:`usage-billing-cost`,order:0,locale:Ce,inject:e=>({sessionId:_(e)})},ri)),e.slots.inject(`conversation.input.right`,()=>e.slots.register({name:`conversation.input.right`,id:`usage-billing-cost-chip`,order:0,locale:Ce,inject:e=>({sessionId:_(e)})},ii)),e.effect(()=>ui(e.sessions.list,ci),`ui-usage-billing: completion notifier`)}return n.UsageBilling=Gr,n.apply=fi,n.inject=di,t.exports}});
6
6
  //# sourceMappingURL=client.js.map