@kenz1117/dsh-ui-usage-billing 0.9.7 → 0.9.9

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