@kenz1117/dsh-ui-usage-billing 0.9.7 → 0.9.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
@@ -24,7 +24,7 @@ window.__ModuleLoader__.load({
24
24
  }
25
25
  //#endregion
26
26
  //#region \0dsh-css:/Users/ken/deepseek-harness/packages/client/ui-usage-billing/src/client/UsageBilling.module.css.mjs
27
- const css = ".VWh0dG_railButton{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);width:36px;height:36px;color:var(--dsw-alias-label-secondary);cursor:pointer;border-radius:8px;flex:none;justify-content:center;align-items:center;padding:0;transition:border-color .16s,color .16s;display:flex}.VWh0dG_railButton:hover,.VWh0dG_railButton:focus-visible{border-color:var(--dsw-static-blue-500);color:var(--dsw-static-blue-500);outline:none}.VWh0dG_railButton svg{stroke-width:2px;width:18px;height:18px}.VWh0dG_trigger{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);width:100%;min-width:0;color:var(--dsw-alias-label-primary);cursor:pointer;text-align:left;border-radius:12px;align-items:center;gap:10px;padding:9px 12px;transition:border-color .16s,background-color .16s;display:flex;position:relative;overflow:hidden}.VWh0dG_trigger:hover,.VWh0dG_trigger:focus-visible{border-color:var(--dsw-static-blue-500);outline:none}.VWh0dG_triggerIcon{background:linear-gradient(135deg, var(--dsw-static-blue-500), var(--dsw-static-blue-400));width:30px;height:30px;color:var(--dsw-static-neutral-bluish-00);box-shadow:0 2px 8px -2px color-mix(in srgb, var(--dsw-static-blue-500) 55%, transparent);border-radius:10px;flex:none;justify-content:center;align-items:center;display:inline-flex}.VWh0dG_triggerIcon svg{stroke-width:2px;width:16px;height:16px}.VWh0dG_triggerBody{flex-direction:column;flex:1;gap:1px;min-width:0;display:flex}.VWh0dG_triggerRow{align-items:baseline;gap:5px;min-width:0;display:inline-flex}.VWh0dG_triggerAmount{color:var(--dsw-alias-label-primary);letter-spacing:-.02em;font-variant-numeric:tabular-nums;white-space:nowrap;font-size:16px;font-weight:700;line-height:20px}.VWh0dG_triggerSub{color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;font-size:10px;line-height:14px;overflow:hidden}.VWh0dG_triggerMeta{color:var(--dsw-alias-label-tertiary);white-space:nowrap;letter-spacing:.02em;text-transform:uppercase;font-size:9.5px;font-weight:600;line-height:12px}.VWh0dG_triggerSpark{flex:none;align-items:flex-end;gap:2px;height:20px;display:flex}.VWh0dG_triggerSparkBar,.VWh0dG_triggerSparkHot{background:var(--dsw-static-blue-500);opacity:.6;border-radius:1px 1px 0 0;width:3px}.VWh0dG_triggerSparkHot{opacity:1}.VWh0dG_triggerWrap{flex:auto;width:100%;min-width:0;display:block;position:relative}.VWh0dG_triggerPop{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);box-shadow:var(--dsw-shadow-lv2);opacity:0;pointer-events:none;z-index:10;border-radius:10px;flex-direction:column;gap:6px;padding:12px 14px;transition:opacity .16s,transform .16s;display:flex;position:absolute;bottom:calc(100% + 8px);left:0;right:0;transform:translateY(4px)}.VWh0dG_triggerWrap:hover .VWh0dG_triggerPop,.VWh0dG_triggerWrap:focus-within .VWh0dG_triggerPop{opacity:1;transform:translateY(0)}.VWh0dG_triggerPopRow{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.VWh0dG_triggerPopLabel{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.VWh0dG_triggerPopValue{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-size:13px;font-weight:600;line-height:18px}.VWh0dG_triggerPopBars{border-top:1px solid var(--dsw-alias-border-l1);align-items:flex-end;gap:4px;height:22px;margin-top:4px;padding-top:8px;display:flex}.VWh0dG_triggerPopBar{background:var(--dsw-static-blue-500);border-radius:2px;flex:1;transition:height .2s}.VWh0dG_dashboardModal{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);width:min(760px,100vw - 48px);max-height:min(760px,88vh);box-shadow:var(--dsw-shadow-lv3);animation:.18s ease-out VWh0dG_dashboardIn}@keyframes VWh0dG_dashboardIn{0%{opacity:0;transform:translateY(8px)scale(.98)}to{opacity:1;transform:none}}div[role=presentation]:has(>.dsh-billing-modal)>div[aria-hidden=true]:first-child{backdrop-filter:blur(8px)saturate(1.25)}.VWh0dG_dashboard{flex-direction:column;width:100%;max-height:min(760px,88vh);display:flex}.VWh0dG_dashboardHead{border-bottom:1px solid var(--dsw-alias-border-l1);justify-content:space-between;align-items:flex-start;gap:12px;padding:20px 24px 14px;display:flex}.VWh0dG_dashboardTitle{color:var(--dsw-alias-label-primary);margin:0;font-size:17px;font-weight:600;line-height:24px}.VWh0dG_dashboardSubtitle{color:var(--dsw-alias-label-caption);margin:3px 0 0;font-size:12px;line-height:17px}.VWh0dG_closeButton{width:30px;height:30px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:8px;flex:none;justify-content:center;align-items:center;transition:background-color .14s;display:inline-flex}.VWh0dG_closeButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.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_tabNav{border-bottom:1px solid var(--dsw-alias-border-l1);align-items:center;gap:4px;padding:10px 24px;display:flex}.VWh0dG_tabButton{color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:999px;padding:5px 14px;font-size:12.5px;font-weight:500;line-height:18px;transition:background-color .16s,color .16s,box-shadow .16s}.VWh0dG_tabButton:hover,.VWh0dG_tabButton:focus-visible{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover);outline:none}.VWh0dG_tabButtonActive,.VWh0dG_tabButtonActive:hover,.VWh0dG_tabButtonActive:focus-visible{background:var(--dsw-static-blue-500);color:var(--dsw-static-neutral-bluish-00);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_hero{border:1px solid var(--dsw-alias-border-l1);background:linear-gradient(180deg, var(--dsw-alias-bg-layer-2), var(--dsw-alias-bg-layer-1));box-shadow:inset 0 1px 0 color-mix(in srgb, var(--dsw-static-neutral-bluish-00) 30%, transparent);border-radius:16px;flex-direction:column;gap:18px;padding:22px 24px;display:flex;position:relative;overflow:hidden}.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(--dsw-alias-label-tertiary);text-transform:uppercase;letter-spacing:.08em;white-space:nowrap;font-size:11px;line-height:16px}.VWh0dG_heroReadout{align-items:baseline;gap:4px;display:flex}.VWh0dG_heroCurrency{letter-spacing:-.01em;color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;font-size:20px;font-weight:600;line-height:30px}.VWh0dG_heroValue{letter-spacing:-.03em;font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--dsw-alias-label-primary);font-size:56px;font-weight:700;line-height:64px}.VWh0dG_heroMeta{color:var(--dsw-alias-label-caption);white-space:nowrap;margin-top:4px;font-size:12px;line-height:17px}.VWh0dG_heroGauge{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(--dsw-alias-bg-module-platform);stroke-width:9px}.VWh0dG_heroGaugeArc{fill:none;stroke:var(--dsw-static-blue-500);stroke-width:9px;stroke-linecap:round;transition:stroke-dasharray .26s}.VWh0dG_heroGaugeArcOver{stroke:var(--dsw-static-red-500)}.VWh0dG_heroGaugeCenter{flex-direction:column;justify-content:center;align-items:center;gap:1px;display:flex;position:absolute;inset:0}.VWh0dG_heroGaugePct{letter-spacing:-.02em;font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-primary);font-size:18px;font-weight:700;line-height:22px}.VWh0dG_heroGaugePctOver{color:var(--dsw-static-red-500)}.VWh0dG_heroGaugeLabel{color:var(--dsw-alias-label-tertiary);font-size:10px;line-height:14px}.VWh0dG_heroSide{border-top:1px solid var(--dsw-alias-border-l1);align-items:stretch;padding-top:14px;display:flex}.VWh0dG_heroSideItem{flex-direction:column;flex:1;gap:3px;min-width:0;padding-left:16px;display:flex}.VWh0dG_heroSideItem:first-child{padding-left:0}.VWh0dG_heroSideLabel{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-size:11px;line-height:15px}.VWh0dG_heroSideValue{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;letter-spacing:-.01em;white-space:nowrap;align-items:baseline;gap:6px;font-size:18px;font-weight:600;line-height:24px;display:inline-flex}.VWh0dG_heroSideSpacer{flex:1;display:block}.VWh0dG_delta{align-items:center;gap:2px;margin-left:4px;font-size:11px;font-weight:600;line-height:17px;display:inline-flex}.VWh0dG_deltaUp{color:var(--dsw-static-green-500)}.VWh0dG_deltaDown{color:var(--dsw-static-red-500)}.VWh0dG_kpiGrid{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;display:grid}.VWh0dG_kpiTile{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:14px;flex-direction:column;gap:3px;padding:14px 15px;transition:border-color .16s;display:flex;position:relative;overflow:hidden}.VWh0dG_kpiTile:hover{border-color:var(--dsw-alias-border-l2)}.VWh0dG_kpiLabel{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:15px}.VWh0dG_kpiValue{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;letter-spacing:-.01em;font-size:22px;font-weight:600;line-height:28px}.VWh0dG_kpiGreen{color:var(--dsw-static-green-500)}.VWh0dG_kpiDetail{color:var(--dsw-alias-label-caption);white-space:nowrap;text-overflow:ellipsis;font-size:11px;line-height:15px;overflow:hidden}.VWh0dG_panel{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:16px;flex-direction:column;gap:10px;padding:16px 18px;transition:border-color .16s;display:flex}.VWh0dG_panelHead{justify-content:space-between;align-items:baseline;gap:10px;display:flex}.VWh0dG_panelTitle{letter-spacing:-.005em;color:var(--dsw-alias-label-primary);margin:0;font-size:14px;font-weight:600;line-height:20px}.VWh0dG_panelHint{color:var(--dsw-alias-label-caption);white-space:nowrap;font-size:11px;line-height:16px}.VWh0dG_pricingTip{color:var(--dsw-alias-label-caption);margin:0 0 2px;font-size:11px;line-height:16px}.VWh0dG_rangeToggle{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:8px;gap:2px;padding:2px;display:inline-flex}.VWh0dG_rangeButton{color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:6px;padding:2px 8px;font-size:11px;line-height:16px;transition:background-color .14s,color .14s}.VWh0dG_rangeButtonActive{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);font-weight:600}.VWh0dG_exportBar{justify-content:flex-end;align-items:center;gap:8px;display:flex}.VWh0dG_exportLabel{color:var(--dsw-alias-label-caption);font-size:11px;line-height:16px}.VWh0dG_exportButton{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-secondary);cursor:pointer;border-radius:999px;padding:4px 12px;font-size:11.5px;line-height:16px;transition:border-color .16s,color .16s,background-color .16s}.VWh0dG_exportButton:hover,.VWh0dG_exportButton:focus-visible{border-color:var(--dsw-alias-border-l2);color:var(--dsw-alias-label-primary);outline:none}.VWh0dG_shareTrack{background:var(--dsw-alias-bg-module-platform);border-radius:999px;height:10px;display:flex;overflow:hidden}.VWh0dG_shareSeg{height:100%;transition:width .2s}.VWh0dG_shareSegPeak{background:var(--dsw-static-blue-500)}.VWh0dG_shareSegOff{background:color-mix(in srgb, var(--dsw-static-blue-500) 25%, var(--dsw-alias-bg-module-platform))}.VWh0dG_shareSegUser{background:var(--dsw-static-blue-500)}.VWh0dG_shareSegAssistant{background:var(--dsw-static-green-500)}.VWh0dG_shareSegTool{background:var(--dsw-static-amber-500)}.VWh0dG_shareLegend{align-items:center;gap:16px;display:flex}.VWh0dG_shareItem{color:var(--dsw-alias-label-secondary);align-items:baseline;gap:6px;font-size:12px;line-height:17px;display:inline-flex}.VWh0dG_bucketCost{align-items:baseline;gap:3px;display:inline-flex}.VWh0dG_bucketOfficial{color:var(--dsw-static-blue-500);font-weight:600}.VWh0dG_bucketSep{color:var(--dsw-alias-label-dimmed)}.VWh0dG_bucketThird{color:var(--dsw-alias-label-secondary)}.VWh0dG_bucketSummary{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;display:grid}.VWh0dG_bucketStat{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:12px;flex-direction:column;gap:4px;padding:12px 14px;display:flex}.VWh0dG_bucketStatLabel{color:var(--dsw-alias-label-tertiary);text-transform:uppercase;letter-spacing:.05em;font-size:11px;line-height:15px}.VWh0dG_bucketStatValue{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;letter-spacing:-.01em;font-size:20px;font-weight:700;line-height:26px}.VWh0dG_bucketStatSub{color:var(--dsw-alias-label-caption);font-variant-numeric:tabular-nums;font-size:11px;line-height:16px}.VWh0dG_shareDot{border-radius:50%;flex:none;align-self:center;width:8px;height:8px}.VWh0dG_shareValue{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-weight:600}.VWh0dG_budget{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:14px;flex-direction:column;gap:8px;padding:12px 16px;display:flex}.VWh0dG_budgetHead{justify-content:space-between;align-items:baseline;gap:10px;display:flex}.VWh0dG_budgetLabel{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:17px}.VWh0dG_budgetValue{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:12px;line-height:17px}.VWh0dG_budgetControls{align-items:center;gap:8px;min-width:0;display:inline-flex}.VWh0dG_budgetInputWrap{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:6px;align-items:center;gap:2px;padding:2px 6px;display:inline-flex}.VWh0dG_budgetInputWrap:focus-within{border-color:var(--dsw-alias-border-l3)}.VWh0dG_budgetUnit{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.VWh0dG_budgetInput{width:64px;color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;text-align:right;background:0 0;border:none;padding:0;font-size:12px;line-height:16px}.VWh0dG_budgetInput:focus-visible{outline:none}.VWh0dG_switch{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-module-platform);cursor:pointer;border-radius:999px;flex:none;width:30px;height:17px;padding:0;transition:background-color .16s,border-color .16s;position:relative}.VWh0dG_switchOn{border-color:var(--dsw-alias-border-l1);background:var(--dsw-alias-label-primary)}.VWh0dG_switchKnob{background:var(--dsw-static-neutral-bluish-00);border-radius:50%;width:11px;height:11px;transition:transform .16s;position:absolute;top:2px;left:2px}.VWh0dG_switchOn .VWh0dG_switchKnob{transform:translate(13px)}.VWh0dG_budgetTrack{background:var(--dsw-alias-bg-module-platform);border-radius:999px;height:6px;overflow:hidden}.VWh0dG_budgetFill{background:var(--dsw-static-blue-500);border-radius:999px;height:100%;transition:width .2s}.VWh0dG_budgetFillWarn{background:var(--dsw-static-amber-500)}.VWh0dG_budgetFillOver{background:var(--dsw-static-red-500);animation:1.6s ease-in-out infinite VWh0dG_budgetOverPulse}@keyframes VWh0dG_budgetOverPulse{50%{opacity:.55}}.VWh0dG_chartWrap{width:100%;position:relative}.VWh0dG_chartSvg{width:100%;height:auto;display:block}.VWh0dG_chartEmpty{height:140px;color:var(--dsw-alias-label-caption);justify-content:center;align-items:center;font-size:13px;display:flex}.VWh0dG_emptyRow{text-align:center;color:var(--dsw-alias-label-caption);padding:28px 0;font-size:13px}.VWh0dG_chartGrid{stroke:var(--dsw-alias-border-l1);stroke-width:1px}.VWh0dG_chartAxisLabel{fill:var(--dsw-alias-label-tertiary);font-size:10px}.VWh0dG_chartBar{fill:var(--dsw-static-blue-500);opacity:.7}.VWh0dG_chartBar:hover{opacity:1}.VWh0dG_chartStack{stroke:var(--dsw-alias-bg-layer-1);stroke-width:.75px}.VWh0dG_chartStack:hover{opacity:.9}.VWh0dG_chartLine{stroke:var(--dsw-static-blue-500);stroke-width:2px;stroke-linecap:round;stroke-linejoin:round}.VWh0dG_chartCrosshair{stroke:var(--dsw-alias-label-dimmed);stroke-width:1px;stroke-dasharray:3 3}.VWh0dG_chartDot{fill:var(--dsw-static-neutral-bluish-00);stroke:var(--dsw-static-blue-500);stroke-width:2px}.VWh0dG_chartTooltip{pointer-events:none;z-index:2;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);box-shadow:none;white-space:nowrap;border-radius:8px;padding:8px 10px;position:absolute;transform:translate(-50%,calc(-100% - 10px))}.VWh0dG_chartTooltipDate{color:var(--dsw-alias-label-primary);margin-bottom:3px;font-size:11px;font-weight:600}.VWh0dG_chartTooltipRow{color:var(--dsw-alias-label-secondary);align-items:center;gap:5px;font-size:11px;line-height:17px;display:flex}.VWh0dG_chartTooltipRow strong{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-weight:600}.VWh0dG_chartLegendLine{background:var(--dsw-static-blue-500);border-radius:2px;width:10px;height:3px;display:inline-block}.VWh0dG_chartLegendBar{background:var(--dsw-static-blue-500);opacity:.5;border-radius:2px;width:7px;height:7px;display:inline-block}.VWh0dG_chartTooltipSwatch{border-radius:3px;flex:none;width:8px;height:8px;display:inline-block}.VWh0dG_chartLegend{color:var(--dsw-alias-label-tertiary);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_tableScroll{border:1px solid var(--dsw-alias-border-l1);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);border-radius:12px;overflow:auto}.VWh0dG_modelTable,.VWh0dG_pricingTable{border-collapse:collapse;width:100%;font-size:12.5px}.VWh0dG_modelTable th,.VWh0dG_modelTable td,.VWh0dG_pricingTable th,.VWh0dG_pricingTable td{border-bottom:1px solid var(--dsw-alias-border-l1);text-align:left;white-space:nowrap;padding:9px 12px}.VWh0dG_modelTable tbody tr:last-child td,.VWh0dG_pricingTable tbody tr:last-child td{border-bottom:0}.VWh0dG_modelTable thead th,.VWh0dG_pricingTable thead th{color:var(--dsw-alias-label-tertiary);text-transform:uppercase;letter-spacing:.05em;background:0 0;font-size:11px;font-weight:600}.VWh0dG_modelTable tbody tr,.VWh0dG_pricingTable tbody tr{transition:background-color .12s}.VWh0dG_modelTable tbody tr:hover,.VWh0dG_pricingTable tbody tr:hover{background:0 0}.VWh0dG_numCol{text-align:right;font-variant-numeric:tabular-nums}.VWh0dG_costCol{color:var(--dsw-alias-label-primary);font-weight:600}.VWh0dG_na{color:var(--dsw-alias-label-dimmed)}.VWh0dG_modelCell{align-items:center;gap:8px;display:inline-flex}.VWh0dG_modelDot{border-radius:50%;flex:none;width:9px;height:9px}.VWh0dG_modelName{color:var(--dsw-alias-label-primary);font-weight:500;line-height:16px;display:block}.VWh0dG_modelProvider{color:var(--dsw-alias-label-caption);font-size:10.5px;line-height:14px;display:block}.VWh0dG_pricingToggle{cursor:pointer;text-align:left;background:0 0;border:none;justify-content:space-between;align-items:center;gap:10px;width:100%;padding:0;display:flex}.VWh0dG_pricingToggle:hover .VWh0dG_panelTitle,.VWh0dG_pricingToggle:focus-visible .VWh0dG_panelTitle{color:var(--dsw-alias-label-primary)}.VWh0dG_rateBadge{vertical-align:1px;white-space:nowrap;border-radius:999px;align-items:center;margin-left:6px;padding:1px 6px;font-size:10px;font-weight:500;line-height:14px;display:inline-flex}.VWh0dG_rateBadgeLive{color:var(--dsw-static-green-500);background:var(--dsw-alias-bg-layer-2)}.VWh0dG_rateBadgeBuiltin{color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-bg-layer-2)}.VWh0dG_pricingToggleText{align-items:baseline;gap:10px;min-width:0;display:flex}.VWh0dG_pricingChevron{width:16px;height:16px;color:var(--dsw-alias-label-tertiary);flex:none;transition:transform .16s}.VWh0dG_pricingChevronOpen{transform:rotate(180deg)}.VWh0dG_bandPrice{align-items:baseline;gap:6px;display:inline-flex}.VWh0dG_bandPriceOff{color:var(--dsw-alias-label-caption)}.VWh0dG_bandPriceOff:before{content:\"/\";color:var(--dsw-alias-label-dimmed);margin-right:4px}.VWh0dG_bandTag{color:var(--dsw-alias-label-secondary);flex-direction:column;gap:1px;font-size:10.5px;line-height:14px;display:inline-flex}.VWh0dG_bandTagOff{color:var(--dsw-static-green-500);font-weight:600}.VWh0dG_bandTag>span:first-child{color:var(--dsw-alias-label-primary);font-weight:500}.VWh0dG_flatTag{color:var(--dsw-alias-label-caption);font-size:10.5px;line-height:14px}.VWh0dG_healthDot{border-radius:50%;flex:none;width:8px;height:8px;display:inline-block}.VWh0dG_healthOk{background:var(--dsw-static-green-500)}.VWh0dG_healthBad{background:var(--dsw-static-red-500)}.VWh0dG_healthIdle{background:var(--dsw-static-neutral-bluish-400)}.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(--dsw-static-green-500);background:var(--dsw-alias-bg-layer-2)}.VWh0dG_healthBadgeBad{color:var(--dsw-static-red-500);background:var(--dsw-alias-bg-layer-2)}.VWh0dG_planTag{color:var(--dsw-static-green-500);background:var(--dsw-alias-bg-layer-2);border-radius:999px;align-items:center;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px;display:inline-flex}.VWh0dG_uncataloguedTag{vertical-align:1px;color:var(--dsw-static-amber-500);background:var(--dsw-alias-bg-layer-2);border-radius:999px;margin-left:6px;padding:0 6px;font-size:10px;font-weight:600;line-height:16px;display:inline-block}.VWh0dG_estimatedTag{vertical-align:1px;color:var(--dsw-static-blue-500);background:var(--dsw-alias-bg-layer-2);border-radius:999px;margin-left:6px;padding:0 6px;font-size:10px;font-weight:600;line-height:16px;display:inline-block}.VWh0dG_liveCostBar{color:var(--dsw-static-neutral-400);font-variant-numeric:tabular-nums;align-items:center;gap:6px;font-size:11px;line-height:16px;display:inline-flex}.VWh0dG_liveCostItem{white-space:nowrap}.VWh0dG_liveCostSep{color:var(--dsw-static-neutral-300)}.VWh0dG_liveTierPeak{color:var(--dsw-static-blue-500);font-weight:600}.VWh0dG_liveTierOff{color:var(--dsw-static-green-500);font-weight:600}.VWh0dG_liveQuotaWarn{color:var(--dsw-static-amber-500);font-weight:600}.VWh0dG_liveQuotaCrit{color:var(--dsw-static-red-500);font-weight:600}.VWh0dG_balanceCell{flex-direction:column;align-items:flex-end;gap:2px;display:inline-flex}.VWh0dG_balanceDays{color:var(--dsw-alias-label-caption);white-space:nowrap;font-size:10.5px;line-height:14px}.VWh0dG_balanceDaysLow{color:var(--dsw-static-red-500);font-weight:600}body[data-zine-mode] .VWh0dG_trigger,body[data-zine-mode] .VWh0dG_triggerPop,body[data-zine-mode] .VWh0dG_railButton{display:none}body[data-zine-mode] .VWh0dG_dashboardHead{background:#000;border-bottom:2px solid #e8ff00}body[data-zine-mode] .VWh0dG_headTitleRow{align-items:center;gap:8px;margin-top:4px;display:flex}body[data-zine-mode] .VWh0dG_dashboardTitle{color:#e8ff00;letter-spacing:.04em;text-transform:uppercase;text-shadow:0 0 8px #e8ff0066;font-weight:900}body[data-zine-mode] .VWh0dG_dashboardSubtitle{color:#c9d98a;letter-spacing:.08em;text-transform:uppercase;font-size:10px}body[data-zine-mode] .VWh0dG_closeButton{color:#0a0a05;background:#ff2d95;border:1.5px solid #ff2d95;border-radius:0;box-shadow:0 0 10px #ff2d9573}body[data-zine-mode] .VWh0dG_hero{background:#000;border:2.5px solid #e8ff00;border-radius:0;position:relative;box-shadow:0 0 0 1px #0009,0 0 24px #e8ff002e}body[data-zine-mode] .VWh0dG_heroLabel{color:#c9d98a;letter-spacing:.12em;text-transform:uppercase;font-size:10px;font-weight:900}body[data-zine-mode] .VWh0dG_heroValue{color:#e8ff00;letter-spacing:-.02em;text-shadow:0 0 12px #e8ff0073;-webkit-text-fill-color:#e8ff00;background:0 0;font-size:38px;font-weight:900}body[data-zine-mode] .VWh0dG_heroMeta{color:#c9d98a;letter-spacing:.06em;text-transform:uppercase;font-size:10.5px}body[data-zine-mode] .VWh0dG_heroSideLabel{color:#c9d98a;letter-spacing:.1em;text-transform:uppercase;font-size:10px;font-weight:900}body[data-zine-mode] .VWh0dG_heroSideValue{color:#e8ff00;text-shadow:0 0 6px #e8ff0059}body[data-zine-mode] .VWh0dG_delta{font-weight:900}body[data-zine-mode] .VWh0dG_deltaUp{color:#ff2d95}body[data-zine-mode] .VWh0dG_deltaDown{color:#c9d98a}body[data-zine-mode] .VWh0dG_tabNav{background:#000;border-bottom:2px solid #e8ff00}body[data-zine-mode] .VWh0dG_tabButton{color:#c9d98a;letter-spacing:.08em;text-transform:uppercase;border-radius:0;font-size:10.5px;font-weight:900}body[data-zine-mode] .VWh0dG_tabButton:hover,body[data-zine-mode] .VWh0dG_tabButton:focus-visible{color:#e8ff00;background:#e8ff001f}body[data-zine-mode] .VWh0dG_tabButtonActive,body[data-zine-mode] .VWh0dG_tabButtonActive:hover,body[data-zine-mode] .VWh0dG_tabButtonActive:focus-visible{color:#0a0a05;background:#e8ff00;box-shadow:0 0 10px #e8ff0073}body[data-zine-mode] .VWh0dG_panel{background:#000;border:2px solid #e8ff00;border-radius:0}body[data-zine-mode] .VWh0dG_trendPanel{position:relative}body[data-zine-mode] .VWh0dG_panelTitle{color:#e8ff00;letter-spacing:.06em;text-transform:uppercase;text-shadow:0 0 6px #e8ff0066;font-weight:900}body[data-zine-mode] .VWh0dG_panelHint{color:#c9d98a;letter-spacing:.08em;text-transform:uppercase;font-size:10px;font-weight:900}body[data-zine-mode] .VWh0dG_modelTableScroll{background:#000;border:1.5px solid #e8ff0080;border-radius:0}.VWh0dG_currencyToggle{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:6px;align-items:center;gap:2px;margin-right:8px;padding:2px;display:inline-flex}.VWh0dG_currencyButton{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:4px;padding:4px 7px;font-size:11px;font-weight:700;line-height:1}.VWh0dG_currencyButtonActive{background:var(--dsw-alias-bg-layer-1);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(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:10px;padding:12px 14px}.VWh0dG_subscriptionHead{flex-wrap:wrap;align-items:baseline;gap:6px;margin-bottom:8px;display:flex}.VWh0dG_subscriptionName{font-size:13px;font-weight:700}.VWh0dG_subscriptionPlan{color:var(--dsw-alias-label-secondary);font-size:11px}.VWh0dG_subscriptionPlan[data-kind=code],.VWh0dG_subscriptionPlan[data-kind=token]{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-3);border-radius:999px;padding:1px 8px;font-weight:500}.VWh0dG_subscriptionTier{color:var(--dsw-alias-label-secondary);margin-left:6px}.VWh0dG_subscriptionAuto{color:var(--dsw-static-blue-500);background:color-mix(in srgb, var(--dsw-static-blue-500) 14%, var(--dsw-alias-bg-layer-2));border-radius:999px;margin-left:6px;padding:1px 6px;font-size:10px}.VWh0dG_subscriptionStatus{color:var(--dsw-alias-label-secondary);margin-bottom:6px;font-size:11px}.VWh0dG_subscriptionWindow{align-items:center;gap:8px;margin-top:6px;font-size:11px;display:flex}.VWh0dG_subscriptionWindowLabel{color:var(--dsw-alias-label-secondary);flex:0 0 44px}.VWh0dG_subscriptionTrack{background:var(--dsw-alias-bg-layer-3);border-radius:3px;flex:1;height:5px;overflow:hidden}.VWh0dG_subscriptionFill{background:var(--dsw-static-blue-500);border-radius:3px;height:100%;transition:width .2s;display:block}.VWh0dG_subscriptionFillWarn{background:var(--dsw-static-amber-500)}.VWh0dG_subscriptionFillOver{background:var(--dsw-static-red-500)}.VWh0dG_subscriptionPct{text-align:right;font-variant-numeric:tabular-nums;flex:none;min-width:52px}.VWh0dG_subscriptionExhausted{color:var(--dsw-static-red-500);min-width:52px;font-weight:600}.VWh0dG_subscriptionReset{color:var(--dsw-alias-label-secondary);flex:none}.VWh0dG_providerGroupList{flex-direction:column;gap:10px;display:flex}.VWh0dG_providerGroup{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:12px;padding:12px 14px}.VWh0dG_providerGroupHead{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.VWh0dG_providerGroupTitle{align-items:center;gap:7px;min-width:0;display:inline-flex}.VWh0dG_providerGroupName{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600;line-height:18px}.VWh0dG_providerGroupMeta{flex:none;align-items:center;gap:10px;display:inline-flex}.VWh0dG_providerGroupBadge{color:var(--dsw-static-green-500);background:var(--dsw-alias-bg-layer-2);border-radius:999px;align-items:center;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px;display:inline-flex}.VWh0dG_providerGroupBalance{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;white-space:nowrap;align-items:baseline;gap:6px;font-size:12px;line-height:17px;display:inline-flex}.VWh0dG_providerGroupBalanceLabel{color:var(--dsw-alias-label-caption);font-size:11px;line-height:17px}.VWh0dG_roundsFlagBadge{color:var(--dsw-static-neutral-bluish-00);background:var(--dsw-static-red-500);border-radius:999px;margin-left:8px;padding:1px 7px;font-size:10px;font-weight:800}.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(--dsw-static-amber-500) 16%, transparent)}.VWh0dG_roundsBarColOff{background:var(--dsw-alias-bg-module-platform)}.VWh0dG_roundsBarLabel{text-align:center;color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;max-width:100%;font-size:9px;line-height:1.2;position:absolute;bottom:0;left:0;right:0;overflow:hidden;transform:translateY(-100%)}.VWh0dG_roundsBarWrap{flex:1;align-items:flex-end;min-height:0;display:flex}.VWh0dG_roundsBar{background:var(--dsw-static-blue-500);border-radius:2px 2px 0 0;width:100%;min-height:2px;position:relative}.VWh0dG_roundsBarFlagged{background:var(--dsw-static-red-500);border-radius:2px 2px 0 0;width:100%;min-height:2px;position:relative}.VWh0dG_roundsFlagMark{background:var(--dsw-static-red-500);border-radius:50%;width:7px;height:7px;position:absolute;top:-3px;right:-3px}.VWh0dG_roundsAxis{color:var(--dsw-alias-label-secondary);justify-content:space-between;margin-top:6px;font-size:10px;display:flex}.VWh0dG_roundsEmpty{color:var(--dsw-alias-label-secondary);margin-top:10px;font-size:12px}.VWh0dG_heatmap{margin-top:10px}.VWh0dG_heatmapGrid{grid-template-columns:repeat(7,minmax(0,1fr));gap:8px;display:grid}.VWh0dG_heatmapCellEmpty{background:var(--dsw-alias-bg-layer-1);height:30px;color:var(--dsw-alias-label-dimmed);font-variant-numeric:tabular-nums;border-radius:8px;justify-content:center;align-items:center;font-size:11px;display:flex}.VWh0dG_heatmapCell{font-variant-numeric:tabular-nums;cursor:pointer;border:0;border-radius:8px;justify-content:center;align-items:center;height:30px;padding:0;font-size:11px;display:flex}.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:4px;width:14px;height:14px;display:block}.VWh0dG_heatmapHover{font-variant-numeric:tabular-nums;margin-left:auto}.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_pluginInfo{flex-direction:column;gap:8px;margin-top:10px;display:flex}.VWh0dG_pluginInfoRow{align-items:baseline;gap:12px;font-size:12px;display:flex}.VWh0dG_pluginInfoLabel{color:var(--dsw-alias-label-secondary);flex:0 0 72px}.VWh0dG_pluginInfoValue{color:var(--dsw-alias-label-primary);word-break:break-all}.VWh0dG_pluginInfoLink{color:var(--dsw-static-blue-500);word-break:break-all;text-decoration:none}.VWh0dG_pluginInfoLink: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(--dsw-static-blue-500)}.VWh0dG_tokenModelPartOut{background:var(--dsw-static-amber-500)}.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_peakAlert{z-index:2000;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:12px;align-items:center;gap:12px;min-width:300px;max-width:460px;padding:10px 12px;animation:.2s VWh0dG_peakAlertIn;display:flex;position:fixed;box-shadow:0 4px 16px #00000014}.VWh0dG_peakAlertCorner{bottom:18px;right:18px}.VWh0dG_peakAlertCenter{top:20%;left:50%;transform:translate(-50%)}.VWh0dG_peakAlertTag{letter-spacing:.01em;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-3);white-space:nowrap;border-radius:999px;flex:none;align-items:center;gap:6px;padding:3px 9px;font-size:11px;font-weight:650;display:inline-flex}.VWh0dG_peakAlertTag:before{content:\"\";background:currentColor;border-radius:50%;width:6px;height:6px}.VWh0dG_peakAlertPeak .VWh0dG_peakAlertTag{color:var(--dsw-static-amber-500)}.VWh0dG_peakAlertOff .VWh0dG_peakAlertTag{color:var(--dsw-static-blue-500)}.VWh0dG_peakAlertCountdown{font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-primary);flex:none;font-size:18px;font-weight:700;line-height:1}.VWh0dG_peakAlertText{min-width:0;color:var(--dsw-alias-label-secondary);flex:1;font-size:12px;line-height:18px}.VWh0dG_peakAlertClose{width:20px;height:20px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;justify-content:center;align-items:center;font-size:15px;line-height:1;transition:background-color .14s,color .14s;display:inline-flex}.VWh0dG_peakAlertClose:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2)}@keyframes VWh0dG_peakAlertIn{0%{opacity:0}to{opacity:1}}.VWh0dG_peakAlertPanel{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:16px;flex-direction:column;gap:10px;padding:14px 16px;display:flex}.VWh0dG_peakAlertPanelHead{justify-content:space-between;align-items:center;gap:10px;display:flex}.VWh0dG_peakAlertPanelLabel{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600}.VWh0dG_peakAlertPanelBody{flex-wrap:wrap;align-items:center;gap:12px 16px;display:flex}.VWh0dG_peakAlertField{color:var(--dsw-alias-label-secondary);align-items:center;gap:8px;font-size:12px;display:inline-flex}.VWh0dG_peakAlertNum{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);width:56px;color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;border-radius:6px;padding:4px 6px}.VWh0dG_peakAlertSelect{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);border-radius:6px;padding:4px 6px;font-size:12px}.VWh0dG_peakAlertCheck{color:var(--dsw-alias-label-secondary);align-items:center;gap:6px;font-size:12px;display:inline-flex}.VWh0dG_peakAlertPreview{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:6px;padding:5px 10px;font-size:12px}.VWh0dG_peakAlertPreview:hover{background:var(--dsw-alias-bg-layer-3)}.VWh0dG_settingsHead{flex-direction:column;gap:4px;margin-bottom:2px;display:flex}.VWh0dG_settingsTitle{letter-spacing:-.005em;color:var(--dsw-alias-label-primary);margin:0;font-size:15px;font-weight:650;line-height:22px}.VWh0dG_settingsHint{color:var(--dsw-alias-label-caption);margin:0;font-size:11px;line-height:16px}.VWh0dG_budgetHint,.VWh0dG_peakAlertHint{color:var(--dsw-alias-label-caption);margin:6px 0 0;font-size:11px;line-height:16px}";
27
+ const css = ".VWh0dG_railButton{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);width:36px;height:36px;color:var(--dsw-alias-label-secondary);cursor:pointer;border-radius:8px;flex:none;justify-content:center;align-items:center;padding:0;transition:border-color .16s,color .16s;display:flex}.VWh0dG_railButton:hover,.VWh0dG_railButton:focus-visible{border-color:var(--dsw-static-blue-500);color:var(--dsw-static-blue-500);outline:none}.VWh0dG_railButton svg{stroke-width:2px;width:18px;height:18px}.VWh0dG_trigger{border:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 82%, transparent);background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 78%, transparent);-webkit-backdrop-filter:blur(10px)saturate(1.2);width:100%;min-width:0;box-shadow:inset 0 1px 0 color-mix(in srgb, var(--dsw-alias-label-primary) 7%, transparent);color:var(--dsw-alias-label-primary);cursor:pointer;text-align:left;border-radius:14px;align-items:center;gap:10px;padding:9px 12px;transition:border-color .16s,transform .16s,box-shadow .16s;display:flex;position:relative;overflow:hidden}.VWh0dG_trigger:hover,.VWh0dG_trigger:focus-visible{border-color:var(--dsw-static-blue-500);box-shadow:inset 0 1px 0 color-mix(in srgb, var(--dsw-alias-label-primary) 10%, transparent), 0 6px 18px -6px color-mix(in srgb, var(--dsw-static-blue-500) 45%, transparent);outline:none;transform:translateY(-1px)}.VWh0dG_triggerIcon{background:linear-gradient(135deg, var(--dsw-static-blue-500), var(--dsw-static-blue-400));width:30px;height:30px;color:var(--dsw-static-neutral-bluish-00);box-shadow:0 3px 10px -3px color-mix(in srgb, var(--dsw-static-blue-500) 60%, transparent), inset 0 1px 0 color-mix(in srgb, var(--dsw-static-neutral-bluish-00) 22%, transparent);border-radius:10px;flex:none;justify-content:center;align-items:center;display:inline-flex}.VWh0dG_triggerIcon svg{stroke-width:2px;width:16px;height:16px}.VWh0dG_triggerBody{flex-direction:column;flex:1;gap:1px;min-width:0;display:flex}.VWh0dG_triggerRow{align-items:baseline;gap:5px;min-width:0;display:inline-flex}.VWh0dG_triggerAmount{color:var(--dsw-alias-label-primary);letter-spacing:-.02em;font-variant-numeric:tabular-nums;white-space:nowrap;font-size:17px;font-weight:700;line-height:21px}.VWh0dG_triggerSub{color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;font-size:10px;line-height:14px;overflow:hidden}.VWh0dG_triggerMeta{color:var(--dsw-alias-label-tertiary);white-space:nowrap;letter-spacing:.02em;text-transform:uppercase;font-size:9.5px;font-weight:600;line-height:12px}.VWh0dG_triggerSpark{flex:none;align-items:flex-end;gap:2px;height:20px;display:flex}.VWh0dG_triggerSparkBar,.VWh0dG_triggerSparkHot{background:var(--dsw-static-blue-500);opacity:.6;border-radius:1px 1px 0 0;width:3px}.VWh0dG_triggerSparkHot{opacity:1}.VWh0dG_triggerWrap{flex:auto;width:100%;min-width:0;display:block;position:relative}.VWh0dG_triggerPop{border:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 80%, transparent);background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 72%, transparent);-webkit-backdrop-filter:blur(14px)saturate(1.3);box-shadow:0 12px 32px #00000029, inset 0 1px 0 color-mix(in srgb, var(--dsw-alias-label-primary) 8%, transparent);opacity:0;pointer-events:none;z-index:10;border-radius:14px;flex-direction:column;gap:5px;padding:10px 12px;transition:opacity .16s,transform .16s;display:flex;position:absolute;bottom:calc(100% + 8px);left:0;right:0;overflow:hidden;transform:translateY(4px)}.VWh0dG_triggerPop:before{content:\"\";background:linear-gradient(90deg, transparent 0%, var(--dsw-static-amber-500) 30%, var(--dsw-alias-label-primary) 50%, var(--dsw-static-amber-500) 70%, transparent 100%);opacity:.9;pointer-events:none;background-size:200% 100%;height:1.5px;animation:4s ease-in-out infinite VWh0dG_subscriptionGoldFlow;position:absolute;top:0;left:0;right:0}.VWh0dG_triggerWrap:hover .VWh0dG_triggerPop,.VWh0dG_triggerWrap:focus-within .VWh0dG_triggerPop{opacity:1;transform:translateY(0)}.VWh0dG_triggerPopRow{white-space:nowrap;justify-content:space-between;align-items:baseline;gap:12px;display:flex}.VWh0dG_triggerPopLabel{letter-spacing:.01em;color:var(--dsw-alias-label-tertiary);white-space:nowrap;flex:none;font-size:10.5px;line-height:16px}.VWh0dG_triggerPopValue{min-width:0;color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;justify-content:flex-end;align-items:baseline;gap:8px;font-size:12.5px;font-weight:600;line-height:17px;display:inline-flex}.VWh0dG_triggerPopName{text-overflow:ellipsis;white-space:nowrap;max-width:110px;color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:500;overflow:hidden}.VWh0dG_triggerPopTitle{color:var(--dsw-alias-label-primary);white-space:nowrap;align-items:baseline;gap:8px;font-size:12px;font-weight:700;display:flex}.VWh0dG_triggerPopTitleMonth{color:var(--dsw-alias-label-tertiary);font-size:11px;font-weight:500}.VWh0dG_triggerPopStrong{color:var(--dsw-alias-label-primary);margin-left:8px;font-size:12.5px;font-weight:700}.VWh0dG_triggerPopAlert{color:var(--dsw-static-red-500);white-space:nowrap;font-size:11px;line-height:16px}.VWh0dG_triggerPopValueStack{flex-direction:column;align-items:flex-end;gap:2px;display:flex}.VWh0dG_triggerPopMuted{color:var(--dsw-alias-label-tertiary);font-weight:500}.VWh0dG_triggerPopHead{justify-content:space-between;align-items:baseline;gap:10px;display:flex}.VWh0dG_triggerPopUpdated{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-size:10px}.VWh0dG_triggerPopMetrics{grid-template-columns:1fr 1fr;gap:7px 12px;display:grid}.VWh0dG_triggerPopMetric{flex-direction:column;align-items:flex-start;gap:1px;display:flex}.VWh0dG_triggerPopMetricLabel{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-size:10px}.VWh0dG_triggerPopMetricValue{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:14px;font-weight:700;line-height:18px}.VWh0dG_triggerPopMetricHighlight{color:var(--dsw-static-amber-500)}.VWh0dG_triggerPopFoot{border-top:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 70%, transparent);flex-direction:column;gap:4px;padding-top:6px;display:flex}.VWh0dG_triggerPopFootTitle{text-align:center;letter-spacing:.05em;color:var(--dsw-alias-label-tertiary);border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 70%, transparent);padding-bottom:4px;font-size:10px;font-weight:600}.VWh0dG_triggerPopFootNotes{flex-direction:column;gap:1px;min-width:0;display:flex}.VWh0dG_triggerPopFootNote{align-items:baseline;gap:4px;min-width:0;display:flex}.VWh0dG_triggerPopFootName{color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;font-size:10px;overflow:hidden}.VWh0dG_triggerPopBadge{white-space:nowrap;border-radius:5px;flex:none;padding:1px 6px;font-size:9.5px;font-weight:600;line-height:14px}.VWh0dG_triggerPopBadgeDirect{background:color-mix(in srgb, var(--dsw-alias-label-primary) 12%, transparent);color:var(--dsw-alias-label-primary)}.VWh0dG_triggerPopBadgeSub{background:color-mix(in srgb, var(--dsw-static-amber-500) 18%, transparent);color:var(--dsw-static-amber-500)}.VWh0dG_triggerPopFootStrong{color:var(--dsw-alias-label-secondary);font-weight:600}.VWh0dG_triggerPopFootStatus{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:14px;font-weight:700;line-height:18px}.VWh0dG_triggerPopFootStatusLow{color:var(--dsw-static-red-500)}.VWh0dG_triggerPopOpenBtn{pointer-events:auto;border:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 80%, transparent);color:var(--dsw-alias-label-primary);background:color-mix(in srgb, var(--dsw-alias-bg-layer-3) 70%, transparent);cursor:pointer;border-radius:999px;flex:none;padding:5px 11px;font-size:11px;font-weight:600;transition:border-color .16s,background-color .16s}.VWh0dG_triggerPopOpenBtn:hover{border-color:var(--dsw-static-blue-500);background:color-mix(in srgb, var(--dsw-static-blue-500) 12%, var(--dsw-alias-bg-layer-3))}.VWh0dG_triggerPopBars{border-top:1px solid var(--dsw-alias-border-l1);align-items:flex-end;gap:4px;height:22px;margin-top:4px;padding-top:8px;display:flex}.VWh0dG_triggerPopBar{background:var(--dsw-static-blue-500);border-radius:2px;flex:1;transition:height .2s}.VWh0dG_dashboardModal{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);width:min(760px,100vw - 48px);max-height:min(760px,88vh);box-shadow:var(--dsw-shadow-lv3);animation:.18s ease-out VWh0dG_dashboardIn}@keyframes VWh0dG_dashboardIn{0%{opacity:0;transform:translateY(8px)scale(.98)}to{opacity:1;transform:none}}div[role=presentation]:has(>.dsh-billing-modal)>div[aria-hidden=true]:first-child{backdrop-filter:blur(8px)saturate(1.25)}.VWh0dG_dashboard{flex-direction:column;width:100%;max-height:min(760px,88vh);display:flex}.VWh0dG_dashboardHead{border-bottom:1px solid var(--dsw-alias-border-l1);justify-content:space-between;align-items:flex-start;gap:12px;padding:20px 24px 14px;display:flex}.VWh0dG_dashboardTitle{color:var(--dsw-alias-label-primary);margin:0;font-size:17px;font-weight:600;line-height:24px}.VWh0dG_dashboardSubtitle{color:var(--dsw-alias-label-caption);margin:3px 0 0;font-size:12px;line-height:17px}.VWh0dG_closeButton{width:30px;height:30px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:8px;flex:none;justify-content:center;align-items:center;transition:background-color .14s;display:inline-flex}.VWh0dG_closeButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.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_tabNav{border-bottom:1px solid var(--dsw-alias-border-l1);align-items:center;gap:4px;padding:10px 24px;display:flex}.VWh0dG_tabButton{color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:999px;padding:5px 14px;font-size:12.5px;font-weight:500;line-height:18px;transition:background-color .16s,color .16s,box-shadow .16s}.VWh0dG_tabButton:hover,.VWh0dG_tabButton:focus-visible{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover);outline:none}.VWh0dG_tabButtonActive,.VWh0dG_tabButtonActive:hover,.VWh0dG_tabButtonActive:focus-visible{background:var(--dsw-static-blue-500);color:var(--dsw-static-neutral-bluish-00);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_hero{border:1px solid var(--dsw-alias-border-l1);background:linear-gradient(180deg, var(--dsw-alias-bg-layer-2), var(--dsw-alias-bg-layer-1));box-shadow:inset 0 1px 0 color-mix(in srgb, var(--dsw-static-neutral-bluish-00) 30%, transparent);border-radius:16px;flex-direction:column;gap:18px;padding:22px 24px;display:flex;position:relative;overflow:hidden}.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(--dsw-alias-label-tertiary);text-transform:uppercase;letter-spacing:.08em;white-space:nowrap;font-size:11px;line-height:16px}.VWh0dG_heroReadout{align-items:baseline;gap:4px;display:flex}.VWh0dG_heroCurrency{letter-spacing:-.01em;color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;font-size:20px;font-weight:600;line-height:30px}.VWh0dG_heroValue{letter-spacing:-.03em;font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--dsw-alias-label-primary);font-size:56px;font-weight:700;line-height:64px}.VWh0dG_heroMeta{color:var(--dsw-alias-label-caption);white-space:nowrap;margin-top:4px;font-size:12px;line-height:17px}.VWh0dG_heroGauge{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(--dsw-alias-bg-module-platform);stroke-width:9px}.VWh0dG_heroGaugeArc{fill:none;stroke:var(--dsw-static-blue-500);stroke-width:9px;stroke-linecap:round;transition:stroke-dasharray .26s}.VWh0dG_heroGaugeArcOver{stroke:var(--dsw-static-red-500)}.VWh0dG_heroGaugeCenter{flex-direction:column;justify-content:center;align-items:center;gap:1px;display:flex;position:absolute;inset:0}.VWh0dG_heroGaugePct{letter-spacing:-.02em;font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-primary);font-size:18px;font-weight:700;line-height:22px}.VWh0dG_heroGaugePctOver{color:var(--dsw-static-red-500)}.VWh0dG_heroGaugeLabel{color:var(--dsw-alias-label-tertiary);font-size:10px;line-height:14px}.VWh0dG_heroSide{border-top:1px solid var(--dsw-alias-border-l1);align-items:stretch;padding-top:14px;display:flex}.VWh0dG_heroSideItem{flex-direction:column;flex:1;gap:3px;min-width:0;padding-left:16px;display:flex}.VWh0dG_heroSideItem:first-child{padding-left:0}.VWh0dG_heroSideLabel{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-size:11px;line-height:15px}.VWh0dG_heroSideValue{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;letter-spacing:-.01em;white-space:nowrap;align-items:baseline;gap:6px;font-size:18px;font-weight:600;line-height:24px;display:inline-flex}.VWh0dG_heroSideSpacer{flex:1;display:block}.VWh0dG_delta{align-items:center;gap:2px;margin-left:4px;font-size:11px;font-weight:600;line-height:17px;display:inline-flex}.VWh0dG_deltaUp{color:var(--dsw-static-green-500)}.VWh0dG_deltaDown{color:var(--dsw-static-red-500)}.VWh0dG_kpiGrid{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;display:grid}.VWh0dG_kpiTile{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:14px;flex-direction:column;gap:3px;padding:14px 15px;transition:border-color .16s;display:flex;position:relative;overflow:hidden}.VWh0dG_kpiTile:hover{border-color:var(--dsw-alias-border-l2)}.VWh0dG_kpiLabel{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:15px}.VWh0dG_kpiValue{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;letter-spacing:-.01em;font-size:22px;font-weight:600;line-height:28px}.VWh0dG_kpiGreen{color:var(--dsw-static-green-500)}.VWh0dG_kpiDetail{color:var(--dsw-alias-label-caption);white-space:nowrap;text-overflow:ellipsis;font-size:11px;line-height:15px;overflow:hidden}.VWh0dG_panel{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:16px;flex-direction:column;gap:10px;padding:16px 18px;transition:border-color .16s;display:flex}.VWh0dG_panelHead{justify-content:space-between;align-items:baseline;gap:10px;display:flex}.VWh0dG_panelTitle{letter-spacing:-.005em;color:var(--dsw-alias-label-primary);margin:0;font-size:14px;font-weight:600;line-height:20px}.VWh0dG_panelHint{color:var(--dsw-alias-label-caption);white-space:nowrap;font-size:11px;line-height:16px}.VWh0dG_pricingTip{color:var(--dsw-alias-label-caption);margin:0 0 2px;font-size:11px;line-height:16px}.VWh0dG_rangeToggle{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:8px;gap:2px;padding:2px;display:inline-flex}.VWh0dG_rangeButton{color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:6px;padding:2px 8px;font-size:11px;line-height:16px;transition:background-color .14s,color .14s}.VWh0dG_rangeButtonActive{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);font-weight:600}.VWh0dG_exportBar{justify-content:flex-end;align-items:center;gap:8px;display:flex}.VWh0dG_exportLabel{color:var(--dsw-alias-label-caption);font-size:11px;line-height:16px}.VWh0dG_exportButton{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-secondary);cursor:pointer;border-radius:999px;padding:4px 12px;font-size:11.5px;line-height:16px;transition:border-color .16s,color .16s,background-color .16s}.VWh0dG_exportButton:hover,.VWh0dG_exportButton:focus-visible{border-color:var(--dsw-alias-border-l2);color:var(--dsw-alias-label-primary);outline:none}.VWh0dG_shareTrack{background:var(--dsw-alias-bg-module-platform);border-radius:999px;height:10px;display:flex;overflow:hidden}.VWh0dG_shareSeg{height:100%;transition:width .2s}.VWh0dG_shareSegPeak{background:var(--dsw-static-blue-500)}.VWh0dG_shareSegOff{background:color-mix(in srgb, var(--dsw-static-blue-500) 25%, var(--dsw-alias-bg-module-platform))}.VWh0dG_shareSegUser{background:var(--dsw-static-blue-500)}.VWh0dG_shareSegAssistant{background:var(--dsw-static-green-500)}.VWh0dG_shareSegTool{background:var(--dsw-static-amber-500)}.VWh0dG_shareLegend{align-items:center;gap:16px;display:flex}.VWh0dG_shareItem{color:var(--dsw-alias-label-secondary);align-items:baseline;gap:6px;font-size:12px;line-height:17px;display:inline-flex}.VWh0dG_bucketCost{align-items:baseline;gap:3px;display:inline-flex}.VWh0dG_bucketOfficial{color:var(--dsw-static-blue-500);font-weight:600}.VWh0dG_bucketSep{color:var(--dsw-alias-label-dimmed)}.VWh0dG_bucketThird{color:var(--dsw-alias-label-secondary)}.VWh0dG_bucketSummary{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;display:grid}.VWh0dG_bucketStat{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:12px;flex-direction:column;gap:4px;padding:12px 14px;display:flex}.VWh0dG_bucketStatLabel{color:var(--dsw-alias-label-tertiary);text-transform:uppercase;letter-spacing:.05em;font-size:11px;line-height:15px}.VWh0dG_bucketStatValue{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;letter-spacing:-.01em;font-size:20px;font-weight:700;line-height:26px}.VWh0dG_bucketStatSub{color:var(--dsw-alias-label-caption);font-variant-numeric:tabular-nums;font-size:11px;line-height:16px}.VWh0dG_shareDot{border-radius:50%;flex:none;align-self:center;width:8px;height:8px}.VWh0dG_shareValue{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-weight:600}.VWh0dG_budget{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:14px;flex-direction:column;gap:8px;padding:12px 16px;display:flex}.VWh0dG_budgetHead{justify-content:space-between;align-items:baseline;gap:10px;display:flex}.VWh0dG_budgetLabel{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:17px}.VWh0dG_budgetValue{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:12px;line-height:17px}.VWh0dG_budgetControls{align-items:center;gap:8px;min-width:0;display:inline-flex}.VWh0dG_budgetInputWrap{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:6px;align-items:center;gap:2px;padding:2px 6px;display:inline-flex}.VWh0dG_budgetInputWrap:focus-within{border-color:var(--dsw-alias-border-l3)}.VWh0dG_budgetUnit{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.VWh0dG_budgetInput{width:64px;color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;text-align:right;background:0 0;border:none;padding:0;font-size:12px;line-height:16px}.VWh0dG_budgetInput:focus-visible{outline:none}.VWh0dG_switch{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-module-platform);cursor:pointer;border-radius:999px;flex:none;width:30px;height:17px;padding:0;transition:background-color .16s,border-color .16s;position:relative}.VWh0dG_switchOn{border-color:var(--dsw-alias-border-l1);background:var(--dsw-alias-label-primary)}.VWh0dG_switchKnob{background:var(--dsw-static-neutral-bluish-00);border-radius:50%;width:11px;height:11px;transition:transform .16s;position:absolute;top:2px;left:2px}.VWh0dG_switchOn .VWh0dG_switchKnob{transform:translate(13px)}.VWh0dG_budgetTrack{background:var(--dsw-alias-bg-module-platform);border-radius:999px;height:6px;overflow:hidden}.VWh0dG_budgetFill{background:var(--dsw-static-blue-500);border-radius:999px;height:100%;transition:width .2s}.VWh0dG_budgetFillWarn{background:var(--dsw-static-amber-500)}.VWh0dG_budgetFillOver{background:var(--dsw-static-red-500);animation:1.6s ease-in-out infinite VWh0dG_budgetOverPulse}@keyframes VWh0dG_budgetOverPulse{50%{opacity:.55}}.VWh0dG_chartWrap{width:100%;position:relative}.VWh0dG_chartSvg{width:100%;height:auto;display:block}.VWh0dG_chartEmpty{height:140px;color:var(--dsw-alias-label-caption);justify-content:center;align-items:center;font-size:13px;display:flex}.VWh0dG_emptyRow{text-align:center;color:var(--dsw-alias-label-caption);padding:28px 0;font-size:13px}.VWh0dG_chartGrid{stroke:var(--dsw-alias-border-l1);stroke-width:1px}.VWh0dG_chartAxisLabel{fill:var(--dsw-alias-label-tertiary);font-size:10px}.VWh0dG_chartBar{fill:var(--dsw-static-blue-500);opacity:.7}.VWh0dG_chartBar:hover{opacity:1}.VWh0dG_chartStack{stroke:var(--dsw-alias-bg-layer-1);stroke-width:.75px}.VWh0dG_chartStack:hover{opacity:.9}.VWh0dG_chartLine{stroke:var(--dsw-static-blue-500);stroke-width:2px;stroke-linecap:round;stroke-linejoin:round}.VWh0dG_chartCrosshair{stroke:var(--dsw-alias-label-dimmed);stroke-width:1px;stroke-dasharray:3 3}.VWh0dG_chartDot{fill:var(--dsw-static-neutral-bluish-00);stroke:var(--dsw-static-blue-500);stroke-width:2px}.VWh0dG_chartTooltip{pointer-events:none;z-index:2;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);box-shadow:none;white-space:nowrap;border-radius:8px;padding:8px 10px;position:absolute;transform:translate(-50%,calc(-100% - 10px))}.VWh0dG_chartTooltipDate{color:var(--dsw-alias-label-primary);margin-bottom:3px;font-size:11px;font-weight:600}.VWh0dG_chartTooltipRow{color:var(--dsw-alias-label-secondary);align-items:center;gap:5px;font-size:11px;line-height:17px;display:flex}.VWh0dG_chartTooltipRow strong{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-weight:600}.VWh0dG_chartLegendLine{background:var(--dsw-static-blue-500);border-radius:2px;width:10px;height:3px;display:inline-block}.VWh0dG_chartLegendBar{background:var(--dsw-static-blue-500);opacity:.5;border-radius:2px;width:7px;height:7px;display:inline-block}.VWh0dG_chartTooltipSwatch{border-radius:3px;flex:none;width:8px;height:8px;display:inline-block}.VWh0dG_chartLegend{color:var(--dsw-alias-label-tertiary);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_tableScroll{border:1px solid var(--dsw-alias-border-l1);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);border-radius:12px;overflow:auto}.VWh0dG_modelTable,.VWh0dG_pricingTable{border-collapse:collapse;width:100%;font-size:12.5px}.VWh0dG_modelTable th,.VWh0dG_modelTable td,.VWh0dG_pricingTable th,.VWh0dG_pricingTable td{border-bottom:1px solid var(--dsw-alias-border-l1);text-align:left;white-space:nowrap;padding:9px 12px}.VWh0dG_modelTable tbody tr:last-child td,.VWh0dG_pricingTable tbody tr:last-child td{border-bottom:0}.VWh0dG_modelTable thead th,.VWh0dG_pricingTable thead th{color:var(--dsw-alias-label-tertiary);text-transform:uppercase;letter-spacing:.05em;background:0 0;font-size:11px;font-weight:600}.VWh0dG_modelTable tbody tr,.VWh0dG_pricingTable tbody tr{transition:background-color .12s}.VWh0dG_modelTable tbody tr:hover,.VWh0dG_pricingTable tbody tr:hover{background:0 0}.VWh0dG_numCol{text-align:right;font-variant-numeric:tabular-nums}.VWh0dG_costCol{color:var(--dsw-alias-label-primary);font-weight:600}.VWh0dG_na{color:var(--dsw-alias-label-dimmed)}.VWh0dG_modelCell{align-items:center;gap:8px;display:inline-flex}.VWh0dG_modelDot{border-radius:50%;flex:none;width:9px;height:9px}.VWh0dG_modelName{color:var(--dsw-alias-label-primary);font-weight:500;line-height:16px;display:block}.VWh0dG_modelProvider{color:var(--dsw-alias-label-caption);font-size:10.5px;line-height:14px;display:block}.VWh0dG_pricingToggle{cursor:pointer;text-align:left;background:0 0;border:none;justify-content:space-between;align-items:center;gap:10px;width:100%;padding:0;display:flex}.VWh0dG_pricingToggle:hover .VWh0dG_panelTitle,.VWh0dG_pricingToggle:focus-visible .VWh0dG_panelTitle{color:var(--dsw-alias-label-primary)}.VWh0dG_rateBadge{vertical-align:1px;white-space:nowrap;border-radius:999px;align-items:center;margin-left:6px;padding:1px 6px;font-size:10px;font-weight:500;line-height:14px;display:inline-flex}.VWh0dG_rateBadgeLive{color:var(--dsw-static-green-500);background:var(--dsw-alias-bg-layer-2)}.VWh0dG_siteRow{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:10px;justify-content:space-between;align-items:center;gap:12px;padding:8px 10px;display:flex}.VWh0dG_siteRowName{align-items:center;gap:8px;min-width:0;display:inline-flex}.VWh0dG_siteKindTag{white-space:nowrap;border-radius:999px;flex:none;align-items:center;padding:1px 7px;font-size:10.5px;font-weight:600;line-height:16px;display:inline-flex}.VWh0dG_siteKindSite{color:var(--dsw-static-blue-500);background:color-mix(in srgb, var(--dsw-static-blue-500) 14%, transparent)}.VWh0dG_siteKindDirect{color:var(--dsw-static-green-500);background:color-mix(in srgb, var(--dsw-static-green-500) 14%, transparent)}.VWh0dG_siteKindUnknown{color:var(--dsw-static-red-500);background:color-mix(in srgb, var(--dsw-static-red-500) 14%, transparent)}.VWh0dG_siteRowTitle{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;font-weight:600;line-height:18px;overflow:hidden}.VWh0dG_siteRowMeta{flex:none;align-items:center;gap:10px;display:inline-flex}.VWh0dG_siteRowCost{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-size:12.5px;font-weight:700;line-height:18px}.VWh0dG_siteRowCalls{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;font-size:11.5px;line-height:17px}.VWh0dG_rateBadgeBuiltin{color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-bg-layer-2)}.VWh0dG_pricingToggleText{align-items:baseline;gap:10px;min-width:0;display:flex}.VWh0dG_pricingChevron{width:16px;height:16px;color:var(--dsw-alias-label-tertiary);flex:none;transition:transform .16s}.VWh0dG_pricingChevronOpen{transform:rotate(180deg)}.VWh0dG_bandPrice{align-items:baseline;gap:6px;display:inline-flex}.VWh0dG_bandPriceOff{color:var(--dsw-alias-label-caption)}.VWh0dG_bandPriceOff:before{content:\"/\";color:var(--dsw-alias-label-dimmed);margin-right:4px}.VWh0dG_bandTag{color:var(--dsw-alias-label-secondary);flex-direction:column;gap:1px;font-size:10.5px;line-height:14px;display:inline-flex}.VWh0dG_bandTagOff{color:var(--dsw-static-green-500);font-weight:600}.VWh0dG_bandTag>span:first-child{color:var(--dsw-alias-label-primary);font-weight:500}.VWh0dG_flatTag{color:var(--dsw-alias-label-caption);font-size:10.5px;line-height:14px}.VWh0dG_healthDot{border-radius:50%;flex:none;width:8px;height:8px;display:inline-block}.VWh0dG_healthOk{background:var(--dsw-static-green-500)}.VWh0dG_healthBad{background:var(--dsw-static-red-500)}.VWh0dG_healthIdle{background:var(--dsw-static-neutral-bluish-400)}.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(--dsw-static-green-500);background:var(--dsw-alias-bg-layer-2)}.VWh0dG_healthBadgeBad{color:var(--dsw-static-red-500);background:var(--dsw-alias-bg-layer-2)}.VWh0dG_planTag{color:var(--dsw-static-green-500);background:var(--dsw-alias-bg-layer-2);border-radius:999px;align-items:center;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px;display:inline-flex}.VWh0dG_uncataloguedTag{vertical-align:1px;color:var(--dsw-static-amber-500);background:var(--dsw-alias-bg-layer-2);border-radius:999px;margin-left:6px;padding:0 6px;font-size:10px;font-weight:600;line-height:16px;display:inline-block}.VWh0dG_estimatedTag{vertical-align:1px;color:var(--dsw-static-blue-500);background:var(--dsw-alias-bg-layer-2);border-radius:999px;margin-left:6px;padding:0 6px;font-size:10px;font-weight:600;line-height:16px;display:inline-block}.VWh0dG_liveCostBar{color:var(--dsw-static-neutral-400);font-variant-numeric:tabular-nums;align-items:center;gap:6px;font-size:11px;line-height:16px;display:inline-flex}.VWh0dG_liveCostItem{white-space:nowrap}.VWh0dG_liveCostSep{color:var(--dsw-static-neutral-300)}.VWh0dG_liveTierPeak{color:var(--dsw-static-blue-500);font-weight:600}.VWh0dG_liveTierOff{color:var(--dsw-static-green-500);font-weight:600}.VWh0dG_liveQuotaWarn{color:var(--dsw-static-amber-500);font-weight:600}.VWh0dG_liveQuotaCrit{color:var(--dsw-static-red-500);font-weight:600}.VWh0dG_balanceCell{align-items:center;gap:6px;display:inline-flex;position:relative}.VWh0dG_balanceDays{color:var(--dsw-alias-label-caption);white-space:nowrap;font-size:10.5px;line-height:14px}.VWh0dG_balanceDaysLow{color:var(--dsw-static-red-500);font-weight:600}.VWh0dG_balanceDaysBadge{border:1px solid var(--dsw-alias-label-caption);background:color-mix(in srgb, var(--dsw-alias-label-caption) 10%, transparent);min-width:24px;height:24px;color:var(--dsw-alias-label-secondary);cursor:pointer;border-radius:12px;justify-content:center;align-items:center;padding:0 6px;font-size:10.5px;font-weight:600;line-height:1;display:inline-flex}.VWh0dG_balanceDaysBadge:hover{border-color:var(--dsw-alias-label-secondary);background:color-mix(in srgb, var(--dsw-alias-label-caption) 18%, transparent)}.VWh0dG_balanceDaysBadgeLow{color:var(--dsw-static-red-500);border-color:var(--dsw-static-red-500);background:color-mix(in srgb, var(--dsw-static-red-500) 10%, transparent)}.VWh0dG_balanceDetailPop{z-index:20;background:var(--dsw-alias-bg-layer-3);border:1px solid var(--dsw-alias-label-caption);white-space:nowrap;border-radius:8px;flex-direction:column;gap:6px;min-width:180px;padding:8px 10px;display:inline-flex;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 6px 20px #0000002e}.VWh0dG_balanceDetailHead{justify-content:space-between;align-items:center;gap:12px;display:flex}.VWh0dG_balanceDetailTitle{color:var(--dsw-alias-label-primary);font-size:12px;font-weight:600}.VWh0dG_balanceDetailClose{cursor:pointer;color:var(--dsw-alias-label-caption);background:0 0;border:none;font-size:14px;line-height:1}.VWh0dG_balanceDetailClose:hover{color:var(--dsw-alias-label-primary)}.VWh0dG_balanceDetailGrid{flex-direction:column;gap:4px;display:inline-flex}.VWh0dG_balanceDetailRow{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;justify-content:space-between;gap:16px;font-size:11px;line-height:15px;display:flex}.VWh0dG_balanceDetailLabel{color:var(--dsw-alias-label-caption)}.VWh0dG_balanceDetailValue{color:var(--dsw-alias-label-primary);font-weight:500}body[data-zine-mode] .VWh0dG_trigger,body[data-zine-mode] .VWh0dG_triggerPop,body[data-zine-mode] .VWh0dG_railButton{display:none}body[data-zine-mode] .VWh0dG_dashboardHead{background:#000;border-bottom:2px solid #e8ff00}body[data-zine-mode] .VWh0dG_headTitleRow{align-items:center;gap:8px;margin-top:4px;display:flex}body[data-zine-mode] .VWh0dG_dashboardTitle{color:#e8ff00;letter-spacing:.04em;text-transform:uppercase;text-shadow:0 0 8px #e8ff0066;font-weight:900}body[data-zine-mode] .VWh0dG_dashboardSubtitle{color:#c9d98a;letter-spacing:.08em;text-transform:uppercase;font-size:10px}body[data-zine-mode] .VWh0dG_closeButton{color:#0a0a05;background:#ff2d95;border:1.5px solid #ff2d95;border-radius:0;box-shadow:0 0 10px #ff2d9573}body[data-zine-mode] .VWh0dG_hero{background:#000;border:2.5px solid #e8ff00;border-radius:0;position:relative;box-shadow:0 0 0 1px #0009,0 0 24px #e8ff002e}body[data-zine-mode] .VWh0dG_heroLabel{color:#c9d98a;letter-spacing:.12em;text-transform:uppercase;font-size:10px;font-weight:900}body[data-zine-mode] .VWh0dG_heroValue{color:#e8ff00;letter-spacing:-.02em;text-shadow:0 0 12px #e8ff0073;-webkit-text-fill-color:#e8ff00;background:0 0;font-size:38px;font-weight:900}body[data-zine-mode] .VWh0dG_heroMeta{color:#c9d98a;letter-spacing:.06em;text-transform:uppercase;font-size:10.5px}body[data-zine-mode] .VWh0dG_heroSideLabel{color:#c9d98a;letter-spacing:.1em;text-transform:uppercase;font-size:10px;font-weight:900}body[data-zine-mode] .VWh0dG_heroSideValue{color:#e8ff00;text-shadow:0 0 6px #e8ff0059}body[data-zine-mode] .VWh0dG_delta{font-weight:900}body[data-zine-mode] .VWh0dG_deltaUp{color:#ff2d95}body[data-zine-mode] .VWh0dG_deltaDown{color:#c9d98a}body[data-zine-mode] .VWh0dG_tabNav{background:#000;border-bottom:2px solid #e8ff00}body[data-zine-mode] .VWh0dG_tabButton{color:#c9d98a;letter-spacing:.08em;text-transform:uppercase;border-radius:0;font-size:10.5px;font-weight:900}body[data-zine-mode] .VWh0dG_tabButton:hover,body[data-zine-mode] .VWh0dG_tabButton:focus-visible{color:#e8ff00;background:#e8ff001f}body[data-zine-mode] .VWh0dG_tabButtonActive,body[data-zine-mode] .VWh0dG_tabButtonActive:hover,body[data-zine-mode] .VWh0dG_tabButtonActive:focus-visible{color:#0a0a05;background:#e8ff00;box-shadow:0 0 10px #e8ff0073}body[data-zine-mode] .VWh0dG_panel{background:#000;border:2px solid #e8ff00;border-radius:0}body[data-zine-mode] .VWh0dG_trendPanel{position:relative}body[data-zine-mode] .VWh0dG_panelTitle{color:#e8ff00;letter-spacing:.06em;text-transform:uppercase;text-shadow:0 0 6px #e8ff0066;font-weight:900}body[data-zine-mode] .VWh0dG_panelHint{color:#c9d98a;letter-spacing:.08em;text-transform:uppercase;font-size:10px;font-weight:900}body[data-zine-mode] .VWh0dG_modelTableScroll{background:#000;border:1.5px solid #e8ff0080;border-radius:0}.VWh0dG_currencyToggle{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:6px;align-items:center;gap:2px;margin-right:8px;padding:2px;display:inline-flex}.VWh0dG_currencyButton{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:4px;padding:4px 7px;font-size:11px;font-weight:700;line-height:1}.VWh0dG_currencyButtonActive{background:var(--dsw-alias-bg-layer-1);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 color-mix(in srgb, var(--dsw-alias-border-l1) 75%, transparent);background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 62%, transparent);-webkit-backdrop-filter:blur(12px)saturate(1.3);border-radius:12px;padding:12px 14px;transition:border-color .2s,box-shadow .2s;position:relative;overflow:hidden;box-shadow:0 8px 24px #0000001a}.VWh0dG_subscriptionCard:before{content:\"\";background:linear-gradient(90deg, transparent 0%, var(--dsw-static-amber-500) 30%, var(--dsw-alias-label-primary) 50%, var(--dsw-static-amber-500) 70%, transparent 100%);opacity:.9;pointer-events:none;background-size:200% 100%;height:1.5px;animation:3.6s ease-in-out infinite VWh0dG_subscriptionGoldFlow;position:absolute;top:0;left:0;right:0}@keyframes VWh0dG_subscriptionGoldFlow{0%{background-position:200% 0}to{background-position:-200% 0}}.VWh0dG_subscriptionCard:hover{border-color:color-mix(in srgb, var(--dsw-static-amber-500) 55%, var(--dsw-alias-border-l1));box-shadow:0 10px 30px #00000029}.VWh0dG_subscriptionHead{flex-wrap:wrap;align-items:baseline;gap:6px;margin-bottom:8px;display:flex}.VWh0dG_subscriptionName{font-size:13px;font-weight:700}.VWh0dG_subscriptionPlan{color:var(--dsw-alias-label-secondary);font-size:11px}.VWh0dG_subscriptionPlan[data-kind=code],.VWh0dG_subscriptionPlan[data-kind=token]{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-3);border-radius:999px;padding:1px 8px;font-weight:500}.VWh0dG_subscriptionTier{color:var(--dsw-alias-label-secondary);margin-left:6px}.VWh0dG_subscriptionAuto{color:var(--dsw-static-blue-500);background:color-mix(in srgb, var(--dsw-static-blue-500) 14%, var(--dsw-alias-bg-layer-2));border-radius:999px;margin-left:6px;padding:1px 6px;font-size:10px}.VWh0dG_subscriptionStatus{color:var(--dsw-alias-label-secondary);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(--dsw-alias-label-secondary);flex:0 0 44px}.VWh0dG_subscriptionTrack{background:var(--dsw-alias-bg-layer-3);border-radius:3px;flex:1;height:6px;overflow:hidden}.VWh0dG_subscriptionFill{background:var(--dsw-static-blue-500);border-radius:3px;height:100%;transition:width .2s;display:block}.VWh0dG_subscriptionFillWarn{background:var(--dsw-static-amber-500)}.VWh0dG_subscriptionFillOver{background:var(--dsw-static-red-500)}.VWh0dG_subscriptionMeta{flex-direction:column;flex:none;align-items:flex-end;gap:2px;display:flex}.VWh0dG_subscriptionPct{text-align:right;font-variant-numeric:tabular-nums;flex:none;min-width:52px}.VWh0dG_subscriptionExhausted{color:var(--dsw-static-red-500);min-width:52px;font-weight:600}.VWh0dG_subscriptionReset{color:var(--dsw-alias-label-caption);white-space:nowrap;flex:none;font-size:10px}.VWh0dG_providerGroupList{flex-direction:column;gap:10px;display:flex}.VWh0dG_providerGroup{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:12px;padding:12px 14px}.VWh0dG_providerGroupHead{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.VWh0dG_providerGroupTitle{align-items:center;gap:7px;min-width:0;display:inline-flex}.VWh0dG_providerGroupName{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600;line-height:18px}.VWh0dG_providerGroupMeta{flex:none;align-items:center;gap:10px;display:inline-flex}.VWh0dG_providerGroupBadge{color:var(--dsw-static-green-500);background:var(--dsw-alias-bg-layer-2);border-radius:999px;align-items:center;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px;display:inline-flex}.VWh0dG_providerGroupBalance{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;white-space:nowrap;align-items:baseline;gap:6px;font-size:12px;line-height:17px;display:inline-flex}.VWh0dG_providerGroupBalanceLabel{color:var(--dsw-alias-label-caption);font-size:11px;line-height:17px}.VWh0dG_roundsFlagBadge{color:var(--dsw-static-neutral-bluish-00);background:var(--dsw-static-red-500);border-radius:999px;margin-left:8px;padding:1px 7px;font-size:10px;font-weight:800}.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(--dsw-static-amber-500) 16%, transparent)}.VWh0dG_roundsBarColOff{background:var(--dsw-alias-bg-module-platform)}.VWh0dG_roundsBarLabel{text-align:center;color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;max-width:100%;font-size:9px;line-height:1.2;position:absolute;bottom:0;left:0;right:0;overflow:hidden;transform:translateY(-100%)}.VWh0dG_roundsBarWrap{flex:1;align-items:flex-end;min-height:0;display:flex}.VWh0dG_roundsBar{background:var(--dsw-static-blue-500);border-radius:2px 2px 0 0;width:100%;min-height:2px;position:relative}.VWh0dG_roundsBarFlagged{background:var(--dsw-static-red-500);border-radius:2px 2px 0 0;width:100%;min-height:2px;position:relative}.VWh0dG_roundsFlagMark{background:var(--dsw-static-red-500);border-radius:50%;width:7px;height:7px;position:absolute;top:-3px;right:-3px}.VWh0dG_roundsAxis{color:var(--dsw-alias-label-secondary);justify-content:space-between;margin-top:6px;font-size:10px;display:flex}.VWh0dG_roundsEmpty{color:var(--dsw-alias-label-secondary);margin-top:10px;font-size:12px}.VWh0dG_heatmap{margin-top:10px}.VWh0dG_heatmapGrid{grid-template-columns:repeat(7,minmax(0,1fr));gap:8px;display:grid}.VWh0dG_heatmapCellEmpty{background:var(--dsw-alias-bg-layer-1);height:30px;color:var(--dsw-alias-label-dimmed);font-variant-numeric:tabular-nums;border-radius:8px;justify-content:center;align-items:center;font-size:11px;display:flex}.VWh0dG_heatmapCell{font-variant-numeric:tabular-nums;cursor:pointer;border:0;border-radius:8px;justify-content:center;align-items:center;height:30px;padding:0;font-size:11px;display:flex}.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:4px;width:14px;height:14px;display:block}.VWh0dG_heatmapHover{font-variant-numeric:tabular-nums;margin-left:auto}.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_pluginInfo{flex-direction:column;gap:8px;margin-top:10px;display:flex}.VWh0dG_pluginInfoRow{align-items:baseline;gap:12px;font-size:12px;display:flex}.VWh0dG_pluginInfoLabel{color:var(--dsw-alias-label-secondary);flex:0 0 72px}.VWh0dG_pluginInfoValue{color:var(--dsw-alias-label-primary);word-break:break-all}.VWh0dG_pluginInfoLink{color:var(--dsw-static-blue-500);word-break:break-all;text-decoration:none}.VWh0dG_pluginInfoLink: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(--dsw-static-blue-500)}.VWh0dG_tokenModelPartOut{background:var(--dsw-static-amber-500)}.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_peakAlert{z-index:2000;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:12px;align-items:center;gap:12px;min-width:300px;max-width:460px;padding:10px 12px;animation:.2s VWh0dG_peakAlertIn;display:flex;position:fixed;box-shadow:0 4px 16px #00000014}.VWh0dG_peakAlertCorner{bottom:18px;right:18px}.VWh0dG_peakAlertCenter{top:20%;left:50%;transform:translate(-50%)}.VWh0dG_peakAlertTag{letter-spacing:.01em;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-3);white-space:nowrap;border-radius:999px;flex:none;align-items:center;gap:6px;padding:3px 9px;font-size:11px;font-weight:650;display:inline-flex}.VWh0dG_peakAlertTag:before{content:\"\";background:currentColor;border-radius:50%;width:6px;height:6px}.VWh0dG_peakAlertPeak .VWh0dG_peakAlertTag{color:var(--dsw-static-amber-500)}.VWh0dG_peakAlertOff .VWh0dG_peakAlertTag{color:var(--dsw-static-blue-500)}.VWh0dG_peakAlertCountdown{font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-primary);flex:none;font-size:18px;font-weight:700;line-height:1}.VWh0dG_peakAlertText{min-width:0;color:var(--dsw-alias-label-secondary);flex:1;font-size:12px;line-height:18px}.VWh0dG_peakAlertClose{width:20px;height:20px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;justify-content:center;align-items:center;font-size:15px;line-height:1;transition:background-color .14s,color .14s;display:inline-flex}.VWh0dG_peakAlertClose:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2)}@keyframes VWh0dG_peakAlertIn{0%{opacity:0}to{opacity:1}}.VWh0dG_peakAlertPanel{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:16px;flex-direction:column;gap:10px;padding:14px 16px;display:flex}.VWh0dG_peakAlertPanelHead{justify-content:space-between;align-items:center;gap:10px;display:flex}.VWh0dG_peakAlertPanelLabel{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600}.VWh0dG_peakAlertPanelBody{flex-wrap:wrap;align-items:center;gap:12px 16px;display:flex}.VWh0dG_peakAlertField{color:var(--dsw-alias-label-secondary);align-items:center;gap:8px;font-size:12px;display:inline-flex}.VWh0dG_peakAlertNum{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);width:56px;color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;border-radius:6px;padding:4px 6px}.VWh0dG_peakAlertSelect{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);border-radius:6px;padding:4px 6px;font-size:12px}.VWh0dG_peakAlertCheck{color:var(--dsw-alias-label-secondary);align-items:center;gap:6px;font-size:12px;display:inline-flex}.VWh0dG_peakAlertPreview{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:6px;padding:5px 10px;font-size:12px}.VWh0dG_peakAlertPreview:hover{background:var(--dsw-alias-bg-layer-3)}.VWh0dG_settingsHead{flex-direction:column;gap:4px;margin-bottom:2px;display:flex}.VWh0dG_settingsTitle{letter-spacing:-.005em;color:var(--dsw-alias-label-primary);margin:0;font-size:15px;font-weight:650;line-height:22px}.VWh0dG_settingsHint{color:var(--dsw-alias-label-caption);margin:0;font-size:11px;line-height:16px}.VWh0dG_budgetHint,.VWh0dG_peakAlertHint{color:var(--dsw-alias-label-caption);margin:6px 0 0;font-size:11px;line-height:16px}";
28
28
  const tagId = "@kenz1117/dsh-ui-usage-billing/UsageBilling.module.css";
29
29
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
30
30
  const tag = document.createElement("style");
@@ -34,266 +34,314 @@ window.__ModuleLoader__.load({
34
34
  document.head.appendChild(tag);
35
35
  }
36
36
  var UsageBilling_module_css_default = {
37
- "heroMeta": "VWh0dG_heroMeta",
38
- "kpiDetail": "VWh0dG_kpiDetail",
39
- "closeButton": "VWh0dG_closeButton",
40
- "kpiGrid": "VWh0dG_kpiGrid",
41
- "tokenModelPartIn": "VWh0dG_tokenModelPartIn",
42
- "kpiLabel": "VWh0dG_kpiLabel",
43
- "triggerBody": "VWh0dG_triggerBody",
44
- "roundsBarCol": "VWh0dG_roundsBarCol",
45
- "peakAlertClose": "VWh0dG_peakAlertClose",
46
- "peakAlertSelect": "VWh0dG_peakAlertSelect",
47
- "providerGroupList": "VWh0dG_providerGroupList",
48
- "providerGroupBalance": "VWh0dG_providerGroupBalance",
49
- "heroGaugeSvg": "VWh0dG_heroGaugeSvg",
50
- "peakAlertCenter": "VWh0dG_peakAlertCenter",
51
- "triggerSparkHot": "VWh0dG_triggerSparkHot",
52
- "budgetFillOver": "VWh0dG_budgetFillOver",
53
- "subscriptionCard": "VWh0dG_subscriptionCard",
54
- "subscriptionPlan": "VWh0dG_subscriptionPlan",
55
- "triggerPopValue": "VWh0dG_triggerPopValue",
56
- "shareSegPeak": "VWh0dG_shareSegPeak",
57
- "balanceCell": "VWh0dG_balanceCell",
58
- "settingsTitle": "VWh0dG_settingsTitle",
59
- "modelCell": "VWh0dG_modelCell",
60
- "bucketStatSub": "VWh0dG_bucketStatSub",
61
- "peakAlertPanel": "VWh0dG_peakAlertPanel",
62
- "triggerPop": "VWh0dG_triggerPop",
63
- "chartWrap": "VWh0dG_chartWrap",
64
- "subscriptionWindowLabel": "VWh0dG_subscriptionWindowLabel",
37
+ "triggerPopFoot": "VWh0dG_triggerPopFoot",
38
+ "kpiGreen": "VWh0dG_kpiGreen",
39
+ "trendPanel": "VWh0dG_trendPanel",
40
+ "triggerSub": "VWh0dG_triggerSub",
41
+ "tabNav": "VWh0dG_tabNav",
65
42
  "rateBadge": "VWh0dG_rateBadge",
66
- "bucketStatLabel": "VWh0dG_bucketStatLabel",
67
- "dashboardBody": "VWh0dG_dashboardBody",
68
- "flatTag": "VWh0dG_flatTag",
69
- "subscriptionTrack": "VWh0dG_subscriptionTrack",
70
- "railButton": "VWh0dG_railButton",
71
- "bucketSummary": "VWh0dG_bucketSummary",
72
- "heatmapLegend": "VWh0dG_heatmapLegend",
43
+ "subscriptionFill": "VWh0dG_subscriptionFill",
44
+ "shareTrack": "VWh0dG_shareTrack",
45
+ "siteRowTitle": "VWh0dG_siteRowTitle",
46
+ "dashboardSubtitle": "VWh0dG_dashboardSubtitle",
47
+ "triggerPopUpdated": "VWh0dG_triggerPopUpdated",
73
48
  "rateBadgeBuiltin": "VWh0dG_rateBadgeBuiltin",
74
- "heatmapCellEmpty": "VWh0dG_heatmapCellEmpty",
75
- "peakAlertPreview": "VWh0dG_peakAlertPreview",
76
- "healthIdle": "VWh0dG_healthIdle",
77
- "subscriptionPct": "VWh0dG_subscriptionPct",
78
- "modelDot": "VWh0dG_modelDot",
79
- "providerGroupTitle": "VWh0dG_providerGroupTitle",
80
- "rangeButton": "VWh0dG_rangeButton",
49
+ "subscriptionGrid": "VWh0dG_subscriptionGrid",
50
+ "siteRowMeta": "VWh0dG_siteRowMeta",
51
+ "subscriptionName": "VWh0dG_subscriptionName",
52
+ "roundsBars": "VWh0dG_roundsBars",
53
+ "triggerPopFootStatus": "VWh0dG_triggerPopFootStatus",
54
+ "chartLegend": "VWh0dG_chartLegend",
55
+ "triggerPopFootStatusLow": "VWh0dG_triggerPopFootStatusLow",
56
+ "roundsBarWrap": "VWh0dG_roundsBarWrap",
57
+ "liveCostItem": "VWh0dG_liveCostItem",
58
+ "triggerAmount": "VWh0dG_triggerAmount",
59
+ "triggerIcon": "VWh0dG_triggerIcon",
60
+ "triggerPopLabel": "VWh0dG_triggerPopLabel",
61
+ "triggerPopValueStack": "VWh0dG_triggerPopValueStack",
62
+ "pricingToggleText": "VWh0dG_pricingToggleText",
63
+ "triggerPopOpenBtn": "VWh0dG_triggerPopOpenBtn",
64
+ "healthOk": "VWh0dG_healthOk",
65
+ "bucketStatValue": "VWh0dG_bucketStatValue",
66
+ "settingsHint": "VWh0dG_settingsHint",
67
+ "exportButton": "VWh0dG_exportButton",
68
+ "balanceCell": "VWh0dG_balanceCell",
69
+ "peakAlertCenter": "VWh0dG_peakAlertCenter",
70
+ "rateBadgeLive": "VWh0dG_rateBadgeLive",
71
+ "triggerPopValue": "VWh0dG_triggerPopValue",
72
+ "rangeButtonActive": "VWh0dG_rangeButtonActive",
73
+ "subscriptionExhausted": "VWh0dG_subscriptionExhausted",
74
+ "triggerBody": "VWh0dG_triggerBody",
75
+ "tableScroll": "VWh0dG_tableScroll",
76
+ "switchOn": "VWh0dG_switchOn",
77
+ "siteRowCost": "VWh0dG_siteRowCost",
78
+ "pricingTable": "VWh0dG_pricingTable",
79
+ "subscriptionFillOver": "VWh0dG_subscriptionFillOver",
80
+ "heroSide": "VWh0dG_heroSide",
81
+ "chartSvg": "VWh0dG_chartSvg",
82
+ "triggerPopFootName": "VWh0dG_triggerPopFootName",
81
83
  "heatmapYearScroll": "VWh0dG_heatmapYearScroll",
82
- "bucketSep": "VWh0dG_bucketSep",
83
- "tokenModelParts": "VWh0dG_tokenModelParts",
84
- "heroSideLabel": "VWh0dG_heroSideLabel",
85
- "peakAlertCountdown": "VWh0dG_peakAlertCountdown",
86
- "subscriptionHead": "VWh0dG_subscriptionHead",
87
- "pluginInfoValue": "VWh0dG_pluginInfoValue",
88
- "chartLegendLine": "VWh0dG_chartLegendLine",
89
- "bucketCost": "VWh0dG_bucketCost",
90
- "roundsBarColOff": "VWh0dG_roundsBarColOff",
91
- "deltaUp": "VWh0dG_deltaUp",
84
+ "triggerPopTitleMonth": "VWh0dG_triggerPopTitleMonth",
85
+ "triggerSpark": "VWh0dG_triggerSpark",
92
86
  "budgetControls": "VWh0dG_budgetControls",
93
- "exportButton": "VWh0dG_exportButton",
94
- "shareDot": "VWh0dG_shareDot",
95
- "peakAlertPanelLabel": "VWh0dG_peakAlertPanelLabel",
96
- "pluginInfo": "VWh0dG_pluginInfo",
97
- "tokenModelShareRow": "VWh0dG_tokenModelShareRow",
98
- "pricingChevronOpen": "VWh0dG_pricingChevronOpen",
99
- "peakAlertCheck": "VWh0dG_peakAlertCheck",
87
+ "triggerPopRow": "VWh0dG_triggerPopRow",
88
+ "budgetOverPulse": "VWh0dG_budgetOverPulse",
89
+ "tabButton": "VWh0dG_tabButton",
90
+ "pluginInfoValue": "VWh0dG_pluginInfoValue",
91
+ "peakAlert": "VWh0dG_peakAlert",
92
+ "triggerPopFootStrong": "VWh0dG_triggerPopFootStrong",
100
93
  "peakAlertHint": "VWh0dG_peakAlertHint",
101
- "balanceDays": "VWh0dG_balanceDays",
102
- "trigger": "VWh0dG_trigger",
103
- "kpiValue": "VWh0dG_kpiValue",
104
- "delta": "VWh0dG_delta",
105
- "chartBar": "VWh0dG_chartBar",
106
- "healthDot": "VWh0dG_healthDot",
107
- "bucketStatValue": "VWh0dG_bucketStatValue",
108
- "shareSegAssistant": "VWh0dG_shareSegAssistant",
109
- "currencyButtonActive": "VWh0dG_currencyButtonActive",
110
- "dashboard": "VWh0dG_dashboard",
94
+ "roundsFlagBadge": "VWh0dG_roundsFlagBadge",
95
+ "providerGroupList": "VWh0dG_providerGroupList",
96
+ "chartGrid": "VWh0dG_chartGrid",
97
+ "roundsFlagMark": "VWh0dG_roundsFlagMark",
98
+ "bandTag": "VWh0dG_bandTag",
99
+ "subscriptionPct": "VWh0dG_subscriptionPct",
111
100
  "budgetInputWrap": "VWh0dG_budgetInputWrap",
112
- "liveTierOff": "VWh0dG_liveTierOff",
113
- "pricingToggleText": "VWh0dG_pricingToggleText",
114
- "peakAlertField": "VWh0dG_peakAlertField",
101
+ "heatmapYearGrid": "VWh0dG_heatmapYearGrid",
102
+ "pluginInfoLink": "VWh0dG_pluginInfoLink",
103
+ "budgetValue": "VWh0dG_budgetValue",
104
+ "roundsEmpty": "VWh0dG_roundsEmpty",
105
+ "bucketThird": "VWh0dG_bucketThird",
115
106
  "costCol": "VWh0dG_costCol",
107
+ "rounds": "VWh0dG_rounds",
108
+ "budgetHint": "VWh0dG_budgetHint",
109
+ "heatmapCellEmpty": "VWh0dG_heatmapCellEmpty",
110
+ "heroMeta": "VWh0dG_heroMeta",
111
+ "triggerPopFootTitle": "VWh0dG_triggerPopFootTitle",
112
+ "heroGaugeArc": "VWh0dG_heroGaugeArc",
116
113
  "chartDot": "VWh0dG_chartDot",
117
- "heroValue": "VWh0dG_heroValue",
118
- "subscriptionFillWarn": "VWh0dG_subscriptionFillWarn",
119
- "triggerAmount": "VWh0dG_triggerAmount",
120
- "bucketThird": "VWh0dG_bucketThird",
121
- "bandPriceOff": "VWh0dG_bandPriceOff",
122
- "subscriptionExhausted": "VWh0dG_subscriptionExhausted",
123
- "roundsFlagBadge": "VWh0dG_roundsFlagBadge",
124
- "dashboardModal": "VWh0dG_dashboardModal",
114
+ "kpiGrid": "VWh0dG_kpiGrid",
115
+ "dashboardBody": "VWh0dG_dashboardBody",
116
+ "providerGroupBalanceLabel": "VWh0dG_providerGroupBalanceLabel",
117
+ "providerGroup": "VWh0dG_providerGroup",
118
+ "pluginInfoLabel": "VWh0dG_pluginInfoLabel",
119
+ "triggerPopMuted": "VWh0dG_triggerPopMuted",
120
+ "pricingToggle": "VWh0dG_pricingToggle",
121
+ "estimatedTag": "VWh0dG_estimatedTag",
125
122
  "providerGroupHead": "VWh0dG_providerGroupHead",
126
- "bandTag": "VWh0dG_bandTag",
127
- "heroTop": "VWh0dG_heroTop",
128
- "triggerPopRow": "VWh0dG_triggerPopRow",
129
- "na": "VWh0dG_na",
130
- "liveCostSep": "VWh0dG_liveCostSep",
123
+ "peakAlertPreview": "VWh0dG_peakAlertPreview",
124
+ "triggerPopHead": "VWh0dG_triggerPopHead",
125
+ "triggerMeta": "VWh0dG_triggerMeta",
126
+ "triggerPopAlert": "VWh0dG_triggerPopAlert",
127
+ "chartTooltipDate": "VWh0dG_chartTooltipDate",
128
+ "triggerPopBadgeDirect": "VWh0dG_triggerPopBadgeDirect",
129
+ "peakAlertPanelHead": "VWh0dG_peakAlertPanelHead",
130
+ "providerGroupName": "VWh0dG_providerGroupName",
131
+ "heroValue": "VWh0dG_heroValue",
132
+ "siteRowCalls": "VWh0dG_siteRowCalls",
133
+ "subscriptionPlan": "VWh0dG_subscriptionPlan",
134
+ "deltaUp": "VWh0dG_deltaUp",
135
+ "triggerPopStrong": "VWh0dG_triggerPopStrong",
136
+ "budgetLabel": "VWh0dG_budgetLabel",
137
+ "chartTooltip": "VWh0dG_chartTooltip",
138
+ "peakAlertIn": "VWh0dG_peakAlertIn",
139
+ "bandPrice": "VWh0dG_bandPrice",
140
+ "siteKindDirect": "VWh0dG_siteKindDirect",
141
+ "heroGaugeArcOver": "VWh0dG_heroGaugeArcOver",
142
+ "currencyButtonActive": "VWh0dG_currencyButtonActive",
143
+ "dashboardHead": "VWh0dG_dashboardHead",
144
+ "healthDot": "VWh0dG_healthDot",
145
+ "panelHead": "VWh0dG_panelHead",
146
+ "budgetTrack": "VWh0dG_budgetTrack",
147
+ "heroGaugeSvg": "VWh0dG_heroGaugeSvg",
131
148
  "bucketOfficial": "VWh0dG_bucketOfficial",
132
- "pricingChevron": "VWh0dG_pricingChevron",
133
- "shareValue": "VWh0dG_shareValue",
134
- "chartSvg": "VWh0dG_chartSvg",
135
- "balanceDaysLow": "VWh0dG_balanceDaysLow",
136
- "dashboardTitle": "VWh0dG_dashboardTitle",
137
- "rangeButtonActive": "VWh0dG_rangeButtonActive",
138
- "roundsBarFlagged": "VWh0dG_roundsBarFlagged",
139
- "triggerPopBar": "VWh0dG_triggerPopBar",
149
+ "subscriptionWindowLabel": "VWh0dG_subscriptionWindowLabel",
150
+ "peakAlertPanel": "VWh0dG_peakAlertPanel",
151
+ "modelTable": "VWh0dG_modelTable",
140
152
  "providerGroupBadge": "VWh0dG_providerGroupBadge",
141
- "chartTooltipDate": "VWh0dG_chartTooltipDate",
142
- "panel": "VWh0dG_panel",
143
- "roundsEmpty": "VWh0dG_roundsEmpty",
144
- "tableScroll": "VWh0dG_tableScroll",
145
- "triggerPopBars": "VWh0dG_triggerPopBars",
146
- "heroCurrency": "VWh0dG_heroCurrency",
147
- "heatmapCell": "VWh0dG_heatmapCell",
148
- "peakAlertTag": "VWh0dG_peakAlertTag",
149
- "chartLegendBar": "VWh0dG_chartLegendBar",
150
- "chartCrosshair": "VWh0dG_chartCrosshair",
151
- "heroSide": "VWh0dG_heroSide",
152
- "exportLabel": "VWh0dG_exportLabel",
153
- "chartLine": "VWh0dG_chartLine",
154
- "heroGaugePctOver": "VWh0dG_heroGaugePctOver",
153
+ "chartAxisLabel": "VWh0dG_chartAxisLabel",
154
+ "uncataloguedTag": "VWh0dG_uncataloguedTag",
155
+ "heroSideItem": "VWh0dG_heroSideItem",
156
+ "shareValue": "VWh0dG_shareValue",
157
+ "panelHint": "VWh0dG_panelHint",
155
158
  "heroGaugePct": "VWh0dG_heroGaugePct",
156
- "heroSideSpacer": "VWh0dG_heroSideSpacer",
157
- "modelProvider": "VWh0dG_modelProvider",
158
- "tokenPanel": "VWh0dG_tokenPanel",
159
- "peakAlertPeak": "VWh0dG_peakAlertPeak",
160
- "pricingTable": "VWh0dG_pricingTable",
161
- "kpiTile": "VWh0dG_kpiTile",
162
- "heroMain": "VWh0dG_heroMain",
163
- "roundsBarWrap": "VWh0dG_roundsBarWrap",
159
+ "switch": "VWh0dG_switch",
160
+ "exportLabel": "VWh0dG_exportLabel",
161
+ "balanceDetailValue": "VWh0dG_balanceDetailValue",
162
+ "headTitleRow": "VWh0dG_headTitleRow",
163
+ "balanceDetailHead": "VWh0dG_balanceDetailHead",
164
+ "subscriptionCard": "VWh0dG_subscriptionCard",
165
+ "balanceDetailRow": "VWh0dG_balanceDetailRow",
166
+ "tokenModelShareRow": "VWh0dG_tokenModelShareRow",
167
+ "budgetFillWarn": "VWh0dG_budgetFillWarn",
168
+ "shareSegOff": "VWh0dG_shareSegOff",
169
+ "balanceDays": "VWh0dG_balanceDays",
170
+ "subscriptionHead": "VWh0dG_subscriptionHead",
171
+ "currencyButton": "VWh0dG_currencyButton",
172
+ "shareSegPeak": "VWh0dG_shareSegPeak",
173
+ "siteRowName": "VWh0dG_siteRowName",
174
+ "tabPanelIn": "VWh0dG_tabPanelIn",
175
+ "rangeToggle": "VWh0dG_rangeToggle",
176
+ "subscriptionGoldFlow": "VWh0dG_subscriptionGoldFlow",
177
+ "triggerPopMetricLabel": "VWh0dG_triggerPopMetricLabel",
178
+ "triggerPopMetricHighlight": "VWh0dG_triggerPopMetricHighlight",
179
+ "heroTop": "VWh0dG_heroTop",
164
180
  "heroGaugeLabel": "VWh0dG_heroGaugeLabel",
181
+ "triggerPopFootNote": "VWh0dG_triggerPopFootNote",
182
+ "rangeButton": "VWh0dG_rangeButton",
183
+ "dashboardRight": "VWh0dG_dashboardRight",
184
+ "subscriptionStatus": "VWh0dG_subscriptionStatus",
185
+ "bucketSep": "VWh0dG_bucketSep",
186
+ "balanceDetailPop": "VWh0dG_balanceDetailPop",
187
+ "triggerPopBadgeSub": "VWh0dG_triggerPopBadgeSub",
165
188
  "exportBar": "VWh0dG_exportBar",
166
- "liveQuotaCrit": "VWh0dG_liveQuotaCrit",
167
- "heroGaugeCenter": "VWh0dG_heroGaugeCenter",
168
- "shareLegend": "VWh0dG_shareLegend",
169
- "chartStack": "VWh0dG_chartStack",
170
- "budgetOverPulse": "VWh0dG_budgetOverPulse",
171
- "chartLegend": "VWh0dG_chartLegend",
172
- "dashboardSubtitle": "VWh0dG_dashboardSubtitle",
173
- "currencyButton": "VWh0dG_currencyButton",
174
- "roundsFlagMark": "VWh0dG_roundsFlagMark",
175
- "modelName": "VWh0dG_modelName",
176
- "triggerSub": "VWh0dG_triggerSub",
177
- "emptyRow": "VWh0dG_emptyRow",
178
- "triggerPopLabel": "VWh0dG_triggerPopLabel",
179
- "bandPrice": "VWh0dG_bandPrice",
180
- "peakAlertPanelBody": "VWh0dG_peakAlertPanelBody",
181
- "heroReadout": "VWh0dG_heroReadout",
182
- "tabNav": "VWh0dG_tabNav",
183
- "peakAlertPanelHead": "VWh0dG_peakAlertPanelHead",
184
- "healthBad": "VWh0dG_healthBad",
185
- "tokenModelPartOut": "VWh0dG_tokenModelPartOut",
186
- "bucketStat": "VWh0dG_bucketStat",
187
- "budgetValue": "VWh0dG_budgetValue",
188
- "roundsBarLabel": "VWh0dG_roundsBarLabel",
189
- "heroSideItem": "VWh0dG_heroSideItem",
190
- "chartTooltipSwatch": "VWh0dG_chartTooltipSwatch",
191
- "rounds": "VWh0dG_rounds",
192
- "deltaDown": "VWh0dG_deltaDown",
193
- "pluginInfoLabel": "VWh0dG_pluginInfoLabel",
194
- "liveCostBar": "VWh0dG_liveCostBar",
195
- "budgetHead": "VWh0dG_budgetHead",
196
- "healthBadge": "VWh0dG_healthBadge",
197
- "switchKnob": "VWh0dG_switchKnob",
198
- "chartGrid": "VWh0dG_chartGrid",
189
+ "subscriptionTrack": "VWh0dG_subscriptionTrack",
190
+ "peakAlertCountdown": "VWh0dG_peakAlertCountdown",
191
+ "heatmapFooter": "VWh0dG_heatmapFooter",
192
+ "balanceDetailClose": "VWh0dG_balanceDetailClose",
199
193
  "heroGauge": "VWh0dG_heroGauge",
200
- "budgetLabel": "VWh0dG_budgetLabel",
201
- "chartTooltipRow": "VWh0dG_chartTooltipRow",
194
+ "pluginInfo": "VWh0dG_pluginInfo",
195
+ "flatTag": "VWh0dG_flatTag",
202
196
  "providerGroupMeta": "VWh0dG_providerGroupMeta",
203
- "rateBadgeLive": "VWh0dG_rateBadgeLive",
204
- "rangeToggle": "VWh0dG_rangeToggle",
205
- "heatmap": "VWh0dG_heatmap",
206
- "heroGaugeArcOver": "VWh0dG_heroGaugeArcOver",
197
+ "triggerPopBars": "VWh0dG_triggerPopBars",
198
+ "balanceDetailLabel": "VWh0dG_balanceDetailLabel",
199
+ "subscriptionFillWarn": "VWh0dG_subscriptionFillWarn",
200
+ "emptyRow": "VWh0dG_emptyRow",
201
+ "shareItem": "VWh0dG_shareItem",
207
202
  "subscriptionAuto": "VWh0dG_subscriptionAuto",
208
- "subscriptionWindow": "VWh0dG_subscriptionWindow",
209
- "heatmapGrid": "VWh0dG_heatmapGrid",
210
- "subscriptionName": "VWh0dG_subscriptionName",
211
- "triggerMeta": "VWh0dG_triggerMeta",
212
- "healthBadgeOk": "VWh0dG_healthBadgeOk",
213
- "trendPanel": "VWh0dG_trendPanel",
214
- "budget": "VWh0dG_budget",
215
- "panelHint": "VWh0dG_panelHint",
216
- "triggerSparkBar": "VWh0dG_triggerSparkBar",
217
- "roundsAxis": "VWh0dG_roundsAxis",
218
- "chartTooltip": "VWh0dG_chartTooltip",
219
- "peakAlertIn": "VWh0dG_peakAlertIn",
220
- "kpiGreen": "VWh0dG_kpiGreen",
221
- "planTag": "VWh0dG_planTag",
222
- "peakAlertOff": "VWh0dG_peakAlertOff",
223
- "heroGaugeTrack": "VWh0dG_heroGaugeTrack",
224
- "shareSegUser": "VWh0dG_shareSegUser",
225
- "healthBadgeBad": "VWh0dG_healthBadgeBad",
226
- "panelTitle": "VWh0dG_panelTitle",
227
- "shareSegOff": "VWh0dG_shareSegOff",
228
- "estimatedTag": "VWh0dG_estimatedTag",
229
- "tabButton": "VWh0dG_tabButton",
230
- "subscriptionFillOver": "VWh0dG_subscriptionFillOver",
231
- "heatmapHover": "VWh0dG_heatmapHover",
232
- "switch": "VWh0dG_switch",
233
- "triggerWrap": "VWh0dG_triggerWrap",
234
- "settingsHead": "VWh0dG_settingsHead",
235
- "budgetHint": "VWh0dG_budgetHint",
236
- "subscriptionFill": "VWh0dG_subscriptionFill",
237
- "dashboardHead": "VWh0dG_dashboardHead",
238
- "uncataloguedTag": "VWh0dG_uncataloguedTag",
239
- "pluginInfoRow": "VWh0dG_pluginInfoRow",
240
- "pricingTip": "VWh0dG_pricingTip",
241
- "chartEmpty": "VWh0dG_chartEmpty",
203
+ "modelCell": "VWh0dG_modelCell",
204
+ "dashboard": "VWh0dG_dashboard",
205
+ "kpiTile": "VWh0dG_kpiTile",
242
206
  "bandTagOff": "VWh0dG_bandTagOff",
243
- "providerGroupName": "VWh0dG_providerGroupName",
244
- "subscriptionReset": "VWh0dG_subscriptionReset",
245
207
  "peakAlertCorner": "VWh0dG_peakAlertCorner",
246
- "subscriptionStatus": "VWh0dG_subscriptionStatus",
247
- "shareTrack": "VWh0dG_shareTrack",
248
- "switchOn": "VWh0dG_switchOn",
249
- "liveCostItem": "VWh0dG_liveCostItem",
250
- "dashboardRight": "VWh0dG_dashboardRight",
251
- "subscriptionTier": "VWh0dG_subscriptionTier",
252
- "providerGroupBalanceLabel": "VWh0dG_providerGroupBalanceLabel",
253
- "shareItem": "VWh0dG_shareItem",
254
- "tabPanelIn": "VWh0dG_tabPanelIn",
208
+ "peakAlertField": "VWh0dG_peakAlertField",
209
+ "shareSegUser": "VWh0dG_shareSegUser",
210
+ "modelDot": "VWh0dG_modelDot",
211
+ "peakAlertPanelBody": "VWh0dG_peakAlertPanelBody",
212
+ "chartTooltipRow": "VWh0dG_chartTooltipRow",
213
+ "tabButtonActive": "VWh0dG_tabButtonActive",
214
+ "triggerSparkBar": "VWh0dG_triggerSparkBar",
215
+ "bucketStatSub": "VWh0dG_bucketStatSub",
255
216
  "liveQuotaWarn": "VWh0dG_liveQuotaWarn",
256
- "roundsBars": "VWh0dG_roundsBars",
257
- "triggerIcon": "VWh0dG_triggerIcon",
258
- "shareSegTool": "VWh0dG_shareSegTool",
259
- "modelTableScroll": "VWh0dG_modelTableScroll",
260
- "settingsHint": "VWh0dG_settingsHint",
261
217
  "tabPanel": "VWh0dG_tabPanel",
218
+ "kpiDetail": "VWh0dG_kpiDetail",
219
+ "triggerPopTitle": "VWh0dG_triggerPopTitle",
220
+ "chartWrap": "VWh0dG_chartWrap",
221
+ "dashboardIn": "VWh0dG_dashboardIn",
222
+ "pluginInfoRow": "VWh0dG_pluginInfoRow",
223
+ "bucketCost": "VWh0dG_bucketCost",
224
+ "healthBad": "VWh0dG_healthBad",
225
+ "heatmapCell": "VWh0dG_heatmapCell",
226
+ "chartLegendLine": "VWh0dG_chartLegendLine",
227
+ "closeButton": "VWh0dG_closeButton",
228
+ "healthIdle": "VWh0dG_healthIdle",
229
+ "chartStack": "VWh0dG_chartStack",
230
+ "tokenModelPartIn": "VWh0dG_tokenModelPartIn",
231
+ "chartLegendBar": "VWh0dG_chartLegendBar",
232
+ "roundsBarLabel": "VWh0dG_roundsBarLabel",
233
+ "tokenModelPartOut": "VWh0dG_tokenModelPartOut",
234
+ "budgetFill": "VWh0dG_budgetFill",
235
+ "balanceDaysLow": "VWh0dG_balanceDaysLow",
236
+ "subscriptionReset": "VWh0dG_subscriptionReset",
237
+ "budgetUnit": "VWh0dG_budgetUnit",
238
+ "triggerPopFootNotes": "VWh0dG_triggerPopFootNotes",
239
+ "chartEmpty": "VWh0dG_chartEmpty",
240
+ "roundsBarColPeak": "VWh0dG_roundsBarColPeak",
262
241
  "triggerRow": "VWh0dG_triggerRow",
242
+ "roundsBarColOff": "VWh0dG_roundsBarColOff",
243
+ "peakAlertClose": "VWh0dG_peakAlertClose",
244
+ "dashboardModal": "VWh0dG_dashboardModal",
245
+ "triggerWrap": "VWh0dG_triggerWrap",
246
+ "heatmapHover": "VWh0dG_heatmapHover",
247
+ "providerGroupTitle": "VWh0dG_providerGroupTitle",
248
+ "na": "VWh0dG_na",
249
+ "roundsBarFlagged": "VWh0dG_roundsBarFlagged",
250
+ "roundsAxis": "VWh0dG_roundsAxis",
251
+ "dashboardTitle": "VWh0dG_dashboardTitle",
252
+ "chartLine": "VWh0dG_chartLine",
253
+ "triggerPop": "VWh0dG_triggerPop",
254
+ "chartBar": "VWh0dG_chartBar",
255
+ "liveTierPeak": "VWh0dG_liveTierPeak",
263
256
  "tokenModelBar": "VWh0dG_tokenModelBar",
264
- "budgetFillWarn": "VWh0dG_budgetFillWarn",
257
+ "bandPriceOff": "VWh0dG_bandPriceOff",
258
+ "healthBadge": "VWh0dG_healthBadge",
259
+ "triggerPopBar": "VWh0dG_triggerPopBar",
260
+ "settingsHead": "VWh0dG_settingsHead",
261
+ "heroReadout": "VWh0dG_heroReadout",
262
+ "budgetInput": "VWh0dG_budgetInput",
263
+ "pricingTip": "VWh0dG_pricingTip",
264
+ "triggerPopMetricValue": "VWh0dG_triggerPopMetricValue",
265
+ "peakAlertSelect": "VWh0dG_peakAlertSelect",
266
+ "peakAlertTag": "VWh0dG_peakAlertTag",
267
+ "railButton": "VWh0dG_railButton",
265
268
  "numCol": "VWh0dG_numCol",
266
- "roundsBarColPeak": "VWh0dG_roundsBarColPeak",
267
- "shareSeg": "VWh0dG_shareSeg",
268
- "providerGroup": "VWh0dG_providerGroup",
269
- "hero": "VWh0dG_hero",
270
- "triggerSpark": "VWh0dG_triggerSpark",
271
- "budgetUnit": "VWh0dG_budgetUnit",
272
- "heatmapYearGrid": "VWh0dG_heatmapYearGrid",
273
- "heatmapYearCell": "VWh0dG_heatmapYearCell",
269
+ "siteKindTag": "VWh0dG_siteKindTag",
274
270
  "peakAlertText": "VWh0dG_peakAlertText",
275
- "tabButtonActive": "VWh0dG_tabButtonActive",
276
- "liveTierPeak": "VWh0dG_liveTierPeak",
277
- "pluginInfoLink": "VWh0dG_pluginInfoLink",
278
- "peakAlertNum": "VWh0dG_peakAlertNum",
279
- "panelHead": "VWh0dG_panelHead",
280
- "heatmapFooter": "VWh0dG_heatmapFooter",
281
- "healthOk": "VWh0dG_healthOk",
282
- "budgetInput": "VWh0dG_budgetInput",
283
- "budgetTrack": "VWh0dG_budgetTrack",
284
- "pricingToggle": "VWh0dG_pricingToggle",
285
- "dashboardIn": "VWh0dG_dashboardIn",
286
- "peakAlert": "VWh0dG_peakAlert",
287
- "budgetFill": "VWh0dG_budgetFill",
288
- "modelTable": "VWh0dG_modelTable",
289
- "subscriptionGrid": "VWh0dG_subscriptionGrid",
271
+ "pricingChevronOpen": "VWh0dG_pricingChevronOpen",
272
+ "bucketStat": "VWh0dG_bucketStat",
273
+ "heroSideLabel": "VWh0dG_heroSideLabel",
274
+ "settingsTitle": "VWh0dG_settingsTitle",
275
+ "trigger": "VWh0dG_trigger",
276
+ "switchKnob": "VWh0dG_switchKnob",
277
+ "healthBadgeBad": "VWh0dG_healthBadgeBad",
278
+ "modelProvider": "VWh0dG_modelProvider",
279
+ "heroGaugeCenter": "VWh0dG_heroGaugeCenter",
280
+ "liveQuotaCrit": "VWh0dG_liveQuotaCrit",
281
+ "siteKindUnknown": "VWh0dG_siteKindUnknown",
282
+ "providerGroupBalance": "VWh0dG_providerGroupBalance",
283
+ "heroMain": "VWh0dG_heroMain",
284
+ "peakAlertPanelLabel": "VWh0dG_peakAlertPanelLabel",
285
+ "balanceDetailGrid": "VWh0dG_balanceDetailGrid",
286
+ "shareLegend": "VWh0dG_shareLegend",
287
+ "bucketStatLabel": "VWh0dG_bucketStatLabel",
288
+ "tokenModelParts": "VWh0dG_tokenModelParts",
289
+ "kpiValue": "VWh0dG_kpiValue",
290
+ "siteKindSite": "VWh0dG_siteKindSite",
291
+ "kpiLabel": "VWh0dG_kpiLabel",
292
+ "panel": "VWh0dG_panel",
293
+ "balanceDaysBadgeLow": "VWh0dG_balanceDaysBadgeLow",
294
+ "heatmap": "VWh0dG_heatmap",
295
+ "shareSegAssistant": "VWh0dG_shareSegAssistant",
296
+ "currencyToggle": "VWh0dG_currencyToggle",
297
+ "peakAlertPeak": "VWh0dG_peakAlertPeak",
298
+ "bucketSummary": "VWh0dG_bucketSummary",
299
+ "liveCostBar": "VWh0dG_liveCostBar",
300
+ "heatmapGrid": "VWh0dG_heatmapGrid",
301
+ "heatmapLegend": "VWh0dG_heatmapLegend",
302
+ "triggerPopMetrics": "VWh0dG_triggerPopMetrics",
303
+ "heroLabel": "VWh0dG_heroLabel",
304
+ "subscriptionMeta": "VWh0dG_subscriptionMeta",
290
305
  "heroSideValue": "VWh0dG_heroSideValue",
306
+ "planTag": "VWh0dG_planTag",
307
+ "balanceDaysBadge": "VWh0dG_balanceDaysBadge",
308
+ "triggerPopName": "VWh0dG_triggerPopName",
309
+ "peakAlertNum": "VWh0dG_peakAlertNum",
310
+ "budget": "VWh0dG_budget",
311
+ "heatmapYearCell": "VWh0dG_heatmapYearCell",
312
+ "panelTitle": "VWh0dG_panelTitle",
313
+ "budgetHead": "VWh0dG_budgetHead",
314
+ "hero": "VWh0dG_hero",
315
+ "deltaDown": "VWh0dG_deltaDown",
316
+ "balanceDetailTitle": "VWh0dG_balanceDetailTitle",
317
+ "chartTooltipSwatch": "VWh0dG_chartTooltipSwatch",
318
+ "liveCostSep": "VWh0dG_liveCostSep",
319
+ "peakAlertOff": "VWh0dG_peakAlertOff",
320
+ "liveTierOff": "VWh0dG_liveTierOff",
321
+ "peakAlertCheck": "VWh0dG_peakAlertCheck",
322
+ "shareSeg": "VWh0dG_shareSeg",
323
+ "tokenPanel": "VWh0dG_tokenPanel",
324
+ "chartCrosshair": "VWh0dG_chartCrosshair",
325
+ "triggerSparkHot": "VWh0dG_triggerSparkHot",
326
+ "shareDot": "VWh0dG_shareDot",
327
+ "delta": "VWh0dG_delta",
328
+ "healthBadgeOk": "VWh0dG_healthBadgeOk",
329
+ "heroCurrency": "VWh0dG_heroCurrency",
330
+ "modelName": "VWh0dG_modelName",
331
+ "heroGaugePctOver": "VWh0dG_heroGaugePctOver",
332
+ "siteRow": "VWh0dG_siteRow",
291
333
  "roundsBar": "VWh0dG_roundsBar",
292
- "chartAxisLabel": "VWh0dG_chartAxisLabel",
293
- "heroLabel": "VWh0dG_heroLabel",
294
- "headTitleRow": "VWh0dG_headTitleRow",
295
- "currencyToggle": "VWh0dG_currencyToggle",
296
- "heroGaugeArc": "VWh0dG_heroGaugeArc"
334
+ "roundsBarCol": "VWh0dG_roundsBarCol",
335
+ "heroSideSpacer": "VWh0dG_heroSideSpacer",
336
+ "shareSegTool": "VWh0dG_shareSegTool",
337
+ "heroGaugeTrack": "VWh0dG_heroGaugeTrack",
338
+ "triggerPopBadge": "VWh0dG_triggerPopBadge",
339
+ "subscriptionTier": "VWh0dG_subscriptionTier",
340
+ "subscriptionWindow": "VWh0dG_subscriptionWindow",
341
+ "modelTableScroll": "VWh0dG_modelTableScroll",
342
+ "budgetFillOver": "VWh0dG_budgetFillOver",
343
+ "pricingChevron": "VWh0dG_pricingChevron",
344
+ "triggerPopMetric": "VWh0dG_triggerPopMetric"
297
345
  };
298
346
  //#endregion
299
347
  //#region src/client/plan-knowledge.ts
@@ -3138,7 +3186,37 @@ window.__ModuleLoader__.load({
3138
3186
  "billing.tokenTotal": "总 Token",
3139
3187
  "billing.tokenShare": "占比",
3140
3188
  "billing.usageStatsTool": "注入用量查询工具",
3141
- "billing.usageStatsToolHint": "让模型可在对话中查询用量/费用;会占用模型每次请求的上下文,coding 场景建议关闭(改后需重载应用生效)"
3189
+ "billing.usageStatsToolHint": "让模型可在对话中查询用量/费用;会占用模型每次请求的上下文,coding 场景建议关闭(改后需重载应用生效)",
3190
+ "billing.balanceGranted": "赠金余额",
3191
+ "billing.balanceTopped": "充值余额",
3192
+ "billing.balanceDaily": "日均消耗",
3193
+ "billing.balanceDaysLong": "约可撑",
3194
+ "billing.balanceDaysUnit": "天",
3195
+ "billing.popTodayModel": "主力消耗模型余额",
3196
+ "billing.popNoConsumption": "暂无消耗",
3197
+ "billing.popQuotaAlert": "额度提醒",
3198
+ "billing.popRiskNone": "余额与配额正常",
3199
+ "billing.popTitle": "用量与预测",
3200
+ "billing.popDirectLead": "直联",
3201
+ "billing.popSubLead": "订阅",
3202
+ "billing.popBalanceNormal": "余额正常",
3203
+ "billing.popBalanceLow": "余额不足",
3204
+ "billing.popQuotaNormal": "配额正常",
3205
+ "billing.popQuotaLow": "配额将尽",
3206
+ "billing.alertBalanceLow": "{name} 余额不足",
3207
+ "billing.alertQuotaLow": "{name} 配额将尽",
3208
+ "billing.panelRelay": "中转站分布",
3209
+ "billing.relaySite": "中转站",
3210
+ "billing.relayDirect": "直连",
3211
+ "billing.relayUnknown": "未知路由",
3212
+ "billing.panelRelayQuota": "中转站额度",
3213
+ "billing.relayBalance": "余额",
3214
+ "billing.relayNoQuota": "未读出额度",
3215
+ "billing.relayWindowUsed": "已用",
3216
+ "billing.relayKindNewApi": "New API",
3217
+ "billing.relayKindSub2Api": "Sub2API",
3218
+ "billing.relayKindUnknown": "未识别",
3219
+ "billing.relayCalls": "调用"
3142
3220
  };
3143
3221
  const en = {
3144
3222
  "billing.title": "Usage",
@@ -3320,7 +3398,37 @@ window.__ModuleLoader__.load({
3320
3398
  "billing.tokenTotal": "Total tokens",
3321
3399
  "billing.tokenShare": "Share",
3322
3400
  "billing.usageStatsTool": "Inject usage-stats tool",
3323
- "billing.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)"
3401
+ "billing.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)",
3402
+ "billing.balanceGranted": "Granted",
3403
+ "billing.balanceTopped": "Topped up",
3404
+ "billing.balanceDaily": "Daily burn",
3405
+ "billing.balanceDaysLong": "~days left",
3406
+ "billing.balanceDaysUnit": "days",
3407
+ "billing.popTodayModel": "Main model balance",
3408
+ "billing.popNoConsumption": "No usage yet",
3409
+ "billing.popQuotaAlert": "Quota alerts",
3410
+ "billing.popRiskNone": "Balances & quotas OK",
3411
+ "billing.popTitle": "Usage & forecast",
3412
+ "billing.popDirectLead": "Direct",
3413
+ "billing.popSubLead": "Subscription",
3414
+ "billing.popBalanceNormal": "balance ok",
3415
+ "billing.popBalanceLow": "balance low",
3416
+ "billing.popQuotaNormal": "quota ok",
3417
+ "billing.popQuotaLow": "quota low",
3418
+ "billing.alertBalanceLow": "{name} balance low",
3419
+ "billing.alertQuotaLow": "{name} quota low",
3420
+ "billing.panelRelay": "Relay sites",
3421
+ "billing.relaySite": "Relay",
3422
+ "billing.relayDirect": "Direct",
3423
+ "billing.relayUnknown": "Unknown route",
3424
+ "billing.panelRelayQuota": "Relay quota",
3425
+ "billing.relayBalance": "Balance",
3426
+ "billing.relayNoQuota": "No quota",
3427
+ "billing.relayWindowUsed": "used",
3428
+ "billing.relayKindNewApi": "New API",
3429
+ "billing.relayKindSub2Api": "Sub2API",
3430
+ "billing.relayKindUnknown": "Unknown",
3431
+ "billing.relayCalls": "calls"
3324
3432
  };
3325
3433
  //#endregion
3326
3434
  //#region src/client/provider-display.ts
@@ -3772,6 +3880,49 @@ window.__ModuleLoader__.load({
3772
3880
  case "billing": return t("billing.subscriptionBilling");
3773
3881
  }
3774
3882
  }
3883
+ /** 由 bySite 的 key 解析站点行显示名与类别。 */
3884
+ function siteBucketLabel(key, t) {
3885
+ if (key.startsWith("site:")) return {
3886
+ name: key.slice(5),
3887
+ kind: "site"
3888
+ };
3889
+ if (key.startsWith("direct:")) return {
3890
+ name: key.slice(7),
3891
+ kind: "direct"
3892
+ };
3893
+ return {
3894
+ name: t("billing.relayUnknown"),
3895
+ kind: "unknown"
3896
+ };
3897
+ }
3898
+ /** 站点类别的文案(中转站 / 直连 / 未知路由)。 */
3899
+ function siteKindText(kind, t) {
3900
+ switch (kind) {
3901
+ case "site": return t("billing.relaySite");
3902
+ case "direct": return t("billing.relayDirect");
3903
+ default: return t("billing.relayUnknown");
3904
+ }
3905
+ }
3906
+ /** 中转站程序类型的徽标文案(New API / Sub2API / 未识别)。 */
3907
+ function relayKindText(kind, t) {
3908
+ switch (kind) {
3909
+ case "new-api": return t("billing.relayKindNewApi");
3910
+ case "sub2api": return t("billing.relayKindSub2Api");
3911
+ default: return t("billing.relayKindUnknown");
3912
+ }
3913
+ }
3914
+ /** 站点类别对应的样式类(bySite 桶与中转站额度徽标共用配色)。 */
3915
+ const SITE_KIND_CLASS = {
3916
+ site: UsageBilling_module_css_default.siteKindSite,
3917
+ direct: UsageBilling_module_css_default.siteKindDirect,
3918
+ unknown: UsageBilling_module_css_default.siteKindUnknown
3919
+ };
3920
+ /** 中转站程序类型对应的样式类(复用站点类别配色)。 */
3921
+ const RELAY_KIND_CLASS = {
3922
+ "new-api": UsageBilling_module_css_default.siteKindSite,
3923
+ sub2api: UsageBilling_module_css_default.siteKindDirect,
3924
+ unknown: UsageBilling_module_css_default.siteKindUnknown
3925
+ };
3775
3926
  /** Path to the usage-stats endpoint served by this plugin's node half. */
3776
3927
  const USAGE_STATS_PATH$1 = "/api/billing/usage-stats";
3777
3928
  /** Path to the live-pricing endpoint served by this plugin's node half. */
@@ -3780,6 +3931,8 @@ window.__ModuleLoader__.load({
3780
3931
  const BALANCE_PATH = "/api/billing/balance";
3781
3932
  /** Path to the subscription-plan quota endpoint served by this plugin's node half. */
3782
3933
  const SUBSCRIPTIONS_PATH$1 = "/api/billing/subscriptions";
3934
+ /** Path to the relay-site quota endpoint served by this plugin's node half. */
3935
+ const RELAY_PATH = "/api/billing/relay-quotas";
3783
3936
  /** 弹窗打开期间统计与定价的自动刷新间隔(毫秒)。 */
3784
3937
  const STATS_REFRESH_INTERVAL_MS = 3e4;
3785
3938
  /**
@@ -3915,6 +4068,22 @@ window.__ModuleLoader__.load({
3915
4068
  }
3916
4069
  }
3917
4070
  /**
4071
+ * 拉取中转站额度(New API / Sub2API 的余额与滚动窗口);失败返回空列表。
4072
+ * @returns the relay-site quota rows, or an empty list on any failure.
4073
+ */
4074
+ async function fetchRelayQuotas() {
4075
+ try {
4076
+ const response = await fetch(RELAY_PATH);
4077
+ if (!response.ok) return [];
4078
+ const text = await response.text();
4079
+ const parsed = JSON.parse(text);
4080
+ if (parsed !== null && typeof parsed === "object" && "quotas" in parsed) return parsed.quotas;
4081
+ return [];
4082
+ } catch {
4083
+ return [];
4084
+ }
4085
+ }
4086
+ /**
3918
4087
  * 读取 usage_stats 工具开关当前值(插件自带接口,不依赖宿主浏览器设置白名单)。
3919
4088
  * @returns 当前是否注入;读取失败(服务未起/非 JSON)返回 undefined。
3920
4089
  */
@@ -3953,7 +4122,7 @@ window.__ModuleLoader__.load({
3953
4122
  * @param props - framework props plus `wide` column state.
3954
4123
  */
3955
4124
  function UsageBillingTrigger(props) {
3956
- const { wide, t, onOpen, monthCost, todayCost, weekCost, days } = props;
4125
+ const { wide, t, onOpen, monthCost, todayCost, weekCost, days, vendorStatus, dash } = props;
3957
4126
  const cardIcon = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
3958
4127
  viewBox: "0 0 24 24",
3959
4128
  fill: "none",
@@ -4026,57 +4195,192 @@ window.__ModuleLoader__.load({
4026
4195
  className: UsageBilling_module_css_default.triggerPop,
4027
4196
  "data-testid": "billing-trigger-pop",
4028
4197
  "aria-hidden": "true",
4198
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4199
+ className: UsageBilling_module_css_default.triggerPopMetrics,
4200
+ children: [
4201
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4202
+ className: UsageBilling_module_css_default.triggerPopMetric,
4203
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4204
+ className: UsageBilling_module_css_default.triggerPopMetricLabel,
4205
+ children: t("billing.monthCost")
4206
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4207
+ className: clsx(UsageBilling_module_css_default.triggerPopMetricValue, UsageBilling_module_css_default.triggerPopMetricHighlight),
4208
+ children: formatMoney(monthCost)
4209
+ })]
4210
+ }),
4211
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4212
+ className: UsageBilling_module_css_default.triggerPopMetric,
4213
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4214
+ className: UsageBilling_module_css_default.triggerPopMetricLabel,
4215
+ children: t("billing.tokenTotal")
4216
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4217
+ className: UsageBilling_module_css_default.triggerPopMetricValue,
4218
+ children: formatTokens(dash.totalToken)
4219
+ })]
4220
+ }),
4221
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4222
+ className: UsageBilling_module_css_default.triggerPopMetric,
4223
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4224
+ className: UsageBilling_module_css_default.triggerPopMetricLabel,
4225
+ children: t("billing.input")
4226
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4227
+ className: UsageBilling_module_css_default.triggerPopMetricValue,
4228
+ children: formatTokens(dash.input)
4229
+ })]
4230
+ }),
4231
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4232
+ className: UsageBilling_module_css_default.triggerPopMetric,
4233
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4234
+ className: UsageBilling_module_css_default.triggerPopMetricLabel,
4235
+ children: t("billing.output")
4236
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4237
+ className: UsageBilling_module_css_default.triggerPopMetricValue,
4238
+ children: formatTokens(dash.output)
4239
+ })]
4240
+ }),
4241
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4242
+ className: UsageBilling_module_css_default.triggerPopMetric,
4243
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4244
+ className: UsageBilling_module_css_default.triggerPopMetricLabel,
4245
+ children: t("billing.cacheHit")
4246
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4247
+ className: UsageBilling_module_css_default.triggerPopMetricValue,
4248
+ children: formatTokens(dash.cacheRead)
4249
+ })]
4250
+ }),
4251
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4252
+ className: UsageBilling_module_css_default.triggerPopMetric,
4253
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4254
+ className: UsageBilling_module_css_default.triggerPopMetricLabel,
4255
+ children: t("billing.calls")
4256
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4257
+ className: UsageBilling_module_css_default.triggerPopMetricValue,
4258
+ children: dash.calls.toLocaleString()
4259
+ })]
4260
+ })
4261
+ ]
4262
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4263
+ className: UsageBilling_module_css_default.triggerPopFoot,
4264
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4265
+ className: UsageBilling_module_css_default.triggerPopFootTitle,
4266
+ children: t("billing.popTodayModel")
4267
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4268
+ className: UsageBilling_module_css_default.triggerPopFootNotes,
4269
+ children: [
4270
+ vendorStatus.direct !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4271
+ className: UsageBilling_module_css_default.triggerPopFootNote,
4272
+ children: [
4273
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4274
+ className: clsx(UsageBilling_module_css_default.triggerPopBadge, UsageBilling_module_css_default.triggerPopBadgeDirect),
4275
+ children: t("billing.popDirectLead")
4276
+ }),
4277
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4278
+ className: UsageBilling_module_css_default.triggerPopFootName,
4279
+ children: vendorStatus.direct.name
4280
+ }),
4281
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4282
+ className: clsx(UsageBilling_module_css_default.triggerPopFootStatus, vendorStatus.direct.low && UsageBilling_module_css_default.triggerPopFootStatusLow),
4283
+ children: vendorStatus.direct.text
4284
+ })
4285
+ ]
4286
+ }),
4287
+ vendorStatus.sub !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4288
+ className: UsageBilling_module_css_default.triggerPopFootNote,
4289
+ children: [
4290
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4291
+ className: clsx(UsageBilling_module_css_default.triggerPopBadge, UsageBilling_module_css_default.triggerPopBadgeSub),
4292
+ children: t("billing.popSubLead")
4293
+ }),
4294
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4295
+ className: UsageBilling_module_css_default.triggerPopFootName,
4296
+ children: vendorStatus.sub.name
4297
+ }),
4298
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4299
+ className: clsx(UsageBilling_module_css_default.triggerPopFootStatus, vendorStatus.sub.low && UsageBilling_module_css_default.triggerPopFootStatusLow),
4300
+ children: vendorStatus.sub.text
4301
+ })
4302
+ ]
4303
+ }),
4304
+ vendorStatus.direct === void 0 && vendorStatus.sub === void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4305
+ className: UsageBilling_module_css_default.triggerPopFootNote,
4306
+ children: t("billing.popNoConsumption")
4307
+ })
4308
+ ]
4309
+ })]
4310
+ })]
4311
+ })]
4312
+ });
4313
+ }
4314
+ /**
4315
+ * The centered billing dashboard modal.
4316
+ * @param props - stats, locale function, close handler, model health, balances, renderSlot.
4317
+ */
4318
+ /** 余额详情弹窗:点击「约可撑 N 天」圆圈后展示余额构成与可用天数估算。 */
4319
+ function BalanceDetailPopover({ balance, days, dailyBurn, money, t, onClose }) {
4320
+ const fmt = (value) => value === void 0 ? void 0 : balance.currency === "USD" ? `$${value.toFixed(2)}` : money(value);
4321
+ const total = fmt(balance.totalBalance);
4322
+ const granted = fmt(balance.grantedBalance);
4323
+ const topped = fmt(balance.toppedUpBalance);
4324
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4325
+ className: UsageBilling_module_css_default.balanceDetailPop,
4326
+ "data-testid": "billing-balance-detail-pop",
4327
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4328
+ className: UsageBilling_module_css_default.balanceDetailHead,
4329
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4330
+ className: UsageBilling_module_css_default.balanceDetailTitle,
4331
+ children: balance.displayName
4332
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
4333
+ type: "button",
4334
+ className: UsageBilling_module_css_default.balanceDetailClose,
4335
+ "aria-label": t("billing.close"),
4336
+ onClick: onClose,
4337
+ children: "×"
4338
+ })]
4339
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4340
+ className: UsageBilling_module_css_default.balanceDetailGrid,
4029
4341
  children: [
4030
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4031
- className: UsageBilling_module_css_default.triggerPopRow,
4032
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4033
- className: UsageBilling_module_css_default.triggerPopLabel,
4034
- children: t("billing.todayCost")
4035
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4036
- className: UsageBilling_module_css_default.triggerPopValue,
4037
- children: formatMoney(todayCost)
4038
- })]
4342
+ total !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(BalanceDetailRow, {
4343
+ label: t("billing.balance"),
4344
+ value: total
4039
4345
  }),
