@kenz1117/dsh-ui-usage-billing 0.9.20 → 1.0.1

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
@@ -60,7 +60,7 @@ window.__ModuleLoader__.load({
60
60
  }
61
61
  //#endregion
62
62
  //#region \0dsh-css:/Users/ken/deepseek-harness/packages/client/ui-usage-billing/src/client/UsageBilling.module.css.mjs
63
- 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;text-overflow:ellipsis;min-width:0;font-size:17px;font-weight:700;line-height:21px;overflow:hidden}.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;text-overflow:ellipsis;min-width:0;font-size:9.5px;font-weight:600;line-height:12px;overflow:hidden}.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;container:VWh0dG_billing-trigger/inline-size}@container VWh0dG_billing-trigger (width<=280px){.VWh0dG_trigger{gap:6px;padding:8px 10px}.VWh0dG_triggerSpark{display:none}}@container VWh0dG_billing-trigger (width<=230px){.VWh0dG_triggerSub{display:none}.VWh0dG_triggerMeta{letter-spacing:0}}@container VWh0dG_billing-trigger (width<=120px){.VWh0dG_triggerIcon,.VWh0dG_triggerSpark,.VWh0dG_triggerSub,.VWh0dG_triggerMeta{display:none}.VWh0dG_trigger{justify-content:center;padding:8px 6px}}.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_reconcileNotice{border:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 78%, transparent);background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 62%, transparent);color:var(--dsw-alias-label-secondary);border-radius:10px;align-items:flex-start;gap:10px;padding:10px 12px;font-size:12px;line-height:1.55;display:flex}.VWh0dG_reconcileIcon{color:var(--dsw-alias-label-tertiary);flex:none;margin-top:1px;display:inline-flex}.VWh0dG_reconcileText{flex:1}.VWh0dG_reconcileDismiss{color:var(--dsw-alias-label-tertiary);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:6px;flex:none;padding:2px 8px;font-size:12px;line-height:1.4;transition:color .15s,background-color .15s}.VWh0dG_reconcileDismiss:hover{color:var(--dsw-alias-label-primary);background:color-mix(in srgb, var(--dsw-alias-label-primary) 8%, transparent)}.VWh0dG_hero{border:1px solid var(--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_unpricedHint{border:1px solid color-mix(in srgb, var(--dsw-static-amber-500) 30%, transparent);background:color-mix(in srgb, var(--dsw-static-amber-500) 8%, transparent);color:var(--dsw-static-amber-500);border-radius:8px;align-items:center;padding:8px 12px;font-size:11.5px;font-weight:500;line-height:17px;display:flex}.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-primary);font-size:13px;font-weight:600}.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_chartBarPlaceholder{fill:color-mix(in srgb, var(--dsw-alias-label-secondary) 30%, transparent)}.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_siteRowCallsLow{color:var(--dsw-static-red-500)}.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_heatmapRangeSwitch{gap:4px;margin-left:auto;display:inline-flex}.VWh0dG_heatmapRangeButton{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-text-secondary);cursor:pointer;background:0 0;border-radius:6px;padding:2px 8px;font-size:11px;line-height:1.4}.VWh0dG_heatmapRangeButtonActive{color:var(--dsw-alias-text-primary);border-color:currentColor;font-weight:600}.VWh0dG_heatmapYear{flex-direction:column;gap:6px;display:flex}.VWh0dG_heatmapYearBody{align-items:flex-start;gap:6px;display:flex}.VWh0dG_heatmapYearWeekdays{color:var(--dsw-alias-text-tertiary);flex:none;grid-template-rows:repeat(7,11px);gap:3px;padding-top:12px;font-size:9px;line-height:11px;display:grid}.VWh0dG_heatmapYearWeekday{white-space:nowrap;text-align:right;height:11px}.VWh0dG_heatmapYearMonths{min-width:max-content;color:var(--dsw-alias-text-tertiary);grid-template-columns:repeat(52,11px);gap:3px;font-size:9px;line-height:12px;display:grid;overflow:visible}.VWh0dG_heatmapYearMonth{white-space:nowrap;overflow:visible}.VWh0dG_heatmapYearScroll{padding-bottom:2px;overflow-x:auto}.VWh0dG_heatmapYearGrid{grid-template-rows:repeat(7,11px);grid-auto-flow:column;gap:3px;min-width:max-content;display:grid}.VWh0dG_heatmapYearCell{cursor:pointer;border:0;border-radius:2px;width:11px;height:11px;padding:0}.VWh0dG_triggerPopSubscription{width:auto;left:0;right:0}.VWh0dG_floatSub{flex-direction:column;gap:6px;min-width:0;display:flex}.VWh0dG_floatSubHead{flex-wrap:wrap;align-items:baseline;gap:6px;min-width:0;display:flex}.VWh0dG_floatSubName{color:var(--dsw-alias-label-primary);font-size:12px;font-weight:700}.VWh0dG_floatSubPlan{color:var(--dsw-alias-label-secondary);font-size:10px}.VWh0dG_floatSub .VWh0dG_subscriptionWindow{flex-wrap:wrap;gap:4px 10px}.VWh0dG_floatSub .VWh0dG_subscriptionWindowLabel{flex:none}.VWh0dG_floatSub .VWh0dG_subscriptionMeta{min-width:0;max-width:100%}.VWh0dG_floatSub .VWh0dG_subscriptionPct{min-width:0}.VWh0dG_floatSub .VWh0dG_subscriptionReset{white-space:normal;overflow-wrap:anywhere}.VWh0dG_triggerPopEmpty{color:var(--dsw-alias-label-tertiary);padding:2px 0;font-size:11px;line-height:1.5}.VWh0dG_triggerPopSwitcher{justify-content:flex-end;align-items:center;gap:8px;margin-top:2px;display:flex}.VWh0dG_triggerPopSwitchBtn{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:6px;padding:2px 4px;font-size:14px;line-height:1}.VWh0dG_triggerPopSwitchBtn:hover{color:var(--dsw-alias-label-primary);background:color-mix(in srgb, var(--dsw-alias-border-l1) 45%, transparent)}.VWh0dG_triggerPopSwitchCount{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;font-size:10px}.VWh0dG_floatModeRow{gap:8px;margin-bottom:8px;display:flex}.VWh0dG_floatModeBtn{border:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 75%, transparent);background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 60%, transparent);color:var(--dsw-alias-label-secondary);cursor:pointer;border-radius:10px;flex:1;padding:7px 10px;font-size:12px}.VWh0dG_floatModeBtnOn{border-color:var(--dsw-static-blue-500);color:var(--dsw-alias-label-primary);background:color-mix(in srgb, var(--dsw-static-blue-500) 16%, transparent)}.VWh0dG_floatTargets{flex-wrap:wrap;gap:6px;margin-bottom:8px;display:flex}.VWh0dG_floatTarget{color:var(--dsw-alias-label-secondary);cursor:pointer;align-items:center;gap:5px;font-size:12px;display:inline-flex}.VWh0dG_floatTargetLabel{color:var(--dsw-alias-label-secondary)}.VWh0dG_staleNotice{color:var(--dsw-static-amber-500);background:color-mix(in srgb, var(--dsw-static-amber-500) 12%, transparent);border:1px solid color-mix(in srgb, var(--dsw-static-amber-500) 30%, transparent);border-radius:10px;align-items:center;gap:6px;margin:0 0 10px;padding:8px 10px;font-size:11px;display:flex}.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}";
63
+ 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:14px;align-items:center;gap:10px;padding:9px 12px;transition:border-color .16s,transform .16s,box-shadow .16s;display:flex;position:relative;overflow:hidden;box-shadow:0 1px 2px #0000000a}.VWh0dG_trigger:hover,.VWh0dG_trigger:focus-visible{border-color:var(--dsw-static-blue-500);box-shadow:0 6px 18px -8px color-mix(in srgb, var(--dsw-static-blue-500) 45%, transparent);outline:none;transform:translateY(-1px)}.VWh0dG_triggerIcon{border:1px solid var(--dsw-alias-border-l1);width:32px;height:32px;color:var(--dsw-alias-label-secondary);opacity:.8;border-radius:8px;flex:none;justify-content:center;align-items:center;display:inline-flex}.VWh0dG_triggerIcon svg{stroke-width:2px;width:16px;height:16px}.VWh0dG_triggerMain{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.VWh0dG_triggerPrimary{align-items:baseline;gap:5px;min-width:0;display:inline-flex}.VWh0dG_triggerLabel{color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:11px;line-height:15px;overflow:hidden}.VWh0dG_triggerYen{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;font-size:12px;font-weight:600;line-height:16px}.VWh0dG_triggerMetric{color:var(--dsw-alias-label-primary);letter-spacing:-.02em;font-variant-numeric:tabular-nums;white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:20px;font-weight:700;line-height:24px;overflow:hidden}.VWh0dG_triggerSub{color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;font-size:10px;line-height:14px;overflow:hidden}.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;container:VWh0dG_billing-trigger/inline-size}@container VWh0dG_billing-trigger (width<=200px){.VWh0dG_trigger{gap:6px;padding:8px 10px}.VWh0dG_triggerSpark{display:none}}@container VWh0dG_billing-trigger (width<=170px){.VWh0dG_triggerSub,.VWh0dG_triggerLabel{display:none}}@container VWh0dG_billing-trigger (width<=110px){.VWh0dG_triggerIcon,.VWh0dG_triggerSpark,.VWh0dG_triggerSub,.VWh0dG_triggerLabel{display:none}.VWh0dG_trigger{justify-content:center;padding:8px 6px}}.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_popHead{justify-content:space-between;align-items:baseline;gap:8px;display:flex}.VWh0dG_popTitle{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:700;line-height:18px}.VWh0dG_metricGrid{grid-template-columns:repeat(3,1fr);gap:10px 8px;display:grid}.VWh0dG_metricCell{flex-direction:column;gap:2px;min-width:0;display:flex}.VWh0dG_metricLabel{color:var(--dsw-alias-label-tertiary);font-size:10px;line-height:14px}.VWh0dG_metricValue{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:12px;font-weight:700;line-height:16px}.VWh0dG_metricValuePrimary{color:var(--dsw-static-amber-500)}.VWh0dG_metricValueSuccess{color:var(--dsw-static-green-500)}.VWh0dG_popModel{border-top:1px solid var(--dsw-alias-border-l1);flex-direction:column;gap:6px;padding-top:10px;display:flex}.VWh0dG_popModelLabel{color:var(--dsw-alias-label-tertiary);font-size:10px;line-height:14px}.VWh0dG_popModelRow{align-items:center;gap:8px;min-width:0;display:flex}.VWh0dG_popDot{border-radius:999px;flex:none;width:6px;height:6px}.VWh0dG_popDotDirect{background:var(--dsw-static-green-500)}.VWh0dG_popDotSub{background:var(--dsw-static-amber-500)}.VWh0dG_popDotNeutral{background:var(--dsw-alias-label-tertiary)}.VWh0dG_popTagPrimary,.VWh0dG_popTagSub{white-space:nowrap;border-radius:5px;flex:none;align-items:center;height:18px;padding:0 6px;font-size:10px;font-weight:600;line-height:14px;display:inline-flex}.VWh0dG_popTagPrimary{background:color-mix(in srgb, var(--dsw-static-blue-500) 14%, transparent);color:var(--dsw-static-blue-500)}.VWh0dG_popTagSub{background:color-mix(in srgb, var(--dsw-static-amber-500) 18%, transparent);color:var(--dsw-static-amber-500)}.VWh0dG_popModelName{color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:500;line-height:16px;overflow:hidden}.VWh0dG_popModelStatus{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;white-space:nowrap;margin-left:auto;font-size:11px;font-weight:600;line-height:16px}.VWh0dG_popModelStatusLow{color:var(--dsw-static-red-500)}.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);border-radius:16px;width:min(760px,100vw - 48px);max-height:min(760px,88vh);animation:.18s ease-out VWh0dG_dashboardIn;box-shadow:0 12px 32px -12px #0000002e,0 2px 8px #0000000f}@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:center;gap:12px;padding:20px 24px;display:flex}.VWh0dG_dashboardTitle{color:var(--dsw-alias-label-primary);margin:0;font-size:16px;font-weight:600;line-height:24px}.VWh0dG_dashboardSubtitle{color:var(--dsw-alias-label-caption);margin:2px 0 0;font-size:11px;line-height:16px}.VWh0dG_closeButton{border:1px solid var(--dsw-alias-border-l1);width:32px;height:32px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border-radius:8px;flex:none;justify-content:center;align-items:center;transition:background-color .14s,color .14s;display:inline-flex}.VWh0dG_closeButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.VWh0dG_closeButton svg{stroke-width:2px;width:16px;height:16px}.VWh0dG_dashboardBody{flex-direction:column;gap:14px;padding:16px 24px 24px;display:flex;overflow-y:auto}.VWh0dG_modalFooter{border-top:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-tertiary);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;padding:12px 24px;font-size:11px;line-height:16px;display:flex}.VWh0dG_tabNav{border-bottom:1px solid var(--dsw-alias-border-l1);align-items:center;gap:4px;padding:0 24px;display:flex}.VWh0dG_tabButton{color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:8px;margin:8px 0;padding:6px 12px;font-size:13px;font-weight:500;line-height:20px;transition:background-color .16s,color .16s}.VWh0dG_tabButton:hover,.VWh0dG_tabButton:focus-visible{color:var(--dsw-alias-label-primary);background:color-mix(in srgb, var(--dsw-alias-bg-layer-3) 62%, transparent);outline:none}.VWh0dG_tabButtonActive,.VWh0dG_tabButtonActive:hover,.VWh0dG_tabButtonActive:focus-visible{background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-primary);font-weight:600}.VWh0dG_tabPanel{flex-direction:column;gap:14px;animation:.14s ease-out VWh0dG_tabPanelIn;display:flex}@keyframes VWh0dG_tabPanelIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.VWh0dG_reconcileNotice{border:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 78%, transparent);background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 62%, transparent);color:var(--dsw-alias-label-secondary);border-radius:10px;align-items:flex-start;gap:10px;padding:10px 12px;font-size:12px;line-height:1.55;display:flex}.VWh0dG_reconcileIcon{color:var(--dsw-alias-label-tertiary);flex:none;margin-top:1px;display:inline-flex}.VWh0dG_reconcileText{flex:1}.VWh0dG_reconcileDismiss{color:var(--dsw-alias-label-tertiary);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:6px;flex:none;padding:2px 8px;font-size:12px;line-height:1.4;transition:color .15s,background-color .15s}.VWh0dG_reconcileDismiss:hover{color:var(--dsw-alias-label-primary);background:color-mix(in srgb, var(--dsw-alias-label-primary) 8%, transparent)}.VWh0dG_hero{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:12px;flex-direction:column;gap:18px;padding: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);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:22px;font-weight:600;line-height:28px}.VWh0dG_heroValue{letter-spacing:-.02em;font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--dsw-alias-label-primary);font-size:40px;font-weight:700;line-height:48px}.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_heroBudget{border-top:1px solid var(--dsw-alias-border-l1);align-items:center;gap:14px;padding-top:14px;display:flex}.VWh0dG_heroBudgetLabel{color:var(--dsw-alias-label-secondary);white-space:nowrap;flex:none;font-size:11px;line-height:16px}.VWh0dG_heroBudgetTrack{background:var(--dsw-alias-border-l1);border-radius:999px;flex:1;min-width:0;height:6px;overflow:hidden}.VWh0dG_heroBudgetFill{background:var(--dsw-static-blue-500);border-radius:999px;height:100%;transition:width .22s}.VWh0dG_heroBudgetFillOver{background:var(--dsw-static-red-500)}.VWh0dG_heroBudgetValue{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;white-space:nowrap;flex:none;font-size:11px;line-height:16px}.VWh0dG_heroSide{border-top:1px solid var(--dsw-alias-border-l1);align-items:stretch;padding-top:14px;display:flex}.VWh0dG_heroSideItem{border-left:1px solid var(--dsw-alias-border-l1);flex-direction:column;flex:1;gap:3px;min-width:0;padding-left:16px;display:flex}.VWh0dG_heroSideItem:first-child{border-left:none;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_unpricedHint{border:1px solid color-mix(in srgb, var(--dsw-static-amber-500) 30%, transparent);background:color-mix(in srgb, var(--dsw-static-amber-500) 8%, transparent);color:var(--dsw-static-amber-500);border-radius:8px;align-items:center;padding:8px 12px;font-size:11.5px;font-weight:500;line-height:17px;display:flex}.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-2);border-radius:12px;flex-direction:column;gap:3px;padding:16px;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:24px;font-weight:600;line-height:32px}.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-2);border-radius:12px;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-primary);font-size:13px;font-weight:600}.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_chartBarPlaceholder{fill:color-mix(in srgb, var(--dsw-alias-label-secondary) 30%, transparent)}.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_ubAlert{border:1px solid color-mix(in srgb, var(--dsw-static-blue-500) 30%, transparent);background:color-mix(in srgb, var(--dsw-static-blue-500) 8%, transparent);border-radius:10px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;padding:10px 14px;font-size:12px;line-height:17px;display:flex}.VWh0dG_ubAlertLeft{align-items:center;gap:8px;display:inline-flex}.VWh0dG_ubRate{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-weight:600}.VWh0dG_ubAlertNote{color:var(--dsw-alias-label-secondary);margin:0}.VWh0dG_ubTag,.VWh0dG_ubTagSuccess,.VWh0dG_ubTagNeutral,.VWh0dG_ubTagAlert{white-space:nowrap;border-radius:999px;align-items:center;height:18px;padding:0 7px;font-size:10px;font-weight:600;line-height:14px;display:inline-flex}.VWh0dG_ubTagSuccess{background:color-mix(in srgb, var(--dsw-static-green-500) 14%, transparent);color:var(--dsw-static-green-500)}.VWh0dG_ubTagNeutral{background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-secondary)}.VWh0dG_ubTagAlert{background:color-mix(in srgb, var(--dsw-static-amber-500) 16%, transparent);color:var(--dsw-static-amber-500)}.VWh0dG_ubCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:12px;flex-direction:column;gap:12px;padding:16px 18px;display:flex}.VWh0dG_ubCardHead{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.VWh0dG_ubCardTitle{color:var(--dsw-alias-label-primary);margin:0;font-size:13px;font-weight:600;line-height:18px}.VWh0dG_ubCardSub{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.VWh0dG_ubTablewrap{border:1px solid var(--dsw-alias-border-l1);border-radius:10px;overflow:auto}.VWh0dG_ubTable{border-collapse:collapse;white-space:nowrap;width:100%;font-size:12.5px}.VWh0dG_ubTable th,.VWh0dG_ubTable td{border-bottom:1px solid var(--dsw-alias-border-l1);text-align:left;padding:9px 12px}.VWh0dG_ubTable tbody tr:last-child td{border-bottom:0}.VWh0dG_ubTable thead th{color:var(--dsw-alias-label-tertiary);text-transform:uppercase;letter-spacing:.05em;font-size:11px;font-weight:600}.VWh0dG_ubModel{align-items:center;gap:8px;display:inline-flex}.VWh0dG_ubModelDot{border-radius:50%;flex:none;width:9px;height:9px}.VWh0dG_ubModelName{color:var(--dsw-alias-label-primary);align-items:center;gap:6px;font-weight:500;display:inline-flex}.VWh0dG_ubPricepair{flex-wrap:wrap;gap:6px;display:inline-flex}.VWh0dG_ubChipPeak,.VWh0dG_ubChipOff{font-variant-numeric:tabular-nums;border-radius:999px;align-items:center;gap:5px;height:20px;padding:0 8px;font-size:11px;line-height:16px;display:inline-flex}.VWh0dG_ubChipLabel{font-size:10px;font-weight:600}.VWh0dG_ubChipPeak{background:color-mix(in srgb, var(--dsw-static-blue-500) 14%, transparent);color:var(--dsw-static-blue-500)}.VWh0dG_ubChipOff{background:color-mix(in srgb, var(--dsw-static-green-500) 14%, transparent);color:var(--dsw-static-green-500)}.VWh0dG_ubNotes{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.VWh0dG_ubNotesItem{align-items:baseline;gap:10px;display:flex}.VWh0dG_ubNotesTerm{color:var(--dsw-alias-label-primary);flex:0 0 72px;font-size:12px;font-weight:500}.VWh0dG_ubNotesDesc{min-width:0;color:var(--dsw-alias-label-secondary);flex:1;font-size:12px;line-height:17px}.VWh0dG_ubCardControlGroup{flex-wrap:wrap;align-items:center;gap:8px;display:inline-flex}.VWh0dG_ubTagError{white-space:nowrap;background:color-mix(in srgb, var(--dsw-static-red-500) 14%, transparent);height:18px;color:var(--dsw-static-red-500);border-radius:999px;align-items:center;padding:0 7px;font-size:10px;font-weight:600;line-height:14px;display:inline-flex}.VWh0dG_ubStatGrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.VWh0dG_ubStatCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:12px;flex-direction:column;gap:4px;padding:14px 16px;display:flex}.VWh0dG_ubStatLabel{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.VWh0dG_ubStatValue{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;letter-spacing:-.01em;font-size:22px;font-weight:700;line-height:28px}.VWh0dG_ubStatDetail{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;font-size:11px;line-height:16px}.VWh0dG_rowlist{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.VWh0dG_rowline{width:100%;min-width:0;color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:10px;justify-content:space-between;align-items:center;gap:12px;padding:9px 12px;transition:background-color .14s,border-color .14s;display:flex}.VWh0dG_rowline:hover{background:color-mix(in srgb, var(--dsw-alias-bg-layer-3) 60%, transparent);border-color:var(--dsw-alias-border-l1)}.VWh0dG_rowlineName{min-width:0;color:var(--dsw-alias-label-primary);white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:12.5px;font-weight:500;overflow:hidden}.VWh0dG_rowlineRight{font-variant-numeric:tabular-nums;flex:none;align-items:baseline;gap:8px;display:inline-flex}.VWh0dG_rowlineMuted{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.VWh0dG_rowlineChev{color:var(--dsw-alias-label-tertiary);font-size:14px}.VWh0dG_rowlineDrillWrap{padding-left:12px}.VWh0dG_rowlineDrill{border-left:1px solid var(--dsw-alias-border-l1);justify-content:space-between;align-items:center;gap:12px;padding:6px 12px;font-size:12px;display:flex}.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_siteRowCallsLow{color:var(--dsw-static-red-500)}.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_feeBar{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;border-radius:999px;flex-wrap:wrap;align-items:center;gap:8px;padding:6px 12px;font-size:11px;line-height:16px;display:inline-flex}.VWh0dG_feeCount{color:var(--dsw-alias-label-primary);font-weight:600}.VWh0dG_feeSuffix{color:var(--dsw-alias-label-tertiary)}.VWh0dG_feeItem{color:var(--dsw-alias-label-secondary);white-space:nowrap}.VWh0dG_feeNum{color:var(--dsw-alias-label-primary)}.VWh0dG_feeSep{color:var(--dsw-alias-label-tertiary)}.VWh0dG_feeChipPrimary,.VWh0dG_feeChipOff,.VWh0dG_feeChipAlert,.VWh0dG_feeChipError{font-variant-numeric:tabular-nums;white-space:nowrap;border-radius:999px;align-items:center;height:20px;padding:0 8px;font-size:10px;font-weight:600;line-height:14px;display:inline-flex}.VWh0dG_feeChipPrimary{background:color-mix(in srgb, var(--dsw-static-blue-500) 14%, transparent);color:var(--dsw-static-blue-500)}.VWh0dG_feeChipOff{background:color-mix(in srgb, var(--dsw-static-green-500) 14%, transparent);color:var(--dsw-static-green-500)}.VWh0dG_feeChipAlert{background:color-mix(in srgb, var(--dsw-static-amber-500) 16%, transparent);color:var(--dsw-static-amber-500)}.VWh0dG_feeChipError{background:color-mix(in srgb, var(--dsw-static-red-500) 14%, transparent);color:var(--dsw-static-red-500)}.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{background:var(--dsw-alias-bg-layer-3);border:none;border-radius:8px;align-items:center;gap:2px;margin-right:8px;padding:2px;display:inline-flex}.VWh0dG_currencyButton{color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;background:0 0;border:0;border-radius:6px;padding:4px 8px;font-size:11px;font-weight:700;line-height:1}.VWh0dG_currencyButtonActive{background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary)}.VWh0dG_subscriptionGrid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px;margin-top:10px;display:grid}.VWh0dG_subscriptionCard{border:1px solid 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_heatmapRangeSwitch{gap:4px;margin-left:auto;display:inline-flex}.VWh0dG_heatmapRangeButton{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-text-secondary);cursor:pointer;background:0 0;border-radius:6px;padding:2px 8px;font-size:11px;line-height:1.4}.VWh0dG_heatmapRangeButtonActive{color:var(--dsw-alias-text-primary);border-color:currentColor;font-weight:600}.VWh0dG_heatmapYear{flex-direction:column;gap:6px;display:flex}.VWh0dG_heatmapYearBody{align-items:flex-start;gap:6px;display:flex}.VWh0dG_heatmapYearWeekdays{color:var(--dsw-alias-text-tertiary);flex:none;grid-template-rows:repeat(7,11px);gap:3px;padding-top:12px;font-size:9px;line-height:11px;display:grid}.VWh0dG_heatmapYearWeekday{white-space:nowrap;text-align:right;height:11px}.VWh0dG_heatmapYearMonths{min-width:max-content;color:var(--dsw-alias-text-tertiary);grid-template-columns:repeat(52,11px);gap:3px;font-size:9px;line-height:12px;display:grid;overflow:visible}.VWh0dG_heatmapYearMonth{white-space:nowrap;overflow:visible}.VWh0dG_heatmapYearScroll{padding-bottom:2px;overflow-x:auto}.VWh0dG_heatmapYearGrid{grid-template-rows:repeat(7,11px);grid-auto-flow:column;gap:3px;min-width:max-content;display:grid}.VWh0dG_heatmapYearCell{cursor:pointer;border:0;border-radius:2px;width:11px;height:11px;padding:0}.VWh0dG_triggerPopSubscription{width:auto;left:0;right:0}.VWh0dG_floatSub{flex-direction:column;gap:6px;min-width:0;display:flex}.VWh0dG_floatSubHead{flex-wrap:wrap;align-items:baseline;gap:6px;min-width:0;display:flex}.VWh0dG_floatSubName{color:var(--dsw-alias-label-primary);font-size:12px;font-weight:700}.VWh0dG_floatSubPlan{color:var(--dsw-alias-label-secondary);font-size:10px}.VWh0dG_floatSub .VWh0dG_subscriptionWindow{flex-wrap:wrap;gap:4px 10px}.VWh0dG_floatSub .VWh0dG_subscriptionWindowLabel{flex:none}.VWh0dG_floatSub .VWh0dG_subscriptionMeta{min-width:0;max-width:100%}.VWh0dG_floatSub .VWh0dG_subscriptionPct{min-width:0}.VWh0dG_floatSub .VWh0dG_subscriptionReset{white-space:normal;overflow-wrap:anywhere}.VWh0dG_triggerPopEmpty{color:var(--dsw-alias-label-tertiary);padding:2px 0;font-size:11px;line-height:1.5}.VWh0dG_triggerPopSwitcher{justify-content:flex-end;align-items:center;gap:8px;margin-top:2px;display:flex}.VWh0dG_triggerPopSwitchBtn{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:6px;padding:2px 4px;font-size:14px;line-height:1}.VWh0dG_triggerPopSwitchBtn:hover{color:var(--dsw-alias-label-primary);background:color-mix(in srgb, var(--dsw-alias-border-l1) 45%, transparent)}.VWh0dG_triggerPopSwitchCount{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;font-size:10px}.VWh0dG_floatModeRow{gap:8px;margin-bottom:8px;display:flex}.VWh0dG_floatModeBtn{border:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 75%, transparent);background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 60%, transparent);color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;border-radius:10px;flex:1;padding:7px 10px;font-size:12px}.VWh0dG_floatModeBtnOn{border-color:var(--dsw-static-blue-500);color:var(--dsw-alias-label-primary);background:color-mix(in srgb, var(--dsw-static-blue-500) 16%, transparent)}.VWh0dG_floatTargets{flex-wrap:wrap;gap:6px;margin-bottom:8px;display:flex}.VWh0dG_floatTarget{color:var(--dsw-alias-label-secondary);cursor:pointer;align-items:center;gap:5px;font-size:12px;display:inline-flex}.VWh0dG_floatTargetLabel{color:var(--dsw-alias-label-secondary)}.VWh0dG_staleNotice{color:var(--dsw-static-amber-500);background:color-mix(in srgb, var(--dsw-static-amber-500) 12%, transparent);border:1px solid color-mix(in srgb, var(--dsw-static-amber-500) 30%, transparent);border-radius:10px;align-items:center;gap:6px;margin:0 0 10px;padding:8px 10px;font-size:11px;display:flex}.VWh0dG_plgHead{align-items:flex-start;gap:12px;display:flex}.VWh0dG_plgIcon{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);width:40px;height:40px;color:var(--dsw-alias-label-secondary);border-radius:10px;flex:none;justify-content:center;align-items:center;display:inline-flex}.VWh0dG_plgTitle{flex-direction:column;gap:4px;min-width:0;display:flex}.VWh0dG_plgNameRow{align-items:center;gap:8px;display:flex}.VWh0dG_plgName{color:var(--dsw-alias-label-primary);margin:0;font-size:13px;font-weight:600;line-height:18px}.VWh0dG_plgTag{height:18px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-3);white-space:nowrap;border-radius:5px;align-items:center;padding:0 6px;font-size:10px;font-weight:600;display:inline-flex}.VWh0dG_plgDesc{color:var(--dsw-alias-label-secondary);margin:0;font-size:11px;line-height:16px}.VWh0dG_plgGrid{border-top:1px solid var(--dsw-alias-border-l1);grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding-top:12px;display:grid}.VWh0dG_plgItem{flex-direction:column;gap:2px;min-width:0;display:flex}.VWh0dG_plgLabel{color:var(--dsw-alias-label-tertiary);font-size:10px;line-height:14px}.VWh0dG_plgVal{color:var(--dsw-alias-label-primary);word-break:break-all;font-size:12px;line-height:17px}.VWh0dG_plgLink{color:var(--dsw-static-blue-500);word-break:break-all;font-size:12px;line-height:17px;text-decoration:none}.VWh0dG_plgLink:hover{text-decoration:underline}.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_peakCard{z-index:2000;border:1px solid var(--dsw-alias-border-l1);background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 82%, transparent);-webkit-backdrop-filter:blur(12px)saturate(1.2);border-radius:12px;flex-direction:column;gap:8px;min-width:280px;max-width:380px;padding:16px;animation:.2s VWh0dG_peakAlertIn;display:flex;position:fixed;box-shadow:0 4px 16px #00000014}.VWh0dG_peakCardCorner{bottom:18px;right:18px}.VWh0dG_peakCardCenter{top:20%;left:50%;transform:translate(-50%)}.VWh0dG_peakCardPeak{color:var(--dsw-static-blue-500)}.VWh0dG_peakCardOff{color:var(--dsw-static-green-500)}.VWh0dG_peakHead{justify-content:space-between;align-items:center;gap:8px;display:flex}.VWh0dG_peakTag{white-space:nowrap;border-radius:6px;align-items:center;gap:6px;height:20px;padding:0 8px;font-size:11px;font-weight:600;line-height:14px;display:inline-flex}.VWh0dG_peakTagPrimary{background:var(--dsw-alias-bg-layer-3);color:var(--dsw-static-blue-500)}.VWh0dG_peakTagSuccess{background:var(--dsw-alias-bg-layer-3);color:var(--dsw-static-green-500)}.VWh0dG_peakDot{border-radius:999px;flex:none;width:6px;height:6px}.VWh0dG_peakDotPrimary{background:var(--dsw-static-blue-500)}.VWh0dG_peakDotSuccess{background:var(--dsw-static-green-500)}.VWh0dG_peakClose{width:24px;height:24px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;font-size:15px;line-height:1;transition:background-color .14s,color .14s;display:inline-flex}.VWh0dG_peakClose:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2)}.VWh0dG_peakCount{font-variant-numeric:tabular-nums;font-size:28px;font-weight:700;line-height:34px}.VWh0dG_peakCountPrimary{color:var(--dsw-static-blue-500)}.VWh0dG_peakCountSuccess{color:var(--dsw-static-green-500)}.VWh0dG_peakDesc{color:var(--dsw-alias-label-secondary);margin:0;font-size:12px;line-height:18px}@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_setCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:12px;flex-direction:column;gap:12px;padding:16px 18px;display:flex}.VWh0dG_setCardHead{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.VWh0dG_setCardMeta{flex-direction:column;gap:4px;min-width:0;display:flex}.VWh0dG_setCardTitle{color:var(--dsw-alias-label-primary);margin:0;font-size:13px;font-weight:600;line-height:18px}.VWh0dG_setCardDesc{color:var(--dsw-alias-label-secondary);margin:0;font-size:11px;line-height:16px}.VWh0dG_ctlCol{flex-direction:column;gap:10px;padding-top:2px;display:flex}.VWh0dG_ctlRow{align-items:center;gap:12px;min-height:28px;display:flex}.VWh0dG_ctlRowStretch{display:flex}.VWh0dG_ctlLabel{color:var(--dsw-alias-label-secondary);flex:0 0 96px;font-size:11px;line-height:16px}.VWh0dG_ctlGroup{flex-wrap:wrap;align-items:center;gap:8px;display:inline-flex}.VWh0dG_rdo{color:var(--dsw-alias-label-secondary);cursor:pointer;white-space:nowrap;align-items:center;gap:6px;font-size:12px;line-height:16px;display:inline-flex}.VWh0dG_rdo input{opacity:0;pointer-events:none;position:absolute}.VWh0dG_rdoDot{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);border-radius:50%;flex:none;width:14px;height:14px;position:relative}.VWh0dG_rdo input:checked+.VWh0dG_rdoDot{border-color:var(--dsw-static-blue-500)}.VWh0dG_rdo input:checked+.VWh0dG_rdoDot:after{content:\"\";background:var(--dsw-static-blue-500);border-radius:50%;position:absolute;inset:3px}.VWh0dG_inp{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:6px;align-items:center;gap:4px;padding:2px 6px;display:inline-flex}.VWh0dG_affix{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.VWh0dG_sel{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);border-radius:6px;padding:3px 8px;font-size:12px;line-height:16px}.VWh0dG_prog{background:var(--dsw-alias-bg-module-platform);border-radius:999px;flex:1;min-width:0;height:6px;overflow:hidden}.VWh0dG_progFill{background:var(--dsw-static-blue-500);border-radius:999px;height:100%;transition:width .2s}.VWh0dG_btn{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;border-radius:999px;align-items:center;gap:6px;padding:0 12px;font-size:12px;line-height:16px;transition:border-color .16s,color .16s,background-color .16s;display:inline-flex}.VWh0dG_btn:hover{border-color:var(--dsw-static-blue-500);color:var(--dsw-alias-label-primary);background:color-mix(in srgb, var(--dsw-static-blue-500) 12%, var(--dsw-alias-bg-layer-1))}.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}";
64
64
  const tagId = "@kenz1117/dsh-ui-usage-billing/UsageBilling.module.css";
