Inline <div> corrupts the MR page layout; maybe others
Noticed at https://gitlab.com/gitlab-org/gitlab/-/merge_requests/228101: ```markdown ## What does this MR do and why? 1. first <div> 2. second <div> Update the group billing page for free and trial namespace. Related to https://gitlab.com/gitlab-org/gitlab/-/work_items/593452 […] ``` Most of the page gets contained within these `<div>`s: ![image](/uploads/048bf37fffd6d1bceda82aee9b544419/image.png){width=538 height=600} <details><summary>Full document in case it's relevant</summary> `````markdown ## What does this MR do and why? 1. first <div> 2. second <div> Update the group billing page for free and trial namespace. Related to https://gitlab.com/gitlab-org/gitlab/-/work_items/593452 Layout changes are behind the feature flag: `saas_upgrade_subscription_billing_page`. Changes to the existing cards are not behind the feature flag. This MR also moves away from using GlCard due to all the visual overrides needed, more context: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/225768#note_3137016347 Frontend change summary: 1. New app_with_upgrade_subscription.vue — New billing page layout component that conditionally shows CurrentPlanCard, DapMonthlyCreditCard, and StartUltimateTrialCard (hidden if trial is active or expired). 2. New start_ultimate_trial_card.vue — New card prompting users to start an Ultimate trial, listing benefits (Duo Agent Platform, Advanced CI/CD, no credit card required). 3. current_plan_card.vue refactored — Replaced GlCard wrapper with plain `<div>` + utility classes. Added upgradeSubscriptionPath inject; when present, shows an "Upgrade subscription" CTA instead of "Manage seats". 4. dap_monthly_credit_card.vue refactored — Also replaced GlCard with `<div>`. Removed gitlabCreditsDashboardPath inject, added upgradeSubscriptionPath. Simplified card content logic (removed separate trial-active branch), added new trial-included credit display (24 credits/user). Updated credit pricing from "$1" to "$0.95". Secondary link is now always "Learn more" pointing to docs. ## Screenshots or screen recordings <details> <summary>Updated design</summary> | Free without monthly credit purchase | Trial without monthly credit purchase | Expired trial without monthly credit purchase | | ------ | ------ | ------ | | ![Screenshot_2026-03-19_at_12.45.27_PM](/uploads/3f74b4b080da5672815324207a8c923e/Screenshot_2026-03-19_at_12.45.27_PM.png){width=618 height=600}|![Screenshot_2026-03-19_at_12.46.47_PM](/uploads/449d10b4edf9d8d560136e22d9971011/Screenshot_2026-03-19_at_12.46.47_PM.png){width=618 height=600}|![Screenshot_2026-03-19_at_12.48.18_PM](/uploads/3f9213306919f4668cfd4788f14b55d8/Screenshot_2026-03-19_at_12.48.18_PM.png){width=618 height=600}| | Free with monthly credit purchase | Trial with monthly credit purchase | Expired trial with monthly credit purchase | | ------ | ------ | ------ | | ![Screenshot_2026-03-19_at_12.46.19_PM](/uploads/915a7532eff156540a093878759561a9/Screenshot_2026-03-19_at_12.46.19_PM.png){width=618 height=600}|![Screenshot_2026-03-19_at_12.47.01_PM](/uploads/304274c055e281e52db2ec2c0d9ed750/Screenshot_2026-03-19_at_12.47.01_PM.png){width=618 height=600}| ![Screenshot_2026-03-19_at_12.47.53_PM](/uploads/71e30846a23ee7920028d5cd8ed3dcd2/Screenshot_2026-03-19_at_12.47.53_PM.png){width=618 height=600}| </details> <details> <summary>Previous design with updated card</summary> | Free without monthly credit purchase | Trial without monthly credit purchase | Expired trial without monthly credit purchase | | ------ | ------ | ------ | |![Screenshot_2026-03-19_at_12.54.31_PM](/uploads/135f29168c8b8cac6990f9a60d53bde6/Screenshot_2026-03-19_at_12.54.31_PM.png){width=645 height=600}|![Screenshot_2026-03-19_at_12.53.50_PM](/uploads/8d018dbb6c21da9beced764175103786/Screenshot_2026-03-19_at_12.53.50_PM.png){width=645 height=600}|![Screenshot_2026-03-19_at_12.58.45_PM](/uploads/65e484903f7ceaa19076ca1509adf1ee/Screenshot_2026-03-19_at_12.58.45_PM.png){width=645 height=600}| | Free with monthly credit purchase | Trial with monthly credit purchase | Expired trial with monthly credit purchase | | ------ | ------ | ------ | |![Screenshot_2026-03-19_at_12.57.28_PM](/uploads/26d06642edc0bbc6f657b31944c355d6/Screenshot_2026-03-19_at_12.57.28_PM.png){width=645 height=600}|![Screenshot_2026-03-19_at_12.56.58_PM](/uploads/886ea03a601cc32f5b0e77636dfdf3c6/Screenshot_2026-03-19_at_12.56.58_PM.png){width=645 height=600}|![Screenshot_2026-03-19_at_12.58.11_PM](/uploads/52477b5f5c54206d24e56662da3ecd85/Screenshot_2026-03-19_at_12.58.11_PM.png){width=645 height=600}| </details> ## How to set up and validate locally 1. Simulate Saas: https://docs.gitlab.com/ee/development/ee_features.html#simulate-a-saas-instance and restart GDK 2. Enable the feature flag in rails console: `Feature.enable(:enable_free_purchase_dap_monthly_commit)` 3. For free group, find or create a free group and go to /groups/{group-name}/-/billings page as owner 4. For trial group, create a group; In the gitlab admin UI, edit the group to be on an ultimate trial 5. In rails console, change the trial dates for the group ```ruby Group.last.gitlab_subscription.update_columns(trial_starts_on: Date.today, trial_ends_on: 30.days.from_now, trial: true) ``` 6. To simulate expired group, run the same code above but modify `trial_ends_on` to be `1.days.ago`. 7. Go to the group billings page. 8. To check the has monthly commitment variants of the page, quickest way is to simulate backend passing the data by applying the patch: ```diff diff --git a/ee/app/helpers/billing_plans_helper.rb b/ee/app/helpers/billing_plans_helper.rb index 7916fc6e0118..b1a43a4ab850 100644 --- a/ee/app/helpers/billing_plans_helper.rb +++ b/ee/app/helpers/billing_plans_helper.rb @@ -66,7 +66,7 @@ def free_trial_upgrade_subscription_billing_attributes(namespace, monthly_commit manageSeatsPath: group_usage_quotas_path(namespace, anchor: 'seats-quota-tab'), startTrialPath: new_trial_path(namespace_id: namespace.id), purchaseCreditsPath: ::Gitlab::Routing.url_helpers.subscription_portal_gitlab_com_purchase_credits_url(namespace.id), - monthlyCommitmentPurchased: monthly_commitment_purchased, + monthlyCommitmentPurchased: 20, upgradeSubscriptionPath: 'groups/upgrade-subscription' } end ``` <!-- Numbered steps to set up and validate the change are strongly suggested. Example: 1. In rails console enable the feature flag ```ruby Feature.enable(:member_areas_of_focus) ``` 1. Visit any group or project member pages such as `http://127.0.0.1:3000/groups/flightjs/-/group_members` 1. Click the `invite members` button. --> ## MR acceptance checklist Evaluate this MR against the [MR acceptance checklist](https://docs.gitlab.com/development/code_review/#acceptance-checklist). It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability. Related to #593452 ````` </details>
issue