{"product_id":"wietnam-05","title":"Wietnam – październik","description":"\u003cstyle\u003e\n  *, *::before, *::after { box-sizing: border-box; }\n\n  \/* ===== LAYOUT WRAPPER ===== *\/\n  .page-layout { display: grid; grid-template-columns: 1fr 340px; gap: 24px; align-items: start; }\n  .page-main { min-width: 0; }\n  .page-sidebar { position: sticky; top: 20px; align-self: start; }\n  @media (max-width: 900px) {\n    .page-layout { display: block; }\n    .page-sidebar { position: static; margin-bottom: 24px; }\n  }\n\n  \/* ===== PROCES ===== *\/\n  .proc-section { background: linear-gradient(135deg, #0094d9 0%, #006fa8 100%); border-radius: 20px; padding: 28px 24px; margin: 0 auto 24px auto; }\n  .proc-title { color: #fff; font-size: 18px; font-weight: 800; margin: 0 0 20px 0; text-align: center; letter-spacing: -0.2px; }\n  .proc-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; align-items: start; }\n  .proc-step { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 10px; position: relative; }\n  .proc-step:not(:last-child)::after { content: ''; position: absolute; top: 22px; left: calc(50% + 22px); width: calc(100% - 44px); height: 2px; background: rgba(255,255,255,0.25); }\n  .proc-icon-wrap { width: 44px; height: 44px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 20px; flex-shrink: 0; position: relative; z-index: 1; }\n  .proc-icon-wrap.c1 { background: #f9c200; }\n  .proc-icon-wrap.c2 { background: rgba(255,255,255,0.2); border: 2px solid rgba(255,255,255,0.5); }\n  .proc-icon-wrap.c3 { background: #f9c200; }\n  .proc-icon-wrap.c4 { background: rgba(255,255,255,0.2); border: 2px solid rgba(255,255,255,0.5); }\n  .proc-icon-img { width: 22px; height: 22px; object-fit: contain; display: block; }\n  .proc-num-badge { position: absolute; top: -4px; right: -4px; width: 18px; height: 18px; background: #fff; color: #0094d9; border-radius: 50%; font-size: 10px; font-weight: 900; display: flex; align-items: center; justify-content: center; }\n  .proc-step-title { font-size: 12px; font-weight: 800; color: #fff; line-height: 1.3; }\n  .proc-step-desc { font-size: 11px; color: rgba(255,255,255,0.8); line-height: 1.5; }\n  @media (max-width: 640px) {\n    .proc-grid { grid-template-columns: 1fr 1fr; gap: 18px 12px; }\n    .proc-step::after { display: none; }\n    .proc-title { font-size: 16px; }\n    .proc-section { padding: 22px 16px; }\n  }\n\n  \/* ===== TRIP SUMMARY ===== *\/\n  .trip-summary { background: #f5f5f0; border-radius: 20px; margin: 0 auto 24px auto; overflow: hidden; }\n  .trip-summary-header { background: #0094d9; padding: 16px 20px; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 6px; }\n  .trip-summary-name { font-size: 20px; font-weight: 900; color: #fff; }\n  .trip-summary-price { font-size: 22px; font-weight: 900; color: #fff; }\n  .trip-summary-price span { font-size: 13px; font-weight: 500; opacity: 0.85; }\n  .trip-pills { display: flex; gap: 10px; padding: 14px 20px; flex-wrap: wrap; border-bottom: 1px solid rgba(35,31,32,0.10); }\n  .trip-pill { display: flex; align-items: center; gap: 7px; background: #fff; border-radius: 30px; padding: 7px 14px; }\n  .trip-pill-icon-img { width: 16px; height: 16px; object-fit: contain; display: block; }\n  .trip-pill-label { font-size: 10px; color: #888; font-weight: 600; text-transform: uppercase; letter-spacing: 0.4px; display: block; line-height: 1; }\n  .trip-pill-value { font-size: 13px; font-weight: 800; color: #231f20; display: block; line-height: 1.3; margin-top: 2px; }\n  @media (max-width: 480px) {\n    .trip-pills { gap: 8px; padding: 12px 14px; }\n    .trip-pill { padding: 6px 10px; }\n    .trip-summary-name { font-size: 16px; }\n    .trip-summary-price { font-size: 18px; }\n  }\n  .offer-desc { padding: 18px 20px; font-size: 13px; color: #333; line-height: 1.7; }\n  .offer-desc-title { font-size: 12px; font-weight: 800; color: #0094d9; text-transform: uppercase; letter-spacing: 0.5px; margin: 14px 0 6px 0; display: flex; align-items: center; gap: 6px; }\n  .offer-desc-icon { width: 18px; height: 18px; object-fit: contain; display: inline-block; flex-shrink: 0; }\n  .offer-desc ul { margin: 4px 0 0 0; padding: 0 0 0 16px; }\n  .offer-desc ul li { font-size: 13px; color: #333; line-height: 1.6; margin-bottom: 2px; }\n\n  \/* ===== CO ZAWIERA ===== *\/\n  .inc-section { margin: 0 0 24px 0; width: 100%; }\n  .inc-heading { font-size: 16px; font-weight: 700; color: #231f20; text-align: center; margin: 0 0 12px 0; }\n  .inc-grid { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 10px; width: 100%; }\n  .inc-cell { background: #f5f5f0; border-radius: 16px; padding: 14px 10px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; text-align: center; }\n  .inc-cell img { width: 24px; height: 24px; object-fit: contain; display: block; }\n  .inc-label { font-size: 12px; font-weight: 700; color: #231f20; margin: 0; line-height: 1.3; }\n  @media (max-width: 480px) { .inc-grid { gap: 8px; } .inc-cell { padding: 10px 6px; } .inc-label { font-size: 11px; } }\n\n  \/* ===== FORMULARZ ===== *\/\n  .order-box { background: #0094d9; border-radius: 20px; padding: 24px 20px; }\n  .order-box-title { font-size: 17px; font-weight: 800; color: #fff; margin: 0 0 4px 0; text-align: center; }\n  .order-box-sub { font-size: 11px; color: rgba(255,255,255,0.75); text-align: center; margin: 0 0 16px 0; }\n\n  .order-price-block { background: rgba(255,255,255,0.12); border-radius: 14px; padding: 12px 14px; margin-bottom: 14px; text-align: center; }\n  .order-price-block-label { font-size: 10px; font-weight: 700; color: rgba(255,255,255,0.7); text-transform: uppercase; letter-spacing: 0.5px; margin: 0 0 4px 0; }\n  .order-price-block-row { display: flex; align-items: baseline; justify-content: center; gap: 8px; flex-wrap: wrap; }\n  .order-price-old { font-size: 13px; font-weight: 600; color: rgba(255,255,255,0.55); text-decoration: line-through; }\n  .order-price-current { font-size: 20px; font-weight: 900; color: #f9c200; }\n  .order-price-current span { font-size: 11px; font-weight: 500; color: rgba(255,255,255,0.75); }\n\n  .order-field { margin-bottom: 12px; }\n  .order-label { font-size: 12px; font-weight: 700; color: rgba(255,255,255,0.9); margin-bottom: 5px; display: block; }\n  .order-label span { font-size: 11px; font-weight: 400; opacity: 0.75; }\n  .order-select, .order-input { width: 100%; background: #fff; border: 2px solid transparent; border-radius: 12px; padding: 11px 14px; font-size: 13px; font-weight: 600; color: #231f20; outline: none; appearance: none; -webkit-appearance: none; cursor: pointer; transition: border-color 0.15s; }\n  .order-select-wrap { position: relative; }\n  .order-select-wrap::after { content: '▾'; position: absolute; right: 14px; top: 50%; transform: translateY(-50%); font-size: 14px; color: #888; pointer-events: none; }\n  .order-input::placeholder { color: #aaa; font-weight: 400; }\n\n  \/* przycisk-wyzwalacz otwierający modal wyboru (hotel \/ lotnisko) *\/\n  .order-choice-trigger { width: 100%; background: #fff; border: 2px solid transparent; border-radius: 12px; padding: 11px 14px; font-size: 13px; font-weight: 600; color: #231f20; display: flex; align-items: center; justify-content: space-between; gap: 8px; cursor: pointer; text-align: left; font-family: inherit; transition: border-color 0.15s; }\n  .order-choice-trigger:hover { border-color: #b3dff5; }\n  .order-choice-trigger-value { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n  .order-choice-trigger-value.placeholder { color: #aaa; font-weight: 400; }\n  .order-choice-trigger-arrow { color: #888; font-size: 13px; flex-shrink: 0; }\n\n  \/* ===== MODAL WYBORU (hotel \/ lotnisko) ===== *\/\n  .oc-overlay { position: fixed; inset: 0; background: rgba(35,31,32,0.55); display: none; align-items: flex-end; justify-content: center; z-index: 9999; padding: 0; }\n  .oc-overlay.open { display: flex; }\n  .oc-sheet { background: #fff; width: 100%; max-width: 480px; border-radius: 20px 20px 0 0; max-height: 85vh; display: flex; flex-direction: column; box-shadow: 0 -8px 30px rgba(0,0,0,0.15); animation: oc-slide-up 0.22s ease; }\n  @keyframes oc-slide-up { from { transform: translateY(24px); opacity: 0; } to { transform: translateY(0); opacity: 1; } }\n  @media (min-width: 640px) {\n    .oc-overlay { align-items: center; padding: 20px; }\n    .oc-sheet { border-radius: 20px; max-height: 80vh; }\n  }\n  .oc-header { display: flex; align-items: center; justify-content: space-between; padding: 18px 20px; border-bottom: 1px solid #f0f0ea; flex-shrink: 0; }\n  .oc-title { font-size: 16px; font-weight: 800; color: #231f20; }\n  .oc-close { width: 30px; height: 30px; border-radius: 50%; background: #f5f5f0; border: none; color: #231f20; font-size: 14px; font-weight: 700; cursor: pointer; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }\n  .oc-close:hover { background: #e8e8e3; }\n  .oc-body { padding: 4px 20px; overflow-y: auto; flex: 1; }\n  .oc-option { display: flex; align-items: center; gap: 12px; padding: 14px 0; border-bottom: 1px dashed #e5e5df; cursor: pointer; }\n  .oc-option:last-child { border-bottom: none; }\n  .oc-option-radio { width: 20px; height: 20px; border-radius: 50%; border: 2px solid #c8c8c0; flex-shrink: 0; display: flex; align-items: center; justify-content: center; transition: border-color 0.15s; }\n  .oc-option-radio::after { content: ''; width: 10px; height: 10px; border-radius: 50%; background: #0094d9; opacity: 0; transform: scale(0.4); transition: opacity 0.15s, transform 0.15s; }\n  .oc-option.selected .oc-option-radio { border-color: #0094d9; }\n  .oc-option.selected .oc-option-radio::after { opacity: 1; transform: scale(1); }\n  .oc-option-info { flex: 1; min-width: 0; }\n  .oc-option-label { font-size: 14px; font-weight: 700; color: #231f20; line-height: 1.3; }\n  .oc-option-note { font-size: 12px; color: #888; font-weight: 500; margin-top: 2px; }\n  .oc-option-price { font-size: 13px; font-weight: 800; color: #0094d9; white-space: nowrap; flex-shrink: 0; }\n  .oc-option-price.free { color: #3ab85a; }\n  .oc-footer { display: flex; align-items: center; justify-content: flex-end; gap: 12px; padding: 16px 20px; border-top: 1px solid #f0f0ea; flex-shrink: 0; }\n  .oc-footer-btn { background: #f9c200; border: none; border-radius: 14px; padding: 13px 26px; font-size: 14px; font-weight: 900; color: #231f20; cursor: pointer; transition: background 0.15s; }\n  .oc-footer-btn:hover { background: #f0b800; }\n  @media (max-width: 480px) {\n    .oc-footer-btn { width: 100%; padding: 14px; }\n    .oc-option-label { font-size: 13px; }\n    .oc-option-price { font-size: 12px; }\n  }\n\n  .order-select.of-error, .order-input.of-error, .order-choice-trigger.of-error { border-color: #ffb3b3 !important; }\n  .order-error-msg { font-size: 10px; color: #ffd8d8; font-weight: 700; margin: 4px 0 0 4px; display: none; }\n  .order-error-msg.of-visible { display: block; }\n\n  .order-social-proof { background: rgba(255,255,255,0.15); border-radius: 12px; padding: 9px 12px; margin-bottom: 14px; display: flex; align-items: center; gap: 8px; }\n  .order-social-proof-dot { width: 7px; height: 7px; background: #f9c200; border-radius: 50%; flex-shrink: 0; animation: pulse 1.5s infinite; }\n  @keyframes pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.4; } }\n  .order-social-proof-text { font-size: 11px; color: #fff; font-weight: 600; line-height: 1.4; }\n  .order-btn { width: 100%; background: #f9c200; border: none; border-radius: 14px; padding: 15px; font-size: 15px; font-weight: 900; color: #231f20; cursor: pointer; transition: background 0.15s, transform 0.1s; display: block; text-align: center; }\n  .order-btn:hover { background: #f0b800; transform: translateY(-1px); }\n  .order-btn:active { transform: translateY(0); }\n  .order-btn:disabled { opacity: 0.7; cursor: not-allowed; transform: none; }\n  .order-note { font-size: 11px; color: rgba(255,255,255,0.7); text-align: center; margin-top: 10px; line-height: 1.5; }\n\n  .order-payment-icons { display: flex; gap: 8px; justify-content: center; align-items: center; margin-top: 16px; flex-wrap: wrap; }\n  .order-payment-icons img { height: 20px; width: auto; object-fit: contain; }\n\n  .order-trust-badges { display: flex; gap: 8px; margin-top: 14px; }\n  .order-trust-badge { flex: 1; background: rgba(255,255,255,0.12); border-radius: 12px; padding: 10px 6px; display: flex; flex-direction: column; align-items: center; gap: 6px; text-align: center; }\n  .order-trust-badge img { width: 28px; height: 28px; object-fit: contain; }\n  .order-trust-badge span { font-size: 10px; color: #fff; font-weight: 700; line-height: 1.3; }\n\n  \/* ===== INFO ===== *\/\n  .info-section { width: 100%; box-sizing: border-box; margin: 0 auto 24px auto; }\n  .info-heading { font-size: 16px; font-weight: 700; color: #231f20; text-align: center; margin: 0 0 14px 0; }\n  .info-cards { display: flex; flex-direction: column; gap: 10px; }\n  .info-card { display: flex; align-items: flex-start; gap: 12px; border-radius: 12px; padding: 14px 16px; border-left: 4px solid; text-align: left; }\n  .info-card.orange { background: #fff8f0; border-color: #f0a030; }\n  .info-card.green { background: #f2fbf4; border-color: #3ab85a; }\n  .info-card-icon { width: 22px; height: 22px; object-fit: contain; flex-shrink: 0; margin-top: 1px; }\n  .info-card-text { font-size: 13px; color: #333; line-height: 1.5; margin: 0; }\n  .sec-divider { width: 100%; height: 3px; background: #f5f5f0; border-radius: 2px; margin: 20px 0; }\n  .sec-divider-mobile { display: none; }\n  @media (max-width: 900px) { .sec-divider-mobile { display: block; } }\n\u003c\/style\u003e\n\n\u003cdiv style=\"display: flex; justify-content: center; margin-bottom: 20px;\"\u003e\n  \u003cimg style=\"width: 100%; max-width: 700px; border-radius: 16px;\" alt=\"wietnam, hanoi, październik\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/wietnam-pazdziernik2.png?v=1785510079\"\u003e\n\u003c\/div\u003e\n\n\u003c!-- DATA PUBLIKACJI --\u003e\n\u003cp style=\"font-size: 12px; color: #999; margin: 0 0 16px 0;\"\u003e\u003cstrong style=\"color: #231f20;\"\u003eData publikacji oferty:\u003c\/strong\u003e 31.07.2026\u003c\/p\u003e\n\n\u003c!-- PROCES --\u003e\n\u003cdiv class=\"proc-section\"\u003e\n  \u003cp class=\"proc-title\"\u003eJak zamówić tę ofertę?\u003c\/p\u003e\n  \u003cdiv class=\"proc-grid\"\u003e\n    \u003cdiv class=\"proc-step\"\u003e\n      \u003cdiv class=\"proc-icon-wrap c1\"\u003e\n        \u003cimg alt=\"Krok 1 - wybierz opcje\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/wybierz-opcje.png?v=1783242958\" class=\"proc-icon-img\"\u003e \u003cspan class=\"proc-num-badge\"\u003e1\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cp class=\"proc-step-title\"\u003eWybierz opcje i kup\u003c\/p\u003e\n      \u003cp class=\"proc-step-desc\"\u003eZaznacz liczbę osób oraz hotel i lotnisko wylotu, jeśli są do wyboru inne. Płacisz online w 2 minuty.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"proc-step\"\u003e\n      \u003cdiv class=\"proc-icon-wrap c2\"\u003e\n        \u003cimg alt=\"Krok 2 - odbierz linki na maila\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/odbierz-linki.png?v=1783242958\" class=\"proc-icon-img\"\u003e \u003cspan class=\"proc-num-badge\"\u003e2\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cp class=\"proc-step-title\"\u003eOdbierz linki na maila\u003c\/p\u003e\n      \u003cp class=\"proc-step-desc\"\u003eGotowe linki do rezerwacji dostaniesz od razu po zakupie — bez czekania.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"proc-step\"\u003e\n      \u003cdiv class=\"proc-icon-wrap c3\"\u003e\n        \u003cimg alt=\"Krok 3 - zarezerwuj jednym kliknięciem\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/zarezerwuj.png?v=1783242958\" class=\"proc-icon-img\"\u003e \u003cspan class=\"proc-num-badge\"\u003e3\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cp class=\"proc-step-title\"\u003eZarezerwuj jednym kliknięciem\u003c\/p\u003e\n      \u003cp class=\"proc-step-desc\"\u003eLot i hotel rezerwujesz sam w łatwy sposób bezpośrednio u dostawcy — zero ukrytych opłat.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"proc-step\"\u003e\n      \u003cdiv class=\"proc-icon-wrap c4\"\u003e\n        \u003cimg alt=\"Krok 4 - gwarancja ceny\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/pelne-wsparcie.png?v=1783242958\" class=\"proc-icon-img\"\u003e \u003cspan class=\"proc-num-badge\"\u003e4\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cp class=\"proc-step-title\"\u003eMamy Cię na każdym kroku\u003c\/p\u003e\n      \u003cp class=\"proc-step-desc\"\u003eGwarancja ceny — wzrost o 100 zł = rabat 100% na kolejną ofertę.\u003c\/p\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"page-layout\"\u003e\n  \u003c!-- LEWA KOLUMNA - TREŚĆ --\u003e\n  \u003cdiv class=\"page-main\"\u003e\n    \u003cdiv class=\"trip-summary\"\u003e\n      \u003cdiv class=\"trip-summary-header\"\u003e\n        \u003cspan class=\"trip-summary-name\"\u003eWietnam – Hanoi\u003c\/span\u003e \u003cspan class=\"trip-summary-price\"\u003e3 649 zł \u003cspan\u003e\/ os.\u003c\/span\u003e\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"trip-pills\"\u003e\n        \u003cdiv class=\"trip-pill\"\u003e\n          \u003cimg alt=\"Kiedy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/kiedy.png?v=1783243698\" class=\"trip-pill-icon-img\"\u003e\n          \u003cdiv\u003e\n            \u003cspan class=\"trip-pill-label\"\u003eKiedy?\u003c\/span\u003e \u003cspan class=\"trip-pill-value\"\u003e02-14.10.2026\u003c\/span\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"trip-pill\"\u003e\n          \u003cimg alt=\"Na ile\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/na_ile.png?v=1783243698\" class=\"trip-pill-icon-img\"\u003e\n          \u003cdiv\u003e\n            \u003cspan class=\"trip-pill-label\"\u003eNa ile?\u003c\/span\u003e \u003cspan class=\"trip-pill-value\"\u003e13 dni\u003c\/span\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"trip-pill\"\u003e\n          \u003cimg alt=\"Cena\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/cena.png?v=1783243698\" class=\"trip-pill-icon-img\"\u003e\n          \u003cdiv\u003e\n            \u003cspan class=\"trip-pill-label\"\u003eCena\u003c\/span\u003e \u003cspan class=\"trip-pill-value\"\u003eod 3 649 zł \/ os.\u003c\/span\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"offer-desc\"\u003e\n        \u003cp\u003eCześć! Wietnam na 13 dni za jedyne \u003cstrong\u003e3 649 zł \/ os. !\u003c\/strong\u003e — szybkie loty + hotel + śniadania + transfery lotniskowe. W tej cenie masz wszystko, czego potrzebujesz:\u003c\/p\u003e\n        \u003cp class=\"offer-desc-title\"\u003e\u003cimg alt=\"Przelot\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/ikonka-samolot2.png?v=1779196620\" class=\"offer-desc-icon\"\u003e Przelot:\u003c\/p\u003e\n        \u003cul\u003e\n          \u003cli\u003eTrasa: Warszawa → Hanoi → Warszawa\u003c\/li\u003e\n          \u003cli\u003eCzas lotu tam: 17h 25m | powrót: 22h 30m\u003c\/li\u003e\n          \u003cli\u003ePrzesiadki (łącznie): \u003cstrong\u003e2\u003c\/strong\u003e (z Polski – \u003cstrong\u003e1\u003c\/strong\u003e | z Hanoi – \u003cstrong\u003e1\u003c\/strong\u003e)\u003c\/li\u003e\n        \u003c\/ul\u003e\n        \u003cp class=\"offer-desc-title\"\u003e\u003cimg alt=\"Nocleg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/ikonka-zakwaterowanie.png?v=1779196620\" class=\"offer-desc-icon\"\u003e Nocleg:\u003c\/p\u003e\n        \u003cul\u003e\n          \u003cli\u003e12 nocy w Elegance Premium Hotel \u003cspan style=\"color: rgb(128, 128, 128);\"\u003e(ocena 8.4\/10 | 1498 opinie)\u003c\/span\u003e\n\u003c\/li\u003e\n          \u003cli\u003eŚwietna lokalizacja\u003c\/li\u003e\n          \u003cli\u003eŚniadania w cenie\u003c\/li\u003e\n        \u003c\/ul\u003e\n        \u003cp class=\"offer-desc-title\"\u003e\u003cimg alt=\"Transfer\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/ikonka-bus.png?v=1779196620\" class=\"offer-desc-icon\"\u003e Transfer:\u003c\/p\u003e\n        \u003cul\u003e\n          \u003cli\u003eTransfer z lotniska i na lotnisko w cenie\u003c\/li\u003e\n        \u003c\/ul\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"sec-divider\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\n    \u003cdiv class=\"inc-section\"\u003e\n      \u003cp class=\"inc-heading\"\u003eCo zawiera oferta?\u003c\/p\u003e\n      \u003cdiv class=\"inc-grid\"\u003e\n        \u003cdiv class=\"inc-cell\"\u003e\n          \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/5_4b2a62a1-8bbb-45d7-85a6-efd8bd166705.png?v=1777675519\" alt=\"Loty\"\u003e\n          \u003cp class=\"inc-label\"\u003eLoty\u003c\/p\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"inc-cell\"\u003e\n          \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/6_8a0baa37-c05c-4ba3-b3ed-15fbaf7ad870.png?v=1777675519\" alt=\"Apartament\"\u003e\n          \u003cp class=\"inc-label\"\u003eHotel\u003c\/p\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"inc-cell\"\u003e\n          \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/7_ea90cba9-acef-4662-9279-f713557c9cb9.png?v=1777675519\" alt=\"Transfery\"\u003e\n          \u003cp class=\"inc-label\"\u003eTransfery lotniskowe\u003c\/p\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"inc-cell\"\u003e\n          \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/8_e1ca8202-5aca-401c-b347-8b0f6b0f71c3.png?v=1777675519\" alt=\"Wyżywienie\"\u003e\n          \u003cp class=\"inc-label\"\u003eŚniadania\u003c\/p\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"inc-cell\"\u003e\n          \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/9.png?v=1777675519\" alt=\"Oferta PDF\"\u003e\n          \u003cp class=\"inc-label\"\u003eOferta PDF\u003c\/p\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"inc-cell\"\u003e\n          \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/10_d5ed244b-dfb2-4b45-8dc2-a12deb530ae4.png?v=1777675520\" alt=\"Wsparcie\"\u003e\n          \u003cp class=\"inc-label\"\u003eWsparcie\u003c\/p\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003c!-- \/page-main --\u003e\n\n  \u003cdiv class=\"sec-divider sec-divider-mobile\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\n  \u003c!-- PRAWA KOLUMNA - STICKY FORMULARZ --\u003e\n  \u003cdiv class=\"page-sidebar\"\u003e\n    \u003cdiv class=\"order-box\"\u003e\n      \u003cp class=\"order-box-title\"\u003eTwoje zamówienie:\u003c\/p\u003e\n      \u003cp class=\"order-box-sub\"\u003eWybierz opcje, żeby zobaczyć cenę\u003c\/p\u003e\n\n      \u003cdiv class=\"order-field\"\u003e\n        \u003clabel class=\"order-label\" for=\"sel-pax\"\u003eLiczba osób\u003c\/label\u003e\n        \u003cdiv class=\"order-select-wrap\"\u003e\n          \u003cselect class=\"order-select\" id=\"sel-pax\"\u003e\n            \u003coption value=\"\"\u003eWybierz opcję\u003c\/option\u003e\n            \u003coption value=\"1\"\u003e1 osoba\u003c\/option\u003e\n            \u003coption value=\"2\"\u003e2 osoby\u003c\/option\u003e\n            \u003coption value=\"3\"\u003e3 osoby\u003c\/option\u003e\n            \u003coption value=\"4\"\u003e4 osoby\u003c\/option\u003e\n            \u003coption value=\"5\"\u003e5 osób\u003c\/option\u003e\n            \u003coption value=\"6\"\u003e6 osób\u003c\/option\u003e\n            \u003coption value=\"7+\"\u003e7+ osób\u003c\/option\u003e\n          \u003c\/select\u003e\n        \u003c\/div\u003e\n        \u003cp class=\"order-error-msg\" id=\"sel-pax-err\"\u003eWybierz liczbę osób\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"order-field\"\u003e\n        \u003clabel class=\"order-label\" for=\"trigger-hotel\"\u003eHotel \u003cspan\u003e(jeśli proponowanych jest kilka)\u003c\/span\u003e\u003c\/label\u003e\n        \u003cbutton type=\"button\" class=\"order-choice-trigger\" id=\"trigger-hotel\"\u003e\n          \u003cspan class=\"order-choice-trigger-value placeholder\" id=\"trigger-hotel-value\"\u003eWybierz opcję\u003c\/span\u003e \u003cspan class=\"order-choice-trigger-arrow\"\u003e›\u003c\/span\u003e\n        \u003c\/button\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"order-field\"\u003e\n        \u003clabel class=\"order-label\" for=\"trigger-airport\"\u003eLotnisko wylotu \u003cspan\u003e(jeśli do wyboru są inne)\u003c\/span\u003e\u003c\/label\u003e\n        \u003cbutton type=\"button\" class=\"order-choice-trigger\" id=\"trigger-airport\"\u003e\n          \u003cspan class=\"order-choice-trigger-value placeholder\" id=\"trigger-airport-value\"\u003eWybierz opcję\u003c\/span\u003e \u003cspan class=\"order-choice-trigger-arrow\"\u003e›\u003c\/span\u003e\n        \u003c\/button\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"order-field\"\u003e\n        \u003clabel class=\"order-label\" for=\"inp-date\"\u003eTermin \u003cspan\u003e(jeśli dostępnych jest kilka)\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput class=\"order-input\" type=\"text\" id=\"inp-date\" placeholder=\"Wpisz termin\"\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"order-social-proof\"\u003e\n        \u003cspan class=\"order-social-proof-dot\"\u003e\u003c\/span\u003e \u003cspan class=\"order-social-proof-text\" id=\"social-proof-text\"\u003eJeszcze aktualne!\u003c\/span\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"order-price-block\"\u003e\n        \u003cp class=\"order-price-block-label\"\u003eCena za ofertę\u003c\/p\u003e\n        \u003cdiv class=\"order-price-block-row\"\u003e\n          \u003cspan class=\"order-price-old\"\u003e249 zł\u003c\/span\u003e \u003cspan class=\"order-price-current\"\u003e99 zł \u003cspan\u003e\/ os.\u003c\/span\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003cbutton id=\"checkout-btn\" class=\"order-btn\" type=\"button\"\u003eDodaj do koszyka\u003c\/button\u003e\n      \u003cp class=\"order-note\"\u003ePo zakupie od razu na maila dostaniesz linki do rezerwacji.\u003c\/p\u003e\n\n      \u003cdiv class=\"order-payment-icons\"\u003e\n        \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/visa.png?v=1778850122\" alt=\"Metoda płatności 1\"\u003e \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/mastercard.png?v=1778850123\" alt=\"Metoda płatności 2\"\u003e \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/applepay.png?v=1778850122\" alt=\"Metoda płatności 3\"\u003e \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/blik.png?v=1778850123\" alt=\"Metoda płatności 4\"\u003e \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/klarna.png?v=1778850119\" alt=\"Metoda płatności 5\"\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"order-trust-badges\"\u003e\n        \u003cdiv class=\"order-trust-badge\"\u003e\n          \u003cimg alt=\"Gwarancja oferty\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/gwarancja-oferty.png?v=1783244254\"\u003e \u003cspan\u003eGwarancja oferty\u003c\/span\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"order-trust-badge\"\u003e\n          \u003cimg alt=\"Bezpieczna platnosc\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/bezpieczna-platnosc.png?v=1783244254\"\u003e \u003cspan\u003eBezpieczna płatność\u003c\/span\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"order-trust-badge\"\u003e\n          \u003cimg alt=\"14 dni na zwrot\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/14-dni-zwrot.png?v=1783244254\"\u003e \u003cspan\u003e14 dni na zwrot\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003c!-- \/page-sidebar --\u003e\n\u003c\/div\u003e\n\u003c!-- \/page-layout --\u003e\n\n\u003c!-- MODAL WYBORU (hotel \/ lotnisko) --\u003e\n\u003cdiv class=\"oc-overlay\" id=\"oc-overlay\"\u003e\n  \u003cdiv class=\"oc-sheet\"\u003e\n    \u003cdiv class=\"oc-header\"\u003e\n      \u003cspan class=\"oc-title\" id=\"oc-title\"\u003eWybierz opcję\u003c\/span\u003e\n      \u003cbutton type=\"button\" class=\"oc-close\" id=\"oc-close\"\u003e✕\u003c\/button\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"oc-body\" id=\"oc-body\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"oc-footer\"\u003e\n      \u003cbutton type=\"button\" class=\"oc-footer-btn\" id=\"oc-footer-btn\"\u003eWybierz\u003c\/button\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"sec-divider\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\n\u003c!-- DODATKOWE INFORMACJE --\u003e\n\u003csection class=\"info-section\"\u003e\n  \u003cp class=\"info-heading\"\u003eDodatkowe informacje\u003c\/p\u003e\n  \u003cdiv class=\"info-cards\"\u003e\n    \u003cdiv class=\"info-card orange\"\u003e\n      \u003cimg class=\"info-card-icon\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/5_e5d9bc28-d01a-476f-a0b1-3939d3ed967f.png?v=1777721992\" alt=\"\"\u003e\n      \u003cp class=\"info-card-text\"\u003eCena obowiązuje przy rezerwacji dla 2 osób. Przy 1 osobie cena może być wyższa, przy większej grupie — niższa.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"info-card orange\"\u003e\n      \u003cimg class=\"info-card-icon\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/Tekst_akapitu_7_3e027ea0-be8c-42b6-a6de-f5a44c22285f.png?v=1777722146\" alt=\"\"\u003e\n      \u003cp class=\"info-card-text\"\u003eZalecamy rezerwację od razu po zakupie oferty — ceny lotów i hoteli zmieniają się dynamicznie.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"info-card green\"\u003e\n      \u003cimg class=\"info-card-icon\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/7_f52c4585-fd0d-416c-8172-4e27b39e7277.png?v=1777721992\" alt=\"\"\u003e\n      \u003cp class=\"info-card-text\"\u003eOferta nie zawiera ukrytych opłat. Cena wyjazdu jest ceną końcową przy rezerwacji przez nasze linki.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"info-card green\"\u003e\n      \u003cimg class=\"info-card-icon\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/8_0425b786-93af-476c-af30-4621a81e904f.png?v=1779196621\" alt=\"\"\u003e\n      \u003cp class=\"info-card-text\"\u003eRezerwujesz bezpośrednio u dostawcy (linie lotnicze, booking.com itp.) — Twoje pieniądze są bezpieczne.\u003c\/p\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003c!-- SKRYPT: modal wyboru + pobieranie variantId przez AJAX (bez Liquid) + koszyk --\u003e\n\u003cscript\u003e\n(function(){\n  \/\/ ===== DANE OPCJI DLA MODALA (hotel \/ lotnisko) =====\n  \/\/ Aby dodać kolejną opcję, skopiuj linijkę wewnątrz \"options\" i zmień label \/ modifier.\n  \/\/ \"modifier\" to dopłata w zł za osobę (0 = w cenie bazowej).\n  var CHOICE_DATA = {\n    hotel: {\n      title: 'Wybierz hotel',\n      options: [\n        { label: 'Elegance Premium Hotel', note: 'ocena 8.4\/10 | 1498 opinii', modifier: 0 }\n      ]\n    },\n    airport: {\n      title: 'Wybierz lotnisko wylotu',\n      options: [\n        { label: 'Warszawa (WAW)', note: '', modifier: 0 }\n      ]\n    }\n  };\n\n  var selection = { hotel: null, airport: null };\n\n  var overlay    = document.getElementById('oc-overlay');\n  var sheetTitle = document.getElementById('oc-title');\n  var body       = document.getElementById('oc-body');\n  var confirmBtn = document.getElementById('oc-footer-btn');\n  var closeBtn   = document.getElementById('oc-close');\n\n  var currentKey   = null;\n  var pendingIndex = null;\n\n  function fmtModifier(n){\n    if (!n) return 'w cenie';\n    return (n \u003e 0 ? '+' : '') + n.toLocaleString('pl-PL') + ' zł \/ os.';\n  }\n\n  function renderOptions(){\n    var data = CHOICE_DATA[currentKey];\n    body.innerHTML = '';\n    data.options.forEach(function(opt, idx){\n      var row = document.createElement('div');\n      row.className = 'oc-option' + (pendingIndex === idx ? ' selected' : '');\n      row.innerHTML =\n        '\u003cdiv class=\"oc-option-radio\"\u003e\u003c\/div\u003e' +\n        '\u003cdiv class=\"oc-option-info\"\u003e' +\n          '\u003cdiv class=\"oc-option-label\"\u003e' + opt.label + '\u003c\/div\u003e' +\n          (opt.note ? '\u003cdiv class=\"oc-option-note\"\u003e' + opt.note + '\u003c\/div\u003e' : '') +\n        '\u003c\/div\u003e' +\n        '\u003cdiv class=\"oc-option-price' + (opt.modifier === 0 ? ' free' : '') + '\"\u003e' + fmtModifier(opt.modifier) + '\u003c\/div\u003e';\n      row.addEventListener('click', function(){\n        pendingIndex = idx;\n        renderOptions();\n      });\n      body.appendChild(row);\n    });\n  }\n\n  function openModal(key){\n    currentKey = key;\n    pendingIndex = selection[key] ? selection[key].index : 0;\n    sheetTitle.textContent = CHOICE_DATA[key].title;\n    renderOptions();\n    overlay.classList.add('open');\n    document.body.style.overflow = 'hidden';\n  }\n\n  function closeModal(){\n    overlay.classList.remove('open');\n    document.body.style.overflow = '';\n  }\n\n  document.getElementById('trigger-hotel').addEventListener('click', function(){ openModal('hotel'); });\n  document.getElementById('trigger-airport').addEventListener('click', function(){ openModal('airport'); });\n  closeBtn.addEventListener('click', closeModal);\n  overlay.addEventListener('click', function(e){ if (e.target === overlay) closeModal(); });\n\n  confirmBtn.addEventListener('click', function(){\n    if (pendingIndex === null) { closeModal(); return; }\n    var opt = CHOICE_DATA[currentKey].options[pendingIndex];\n    selection[currentKey] = { index: pendingIndex, label: opt.label, modifier: opt.modifier };\n    var valueEl = document.getElementById('trigger-' + currentKey + '-value');\n    valueEl.textContent = opt.label;\n    valueEl.classList.remove('placeholder');\n    document.getElementById('trigger-' + currentKey).classList.remove('of-error');\n    closeModal();\n  });\n\n  \/\/ ===== FORMULARZ: liczba osób, termin, koszyk =====\n  var pax     = document.getElementById('sel-pax');\n  var paxErr  = document.getElementById('sel-pax-err');\n  var date    = document.getElementById('inp-date');\n  var btn     = document.getElementById('checkout-btn');\n  var variantId = null;\n\n  \/\/ Pobierz dane produktu bieżącej strony przez AJAX (działa niezależnie od Liquid w opisie)\n  function loadVariantId() {\n    return fetch(window.location.pathname + '.js')\n      .then(function(r){ if (!r.ok) throw new Error(); return r.json(); })\n      .then(function(product){\n        if (product \u0026\u0026 product.variants \u0026\u0026 product.variants.length) {\n          variantId = product.variants[0].id;\n        }\n      })\n      .catch(function(){ \/* zignoruj, spróbujemy ponownie przy kliknięciu *\/ });\n  }\n  loadVariantId();\n\n  pax.addEventListener('change', function(){\n    if (pax.value) {\n      pax.classList.remove('of-error');\n      paxErr.classList.remove('of-visible');\n    }\n  });\n\n  function addToCart(){\n    btn.dataset.busy = '1';\n    btn.disabled = true;\n    var originalText = btn.textContent;\n    btn.textContent = 'Dodawanie...';\n\n    var props = { 'Liczba osób': pax.value };\n    if (selection.hotel) props['Hotel'] = selection.hotel.label;\n    if (selection.airport) props['Lotnisko'] = selection.airport.label;\n    if (date.value.trim()) props['Termin'] = date.value.trim();\n\n    fetch('\/cart\/add.js', {\n      method: 'POST',\n      headers: { 'Content-Type': 'application\/json', 'Accept': 'application\/json' },\n      body: JSON.stringify({ items: [{ id: parseInt(variantId, 10), quantity: 1, properties: props }] })\n    })\n    .then(function(r) { if (!r.ok) throw new Error(); return r.json(); })\n    .then(function() { window.location.href = '\/checkout'; })\n    .catch(function() {\n      btn.disabled = false;\n      delete btn.dataset.busy;\n      btn.textContent = originalText;\n      alert('Wystąpił błąd. Spróbuj ponownie.');\n    });\n  }\n\n  btn.addEventListener('click', function(){\n    if (!pax.value) {\n      pax.classList.add('of-error');\n      paxErr.classList.add('of-visible');\n      pax.focus();\n      return;\n    }\n    pax.classList.remove('of-error');\n    paxErr.classList.remove('of-visible');\n\n    if (btn.dataset.busy) return;\n\n    if (variantId) {\n      addToCart();\n    } else {\n      loadVariantId().then(function(){\n        if (variantId) {\n          addToCart();\n        } else {\n          alert('Nie można znaleźć produktu. Odśwież stronę i spróbuj ponownie.');\n        }\n      });\n    }\n  });\n})();\n\u003c\/script\u003e","brand":"taniwylot","offers":[{"title":"Default Title","offer_id":54857185853782,"sku":null,"price":99.0,"currency_code":"PLN","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0973\/4959\/9574\/files\/wietnam-pazdziernik2.png?v=1785510079","url":"https:\/\/www.taniwylot.pl\/products\/wietnam-05","provider":"taniwylot","version":"1.0","type":"link"}