65
65
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
66
66
  const tag = document.createElement("style");
@@ -70,347 +70,456 @@ window.__ModuleLoader__.load({
70
70
  document.head.appendChild(tag);
71
71
  }
72
72
  var UsageBilling_module_css_default = {
73
- "shareSegUser": "VWh0dG_shareSegUser",
74
- "budgetFillWarn": "VWh0dG_budgetFillWarn",
75
- "chartTooltipRow": "VWh0dG_chartTooltipRow",
76
- "rateBadgeLive": "VWh0dG_rateBadgeLive",
77
- "siteKindUnknown": "VWh0dG_siteKindUnknown",
78
- "triggerSub": "VWh0dG_triggerSub",
79
- "subscriptionFillWarn": "VWh0dG_subscriptionFillWarn",
80
- "roundsFlagMark": "VWh0dG_roundsFlagMark",
81
- "floatTargets": "VWh0dG_floatTargets",
82
- "bucketStatLabel": "VWh0dG_bucketStatLabel",
83
- "providerGroupName": "VWh0dG_providerGroupName",
84
- "floatModeBtn": "VWh0dG_floatModeBtn",
85
- "floatSub": "VWh0dG_floatSub",
86
- "budgetFillOver": "VWh0dG_budgetFillOver",
87
- "numCol": "VWh0dG_numCol",
88
- "tokenModelPartOut": "VWh0dG_tokenModelPartOut",
89
- "rangeToggle": "VWh0dG_rangeToggle",
90
- "peakAlertPreview": "VWh0dG_peakAlertPreview",
73
+ "hero": "VWh0dG_hero",
74
+ "popDotNeutral": "VWh0dG_popDotNeutral",
75
+ "triggerPopStrong": "VWh0dG_triggerPopStrong",
76
+ "chartAxisLabel": "VWh0dG_chartAxisLabel",
77
+ "reconcileNotice": "VWh0dG_reconcileNotice",
78
+ "popModel": "VWh0dG_popModel",
79
+ "heroMeta": "VWh0dG_heroMeta",
80
+ "ubAlert": "VWh0dG_ubAlert",
91
81
  "chartStack": "VWh0dG_chartStack",
92
- "triggerSparkHot": "VWh0dG_triggerSparkHot",
93
- "budgetFill": "VWh0dG_budgetFill",
94
- "liveTierOff": "VWh0dG_liveTierOff",
95
- "roundsAxis": "VWh0dG_roundsAxis",
96
- "subscriptionWindow": "VWh0dG_subscriptionWindow",
97
- "pricingChevronOpen": "VWh0dG_pricingChevronOpen",
98
- "balanceDaysBadgeLow": "VWh0dG_balanceDaysBadgeLow",
99
- "triggerPopMetricValue": "VWh0dG_triggerPopMetricValue",
82
+ "balanceDetailTitle": "VWh0dG_balanceDetailTitle",
83
+ "rangeToggle": "VWh0dG_rangeToggle",
84
+ "budgetOverPulse": "VWh0dG_budgetOverPulse",
85
+ "modelProvider": "VWh0dG_modelProvider",
86
+ "popDot": "VWh0dG_popDot",
87
+ "ubTablewrap": "VWh0dG_ubTablewrap",
88
+ "healthIdle": "VWh0dG_healthIdle",
89
+ "heatmapYearGrid": "VWh0dG_heatmapYearGrid",
90
+ "setCardTitle": "VWh0dG_setCardTitle",
91
+ "triggerPopValue": "VWh0dG_triggerPopValue",
92
+ "tabButtonActive": "VWh0dG_tabButtonActive",
93
+ "popDotSub": "VWh0dG_popDotSub",
100
94
  "triggerPopBadgeDirect": "VWh0dG_triggerPopBadgeDirect",
95
+ "floatModeBtn": "VWh0dG_floatModeBtn",
96
+ "heroBudgetValue": "VWh0dG_heroBudgetValue",
97
+ "budgetControls": "VWh0dG_budgetControls",
98
+ "ubAlertLeft": "VWh0dG_ubAlertLeft",
99
+ "roundsAxis": "VWh0dG_roundsAxis",
100
+ "triggerYen": "VWh0dG_triggerYen",
101
+ "subscriptionFill": "VWh0dG_subscriptionFill",
102
+ "triggerPopBars": "VWh0dG_triggerPopBars",
103
+ "peakClose": "VWh0dG_peakClose",
104
+ "triggerPopTitle": "VWh0dG_triggerPopTitle",
105
+ "triggerPopMetricHighlight": "VWh0dG_triggerPopMetricHighlight",
106
+ "triggerPopFootNote": "VWh0dG_triggerPopFootNote",
107
+ "rowlist": "VWh0dG_rowlist",
108
+ "peakHead": "VWh0dG_peakHead",
109
+ "budget": "VWh0dG_budget",
110
+ "currencyButton": "VWh0dG_currencyButton",
111
+ "bucketOfficial": "VWh0dG_bucketOfficial",
112
+ "modelTableScroll": "VWh0dG_modelTableScroll",
113
+ "chartBarPlaceholder": "VWh0dG_chartBarPlaceholder",
114
+ "rateBadgeLive": "VWh0dG_rateBadgeLive",
115
+ "modelCell": "VWh0dG_modelCell",
101
116
  "roundsBarColPeak": "VWh0dG_roundsBarColPeak",
117
+ "providerGroupHead": "VWh0dG_providerGroupHead",
102
118
  "roundsBarColOff": "VWh0dG_roundsBarColOff",
103
- "peakAlertCenter": "VWh0dG_peakAlertCenter",
104
- "triggerPopMetricHighlight": "VWh0dG_triggerPopMetricHighlight",
105
- "modelTable": "VWh0dG_modelTable",
106
- "pluginInfoLabel": "VWh0dG_pluginInfoLabel",
107
- "heroGauge": "VWh0dG_heroGauge",
108
- "triggerPopValueStack": "VWh0dG_triggerPopValueStack",
109
- "triggerPopSwitchBtn": "VWh0dG_triggerPopSwitchBtn",
110
- "shareSeg": "VWh0dG_shareSeg",
111
- "billing-trigger": "VWh0dG_billing-trigger",
112
- "deltaUp": "VWh0dG_deltaUp",
119
+ "triggerPopBadgeSub": "VWh0dG_triggerPopBadgeSub",
120
+ "shareSegOff": "VWh0dG_shareSegOff",
121
+ "siteRowCost": "VWh0dG_siteRowCost",
122
+ "shareDot": "VWh0dG_shareDot",
123
+ "metricValueSuccess": "VWh0dG_metricValueSuccess",
124
+ "bandTagOff": "VWh0dG_bandTagOff",
125
+ "peakAlertIn": "VWh0dG_peakAlertIn",
126
+ "healthBadge": "VWh0dG_healthBadge",
127
+ "ubAlertNote": "VWh0dG_ubAlertNote",
128
+ "bandPrice": "VWh0dG_bandPrice",
129
+ "heatmapFooter": "VWh0dG_heatmapFooter",
130
+ "triggerPopBadge": "VWh0dG_triggerPopBadge",
131
+ "ubModelName": "VWh0dG_ubModelName",
132
+ "floatTargetLabel": "VWh0dG_floatTargetLabel",
133
+ "budgetFill": "VWh0dG_budgetFill",
134
+ "popModelLabel": "VWh0dG_popModelLabel",
135
+ "dashboardRight": "VWh0dG_dashboardRight",
136
+ "budgetHead": "VWh0dG_budgetHead",
137
+ "siteRowMeta": "VWh0dG_siteRowMeta",
138
+ "bucketSep": "VWh0dG_bucketSep",
139
+ "metricValuePrimary": "VWh0dG_metricValuePrimary",
140
+ "unpricedHint": "VWh0dG_unpricedHint",
141
+ "subscriptionTier": "VWh0dG_subscriptionTier",
142
+ "heroBudget": "VWh0dG_heroBudget",
143
+ "balanceDetailValue": "VWh0dG_balanceDetailValue",
144
+ "ctlLabel": "VWh0dG_ctlLabel",
145
+ "popTagPrimary": "VWh0dG_popTagPrimary",
146
+ "roundsFlagMark": "VWh0dG_roundsFlagMark",
147
+ "ubChipPeak": "VWh0dG_ubChipPeak",
148
+ "feeChipAlert": "VWh0dG_feeChipAlert",
149
+ "switchKnob": "VWh0dG_switchKnob",
150
+ "popModelStatus": "VWh0dG_popModelStatus",
151
+ "ubTagSuccess": "VWh0dG_ubTagSuccess",
152
+ "costCol": "VWh0dG_costCol",
153
+ "tokenPanel": "VWh0dG_tokenPanel",
154
+ "peakTagPrimary": "VWh0dG_peakTagPrimary",
155
+ "balanceDaysBadge": "VWh0dG_balanceDaysBadge",
113
156
  "heroTop": "VWh0dG_heroTop",
114
- "budgetInputWrap": "VWh0dG_budgetInputWrap",
115
- "balanceDetailGrid": "VWh0dG_balanceDetailGrid",
116
- "peakAlertPanelLabel": "VWh0dG_peakAlertPanelLabel",
157
+ "popTagSub": "VWh0dG_popTagSub",
158
+ "chartSvg": "VWh0dG_chartSvg",
159
+ "heatmapYearScroll": "VWh0dG_heatmapYearScroll",
160
+ "chartTooltip": "VWh0dG_chartTooltip",
161
+ "feeNum": "VWh0dG_feeNum",
162
+ "heroGaugePctOver": "VWh0dG_heroGaugePctOver",
163
+ "ubModelDot": "VWh0dG_ubModelDot",
164
+ "heatmapYearMonth": "VWh0dG_heatmapYearMonth",
165
+ "pluginInfoLabel": "VWh0dG_pluginInfoLabel",
166
+ "triggerPopSubscription": "VWh0dG_triggerPopSubscription",
167
+ "bucketThird": "VWh0dG_bucketThird",
168
+ "popModelStatusLow": "VWh0dG_popModelStatusLow",
169
+ "peakCardPeak": "VWh0dG_peakCardPeak",
170
+ "ubTagAlert": "VWh0dG_ubTagAlert",
171
+ "reconcileIcon": "VWh0dG_reconcileIcon",
172
+ "inp": "VWh0dG_inp",
173
+ "triggerPopEmpty": "VWh0dG_triggerPopEmpty",
174
+ "rowlineMuted": "VWh0dG_rowlineMuted",
117
175
  "budgetValue": "VWh0dG_budgetValue",
118
- "healthBadgeOk": "VWh0dG_healthBadgeOk",
119
- "triggerPopBadge": "VWh0dG_triggerPopBadge",
120
- "liveCostItem": "VWh0dG_liveCostItem",
121
- "kpiLabel": "VWh0dG_kpiLabel",
122
- "siteRowCost": "VWh0dG_siteRowCost",
123
- "roundsEmpty": "VWh0dG_roundsEmpty",
124
- "peakAlertOff": "VWh0dG_peakAlertOff",
125
- "subscriptionFillOver": "VWh0dG_subscriptionFillOver",
126
- "panel": "VWh0dG_panel",
127
- "heroGaugeCenter": "VWh0dG_heroGaugeCenter",
128
- "chartBarPlaceholder": "VWh0dG_chartBarPlaceholder",
129
- "heroReadout": "VWh0dG_heroReadout",
130
- "modelProvider": "VWh0dG_modelProvider",
131
- "subscriptionGrid": "VWh0dG_subscriptionGrid",
132
- "roundsBarLabel": "VWh0dG_roundsBarLabel",
133
- "heatmapYear": "VWh0dG_heatmapYear",
134
- "triggerPopFootNote": "VWh0dG_triggerPopFootNote",
135
- "triggerPopFoot": "VWh0dG_triggerPopFoot",
136
- "heatmap": "VWh0dG_heatmap",
137
- "roundsFlagBadge": "VWh0dG_roundsFlagBadge",
138
- "tokenModelPartIn": "VWh0dG_tokenModelPartIn",
139
- "heroSideSpacer": "VWh0dG_heroSideSpacer",
140
176
  "triggerWrap": "VWh0dG_triggerWrap",
141
- "shareSegPeak": "VWh0dG_shareSegPeak",
142
- "tabPanel": "VWh0dG_tabPanel",
143
- "tabButton": "VWh0dG_tabButton",
144
- "triggerPopMetrics": "VWh0dG_triggerPopMetrics",
177
+ "triggerSub": "VWh0dG_triggerSub",
145
178
  "triggerPopHead": "VWh0dG_triggerPopHead",
146
- "currencyToggle": "VWh0dG_currencyToggle",
147
- "bucketOfficial": "VWh0dG_bucketOfficial",
148
- "settingsTitle": "VWh0dG_settingsTitle",
149
- "railButton": "VWh0dG_railButton",
150
- "providerGroupTitle": "VWh0dG_providerGroupTitle",
151
- "kpiGrid": "VWh0dG_kpiGrid",
152
- "reconcileDismiss": "VWh0dG_reconcileDismiss",
153
- "healthBad": "VWh0dG_healthBad",
154
- "budgetOverPulse": "VWh0dG_budgetOverPulse",
155
- "triggerPopFootTitle": "VWh0dG_triggerPopFootTitle",
179
+ "peakDot": "VWh0dG_peakDot",
180
+ "roundsBar": "VWh0dG_roundsBar",
156
181
  "siteKindTag": "VWh0dG_siteKindTag",
157
- "triggerPopSwitcher": "VWh0dG_triggerPopSwitcher",
158
- "triggerAmount": "VWh0dG_triggerAmount",
182
+ "peakAlertPanelBody": "VWh0dG_peakAlertPanelBody",
183
+ "subscriptionGoldFlow": "VWh0dG_subscriptionGoldFlow",
184
+ "ubTag": "VWh0dG_ubTag",
185
+ "settingsTitle": "VWh0dG_settingsTitle",
186
+ "heatmapYearWeekday": "VWh0dG_heatmapYearWeekday",
187
+ "uncataloguedTag": "VWh0dG_uncataloguedTag",
188
+ "providerGroup": "VWh0dG_providerGroup",
189
+ "plgItem": "VWh0dG_plgItem",
190
+ "ubNotesItem": "VWh0dG_ubNotesItem",
191
+ "siteKindUnknown": "VWh0dG_siteKindUnknown",
192
+ "heatmapYearMonths": "VWh0dG_heatmapYearMonths",
193
+ "dashboardIn": "VWh0dG_dashboardIn",
194
+ "rdoDot": "VWh0dG_rdoDot",
195
+ "shareSeg": "VWh0dG_shareSeg",
196
+ "subscriptionExhausted": "VWh0dG_subscriptionExhausted",
197
+ "staleNotice": "VWh0dG_staleNotice",
198
+ "floatTarget": "VWh0dG_floatTarget",
199
+ "kpiDetail": "VWh0dG_kpiDetail",
200
+ "heatmapLegend": "VWh0dG_heatmapLegend",
201
+ "subscriptionTrack": "VWh0dG_subscriptionTrack",
202
+ "settingsHint": "VWh0dG_settingsHint",
203
+ "shareSegUser": "VWh0dG_shareSegUser",
204
+ "popHead": "VWh0dG_popHead",
205
+ "dashboardModal": "VWh0dG_dashboardModal",
206
+ "siteKindSite": "VWh0dG_siteKindSite",
207
+ "subscriptionHead": "VWh0dG_subscriptionHead",
208
+ "providerGroupBadge": "VWh0dG_providerGroupBadge",
209
+ "ctlCol": "VWh0dG_ctlCol",
210
+ "subscriptionPct": "VWh0dG_subscriptionPct",
211
+ "triggerPopRow": "VWh0dG_triggerPopRow",
212
+ "balanceDetailHead": "VWh0dG_balanceDetailHead",
213
+ "progFill": "VWh0dG_progFill",
214
+ "heroSideValue": "VWh0dG_heroSideValue",
215
+ "tabNav": "VWh0dG_tabNav",
216
+ "trendPanel": "VWh0dG_trendPanel",
217
+ "tokenModelShareRow": "VWh0dG_tokenModelShareRow",
218
+ "heroSideLabel": "VWh0dG_heroSideLabel",
219
+ "heatmapCell": "VWh0dG_heatmapCell",
220
+ "setCardHead": "VWh0dG_setCardHead",
221
+ "plgTag": "VWh0dG_plgTag",
222
+ "subscriptionAuto": "VWh0dG_subscriptionAuto",
223
+ "providerGroupName": "VWh0dG_providerGroupName",
224
+ "budgetLabel": "VWh0dG_budgetLabel",
225
+ "heroReadout": "VWh0dG_heroReadout",
226
+ "siteRow": "VWh0dG_siteRow",
227
+ "billing-trigger": "VWh0dG_billing-trigger",
228
+ "subscriptionWindow": "VWh0dG_subscriptionWindow",
229
+ "rdo": "VWh0dG_rdo",
230
+ "balanceDetailClose": "VWh0dG_balanceDetailClose",
231
+ "headTitleRow": "VWh0dG_headTitleRow",
232
+ "siteRowName": "VWh0dG_siteRowName",
233
+ "deltaDown": "VWh0dG_deltaDown",
234
+ "chartTooltipSwatch": "VWh0dG_chartTooltipSwatch",
235
+ "planTag": "VWh0dG_planTag",
236
+ "triggerPopSwitchCount": "VWh0dG_triggerPopSwitchCount",
237
+ "pricingToggleText": "VWh0dG_pricingToggleText",
238
+ "rangeButtonActive": "VWh0dG_rangeButtonActive",
239
+ "kpiLabel": "VWh0dG_kpiLabel",
240
+ "pricingChevron": "VWh0dG_pricingChevron",
241
+ "pluginInfoValue": "VWh0dG_pluginInfoValue",
242
+ "subscriptionStatus": "VWh0dG_subscriptionStatus",
243
+ "dashboard": "VWh0dG_dashboard",
244
+ "modelName": "VWh0dG_modelName",
245
+ "roundsBarLabel": "VWh0dG_roundsBarLabel",
246
+ "feeChipOff": "VWh0dG_feeChipOff",
247
+ "pricingChevronOpen": "VWh0dG_pricingChevronOpen",
248
+ "switch": "VWh0dG_switch",
249
+ "plgVal": "VWh0dG_plgVal",
250
+ "peakCardOff": "VWh0dG_peakCardOff",
159
251
  "currencyButtonActive": "VWh0dG_currencyButtonActive",
252
+ "peakCountSuccess": "VWh0dG_peakCountSuccess",
253
+ "triggerPop": "VWh0dG_triggerPop",
254
+ "feeCount": "VWh0dG_feeCount",
255
+ "tokenModelBar": "VWh0dG_tokenModelBar",
256
+ "ubCardHead": "VWh0dG_ubCardHead",
257
+ "rateBadgeBuiltin": "VWh0dG_rateBadgeBuiltin",
258
+ "ctlRowStretch": "VWh0dG_ctlRowStretch",
259
+ "panel": "VWh0dG_panel",
260
+ "heroGaugeLabel": "VWh0dG_heroGaugeLabel",
261
+ "pricingToggle": "VWh0dG_pricingToggle",
262
+ "closeButton": "VWh0dG_closeButton",
263
+ "peakCount": "VWh0dG_peakCount",
264
+ "siteRowCalls": "VWh0dG_siteRowCalls",
265
+ "rowlineDrillWrap": "VWh0dG_rowlineDrillWrap",
266
+ "triggerIcon": "VWh0dG_triggerIcon",
267
+ "chartCrosshair": "VWh0dG_chartCrosshair",
268
+ "metricValue": "VWh0dG_metricValue",
269
+ "budgetHint": "VWh0dG_budgetHint",
270
+ "trigger": "VWh0dG_trigger",
271
+ "subscriptionPlan": "VWh0dG_subscriptionPlan",
272
+ "dashboardSubtitle": "VWh0dG_dashboardSubtitle",
273
+ "chartGrid": "VWh0dG_chartGrid",
160
274
  "providerGroupBalanceLabel": "VWh0dG_providerGroupBalanceLabel",
161
- "budgetLabel": "VWh0dG_budgetLabel",
275
+ "modelTable": "VWh0dG_modelTable",
276
+ "shareSegTool": "VWh0dG_shareSegTool",
277
+ "ubTagNeutral": "VWh0dG_ubTagNeutral",
278
+ "budgetUnit": "VWh0dG_budgetUnit",
279
+ "shareItem": "VWh0dG_shareItem",
280
+ "healthBadgeOk": "VWh0dG_healthBadgeOk",
281
+ "triggerPrimary": "VWh0dG_triggerPrimary",
282
+ "budgetTrack": "VWh0dG_budgetTrack",
283
+ "providerGroupTitle": "VWh0dG_providerGroupTitle",
162
284
  "heatmapRangeButton": "VWh0dG_heatmapRangeButton",
163
- "bucketStat": "VWh0dG_bucketStat",
164
- "tabButtonActive": "VWh0dG_tabButtonActive",
165
- "peakAlertSelect": "VWh0dG_peakAlertSelect",
166
- "triggerPopStrong": "VWh0dG_triggerPopStrong",
167
- "emptyRow": "VWh0dG_emptyRow",
168
- "liveCostBar": "VWh0dG_liveCostBar",
169
- "reconcileIcon": "VWh0dG_reconcileIcon",
170
- "planTag": "VWh0dG_planTag",
171
- "liveTierPeak": "VWh0dG_liveTierPeak",
172
- "subscriptionTier": "VWh0dG_subscriptionTier",
173
- "deltaDown": "VWh0dG_deltaDown",
174
- "chartLine": "VWh0dG_chartLine",
175
- "subscriptionGoldFlow": "VWh0dG_subscriptionGoldFlow",
176
- "na": "VWh0dG_na",
177
- "modelDot": "VWh0dG_modelDot",
178
- "triggerPopFootNotes": "VWh0dG_triggerPopFootNotes",
179
- "heroGaugeSvg": "VWh0dG_heroGaugeSvg",
180
- "bucketThird": "VWh0dG_bucketThird",
285
+ "popModelRow": "VWh0dG_popModelRow",
181
286
  "heatmapYearWeekdays": "VWh0dG_heatmapYearWeekdays",
182
- "heroSideValue": "VWh0dG_heroSideValue",
183
- "triggerPopAlert": "VWh0dG_triggerPopAlert",
184
- "heroLabel": "VWh0dG_heroLabel",
185
- "triggerPopMuted": "VWh0dG_triggerPopMuted",
186
- "switch": "VWh0dG_switch",
187
- "chartLegendLine": "VWh0dG_chartLegendLine",
188
- "balanceDaysLow": "VWh0dG_balanceDaysLow",
189
- "floatModeRow": "VWh0dG_floatModeRow",
190
- "floatModeBtnOn": "VWh0dG_floatModeBtnOn",
287
+ "kpiGreen": "VWh0dG_kpiGreen",
288
+ "providerGroupMeta": "VWh0dG_providerGroupMeta",
289
+ "balanceDetailLabel": "VWh0dG_balanceDetailLabel",
290
+ "providerGroupBalance": "VWh0dG_providerGroupBalance",
291
+ "peakAlertSelect": "VWh0dG_peakAlertSelect",
292
+ "tabPanel": "VWh0dG_tabPanel",
293
+ "plgName": "VWh0dG_plgName",
294
+ "plgLabel": "VWh0dG_plgLabel",
295
+ "triggerPopFoot": "VWh0dG_triggerPopFoot",
296
+ "ubCardSub": "VWh0dG_ubCardSub",
297
+ "exportBar": "VWh0dG_exportBar",
298
+ "peakCardCenter": "VWh0dG_peakCardCenter",
299
+ "plgHead": "VWh0dG_plgHead",
300
+ "peakAlertField": "VWh0dG_peakAlertField",
301
+ "ubStatCard": "VWh0dG_ubStatCard",
191
302
  "heatmapGrid": "VWh0dG_heatmapGrid",
192
- "providerGroupList": "VWh0dG_providerGroupList",
193
- "heroGaugeTrack": "VWh0dG_heroGaugeTrack",
194
- "heroGaugePctOver": "VWh0dG_heroGaugePctOver",
195
- "chartBar": "VWh0dG_chartBar",
303
+ "ubChipOff": "VWh0dG_ubChipOff",
304
+ "peakCard": "VWh0dG_peakCard",
305
+ "setCardMeta": "VWh0dG_setCardMeta",
306
+ "chartTooltipRow": "VWh0dG_chartTooltipRow",
307
+ "heroBudgetTrack": "VWh0dG_heroBudgetTrack",
308
+ "modelDot": "VWh0dG_modelDot",
196
309
  "pricingTip": "VWh0dG_pricingTip",
197
- "siteRowName": "VWh0dG_siteRowName",
198
- "bandTagOff": "VWh0dG_bandTagOff",
199
- "balanceDetailRow": "VWh0dG_balanceDetailRow",
200
- "subscriptionExhausted": "VWh0dG_subscriptionExhausted",
201
- "bandPriceOff": "VWh0dG_bandPriceOff",
202
- "triggerPopFootStatusLow": "VWh0dG_triggerPopFootStatusLow",
203
- "exportLabel": "VWh0dG_exportLabel",
204
- "currencyButton": "VWh0dG_currencyButton",
205
- "heatmapRangeButtonActive": "VWh0dG_heatmapRangeButtonActive",
206
- "peakAlertHint": "VWh0dG_peakAlertHint",
207
- "triggerSparkBar": "VWh0dG_triggerSparkBar",
208
- "tokenPanel": "VWh0dG_tokenPanel",
209
- "providerGroupBadge": "VWh0dG_providerGroupBadge",
210
- "chartDot": "VWh0dG_chartDot",
211
- "exportBar": "VWh0dG_exportBar",
212
- "chartLegendBar": "VWh0dG_chartLegendBar",
213
- "siteKindDirect": "VWh0dG_siteKindDirect",
214
- "budget": "VWh0dG_budget",
215
- "estimatedTag": "VWh0dG_estimatedTag",
216
- "kpiGreen": "VWh0dG_kpiGreen",
217
- "heatmapYearMonth": "VWh0dG_heatmapYearMonth",
218
- "heroGaugePct": "VWh0dG_heroGaugePct",
219
- "triggerRow": "VWh0dG_triggerRow",
220
- "peakAlertPanelBody": "VWh0dG_peakAlertPanelBody",
310
+ "ubTagError": "VWh0dG_ubTagError",
311
+ "triggerPopValueStack": "VWh0dG_triggerPopValueStack",
312
+ "heroMain": "VWh0dG_heroMain",
313
+ "rowline": "VWh0dG_rowline",
314
+ "feeChipError": "VWh0dG_feeChipError",
315
+ "providerGroupList": "VWh0dG_providerGroupList",
316
+ "heatmapRangeSwitch": "VWh0dG_heatmapRangeSwitch",
317
+ "panelHead": "VWh0dG_panelHead",
318
+ "roundsBarFlagged": "VWh0dG_roundsBarFlagged",
319
+ "ctlGroup": "VWh0dG_ctlGroup",
320
+ "subscriptionFillWarn": "VWh0dG_subscriptionFillWarn",
321
+ "subscriptionGrid": "VWh0dG_subscriptionGrid",
322
+ "reconcileDismiss": "VWh0dG_reconcileDismiss",
323
+ "metricGrid": "VWh0dG_metricGrid",
324
+ "heroBudgetFill": "VWh0dG_heroBudgetFill",
325
+ "balanceDetailGrid": "VWh0dG_balanceDetailGrid",
326
+ "subscriptionWindowLabel": "VWh0dG_subscriptionWindowLabel",
327
+ "triggerPopFootNotes": "VWh0dG_triggerPopFootNotes",
328
+ "heroSideSpacer": "VWh0dG_heroSideSpacer",
329
+ "metricCell": "VWh0dG_metricCell",
330
+ "shareLegend": "VWh0dG_shareLegend",
331
+ "ubNotes": "VWh0dG_ubNotes",
221
332
  "roundsBars": "VWh0dG_roundsBars",
222
- "balanceDetailLabel": "VWh0dG_balanceDetailLabel",
223
- "shareDot": "VWh0dG_shareDot",
224
- "chartTooltipSwatch": "VWh0dG_chartTooltipSwatch",
225
- "heatmapYearMonths": "VWh0dG_heatmapYearMonths",
226
- "heroGaugeArcOver": "VWh0dG_heroGaugeArcOver",
227
- "healthBadge": "VWh0dG_healthBadge",
228
- "budgetHint": "VWh0dG_budgetHint",
333
+ "plgIcon": "VWh0dG_plgIcon",
334
+ "shareValue": "VWh0dG_shareValue",
335
+ "kpiTile": "VWh0dG_kpiTile",
336
+ "dashboardTitle": "VWh0dG_dashboardTitle",
337
+ "subscriptionReset": "VWh0dG_subscriptionReset",
338
+ "ubStatDetail": "VWh0dG_ubStatDetail",
339
+ "balanceCell": "VWh0dG_balanceCell",
340
+ "triggerSpark": "VWh0dG_triggerSpark",
341
+ "triggerPopFootName": "VWh0dG_triggerPopFootName",
229
342
  "dashboardBody": "VWh0dG_dashboardBody",
230
- "rangeButtonActive": "VWh0dG_rangeButtonActive",
231
- "reconcileNotice": "VWh0dG_reconcileNotice",
232
- "budgetTrack": "VWh0dG_budgetTrack",
233
- "chartCrosshair": "VWh0dG_chartCrosshair",
234
- "heroGaugeLabel": "VWh0dG_heroGaugeLabel",
235
- "chartAxisLabel": "VWh0dG_chartAxisLabel",
236
- "shareSegOff": "VWh0dG_shareSegOff",
237
- "chartTooltip": "VWh0dG_chartTooltip",
238
- "chartGrid": "VWh0dG_chartGrid",
343
+ "roundsBarWrap": "VWh0dG_roundsBarWrap",
344
+ "peakAlertPanel": "VWh0dG_peakAlertPanel",
345
+ "setCard": "VWh0dG_setCard",
346
+ "modalFooter": "VWh0dG_modalFooter",
347
+ "heroLabel": "VWh0dG_heroLabel",
348
+ "exportLabel": "VWh0dG_exportLabel",
349
+ "peakDotPrimary": "VWh0dG_peakDotPrimary",
350
+ "feeSep": "VWh0dG_feeSep",
351
+ "flatTag": "VWh0dG_flatTag",
239
352
  "heatmapCellEmpty": "VWh0dG_heatmapCellEmpty",
240
- "healthBadgeBad": "VWh0dG_healthBadgeBad",
241
- "triggerIcon": "VWh0dG_triggerIcon",
242
- "kpiTile": "VWh0dG_kpiTile",
243
- "heatmapFooter": "VWh0dG_heatmapFooter",
244
- "heatmapYearScroll": "VWh0dG_heatmapYearScroll",
245
- "floatTargetLabel": "VWh0dG_floatTargetLabel",
246
- "peakAlertIn": "VWh0dG_peakAlertIn",
247
- "costCol": "VWh0dG_costCol",
248
- "headTitleRow": "VWh0dG_headTitleRow",
249
- "switchKnob": "VWh0dG_switchKnob",
250
- "triggerPopTitle": "VWh0dG_triggerPopTitle",
251
- "bucketCost": "VWh0dG_bucketCost",
252
- "providerGroupBalance": "VWh0dG_providerGroupBalance",
253
- "shareItem": "VWh0dG_shareItem",
254
- "siteRowCallsLow": "VWh0dG_siteRowCallsLow",
255
- "heatmapHover": "VWh0dG_heatmapHover",
256
- "subscriptionPct": "VWh0dG_subscriptionPct",
257
- "peakAlertPeak": "VWh0dG_peakAlertPeak",
258
- "hero": "VWh0dG_hero",
259
- "closeButton": "VWh0dG_closeButton",
260
- "bucketSep": "VWh0dG_bucketSep",
261
- "roundsBar": "VWh0dG_roundsBar",
262
- "heroCurrency": "VWh0dG_heroCurrency",
263
- "chartWrap": "VWh0dG_chartWrap",
264
- "delta": "VWh0dG_delta",
265
- "pricingToggle": "VWh0dG_pricingToggle",
266
- "subscriptionHead": "VWh0dG_subscriptionHead",
267
- "roundsBarCol": "VWh0dG_roundsBarCol",
268
- "heroValue": "VWh0dG_heroValue",
269
- "siteRowTitle": "VWh0dG_siteRowTitle",
270
- "healthOk": "VWh0dG_healthOk",
271
- "dashboardHead": "VWh0dG_dashboardHead",
272
- "heroMeta": "VWh0dG_heroMeta",
273
- "liveCostSep": "VWh0dG_liveCostSep",
274
- "pluginInfoLink": "VWh0dG_pluginInfoLink",
275
- "tokenModelParts": "VWh0dG_tokenModelParts",
276
- "chartSvg": "VWh0dG_chartSvg",
277
- "liveQuotaCrit": "VWh0dG_liveQuotaCrit",
278
- "balanceDetailValue": "VWh0dG_balanceDetailValue",
279
- "rateBadgeBuiltin": "VWh0dG_rateBadgeBuiltin",
280
- "balanceDetailTitle": "VWh0dG_balanceDetailTitle",
281
- "heroSideItem": "VWh0dG_heroSideItem",
282
- "exportButton": "VWh0dG_exportButton",
353
+ "prog": "VWh0dG_prog",
354
+ "peakAlertPreview": "VWh0dG_peakAlertPreview",
355
+ "siteKindDirect": "VWh0dG_siteKindDirect",
356
+ "shareSegPeak": "VWh0dG_shareSegPeak",
357
+ "ubRate": "VWh0dG_ubRate",
358
+ "triggerPopFootStrong": "VWh0dG_triggerPopFootStrong",
359
+ "ubModel": "VWh0dG_ubModel",
360
+ "peakAlertPanelLabel": "VWh0dG_peakAlertPanelLabel",
361
+ "subscriptionName": "VWh0dG_subscriptionName",
362
+ "budgetInput": "VWh0dG_budgetInput",
363
+ "tableScroll": "VWh0dG_tableScroll",
364
+ "healthDot": "VWh0dG_healthDot",
365
+ "heatmapYearCell": "VWh0dG_heatmapYearCell",
283
366
  "shareSegAssistant": "VWh0dG_shareSegAssistant",
284
- "chartLegend": "VWh0dG_chartLegend",
285
- "subscriptionWindowLabel": "VWh0dG_subscriptionWindowLabel",
286
- "tabNav": "VWh0dG_tabNav",
287
- "peakAlertCorner": "VWh0dG_peakAlertCorner",
288
- "heroSideLabel": "VWh0dG_heroSideLabel",
289
- "pluginInfo": "VWh0dG_pluginInfo",
290
- "dashboard": "VWh0dG_dashboard",
291
- "heatmapYearBody": "VWh0dG_heatmapYearBody",
292
- "flatTag": "VWh0dG_flatTag",
293
- "modelName": "VWh0dG_modelName",
294
- "dashboardModal": "VWh0dG_dashboardModal",
295
- "providerGroupMeta": "VWh0dG_providerGroupMeta",
367
+ "subscriptionMeta": "VWh0dG_subscriptionMeta",
368
+ "plgLink": "VWh0dG_plgLink",
369
+ "triggerSparkBar": "VWh0dG_triggerSparkBar",
370
+ "emptyRow": "VWh0dG_emptyRow",
371
+ "panelHint": "VWh0dG_panelHint",
372
+ "chartLegendLine": "VWh0dG_chartLegendLine",
373
+ "rounds": "VWh0dG_rounds",
374
+ "peakTagSuccess": "VWh0dG_peakTagSuccess",
375
+ "switchOn": "VWh0dG_switchOn",
376
+ "bucketStatSub": "VWh0dG_bucketStatSub",
296
377
  "triggerPopLabel": "VWh0dG_triggerPopLabel",
297
- "triggerPopValue": "VWh0dG_triggerPopValue",
298
- "kpiDetail": "VWh0dG_kpiDetail",
299
- "balanceDays": "VWh0dG_balanceDays",
300
- "subscriptionPlan": "VWh0dG_subscriptionPlan",
301
- "bucketStatValue": "VWh0dG_bucketStatValue",
378
+ "feeChipPrimary": "VWh0dG_feeChipPrimary",
379
+ "heatmapYear": "VWh0dG_heatmapYear",
380
+ "peakCountPrimary": "VWh0dG_peakCountPrimary",
381
+ "chartTooltipDate": "VWh0dG_chartTooltipDate",
382
+ "numCol": "VWh0dG_numCol",
383
+ "triggerPopOpenBtn": "VWh0dG_triggerPopOpenBtn",
384
+ "balanceDaysLow": "VWh0dG_balanceDaysLow",
385
+ "triggerPopBar": "VWh0dG_triggerPopBar",
386
+ "popModelName": "VWh0dG_popModelName",
387
+ "balanceDetailRow": "VWh0dG_balanceDetailRow",
388
+ "ubNotesDesc": "VWh0dG_ubNotesDesc",
389
+ "feeSuffix": "VWh0dG_feeSuffix",
390
+ "triggerPopMuted": "VWh0dG_triggerPopMuted",
391
+ "budgetInputWrap": "VWh0dG_budgetInputWrap",
392
+ "ubTable": "VWh0dG_ubTable",
393
+ "healthOk": "VWh0dG_healthOk",
394
+ "peakAlertCheck": "VWh0dG_peakAlertCheck",
395
+ "bandTag": "VWh0dG_bandTag",
396
+ "rowlineName": "VWh0dG_rowlineName",
397
+ "roundsEmpty": "VWh0dG_roundsEmpty",
398
+ "bucketStat": "VWh0dG_bucketStat",
399
+ "railButton": "VWh0dG_railButton",
400
+ "heroSide": "VWh0dG_heroSide",
401
+ "triggerPopName": "VWh0dG_triggerPopName",
402
+ "ubNotesTerm": "VWh0dG_ubNotesTerm",
403
+ "kpiValue": "VWh0dG_kpiValue",
404
+ "triggerPopSwitcher": "VWh0dG_triggerPopSwitcher",
302
405
  "tabPanelIn": "VWh0dG_tabPanelIn",
303
406
  "chartEmpty": "VWh0dG_chartEmpty",
304
- "triggerPopBars": "VWh0dG_triggerPopBars",
305
- "switchOn": "VWh0dG_switchOn",
306
- "shareLegend": "VWh0dG_shareLegend",
307
- "shareSegTool": "VWh0dG_shareSegTool",
308
- "chartTooltipDate": "VWh0dG_chartTooltipDate",
309
- "triggerPopMetric": "VWh0dG_triggerPopMetric",
310
- "triggerPopEmpty": "VWh0dG_triggerPopEmpty",
311
- "triggerSpark": "VWh0dG_triggerSpark",
312
- "shareTrack": "VWh0dG_shareTrack",
313
- "trendPanel": "VWh0dG_trendPanel",
314
- "heatmapCell": "VWh0dG_heatmapCell",
315
- "siteKindSite": "VWh0dG_siteKindSite",
316
- "rounds": "VWh0dG_rounds",
317
- "floatSubName": "VWh0dG_floatSubName",
318
- "uncataloguedTag": "VWh0dG_uncataloguedTag",
319
- "budgetUnit": "VWh0dG_budgetUnit",
320
- "tokenModelShareRow": "VWh0dG_tokenModelShareRow",
321
- "peakAlertPanelHead": "VWh0dG_peakAlertPanelHead",
322
- "panelHead": "VWh0dG_panelHead",
323
- "triggerPopTitleMonth": "VWh0dG_triggerPopTitleMonth",
324
- "budgetControls": "VWh0dG_budgetControls",
325
- "balanceCell": "VWh0dG_balanceCell",
326
- "unpricedHint": "VWh0dG_unpricedHint",
327
- "healthIdle": "VWh0dG_healthIdle",
328
- "settingsHead": "VWh0dG_settingsHead",
329
- "balanceDaysBadge": "VWh0dG_balanceDaysBadge",
330
- "siteRowCalls": "VWh0dG_siteRowCalls",
331
- "triggerPopBadgeSub": "VWh0dG_triggerPopBadgeSub",
332
- "triggerPopSwitchCount": "VWh0dG_triggerPopSwitchCount",
333
- "dashboardRight": "VWh0dG_dashboardRight",
334
- "heatmapRangeSwitch": "VWh0dG_heatmapRangeSwitch",
407
+ "pluginInfoLink": "VWh0dG_pluginInfoLink",
408
+ "floatTargets": "VWh0dG_floatTargets",
409
+ "roundsFlagBadge": "VWh0dG_roundsFlagBadge",
410
+ "peakDesc": "VWh0dG_peakDesc",
411
+ "rangeButton": "VWh0dG_rangeButton",
412
+ "heatmap": "VWh0dG_heatmap",
413
+ "ubStatGrid": "VWh0dG_ubStatGrid",
414
+ "heatmapHover": "VWh0dG_heatmapHover",
415
+ "ubStatLabel": "VWh0dG_ubStatLabel",
416
+ "plgGrid": "VWh0dG_plgGrid",
417
+ "siteRowCallsLow": "VWh0dG_siteRowCallsLow",
418
+ "ubCard": "VWh0dG_ubCard",
419
+ "feeBar": "VWh0dG_feeBar",
420
+ "tabButton": "VWh0dG_tabButton",
421
+ "kpiGrid": "VWh0dG_kpiGrid",
422
+ "triggerPopSwitchBtn": "VWh0dG_triggerPopSwitchBtn",
423
+ "triggerPopMetrics": "VWh0dG_triggerPopMetrics",
424
+ "heroBudgetFillOver": "VWh0dG_heroBudgetFillOver",
425
+ "na": "VWh0dG_na",
426
+ "sel": "VWh0dG_sel",
427
+ "triggerPopMetricValue": "VWh0dG_triggerPopMetricValue",
428
+ "balanceDaysBadgeLow": "VWh0dG_balanceDaysBadgeLow",
429
+ "heroGauge": "VWh0dG_heroGauge",
335
430
  "triggerPopFootStatus": "VWh0dG_triggerPopFootStatus",
336
- "budgetHead": "VWh0dG_budgetHead",
337
- "peakAlertNum": "VWh0dG_peakAlertNum",
338
- "peakAlertField": "VWh0dG_peakAlertField",
339
- "triggerPopName": "VWh0dG_triggerPopName",
340
- "subscriptionReset": "VWh0dG_subscriptionReset",
341
- "pricingTable": "VWh0dG_pricingTable",
342
- "heroSide": "VWh0dG_heroSide",
343
- "bandPrice": "VWh0dG_bandPrice",
344
- "peakAlert": "VWh0dG_peakAlert",
345
- "balanceDetailClose": "VWh0dG_balanceDetailClose",
346
- "settingsHint": "VWh0dG_settingsHint",
431
+ "chartBar": "VWh0dG_chartBar",
432
+ "btn": "VWh0dG_btn",
433
+ "balanceDetailPop": "VWh0dG_balanceDetailPop",
434
+ "plgTitle": "VWh0dG_plgTitle",
435
+ "affix": "VWh0dG_affix",
436
+ "bucketCost": "VWh0dG_bucketCost",
437
+ "metricLabel": "VWh0dG_metricLabel",
438
+ "heroBudgetLabel": "VWh0dG_heroBudgetLabel",
439
+ "dashboardHead": "VWh0dG_dashboardHead",
440
+ "bucketStatValue": "VWh0dG_bucketStatValue",
441
+ "feeItem": "VWh0dG_feeItem",
442
+ "triggerPopAlert": "VWh0dG_triggerPopAlert",
443
+ "tokenModelPartIn": "VWh0dG_tokenModelPartIn",
347
444
  "pluginInfoRow": "VWh0dG_pluginInfoRow",
348
- "subscriptionCard": "VWh0dG_subscriptionCard",
349
- "balanceDetailHead": "VWh0dG_balanceDetailHead",
445
+ "ubStatValue": "VWh0dG_ubStatValue",
446
+ "setCardDesc": "VWh0dG_setCardDesc",
447
+ "tokenModelParts": "VWh0dG_tokenModelParts",
448
+ "rateBadge": "VWh0dG_rateBadge",
449
+ "chartLine": "VWh0dG_chartLine",
350
450
  "reconcileText": "VWh0dG_reconcileText",
351
- "dashboardSubtitle": "VWh0dG_dashboardSubtitle",
352
- "triggerPopRow": "VWh0dG_triggerPopRow",
353
- "budgetInput": "VWh0dG_budgetInput",
354
- "siteRowMeta": "VWh0dG_siteRowMeta",
355
- "pricingToggleText": "VWh0dG_pricingToggleText",
356
- "subscriptionAuto": "VWh0dG_subscriptionAuto",
357
- "providerGroupHead": "VWh0dG_providerGroupHead",
358
- "roundsBarFlagged": "VWh0dG_roundsBarFlagged",
359
- "floatTarget": "VWh0dG_floatTarget",
360
- "liveQuotaWarn": "VWh0dG_liveQuotaWarn",
361
- "triggerPop": "VWh0dG_triggerPop",
362
- "triggerPopUpdated": "VWh0dG_triggerPopUpdated",
363
- "triggerPopOpenBtn": "VWh0dG_triggerPopOpenBtn",
364
- "panelHint": "VWh0dG_panelHint",
365
- "triggerPopFootStrong": "VWh0dG_triggerPopFootStrong",
366
- "kpiValue": "VWh0dG_kpiValue",
367
- "subscriptionName": "VWh0dG_subscriptionName",
368
- "peakAlertPanel": "VWh0dG_peakAlertPanel",
369
- "modelTableScroll": "VWh0dG_modelTableScroll",
370
- "bandTag": "VWh0dG_bandTag",
371
- "providerGroup": "VWh0dG_providerGroup",
372
- "pluginInfoValue": "VWh0dG_pluginInfoValue",
373
- "subscriptionFill": "VWh0dG_subscriptionFill",
374
- "heatmapYearCell": "VWh0dG_heatmapYearCell",
375
- "peakAlertCheck": "VWh0dG_peakAlertCheck",
376
- "staleNotice": "VWh0dG_staleNotice",
377
- "floatSubHead": "VWh0dG_floatSubHead",
378
- "peakAlertCountdown": "VWh0dG_peakAlertCountdown",
379
- "subscriptionStatus": "VWh0dG_subscriptionStatus",
380
- "heatmapLegend": "VWh0dG_heatmapLegend",
381
- "heatmapYearWeekday": "VWh0dG_heatmapYearWeekday",
382
- "peakAlertClose": "VWh0dG_peakAlertClose",
383
- "triggerPopSubscription": "VWh0dG_triggerPopSubscription",
384
- "dashboardIn": "VWh0dG_dashboardIn",
385
- "pricingChevron": "VWh0dG_pricingChevron",
386
- "trigger": "VWh0dG_trigger",
387
- "triggerPopBar": "VWh0dG_triggerPopBar",
451
+ "floatModeBtnOn": "VWh0dG_floatModeBtnOn",
452
+ "peakTag": "VWh0dG_peakTag",
453
+ "exportButton": "VWh0dG_exportButton",
454
+ "subscriptionFillOver": "VWh0dG_subscriptionFillOver",
455
+ "heroGaugePct": "VWh0dG_heroGaugePct",
456
+ "heroGaugeSvg": "VWh0dG_heroGaugeSvg",
457
+ "triggerPopTitleMonth": "VWh0dG_triggerPopTitleMonth",
458
+ "chartDot": "VWh0dG_chartDot",
459
+ "heroSideItem": "VWh0dG_heroSideItem",
460
+ "ubCardControlGroup": "VWh0dG_ubCardControlGroup",
461
+ "floatSubHead": "VWh0dG_floatSubHead",
462
+ "budgetFillOver": "VWh0dG_budgetFillOver",
463
+ "heroGaugeTrack": "VWh0dG_heroGaugeTrack",
464
+ "peakAlertHint": "VWh0dG_peakAlertHint",
465
+ "heroCurrency": "VWh0dG_heroCurrency",
466
+ "chartLegend": "VWh0dG_chartLegend",
467
+ "ubPricepair": "VWh0dG_ubPricepair",
388
468
  "panelTitle": "VWh0dG_panelTitle",
389
- "siteRow": "VWh0dG_siteRow",
390
- "dashboardTitle": "VWh0dG_dashboardTitle",
391
- "heroMain": "VWh0dG_heroMain",
392
- "rangeButton": "VWh0dG_rangeButton",
393
- "healthDot": "VWh0dG_healthDot",
394
- "bucketStatSub": "VWh0dG_bucketStatSub",
395
- "shareValue": "VWh0dG_shareValue",
396
- "subscriptionMeta": "VWh0dG_subscriptionMeta",
397
- "roundsBarWrap": "VWh0dG_roundsBarWrap",
398
- "heatmapYearGrid": "VWh0dG_heatmapYearGrid",
399
- "floatSubPlan": "VWh0dG_floatSubPlan",
400
- "triggerBody": "VWh0dG_triggerBody",
401
- "tableScroll": "VWh0dG_tableScroll",
469
+ "triggerLabel": "VWh0dG_triggerLabel",
470
+ "peakAlertPanelHead": "VWh0dG_peakAlertPanelHead",
471
+ "currencyToggle": "VWh0dG_currencyToggle",
472
+ "triggerPopMetric": "VWh0dG_triggerPopMetric",
473
+ "heroValue": "VWh0dG_heroValue",
474
+ "budgetFillWarn": "VWh0dG_budgetFillWarn",
475
+ "chartLegendBar": "VWh0dG_chartLegendBar",
476
+ "balanceDays": "VWh0dG_balanceDays",
477
+ "ubChipLabel": "VWh0dG_ubChipLabel",
478
+ "pricingTable": "VWh0dG_pricingTable",
479
+ "popDotDirect": "VWh0dG_popDotDirect",
480
+ "ctlRow": "VWh0dG_ctlRow",
402
481
  "triggerPopMetricLabel": "VWh0dG_triggerPopMetricLabel",
403
- "peakAlertTag": "VWh0dG_peakAlertTag",
404
- "modelCell": "VWh0dG_modelCell",
405
- "tokenModelBar": "VWh0dG_tokenModelBar",
406
- "triggerMeta": "VWh0dG_triggerMeta",
407
- "rateBadge": "VWh0dG_rateBadge",
408
- "balanceDetailPop": "VWh0dG_balanceDetailPop",
409
- "peakAlertText": "VWh0dG_peakAlertText",
482
+ "subscriptionCard": "VWh0dG_subscriptionCard",
483
+ "plgNameRow": "VWh0dG_plgNameRow",
484
+ "bucketStatLabel": "VWh0dG_bucketStatLabel",
485
+ "settingsHead": "VWh0dG_settingsHead",
486
+ "shareTrack": "VWh0dG_shareTrack",
487
+ "triggerSparkHot": "VWh0dG_triggerSparkHot",
488
+ "rowlineChev": "VWh0dG_rowlineChev",
489
+ "healthBad": "VWh0dG_healthBad",
490
+ "floatSub": "VWh0dG_floatSub",
491
+ "estimatedTag": "VWh0dG_estimatedTag",
492
+ "tokenModelPartOut": "VWh0dG_tokenModelPartOut",
493
+ "popTitle": "VWh0dG_popTitle",
494
+ "peakCardCorner": "VWh0dG_peakCardCorner",
495
+ "heroGaugeCenter": "VWh0dG_heroGaugeCenter",
496
+ "floatSubPlan": "VWh0dG_floatSubPlan",
410
497
  "heroGaugeArc": "VWh0dG_heroGaugeArc",
411
- "subscriptionTrack": "VWh0dG_subscriptionTrack",
412
- "triggerPopFootName": "VWh0dG_triggerPopFootName",
413
- "bucketSummary": "VWh0dG_bucketSummary"
498
+ "triggerPopFootStatusLow": "VWh0dG_triggerPopFootStatusLow",
499
+ "heroGaugeArcOver": "VWh0dG_heroGaugeArcOver",
500
+ "siteRowTitle": "VWh0dG_siteRowTitle",
501
+ "floatModeRow": "VWh0dG_floatModeRow",
502
+ "pluginInfo": "VWh0dG_pluginInfo",
503
+ "rowlineRight": "VWh0dG_rowlineRight",
504
+ "peakAlertNum": "VWh0dG_peakAlertNum",
505
+ "heatmapRangeButtonActive": "VWh0dG_heatmapRangeButtonActive",
506
+ "triggerPopFootTitle": "VWh0dG_triggerPopFootTitle",
507
+ "roundsBarCol": "VWh0dG_roundsBarCol",
508
+ "plgDesc": "VWh0dG_plgDesc",
509
+ "triggerPopUpdated": "VWh0dG_triggerPopUpdated",
510
+ "chartWrap": "VWh0dG_chartWrap",
511
+ "triggerMain": "VWh0dG_triggerMain",
512
+ "deltaUp": "VWh0dG_deltaUp",
513
+ "triggerMetric": "VWh0dG_triggerMetric",
514
+ "delta": "VWh0dG_delta",
515
+ "healthBadgeBad": "VWh0dG_healthBadgeBad",
516
+ "bandPriceOff": "VWh0dG_bandPriceOff",
517
+ "bucketSummary": "VWh0dG_bucketSummary",
518
+ "peakDotSuccess": "VWh0dG_peakDotSuccess",
519
+ "rowlineDrill": "VWh0dG_rowlineDrill",
520
+ "floatSubName": "VWh0dG_floatSubName",
521
+ "ubCardTitle": "VWh0dG_ubCardTitle",
522
+ "heatmapYearBody": "VWh0dG_heatmapYearBody"
414
523
  };
415
524
  //#endregion
416
525
  //#region src/client/plan-knowledge.ts
@@ -793,6 +902,67 @@ window.__ModuleLoader__.load({
793
902
  output: 16
794
903
  }
795
904
  },
905
+ {
906
+ key: "glm-4.5-air",
907
+ name: "GLM-4.5-Air",
908
+ provider: "智谱 AI",
909
+ colorVar: "dsw-static-blue-300",
910
+ price: {
911
+ currency: "CNY",
912
+ input: .8,
913
+ cacheHit: .16,
914
+ output: 2
915
+ }
916
+ },
917
+ {
918
+ key: "glm-4.7",
919
+ name: "GLM-4.7",
920
+ provider: "智谱 AI",
921
+ colorVar: "dsw-static-blue-400",
922
+ price: {
923
+ currency: "CNY",
924
+ input: 4,
925
+ cacheHit: 1,
926
+ output: 16
927
+ },
928
+ estimated: true
929
+ },
930
+ {
931
+ key: "glm-5-turbo",
932
+ name: "GLM-5-Turbo",
933
+ provider: "智谱 AI",
934
+ colorVar: "dsw-static-blue-500",
935
+ price: {
936
+ currency: "CNY",
937
+ input: 5,
938
+ cacheHit: 1.2,
939
+ output: 22
940
+ }
941
+ },
942
+ {
943
+ key: "glm-5.1",
944
+ name: "GLM-5.1",
945
+ provider: "智谱 AI",
946
+ colorVar: "dsw-static-blue-600",
947
+ price: {
948
+ currency: "CNY",
949
+ input: 6,
950
+ cacheHit: 1.2,
951
+ output: 24
952
+ }
953
+ },
954
+ {
955
+ key: "glm-5v-turbo",
956
+ name: "GLM-5V-Turbo",
957
+ provider: "智谱 AI",
958
+ colorVar: "dsw-static-blue-300",
959
+ price: {
960
+ currency: "CNY",
961
+ input: 5,
962
+ cacheHit: 1.2,
963
+ output: 22
964
+ }
965
+ },
796
966
  {
797
967
  key: "qwen-3.8-max",
798
968
  name: "Qwen3.8 Max",
@@ -961,6 +1131,30 @@ window.__ModuleLoader__.load({
961
1131
  output: 8.4
962
1132
  }
963
1133
  },
1134
+ {
1135
+ key: "minimax-m2.7",
1136
+ name: "MiniMax-M2.7",
1137
+ provider: "MiniMax",
1138
+ colorVar: "dsw-static-amber-400",
1139
+ price: {
1140
+ currency: "CNY",
1141
+ input: 2.1,
1142
+ cacheHit: .42,
1143
+ output: 8.4
1144
+ }
1145
+ },
1146
+ {
1147
+ key: "minimax-m2.7-highspeed",
1148
+ name: "MiniMax-M2.7-highspeed",
1149
+ provider: "MiniMax",
1150
+ colorVar: "dsw-static-amber-500",
1151
+ price: {
1152
+ currency: "CNY",
1153
+ input: 4.2,
1154
+ cacheHit: .42,
1155
+ output: 16.8
1156
+ }
1157
+ },
964
1158
  {
965
1159
  key: "ernie",
966
1160
  name: "ERNIE-5.1",
@@ -1204,6 +1398,13 @@ window.__ModuleLoader__.load({
1204
1398
  "deepseek-v4-flash-vision-exp": "flash-vision-exp",
1205
1399
  "deepseek-v4-pro": "pro",
1206
1400
  "glm-5.2": "glm",
1401
+ "glm-4.5-air": "glm-4.5-air",
1402
+ "glm-4.5air": "glm-4.5-air",
1403
+ "glm-4.7": "glm-4.7",
1404
+ "glm-5-turbo": "glm-5-turbo",
1405
+ "glm-5.1": "glm-5.1",
1406
+ "glm-5v-turbo": "glm-5v-turbo",
1407
+ "glm-5v.1": "glm-5v-turbo",
1207
1408
  "qwen3.8-max": "qwen-3.8-max",
1208
1409
  "qwen3.7-max": "qwen-max",
1209
1410
  "qwen-max": "qwen-max",
@@ -1214,7 +1415,13 @@ window.__ModuleLoader__.load({
1214
1415
  "kimi-k3": "kimi-k3",
1215
1416
  "minimax-m1": "minimax",
1216
1417
  "minimax-m2": "minimax",
1217
- "minimax-m3": "minimax"
1418
+ "minimax-m3": "minimax",
1419
+ "minimax-m2.7": "minimax-m2.7",
1420
+ "minimax-m2.7-highspeed": "minimax-m2.7-highspeed",
1421
+ "minimax-m2.7-high-speed": "minimax-m2.7-highspeed",
1422
+ "minimax-m2-7": "minimax-m2.7",
1423
+ "minimax-m2-7-highspeed": "minimax-m2.7-highspeed",
1424
+ "minimax-m2-7-high-speed": "minimax-m2.7-highspeed"
1218
1425
  };
1219
1426
  /**
1220
1427
  * 模型 id 归一化:小写、去括号附注(如 `gpt5.6 luna(go)` 只看主体)、再去所有
@@ -1320,41 +1527,53 @@ window.__ModuleLoader__.load({
1320
1527
  function catalogEntries() {
1321
1528
  const entries = [...MODEL_CATALOG, ...(liveExtraModels ?? []).map(extraEntryOf)];
1322
1529
  const known = new Set(entries.map((entry) => entry.key.toLowerCase()));
1530
+ const knownCanon = new Set(entries.map((entry) => canonModelId(entry.key)));
1323
1531
  for (const model of liveCatalogModels ?? []) {
1324
1532
  const rawKey = model.id.toLowerCase();
1325
1533
  if ((() => {
1326
1534
  const aliasKey = resolveCatalogKey(model.id);
1327
1535
  return MODEL_CATALOG.find((item) => item.key === aliasKey);
1328
1536
  })() !== void 0) continue;
1329
- if (known.has(rawKey)) continue;
1330
- const fallbackLive = livePriceOf(rawKey);
1537
+ const idCanon = canonModelId(model.id);
1538
+ if (known.has(rawKey) || idCanon !== "" && knownCanon.has(idCanon)) continue;
1539
+ const extra = (liveExtraModels ?? []).find((item) => canonModelId(item.key) === idCanon);
1331
1540
  let entry;
1332
- if (fallbackLive !== void 0) entry = {
1333
- key: rawKey,
1334
- name: model.name ?? model.id,
1335
- provider: model.provider,
1336
- colorVar: "dsw-static-neutral-400",
1337
- price: {
1338
- currency: "USD",
1339
- input: fallbackLive.input,
1340
- cacheHit: fallbackLive.cacheHit,
1341
- output: fallbackLive.output
1342
- }
1343
- };
1344
- else entry = {
1345
- key: resolveCatalogKey(model.id),
1346
- name: model.name ?? model.id,
1347
- provider: model.provider,
1348
- colorVar: "dsw-static-neutral-400",
1349
- price: {
1350
- currency: "USD",
1351
- input: 0,
1352
- cacheHit: 0,
1353
- output: 0
1354
- },
1355
- uncatalogued: true
1356
- };
1541
+ if (extra !== void 0) {
1542
+ entry = extraEntryOf(extra);
1543
+ if (model.name !== void 0 && model.name !== "") entry = {
1544
+ ...entry,
1545
+ name: model.name
1546
+ };
1547
+ } else {
1548
+ const fallbackLive = livePriceOf(rawKey);
1549
+ if (fallbackLive !== void 0) entry = {
1550
+ key: rawKey,
1551
+ name: model.name ?? model.id,
1552
+ provider: model.provider,
1553
+ colorVar: "dsw-static-neutral-400",
1554
+ price: {
1555
+ currency: "USD",
1556
+ input: fallbackLive.input,
1557
+ cacheHit: fallbackLive.cacheHit,
1558
+ output: fallbackLive.output
1559
+ }
1560
+ };
1561
+ else entry = {
1562
+ key: resolveCatalogKey(model.id),
1563
+ name: model.name ?? model.id,
1564
+ provider: model.provider,
1565
+ colorVar: "dsw-static-neutral-400",
1566
+ price: {
1567
+ currency: "USD",
1568
+ input: 0,
1569
+ cacheHit: 0,
1570
+ output: 0
1571
+ },
1572
+ uncatalogued: true
1573
+ };
1574
+ }
1357
1575
  known.add(entry.key.toLowerCase());
1576
+ if (idCanon !== "") knownCanon.add(idCanon);
1358
1577
  entries.push(entry);
1359
1578
  }
1360
1579
  return entries;
@@ -2027,61 +2246,58 @@ window.__ModuleLoader__.load({
2027
2246
  //#endregion
2028
2247
  //#region src/client/PluginInfoCard.tsx
2029
2248
  /**
2030
- * PluginInfoCard: 「设置 → 插件信息」卡——展示头像/作者、GitHub 仓库、版本号、
2031
- * 许可证等插件元信息。版本号来自服务端 usage-stats 的 `pluginVersion`(读自
2032
- * 包 package.json),其余元信息静态来自 `plugin-info.ts`。无版本号时显示 em dash。
2249
+ * PluginInfoCard: 「设置 → 插件信息」卡——图标 + 插件名/版本 tag + 描述,下接
2250
+ * 元信息网格(作者 / 仓库 / npm / 许可证)。版本号来自服务端 usage-stats 的
2251
+ * `pluginVersion`(读自包 package.json),其余元信息静态来自 `plugin-info.ts`。
2252
+ * 无版本号时显示 em dash。
2033
2253
  */
2034
2254
  /** 信息卡 props:locale 函数 + 版本号(服务端下发,可为空)。 */
2035
2255
  function PluginInfoCard({ t, version }) {
2036
2256
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
2037
- className: UsageBilling_module_css_default.panel,
2257
+ className: UsageBilling_module_css_default.setCard,
2038
2258
  "data-testid": "billing-plugin-info",
2039
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2040
- className: UsageBilling_module_css_default.panelHead,
2041
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
2042
- className: UsageBilling_module_css_default.panelTitle,
2043
- children: t("billing.pluginInfo")
2044
- })
2045
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2046
- className: UsageBilling_module_css_default.pluginInfo,
2047
- children: [
2048
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2049
- className: UsageBilling_module_css_default.pluginInfoRow,
2050
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2051
- className: UsageBilling_module_css_default.pluginInfoLabel,
2052
- children: t("billing.pluginName")
2053
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2054
- className: UsageBilling_module_css_default.pluginInfoValue,
2259
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2260
+ className: UsageBilling_module_css_default.plgHead,
2261
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2262
+ className: UsageBilling_module_css_default.plgIcon,
2263
+ "aria-hidden": "true",
2264
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
2265
+ width: "20",
2266
+ height: "20",
2267
+ viewBox: "0 0 24 24",
2268
+ fill: "none",
2269
+ stroke: "currentColor",
2270
+ strokeWidth: "2",
2271
+ strokeLinecap: "round",
2272
+ strokeLinejoin: "round",
2273
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M10 3a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a2 2 0 0 0 4 0V4a1 1 0 0 1 1-1h1a1 1 0 0 1 1 1v1a2 2 0 0 0 4 0 1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-1a2 2 0 0 0 0 4h1a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-1a2 2 0 0 0-4 0v1a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-2a2 2 0 0 0-4 0v1a1 1 0 0 1-1 1h-1a1 1 0 0 1-1-1v-1a2 2 0 0 0-4 0 1 1 0 0 1-1 1H3a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1h1a2 2 0 0 0 0-4H3a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1h1a2 2 0 0 0 4 0z" })
2274
+ })
2275
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2276
+ className: UsageBilling_module_css_default.plgTitle,
2277
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2278
+ className: UsageBilling_module_css_default.plgNameRow,
2279
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
2280
+ className: UsageBilling_module_css_default.plgName,
2055
2281
  children: PLUGIN_NAME
2056
- })]
2057
- }),
2058
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2059
- className: UsageBilling_module_css_default.pluginInfoRow,
2060
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2061
- className: UsageBilling_module_css_default.pluginInfoLabel,
2062
- children: t("billing.pluginDescription")
2063
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2064
- className: UsageBilling_module_css_default.pluginInfoValue,
2065
- children: PLUGIN_DESCRIPTION
2066
- })]
2067
- }),
2068
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2069
- className: UsageBilling_module_css_default.pluginInfoRow,
2070
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2071
- className: UsageBilling_module_css_default.pluginInfoLabel,
2072
- children: t("billing.pluginVersion")
2073
2282
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2074
- className: UsageBilling_module_css_default.pluginInfoValue,
2283
+ className: UsageBilling_module_css_default.plgTag,
2075
2284
  children: version === void 0 ? "—" : `v${version}`