4040
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4041
- className: UsageBilling_module_css_default.triggerPopRow,
4042
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4043
- className: UsageBilling_module_css_default.triggerPopLabel,
4044
- children: t("billing.weekCost")
4045
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4046
- className: UsageBilling_module_css_default.triggerPopValue,
4047
- children: formatMoney(weekCost)
4048
- })]
4346
+ granted !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(BalanceDetailRow, {
4347
+ label: t("billing.balanceGranted"),
4348
+ value: granted
4049
4349
  }),
4050
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4051
- className: UsageBilling_module_css_default.triggerPopRow,
4052
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4053
- className: UsageBilling_module_css_default.triggerPopLabel,
4054
- children: t("billing.monthCost")
4055
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4056
- className: UsageBilling_module_css_default.triggerPopValue,
4057
- children: formatMoney(monthCost)
4058
- })]
4350
+ topped !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(BalanceDetailRow, {
4351
+ label: t("billing.balanceTopped"),
4352
+ value: topped
4059
4353
  }),
4060
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4061
- className: UsageBilling_module_css_default.triggerPopBars,
4062
- children: sparkHeights.map((_h, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4063
- className: UsageBilling_module_css_default.triggerPopBar,
4064
- style: { height: `${sparkMax > 0 ? 4 + (days[index]?.cost ?? 0) / sparkMax * 18 : 4}px` }
4065
- }, days[index]?.date ?? String(index)))
4354
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(BalanceDetailRow, {
4355
+ label: t("billing.balanceDaily"),
4356
+ value: money(dailyBurn)
4357
+ }),
4358
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(BalanceDetailRow, {
4359
+ label: t("billing.balanceDaysLong"),
4360
+ value: `${days} ${t("billing.balanceDaysUnit")}`
4066
4361
  })
