fix billing toggle and Most Popular badge consistency
- Fix CSS-only billing toggle: radio inputs were nested inside
.s-billing-toggle, so ~ siblings couldn't reach plan card price
elements inside <form>. Moved radios to be direct siblings of both
.s-billing-toggle and <form>. Updated CSS selectors accordingly.
Removed .price-yearly{display:block} override that broke monthly view.
- Set Most Popular badge on Growth (not Pro) in signup wizard — Growth
is the natural entry point for lead-receiving suppliers
- Update public pricing page: Growth €149→€199, Pro €399→€499
- Refresh Pro feature list: logo+cover photo, full stats, verified badge
(no longer described as add-ons since they're built into Pro)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -350,12 +350,12 @@
|
|||||||
<div class="pricing-card pricing-card--highlight">
|
<div class="pricing-card pricing-card--highlight">
|
||||||
<div class="pricing-card__popular">Most Popular</div>
|
<div class="pricing-card__popular">Most Popular</div>
|
||||||
<h3>Growth</h3>
|
<h3>Growth</h3>
|
||||||
<div class="price">€149 <span>/mo</span></div>
|
<div class="price">€199 <span>/mo</span></div>
|
||||||
<div class="credits-inc">30 credits/mo included</div>
|
<div class="credits-inc">30 credits/mo included</div>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Company name & category badge</li>
|
<li>Company name & category badge</li>
|
||||||
<li>City & country shown</li>
|
<li>City & country shown</li>
|
||||||
<li>Description (3 lines)</li>
|
<li>Description visible</li>
|
||||||
<li>"Growth" badge</li>
|
<li>"Growth" badge</li>
|
||||||
<li>Priority over free listings</li>
|
<li>Priority over free listings</li>
|
||||||
<li>Access to lead feed</li>
|
<li>Access to lead feed</li>
|
||||||
@@ -366,16 +366,15 @@
|
|||||||
<!-- Pro -->
|
<!-- Pro -->
|
||||||
<div class="pricing-card">
|
<div class="pricing-card">
|
||||||
<h3>Pro</h3>
|
<h3>Pro</h3>
|
||||||
<div class="price">€399 <span>/mo</span></div>
|
<div class="price">€499 <span>/mo</span></div>
|
||||||
<div class="credits-inc">100 credits/mo included</div>
|
<div class="credits-inc">100 credits/mo included</div>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Everything in Growth</li>
|
<li>Everything in Growth</li>
|
||||||
<li>Company logo displayed</li>
|
<li>Logo & cover photo</li>
|
||||||
<li>Full description</li>
|
<li>Full stats (projects, years, area)</li>
|
||||||
<li>Website link shown</li>
|
|
||||||
<li>Verified ✓ badge</li>
|
<li>Verified ✓ badge</li>
|
||||||
|
<li>Featured card border & glow</li>
|
||||||
<li>Priority placement</li>
|
<li>Priority placement</li>
|
||||||
<li>Highlighted card border</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
<a href="{{ url_for('suppliers.signup') }}?plan=supplier_pro" class="btn-outline" style="display:block;text-align:center">Get Started</a>
|
<a href="{{ url_for('suppliers.signup') }}?plan=supplier_pro" class="btn-outline" style="display:block;text-align:center">Get Started</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -2,12 +2,14 @@
|
|||||||
<h2 class="s-step-title">Choose Your Plan</h2>
|
<h2 class="s-step-title">Choose Your Plan</h2>
|
||||||
<p class="s-step-sub">Select the plan that fits your growth goals.</p>
|
<p class="s-step-sub">Select the plan that fits your growth goals.</p>
|
||||||
|
|
||||||
<!-- Billing period toggle (CSS-only, no JS) -->
|
<!-- Billing period toggle (CSS sibling selector trick).
|
||||||
<div class="s-billing-toggle">
|
Radios must be direct siblings of .s-billing-toggle AND <form> so that
|
||||||
|
#bp-X:checked ~ * .price-X can reach into the plan cards. -->
|
||||||
<input type="radio" name="_bp_toggle" id="bp-monthly" value="monthly"
|
<input type="radio" name="_bp_toggle" id="bp-monthly" value="monthly"
|
||||||
{% if data.get('billing_period', 'yearly') == 'monthly' %}checked{% endif %}>
|
{% if data.get('billing_period', 'yearly') == 'monthly' %}checked{% endif %}>
|
||||||
<input type="radio" name="_bp_toggle" id="bp-yearly" value="yearly"
|
<input type="radio" name="_bp_toggle" id="bp-yearly" value="yearly"
|
||||||
{% if data.get('billing_period', 'yearly') != 'monthly' %}checked{% endif %}>
|
{% if data.get('billing_period', 'yearly') != 'monthly' %}checked{% endif %}>
|
||||||
|
<div class="s-billing-toggle">
|
||||||
<div class="s-billing-toggle__pill">
|
<div class="s-billing-toggle__pill">
|
||||||
<label for="bp-monthly" class="s-billing-toggle__opt">Monthly</label>
|
<label for="bp-monthly" class="s-billing-toggle__opt">Monthly</label>
|
||||||
<label for="bp-yearly" class="s-billing-toggle__opt">
|
<label for="bp-yearly" class="s-billing-toggle__opt">
|
||||||
@@ -17,8 +19,8 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
#bp-monthly, #bp-yearly { display: none; } /* radios are layout-only */
|
||||||
.s-billing-toggle { margin-bottom: 1.25rem; }
|
.s-billing-toggle { margin-bottom: 1.25rem; }
|
||||||
.s-billing-toggle input[type="radio"] { display: none; }
|
|
||||||
.s-billing-toggle__pill {
|
.s-billing-toggle__pill {
|
||||||
display: inline-flex; border: 1px solid #E2E8F0; border-radius: 999px;
|
display: inline-flex; border: 1px solid #E2E8F0; border-radius: 999px;
|
||||||
background: #F8FAFC; overflow: hidden;
|
background: #F8FAFC; overflow: hidden;
|
||||||
@@ -28,27 +30,23 @@
|
|||||||
color: #64748B; transition: all 0.15s; border-radius: 999px;
|
color: #64748B; transition: all 0.15s; border-radius: 999px;
|
||||||
display: flex; align-items: center; gap: 6px;
|
display: flex; align-items: center; gap: 6px;
|
||||||
}
|
}
|
||||||
#bp-monthly:checked ~ .s-billing-toggle__pill label[for="bp-monthly"],
|
/* Radios are now direct siblings of .s-billing-toggle, so ~ reaches it */
|
||||||
#bp-yearly:checked ~ .s-billing-toggle__pill label[for="bp-yearly"] {
|
#bp-monthly:checked ~ .s-billing-toggle label[for="bp-monthly"],
|
||||||
|
#bp-yearly:checked ~ .s-billing-toggle label[for="bp-yearly"] {
|
||||||
background: #1D4ED8; color: white;
|
background: #1D4ED8; color: white;
|
||||||
}
|
}
|
||||||
.s-save-badge {
|
.s-save-badge {
|
||||||
font-size: 0.625rem; font-weight: 700; background: #DCFCE7; color: #16A34A;
|
font-size: 0.625rem; font-weight: 700; background: #DCFCE7; color: #16A34A;
|
||||||
padding: 2px 6px; border-radius: 999px;
|
padding: 2px 6px; border-radius: 999px;
|
||||||
}
|
}
|
||||||
#bp-yearly:checked ~ .s-billing-toggle__pill label[for="bp-yearly"] .s-save-badge {
|
#bp-yearly:checked ~ .s-billing-toggle label[for="bp-yearly"] .s-save-badge {
|
||||||
background: rgba(255,255,255,0.2); color: white;
|
background: rgba(255,255,255,0.2); color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Price display depending on toggle */
|
/* Price display: radios are siblings of <form>, so ~ * reaches plan cards */
|
||||||
.price-monthly, .price-yearly { display: none; }
|
.price-monthly, .price-yearly { display: none; }
|
||||||
#bp-monthly:checked ~ * .price-monthly { display: block; }
|
#bp-monthly:checked ~ * .price-monthly { display: block; }
|
||||||
#bp-yearly:checked ~ * .price-yearly { display: block; }
|
#bp-yearly:checked ~ * .price-yearly { display: block; }
|
||||||
/* Default (yearly checked) */
|
|
||||||
.price-yearly { display: block; }
|
|
||||||
|
|
||||||
/* Override when monthly is checked — but CSS sibling limitation means we use
|
|
||||||
the form hidden field trick: the actual billing_period value is set by JS below */
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<form hx-post="{{ url_for('suppliers.signup_step', step=1) }}"
|
<form hx-post="{{ url_for('suppliers.signup_step', step=1) }}"
|
||||||
@@ -63,7 +61,7 @@
|
|||||||
<label class="s-plan-card {% if data.get('plan', 'supplier_growth') == key %}s-plan-card--selected{% endif %}"
|
<label class="s-plan-card {% if data.get('plan', 'supplier_growth') == key %}s-plan-card--selected{% endif %}"
|
||||||
onclick="this.parentNode.querySelectorAll('.s-plan-card').forEach(c=>c.classList.remove('s-plan-card--selected')); this.classList.add('s-plan-card--selected')">
|
onclick="this.parentNode.querySelectorAll('.s-plan-card').forEach(c=>c.classList.remove('s-plan-card--selected')); this.classList.add('s-plan-card--selected')">
|
||||||
<input type="radio" name="plan" value="{{ key }}" {% if data.get('plan', 'supplier_growth') == key %}checked{% endif %}>
|
<input type="radio" name="plan" value="{{ key }}" {% if data.get('plan', 'supplier_growth') == key %}checked{% endif %}>
|
||||||
{% if key == 'supplier_pro' %}<div class="s-plan-card__popular">Most Popular</div>{% endif %}
|
{% if key == 'supplier_growth' %}<div class="s-plan-card__popular">Most Popular</div>{% endif %}
|
||||||
<h3>{{ plan.name }}</h3>
|
<h3>{{ plan.name }}</h3>
|
||||||
<div class="price-yearly">
|
<div class="price-yearly">
|
||||||
<div class="price">€{{ plan.yearly_monthly_equivalent }} <span>/mo</span></div>
|
<div class="price">€{{ plan.yearly_monthly_equivalent }} <span>/mo</span></div>
|
||||||
|
|||||||
Reference in New Issue
Block a user