2076
2285
  })]
2077
- }),
2286
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
2287
+ className: UsageBilling_module_css_default.plgDesc,
2288
+ children: PLUGIN_DESCRIPTION
2289
+ })]
2290
+ })]
2291
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2292
+ className: UsageBilling_module_css_default.plgGrid,
2293
+ children: [
2078
2294
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2079
- className: UsageBilling_module_css_default.pluginInfoRow,
2295
+ className: UsageBilling_module_css_default.plgItem,
2080
2296
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2081
- className: UsageBilling_module_css_default.pluginInfoLabel,
2297
+ className: UsageBilling_module_css_default.plgLabel,
2082
2298
  children: t("billing.pluginAuthor")
2083
2299
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("a", {
2084
- className: UsageBilling_module_css_default.pluginInfoLink,
2300
+ className: UsageBilling_module_css_default.plgLink,
2085
2301
  href: `https://github.com/${PLUGIN_AUTHOR_HANDLE}`,
2086
2302
  target: "_blank",
2087
2303
  rel: "noreferrer",
@@ -2094,25 +2310,25 @@ window.__ModuleLoader__.load({
2094
2310
  })]
2095
2311
  }),
2096
2312
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2097
- className: UsageBilling_module_css_default.pluginInfoRow,
2313
+ className: UsageBilling_module_css_default.plgItem,
2098
2314
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2099
- className: UsageBilling_module_css_default.pluginInfoLabel,
2315
+ className: UsageBilling_module_css_default.plgLabel,
2100
2316
  children: t("billing.pluginRepository")
