diff --git a/Distribution.md b/Distribution.md
index 88c55b1..bccd24a 100644
--- a/Distribution.md
+++ b/Distribution.md
@@ -69,7 +69,7 @@ on the partner dashboard — the dashboard's Downloads page only re-offers the S
| Partner account created | ✅ done by the creator |
| Identity verification | ⏳ **pending** — Valve reviewing |
| Tax interview | ⏳ submitted; Valve quotes **up to 30 business days** to review |
-| $100 Steam Direct fee (per app) | not yet — a store page cannot be configured before it |
+| $100 Steam Direct fee | ✅ **paid** (creator, 2026-11-05) — a store page can be configured once identity clears |
| App IDs (paid app + free Demo) | **not yet assigned** |
| Store page | not created |
| Build review | not started |
@@ -82,9 +82,9 @@ on the partner dashboard — the dashboard's Downloads page only re-offers the S
4. page public **≥2 weeks before release** (Valve's rule)
5. build review — **up to 12 business days**
-**Earliest realistic launch: early-to-mid February 2027.** The launch price ends 2027-04-01, so there
-is roughly seven weeks of buffer — *provided* verification clears in the window Valve quotes. If it
-slips, the promo date is the thing to move (see `docs/ai/commercial.md`), not the code.
+**Earliest realistic launch: early-to-mid February 2027.** The launch-price deadline is no longer a
+date: it now ends **30 days after the store page goes live** (2026-11-05), so Valve's queue cannot make
+the public claim wrong.
Nothing below can start until step 1 clears; none of it blocks the app work.
diff --git a/ViewModels/MainViewModel.Overlays.cs b/ViewModels/MainViewModel.Overlays.cs
index 03ce1f5..fac550d 100644
--- a/ViewModels/MainViewModel.Overlays.cs
+++ b/ViewModels/MainViewModel.Overlays.cs
@@ -34,7 +34,10 @@ public partial class MainViewModel : ViewModelBase
// the app, the site and docs/commercial.md cannot drift apart. ──
public const string LaunchPrice = "$79";
public const string StandardPrice = "$99";
- public const string LaunchPriceEndsLabel = "April 1, 2027";
+ /// When the launch price ends. Deliberately EVENT-relative, not a date: the store page is
+ /// in Valve's queue (identity verification + tax review), so a fixed date would be a public promise
+ /// we cannot keep if their backlog slips (creator ruling 2026-11-05).
+ public const string LaunchPriceEndsLabel = "30 days after the store page goes live";
/// The release state shown as a badge. Not the assembly version — that number is for
/// log lines, not for the creator.
@@ -42,7 +45,7 @@ public partial class MainViewModel : ViewModelBase
public string UpgradeCtaLabel => $"Unlock 60 fps — {LaunchPrice}";
public string PriceLine => $"Launch price {LaunchPrice}";
- public string PriceNote => $"Until {LaunchPriceEndsLabel} — after that {StandardPrice}, locked for life.";
+ public string PriceNote => $"{LaunchPriceEndsLabel} — after that {StandardPrice}, locked for life.";
public string FreeOfferText => "Livestream and record at 30 fps.";
public string PaidOfferText => "Unlocks 60 fps for streaming and recording.";
public string TrustLine => "One-time purchase · lifetime licence · no account, no subscription, no tracking.";
diff --git a/docs/ai/commercial.md b/docs/ai/commercial.md
index bca555f..f81e37b 100644
--- a/docs/ai/commercial.md
+++ b/docs/ai/commercial.md
@@ -1,7 +1,9 @@
## Price (creator ruling 2026-11-05)
- **Launch price $79** — one-time purchase, lifetime licence, no subscription, no account, no tracking.
-- **Promotion ends April 1, 2027**; after that the price is **$99, locked for life**.
+- **Promotion ends 30 days after the store page goes live** (revised 2026-11-05 — the earlier fixed date,
+ April 1 2027, depended on Valve's review queue, which is outside our control); after that the price is
+ **$99, locked for life**.
- Free tier: livestream and record at **30 fps**. Paid unlocks **60 fps** for both.
- The numbers live in `ViewModels/MainViewModel.Overlays.cs` (`LaunchPrice`, `StandardPrice`,
`LaunchPriceEndsLabel`) so the About box, the site copy and this file cannot drift apart. Change them