diff --git a/web/src/routes/console/billing/+page.svelte b/web/src/routes/console/billing/+page.svelte index 5130976a..5e8d40d5 100644 --- a/web/src/routes/console/billing/+page.svelte +++ b/web/src/routes/console/billing/+page.svelte @@ -1,7 +1,8 @@ @@ -43,6 +142,22 @@

Billing

+ {#if upgradeStatus === 'checking'} +
+ + Confirming your upgrade… +
+ {:else if upgradeStatus === 'confirmed' && isPro} +
+ + Upgrade confirmed — welcome to Pro! +
+ {:else if upgradeStatus === 'timeout'} +
+ Your payment went through but we haven't confirmed your upgrade yet. Try refreshing in a moment; if your plan still shows Free, contact support@getpad.dev. +
+ {/if} +

Current Plan

@@ -232,4 +347,73 @@ font-size: 0.85rem; font-weight: 500; } + + .upgrade-banner { + display: flex; + align-items: center; + gap: var(--space-3); + padding: var(--space-3) var(--space-4); + border-radius: var(--radius); + font-size: 0.9rem; + line-height: 1.4; + border: 1px solid transparent; + } + + .upgrade-banner.checking { + background: color-mix(in srgb, var(--accent-blue) 10%, transparent); + border-color: color-mix(in srgb, var(--accent-blue) 30%, transparent); + color: var(--text-primary); + } + + .upgrade-banner.success { + background: color-mix(in srgb, var(--accent-green) 12%, transparent); + border-color: color-mix(in srgb, var(--accent-green) 35%, transparent); + color: var(--text-primary); + } + + .upgrade-banner.warning { + background: color-mix(in srgb, var(--accent-yellow, #eab308) 12%, transparent); + border-color: color-mix(in srgb, var(--accent-yellow, #eab308) 35%, transparent); + color: var(--text-primary); + } + + .upgrade-banner a { + color: var(--accent-blue); + text-decoration: underline; + } + + .spinner { + width: 14px; + height: 14px; + border: 2px solid color-mix(in srgb, var(--accent-blue) 30%, transparent); + border-top-color: var(--accent-blue); + border-radius: 50%; + animation: spin 0.8s linear infinite; + flex-shrink: 0; + } + + .check-icon { + display: inline-flex; + align-items: center; + justify-content: center; + width: 18px; + height: 18px; + border-radius: 50%; + background: var(--accent-green); + color: #fff; + font-size: 0.7rem; + font-weight: 700; + flex-shrink: 0; + } + + @keyframes spin { + to { transform: rotate(360deg); } + } + + @media (prefers-reduced-motion: reduce) { + .spinner { + animation: none; + border-top-color: transparent; + } + }