2101
2317
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
2102
- className: UsageBilling_module_css_default.pluginInfoLink,
2318
+ className: UsageBilling_module_css_default.plgLink,
2103
2319
  href: PLUGIN_REPOSITORY,
2104
2320
  target: "_blank",
2105
2321
  rel: "noreferrer",
2106
- children: PLUGIN_REPOSITORY
2322
+ children: "GitHub"
2107
2323
  })]
2108
2324
  }),
2109
2325
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2110
- className: UsageBilling_module_css_default.pluginInfoRow,
2326
+ className: UsageBilling_module_css_default.plgItem,
2111
2327
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2112
- className: UsageBilling_module_css_default.pluginInfoLabel,
2328
+ className: UsageBilling_module_css_default.plgLabel,
2113
2329
  children: t("billing.pluginNpm")
2114
2330
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
2115
- className: UsageBilling_module_css_default.pluginInfoLink,
2331
+ className: UsageBilling_module_css_default.plgLink,
2116
2332
  href: PLUGIN_NPM_URL,
2117
2333
  target: "_blank",
2118
2334
  rel: "noreferrer",
@@ -2120,12 +2336,12 @@ window.__ModuleLoader__.load({
2120
2336
  })]
2121
2337
  }),
2122
2338
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2123
- className: UsageBilling_module_css_default.pluginInfoRow,
2339
+ className: UsageBilling_module_css_default.plgItem,
2124
2340
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2125
- className: UsageBilling_module_css_default.pluginInfoLabel,
2341
+ className: UsageBilling_module_css_default.plgLabel,
2126
2342
  children: t("billing.pluginLicense")