4067
4362
  ]
4068
4363
  })]
4069
4364
  });
4070
4365
  }
4071
- /**
4072
- * The centered billing dashboard modal.
4073
- * @param props - stats, locale function, close handler, model health, balances, renderSlot.
4074
- */
4075
- function BillingDashboard({ stats, t, onClose, health, balances, quotas, currency, onCurrency, turns, renderSlot, budgetEnabled, budgetAmount, onToggleBudget, onBudgetAmount, peakConfig, onPeakConfig, onPreviewPeak }) {
4366
+ /** 余额详情弹窗里的一行 label / value。 */
4367
+ function BalanceDetailRow({ label, value }) {
4368
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4369
+ className: UsageBilling_module_css_default.balanceDetailRow,
4370
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4371
+ className: UsageBilling_module_css_default.balanceDetailLabel,
4372
+ children: label
4373
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4374
+ className: UsageBilling_module_css_default.balanceDetailValue,
4375
+ children: value
4376
+ })]
4377
+ });
4378
+ }
4379
+ function BillingDashboard({ stats, t, onClose, health, balances, quotas, relayQuotas, currency, onCurrency, turns, renderSlot, budgetEnabled, budgetAmount, onToggleBudget, onBudgetAmount, peakConfig, onPeakConfig, onPreviewPeak }) {
4076
4380
  const { total, byModel, byDay } = stats;
4077
4381
  const [tab, setTab] = (0, react.useState)("overview");
4078
4382
  const [trendDays, setTrendDays] = (0, react.useState)(7);
4079
- const [heatmapRange, setHeatmapRange] = (0, react.useState)("month");
4383
+ const [balanceDetailFor, setBalanceDetailFor] = (0, react.useState)();
4080
4384
  const [usageStatsEnabled, setUsageStatsEnabled] = (0, react.useState)(false);
4081
4385
  (0, react.useEffect)(() => {
4082
4386
  let mounted = true;
@@ -4129,6 +4433,7 @@ window.__ModuleLoader__.load({
4129
4433
  }, [stats.byRole, t]);
4130
4434
  const dailyBurn = dailyBurnRate(byDay, localDayStamp());
4131
4435
  const balanceFor = (provider) => balances.find((balance) => normalizeProvider(balance.provider) === normalizeProvider(provider));
4436
+ const hideBalanceForGroup = (group) => group.balance?.error === "unconfigured" && group.models.length > 0 && group.models.every((model) => model.plan);
4132
4437
  const renderBalance = (balance) => {
4133
4438
  if (balance === void 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4134
4439
  className: UsageBilling_module_css_default.na,
@@ -4143,15 +4448,33 @@ window.__ModuleLoader__.load({
4143
4448
  });
4144
4449
  const amount = balance.currency === "USD" ? `$${balance.totalBalance.toFixed(2)}` : money(balance.totalBalance);
4145
4450
  const balanceCny = balance.currency === "USD" ? balance.totalBalance * rateInfo.rate : balance.totalBalance;
4146
- if (dailyBurn <= 0) return amount;
4147
- const days = Math.floor(balanceCny / dailyBurn);
4451
+ const days = dailyBurn > 0 ? Math.floor(balanceCny / dailyBurn) : void 0;
4148
4452
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4149
4453
  className: UsageBilling_module_css_default.balanceCell,
4150
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: amount }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4151
- className: clsx(UsageBilling_module_css_default.balanceDays, days <= 3 && UsageBilling_module_css_default.balanceDaysLow),
4152
- "data-testid": "billing-balance-days",
4153
- children: t("billing.balanceDays").replace("{days}", String(days))
4154
- })]
4454
+ children: [
4455
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: amount }),
4456
+ days !== void 0 && days >= 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
4457
+ type: "button",
4458
+ className: clsx(UsageBilling_module_css_default.balanceDaysBadge, days <= 3 && UsageBilling_module_css_default.balanceDaysBadgeLow),
4459
+ "data-testid": "billing-balance-days-badge",
4460
+ title: t("billing.balanceDays").replace("{days}", String(days)),
4461
+ "aria-label": `${balance.displayName} ${t("billing.balanceDays").replace("{days}", String(days))}`,
4462
+ onClick: () => {
4463
+ setBalanceDetailFor(balanceDetailFor === balance.provider ? void 0 : balance.provider);
4464
+ },
4465
+ children: "?"
4466
+ }),
4467
+ balanceDetailFor === balance.provider && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(BalanceDetailPopover, {
4468
+ balance,
4469
+ days: days ?? 0,
4470
+ dailyBurn,
4471
+ money,
4472
+ t,
4473
+ onClose: () => {
4474
+ setBalanceDetailFor(void 0);
4475
+ }
4476
+ })
4477
+ ]
4155
4478
  });
