<figure class="mt-[10px] lg:mt-[40px] mx-auto max-w-max lg:max-w-[1328px] px-[24px]">
{% include '@App/shared/ui/header/header.html.twig' %}
<div class="stepper-wrapper mt-[80px] mb-[24px]">
<div class="stepper-item active">
<div class="step-counter">01</div>
<div class="step-name">{% trans from 'tarif_choice' %}Тарифні плани{% endtrans %}</div>
</div>
<div class="stepper-item ">
<div class="step-counter">02</div>
<div class="step-name">{% trans from 'tarif_choice' %}Реєстрація E-mail{% endtrans %}</div>
</div>
<div class="stepper-item ">
<div class="step-counter">03</div>
<div class="step-name">{% trans from 'tarif_choice' %}Отримання номеру{% endtrans %}</div>
</div>
<div class="stepper-item">
<div class="step-counter">04</div>
<div class="step-name">{% trans from 'tarif_choice' %}Підтвердження та оплата{% endtrans %}</div>
</div>
<div class="stepper-item">
<div class="step-counter">05</div>
<div class="step-name">{% trans from 'tarif_choice' %}Отримання eSIM{% endtrans %}</div>
</div>
</div>
<div class="rounded-[16px] p-[16px] md:p-[32px] border border-[#E2E2E9] bg-[#F7F7FA]">
<div class="mt-[14px] p-0 md:p-[18px] max-w-full mx-auto rounded-[24px] ">
<div class="flex justify-between items-center relative">
<div class="absolute left-[-10px] top-[-10px] md:left-0 md:top-0">
{% include '@App/shared/ui/backButton/backButtonWeb.html.twig' %}
</div>
<div class="flex flex-col gap-[16px] text-center mt-[32px] md:mt-0 mx-auto max-w-[485px]">
<div class="text-[24px] font-semibold text-[#1B2028]"
style="{{ inlineStyles(app.request.get('companyInner'), constant('App\\Constants\\SettingConstants::BLOCK_TITLE_STYLES')) }}"
>{% trans from 'tarif_choice' %}Перегляд тарифу{% endtrans %}</div>
</div>
{% if faqs is defined and faqs is not empty %}
{# <a href="{{ path('how_it_works') }}" class="font-medium text-[#E64829] text-[16px] text-center block hover:underline mt-[30px]">{% trans from 'main' %}Як працює eSIM?{% endtrans %}</a> #}
<div class="absolute right-[-10px] top-[-10px] md:right-0 md:top-0">
<div class="relative group">
<button data-modal="#modal_faq"
class="js--modal hover:underline transition ease-in-out duration-150 block text-center w-[34px] h-[34px] p-[7px] md:w-[48px] md:h-[48px] md:p-[14px] bg-transparent border rounded-[50%] border-none font-semibold text-[16px] focus:outline-none"
style="color: {{ companyStyles.linkTextColor }}; --custom-color: {{ companyStyles.buttonColor }}; background-color: rgba(from var(--custom-color) r g b / 0.2)">
<svg class="w-[20px] h-[20px]"
style="fill: {{ companyStyles.buttonColor }}; border-color: {{ companyStyles.buttonColor }}">
<use href="{{ asset('build/sprite.svg#question') }}"></use>
</svg>
</button>
<!-- Тултип -->
<div class="w-[160px] text-right text-[14px] absolute hidden group-hover:block bg-[#1A1A1A] text-white rounded py-[4px] px-[8px] right-full top-1/2 -translate-y-1/2 mr-2 transition-opacity duration-200 opacity-0 group-hover:opacity-100">
{% trans from 'tarif_choice' %}Поширені питання та відповіді{% endtrans %}
<!-- Стрелка -->
<div class="absolute w-0 h-0 border-4 border-transparent border-l-[#1A1A1A] -right-2 top-1/2 -translate-y-1/2"></div>
</div>
</div>
</div>
{% endif %}
</div>
{# <div class="text-[16px] font-medium text-[#A0A4AE] mb-[20px] text-{{ companyStyles.descriptionTextAlign }}"> #}
{# {% if is_granted('ROLE_FRONT_USER') %}{% trans from 'register' %}Крок 1/3{% endtrans %}{% else %}{% trans from 'register' %}Крок 1/5{% endtrans %}{% endif %} #}
{# </div> #}
<div class="gap-[10px] mt-[32px] pr-[8px]">
{% if esimPresence is defined and esimPresence is not null and esimPresence == false %}
<div class="rounded-[16px] p-[18px] border border-[#E2E2E9] bg-[#ffffff] mt-[40px]">
<div class="text-[24px] font-semibold text-[#1B2028] mx-auto text-{{ companyStyles.descriptionTextAlign }} {% if companyStyles.descriptionTextAlign == 'center' %}max-w-[360px]{% endif %}"
>{% trans from 'tarif_choice' %}На жаль, наразі немає доступних номерів. Спробуйте пізніше{% endtrans %}</div>
</div>
{% else %}
{# ===== MOBILE LAYOUT (< 767px) ===== #}
<div class="block md:hidden">
<div class="rounded-[16px] p-[18px] w-full border border-[#E2E2E9] bg-[#ffffff]">
{% if tariff.mainImage is not empty %}
<div class="w-full h-auto mb-[16px]">
{{ sonata_media(tariff.mainImage, 'reference') }}
</div>
{% elseif tariff.imageLink %}
<div class="w-full h-auto mb-[16px]">
<img src="{{ tariff.imageLink }}" alt="{{ tariff.name }}"/>
</div>
{% endif %}
<div class="text-[20px] text-[#1B2028] font-medium">{{ tariff.name }}</div>
{% if tariff.reference is not empty %}
<div class="text-[12px] text-[#5B5B5B] font-medium">{% trans from 'tarif_choice' %}Артикул:{% endtrans %} {{ tariff.reference }}</div>
{% endif %}
{% if tariff.shortInfo is not empty %}
{# Accordion: Короткий опис #}
<div class="tariff-accordion mt-[16px] border border-[#E2E2E9] rounded-[16px] overflow-hidden">
<button class="tariff-accordion__toggle w-full flex justify-between items-center p-[14px] bg-[#F7F7FA] text-[16px] font-medium text-[#1B2028]" aria-expanded="true">
<span>Короткий опис</span>
<svg class="tariff-accordion__icon w-[20px] h-[20px] transition-transform duration-300" style="stroke: #5B5B5B; fill: none;" viewBox="0 0 24 24" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<polyline points="6 9 12 15 18 9"/>
</svg>
</button>
<div class="tariff-accordion__body px-[14px] pb-[14px] text-[14px] text-[#5B5B5B] prose break-words">
{{ tariff.shortInfo|raw }}
</div>
</div>
{% endif %}
{# Accordion: Детальна інформація #}
{% if tariff.detailedInfo is not empty %}
<div class="tariff-accordion mt-[12px] border border-[#E2E2E9] rounded-[16px] overflow-hidden">
<button class="tariff-accordion__toggle w-full flex justify-between items-center p-[14px] bg-[#F7F7FA] text-[16px] font-medium text-[#1B2028]" aria-expanded="false">
<span>{% trans from 'tarif_choice' %}Детальна інформація{% endtrans %}</span>
<svg class="tariff-accordion__icon w-[20px] h-[20px] transition-transform duration-300" style="stroke: #5B5B5B; fill: none;" viewBox="0 0 24 24" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<polyline points="6 9 12 15 18 9"/>
</svg>
</button>
<div class="tariff-accordion__body hidden px-[14px] pb-[14px] text-[14px] text-[#5B5B5B] prose break-words">
{{ tariff.detailedInfo|raw }}
</div>
</div>
{% endif %}
</div>
{# Sticky buttons bar #}
<div id="tariff-sticky-bar" class="fixed bottom-0 left-0 right-0 z-50 bg-white border-t border-[#E2E2E9] px-[16px] py-[12px] flex flex-col gap-[8px] transition-all duration-300">
{% if tariff.active %}
<a href="{{ path('tariff_selected_page',{tariff:tariff.id}) }}" class="w-full">
<button class="hover:underline transition ease-in-out duration-150 w-full flex flex-row gap-[8px] justify-center text-center p-[12px] min-h-[48px] bg-transparent border rounded-[10px] font-semibold text-[14px] focus:outline-none"
style="color: {{ companyStyles.notFilledButtonTextColor }}; border-color: {{ companyStyles.notFilledButtonTextColor }}">
{% trans with {'%price%': tariff.price} from 'tarif_choice' %}Купити за %price%₴{% endtrans %}
</button>
</a>
{% else %}
<button type="button" disabled class="w-full opacity-50 cursor-not-allowed pointer-events-none transition ease-in-out duration-150 flex flex-row gap-[8px] justify-center text-center p-[12px] min-h-[48px] bg-transparent border border-[#E2E2E9] text-[#5B5B5B] rounded-[10px] font-semibold text-[14px] focus:outline-none">
{% trans from 'tarif_choice' %}Немає в наявності{% endtrans %}
</button>
{% endif %}
<a href="{{ path('operator_tariff_page',{slug:tariff.operator.slug}) }}" class="w-full">
<button class="hover:underline transition ease-in-out duration-150 w-full flex flex-row gap-[8px] justify-center text-center p-[12px] min-h-[48px] bg-transparent border rounded-[10px] font-semibold text-[14px] focus:outline-none"
style="color: {{ companyStyles.notFilledButtonTextColor }}; border-color: {{ companyStyles.notFilledButtonTextColor }}">
{% trans from 'tarif_choice' %}Обрати інший тариф{% endtrans %}
</button>
</a>
</div>
{# Sentinel: when buttons scroll into natural position, hide sticky bar #}
<div id="tariff-buttons-sentinel" class="rounded-[16px] p-[18px] w-full border border-[#E2E2E9] bg-[#ffffff] mt-[12px]">
<div class="flex flex-wrap justify-center flex-col gap-[8px] w-full">
{% if tariff.active %}
<a href="{{ path('tariff_selected_page',{tariff:tariff.id}) }}" class="w-full">
<button class="hover:underline transition ease-in-out duration-150 w-full flex flex-row gap-[8px] justify-center text-center p-[12px] min-h-[48px] bg-transparent border rounded-[10px] font-semibold text-[14px] focus:outline-none"
style="color: {{ companyStyles.notFilledButtonTextColor }}; border-color: {{ companyStyles.notFilledButtonTextColor }}">
{% trans with {'%price%': tariff.price} from 'tarif_choice' %}Купити за %price%₴{% endtrans %}
</button>
</a>
{% else %}
<button type="button" disabled class="w-full opacity-50 cursor-not-allowed pointer-events-none transition ease-in-out duration-150 flex flex-row gap-[8px] justify-center text-center p-[12px] min-h-[48px] bg-transparent border border-[#E2E2E9] text-[#5B5B5B] rounded-[10px] font-semibold text-[14px] focus:outline-none">
{% trans from 'tarif_choice' %}Немає в наявності{% endtrans %}
</button>
{% endif %}
<a href="{{ path('operator_tariff_page',{slug:tariff.operator.slug}) }}" class="w-full">
<button class="hover:underline transition ease-in-out duration-150 w-full flex flex-row gap-[8px] justify-center text-center p-[12px] min-h-[48px] bg-transparent border rounded-[10px] font-semibold text-[14px] focus:outline-none"
style="color: {{ companyStyles.notFilledButtonTextColor }}; border-color: {{ companyStyles.notFilledButtonTextColor }}">
{% trans from 'tarif_choice' %}Обрати інший тариф{% endtrans %}
</button>
</a>
</div>
</div>
</div>
{# ===== DESKTOP LAYOUT (>= 767px) ===== #}
<div class="hidden md:block">
<div class="rounded-[16px] p-[18px] w-full border border-[#E2E2E9] bg-[#ffffff]">
<div class="flex flex-col md:flex-row content-start gap-[32px]">
{% if tariff.mainImage is not empty %}
<div class="w-full h-auto ">
{{ sonata_media(tariff.mainImage, 'reference') }}
</div>
{% elseif tariff.imageLink %}
<div class="w-full h-auto ">
<img src="{{ tariff.imageLink }}" alt="{{ tariff.name }}"/>
</div>
{% endif %}
<div class="w-full h-auto flex flex-col content-start">
<div class="text-[20px] text-[#1B2028] font-medium">{{ tariff.name }}</div>
{% if tariff.reference is not empty %}
<div class="text-[12px] text-[#5B5B5B] font-medium">{% trans from 'tarif_choice' %}Артикул:{% endtrans %} {{ tariff.reference }}</div>
{% endif %}
{% if tariff.shortInfo is not empty %}
<div class="mt-[32px] text-[14px] text-[#5B5B5B] prose break-words">{{ tariff.shortInfo|raw }}</div>
{% endif %}
<div class="flex flex-wrap justify-center flex-row gap-[10px] mt-[32px] w-full">
{% if tariff.active %}
<a href="{{ path('tariff_selected_page',{tariff:tariff.id}) }}"
class="mt-auto w-full max-w-[250px]"
>
<button class=" hover:underline transition ease-in-out duration-150 w-full flex flex-row gap-[8px] justify-center text-center p-[12px] min-h-[48px] bg-transparent border rounded-[10px] font-semibold text-[14px] mt-[16px] focus:outline-none"
style="color: {{ companyStyles.notFilledButtonTextColor }}; border-color: {{ companyStyles.notFilledButtonTextColor }}">
{% trans with {'%price%': tariff.price} from 'tarif_choice' %}Купити за %price%₴{% endtrans %}
</button>
</a>
{% else %}
<button type="button" disabled class="mt-auto w-full max-w-[250px] opacity-50 cursor-not-allowed pointer-events-none hover:underline transition ease-in-out duration-150 flex flex-row gap-[8px] justify-center text-center p-[12px] min-h-[48px] bg-transparent border border-[#E2E2E9] text-[#5B5B5B] rounded-[10px] font-semibold text-[14px] mt-[16px] focus:outline-none">
{% trans from 'tarif_choice' %}Немає в наявності{% endtrans %}
</button>
{% endif %}
<a href="{{ path('operator_tariff_page',{slug:tariff.operator.slug}) }}"
class="mt-auto w-full max-w-[250px]"
>
<button class=" hover:underline transition ease-in-out duration-150 w-full flex flex-row gap-[8px] justify-center text-center p-[12px] min-h-[48px] bg-transparent border rounded-[10px] font-semibold text-[14px] mt-[16px] focus:outline-none"
style="color: {{ companyStyles.notFilledButtonTextColor }}; border-color: {{ companyStyles.notFilledButtonTextColor }}">
{% trans from 'tarif_choice' %}Обрати інший тариф{% endtrans %}
</button>
</a>
</div>
</div>
</div>
<div class="rounded-[16px] p-[18px] mt-[32px] w-full border border-[#E2E2E9] bg-[#ffffff]">
<div class="text-[18px] text-[#1B2028] font-medium">{% trans from 'tarif_choice' %}Детальна інформація{% endtrans %}</div>
<article class="mb-[10px]">
{% if tariff.detailedInfo is not empty %}
<div class="mt-[32px] text-[14px] text-[#5B5B5B] prose break-words">{{ tariff.detailedInfo|raw }}</div>
{% endif %}
</article>
</div>
</div>
</div>
{% endif %}
</div>
</div>
</div>
</figure>
<!-- modal-window fixed hidden top-0 left-0 right-0 z-50 show:opacity-100 w-full p-4 overflow-x-hidden overflow-y-auto mx-auto md:inset-0 max-h-full -->
{% for modal in tariff.operator.tariffs %}
{% if modal.description is not empty %}
{% include '@App/shared/ui/modal/modal_web.html.twig' with {
id: modal.id,
name: modal.name,
image: modal.mainImage,
imageLink: modal.imageLink,
description: modal.description | raw,
showButton: true,
} %}
{% endif %}
{% endfor %}
<script>
(function () {
// Only run on mobile (< 767px)
if (window.innerWidth >= 767) return;
// ── Accordion ──────────────────────────────────────────────
document.querySelectorAll('.tariff-accordion__toggle').forEach(function (btn) {
var body = btn.nextElementSibling;
var icon = btn.querySelector('.tariff-accordion__icon');
var isOpen = btn.getAttribute('aria-expanded') === 'true';
// Apply initial state
if (!isOpen) {
body.classList.add('hidden');
icon.style.transform = 'rotate(-90deg)';
} else {
body.classList.remove('hidden');
icon.style.transform = 'rotate(0deg)';
}
btn.addEventListener('click', function () {
var expanded = btn.getAttribute('aria-expanded') === 'true';
if (expanded) {
btn.setAttribute('aria-expanded', 'false');
body.classList.add('hidden');
icon.style.transform = 'rotate(-90deg)';
} else {
btn.setAttribute('aria-expanded', 'true');
body.classList.remove('hidden');
icon.style.transform = 'rotate(0deg)';
}
});
});
// ── Sticky bar ─────────────────────────────────────────────
var stickyBar = document.getElementById('tariff-sticky-bar');
var sentinel = document.getElementById('tariff-buttons-sentinel');
if (stickyBar && sentinel) {
var observer = new IntersectionObserver(function (entries) {
entries.forEach(function (entry) {
if (entry.isIntersecting) {
// Sentinel is visible — hide sticky bar
stickyBar.style.transform = 'translateY(100%)';
stickyBar.style.opacity = '0';
stickyBar.style.pointerEvents = 'none';
} else {
// Sentinel not visible — show sticky bar
stickyBar.style.transform = 'translateY(0)';
stickyBar.style.opacity = '1';
stickyBar.style.pointerEvents = '';
}
});
}, { threshold: 0.1 });
observer.observe(sentinel);
}
})();
</script>