2127
2343
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2128
- className: UsageBilling_module_css_default.pluginInfoValue,
2344
+ className: UsageBilling_module_css_default.plgVal,
2129
2345
  children: "MIT"
2130
2346
  })]
2131
2347
  })
@@ -3193,7 +3409,10 @@ window.__ModuleLoader__.load({
3193
3409
  "billing.trendMetricTokens": "Token",
3194
3410
  "billing.trendEmpty": "暂无趋势数据",
3195
3411
  "billing.budget": "本月预算",
3412
+ "billing.budgetAmount": "预算金额",
3413
+ "billing.budgetSummary": "本月已用 {used} / {total};达到 80% 时提醒,达到 100% 时红色脉冲警示",
3196
3414
  "billing.sessions": "会话明细",
3415
+ "billing.sessionTitle": "标题",
3197
3416
  "billing.project": "项目",
3198
3417
  "billing.lastActive": "最后活跃",
3199
3418
  "billing.sessionOverflow": "仅显示花费前 {limit} 个,共 {total} 个会话",
@@ -3216,12 +3435,23 @@ window.__ModuleLoader__.load({
3216
3435
  "billing.band": "时段",
3217
3436
  "billing.openDashboard": "打开计费仪表盘",
3218
3437
  "billing.close": "关闭",
3438
+ "billing.footer": "每 30s 自动轮询 · 仅统计本机 dsh 会话",
3439
+ "billing.footerCredit": "dsh-ui-usage-billing {version} · MIT",
3219
3440
  "billing.lastUpdated": "数据更新于",
3220
3441
  "billing.noData": "暂无计费数据",
3221
3442
  "billing.todayRate": "今日汇率",
3222
3443
  "billing.rateLive": "实时",
3223
3444
  "billing.rateBuiltin": "内置",
3224
3445
  "billing.pricingTip": "DeepSeek 模型自北京时间 2026-08-23(周日)00:00 起:工作日高峰 9-12 / 14-18(×2),周末(周六 / 周日)全天低谷价;双价单元格按峰 / 谷展示,费用按调用时刻计。",
3446
+ "billing.pricingUnit": "单位:人民币 / 每百万 Token",
3447
+ "billing.pricingNotes": "计价说明",
3448
+ "billing.ubPeak": "峰",
3449
+ "billing.ubOff": "谷",
3450
+ "billing.peakBand": "峰谷分带",
3451
+ "billing.pricingSource": "数据来源",
3452
+ "billing.noteCache": "命中部分按缓存价计费,显著降低成本。",
3453
+ "billing.noteBand": "高峰与空闲时段单价不同,空闲约半价。",
3454
+ "billing.noteSource": "价格来自实时汇率 + 模型定价目录,未收录模型按 0 计并提示。",
3225
3455
  "billing.balance": "余额",
3226
3456
  "billing.balanceUnconfigured": "未配置",
3227
3457
  "billing.balanceUnauthorized": "密钥无效",
@@ -3248,8 +3478,10 @@ window.__ModuleLoader__.load({
3248
3478
  "billing.subscriptionNoApi": "该厂商暂未提供用量查询接口",
3249
3479
  "billing.floatWindow": "模型用量悬浮窗",
3250
3480
  "billing.floatModeCombined": "综合",
3251
- "billing.floatModeSubscription": "指定订阅卡",
3252
- "billing.floatWindowHint": "悬浮在左下角计费卡上的用量速览;综合=当前样式,指定订阅卡=每次展示一张订阅额度卡(可切换)。",
3481
+ "billing.floatModeSubscription": "订阅卡",
3482
+ "billing.floatMode": "展示模式",
3483
+ "billing.floatTargets": "订阅目标",
3484
+ "billing.floatWindowHint": "悬浮在左下角计费卡上的用量速览;综合=当前样式,订阅卡=每次展示一张订阅额度卡(可切换)。",
3253
3485
  "billing.floatNoTargets": "未指定订阅通道,请在设置中勾选要展示的订阅。",
3254
3486
  "billing.floatNoTargetsHint": "暂无可选的订阅通道。",
3255
3487
  "billing.floatPrev": "上一张订阅",
@@ -3262,12 +3494,17 @@ window.__ModuleLoader__.load({
3262
3494
  "billing.currencyUsd": "美元",
3263
3495
  "billing.heatmap": "用量热力图",
3264
3496
  "billing.rounds": "每轮费用",
3497
+ "billing.roundsHint": "最近 {count} 轮 · 柱顶为金额 · 底色为峰谷时段",
3265
3498
  "billing.anomaly": "成本突增",
3266
3499
  "billing.workspaces": "工作区统计",
3500
+ "billing.workspacesHint": "点击行下钻项目成本前 5 会话",
3267
3501
  "billing.plan": "套餐",
3268
3502
  "billing.remaining": "剩余",
3269
3503
  "billing.unknownModel": "未定价",
3270
3504
  "billing.model": "模型",
3505
+ "billing.thModel": "模型名称",
3506
+ "billing.thInputMiss": "输入缓存未命中",
3507
+ "billing.thInputHit": "输入缓存命中",
3271
3508
  "billing.currentRound": "当前",
3272
3509
  "billing.costAbbr": "费用",
3273
3510
  "billing.tabOverview": "概览",
@@ -3280,8 +3517,8 @@ window.__ModuleLoader__.load({
3280
3517
  "billing.settingsHint": "管理与计费相关的偏好",
3281
3518
  "billing.budgetHint": "设置月度上限,用于本月预计与超支分段提醒",
3282
3519
  "billing.peakAlertHint": "在切档前弹窗提醒,可选同步系统通知",
3283
- "billing.peakAlertDescPeak": "高峰价生效,不急的调用可稍候",
3284
- "billing.peakAlertDescOff": "价格减半省钱窗口已开启",
3520
+ "billing.peakAlertDescPeak": "即将进入高峰时段,价格将上调,请提前安排长任务",
3521
+ "billing.peakAlertDescOff": "即将进入平价时段,价格减半,适合运行大批量任务",
3285
3522
  "billing.export": "导出",
3286
3523
  "billing.exportCsvDay": "按日 CSV",
3287
3524
  "billing.exportCsvSession": "按会话 CSV",
@@ -3304,6 +3541,8 @@ window.__ModuleLoader__.load({
3304
3541
  "billing.peakAlertTitleOff": "即将进入平价",
3305
3542
  "billing.peakAlert": "峰谷切换提醒",
3306
3543
  "billing.peakAlertLeadMin": "提前量(分钟)",
3544
+ "billing.peakAlertPos": "位置",
3545
+ "billing.peakAlertMode": "提醒模式",
3307
3546
  "billing.peakAlertPosCorner": "右下角",
3308
3547
  "billing.peakAlertPosCenter": "屏幕居中",
3309
3548
  "billing.peakAlertModePeak": "仅进入峰时",
@@ -3369,10 +3608,10 @@ window.__ModuleLoader__.load({
3369
3608
  "billing.balanceDaysLong": "约可撑",
3370
3609
  "billing.balanceDaysUnit": "天",
3371
3610
  "billing.popTodayModel": "主力消耗模型余额",
3611
+ "billing.popTitle": "用量速览",
3372
3612
  "billing.popNoConsumption": "暂无消耗",
3373
3613
  "billing.popQuotaAlert": "额度提醒",
3374
3614
  "billing.popRiskNone": "余额与配额正常",
3375
- "billing.popTitle": "用量与预测",
3376
3615
  "billing.popDirectLead": "直联",
3377
3616
  "billing.popSubLead": "订阅",
3378
3617
  "billing.popBalanceNormal": "余额正常",
@@ -3421,7 +3660,10 @@ window.__ModuleLoader__.load({
3421
3660
  "billing.trendMetricTokens": "Tokens",
3422
3661
  "billing.trendEmpty": "No trend data yet",
3423
3662
  "billing.budget": "Monthly budget",
3663
+ "billing.budgetAmount": "Budget amount",
3664
+ "billing.budgetSummary": "Used {used} / {total} this month; warn at 80%, pulse red at 100%",
3424
3665
  "billing.sessions": "Sessions",
3666
+ "billing.sessionTitle": "Title",
3425
3667
  "billing.project": "Project",
3426
3668
  "billing.lastActive": "Last active",
3427
3669
  "billing.sessionOverflow": "Top {limit} of {total} sessions by cost",
@@ -3444,12 +3686,23 @@ window.__ModuleLoader__.load({
3444
3686
  "billing.band": "Band",
3445
3687
  "billing.openDashboard": "Open billing dashboard",
3446
3688
  "billing.close": "Close",
3689
+ "billing.footer": "Polls every 30s · local dsh sessions only",
3690
+ "billing.footerCredit": "dsh-ui-usage-billing {version} · MIT",
3447
3691
  "billing.lastUpdated": "Updated",
3448
3692
  "billing.noData": "No billing data yet",
3449
3693
  "billing.todayRate": "Today rate",
3450
3694
  "billing.rateLive": "Live",
3451
3695
  "billing.rateBuiltin": "Built-in",
3452
3696
  "billing.pricingTip": "DeepSeek models: from 2026-08-23 (Sun) 00:00 Beijing, weekdays peak 9-12 / 14-18 (×2), weekends (Sat/Sun) all-day off-peak; cells show peak/off-peak price, billed at call time.",
3697
+ "billing.pricingUnit": "Unit: CNY / per 1M tokens",
3698
+ "billing.pricingNotes": "Pricing notes",
3699
+ "billing.ubPeak": "Peak",
3700
+ "billing.ubOff": "Off",
3701
+ "billing.peakBand": "Peak/off-peak band",
3702
+ "billing.pricingSource": "Data source",
3703
+ "billing.noteCache": "Cache hits are billed at the cache rate, cutting cost.",
3704
+ "billing.noteBand": "Peak and off-peak prices differ; off-peak is roughly half price.",
3705
+ "billing.noteSource": "Prices come from the live rate + model catalog; unlisted models count as 0 and are flagged.",
3453
3706
  "billing.balance": "Balance",
3454
3707
  "billing.balanceUnconfigured": "Not set",
3455
3708
  "billing.balanceUnauthorized": "Bad key",
@@ -3476,7 +3729,9 @@ window.__ModuleLoader__.load({
3476
3729
  "billing.subscriptionNoApi": "Provider does not offer a usage API",
3477
3730
  "billing.floatWindow": "Model usage popover",
3478
3731
  "billing.floatModeCombined": "Combined",
3479
- "billing.floatModeSubscription": "Subscription cards",
3732
+ "billing.floatModeSubscription": "Subscription card",
3733
+ "billing.floatMode": "Display mode",
3734
+ "billing.floatTargets": "Targets",
3480
3735
  "billing.floatWindowHint": "Usage summary floating on the footer card; Combined=current style, Subscription cards=one quota card at a time (switchable).",
3481
3736
  "billing.floatNoTargets": "No subscription selected — pick some in Settings.",
3482
3737
  "billing.floatNoTargetsHint": "No subscription channel available.",
@@ -3490,12 +3745,17 @@ window.__ModuleLoader__.load({
3490
3745
  "billing.currencyUsd": "USD",
3491
3746
  "billing.heatmap": "Usage heatmap",
3492
3747
  "billing.rounds": "Cost per turn",
3748
+ "billing.roundsHint": "Last {count} rounds · bar tops show amount · fill = peak/off-peak",
3493
3749
  "billing.anomaly": "Cost spike",
3494
3750
  "billing.workspaces": "Workspaces",
3751
+ "billing.workspacesHint": "Click a row to drill into its top-5 sessions",
3495
3752
  "billing.plan": "Plan",
3496
3753
  "billing.remaining": "Left",
3497
3754
  "billing.unknownModel": "Unpriced",
3498
3755
  "billing.model": "Model",
3756
+ "billing.thModel": "Model name",
3757
+ "billing.thInputMiss": "Input (cache miss)",
3758
+ "billing.thInputHit": "Input (cache hit)",
3499
3759
  "billing.currentRound": "current",
3500
3760
  "billing.costAbbr": "cost",
3501
3761
  "billing.tabOverview": "Overview",
@@ -3508,8 +3768,8 @@ window.__ModuleLoader__.load({
3508
3768
  "billing.settingsHint": "Manage billing-related preferences",
3509
3769
  "billing.budgetHint": "Set a monthly cap for projections and tier alerts",
3510
3770
  "billing.peakAlertHint": "Alert before a tier switch, optionally via system notification",
3511
- "billing.peakAlertDescPeak": "Peak pricing active — non-urgent calls can wait",
3512
- "billing.peakAlertDescOff": "Off-peak savings window is on",
3771
+ "billing.peakAlertDescPeak": "About to enter peak hours — prices rise, plan long tasks ahead",
3772
+ "billing.peakAlertDescOff": "About to enter off-peak hours — price halves, ideal for large batches",
3513
3773
  "billing.export": "Export",
3514
3774
  "billing.exportCsvDay": "Daily CSV",
3515
3775
  "billing.exportCsvSession": "Sessions CSV",
@@ -3532,6 +3792,8 @@ window.__ModuleLoader__.load({
3532
3792
  "billing.peakAlertTitleOff": "Off-peak incoming",
3533
3793
  "billing.peakAlert": "Peak/off-peak alert",
3534
3794
  "billing.peakAlertLeadMin": "Lead time (min)",
3795
+ "billing.peakAlertPos": "Position",
3796
+ "billing.peakAlertMode": "Remind mode",
3535
3797
  "billing.peakAlertPosCorner": "Bottom-right",
3536
3798
  "billing.peakAlertPosCenter": "Center",
3537
3799
  "billing.peakAlertModePeak": "Entering peak only",
@@ -3597,10 +3859,10 @@ window.__ModuleLoader__.load({
3597
3859
  "billing.balanceDaysLong": "~days left",
3598
3860
  "billing.balanceDaysUnit": "days",
3599
3861
  "billing.popTodayModel": "Main model balance",
3862
+ "billing.popTitle": "Usage overview",
3600
3863
  "billing.popNoConsumption": "No usage yet",
3601
3864
  "billing.popQuotaAlert": "Quota alerts",
3602
3865
  "billing.popRiskNone": "Balances & quotas OK",
3603
- "billing.popTitle": "Usage & forecast",
3604
3866
  "billing.popDirectLead": "Direct",
3605
3867
  "billing.popSubLead": "Subscription",
3606
3868
  "billing.popBalanceNormal": "balance ok",
@@ -3726,8 +3988,8 @@ window.__ModuleLoader__.load({
3726
3988
  //#region src/client/PeakAlertBanner.tsx
3727
3989
  /**
3728
3990
  * 峰谷切换提醒浮层:切档前状态条(右下角或居中)。用 `position: fixed` 即可在
3729
- * 任意宿主容器内覆盖整个视口,因此不需要 portal。布局为「档位徽标 + 大号等宽
3730
- * 倒计时 + 一句说明 + 关闭」,克制冷调、无重力阴影。渲染是受控的:父组件把命中
3991
+ * 任意宿主容器内覆盖整个视口,因此不需要 portal。布局按设计 peak-card:头部
3992
+ * (档位 tag + 关闭)→ 大号等宽倒计时 → 一句说明。渲染是受控的:父组件把命中
3731
3993
  * (hit)与偏好传入,显示剩余分钟并在切换后消失。
3732
3994
  */
3733
3995
  /** 渲染一个切档前提醒状态条。 */
@@ -3749,29 +4011,35 @@ window.__ModuleLoader__.load({
3749
4011
  const entering = hit.entering;
3750
4012
  const tag = entering === "peak" ? t("billing.tierPeak") : t("billing.tierOff");
3751
4013
  const desc = entering === "peak" ? t("billing.peakAlertDescPeak") : t("billing.peakAlertDescOff");
4014
+ const isPeak = entering === "peak";
3752
4015
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3753
- className: clsx(UsageBilling_module_css_default.peakAlert, entering === "peak" ? UsageBilling_module_css_default.peakAlertPeak : UsageBilling_module_css_default.peakAlertOff, config.position === "center" ? UsageBilling_module_css_default.peakAlertCenter : UsageBilling_module_css_default.peakAlertCorner),
4016
+ className: clsx(UsageBilling_module_css_default.peakCard, isPeak ? UsageBilling_module_css_default.peakCardPeak : UsageBilling_module_css_default.peakCardOff, config.position === "center" ? UsageBilling_module_css_default.peakCardCenter : UsageBilling_module_css_default.peakCardCorner),
3754
4017
  "data-testid": "billing-peak-alert",
3755
4018
  role: "alert",
3756
4019
  children: [
3757
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
3758
- className: UsageBilling_module_css_default.peakAlertTag,
3759
- children: tag
4020
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4021
+ className: UsageBilling_module_css_default.peakHead,
4022
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4023
+ className: clsx(UsageBilling_module_css_default.peakTag, isPeak ? UsageBilling_module_css_default.peakTagPrimary : UsageBilling_module_css_default.peakTagSuccess),
4024
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4025
+ className: clsx(UsageBilling_module_css_default.peakDot, isPeak ? UsageBilling_module_css_default.peakDotPrimary : UsageBilling_module_css_default.peakDotSuccess),
4026
+ "aria-hidden": "true"
4027
+ }), tag]
4028
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
4029
+ type: "button",
4030
+ className: UsageBilling_module_css_default.peakClose,
4031
+ onClick: onDismiss,
4032
+ "aria-label": t("billing.close"),
4033
+ children: "×"
4034
+ })]
3760
4035
  }),
3761
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
3762
- className: UsageBilling_module_css_default.peakAlertCountdown,
3763
- children: [minutes, "m"]
4036
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4037
+ className: clsx(UsageBilling_module_css_default.peakCount, isPeak ? UsageBilling_module_css_default.peakCountPrimary : UsageBilling_module_css_default.peakCountSuccess),
4038
+ children: [minutes, "min"]
3764
4039
  }),
3765
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
3766
- className: UsageBilling_module_css_default.peakAlertText,
4040
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
4041
+ className: UsageBilling_module_css_default.peakDesc,
3767
4042
  children: desc
3768
- }),
3769
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
3770
- type: "button",
3771
- className: UsageBilling_module_css_default.peakAlertClose,
3772
- onClick: onDismiss,
3773
- "aria-label": t("billing.close"),
3774
- children: "×"
3775
4043
  })
3776
4044
  ]
3777
4045
  });
@@ -4387,16 +4655,24 @@ window.__ModuleLoader__.load({
4387
4655
  children: cardIcon
4388
4656
  }),
4389
4657
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4390
- className: UsageBilling_module_css_default.triggerBody,
4658
+ className: UsageBilling_module_css_default.triggerMain,
4391
4659
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4392
- className: UsageBilling_module_css_default.triggerRow,
4393
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4394
- className: UsageBilling_module_css_default.triggerMeta,
4395
- children: t("billing.triggerMonth")
4396
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4397
- className: UsageBilling_module_css_default.triggerAmount,
4398
- children: formatMoney(monthCost)
4399
- })]
4660
+ className: UsageBilling_module_css_default.triggerPrimary,
4661
+ children: [
4662
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4663
+ className: UsageBilling_module_css_default.triggerLabel,
4664
+ children: t("billing.triggerMonth")
4665
+ }),
4666
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4667
+ className: UsageBilling_module_css_default.triggerYen,
4668
+ "aria-hidden": "true",
4669
+ children: formatMoney(monthCost).charAt(0)
4670
+ }),
4671
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4672
+ className: UsageBilling_module_css_default.triggerMetric,
4673
+ children: formatMoney(monthCost).slice(1)
4674
+ })
4675
+ ]
4400
4676
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4401
4677
  className: UsageBilling_module_css_default.triggerSub,
4402
4678
  "data-testid": "billing-trigger-today",
@@ -4447,154 +4723,171 @@ window.__ModuleLoader__.load({
4447
4723
  className: UsageBilling_module_css_default.subscriptionWindow,
4448
4724
  children: [
4449
4725
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4450
- className: UsageBilling_module_css_default.subscriptionWindowLabel,
4451
- children: subscriptionWindowLabel(window.kind, t)
4726
+ className: UsageBilling_module_css_default.subscriptionWindowLabel,
4727
+ children: subscriptionWindowLabel(window.kind, t)
4728
+ }),
4729
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4730
+ className: UsageBilling_module_css_default.subscriptionTrack,
4731
+ "aria-hidden": "true",
4732
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4733
+ className: clsx(UsageBilling_module_css_default.subscriptionFill, used >= 100 && UsageBilling_module_css_default.subscriptionFillOver, used >= 80 && used < 100 && UsageBilling_module_css_default.subscriptionFillWarn),
4734
+ style: { width: `${used}%` }
4735
+ })
4736
+ }),
4737
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4738
+ className: UsageBilling_module_css_default.subscriptionMeta,
4739
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4740
+ className: clsx(UsageBilling_module_css_default.subscriptionPct, exhausted && UsageBilling_module_css_default.subscriptionExhausted),
4741
+ children: exhausted ? t("billing.subscriptionExhausted") : t("billing.subscriptionRemaining").replace("{pct}", String(window.remainingPercent))
4742
+ }), window.resetsAt !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4743
+ className: UsageBilling_module_css_default.subscriptionReset,
4744
+ children: t("billing.subscriptionReset").replace("{date}", `${localDayStamp(new Date(window.resetsAt).getTime())} ${formatClock(new Date(window.resetsAt).getTime())}`)
4745
+ })]
4746
+ })
4747
+ ]
4748
+ }, window.kind);
4749
+ })())]
4750
+ }), targetSubs.length > 1 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4751
+ className: UsageBilling_module_css_default.triggerPopSwitcher,
4752
+ "data-testid": "billing-float-switcher",
4753
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4754
+ className: UsageBilling_module_css_default.triggerPopSwitchCount,
4755
+ children: [
4756
+ effectiveSubIndex + 1,
4757
+ "/",
4758
+ targetSubs.length
4759
+ ]
4760
+ })
4761
+ })] }) }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
4762
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4763
+ className: UsageBilling_module_css_default.popHead,
4764
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4765
+ className: UsageBilling_module_css_default.popTitle,
4766
+ children: t("billing.popTitle")
4767
+ })
4768
+ }),
4769
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4770
+ className: UsageBilling_module_css_default.metricGrid,
4771
+ children: [
4772
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4773
+ className: UsageBilling_module_css_default.metricCell,
4774
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4775
+ className: UsageBilling_module_css_default.metricLabel,
4776
+ children: t("billing.monthCost")
4777
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4778
+ className: clsx(UsageBilling_module_css_default.metricValue, UsageBilling_module_css_default.metricValuePrimary),
4779
+ children: formatMoney(monthCost)
4780
+ })]
4781
+ }),
4782
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4783
+ className: UsageBilling_module_css_default.metricCell,
4784
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4785
+ className: UsageBilling_module_css_default.metricLabel,
4786
+ children: t("billing.tokenTotal")
4787
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4788
+ className: UsageBilling_module_css_default.metricValue,
4789
+ children: formatTokens(dash.totalToken)
4790
+ })]
4791
+ }),
4792
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4793
+ className: UsageBilling_module_css_default.metricCell,
4794
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4795
+ className: UsageBilling_module_css_default.metricLabel,
4796
+ children: t("billing.input")
4797
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4798
+ className: UsageBilling_module_css_default.metricValue,
4799
+ children: formatTokens(dash.input)
4800
+ })]
4801
+ }),
4802
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4803
+ className: UsageBilling_module_css_default.metricCell,
4804
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4805
+ className: UsageBilling_module_css_default.metricLabel,
4806
+ children: t("billing.output")
4807
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4808
+ className: UsageBilling_module_css_default.metricValue,
4809
+ children: formatTokens(dash.output)
4810
+ })]
4811
+ }),
4812
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4813
+ className: UsageBilling_module_css_default.metricCell,
4814
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4815
+ className: UsageBilling_module_css_default.metricLabel,
4816
+ children: t("billing.cacheHit")
4817
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4818
+ className: clsx(UsageBilling_module_css_default.metricValue, UsageBilling_module_css_default.metricValueSuccess),
4819
+ children: formatTokens(dash.cacheRead)
4820
+ })]
4821
+ }),
4822
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4823
+ className: UsageBilling_module_css_default.metricCell,
4824
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4825
+ className: UsageBilling_module_css_default.metricLabel,
4826
+ children: t("billing.calls")
4827
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4828
+ className: UsageBilling_module_css_default.metricValue,
4829
+ children: dash.calls.toLocaleString()
4830
+ })]
4831
+ })
4832
+ ]
4833
+ }),
4834
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4835
+ className: UsageBilling_module_css_default.popModel,
4836
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4837
+ className: UsageBilling_module_css_default.popModelLabel,
4838
+ children: t("billing.popTodayModel")
4839
+ }), vendorStatus.direct !== void 0 || vendorStatus.sub !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [vendorStatus.direct !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4840
+ className: UsageBilling_module_css_default.popModelRow,
4841
+ children: [
4842
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4843
+ className: clsx(UsageBilling_module_css_default.popDot, UsageBilling_module_css_default.popDotDirect),
4844
+ "aria-hidden": "true"
4845
+ }),
4846
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4847
+ className: UsageBilling_module_css_default.popTagPrimary,
4848
+ children: t("billing.popDirectLead")
4849
+ }),
4850
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4851
+ className: UsageBilling_module_css_default.popModelName,
4852
+ children: vendorStatus.direct.name
4853
+ }),
4854
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4855
+ className: clsx(UsageBilling_module_css_default.popModelStatus, vendorStatus.direct.low && UsageBilling_module_css_default.popModelStatusLow),
4856
+ children: vendorStatus.direct.text
4857
+ })
4858
+ ]
4859
+ }), vendorStatus.sub !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4860
+ className: UsageBilling_module_css_default.popModelRow,
4861
+ children: [
4862
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4863
+ className: clsx(UsageBilling_module_css_default.popDot, UsageBilling_module_css_default.popDotSub),
4864
+ "aria-hidden": "true"
4865
+ }),
4866
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4867
+ className: UsageBilling_module_css_default.popTagSub,
4868
+ children: t("billing.popSubLead")
4452
4869
  }),