4156
4479
  };
4157
4480
  const cacheHitRate = total.cacheHit + total.cacheMiss > 0 ? total.cacheHit / (total.cacheHit + total.cacheMiss) * 100 : 0;
@@ -4637,45 +4960,27 @@ window.__ModuleLoader__.load({
4637
4960
  "data-testid": "billing-panel-heatmap",
4638
4961
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4639
4962
  className: UsageBilling_module_css_default.panelHead,
4640
- children: [
4641
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
4642
- className: UsageBilling_module_css_default.panelTitle,
4643
- children: t("billing.heatmap")
4644
- }),
4645
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4646
- className: UsageBilling_module_css_default.rangeToggle,
4647
- role: "group",
4648
- "aria-label": t("billing.heatmap"),
4649
- children: ["month", "year"].map((range) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
4650
- type: "button",
4651
- className: clsx(UsageBilling_module_css_default.rangeButton, heatmapRange === range && UsageBilling_module_css_default.rangeButtonActive),
4652
- "aria-pressed": heatmapRange === range,
4653
- "data-testid": `billing-heatmap-${range}`,
4654
- onClick: () => {
4655
- setHeatmapRange(range);
4656
- },
4657
- children: range === "month" ? t("billing.heatmapMonth") : t("billing.heatmapYear")
4658
- }, range))
4659
- }),
4660
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4661
- className: UsageBilling_module_css_default.panelHint,
4662
- "data-testid": "billing-heatmap-summary",
4663
- children: [
4664
- t("billing.activeDays"),
4665
- " ",
4666
- activeDays,
4667
- " · ",
4668
- t("billing.streakDays"),
4669
- " ",
4670
- streakDays
4671
- ]
4672
- })
4673
- ]
4963
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
4964
+ className: UsageBilling_module_css_default.panelTitle,
4965
+ children: t("billing.heatmap")
4966
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4967
+ className: UsageBilling_module_css_default.panelHint,
4968
+ "data-testid": "billing-heatmap-summary",
4969
+ children: [
4970
+ t("billing.activeDays"),
4971
+ " ",
4972
+ activeDays,
4973
+ " · ",
4974
+ t("billing.streakDays"),
4975
+ " ",
4976
+ streakDays
4977
+ ]
4978
+ })]
4674
4979
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(UsageHeatmap, {
4675
4980
  days: heatmapDays,
4676
4981
  currency,
4677
4982
  t,
4678
- range: heatmapRange
4983
+ range: "month"
4679
4984
  })]
