<h4>Billing System Rework</h4><p>Removed tiered billing plans (Basic $49/Professional $99/Enterprise $199). Billing is now purely based on active modules individual monthly costs from <code>domain_controlpanel.module_monthly_cost</code>.</p><h5>Database</h5><ul><li><code>billing_subscriptions.plan_id_fk</code> made nullable</li><li>Added 4 quota override columns (included_storage_mb, included_emails_monthly, included_ai_tokens, included_bandwidth_gb)</li><li><code>billing_plans</code> table soft-deprecated (is_active=0)</li></ul><h5>Backend</h5><ul><li>Removed plan CRUD methods from billing.class.php</li><li><code>getMRR()</code> now sums module costs directly instead of plan prices</li><li>Added <code>getModuleMonthlyCostForSite()</code> and <code>getRevenueByModule()</code></li><li>Removed <code>getPlanPriceForCycle()</code> from BillingService</li><li>Invoice generation no longer creates Hosting Plan line item — modules are the sole recurring source</li><li>Cycle discount (5%/10%/17%) now applied to module totals</li><li><code>calculateOverages()</code> reads quotas from subscription-level columns instead of plan</li><li>Replaced <code>adminGetPlans/adminSavePlan</code> with <code>adminGetModulePricing/adminUpdateModulePrice</code></li></ul><h5>Tenant UI</h5><ul><li>Subscription page: plan cards replaced with module table showing individual costs + total</li><li>Overview: Current Plan stat card changed to Active Modules count + total cost</li><li>Subtitle changed from Plan + Modules + Services to Modules + Services</li></ul><h5>Admin UI</h5><ul><li>Dashboard: Revenue by Plan replaced with Revenue by Module table</li><li>Plans page replaced with Module Pricing editor (inline editable costs)</li><li>Nav labels updated from Plans to Module Pricing across all billing admin pages</li></ul>