4453
4870
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4454
- className: UsageBilling_module_css_default.subscriptionTrack,
4455
- "aria-hidden": "true",
4456
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4457
- className: clsx(UsageBilling_module_css_default.subscriptionFill, used >= 100 && UsageBilling_module_css_default.subscriptionFillOver, used >= 80 && used < 100 && UsageBilling_module_css_default.subscriptionFillWarn),
4458
- style: { width: `${used}%` }
4459
- })
4871
+ className: UsageBilling_module_css_default.popModelName,
4872
+ children: vendorStatus.sub.name
4460
4873
  }),
4461
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4462
- className: UsageBilling_module_css_default.subscriptionMeta,
4463
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4464
- className: clsx(UsageBilling_module_css_default.subscriptionPct, exhausted && UsageBilling_module_css_default.subscriptionExhausted),
4465
- children: exhausted ? t("billing.subscriptionExhausted") : t("billing.subscriptionRemaining").replace("{pct}", String(window.remainingPercent))
4466
- }), window.resetsAt !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4467
- className: UsageBilling_module_css_default.subscriptionReset,
4468
- children: t("billing.subscriptionReset").replace("{date}", `${localDayStamp(new Date(window.resetsAt).getTime())} ${formatClock(new Date(window.resetsAt).getTime())}`)
4469
- })]
4874
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4875
+ className: clsx(UsageBilling_module_css_default.popModelStatus, vendorStatus.sub.low && UsageBilling_module_css_default.popModelStatusLow),
4876
+ children: vendorStatus.sub.text
4470
4877
  })
4471
4878
  ]
4472
- }, window.kind);
4473
- })())]
4474
- }), targetSubs.length > 1 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4475
- className: UsageBilling_module_css_default.triggerPopSwitcher,
4476
- "data-testid": "billing-float-switcher",
4477
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4478
- className: UsageBilling_module_css_default.triggerPopSwitchCount,
4479
- children: [
4480
- effectiveSubIndex + 1,
4481
- "/",
4482
- targetSubs.length
4483
- ]
4484
- })
4485
- })] }) }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4486
- className: UsageBilling_module_css_default.triggerPopMetrics,
4487
- children: [
4488
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4489
- className: UsageBilling_module_css_default.triggerPopMetric,
4490
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4491
- className: UsageBilling_module_css_default.triggerPopMetricLabel,
4492
- children: t("billing.monthCost")
4493
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4494
- className: clsx(UsageBilling_module_css_default.triggerPopMetricValue, UsageBilling_module_css_default.triggerPopMetricHighlight),
4495
- children: formatMoney(monthCost)
4496
- })]
4497
- }),
4498
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4499
- className: UsageBilling_module_css_default.triggerPopMetric,
4500
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4501
- className: UsageBilling_module_css_default.triggerPopMetricLabel,
4502
- children: t("billing.tokenTotal")
4503
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4504
- className: UsageBilling_module_css_default.triggerPopMetricValue,
4505
- children: formatTokens(dash.totalToken)
4506
- })]
4507
- }),
4508
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4509
- className: UsageBilling_module_css_default.triggerPopMetric,
4510
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4511
- className: UsageBilling_module_css_default.triggerPopMetricLabel,
4512
- children: t("billing.input")
4513
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4514
- className: UsageBilling_module_css_default.triggerPopMetricValue,
4515
- children: formatTokens(dash.input)
4516
- })]
4517
- }),
4518
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4519
- className: UsageBilling_module_css_default.triggerPopMetric,
4520
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4521
- className: UsageBilling_module_css_default.triggerPopMetricLabel,
4522
- children: t("billing.output")
4523
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4524
- className: UsageBilling_module_css_default.triggerPopMetricValue,
4525
- children: formatTokens(dash.output)
4526
- })]
4527
- }),
4528
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4529
- className: UsageBilling_module_css_default.triggerPopMetric,
4530
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4531
- className: UsageBilling_module_css_default.triggerPopMetricLabel,
4532
- children: t("billing.cacheHit")
4533
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4534
- className: UsageBilling_module_css_default.triggerPopMetricValue,
4535
- children: formatTokens(dash.cacheRead)
4536
- })]
4537
- }),
4538
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4539
- className: UsageBilling_module_css_default.triggerPopMetric,
4879
+ })] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4880
+ className: UsageBilling_module_css_default.popModelRow,
4540
4881
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4541
- className: UsageBilling_module_css_default.triggerPopMetricLabel,
4542
- children: t("billing.calls")
4882
+ className: clsx(UsageBilling_module_css_default.popDot, UsageBilling_module_css_default.popDotNeutral),
4883
+ "aria-hidden": "true"
4543
4884
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4544
- className: UsageBilling_module_css_default.triggerPopMetricValue,
4545
- children: dash.calls.toLocaleString()
4546
- })]
4547
- })
4548
- ]
4549
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4550
- className: UsageBilling_module_css_default.triggerPopFoot,
4551
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4552
- className: UsageBilling_module_css_default.triggerPopFootTitle,
4553
- children: t("billing.popTodayModel")
4554
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4555
- className: UsageBilling_module_css_default.triggerPopFootNotes,
4556
- children: [
4557
- vendorStatus.direct !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4558
- className: UsageBilling_module_css_default.triggerPopFootNote,
4559
- children: [
4560
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4561
- className: clsx(UsageBilling_module_css_default.triggerPopBadge, UsageBilling_module_css_default.triggerPopBadgeDirect),
4562
- children: t("billing.popDirectLead")
4563
- }),
4564
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4565
- className: UsageBilling_module_css_default.triggerPopFootName,
4566
- children: vendorStatus.direct.name
4567
- }),
4568
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4569
- className: clsx(UsageBilling_module_css_default.triggerPopFootStatus, vendorStatus.direct.low && UsageBilling_module_css_default.triggerPopFootStatusLow),
4570
- children: vendorStatus.direct.text
4571
- })
4572
- ]
4573
- }),
4574
- vendorStatus.sub !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4575
- className: UsageBilling_module_css_default.triggerPopFootNote,
4576
- children: [
4577
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4578
- className: clsx(UsageBilling_module_css_default.triggerPopBadge, UsageBilling_module_css_default.triggerPopBadgeSub),
4579
- children: t("billing.popSubLead")
4580
- }),
4581
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4582
- className: UsageBilling_module_css_default.triggerPopFootName,
4583
- children: vendorStatus.sub.name
4584
- }),
4585
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4586
- className: clsx(UsageBilling_module_css_default.triggerPopFootStatus, vendorStatus.sub.low && UsageBilling_module_css_default.triggerPopFootStatusLow),
4587
- children: vendorStatus.sub.text
4588
- })
4589
- ]
4590
- }),
4591
- vendorStatus.direct === void 0 && vendorStatus.sub === void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4592
- className: UsageBilling_module_css_default.triggerPopFootNote,
4885
+ className: UsageBilling_module_css_default.popModelStatus,
4593
4886
  children: t("billing.popNoConsumption")
4594
- })
4595
- ]
4596
- })]
4597
- })] })
4887
+ })]
4888
+ })]
4889
+ })
4890
+ ] })
4598
4891
  })]
4599
4892
  });
4600
4893
  }
@@ -4820,6 +5113,7 @@ window.__ModuleLoader__.load({
4820
5113
  yearCost,
4821
5114
  t
4822
5115
  ]);
5116
+ const heroBudgetPct = budgetEnabled && budgetAmount > 0 ? monthCost / budgetAmount * 100 : 0;
4823
5117
  const trendDates = (0, react.useMemo)(() => {
4824
5118
  const out = [];
4825
5119
  for (let offset = trendDays - 1; offset >= 0; offset -= 1) {
@@ -5017,7 +5311,7 @@ window.__ModuleLoader__.load({
5017
5311
  onClick: () => {
5018
5312
  onCurrency(unit);
5019
5313
  },
5020
- children: unit === "cny" ? "¥" : "$"
5314
+ children: unit === "cny" ? "¥ CNY" : "$ USD"
5021
5315
  }, unit))
5022
5316
  }),
5023
5317
  health.checked && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
@@ -5128,20 +5422,31 @@ window.__ModuleLoader__.load({
5128
5422
  className: UsageBilling_module_css_default.heroTop,
5129
5423
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5130
5424
  className: UsageBilling_module_css_default.heroMain,
5131
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5132
- className: UsageBilling_module_css_default.heroLabel,
5133
- children: t("billing.monthCost")
5134
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5135
- className: UsageBilling_module_css_default.heroReadout,
5136
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5137
- className: UsageBilling_module_css_default.heroCurrency,
5138
- "aria-hidden": "true",
5139
- children: currency === "usd" ? "$" : "¥"
5140
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5141
- className: UsageBilling_module_css_default.heroValue,
5142
- children: money(monthCost).slice(1)
5143
- })]
5144
- })]
5425
+ children: [
5426
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5427
+ className: UsageBilling_module_css_default.heroLabel,
5428
+ children: t("billing.monthCost")
5429
+ }),
5430
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5431
+ className: UsageBilling_module_css_default.heroReadout,
5432
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5433
+ className: UsageBilling_module_css_default.heroCurrency,
5434
+ "aria-hidden": "true",
5435
+ children: currency === "usd" ? "$" : "¥"
5436
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5437
+ className: UsageBilling_module_css_default.heroValue,
5438
+ children: money(monthCost).slice(1)
5439
+ })]
5440
+ }),
5441
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
5442
+ className: UsageBilling_module_css_default.heroMeta,
5443
+ children: [
5444
+ total.calls.toLocaleString(),
5445
+ " ",
5446
+ t("billing.calls")
5447
+ ]
5448
+ })
5449
+ ]
5145
5450
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5146
5451
  className: UsageBilling_module_css_default.heroGauge,
5147
5452
  "data-testid": "billing-hero-gauge",
@@ -5173,6 +5478,39 @@ window.__ModuleLoader__.load({
5173
5478
  })]
5174
5479
  })]
5175
5480
  }),
5481
+ budgetEnabled && budgetAmount > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5482
+ className: UsageBilling_module_css_default.heroBudget,
5483
+ "data-testid": "billing-hero-budget",
5484
+ children: [
5485
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5486
+ className: UsageBilling_module_css_default.heroBudgetLabel,
5487
+ children: t("billing.budget")
5488
+ }),
5489
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
5490
+ className: UsageBilling_module_css_default.heroBudgetTrack,
5491
+ role: "progressbar",
5492
+ "aria-valuenow": Math.min(heroBudgetPct, 100),
5493
+ "aria-valuemin": 0,
5494
+ "aria-valuemax": 100,
5495
+ "aria-label": t("billing.budget"),
5496
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
5497
+ className: clsx(UsageBilling_module_css_default.heroBudgetFill, heroBudgetPct >= 100 && UsageBilling_module_css_default.heroBudgetFillOver),
5498
+ style: { width: `${Math.min(heroBudgetPct, 100)}%` }
5499
+ })
5500
+ }),
5501
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
5502
+ className: UsageBilling_module_css_default.heroBudgetValue,
5503
+ children: [
5504
+ money(monthCost),
5505
+ " / ",
5506
+ money(budgetAmount),
5507
+ " · ",
5508
+ heroBudgetPct.toFixed(1),
5509
+ "%"
5510
+ ]
5511
+ })
5512
+ ]
5513
+ }),
5176
5514
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5177
5515
  className: UsageBilling_module_css_default.heroSide,
5178
5516
  children: [
@@ -5375,136 +5713,134 @@ window.__ModuleLoader__.load({
5375
5713
  className: UsageBilling_module_css_default.tabPanel,
5376
5714
  "data-testid": "billing-tab-panel-settings",
5377
5715
  children: [
5378
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5379
- className: UsageBilling_module_css_default.settingsHead,
5380
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
5381
- className: UsageBilling_module_css_default.settingsTitle,
5382
- children: t("billing.settingsHead")
5383
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
5384
- className: UsageBilling_module_css_default.settingsHint,
5385
- children: t("billing.settingsHint")
5386
- })]
5387
- }),
5388
5716
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
5389
- className: UsageBilling_module_css_default.budget,
5717
+ className: UsageBilling_module_css_default.setCard,
5390
5718
  "data-testid": "billing-budget",
5391
- children: [
5392
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5393
- className: UsageBilling_module_css_default.budgetHead,
5394
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5395
- className: UsageBilling_module_css_default.budgetLabel,
5719
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5720
+ className: UsageBilling_module_css_default.setCardHead,
5721
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5722
+ className: UsageBilling_module_css_default.setCardMeta,
5723
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
5724
+ className: UsageBilling_module_css_default.setCardTitle,
5396
5725
  children: t("billing.budget")
5397
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
5398
- className: UsageBilling_module_css_default.budgetControls,
5399
- children: [
5400
- budgetEnabled && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
5401
- className: UsageBilling_module_css_default.budgetInputWrap,
5402
- "data-testid": "billing-budget-input-wrap",
5403
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5404
- className: UsageBilling_module_css_default.budgetUnit,
5405
- "aria-hidden": "true",
5406
- children: "¥"
5407
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
5408
- className: UsageBilling_module_css_default.budgetInput,
5409
- "data-testid": "billing-budget-input",
5410
- type: "number",
5411
- min: 0,
5412
- step: 1,
5413
- value: budgetAmount === 0 ? "" : budgetAmount,
5414
- placeholder: stats.budget !== void 0 ? String(stats.budget) : "0",
5415
- "aria-label": `${t("billing.budget")}(${currency === "usd" ? "USD" : "CNY"})`,
5416
- title: `${t("billing.budget")}(${currency === "usd" ? "USD" : "CNY"})`,
5417
- onChange: (e) => {
5418
- onBudgetAmount(e.target.valueAsNumber);
5419
- }
5420
- })]
5421
- }),
5422
- budgetEnabled && budgetAmount > 0 && (() => {
5423
- const pct = monthCost / budgetAmount * 100;
5424
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
5425
- className: UsageBilling_module_css_default.budgetValue,
5426
- "data-testid": "billing-budget-value",
5427
- children: [
5428
- money(monthCost),
5429
- " / ",
5430
- money(budgetAmount),
5431
- " · ",
5432
- pct.toFixed(1),
5433
- "%"
5434
- ]
5435
- });
5436
- })(),
5437
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
5438
- type: "button",
5439
- role: "switch",
5440
- "aria-checked": budgetEnabled,
5726
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
5727
+ className: UsageBilling_module_css_default.setCardDesc,
5728
+ children: t("billing.budgetHint")
5729
+ })]
5730
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
5731
+ type: "button",
5732
+ role: "switch",
5733
+ "aria-checked": budgetEnabled,
5734
+ "aria-label": t("billing.budget"),
5735
+ "data-testid": "billing-budget-toggle",
5736
+ className: clsx(UsageBilling_module_css_default.switch, budgetEnabled && UsageBilling_module_css_default.switchOn),
5737
+ onClick: onToggleBudget,
5738
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: UsageBilling_module_css_default.switchKnob })
5739
+ })]
5740
+ }), budgetEnabled && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5741
+ className: UsageBilling_module_css_default.ctlCol,
5742
+ children: [
5743
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5744
+ className: UsageBilling_module_css_default.ctlRow,
5745
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5746
+ className: UsageBilling_module_css_default.ctlLabel,
5747
+ children: t("billing.budgetAmount")
5748
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
5749
+ className: UsageBilling_module_css_default.inp,
5750
+ "data-testid": "billing-budget-input-wrap",
5751
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5752
+ className: UsageBilling_module_css_default.affix,
5753
+ "aria-hidden": "true",
5754
+ children: "¥"
5755
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
5756
+ className: UsageBilling_module_css_default.budgetInput,
5757
+ "data-testid": "billing-budget-input",
5758
+ type: "number",
5759
+ min: 0,
5760
+ step: 1,
5761
+ value: budgetAmount === 0 ? "" : budgetAmount,
5762
+ placeholder: stats.budget !== void 0 ? String(stats.budget) : "0",
5763
+ "aria-label": `${t("billing.budget")}(${currency === "usd" ? "USD" : "CNY"})`,
5764
+ title: `${t("billing.budget")}(${currency === "usd" ? "USD" : "CNY"})`,
5765
+ onChange: (e) => {
5766
+ onBudgetAmount(e.target.valueAsNumber);
5767
+ }
5768
+ })]
5769
+ })]
5770
+ }),
5771
+ budgetAmount > 0 && (() => {
5772
+ const pct = monthCost / budgetAmount * 100;
5773
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
5774
+ className: UsageBilling_module_css_default.ctlRowStretch,
5775
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
5776
+ className: UsageBilling_module_css_default.prog,
5777
+ role: "progressbar",
5778
+ "aria-valuenow": Math.min(pct, 100),
5779
+ "aria-valuemin": 0,
5780
+ "aria-valuemax": 100,
5441
5781
  "aria-label": t("billing.budget"),
5442
- "data-testid": "billing-budget-toggle",
5443
- className: clsx(UsageBilling_module_css_default.switch, budgetEnabled && UsageBilling_module_css_default.switchOn),
5444
- onClick: onToggleBudget,
5445
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: UsageBilling_module_css_default.switchKnob })
5782
+ "data-testid": "billing-budget-track",
5783
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
5784
+ className: clsx(UsageBilling_module_css_default.progFill, pct >= 100 && UsageBilling_module_css_default.budgetFillOver, pct >= 80 && pct < 100 && UsageBilling_module_css_default.budgetFillWarn),
5785
+ style: { width: `${Math.min(pct, 100)}%` }
5786
+ })
5446
5787
  })
5447
- ]
5448
- })]
5449
- }),
5450
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
5451
- className: UsageBilling_module_css_default.budgetHint,
5452
- children: t("billing.budgetHint")
5453
- }),
5454
- budgetEnabled && budgetAmount > 0 && (() => {
5455
- const pct = monthCost / budgetAmount * 100;
5456
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
5457
- className: UsageBilling_module_css_default.budgetTrack,
5458
- "data-testid": "billing-budget-track",
5459
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
5460
- className: clsx(UsageBilling_module_css_default.budgetFill, pct >= 100 && UsageBilling_module_css_default.budgetFillOver, pct >= 80 && pct < 100 && UsageBilling_module_css_default.budgetFillWarn),
5461
- style: { width: `${Math.min(pct, 100)}%` }
5462
- })
5463
- });
5464
- })()
5465
- ]
5788
+ });
5789
+ })(),
5790
+ budgetAmount > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
5791
+ className: UsageBilling_module_css_default.setCardDesc,
5792
+ "data-testid": "billing-budget-value",
5793
+ children: t("billing.budgetSummary").replace("{used}", money(monthCost)).replace("{total}", money(budgetAmount))
5794
+ })
5795
+ ]
5796
+ })]
5466
5797
  }),
5467
5798
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
5468
- className: UsageBilling_module_css_default.peakAlertPanel,
5799
+ className: UsageBilling_module_css_default.setCard,
5469
5800
  "data-testid": "billing-peak-alert-settings",
5470
- children: [
5471
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5472
- className: UsageBilling_module_css_default.peakAlertPanelHead,
5473
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5474
- className: UsageBilling_module_css_default.peakAlertPanelLabel,
5801
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5802
+ className: UsageBilling_module_css_default.setCardHead,
5803
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5804
+ className: UsageBilling_module_css_default.setCardMeta,
5805
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
5806
+ className: UsageBilling_module_css_default.setCardTitle,
5475
5807
  children: t("billing.peakAlert")
5476
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
5477
- type: "button",
5478
- role: "switch",
5479
- "aria-checked": peakConfig.enabled,
5480
- "aria-label": t("billing.peakAlert"),
5481
- "data-testid": "billing-peak-alert-toggle",
5482
- className: clsx(UsageBilling_module_css_default.switch, peakConfig.enabled && UsageBilling_module_css_default.switchOn),
5483
- onClick: () => {
5484
- onPeakConfig({
5485
- ...peakConfig,
5486
- enabled: !peakConfig.enabled
5487
- });
5488
- },
5489
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: UsageBilling_module_css_default.switchKnob })
5808
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
5809
+ className: UsageBilling_module_css_default.setCardDesc,
5810
+ children: t("billing.peakAlertHint")
5490
5811
  })]