4680
4985
  })
4681
4986
  ]
@@ -5072,6 +5377,99 @@ window.__ModuleLoader__.load({
5072
5377
  className: UsageBilling_module_css_default.tabPanel,
5073
5378
  "data-testid": "billing-tab-panel-providers",
5074
5379
  children: [
5380
+ stats.bySite !== void 0 && Object.keys(stats.bySite).length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
5381
+ className: UsageBilling_module_css_default.panel,
5382
+ "data-testid": "billing-panel-relay-sites",
5383
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
5384
+ className: UsageBilling_module_css_default.panelHead,
5385
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
5386
+ className: UsageBilling_module_css_default.panelTitle,
5387
+ children: t("billing.panelRelay")
5388
+ })
5389
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
5390
+ className: UsageBilling_module_css_default.providerGroupList,
5391
+ "data-testid": "billing-relay-sites",
5392
+ children: Object.entries(stats.bySite).sort((a, b) => (b[1].cost ?? 0) - (a[1].cost ?? 0)).map(([siteKey, usage]) => {
5393
+ const site = siteBucketLabel(siteKey, t);
5394
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5395
+ className: UsageBilling_module_css_default.siteRow,
5396
+ "data-testid": "billing-relay-site",
5397
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
5398
+ className: UsageBilling_module_css_default.siteRowName,
5399
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5400
+ className: clsx(UsageBilling_module_css_default.siteKindTag, SITE_KIND_CLASS[site.kind]),
5401
+ children: siteKindText(site.kind, t)
5402
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5403
+ className: UsageBilling_module_css_default.siteRowTitle,
5404
+ children: site.name
5405
+ })]
5406
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
5407
+ className: UsageBilling_module_css_default.siteRowMeta,
5408
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5409
+ className: UsageBilling_module_css_default.siteRowCost,
5410
+ children: money(usage.cost)
5411
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
5412
+ className: UsageBilling_module_css_default.siteRowCalls,
5413
+ children: [
5414
+ usage.calls,
5415
+ " ",
5416
+ t("billing.relayCalls")
5417
+ ]
5418
+ })]
5419
+ })]
5420
+ }, siteKey);
5421
+ })
5422
+ })]
5423
+ }),
5424
+ relayQuotas.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
5425
+ className: UsageBilling_module_css_default.panel,
5426
+ "data-testid": "billing-panel-relay-quota",
5427
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
5428
+ className: UsageBilling_module_css_default.panelHead,
5429
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
5430
+ className: UsageBilling_module_css_default.panelTitle,
5431
+ children: t("billing.panelRelayQuota")
5432
+ })
5433
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
5434
+ className: UsageBilling_module_css_default.providerGroupList,
5435
+ "data-testid": "billing-relay-quotas",
5436
+ children: relayQuotas.map((row) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5437
+ className: UsageBilling_module_css_default.siteRow,
5438
+ "data-testid": "billing-relay-quota",
5439
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
5440
+ className: UsageBilling_module_css_default.siteRowName,
5441
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5442
+ className: clsx(UsageBilling_module_css_default.siteKindTag, RELAY_KIND_CLASS[row.kind]),
5443
+ children: relayKindText(row.kind, t)
5444
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5445
+ className: UsageBilling_module_css_default.siteRowTitle,
5446
+ children: row.origin
5447
+ })]
5448
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
5449
+ className: UsageBilling_module_css_default.siteRowMeta,
5450
+ children: [row.balance !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
5451
+ className: UsageBilling_module_css_default.siteRowCost,
5452
+ children: [
5453
+ t("billing.relayBalance"),
5454
+ " ",
5455
+ row.balance.toFixed(2)
5456
+ ]
5457
+ }), (row.windows?.length ?? 0) > 0 ? row.windows?.map((window) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
5458
+ className: UsageBilling_module_css_default.siteRowCalls,
5459
+ children: [
5460
+ t("billing.relayWindowUsed"),
5461
+ " ",
5462
+ window.usedPercent,
5463
+ "%"
5464
+ ]
5465
+ }, window.kind)) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5466
+ className: UsageBilling_module_css_default.siteRowCalls,
5467
+ children: t("billing.relayNoQuota")
5468
+ })]
5469
+ })]
5470
+ }, row.route))
5471
+ })]
5472
+ }),
5075
5473
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
5076
5474
  className: UsageBilling_module_css_default.panel,