5491
- }),
5492
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
5493
- className: UsageBilling_module_css_default.peakAlertHint,
5494
- children: t("billing.peakAlertHint")
5495
- }),
5496
- peakConfig.enabled && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5497
- className: UsageBilling_module_css_default.peakAlertPanelBody,
5498
- children: [
5499
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
5500
- className: UsageBilling_module_css_default.peakAlertField,
5501
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("billing.peakAlertLeadMin") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
5812
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
5813
+ type: "button",
5814
+ role: "switch",
5815
+ "aria-checked": peakConfig.enabled,
5816
+ "aria-label": t("billing.peakAlert"),
5817
+ "data-testid": "billing-peak-alert-toggle",
5818
+ className: clsx(UsageBilling_module_css_default.switch, peakConfig.enabled && UsageBilling_module_css_default.switchOn),
5819
+ onClick: () => {
5820
+ onPeakConfig({
5821
+ ...peakConfig,
5822
+ enabled: !peakConfig.enabled
5823
+ });
5824
+ },
5825
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: UsageBilling_module_css_default.switchKnob })
5826
+ })]
5827
+ }), peakConfig.enabled && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5828
+ className: UsageBilling_module_css_default.ctlCol,
5829
+ children: [
5830
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
5831
+ className: UsageBilling_module_css_default.ctlRow,
5832
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5833
+ className: UsageBilling_module_css_default.ctlLabel,
5834
+ children: t("billing.peakAlertLeadMin")
5835
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5836
+ className: UsageBilling_module_css_default.inp,
5837
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
5502
5838
  type: "number",
5503
5839
  min: 1,
5504
5840
  max: 30,
5505
5841
  step: 1,
5506
5842
  value: peakConfig.leadMin,
5507
- className: UsageBilling_module_css_default.peakAlertNum,
5843
+ className: UsageBilling_module_css_default.budgetInput,
5508
5844
  "aria-label": t("billing.peakAlertLeadMin"),
5509
5845
  onChange: (e) => {
5510
5846
  const v = Number(e.target.valueAsNumber);
@@ -5513,169 +5849,205 @@ window.__ModuleLoader__.load({
5513
5849
  leadMin: Number.isFinite(v) ? Math.min(30, Math.max(1, Math.round(v))) : peakConfig.leadMin
5514
5850
  });
5515
5851
  }
5516
- })]
5517
- }),
5518
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
5519
- className: UsageBilling_module_css_default.peakAlertField,
5520
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("billing.peakAlertPosCorner") }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
5521
- value: peakConfig.position,
5522
- className: UsageBilling_module_css_default.peakAlertSelect,
5523
- onChange: (e) => {
5524
- onPeakConfig({
5525
- ...peakConfig,
5526
- position: e.target.value === "center" ? "center" : "bottom-right"
5527
- });
5528
- },
5529
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
5530
- value: "bottom-right",
5531
- children: t("billing.peakAlertPosCorner")
5532
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
5533
- value: "center",
5534
- children: t("billing.peakAlertPosCenter")
5535
- })]
5536
- })]
5537
- }),
5538
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
5539
- className: UsageBilling_module_css_default.peakAlertField,
5540
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("billing.peakAlert") }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
5541
- value: peakConfig.mode,
5542
- className: UsageBilling_module_css_default.peakAlertSelect,
5543
- onChange: (e) => {
5544
- const m = e.target.value;
5545
- onPeakConfig({
5546
- ...peakConfig,
5547
- mode: m === "peak" || m === "offPeak" ? m : "both"
5548
- });
5549
- },
5852
+ })
5853
+ })]
5854
+ }),
5855
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5856
+ className: UsageBilling_module_css_default.ctlRow,
5857
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5858
+ className: UsageBilling_module_css_default.ctlLabel,
5859
+ children: t("billing.peakAlertPos")
5860
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
5861
+ className: UsageBilling_module_css_default.ctlGroup,
5862
+ role: "radiogroup",
5863
+ "aria-label": t("billing.peakAlertPos"),
5864
+ children: ["bottom-right", "center"].map((pos) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
5865
+ className: UsageBilling_module_css_default.rdo,
5550
5866
  children: [
5551
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
5552
- value: "both",
5553
- children: t("billing.peakAlertModeBoth")
5867
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
5868
+ type: "radio",
5869
+ name: "peak-pos",
5870
+ checked: peakConfig.position === pos,
5871
+ onChange: () => onPeakConfig({
5872
+ ...peakConfig,
5873
+ position: pos
5874
+ })
5554
5875
  }),
5555
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
5556
- value: "peak",
5557
- children: t("billing.peakAlertModePeak")
5876
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5877
+ className: UsageBilling_module_css_default.rdoDot,
5878
+ "aria-hidden": "true"
5558
5879
  }),
5559
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
5560
- value: "offPeak",
5561
- children: t("billing.peakAlertModeOff")
5562
- })
5880
+ pos === "bottom-right" ? t("billing.peakAlertPosCorner") : t("billing.peakAlertPosCenter")
5563
5881
  ]
5564
- })]
5565
- }),
5566
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
5567
- className: UsageBilling_module_css_default.peakAlertCheck,
5568
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
5569
- type: "checkbox",
5570
- checked: peakConfig.webNotify,
5571
- onChange: (e) => {
5572
- onPeakConfig({
5573
- ...peakConfig,
5574
- webNotify: e.target.checked
5575
- });
5576
- }
5577
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("billing.peakAlertWebNotify") })]
5578
- }),
5579
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
5882
+ }, pos))
5883
+ })]
5884
+ }),
5885
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5886
+ className: UsageBilling_module_css_default.ctlRow,
5887
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5888
+ className: UsageBilling_module_css_default.ctlLabel,
5889
+ children: t("billing.peakAlertMode")
5890
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
5891
+ className: UsageBilling_module_css_default.ctlGroup,
5892
+ role: "radiogroup",
5893
+ "aria-label": t("billing.peakAlertMode"),
5894
+ children: [
5895
+ "both",
5896
+ "peak",
5897
+ "offPeak"
5898
+ ].map((m) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
5899
+ className: UsageBilling_module_css_default.rdo,
5900
+ children: [
5901
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
5902
+ type: "radio",
5903
+ name: "peak-mode",
5904
+ checked: peakConfig.mode === m,
5905
+ onChange: () => onPeakConfig({
5906
+ ...peakConfig,
5907
+ mode: m
5908
+ })
5909
+ }),
5910
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5911
+ className: UsageBilling_module_css_default.rdoDot,
5912
+ "aria-hidden": "true"
5913
+ }),
5914
+ m === "both" ? t("billing.peakAlertModeBoth") : m === "peak" ? t("billing.peakAlertModePeak") : t("billing.peakAlertModeOff")
5915
+ ]
5916
+ }, m))
5917
+ })]
5918
+ }),
5919
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
5920
+ className: UsageBilling_module_css_default.ctlRow,
5921
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5922
+ className: UsageBilling_module_css_default.ctlLabel,
5923
+ children: t("billing.peakAlertWebNotify")
5924
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
5925
+ type: "checkbox",
5926
+ checked: peakConfig.webNotify,
5927
+ "aria-label": t("billing.peakAlertWebNotify"),
5928
+ onChange: (e) => {
5929
+ onPeakConfig({
5930
+ ...peakConfig,
5931
+ webNotify: e.target.checked
5932
+ });
5933
+ }
5934
+ })]
5935
+ }),
5936
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
5937
+ className: UsageBilling_module_css_default.ctlRow,
5938
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
5580
5939
  type: "button",
5581
- className: UsageBilling_module_css_default.peakAlertPreview,
5940
+ className: UsageBilling_module_css_default.btn,
5582
5941
  onClick: onPreviewPeak,
5583
5942
  children: t("billing.peakAlertPreview")
5584
5943
  })
5585
- ]
5586
- })
5587
- ]
5588
- }),
5589
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
5590
- className: UsageBilling_module_css_default.budget,
5591
- "data-testid": "billing-usage-stats-tool-setting",
5592
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5593
- className: UsageBilling_module_css_default.budgetHead,
5594
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5595
- className: UsageBilling_module_css_default.budgetLabel,
5596
- children: t("billing.usageStatsTool")
5597
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5598
- className: UsageBilling_module_css_default.budgetControls,
5599
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
5600
- type: "button",
5601
- role: "switch",
5602
- "aria-checked": usageStatsEnabled,
5603
- "aria-label": t("billing.usageStatsTool"),
5604
- "data-testid": "billing-usage-stats-tool-toggle",
5605
- className: clsx(UsageBilling_module_css_default.switch, usageStatsEnabled && UsageBilling_module_css_default.switchOn),
5606
- onClick: toggleUsageStats,
5607
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: UsageBilling_module_css_default.switchKnob })
5608
5944
  })
5609
- })]
5610
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
5611
- className: UsageBilling_module_css_default.budgetHint,
5612
- children: t("billing.usageStatsToolHint")
5945
+ ]
5613
5946
  })]
5614
5947
  }),
5615
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
5616
- className: UsageBilling_module_css_default.budget,
5617
- "data-testid": "billing-float-setting",
5618
- children: [
5619
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
5620
- className: UsageBilling_module_css_default.budgetHead,
5621
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5622
- className: UsageBilling_module_css_default.budgetLabel,
5623
- children: t("billing.floatWindow")
5624
- })
5625
- }),
5626
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5627
- className: UsageBilling_module_css_default.floatModeRow,
5628
- "data-testid": "billing-float-mode",
5629
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
5630
- type: "button",
5631
- className: clsx(UsageBilling_module_css_default.floatModeBtn, floatPrefs.mode === "combined" && UsageBilling_module_css_default.floatModeBtnOn),
5632
- "data-testid": "billing-float-mode-combined",
5633
- onClick: () => onFloatPrefs({
5634
- mode: "combined",
5635
- targets: floatPrefs.targets
5636
- }),
5637
- children: t("billing.floatModeCombined")
5638
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
5639
- type: "button",
5640
- className: clsx(UsageBilling_module_css_default.floatModeBtn, floatPrefs.mode === "subscription" && UsageBilling_module_css_default.floatModeBtnOn),
5641
- "data-testid": "billing-float-mode-subscription",
5642
- onClick: () => onFloatPrefs({
5643
- mode: "subscription",
5644
- targets: floatPrefs.targets
5645
- }),
5646
- children: t("billing.floatModeSubscription")
5948
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("section", {
5949
+ className: UsageBilling_module_css_default.setCard,
5950
+ "data-testid": "billing-usage-stats-tool-setting",
5951
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5952
+ className: UsageBilling_module_css_default.setCardHead,
5953
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5954
+ className: UsageBilling_module_css_default.setCardMeta,
5955
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
5956
+ className: UsageBilling_module_css_default.setCardTitle,
5957
+ children: t("billing.usageStatsTool")
5958
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
5959
+ className: UsageBilling_module_css_default.setCardDesc,
5960
+ children: t("billing.usageStatsToolHint")
5647
5961
  })]
5648
- }),
5649
- floatPrefs.mode === "subscription" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5650
- className: UsageBilling_module_css_default.floatTargets,
5651
- "data-testid": "billing-float-targets",
5652
- children: [subscriptionOptions.map((option) => {
5653
- const on = floatPrefs.targets.includes(option.id);
5654
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
5655
- className: UsageBilling_module_css_default.floatTarget,
5656
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
5657
- type: "checkbox",
5658
- checked: on,
5659
- "data-testid": `billing-float-target-${option.id}`,
5660
- onChange: () => onFloatPrefs({
5661
- mode: "subscription",
5662
- targets: on ? floatPrefs.targets.filter((id) => id !== option.id) : [...floatPrefs.targets, option.id]
5663
- })
5664
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5665
- className: UsageBilling_module_css_default.floatTargetLabel,
5666
- children: option.label
5667
- })]
5668
- }, option.id);
5669
- }), subscriptionOptions.length === 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5670
- className: UsageBilling_module_css_default.budgetHint,
5671
- children: t("billing.floatNoTargetsHint")
5962
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
5963
+ type: "button",
5964
+ role: "switch",
5965
+ "aria-checked": usageStatsEnabled,
5966
+ "aria-label": t("billing.usageStatsTool"),
5967
+ "data-testid": "billing-usage-stats-tool-toggle",
5968
+ className: clsx(UsageBilling_module_css_default.switch, usageStatsEnabled && UsageBilling_module_css_default.switchOn),
5969
+ onClick: toggleUsageStats,
5970
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: UsageBilling_module_css_default.switchKnob })
5971
+ })]
5972
+ })
5973
+ }),
5974
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
5975
+ className: UsageBilling_module_css_default.setCard,
5976
+ "data-testid": "billing-float-setting",
5977
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
5978
+ className: UsageBilling_module_css_default.setCardHead,
5979
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5980
+ className: UsageBilling_module_css_default.setCardMeta,
5981
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
5982
+ className: UsageBilling_module_css_default.setCardTitle,
5983
+ children: t("billing.floatWindow")
5984
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
5985
+ className: UsageBilling_module_css_default.setCardDesc,
5986
+ children: t("billing.floatWindowHint")
5672
5987
  })]
5673
- }),
5674
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
5675
- className: UsageBilling_module_css_default.budgetHint,
5676
- children: t("billing.floatWindowHint")
5677
5988
  })
5678
- ]
5989
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5990
+ className: UsageBilling_module_css_default.ctlCol,
5991
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5992
+ className: UsageBilling_module_css_default.ctlRow,
5993
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5994
+ className: UsageBilling_module_css_default.ctlLabel,
5995
+ children: t("billing.floatMode")
5996
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5997
+ className: UsageBilling_module_css_default.ctlGroup,
5998
+ "data-testid": "billing-float-mode",
5999
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
6000
+ type: "button",
6001
+ className: clsx(UsageBilling_module_css_default.floatModeBtn, floatPrefs.mode === "combined" && UsageBilling_module_css_default.floatModeBtnOn),
6002
+ "data-testid": "billing-float-mode-combined",
6003
+ onClick: () => onFloatPrefs({
6004
+ mode: "combined",
6005
+ targets: floatPrefs.targets
6006
+ }),
6007
+ children: t("billing.floatModeCombined")
6008
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
6009
+ type: "button",
6010
+ className: clsx(UsageBilling_module_css_default.floatModeBtn, floatPrefs.mode === "subscription" && UsageBilling_module_css_default.floatModeBtnOn),
6011
+ "data-testid": "billing-float-mode-subscription",
6012
+ onClick: () => onFloatPrefs({
6013
+ mode: "subscription",
6014
+ targets: floatPrefs.targets
6015
+ }),
6016
+ children: t("billing.floatModeSubscription")
6017
+ })]
6018
+ })]
6019
+ }), floatPrefs.mode === "subscription" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6020
+ className: UsageBilling_module_css_default.ctlRow,
6021
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6022
+ className: UsageBilling_module_css_default.ctlLabel,
6023
+ children: t("billing.floatTargets")
6024
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6025
+ className: UsageBilling_module_css_default.ctlGroup,
6026
+ "data-testid": "billing-float-targets",
6027
+ children: [subscriptionOptions.map((option) => {
6028
+ const on = floatPrefs.targets.includes(option.id);
6029
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
6030
+ className: UsageBilling_module_css_default.floatTarget,
6031
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
6032
+ type: "checkbox",
6033
+ checked: on,
6034
+ "data-testid": `billing-float-target-${option.id}`,
6035
+ onChange: () => onFloatPrefs({
6036
+ mode: "subscription",
6037
+ targets: on ? floatPrefs.targets.filter((id) => id !== option.id) : [...floatPrefs.targets, option.id]
6038
+ })
6039
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6040
+ className: UsageBilling_module_css_default.floatTargetLabel,
6041
+ children: option.label
6042
+ })]
6043
+ }, option.id);
6044
+ }), subscriptionOptions.length === 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6045
+ className: UsageBilling_module_css_default.setCardDesc,
6046
+ children: t("billing.floatNoTargetsHint")
6047
+ })]
6048
+ })]
6049
+ })]
6050
+ })]
5679
6051
  }),
5680
6052
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PluginInfoCard, {
5681
6053
  t,
@@ -5688,48 +6060,50 @@ window.__ModuleLoader__.load({
5688
6060
  "data-testid": "billing-tab-panel-trends",
5689
6061
  children: [
5690
6062
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
5691
- className: clsx(UsageBilling_module_css_default.panel, UsageBilling_module_css_default.trendPanel),
6063
+ className: clsx(UsageBilling_module_css_default.ubCard, UsageBilling_module_css_default.trendPanel),
5692
6064
  "data-testid": "billing-panel-trend",
5693
6065
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5694
- className: UsageBilling_module_css_default.panelHead,
6066
+ className: UsageBilling_module_css_default.ubCardHead,
5695
6067
  children: [
5696
6068
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
5697
- className: UsageBilling_module_css_default.panelTitle,
6069
+ className: UsageBilling_module_css_default.ubCardTitle,
5698
6070
  children: t("billing.trend")
5699
6071
  }),
5700
6072
  renderSlot("billing.dashboard.decor", { position: "trend" }),
5701
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5702
- className: UsageBilling_module_css_default.rangeToggle,
5703
- role: "group",
5704
- "aria-label": t("billing.trend"),
5705
- children: [7, 30].map((days) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
5706
- type: "button",
5707
- className: clsx(UsageBilling_module_css_default.rangeButton, trendDays === days && UsageBilling_module_css_default.rangeButtonActive),
5708
- "aria-pressed": trendDays === days,
5709
- "data-testid": `billing-trend-${days}d`,
5710
- onClick: () => {
5711
- setTrendDays(days);
5712
- },
5713
- children: days === 7 ? t("billing.trend7d") : t("billing.trend30d")
5714
- }, days))
5715
- }),
5716
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5717
- className: UsageBilling_module_css_default.rangeToggle,
5718
- role: "group",
5719
- "aria-label": t("billing.trendMetric"),
5720
- children: ["cost", "tokens"].map((m) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
5721
- type: "button",
5722
- className: clsx(UsageBilling_module_css_default.rangeButton, trendMetric === m && UsageBilling_module_css_default.rangeButtonActive),
5723
- "aria-pressed": trendMetric === m,
5724
- "data-testid": `billing-trend-metric-${m}`,
5725
- onClick: () => {
5726
- setTrendMetric(m);
5727
- },
5728
- children: m === "cost" ? t("billing.trendMetricCost") : t("billing.trendMetricTokens")
5729
- }, m))
6073
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6074
+ className: UsageBilling_module_css_default.ubCardControlGroup,
6075
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6076
+ className: UsageBilling_module_css_default.rangeToggle,
6077
+ role: "group",
6078
+ "aria-label": t("billing.trend"),
6079
+ children: [7, 30].map((days) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
6080
+ type: "button",
6081
+ className: clsx(UsageBilling_module_css_default.rangeButton, trendDays === days && UsageBilling_module_css_default.rangeButtonActive),
6082
+ "aria-pressed": trendDays === days,
6083
+ "data-testid": `billing-trend-${days}d`,
6084
+ onClick: () => {
6085
+ setTrendDays(days);
6086
+ },
6087
+ children: days === 7 ? t("billing.trend7d") : t("billing.trend30d")
6088
+ }, days))
6089
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6090
+ className: UsageBilling_module_css_default.rangeToggle,
6091
+ role: "group",
6092
+ "aria-label": t("billing.trendMetric"),
6093
+ children: ["cost", "tokens"].map((m) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
6094
+ type: "button",
6095
+ className: clsx(UsageBilling_module_css_default.rangeButton, trendMetric === m && UsageBilling_module_css_default.rangeButtonActive),
6096
+ "aria-pressed": trendMetric === m,
6097
+ "data-testid": `billing-trend-metric-${m}`,
6098
+ onClick: () => {
6099
+ setTrendMetric(m);
6100
+ },
6101
+ children: m === "cost" ? t("billing.trendMetricCost") : t("billing.trendMetricTokens")
6102
+ }, m))
6103
+ })]
5730
6104
  }),
5731
6105
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5732
- className: UsageBilling_module_css_default.panelHint,
6106
+ className: UsageBilling_module_css_default.ubCardSub,
5733
6107
  children: latestDate
5734
6108
  })
5735
6109
  ]
@@ -5741,44 +6115,51 @@ window.__ModuleLoader__.load({
5741
6115
  })]
5742
6116
  }),
5743
6117
  turns.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
5744
- className: UsageBilling_module_css_default.panel,
6118
+ className: UsageBilling_module_css_default.ubCard,
5745
6119
  "data-testid": "billing-panel-rounds",
5746
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5747
- className: UsageBilling_module_css_default.panelHead,
5748
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
5749
- className: UsageBilling_module_css_default.panelTitle,
5750
- children: t("billing.rounds")
5751
- }), roundFlags.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
5752
- className: UsageBilling_module_css_default.roundsFlagBadge,
5753
- "data-testid": "billing-rounds-flag-count",
5754
- children: [
5755
- roundFlags.length,
5756
- " ",
5757
- t("billing.anomaly")
5758
- ]
5759
- })]
5760
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RoundCostChart, {
5761
- rounds: turns,
5762
- flags: roundFlags,
5763
- currency,
5764
- t
5765
- })]
6120
+ children: [
6121
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6122
+ className: UsageBilling_module_css_default.ubCardHead,
6123
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
6124
+ className: UsageBilling_module_css_default.ubCardTitle,
6125
+ children: t("billing.rounds")
6126
+ }), roundFlags.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6127
+ className: UsageBilling_module_css_default.ubTagError,
6128
+ "data-testid": "billing-rounds-flag-count",
6129
+ children: [
6130
+ roundFlags.length,
6131
+ " ",
6132
+ t("billing.anomaly")
6133
+ ]
6134
+ })]
6135
+ }),
6136
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
6137
+ className: UsageBilling_module_css_default.ubCardSub,
6138
+ children: t("billing.roundsHint").replace("{count}", String(turns.length))
6139
+ }),
6140
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RoundCostChart, {
6141
+ rounds: turns,
6142
+ flags: roundFlags,
6143
+ currency,
6144
+ t
6145
+ })
6146
+ ]
5766
6147
  }),
5767
6148
  turns.length > 0 && (() => {
5768
6149
  const shareTotal = peakShare.peak + peakShare.offPeak;
5769
6150
  if (shareTotal <= 0) return null;
5770
6151
  const peakPct = peakShare.peak / shareTotal * 100;
5771
6152
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
5772
- className: UsageBilling_module_css_default.panel,
6153
+ className: UsageBilling_module_css_default.ubCard,
5773
6154
  "data-testid": "billing-panel-share",
5774
6155
  children: [
5775
6156
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5776
- className: UsageBilling_module_css_default.panelHead,
6157
+ className: UsageBilling_module_css_default.ubCardHead,
5777
6158
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
5778
- className: UsageBilling_module_css_default.panelTitle,
6159
+ className: UsageBilling_module_css_default.ubCardTitle,
5779
6160
  children: t("billing.peakShare")
5780
6161
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5781
- className: UsageBilling_module_css_default.panelHint,
6162
+ className: UsageBilling_module_css_default.ubCardSub,
5782
6163
  children: t("billing.peakShareHint").replace("{count}", String(turns.length))
5783
6164
  })]
5784
6165
  }),
@@ -6288,182 +6669,151 @@ window.__ModuleLoader__.load({
6288
6669
  })
6289
6670
  ]
6290
6671
  }),
6291
- bucketSummary !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
6292
- className: UsageBilling_module_css_default.panel,
6293
- "data-testid": "billing-panel-buckets",
6294
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
6295
- className: UsageBilling_module_css_default.panelHead,
6296
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("h3", {
6297
- className: UsageBilling_module_css_default.panelTitle,
6298
- children: [
6299
- t("billing.official"),
6300
- " / ",
6301
- t("billing.thirdParty")
6302
- ]
6303
- })
6304
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6305
- className: UsageBilling_module_css_default.bucketSummary,
6672
+ bucketSummary !== void 0 && (() => {
6673
+ const totalCost = bucketSummary.officialCost + bucketSummary.thirdCost;
6674
+ const officialPct = totalCost > 0 ? bucketSummary.officialCost / totalCost * 100 : 0;
6675
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6676
+ className: UsageBilling_module_css_default.ubStatGrid,
6677
+ "data-testid": "billing-panel-buckets",
6306
6678
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6307
- className: UsageBilling_module_css_default.bucketStat,
6679
+ className: UsageBilling_module_css_default.ubStatCard,
6308
6680
  children: [
6309
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6310
- className: UsageBilling_module_css_default.bucketStatLabel,
6311
- children: t("billing.official")
6681
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6682
+ className: UsageBilling_module_css_default.ubStatLabel,
6683
+ children: [t("billing.official"), "(=DeepSeek 直连)"]
6312
6684
  }),
6313
6685
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6314
- className: UsageBilling_module_css_default.bucketStatValue,
6686
+ className: UsageBilling_module_css_default.ubStatValue,
6315
6687
  children: money(bucketSummary.officialCost)
6316
6688
  }),
6317
6689
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6318
- className: UsageBilling_module_css_default.bucketStatSub,
6690
+ className: UsageBilling_module_css_default.ubStatDetail,
6319
6691
  children: [
6320
6692
  bucketSummary.officialCalls,
6321
6693
  " ",
6322
- t("billing.calls")
6694
+ t("billing.calls"),
6695
+ " · ",
6696
+ officialPct.toFixed(1),
6697
+ "%"
6323
6698
  ]