5077
5475
  "data-testid": "billing-panel-providers",
@@ -5116,7 +5514,7 @@ window.__ModuleLoader__.load({
5116
5514
  className: UsageBilling_module_css_default.providerGroupBadge,
5117
5515
  "data-testid": "billing-provider-sub-count",
5118
5516
  children: [group.subscriptions.length, " 套餐"]
5119
- }), group.balance !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
5517
+ }), !hideBalanceForGroup(group) && group.balance !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
5120
5518
  className: UsageBilling_module_css_default.providerGroupBalance,
5121
5519
  "data-testid": "billing-provider-balance",
5122
5520
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -5300,13 +5698,15 @@ window.__ModuleLoader__.load({
5300
5698
  style: { width: `${used}%` }
5301
5699
  })
5302
5700
  }),
5303
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5304
- className: clsx(UsageBilling_module_css_default.subscriptionPct, exhausted && UsageBilling_module_css_default.subscriptionExhausted),
5305
- children: exhausted ? t("billing.subscriptionExhausted") : t("billing.subscriptionRemaining").replace("{pct}", String(window.remainingPercent))
5306
- }),
5307
- window.resetsAt !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5308
- className: UsageBilling_module_css_default.subscriptionReset,
5309
- children: t("billing.subscriptionReset").replace("{date}", `${localDayStamp(new Date(window.resetsAt).getTime())} ${formatClock(new Date(window.resetsAt).getTime())}`)
5701
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
5702
+ className: UsageBilling_module_css_default.subscriptionMeta,
5703
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5704
+ className: clsx(UsageBilling_module_css_default.subscriptionPct, exhausted && UsageBilling_module_css_default.subscriptionExhausted),
5705
+ children: exhausted ? t("billing.subscriptionExhausted") : t("billing.subscriptionRemaining").replace("{pct}", String(window.remainingPercent))
5706
+ }), window.resetsAt !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5707
+ className: UsageBilling_module_css_default.subscriptionReset,
5708
+ children: t("billing.subscriptionReset").replace("{date}", `${localDayStamp(new Date(window.resetsAt).getTime())} ${formatClock(new Date(window.resetsAt).getTime())}`)
5709
+ })]
5310
5710
  })