6324
6699
  })
6325
6700
  ]
6326
6701
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6327
- className: UsageBilling_module_css_default.bucketStat,
6702
+ className: UsageBilling_module_css_default.ubStatCard,
6328
6703
  children: [
6329
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6330
- className: UsageBilling_module_css_default.bucketStatLabel,
6331
- children: t("billing.thirdParty")
6704
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6705
+ className: UsageBilling_module_css_default.ubStatLabel,
6706
+ children: [t("billing.thirdParty"), "(中转)"]
6332
6707
  }),
6333
6708
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6334
- className: UsageBilling_module_css_default.bucketStatValue,
6709
+ className: UsageBilling_module_css_default.ubStatValue,
6335
6710
  children: money(bucketSummary.thirdCost)
6336
6711
  }),
6337
6712
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6338
- className: UsageBilling_module_css_default.bucketStatSub,
6713
+ className: UsageBilling_module_css_default.ubStatDetail,
6339
6714
  children: [
6340
6715
  bucketSummary.thirdCalls,
6341
6716
  " ",
6342
- t("billing.calls")
6717
+ t("billing.calls"),
6718
+ " · ",
6719
+ (100 - officialPct).toFixed(1),
6720
+ "%"
6343
6721
  ]
6344
6722
  })
6345
6723
  ]
6346
6724
  })]
6347
- })]
6348
- }),
6725
+ });
6726
+ })(),
6349
6727
  stats.byWorkspace !== void 0 && stats.byWorkspace.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
6350
- className: UsageBilling_module_css_default.panel,
6728
+ className: UsageBilling_module_css_default.ubCard,
6351
6729
  "data-testid": "billing-panel-workspaces",
6352
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
6353
- className: UsageBilling_module_css_default.panelHead,
6354
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
6355
- className: UsageBilling_module_css_default.panelTitle,
6730
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6731
+ className: UsageBilling_module_css_default.ubCardHead,
6732
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
6733
+ className: UsageBilling_module_css_default.ubCardTitle,
6356
6734
  children: t("billing.workspaces")
6357
- })
6358
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
6359
- className: UsageBilling_module_css_default.tableScroll,
6360
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("table", {
6361
- className: UsageBilling_module_css_default.modelTable,
6362
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("thead", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("tr", { children: [
6363
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", { children: t("billing.project") }),
6364
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", {
6365
- className: UsageBilling_module_css_default.numCol,
6366
- children: t("billing.calls")
6367
- }),
6368
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", {
6369
- className: UsageBilling_module_css_default.numCol,
6370
- children: t("billing.inputTokens")
6371
- }),
6372
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", {
6373
- className: UsageBilling_module_css_default.numCol,
6374
- children: t("billing.outputTokens")
6375
- }),
6376
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", {
6377
- className: UsageBilling_module_css_default.numCol,
6378
- children: t("billing.actual")
6379
- }),
6380
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", {
6381
- className: UsageBilling_module_css_default.numCol,
6382
- children: t("billing.lastActive")
6383
- })
6384
- ] }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("tbody", { children: stats.byWorkspace.map((row) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("tr", {
6385
- onClick: () => {
6386
- setExpandedProject(expandedProject === row.name ? void 0 : row.name);
6387
- },
6388
- style: { cursor: "pointer" },
6735
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6736
+ className: UsageBilling_module_css_default.ubCardSub,
6737
+ children: t("billing.workspacesHint")
6738
+ })]
6739
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
6740
+ className: UsageBilling_module_css_default.rowlist,
6741
+ children: stats.byWorkspace.map((row) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
6742
+ type: "button",
6743
+ className: UsageBilling_module_css_default.rowline,
6744
+ "data-testid": `billing-workspace-${row.name}`,
6745
+ onClick: () => {
6746
+ setExpandedProject(expandedProject === row.name ? void 0 : row.name);
6747
+ },
6748
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6749
+ className: UsageBilling_module_css_default.rowlineName,
6750
+ children: row.name
6751
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6752
+ className: UsageBilling_module_css_default.rowlineRight,
6389
6753
  children: [
6390
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6391
- className: UsageBilling_module_css_default.modelName,
6392
- children: row.name
6393
- }) }),
6394
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", {
6395
- className: UsageBilling_module_css_default.numCol,
6396
- children: row.calls.toLocaleString()
6397
- }),
6398
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", {
6399
- className: UsageBilling_module_css_default.numCol,
6400
- children: formatTokens(row.input)
6401
- }),
6402
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", {
6403
- className: UsageBilling_module_css_default.numCol,
6404
- children: formatTokens(row.output)
6405
- }),
6406
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", {
6407
- className: UsageBilling_module_css_default.numCol,
6754
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6755
+ className: UsageBilling_module_css_default.num,
6408
6756
  children: money(row.cost)
6409
6757
  }),
6410
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", {
6411
- className: UsageBilling_module_css_default.numCol,
6412
- children: row.lastActive > 0 ? `${localDayStamp(row.lastActive)}` : "—"
6758
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6759
+ className: UsageBilling_module_css_default.rowlineMuted,
6760
+ children: [
6761
+ row.calls,
6762
+ " ",
6763
+ t("billing.calls")
6764
+ ]
6765
+ }),
6766
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6767
+ className: UsageBilling_module_css_default.rowlineChev,
6768
+ "aria-hidden": "true",
6769
+ children: "›"
6413
6770
  })
6414
6771
  ]
6415
- }), expandedProject === row.name && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("tr", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", {
6416
- colSpan: 6,
6417
- style: { padding: "0" },
6418
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("table", {
6419
- className: UsageBilling_module_css_default.modelTable,
6420
- style: {
6421
- margin: 0,
6422
- border: "none",
6423
- background: "var(--dsw-alias-bg-layer-1)"
6424
- },
6425
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("tbody", { children: stats.bySession?.filter((s) => projectName(s.cwd) === row.name).slice(0, 5).map((s) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("tr", { children: [
6426
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6427
- className: UsageBilling_module_css_default.modelName,
6428
- children: s.title ?? s.id.slice(0, 8)
6429
- }) }),
6430
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", {
6431
- className: UsageBilling_module_css_default.numCol,
6432
- children: s.calls.toLocaleString()
6433
- }),
6434
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", {
6435
- className: UsageBilling_module_css_default.numCol,
6436
- children: money(s.cost)
6437
- }),
6438
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", {
6439
- className: UsageBilling_module_css_default.numCol,
6440
- children: localDayStamp(s.lastActive)
6441
- })
6442
- ] }, s.id)) })
6443
- })
6444
- }) })] }, row.name)) })]
6445
- })
6772
+ })]
6773
+ }) }), expandedProject === row.name && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", {
6774
+ className: UsageBilling_module_css_default.rowlineDrillWrap,
6775
+ children: stats.bySession?.filter((s) => projectName(s.cwd) === row.name).slice(0, 5).map((s) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6776
+ className: UsageBilling_module_css_default.rowlineDrill,
6777
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6778
+ className: UsageBilling_module_css_default.rowlineName,
6779
+ children: s.title ?? s.id.slice(0, 8)
6780
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6781
+ className: UsageBilling_module_css_default.rowlineRight,
6782
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6783
+ className: UsageBilling_module_css_default.num,
6784
+ children: money(s.cost)
6785
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6786
+ className: UsageBilling_module_css_default.rowlineMuted,
6787
+ children: [
6788
+ s.calls,
6789
+ " ",
6790
+ t("billing.calls")
6791
+ ]
6792
+ })]
6793
+ })]
6794
+ }, s.id))
6795
+ })] }, row.name))
6446
6796
  })]
6447
6797
  }),
6448
6798
  stats.bySession !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
6449
- className: UsageBilling_module_css_default.panel,
6799
+ className: UsageBilling_module_css_default.ubCard,
6450
6800
  "data-testid": "billing-panel-sessions",
6451
6801
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6452
- className: UsageBilling_module_css_default.panelHead,
6802
+ className: UsageBilling_module_css_default.ubCardHead,
6453
6803
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
6454
- className: UsageBilling_module_css_default.panelTitle,
6804
+ className: UsageBilling_module_css_default.ubCardTitle,
6455
6805
  children: t("billing.sessions")
6456
6806
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6457
- className: UsageBilling_module_css_default.panelHint,
6807
+ className: UsageBilling_module_css_default.ubCardSub,
6458
6808
  children: stats.bySession.length > SESSION_DISPLAY_LIMIT ? t("billing.sessionOverflow").replace("{limit}", String(SESSION_DISPLAY_LIMIT)).replace("{total}", String(stats.bySession.length)) : `${stats.bySession.length}`
6459
6809
  })]
6460
6810
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
6461
- className: UsageBilling_module_css_default.tableScroll,
6811
+ className: UsageBilling_module_css_default.ubTablewrap,
6462
6812
  "data-testid": "billing-sessions-table",
6463
6813
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("table", {
6464
- className: UsageBilling_module_css_default.modelTable,
6814
+ className: UsageBilling_module_css_default.ubTable,
6465
6815
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("thead", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("tr", { children: [
6466
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", { children: t("billing.sessions") }),
6816
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", { children: t("billing.sessionTitle") }),
6467
6817
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", { children: t("billing.project") }),
6468
6818
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", {
6469
6819
  className: UsageBilling_module_css_default.numCol,
@@ -6535,136 +6885,202 @@ window.__ModuleLoader__.load({
6535
6885
  })]
6536
6886
  })]
6537
6887
  }),
6538
- tab === "pricing" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
6888
+ tab === "pricing" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6539
6889
  className: UsageBilling_module_css_default.tabPanel,
6540
6890
  "data-testid": "billing-tab-panel-pricing",
6541
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
6542
- className: UsageBilling_module_css_default.panel,
6543
- "data-testid": "billing-panel-pricing",
6544
- children: [
6545
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6546
- className: UsageBilling_module_css_default.panelHead,
6547
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
6548
- className: UsageBilling_module_css_default.panelTitle,
6549
- children: t("billing.pricing")
6550
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6551
- className: UsageBilling_module_css_default.panelHint,
6891
+ children: [
6892
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6893
+ className: UsageBilling_module_css_default.ubAlert,
6894
+ role: "note",
6895
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6896
+ className: UsageBilling_module_css_default.ubAlertLeft,
6897
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6898
+ className: UsageBilling_module_css_default.ubRate,
6899
+ "data-testid": "billing-rate",
6552
6900
  children: [
6553
6901
  t("billing.todayRate"),
6554
6902
  " 1 USD = ",
6555
- formatMoney(rateInfo.rate),
6556
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6557
- className: clsx(UsageBilling_module_css_default.rateBadge, rateInfo.live ? UsageBilling_module_css_default.rateBadgeLive : UsageBilling_module_css_default.rateBadgeBuiltin),
6558
- children: rateInfo.live ? t("billing.rateLive") : t("billing.rateBuiltin")
6559
- })
6903
+ formatMoney(rateInfo.rate)
6560
6904
  ]
6905
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6906
+ className: clsx(UsageBilling_module_css_default.ubTag, rateInfo.live ? UsageBilling_module_css_default.ubTagSuccess : UsageBilling_module_css_default.ubTagNeutral),
6907
+ children: rateInfo.live ? t("billing.rateLive") : t("billing.rateBuiltin")
6561
6908
  })]
6562
- }),
6563
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
6564
- className: UsageBilling_module_css_default.pricingTip,
6909
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
6910
+ className: UsageBilling_module_css_default.ubAlertNote,
6565
6911
  children: t("billing.pricingTip")
6566
- }),
6567
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
6568
- className: UsageBilling_module_css_default.tableScroll,
6912
+ })]
6913
+ }),
6914
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
6915
+ className: UsageBilling_module_css_default.ubCard,
6916
+ "data-testid": "billing-panel-pricing",
6917
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6918
+ className: UsageBilling_module_css_default.ubCardHead,
6919
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
6920
+ className: UsageBilling_module_css_default.ubCardTitle,
6921
+ children: t("billing.pricing")
6922
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6923
+ className: UsageBilling_module_css_default.ubCardSub,
6924
+ children: t("billing.pricingUnit")
6925
+ })]
6926
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
6927
+ className: UsageBilling_module_css_default.ubTablewrap,
6569
6928
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("table", {
6570
- className: UsageBilling_module_css_default.pricingTable,
6929
+ className: UsageBilling_module_css_default.ubTable,
6571
6930
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("thead", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("tr", { children: [
6572
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", { children: "Model" }),
6931
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", { children: t("billing.thModel") }),
6573
6932
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", {
6574
6933
  className: UsageBilling_module_css_default.numCol,
6575
- children: t("billing.input")
6934
+ children: t("billing.thInputMiss")
6576
6935
  }),
6577
6936
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", {
6578
6937
  className: UsageBilling_module_css_default.numCol,
6579
- children: t("billing.cacheHit")
6938
+ children: t("billing.thInputHit")
6580
6939
  }),
6581
6940
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", {
6582
6941
  className: UsageBilling_module_css_default.numCol,
6583
6942
  children: t("billing.output")
6584
6943
  }),
6585
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", { children: t("billing.band") })
6944
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", {
6945
+ className: UsageBilling_module_css_default.numCol,
6946
+ children: t("billing.band")
6947
+ })
6586
6948
  ] }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("tbody", { children: catalogEntries().map((entry) => {
6587
6949
  const hasPrice = entry.price.input > 0 || entry.price.output > 0;
6588
6950
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("tr", { children: [
6589
6951
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6590
- className: UsageBilling_module_css_default.modelCell,
6952
+ className: UsageBilling_module_css_default.ubModel,
6591
6953
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6592
- className: UsageBilling_module_css_default.modelDot,
6593
- style: { background: resolveToken(entry.colorVar) }
6594
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6595
- className: UsageBilling_module_css_default.modelName,
6954
+ className: UsageBilling_module_css_default.ubModelDot,
6955
+ style: { background: resolveToken(entry.colorVar) },
6956
+ "aria-hidden": "true"
6957
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6958
+ className: UsageBilling_module_css_default.ubModelName,
6596
6959
  children: [entry.name, entry.uncatalogued && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6597
- className: UsageBilling_module_css_default.uncataloguedTag,
6960
+ className: UsageBilling_module_css_default.ubTagAlert,
6598
6961
  "data-testid": "billing-price-uncatalogued",
6599
6962
  children: t("billing.uncatalogued")
6600
6963
  })]
6601
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6602
- className: UsageBilling_module_css_default.modelProvider,
6603
- children: providerName(entry.provider)
6604
- })] })]
6964
+ })]
6605
6965
  }) }),
6606
6966
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", {
6607
6967
  className: UsageBilling_module_css_default.numCol,
6608
- children: hasPrice ? entry.price.offPeak !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6609
- className: UsageBilling_module_css_default.bandPrice,
6610
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: unitMoney(entry.price.input, entry.price.currency) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6611
- className: UsageBilling_module_css_default.bandPriceOff,
6612
- children: unitMoney(entry.price.offPeak.input, entry.price.currency)
6613
- })]
6614
- }) : unitMoney(entry.price.input, entry.price.currency) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6968
+ children: hasPrice ? unitMoney(entry.price.input, entry.price.currency) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6615
6969
  className: UsageBilling_module_css_default.na,
6616
6970
  children: "—"
6617
6971
  })
6618
6972
  }),
6619
6973
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", {
6620
6974
  className: UsageBilling_module_css_default.numCol,
6621
- children: hasPrice ? entry.price.offPeak !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6622
- className: UsageBilling_module_css_default.bandPrice,
6623
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: unitMoney(entry.price.cacheHit, entry.price.currency) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6624
- className: UsageBilling_module_css_default.bandPriceOff,
6625
- children: unitMoney(entry.price.offPeak.cacheHit, entry.price.currency)
6626
- })]
6627
- }) : unitMoney(entry.price.cacheHit, entry.price.currency) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6975
+ children: hasPrice ? unitMoney(entry.price.cacheHit, entry.price.currency) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6628
6976
  className: UsageBilling_module_css_default.na,
6629
6977
  children: "—"
6630
6978
  })
6631
6979
  }),
6632
6980
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", {
6633
6981
  className: UsageBilling_module_css_default.numCol,
6634
- children: hasPrice ? entry.price.offPeak !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6635
- className: UsageBilling_module_css_default.bandPrice,
6636
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: unitMoney(entry.price.output, entry.price.currency) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6637
- className: UsageBilling_module_css_default.bandPriceOff,
6638
- children: unitMoney(entry.price.offPeak.output, entry.price.currency)
6639
- })]
6640
- }) : unitMoney(entry.price.output, entry.price.currency) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6982
+ children: hasPrice ? unitMoney(entry.price.output, entry.price.currency) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6641
6983
  className: UsageBilling_module_css_default.na,
6642
6984
  children: "—"
6643
6985
  })
6644
6986
  }),
6645
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", { children: entry.price.offPeak !== void 0 && entry.peakHours !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6646
- className: UsageBilling_module_css_default.bandTag,
6647
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [
6648
- t("billing.peak"),
6649
- " ",
6650
- entry.peakHours
6651
- ] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6652
- className: UsageBilling_module_css_default.bandTagOff,
6653
- children: [t("billing.offPeak"), " 50%"]
6654
- })]
6655
- }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6656
- className: UsageBilling_module_css_default.flatTag,
6657
- children: t("billing.flat")
6658
- }) })
6987
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", {
6988
+ className: UsageBilling_module_css_default.numCol,
6989
+ children: hasPrice && entry.price.offPeak !== void 0 && entry.peakHours !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6990
+ className: UsageBilling_module_css_default.ubPricepair,
6991
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6992
+ className: UsageBilling_module_css_default.ubChipPeak,
6993
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6994
+ className: UsageBilling_module_css_default.ubChipLabel,
6995
+ children: t("billing.ubPeak")
6996
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6997
+ className: UsageBilling_module_css_default.num,
6998
+ children: [
6999
+ unitMoney(entry.price.input, entry.price.currency),
7000
+ " / ",
7001
+ unitMoney(entry.price.output, entry.price.currency)
7002
+ ]
7003
+ })]
7004
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
7005
+ className: UsageBilling_module_css_default.ubChipOff,
7006
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7007
+ className: UsageBilling_module_css_default.ubChipLabel,
7008
+ children: t("billing.ubOff")
7009
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
7010
+ className: UsageBilling_module_css_default.num,
7011
+ children: [
7012
+ unitMoney(entry.price.offPeak.input, entry.price.currency),
7013
+ " / ",
7014
+ unitMoney(entry.price.offPeak.output, entry.price.currency)
7015
+ ]
7016
+ })]
7017
+ })]
7018
+ }) : hasPrice ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7019
+ className: UsageBilling_module_css_default.flatTag,
7020
+ children: t("billing.flat")
7021
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7022
+ className: UsageBilling_module_css_default.na,
7023
+ children: "—"
7024
+ })
7025
+ })
6659
7026
  ] }, entry.key);
6660
7027
  }) })]
6661
7028
  })
6662
- })
6663
- ]
6664
- })
7029
+ })]
7030
+ }),
7031
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
7032
+ className: UsageBilling_module_css_default.ubCard,
7033
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
7034
+ className: UsageBilling_module_css_default.ubCardHead,
7035
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
7036
+ className: UsageBilling_module_css_default.ubCardTitle,
7037
+ children: t("billing.pricingNotes")
7038
+ })
7039
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("ul", {
7040
+ className: UsageBilling_module_css_default.ubNotes,
7041
+ children: [
7042
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", {
7043
+ className: UsageBilling_module_css_default.ubNotesItem,
7044
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7045
+ className: UsageBilling_module_css_default.ubNotesTerm,
7046
+ children: t("billing.cacheHit")
7047
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7048
+ className: UsageBilling_module_css_default.ubNotesDesc,
7049
+ children: t("billing.noteCache")
7050
+ })]
7051
+ }),
7052
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", {
7053
+ className: UsageBilling_module_css_default.ubNotesItem,
7054
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7055
+ className: UsageBilling_module_css_default.ubNotesTerm,
7056
+ children: t("billing.peakBand")
7057
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7058
+ className: UsageBilling_module_css_default.ubNotesDesc,
7059
+ children: t("billing.noteBand")
7060
+ })]
7061
+ }),
7062
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", {
7063
+ className: UsageBilling_module_css_default.ubNotesItem,
7064
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7065
+ className: UsageBilling_module_css_default.ubNotesTerm,
7066
+ children: t("billing.pricingSource")
7067
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7068
+ className: UsageBilling_module_css_default.ubNotesDesc,
7069
+ children: t("billing.noteSource")
7070
+ })]
7071
+ })
7072
+ ]
7073
+ })]
7074
+ })
7075
+ ]
6665
7076
  }),
6666
7077
  renderSlot("billing.dashboard.decor", { position: "footer" })
6667
7078
  ]
7079
+ }),
7080
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("footer", {
7081
+ className: UsageBilling_module_css_default.modalFooter,
7082
+ "data-testid": "billing-footer",
7083
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("billing.footer") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("billing.footerCredit").replace("{version}", stats.pluginVersion === void 0 ? "—" : `v${stats.pluginVersion}`) })]
6668
7084
  })
6669
7085
  ]
6670
7086
  })
@@ -7150,57 +7566,66 @@ window.__ModuleLoader__.load({
7150
7566
  const money = (cny) => formatMoney(cny, "cny");
7151
7567
  if (sessionId === void 0) return null;
7152
7568
  const hasCost = sessionCost > 0 || turnCost > 0;
7569
+ const isPeak = tier.tier === "peak";
7153
7570
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
7154
- className: UsageBilling_module_css_default.liveCostBar,
7571
+ className: UsageBilling_module_css_default.feeBar,
7155
7572
  "data-testid": "billing-live-cost-bar",
7156
7573
  children: [
7157
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
7158
- className: tier.tier === "peak" ? UsageBilling_module_css_default.liveTierPeak : UsageBilling_module_css_default.liveTierOff,
7574
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7575
+ className: isPeak ? UsageBilling_module_css_default.feeChipPrimary : UsageBilling_module_css_default.feeChipOff,
7159
7576
  "data-testid": "billing-live-tier",
7160
- children: [
7161
- tier.tier === "peak" ? t("billing.tierPeak") : t("billing.tierOff"),
7162
- " · ",
7163
- formatSwitchCountdown(tier.nextSwitchInMs),
7164
- " ",
7165
- tier.tier === "peak" ? t("billing.tierToOff") : t("billing.tierToPeak")
7166
- ]
7577
+ children: isPeak ? t("billing.tierPeak") : t("billing.tierOff")
7578
+ }),
7579
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7580
+ className: UsageBilling_module_css_default.feeCount,
7581
+ children: formatSwitchCountdown(tier.nextSwitchInMs)
7582
+ }),
7583
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7584
+ className: UsageBilling_module_css_default.feeSuffix,
7585
+ children: isPeak ? t("billing.tierToOff") : t("billing.tierToPeak")
7167
7586
  }),
7168
7587
  hasCost && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
7169
7588
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7170
- className: UsageBilling_module_css_default.liveCostSep,
7589
+ className: UsageBilling_module_css_default.feeSep,
7171
7590
  "aria-hidden": "true",
7172
7591
  children: "·"
7173
7592
  }),
7174
7593
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
7175
- className: UsageBilling_module_css_default.liveCostItem,
7594
+ className: UsageBilling_module_css_default.feeItem,
7176
7595
  "data-testid": "billing-live-turn",
7177
7596
  children: [
7178
7597
  t("billing.liveTurn"),
7179
7598
  " ",
7180
- money(turnCost)
7599
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7600
+ className: UsageBilling_module_css_default.feeNum,
7601
+ children: money(turnCost)
7602
+ })
7181
7603
  ]
7182
7604
  }),
7183
7605
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7184
- className: UsageBilling_module_css_default.liveCostSep,
7606
+ className: UsageBilling_module_css_default.feeSep,
7185
7607
  "aria-hidden": "true",
7186
7608
  children: "·"
7187
7609
  }),
7188
7610
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
7189
- className: UsageBilling_module_css_default.liveCostItem,
7611
+ className: UsageBilling_module_css_default.feeItem,
7190
7612
  "data-testid": "billing-live-session",
7191
7613
  children: [
7192
7614
  t("billing.liveSession"),
7193
7615
  " ",
7194
- money(sessionCost)
7616
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7617
+ className: UsageBilling_module_css_default.feeNum,
7618
+ children: money(sessionCost)
7619
+ })
7195
7620
  ]
7196
7621
  })
7197
7622
  ] }),
7198
7623
  chips.map((chip) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7199
- className: UsageBilling_module_css_default.liveCostSep,
7624
+ className: UsageBilling_module_css_default.feeSep,
7200
7625
  "aria-hidden": "true",
7201
7626
  children: "·"
7202
7627
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
7203
- className: chip.pct <= 10 ? UsageBilling_module_css_default.liveQuotaCrit : UsageBilling_module_css_default.liveQuotaWarn,
7628
+ className: chip.pct <= 10 ? UsageBilling_module_css_default.feeChipError : UsageBilling_module_css_default.feeChipAlert,
7204
7629
  "data-testid": "billing-live-quota",
7205
7630
  children: [
7206
7631
  chip.name,