5311
5711
  ]
5312
5712
  }, window.kind);
@@ -5759,6 +6159,7 @@ window.__ModuleLoader__.load({
5759
6159
  const [health, setHealth] = (0, react.useState)(IDLE_HEALTH);
5760
6160
  const [balances, setBalances] = (0, react.useState)([]);
5761
6161
  const [quotas, setQuotas] = (0, react.useState)([]);
6162
+ const [relayQuotas, setRelayQuotas] = (0, react.useState)([]);
5762
6163
  const [currency, setCurrency] = (0, react.useState)("cny");
5763
6164
  const lang = currency === "usd" ? "en" : "zh";
5764
6165
  const t = (0, react.useCallback)((key, params) => {
@@ -5782,6 +6183,9 @@ window.__ModuleLoader__.load({
5782
6183
  fetchSubscriptions().then((list) => {
5783
6184
  if (list.length > 0) setQuotas(list);
5784
6185
  });
6186
+ fetchRelayQuotas().then((list) => {
6187
+ if (list.length > 0) setRelayQuotas(list);
6188
+ });
5785
6189
  }, []);
5786
6190
  const openDashboard = (0, react.useCallback)(() => {
5787
6191
  reloadStats();
@@ -5919,6 +6323,80 @@ window.__ModuleLoader__.load({
5919
6323
  actions,
5920
6324
  t
5921
6325
  ]);
6326
+ const vendorStatus = (0, react.useMemo)(() => {
6327
+ const prefix = today.slice(0, 7);
6328
+ const vendor = /* @__PURE__ */ new Map();
6329
+ for (const [date, models] of Object.entries(stats.byDayModels ?? {})) {
6330
+ if (!date.startsWith(prefix)) continue;
6331
+ for (const [modelKey, usage] of Object.entries(models)) {
6332
+ if (usage.cost <= 0) continue;
6333
+ const provider = modelOf(modelKey).provider ?? "其他";
6334
+ const isPlan = stats.byModel?.[modelKey]?.plan === true;
6335
+ const cur = vendor.get(provider) ?? {
6336
+ cost: 0,
6337
+ plan: isPlan
6338
+ };
6339
+ cur.cost += usage.cost;
6340
+ if (!isPlan) cur.plan = false;
6341
+ vendor.set(provider, cur);
6342
+ }
6343
+ }
6344
+ const directEntry = [...vendor.entries()].filter(([, v]) => !v.plan).sort((a, b) => b[1].cost - a[1].cost)[0];
6345
+ const subEntry = [...vendor.entries()].filter(([, v]) => v.plan).sort((a, b) => b[1].cost - a[1].cost)[0];
6346
+ const balanceStatus = (name) => {
6347
+ const bal = balances.find((b) => normalizeProvider(b.provider) === normalizeProvider(name));
6348
+ if (bal === void 0 || bal.totalBalance === void 0) return {
6349
+ text: bal?.error === "unauthorized" ? t("billing.balanceUnauthorized") : bal?.error === "unreachable" || bal?.error === "invalid" ? t("billing.balanceUnreachable") : t("billing.balanceUnconfigured"),
6350
+ low: false
6351
+ };
6352
+ const amount = bal.currency === "USD" ? `$${bal.totalBalance.toFixed(2)}` : formatMoney(bal.totalBalance);
6353
+ const rate = getRateInfo().rate;
6354
+ return {
6355
+ text: amount,
6356
+ low: (bal.currency === "USD" ? bal.totalBalance * rate : bal.totalBalance) < (stats.lowBalanceThreshold ?? DEFAULT_LOW_BALANCE_THRESHOLD)
6357
+ };
6358
+ };
6359
+ const quotaStatus = (name) => {
6360
+ const q = quotas.find((qq) => qq.displayName === name || subscriptionVendorOf(qq.provider) === name);
6361
+ if (q === void 0 || q.windows.length === 0) return {
6362
+ text: t("billing.subscriptionNoApi"),
6363
+ low: false
6364
+ };
6365
+ const lowest = q.windows.reduce((min, window) => Math.min(min, window.remainingPercent), 100);
6366
+ return {
6367
+ text: lowest <= 0 ? t("billing.subscriptionExhausted") : t("billing.subscriptionRemaining").replace("{pct}", String(lowest)),
6368
+ low: lowest < 20
6369
+ };
6370
+ };
6371
+ return {
6372
+ direct: directEntry === void 0 ? void 0 : {
6373
+ name: directEntry[0],
6374
+ ...balanceStatus(directEntry[0])
6375
+ },
6376
+ sub: subEntry === void 0 ? void 0 : {
6377
+ name: subEntry[0],
6378
+ ...quotaStatus(subEntry[0])
6379
+ }
6380
+ };
6381
+ }, [
6382
+ stats.byDayModels,
6383
+ stats.byModel,
6384
+ stats.lowBalanceThreshold,
6385
+ balances,
6386
+ quotas,
6387
+ today
6388
+ ]);
6389
+ const dash = (0, react.useMemo)(() => {
6390
+ const total = stats.total;
6391
+ return {
6392
+ totalToken: total.input + total.output,
6393
+ input: total.input,
6394
+ output: total.output,
6395
+ cacheRead: total.cacheHit,
6396
+ calls: total.calls,
6397
+ updatedAt: stats.updatedAt === void 0 ? void 0 : `${localDayStamp(stats.updatedAt)} ${formatClock(stats.updatedAt)}`
6398
+ };
6399
+ }, [stats]);
5922
6400
  (0, react.useEffect)(() => {
5923
6401
  publishCosts({
5924
6402
  todayCost,
@@ -5939,7 +6417,9 @@ window.__ModuleLoader__.load({
5939
6417
  monthCost,
5940
6418
  todayCost,
5941
6419
  weekCost,
5942
- days: last7
6420
+ days: last7,
6421
+ vendorStatus,
6422
+ dash
5943
6423
  }),
5944
6424
  open && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(BillingDashboard, {
5945
6425
  stats,
@@ -5948,6 +6428,7 @@ window.__ModuleLoader__.load({
5948
6428
  health,
5949
6429
  balances,
5950
6430
  quotas,
6431
+ relayQuotas,
5951
6432
  currency,
5952
6433
  onCurrency: setCurrency,
5953
6434
  turns,