{"id":931,"date":"2026-04-29T15:07:21","date_gmt":"2026-04-29T15:07:21","guid":{"rendered":"https:\/\/repulos.com\/?page_id=931"},"modified":"2026-07-19T14:10:29","modified_gmt":"2026-07-19T14:10:29","slug":"rezerwacja-warszawa","status":"publish","type":"page","link":"https:\/\/repulos.com\/pl\/rezerwacja-warszawa\/","title":{"rendered":"SALON"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"931\" class=\"elementor elementor-931\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6aa1864e e-flex e-con-boxed e-con e-parent\" data-id=\"6aa1864e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1dd3a0f4 elementor-widget elementor-widget-html\" data-id=\"1dd3a0f4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"pl\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>REPULO'S<\/title>\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Jost:wght@300;400;500&display=swap\" rel=\"stylesheet\">\n<style>\n:root{\n  --rep-bg:#FFFFFF;\n  --rep-fg:#000000;\n  --rep-muted:#7A7A7A;\n  --rep-line:#000000;\n  --rep-line-soft:#E5E5E5;\n  --rep-font:'Jost', system-ui, -apple-system, BlinkMacSystemFont, sans-serif;\n  --rep-weight-light:300;\n  --rep-weight-medium:500;\n  --rep-h-desktop:96px;\n  --rep-h-mobile:72px;\n  --rep-tracking:0.18em;\n  --rep-tracking-tight:0.08em;\n  --rep-ease:cubic-bezier(.22,.61,.36,1);\n}\n*,*::before,*::after{box-sizing:border-box}\nhtml,body{margin:0;padding:0;background:var(--rep-bg);color:var(--rep-fg)}\n.repulos-header,\n.repulos-header *,\n.repulos-mobile,\n.repulos-mobile *{\n  font-family:var(--rep-font);\n  font-weight:var(--rep-weight-light);\n  -webkit-font-smoothing:antialiased;\n  -moz-osx-font-smoothing:grayscale;\n}\n.repulos-header{position:sticky; top:0; z-index:1000; width:100%; background:var(--rep-bg)}\n.repulos-header__container{\n  display:flex; align-items:center; justify-content:space-between;\n  height:var(--rep-h-desktop); max-width:1440px; margin:0 auto;\n  padding:0 40px; gap:24px;\n}\n.repulos-header__logo{display:inline-flex; align-items:center; text-decoration:none; color:var(--rep-fg); flex-shrink:0; line-height:1}\n.repulos-header__logo img{height:48px; width:auto; display:block}\n.repulos-header__nav{display:flex; flex:1 1 auto; justify-content:center}\n.repulos-header__nav-list{display:flex; list-style:none; margin:0; padding:0; gap:40px}\n.repulos-header__nav-link{\n  position:relative; display:inline-block; text-decoration:none; color:var(--rep-fg);\n  font-size:13px; font-weight:var(--rep-weight-light); letter-spacing:var(--rep-tracking);\n  text-transform:uppercase; padding:10px 0; white-space:nowrap;\n}\n.repulos-header__nav-link::after{\n  content:\"\"; position:absolute; left:0; right:0; bottom:4px; height:1px;\n  background:var(--rep-fg); transform:scaleX(0); transform-origin:right center;\n  transition:transform .35s var(--rep-ease);\n}\n.repulos-header__nav-link:hover::after,\n.repulos-header__nav-link:focus-visible::after,\n.repulos-header__nav-link[aria-current=\"page\"]::after{\n  transform:scaleX(1) !important; transform-origin:left center;\n}\n.repulos-header__nav-link[aria-current=\"page\"]{font-weight:var(--rep-weight-medium) !important}\n.repulos-header__nav-link:focus-visible{outline:none}\n.repulos-header__actions{display:flex; align-items:center; gap:24px; flex-shrink:0}\n\/* LANG + CURRENCY SWITCHER \u2014 shared styles *\/\n.repulos-lang,\n.repulos-currency{position:relative}\n.repulos-lang__trigger,\n.repulos-currency__trigger{\n  display:inline-flex; align-items:center; gap:8px; padding:10px 4px;\n  background:transparent; border:0; cursor:pointer; color:var(--rep-fg);\n  font-family:var(--rep-font); font-size:13px; font-weight:var(--rep-weight-light);\n  letter-spacing:var(--rep-tracking); text-transform:uppercase; line-height:1;\n}\n.repulos-lang__trigger:focus-visible,\n.repulos-currency__trigger:focus-visible{outline:none}\n.repulos-lang__chevron,\n.repulos-currency__chevron{width:10px; height:10px; transition:transform .25s var(--rep-ease)}\n.repulos-lang[data-open=\"true\"] .repulos-lang__chevron,\n.repulos-currency[data-open=\"true\"] .repulos-currency__chevron{transform:rotate(180deg)}\n.repulos-lang__menu,\n.repulos-currency__menu{\n  position:absolute; top:calc(100% + 8px); right:0;\n  margin:0; padding:0; list-style:none; background:transparent;\n  opacity:0; visibility:hidden; transform:translateY(-6px);\n  transition:opacity .2s var(--rep-ease), transform .2s var(--rep-ease), visibility .2s;\n  z-index:1001;\n}\n.repulos-lang[data-open=\"true\"] .repulos-lang__menu,\n.repulos-currency[data-open=\"true\"] .repulos-currency__menu{\n  opacity:1; visibility:visible; transform:translateY(0);\n}\n\/* No border-top \u2014 no lines between items *\/\n.repulos-lang__item,\n.repulos-currency__item{border:0}\n.repulos-lang__link,\n.repulos-currency__link{\n  display:flex; align-items:center;\n  padding:10px 4px; text-decoration:none; color:var(--rep-fg);\n  font-size:13px; font-weight:var(--rep-weight-light);\n  letter-spacing:var(--rep-tracking-tight); text-transform:uppercase;\n  transition:font-weight .15s var(--rep-ease); cursor:pointer;\n}\n.repulos-lang__link:hover,\n.repulos-lang__link:focus-visible,\n.repulos-currency__link:hover,\n.repulos-currency__link:focus-visible{font-weight:var(--rep-weight-medium); outline:none}\n.repulos-lang__link[aria-current=\"true\"],\n.repulos-currency__link[aria-current=\"true\"]{font-weight:var(--rep-weight-medium)}\n\/* CART *\/\n.repulos-header__cart{\n  position:relative; display:inline-flex; align-items:center; justify-content:center;\n  width:40px; height:40px; text-decoration:none; color:var(--rep-fg);\n  background:transparent; transition:opacity .25s var(--rep-ease); cursor:pointer;\n}\n.repulos-header__cart:hover,\n.repulos-header__cart:focus-visible{opacity:.65; outline:none}\n.repulos-header__cart svg{width:30px; height:30px; display:block}\n.repulos-header__cart-count{\n  position:absolute; top:4px; right:2px; min-width:18px; height:18px;\n  padding:0 5px; background:var(--rep-fg); color:var(--rep-bg);\n  border:1px solid var(--rep-bg); border-radius:999px;\n  font-size:10px; font-weight:var(--rep-weight-medium);\n  line-height:16px; text-align:center; letter-spacing:0;\n}\n.repulos-header__cart-count[hidden]{display:none}\n\/* HAMBURGER *\/\n.repulos-header__toggle{\n  display:none; width:36px; height:36px; padding:0; border:0;\n  background:transparent; cursor:pointer; align-items:center; justify-content:center;\n}\n.repulos-header__toggle-icon{display:flex; flex-direction:column; gap:5px; width:20px}\n.repulos-header__toggle-icon span{display:block; height:1px; background:var(--rep-fg); transition:transform .3s var(--rep-ease), opacity .2s var(--rep-ease)}\n.repulos-header__toggle[aria-expanded=\"true\"] .repulos-header__toggle-icon span:nth-child(1){transform:translateY(6px) rotate(45deg)}\n.repulos-header__toggle[aria-expanded=\"true\"] .repulos-header__toggle-icon span:nth-child(2){opacity:0}\n.repulos-header__toggle[aria-expanded=\"true\"] .repulos-header__toggle-icon span:nth-child(3){transform:translateY(-6px) rotate(-45deg)}\n\/* MOBILE PANEL *\/\n.repulos-mobile{\n  position:fixed; top:var(--rep-h-mobile); left:0; right:0; bottom:0;\n  background:var(--rep-bg); transform:translateX(100%);\n  transition:transform .4s var(--rep-ease); overflow-y:auto; z-index:998;\n  padding:24px 24px 14px; display:flex; flex-direction:column; gap:40px;\n  visibility:hidden;\n}\n.repulos-mobile[aria-hidden=\"false\"]{transform:translateX(0); visibility:visible}\n.repulos-mobile__nav-list{list-style:none; margin:0; padding:0}\n.repulos-mobile__nav-item{border-bottom:1px solid var(--rep-line)}\n.repulos-mobile__nav-item:first-child{border-top:1px solid var(--rep-line)}\n.repulos-mobile__nav-link{\n  display:flex; align-items:center; justify-content:space-between;\n  padding:20px 0; text-decoration:none; color:var(--rep-fg);\n  font-size:15px; font-weight:var(--rep-weight-light);\n  letter-spacing:var(--rep-tracking); text-transform:uppercase;\n}\n.repulos-mobile__nav-link[aria-current=\"page\"]{font-weight:var(--rep-weight-medium) !important; text-decoration:underline; text-underline-offset:6px}\nbody.repulos-menu-open{overflow:hidden}\n\/* RESPONSIVE *\/\n@media (max-width:1024px){\n  .repulos-header__nav{display:none}\n  .repulos-header__container{height:var(--rep-h-mobile); padding:0 16px; gap:10px}\n  .repulos-header__toggle{display:inline-flex}\n  .repulos-header__logo img{height:36px}\n  .repulos-header__actions{gap:8px}\n  .repulos-header__cart{width:36px; height:36px}\n  .repulos-header__cart svg{width:26px; height:26px}\n  .repulos-lang__menu,\n  .repulos-currency__menu{right:0}\n  .repulos-lang__trigger,\n  .repulos-currency__trigger{padding:10px 2px; gap:6px; font-size:12px; letter-spacing:0.12em}\n}\n@media (min-width:1025px){.repulos-mobile{display:none}}\n@media (max-width:380px){\n  .repulos-header__container{padding:0 10px; gap:6px}\n  .repulos-header__actions{gap:6px}\n  .repulos-header__logo img{height:32px}\n  .repulos-lang__trigger,\n  .repulos-currency__trigger{padding:10px 2px; font-size:11px; letter-spacing:0.06em}\n  .repulos-lang__chevron,\n  .repulos-currency__chevron{width:8px; height:8px}\n}\n\/* FIX: empty space between header and hero on mobile *\/\n@media (max-width:1024px){\n  .repulos-header ~ .elementor-section:first-of-type,\n  .repulos-header ~ section:first-of-type,\n  .elementor-section:has(.repulos-header){\n    margin-top:0 !important; padding-top:0 !important; margin-bottom:0 !important;\n  }\n  .elementor > .elementor-section:first-of-type,\n  .elementor > .e-con:first-of-type{padding-top:0 !important; margin-top:0 !important}\n}\n\/* DEBUG PANEL *\/\n.repulos-debug{\n  position:fixed; top:120px; left:16px; z-index:99999;\n  background:#FFFCE8; border:2px solid #000; padding:14px 18px;\n  font-family:'Courier New', monospace; font-size:12px; line-height:1.6;\n  max-width:520px; max-height:70vh; overflow-y:auto;\n  box-shadow:0 8px 32px rgba(0,0,0,.25);\n}\n.repulos-debug h4{margin:0 0 8px; font-family:'Courier New', monospace; font-size:13px; text-transform:uppercase; letter-spacing:.05em}\n.repulos-debug code{background:#000; color:#fff; padding:1px 5px; font-family:'Courier New', monospace; font-size:11px}\n.repulos-debug .active{color:#0a7d00; font-weight:bold}\n.repulos-debug .inactive{color:#999}\n.repulos-debug__close{position:absolute; top:6px; right:8px; border:0; background:transparent; cursor:pointer; font-size:18px; line-height:1}\n@media (prefers-reduced-motion:reduce){*{transition:none !important; animation:none !important}}\n<\/style>\n<\/head>\n<body>\n<header class=\"repulos-header\" role=\"banner\">\n  <div class=\"repulos-header__container\">\n    <a href=\"\/pl\/\" class=\"repulos-header__logo\" aria-label=\"REPULO'S, strona g\u0142\u00f3wna\">\n      <img src=\"\/wp-content\/uploads\/2026\/04\/1-2.png\"\n           alt=\"REPULO'S\" width=\"240\" height=\"48\" loading=\"eager\" decoding=\"async\">\n    <\/a>\n    <nav class=\"repulos-header__nav\" aria-label=\"Main menu\">\n      <ul class=\"repulos-header__nav-list\">\n        <li><a href=\"\/pl\/\" class=\"repulos-header__nav-link\">Strona g\u0142\u00f3wna<\/a><\/li>\n        <li><a href=\"\/pl\/sklep\/\" class=\"repulos-header__nav-link\"\n               data-match=\"\/pl\/product-category\/,\/pl\/kategoria-produktu\/,\/pl\/product-tag\/\">Sklep<\/a><\/li>\n        <li><a href=\"\/pl\/o-marce\/\" class=\"repulos-header__nav-link\">O marce<\/a><\/li>\n        <li><a href=\"\/pl\/blog\/\" class=\"repulos-header__nav-link\"\n               data-match=\"\/pl\/category\/,\/pl\/kategoria\/,\/pl\/tag\/\">Inspiracje<\/a><\/li>\n        <li><a href=\"\/pl\/rezerwacja-warszawa\/\" class=\"repulos-header__nav-link\">Salon<\/a><\/li>\n        <li><a href=\"\/pl\/kontakt\/\" class=\"repulos-header__nav-link\">Kontakt<\/a><\/li>\n      <\/ul>\n    <\/nav>\n    <div class=\"repulos-header__actions\">\n      <!-- LANG SWITCHER -->\n      <div class=\"repulos-lang\" data-open=\"false\">\n        <button type=\"button\" class=\"repulos-lang__trigger\"\n                aria-haspopup=\"true\" aria-expanded=\"false\"\n                aria-controls=\"repulos-lang-menu\" id=\"repulos-lang-button\">\n          <span class=\"repulos-lang__current\">PL<\/span>\n          <svg class=\"repulos-lang__chevron\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\" focusable=\"false\">\n            <path d=\"M2.5 4.5L6 8l3.5-3.5\" stroke=\"currentColor\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n          <\/svg>\n        <\/button>\n        <ul class=\"repulos-lang__menu\" id=\"repulos-lang-menu\" role=\"menu\" aria-labelledby=\"repulos-lang-button\">\n          <li class=\"repulos-lang__item\" role=\"none\">\n            <a href=\"\/pl\/\" class=\"repulos-lang__link\" role=\"menuitem\" data-lang=\"pl\">\n              <span>Polski<\/span>\n            <\/a>\n          <\/li>\n          <li class=\"repulos-lang__item\" role=\"none\">\n            <a href=\"\/uk\/\" class=\"repulos-lang__link\" role=\"menuitem\" data-lang=\"uk\">\n              <span>\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430<\/span>\n            <\/a>\n          <\/li>\n          <li class=\"repulos-lang__item\" role=\"none\">\n            <a href=\"\/\" class=\"repulos-lang__link\" role=\"menuitem\" data-lang=\"en\">\n              <span>English<\/span>\n            <\/a>\n          <\/li>\n        <\/ul>\n      <\/div>\n      <!-- CURRENCY SWITCHER -->\n      <div class=\"repulos-currency\" data-open=\"false\">\n        <button type=\"button\" class=\"repulos-currency__trigger\"\n                aria-haspopup=\"true\" aria-expanded=\"false\"\n                aria-controls=\"repulos-currency-menu\" id=\"repulos-currency-button\">\n          <span class=\"repulos-currency__current\" id=\"repulos-currency-current\">PLN<\/span>\n          <svg class=\"repulos-currency__chevron\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\" focusable=\"false\">\n            <path d=\"M2.5 4.5L6 8l3.5-3.5\" stroke=\"currentColor\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n          <\/svg>\n        <\/button>\n        <ul class=\"repulos-currency__menu\" id=\"repulos-currency-menu\" role=\"menu\" aria-labelledby=\"repulos-currency-button\">\n          <li class=\"repulos-currency__item\" role=\"none\">\n            <a href=\"?currency=PLN\" class=\"repulos-currency__link\" role=\"menuitem\" data-currency=\"PLN\">\n              <span>Polski Z\u0142oty<\/span>\n            <\/a>\n          <\/li>\n          <li class=\"repulos-currency__item\" role=\"none\">\n            <a href=\"?currency=EUR\" class=\"repulos-currency__link\" role=\"menuitem\" data-currency=\"EUR\">\n              <span>Euro<\/span>\n            <\/a>\n          <\/li>\n          <li class=\"repulos-currency__item\" role=\"none\">\n            <a href=\"?currency=UAH\" class=\"repulos-currency__link\" role=\"menuitem\" data-currency=\"UAH\">\n              <span>Hrywna<\/span>\n            <\/a>\n          <\/li>\n        <\/ul>\n      <\/div>\n      <!-- CART \u2014 opens the FunnelKit slide cart; falls back to \/pl\/cart\/ if unavailable -->\n      <a href=\"\/pl\/cart\/\" class=\"repulos-header__cart repulos-cart-trigger\" aria-label=\"Koszyk\">\n        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\">\n          <rect x=\"4\" y=\"8\" width=\"16\" height=\"14\" rx=\"1.5\"\/>\n          <path d=\"M8 11V6a4 4 0 0 1 8 0v5\"\/>\n        <\/svg>\n        <span class=\"repulos-header__cart-count\" id=\"repulos-cart-count\" aria-label=\"Liczba produkt\u00f3w w koszyku\" hidden>0<\/span>\n      <\/a>\n      <button type=\"button\" class=\"repulos-header__toggle\"\n              aria-label=\"Open menu\" aria-expanded=\"false\"\n              aria-controls=\"repulos-mobile-panel\">\n        <span class=\"repulos-header__toggle-icon\" aria-hidden=\"true\">\n          <span><\/span><span><\/span><span><\/span>\n        <\/span>\n      <\/button>\n    <\/div>\n  <\/div>\n<\/header>\n<div class=\"repulos-mobile\" id=\"repulos-mobile-panel\" aria-hidden=\"true\">\n  <nav aria-label=\"Main menu (mobile)\">\n    <ul class=\"repulos-mobile__nav-list\">\n      <li class=\"repulos-mobile__nav-item\"><a href=\"\/pl\/\" class=\"repulos-mobile__nav-link\">Strona g\u0142\u00f3wna<\/a><\/li>\n      <li class=\"repulos-mobile__nav-item\"><a href=\"\/pl\/sklep\/\" class=\"repulos-mobile__nav-link\"\n        data-match=\"\/pl\/product-category\/,\/pl\/kategoria-produktu\/,\/pl\/product-tag\/\">Sklep<\/a><\/li>\n      <li class=\"repulos-mobile__nav-item\"><a href=\"\/pl\/o-marce\/\" class=\"repulos-mobile__nav-link\">O marce<\/a><\/li>\n      <li class=\"repulos-mobile__nav-item\"><a href=\"\/pl\/blog\/\" class=\"repulos-mobile__nav-link\"\n        data-match=\"\/pl\/category\/,\/pl\/kategoria\/,\/pl\/tag\/\">Inspiracje<\/a><\/li>\n      <li class=\"repulos-mobile__nav-item\"><a href=\"\/pl\/rezerwacja-warszawa\/\" class=\"repulos-mobile__nav-link\">Salon<\/a><\/li>\n      <li class=\"repulos-mobile__nav-item\"><a href=\"\/pl\/kontakt\/\" class=\"repulos-mobile__nav-link\">Kontakt<\/a><\/li>\n      <li class=\"repulos-mobile__nav-item\"><a href=\"\/pl\/cart\/\" class=\"repulos-mobile__nav-link repulos-cart-trigger\">Koszyk<\/a><\/li>\n    <\/ul>\n  <\/nav>\n<\/div>\n<script>\n\/* REPULO'S menu \u2014 PL version (v18, lang + currency + FunnelKit slide cart)\n   ---------------------------------------------------------------------------\n   v18 changes:\n   1) LINKS FIXED \u2014 Polish lives under the \/pl\/ prefix (root \"\/\" is English,\n      \"\/uk\/\" is Ukrainian). v17 pointed every link (and the logo) at the\n      un-prefixed English paths, so Polish visitors were bounced to the English\n      site. All nav links + logo now use verified \/pl\/ URLs (all return HTTP 200):\n        \/pl\/  \/pl\/sklep\/  \/pl\/o-marce\/  \/pl\/blog\/\n        \/pl\/rezerwacja-warszawa\/  \/pl\/kontakt\/  \/pl\/cart\/\n   2) CART = FunnelKit slide cart \u2014 clicking the cart icon (and the mobile\n      \"Koszyk\" item) now opens the FunnelKit sliding side-cart instead of\n      navigating away. Falls back to \/pl\/cart\/ if FunnelKit isn't present.\n   3) CART COUNT \u2014 synced live from FunnelKit's own counter\n      (#fkit-floating-count[data-item-count]) with a WooCommerce-cookie fallback,\n      and refreshed on add\/remove\/fragment events.\n   --------------------------------------------------------------------------- *\/\n(function () {\n  console.log('[REPULO\\'S menu v18 PL] script loaded on', window.location.pathname);\n\n  \/* ==========================================================\n     LANG SWITCHER \u2014 hreflang-aware\n     1) Click a language -> look for <link rel=\"alternate\" hreflang=\"X\"> in <head>\n     2) If found, navigate to the equivalent of the current page\n     3) If not, fall back to that language's home\n     ========================================================== *\/\n  var LANG_HOME = {\n    pl: '\/pl\/',\n    uk: '\/uk\/',\n    en: '\/'\n  };\n  var LANG_CODES = { pl: 'PL', uk: 'UA', en: 'EN' };\n  function getLangTarget(targetLang){\n    if (!targetLang) return null;\n    var links = document.querySelectorAll('link[rel=\"alternate\"][hreflang]');\n    for (var i = 0; i < links.length; i++) {\n      var code = (links[i].getAttribute('hreflang') || '').toLowerCase();\n      if (code !== targetLang && code.indexOf(targetLang + '-') !== 0) continue;\n      var href = links[i].href; if (!href) continue;\n      var p; try { p = new URL(href).pathname; } catch (e) { continue; }\n      if (targetLang === 'uk' && p.indexOf('\/uk\/') !== 0) continue;\n      if (targetLang === 'pl' && p.indexOf('\/pl\/') !== 0) continue;\n      if (targetLang === 'en' && (p.indexOf('\/uk\/') === 0 || p.indexOf('\/pl\/') === 0)) continue;\n      return href;\n    }\n    return LANG_HOME[targetLang] || null;\n  }\n  function fixLangHrefs(){\n    document.querySelectorAll('.repulos-lang__link').forEach(function (link) {\n      var lng = link.getAttribute('data-lang');\n      var target = getLangTarget(lng);\n      if (target && link.getAttribute('href') !== target) {\n        link.setAttribute('href', target);\n      }\n      if (lng && !link.getAttribute('hreflang')) {\n        link.setAttribute('hreflang', lng);\n      }\n    });\n  }\n  fixLangHrefs();\n  document.addEventListener('click', function (e) {\n    var link = e.target && e.target.closest && e.target.closest('.repulos-lang__link');\n    if (!link) return;\n    var lng = link.getAttribute('data-lang');\n    if (!lng) return;\n    var target = getLangTarget(lng);\n    if (!target) return;\n    if (e.ctrlKey || e.metaKey || e.shiftKey || e.button === 1) {\n      e.preventDefault();\n      window.open(target, '_blank');\n      return;\n    }\n    e.preventDefault();\n    e.stopImmediatePropagation();\n    console.log('[REPULO\\'S lang switch]', lng, '->', target);\n    window.location.href = target;\n  }, true);\n\n  \/* Detect current language *\/\n  var currentLang = 'en';\n  if (\/^\\\/uk(\\\/|$)\/.test(window.location.pathname)) currentLang = 'uk';\n  else if (\/^\\\/pl(\\\/|$)\/.test(window.location.pathname)) currentLang = 'pl';\n  var triggerLabel = document.querySelector('.repulos-lang__current');\n  if (triggerLabel && LANG_CODES[currentLang]) {\n    triggerLabel.textContent = LANG_CODES[currentLang];\n  }\n  document.querySelectorAll('.repulos-lang__link').forEach(function (link) {\n    link.removeAttribute('aria-current');\n    if (link.getAttribute('data-lang') === currentLang) {\n      link.setAttribute('aria-current', 'true');\n    }\n  });\n\n  \/* ==========================================================\n     CURRENCY SWITCHER (WPML + PHP filter wcml_client_currency)\n     URL: ?currency=EUR | ?currency=PLN | ?currency=UAH\n     ========================================================== *\/\n  var CURRENCIES = {\n    EUR: 'Euro',\n    PLN: 'Polish Z\u0142oty',\n    UAH: 'Ukrainian Hryvnia'\n  };\n  function getDefaultCurrency(){\n    if (window.location.pathname.indexOf('\/uk\/') === 0) return 'UAH';\n    if (window.location.pathname.indexOf('\/pl\/') === 0) return 'PLN';\n    return 'EUR';\n  }\n  function getCurrentCurrency(){\n    try {\n      var urlParam = new URLSearchParams(window.location.search).get('currency');\n      if (urlParam && CURRENCIES[urlParam.toUpperCase()]) return urlParam.toUpperCase();\n    } catch (e) {}\n    if (typeof window.wcml_settings === 'object' && window.wcml_settings && window.wcml_settings.current_currency) {\n      return window.wcml_settings.current_currency;\n    }\n    if (typeof window.WCML_CURRENT_CURRENCY === 'string') {\n      return window.WCML_CURRENT_CURRENCY;\n    }\n    var cookieNames = ['wpml_current_currency', 'wcml_currency', 'current_currency'];\n    for (var i = 0; i < cookieNames.length; i++) {\n      var match = document.cookie.match(new RegExp('(?:^|;\\\\s*)' + cookieNames[i] + '=([^;]+)'));\n      if (match) {\n        var val = decodeURIComponent(match[1]).toUpperCase();\n        if (CURRENCIES[val]) return val;\n      }\n    }\n    return getDefaultCurrency();\n  }\n  function switchCurrency(currency){\n    currency = (currency || '').toUpperCase();\n    if (!CURRENCIES[currency]) return;\n    var url = window.location.pathname + window.location.search;\n    url = url.replace(\/[?&]currency=[^&]*\/g, '');\n    url = url.replace(\/\\?&\/, '?').replace(\/\\?$\/, '');\n    url += (url.indexOf('?') === -1 ? '?' : '&') + 'currency=' + currency;\n    url += window.location.hash;\n    console.log('[REPULO\\'S currency switch] ->', currency, '|', url);\n    window.location.href = url;\n  }\n  var currentCurrency = getCurrentCurrency();\n  console.log('[REPULO\\'S currency] current =', currentCurrency);\n  var currencyLabel = document.getElementById('repulos-currency-current');\n  if (currencyLabel) currencyLabel.textContent = currentCurrency;\n  document.querySelectorAll('.repulos-currency__link').forEach(function (link) {\n    link.removeAttribute('aria-current');\n    if (link.getAttribute('data-currency') === currentCurrency) {\n      link.setAttribute('aria-current', 'true');\n    }\n  });\n  document.addEventListener('click', function (e) {\n    var link = e.target && e.target.closest && e.target.closest('.repulos-currency__link');\n    if (!link) return;\n    var currency = link.getAttribute('data-currency');\n    if (!currency || !CURRENCIES[currency]) return;\n    if (e.ctrlKey || e.metaKey || e.shiftKey || e.button === 1) {\n      e.preventDefault();\n      var newUrl = window.location.pathname + '?currency=' + currency;\n      window.open(newUrl, '_blank');\n      return;\n    }\n    e.preventDefault();\n    e.stopImmediatePropagation();\n    switchCurrency(currency);\n  }, true);\n\n  \/* ==========================================================\n     ACTIVE STATE \u2014 current page in the menu\n     ========================================================== *\/\n  function normalizePath(p){\n    if (!p) return '\/';\n    try { p = decodeURIComponent(p); } catch (e) {}\n    if (p.charAt(p.length - 1) !== '\/') p += '\/';\n    return p;\n  }\n  function pathStartsWith(path, prefix){\n    if (path === prefix) return true;\n    return path.indexOf(prefix) === 0;\n  }\n  function isRootPath(p){\n    if (p === '\/') return true;\n    return \/^\\\/[a-z]{2}\\\/$\/.test(p);\n  }\n  var currentPath = normalizePath(window.location.pathname);\n  var menuLinks = document.querySelectorAll(\n    '.repulos-header__nav-link, .repulos-mobile__nav-link'\n  );\n  menuLinks.forEach(function (link) {\n    link.removeAttribute('aria-current');\n    try {\n      var linkPath = normalizePath(new URL(link.href).pathname);\n      var dataMatch = link.getAttribute('data-match') || '';\n      var extraPaths = dataMatch.split(',')\n        .map(function (s) { return s.trim(); })\n        .filter(Boolean)\n        .map(normalizePath);\n      var isActive = false;\n      if (isRootPath(linkPath)) {\n        isActive = currentPath === linkPath;\n        if (!isActive && extraPaths.length) {\n          isActive = extraPaths.indexOf(currentPath) !== -1;\n        }\n      } else {\n        var allPaths = [linkPath].concat(extraPaths);\n        for (var i = 0; i < allPaths.length; i++) {\n          if (pathStartsWith(currentPath, allPaths[i])) { isActive = true; break; }\n        }\n      }\n      if (isActive) link.setAttribute('aria-current', 'page');\n    } catch (e) {}\n  });\n\n  \/* ==========================================================\n     FUNNELKIT SLIDE CART \u2014 open on cart-icon \/ \"Koszyk\" click\n     FunnelKit's side cart opens by adding the class \"fkcart-show\"\n     to #fkcart-modal (its own close button \/ overlay still work).\n     If the cart plugin isn't present, we let the link navigate to \/pl\/cart\/.\n     ========================================================== *\/\n  function openFunnelKitCart(){\n    var modal = document.getElementById('fkcart-modal');\n    if (!modal) return false;\n    \/* FunnelKit's close button leaves collapse styles (overflow:hidden; height:\u2026px)\n       on the modal, which would keep the panel clipped on the next open. Reset the\n       inline style to the clean \"open\" state before showing it again. *\/\n    var reveal = function(){ modal.style.cssText = 'display:block'; modal.classList.add('fkcart-show'); };\n    reveal();\n    \/* re-assert once, in case a just-triggered close animation applies its\n       collapse styles a moment after we open *\/\n    setTimeout(reveal, 380);\n    return true;\n  }\n  document.addEventListener('click', function (e) {\n    var trigger = e.target && e.target.closest && e.target.closest('.repulos-cart-trigger');\n    if (!trigger) return;\n    if (e.ctrlKey || e.metaKey || e.shiftKey || e.button === 1) return; \/* let new-tab work *\/\n    if (openFunnelKitCart()) {\n      e.preventDefault();\n      \/* also close the mobile panel if the click came from there *\/\n      if (typeof setPanelOpen === 'function') setPanelOpen(false);\n    }\n    \/* else: no FunnelKit cart -> allow default navigation to \/pl\/cart\/ *\/\n  });\n\n  \/* ==========================================================\n     CART COUNTER \u2014 synced from FunnelKit, cookie fallback\n     ========================================================== *\/\n  function readCartCount(){\n    var fk = document.getElementById('fkit-floating-count');\n    if (fk) {\n      var raw = fk.getAttribute('data-item-count');\n      if (raw === null || raw === '') raw = fk.textContent;\n      var n = parseInt(raw, 10);\n      if (!isNaN(n)) return n;\n    }\n    var m = document.cookie.match(\/(?:^|;\\s*)woocommerce_items_in_cart=([^;]+)\/);\n    var c = m ? parseInt(decodeURIComponent(m[1]), 10) : 0;\n    return isNaN(c) ? 0 : c;\n  }\n  function updateCartCount(){\n    var el = document.getElementById('repulos-cart-count');\n    if (!el) return;\n    var n = readCartCount();\n    el.textContent = n;\n    if (n > 0) el.removeAttribute('hidden');\n    else el.setAttribute('hidden', '');\n  }\n  function attachFkObserver(){\n    var fk = document.getElementById('fkit-floating-count');\n    if (fk && window.MutationObserver && !fk.__repObserved) {\n      fk.__repObserved = true;\n      new MutationObserver(updateCartCount).observe(fk, {\n        attributes: true, attributeFilter: ['data-item-count'],\n        childList: true, characterData: true, subtree: true\n      });\n      updateCartCount();\n    }\n  }\n  updateCartCount();\n  attachFkObserver();\n  \/* FunnelKit renders its counter asynchronously \u2014 retry a few times to hook it *\/\n  [400, 1200, 2500].forEach(function (ms) { setTimeout(function () { attachFkObserver(); updateCartCount(); }, ms); });\n  window.addEventListener('pageshow', updateCartCount);\n  if (window.jQuery) {\n    jQuery(document.body).on(\n      'added_to_cart removed_from_cart wc_fragments_refreshed wc_fragments_loaded updated_cart_totals fkcart_cart_loaded fkcart_quantity_update',\n      function () { attachFkObserver(); updateCartCount(); }\n    );\n  }\n\n  \/* ==========================================================\n     DROPDOWN TOGGLE (lang + currency)\n     ========================================================== *\/\n  var lang        = document.querySelector('.repulos-lang');\n  var langTrigger = document.getElementById('repulos-lang-button');\n  var langMenu    = document.getElementById('repulos-lang-menu');\n  var curr        = document.querySelector('.repulos-currency');\n  var currTrigger = document.getElementById('repulos-currency-button');\n  var currMenu    = document.getElementById('repulos-currency-menu');\n  function setLangOpen(open){\n    if (!lang || !langTrigger) return;\n    lang.setAttribute('data-open', open ? 'true' : 'false');\n    langTrigger.setAttribute('aria-expanded', open ? 'true' : 'false');\n  }\n  function setCurrOpen(open){\n    if (!curr || !currTrigger) return;\n    curr.setAttribute('data-open', open ? 'true' : 'false');\n    currTrigger.setAttribute('aria-expanded', open ? 'true' : 'false');\n  }\n  if (lang && langTrigger && langMenu) {\n    langTrigger.addEventListener('click', function (e) {\n      e.stopPropagation();\n      var open = langTrigger.getAttribute('aria-expanded') !== 'true';\n      if (open) setCurrOpen(false);\n      setLangOpen(open);\n    });\n    document.addEventListener('click', function (e) {\n      if (!lang.contains(e.target)) setLangOpen(false);\n    });\n    var langLinks = Array.prototype.slice.call(langMenu.querySelectorAll('.repulos-lang__link'));\n    langTrigger.addEventListener('keydown', function (e) {\n      if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {\n        e.preventDefault();\n        setLangOpen(true);\n        if (langLinks[0]) langLinks[0].focus();\n      }\n    });\n    langLinks.forEach(function (link, idx) {\n      link.addEventListener('keydown', function (e) {\n        switch (e.key) {\n          case 'ArrowDown': e.preventDefault(); (langLinks[idx + 1] || langLinks[0]).focus(); break;\n          case 'ArrowUp':   e.preventDefault(); (langLinks[idx - 1] || langLinks[langLinks.length - 1]).focus(); break;\n          case 'Home':      e.preventDefault(); langLinks[0].focus(); break;\n          case 'End':       e.preventDefault(); langLinks[langLinks.length - 1].focus(); break;\n        }\n      });\n    });\n  }\n  if (curr && currTrigger && currMenu) {\n    currTrigger.addEventListener('click', function (e) {\n      e.stopPropagation();\n      var open = currTrigger.getAttribute('aria-expanded') !== 'true';\n      if (open) setLangOpen(false);\n      setCurrOpen(open);\n    });\n    document.addEventListener('click', function (e) {\n      if (!curr.contains(e.target)) setCurrOpen(false);\n    });\n    var currLinks = Array.prototype.slice.call(currMenu.querySelectorAll('.repulos-currency__link'));\n    currTrigger.addEventListener('keydown', function (e) {\n      if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {\n        e.preventDefault();\n        setCurrOpen(true);\n        if (currLinks[0]) currLinks[0].focus();\n      }\n    });\n    currLinks.forEach(function (link, idx) {\n      link.addEventListener('keydown', function (e) {\n        switch (e.key) {\n          case 'ArrowDown': e.preventDefault(); (currLinks[idx + 1] || currLinks[0]).focus(); break;\n          case 'ArrowUp':   e.preventDefault(); (currLinks[idx - 1] || currLinks[currLinks.length - 1]).focus(); break;\n          case 'Home':      e.preventDefault(); currLinks[0].focus(); break;\n          case 'End':       e.preventDefault(); currLinks[currLinks.length - 1].focus(); break;\n        }\n      });\n    });\n  }\n\n  \/* ==========================================================\n     MOBILE PANEL TOGGLE\n     ========================================================== *\/\n  var toggle = document.querySelector('.repulos-header__toggle');\n  var panel  = document.getElementById('repulos-mobile-panel');\n  var body   = document.body;\n  function setPanelOpen(open){\n    if (!toggle || !panel) return;\n    toggle.setAttribute('aria-expanded', open ? 'true' : 'false');\n    toggle.setAttribute('aria-label', open ? 'Close menu' : 'Open menu');\n    panel.setAttribute('aria-hidden', open ? 'false' : 'true');\n    body.classList.toggle('repulos-menu-open', open);\n  }\n  \/* expose so the cart handler can close the panel *\/\n  window.__repulosSetPanelOpen = setPanelOpen;\n  if (toggle && panel) {\n    toggle.addEventListener('click', function () {\n      var open = toggle.getAttribute('aria-expanded') !== 'true';\n      setPanelOpen(open);\n    });\n    panel.querySelectorAll('a').forEach(function (link) {\n      link.addEventListener('click', function () { setPanelOpen(false); });\n    });\n    var mq = window.matchMedia('(min-width: 1025px)');\n    function onChange(e){ if (e.matches) setPanelOpen(false); }\n    if (mq.addEventListener) mq.addEventListener('change', onChange);\n    else if (mq.addListener) mq.addListener(onChange);\n  }\n\n  \/* ESCAPE HANDLER *\/\n  document.addEventListener('keydown', function (e) {\n    if (e.key !== 'Escape') return;\n    if (toggle && toggle.getAttribute('aria-expanded') === 'true') {\n      setPanelOpen(false); toggle.focus();\n    }\n    if (langTrigger && langTrigger.getAttribute('aria-expanded') === 'true') {\n      setLangOpen(false); langTrigger.focus();\n    }\n    if (currTrigger && currTrigger.getAttribute('aria-expanded') === 'true') {\n      setCurrOpen(false); currTrigger.focus();\n    }\n  });\n\n  \/* ==========================================================\n     DEBUG PANEL \u2014 ?debug-menu=1\n     ========================================================== *\/\n  if (window.location.search.indexOf('debug-menu=1') !== -1) {\n    var dbg = document.createElement('div');\n    dbg.className = 'repulos-debug';\n    var html = '<button class=\"repulos-debug__close\" type=\"button\" aria-label=\"Close debug\">&times;<\/button>';\n    html += '<h4>REPULO\\'S Menu Debug (PL v18)<\/h4>';\n    html += 'pathname: <code>' + window.location.pathname + '<\/code><br>';\n    html += 'currentPath: <code>' + currentPath + '<\/code><br>';\n    html += 'currentLang: <code>' + currentLang + '<\/code><br>';\n    html += 'cart count: <code>' + readCartCount() + '<\/code>';\n    html += ' | FunnelKit modal: <code>' + (document.getElementById('fkcart-modal') ? 'yes' : 'NO') + '<\/code><br>';\n    html += '<br><strong>Lang switcher (hreflang-aware):<\/strong><br>';\n    document.querySelectorAll('.repulos-lang__link').forEach(function (link) {\n      var lng = link.getAttribute('data-lang');\n      var target = getLangTarget(lng) || '?';\n      var fallback = LANG_HOME[lng] || '?';\n      var actualHref = link.getAttribute('href') || '?';\n      var fromHreflang = target !== fallback ? ' (from hreflang &#10003;)' : ' (fallback to home)';\n      var match = target === actualHref ? '&#10003;' : '&#10007; MISMATCH';\n      html += '  ' + lng + ': <code>' + target + '<\/code>' + fromHreflang + ' ' + match + '<br>';\n    });\n    html += '<br><strong>hreflang tags in head:<\/strong><br>';\n    var hreflangs = document.querySelectorAll('link[rel=\"alternate\"][hreflang]');\n    if (hreflangs.length === 0) {\n      html += '  (none \u2014 check WPML\/Rank Math config)<br>';\n    } else {\n      hreflangs.forEach(function (link) {\n        html += '  ' + link.getAttribute('hreflang') + ' &rarr; <code>' + link.getAttribute('href') + '<\/code><br>';\n      });\n    }\n    html += '<br><strong>Menu items:<\/strong><br>';\n    menuLinks.forEach(function (link) {\n      var linkPath = '?';\n      try { linkPath = normalizePath(new URL(link.href).pathname); } catch (e) {}\n      var isActive = link.getAttribute('aria-current') === 'page';\n      var statusClass = isActive ? 'active' : 'inactive';\n      var statusText = isActive ? '&#10003; ACTIVE' : '&#10007; inactive';\n      var text = link.textContent.trim();\n      var menuType = link.className.indexOf('mobile') !== -1 ? 'M' : 'D';\n      html += '<span class=\"' + statusClass + '\">' + statusText + '<\/span> [' + menuType + '] ' + text + '<br>';\n      html += '  href: <code>' + linkPath + '<\/code><br>';\n    });\n    dbg.innerHTML = html;\n    document.body.appendChild(dbg);\n    dbg.querySelector('.repulos-debug__close').addEventListener('click', function () { dbg.remove(); });\n  }\n})();\n<\/script>\n<\/body>\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f4a02ed e-flex e-con-boxed e-con e-parent\" data-id=\"f4a02ed\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-51668c1 elementor-widget elementor-widget-html\" data-id=\"51668c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- REPULO'S \u00b7 Rezerwacja Warszawa \u00b7 v9 VOGUE \u00b7 w\u0142asny kalendarz + zaj\u0119te sloty znikaj\u0105 + wsp\u00f3lna dost\u0119pno\u015b\u0107 PL\/EN + SEO\/AIO schema -->\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Playfair+Display:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600&family=Jost:ital,wght@0,300;0,400;0,500;0,600;1,300;1,400&display=swap\" rel=\"stylesheet\">\n\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@graph\": [\n    {\n      \"@type\": [\"ClothingStore\", \"LocalBusiness\"],\n      \"@id\": \"https:\/\/repulos.com\/#salon-warszawa\",\n      \"name\": \"REPULO'S \u2014 Salon i studio, Warszawa\",\n      \"description\": \"Kameralny salon i studio REPULO'S w centrum Warszawy. Autorska kolekcja plisowanej odzie\u017cy wieczorowej i okazjonalnej \u2014 suknie na gal\u0119, wesele, studni\u00f3wk\u0119 \u2014 szyte na indywidualne miary. Wizyty wy\u0142\u0105cznie po wcze\u015bniejszej rezerwacji.\",\n      \"url\": \"https:\/\/repulos.com\/rezerwacja-warszawa\/\",\n      \"image\": \"https:\/\/repulos.com\/wp-content\/uploads\/2026\/04\/IMG_9295-scaled.webp\",\n      \"telephone\": \"+48508772319\",\n      \"email\": \"order@repulos.com\",\n      \"priceRange\": \"$$$\",\n      \"currenciesAccepted\": \"PLN\",\n      \"paymentAccepted\": \"Visa, Mastercard, Apple Pay, Google Pay, BLIK\",\n      \"address\": {\n        \"@type\": \"PostalAddress\",\n        \"streetAddress\": \"ul. W. H. Lindleya 16\/509\",\n        \"postalCode\": \"02-013\",\n        \"addressLocality\": \"Warszawa\",\n        \"addressRegion\": \"Mazowieckie\",\n        \"addressCountry\": \"PL\"\n      },\n      \"geo\": { \"@type\": \"GeoCoordinates\", \"latitude\": 52.22558, \"longitude\": 20.98449 },\n      \"hasMap\": \"https:\/\/www.google.com\/maps?q=ul.+Williama+Heerleina+Lindleya+16,+02-013+Warszawa\",\n      \"areaServed\": { \"@type\": \"City\", \"name\": \"Warszawa\" },\n      \"openingHoursSpecification\": [\n        { \"@type\": \"OpeningHoursSpecification\", \"dayOfWeek\": [\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\"], \"opens\": \"09:00\", \"closes\": \"19:00\" },\n        { \"@type\": \"OpeningHoursSpecification\", \"dayOfWeek\": \"Saturday\", \"opens\": \"11:00\", \"closes\": \"19:00\" },\n        { \"@type\": \"OpeningHoursSpecification\", \"dayOfWeek\": \"Sunday\", \"opens\": \"11:00\", \"closes\": \"17:00\" }\n      ],\n      \"makesOffer\": {\n        \"@type\": \"Offer\",\n        \"itemOffered\": {\n          \"@type\": \"Service\",\n          \"name\": \"Bezp\u0142atna konsultacja stylistyczna i przymiarka\",\n          \"description\": \"Osobista wizyta w salonie: przymiarka modeli z autorskiej kolekcji oraz dob\u00f3r kroju szytego na indywidualne miary, bez dop\u0142at.\"\n        }\n      },\n      \"potentialAction\": {\n        \"@type\": \"ReserveAction\",\n        \"target\": {\n          \"@type\": \"EntryPoint\",\n          \"urlTemplate\": \"https:\/\/repulos.com\/rezerwacja-warszawa\/\",\n          \"inLanguage\": \"pl-PL\",\n          \"actionPlatform\": [\"http:\/\/schema.org\/DesktopWebPlatform\",\"http:\/\/schema.org\/MobileWebPlatform\"]\n        },\n        \"result\": { \"@type\": \"Reservation\", \"name\": \"Rezerwacja wizyty w salonie REPULO'S Warszawa\" }\n      },\n      \"parentOrganization\": {\n        \"@type\": \"Organization\",\n        \"name\": \"REPULO'S\",\n        \"url\": \"https:\/\/repulos.com\/\",\n        \"sameAs\": [\"https:\/\/www.instagram.com\/iamkatkatik\/\"]\n      }\n    },\n    {\n      \"@type\": \"WebPage\",\n      \"@id\": \"https:\/\/repulos.com\/rezerwacja-warszawa\/#webpage\",\n      \"url\": \"https:\/\/repulos.com\/rezerwacja-warszawa\/\",\n      \"name\": \"Rezerwacja wizyty | Salon REPULO'S Warszawa \u2014 suknie na gal\u0119 i wesele\",\n      \"description\": \"Zarezerwuj wizyt\u0119 w salonie REPULO'S w Warszawie. Przymierz plisowane suknie wieczorowe z autorskiej kolekcji i zam\u00f3w kr\u00f3j szyty na miar\u0119. Bezp\u0142atna konsultacja, wy\u0142\u0105cznie po um\u00f3wieniu.\",\n      \"inLanguage\": \"pl-PL\",\n      \"about\": { \"@id\": \"https:\/\/repulos.com\/#salon-warszawa\" },\n      \"primaryImageOfPage\": \"https:\/\/repulos.com\/wp-content\/uploads\/2026\/04\/IMG_9295-scaled.webp\",\n      \"breadcrumb\": { \"@id\": \"https:\/\/repulos.com\/rezerwacja-warszawa\/#breadcrumb\" }\n    },\n    {\n      \"@type\": \"BreadcrumbList\",\n      \"@id\": \"https:\/\/repulos.com\/rezerwacja-warszawa\/#breadcrumb\",\n      \"itemListElement\": [\n        { \"@type\": \"ListItem\", \"position\": 1, \"name\": \"Strona g\u0142\u00f3wna\", \"item\": \"https:\/\/repulos.com\/\" },\n        { \"@type\": \"ListItem\", \"position\": 2, \"name\": \"Rezerwacja wizyty \u2014 Salon Warszawa\", \"item\": \"https:\/\/repulos.com\/rezerwacja-warszawa\/\" }\n      ]\n    },\n    {\n      \"@type\": \"FAQPage\",\n      \"@id\": \"https:\/\/repulos.com\/rezerwacja-warszawa\/#faq\",\n      \"mainEntity\": [\n        { \"@type\": \"Question\", \"name\": \"Z jakim wyprzedzeniem trzeba zarezerwowa\u0107 wizyt\u0119?\", \"acceptedAnswer\": { \"@type\": \"Answer\", \"text\": \"Wizyt\u0119 mo\u017cna zarezerwowa\u0107 najwcze\u015bniej na 2 godziny od bie\u017c\u0105cej chwili. Potrzebujemy tego czasu, aby dojecha\u0107 do salonu i przygotowa\u0107 si\u0119 na Twoj\u0105 wizyt\u0119. Godziny, kt\u00f3re s\u0105 zbyt blisko, s\u0105 automatycznie niedost\u0119pne w formularzu.\" } },\n        { \"@type\": \"Question\", \"name\": \"W jakich godzinach mo\u017cna um\u00f3wi\u0107 wizyt\u0119?\", \"acceptedAnswer\": { \"@type\": \"Answer\", \"text\": \"Wizyty umawiamy od poniedzia\u0142ku do pi\u0105tku w godzinach 9:00\u201319:00, w sobot\u0119 11:00\u201319:00, a w niedziel\u0119 11:00\u201317:00. Ostatni\u0105 wizyt\u0119 w dni powszednie i w sobot\u0119 rozpoczynamy o 18:00, a w niedziel\u0119 o 16:00.\" } },\n        { \"@type\": \"Question\", \"name\": \"Czy s\u0105 terminy, w kt\u00f3rych salon jest nieczynny?\", \"acceptedAnswer\": { \"@type\": \"Answer\", \"text\": \"W dniach od 10 do 23 lipca 2026 salon jest nieczynny. Terminy te s\u0105 w kalendarzu oznaczone na czerwono \u2014 w tym okresie rezerwacja wizyt jest niedost\u0119pna.\" } },\n        { \"@type\": \"Question\", \"name\": \"Czy po wype\u0142nieniu formularza wizyta jest od razu potwierdzona?\", \"acceptedAnswer\": { \"@type\": \"Answer\", \"text\": \"Nie od razu. Po wys\u0142aniu formularza zobaczysz potwierdzenie, \u017ce przyj\u0119li\u015bmy zg\u0142oszenie. Dok\u0142adny termin wizyty potwierdzimy indywidualnym mailem w ci\u0105gu od 2 do 4 godzin w godzinach pracy salonu.\" } },\n        { \"@type\": \"Question\", \"name\": \"Jak d\u0142ugo trwa wizyta?\", \"acceptedAnswer\": { \"@type\": \"Answer\", \"text\": \"Standardowa wizyta trwa od 45 do 90 minut. Ka\u017cd\u0105 wizyt\u0119 rezerwujemy indywidualnie i po\u015bwi\u0119camy klientce pe\u0142n\u0105 uwag\u0119.\" } },\n        { \"@type\": \"Question\", \"name\": \"Czy wizyta jest p\u0142atna?\", \"acceptedAnswer\": { \"@type\": \"Answer\", \"text\": \"Wizyta i konsultacja stylistyczna s\u0105 bezp\u0142atne. Nie pobieramy op\u0142aty rezerwacyjnej.\" } },\n        { \"@type\": \"Question\", \"name\": \"Czy mog\u0119 przyj\u015b\u0107 z osob\u0105 towarzysz\u0105c\u0105?\", \"acceptedAnswer\": { \"@type\": \"Answer\", \"text\": \"Tak. Zach\u0119camy do zabrania jednej osoby towarzysz\u0105cej. Je\u015bli planujesz wi\u0119ksz\u0105 grup\u0119, zaznacz to w polu Wiadomo\u015b\u0107 przy rezerwacji.\" } },\n        { \"@type\": \"Question\", \"name\": \"Czy modele s\u0105 szyte na miar\u0119?\", \"acceptedAnswer\": { \"@type\": \"Answer\", \"text\": \"Tak. Ka\u017cdy model REPULO'S szyjemy na Twoje indywidualne miary i wzrost, bez dop\u0142at i bez sztywnej rozmiar\u00f3wki. Podczas wizyty przymierzysz modele z autorskiej kolekcji, a my dobierzemy kr\u00f3j idealnie dopasowany do Twojej sylwetki.\" } }\n      ]\n    }\n  ]\n}\n<\/script>\n\n<style>\n  .rpl {\n    --bg: #FBF9F6; --bg-cream: #F3ECE2; --ink: #17130F; --ink-soft: #6E655C;\n    --line: #17130F; --line-soft: #E6DCCF; --sage: #2D6E3A; --red: #C10A1E; --red-deep: #8E0716;\n    --font: 'Jost', system-ui, -apple-system, sans-serif;\n    --font-serif: 'Playfair Display', Georgia, 'Times New Roman', serif;\n    --font-body: 'Jost', system-ui, -apple-system, sans-serif;\n    --maxw: 1320px; --gx: clamp(20px, 5vw, 80px); --section-py: clamp(70px, 9vw, 130px);\n  }\n  .rpl, .rpl * { box-sizing: border-box; font-family: var(--font); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }\n  .rpl { background: var(--bg); color: var(--ink); line-height: 1.5; font-size: 16px; font-weight: 300; overflow-x: hidden; }\n  .rpl p, .rpl h1, .rpl h2, .rpl h3, .rpl h4, .rpl ul, .rpl ol { margin: 0; padding: 0; }\n  .rpl ul { list-style: none; }\n  .rpl a { color: inherit; text-decoration: none; }\n  .rpl button { font-family: var(--font); }\n  .rpl img { max-width: 100%; height: auto; display: block; }\n  .rpl :focus-visible { outline: 2px solid var(--red); outline-offset: 3px; }\n  .rpl-eyebrow { font-size: 10px; letter-spacing: 0.42em; text-transform: uppercase; opacity: 1; font-weight: 500; color: var(--red); }\n  .rpl-hero { max-width: var(--maxw); margin: 0 auto; padding: clamp(36px, 6vw, 90px) var(--gx) clamp(56px, 8vw, 110px); display: grid; grid-template-columns: 5fr 6fr; gap: clamp(40px, 6vw, 90px); align-items: center; }\n  @media (max-width: 900px) { .rpl-hero { grid-template-columns: 1fr; gap: 34px; padding: 26px var(--gx) 46px; } }\n  .rpl-hero__text { order: 1; } .rpl-hero__visual { order: 2; }\n  @media (max-width: 900px) { .rpl-hero__visual { order: 1; } .rpl-hero__text { order: 2; } }\n  .rpl-hero__eyebrow { margin-bottom: clamp(22px, 3vw, 38px); }\n  .rpl-hero__h1 { font-family: var(--font-serif); font-weight: 500; font-size: clamp(44px, 6.8vw, 88px); line-height: 1.02; letter-spacing: -0.015em; max-width: 14ch; margin-bottom: clamp(24px, 3.5vw, 38px); color: var(--ink); }\n  .rpl-hero__h1 em { font-style: italic; font-weight: 500; color: var(--red); }\n  .rpl-hero__sub { font-size: 14px; line-height: 1.8; color: var(--ink-soft); max-width: 40ch; margin-bottom: clamp(28px, 4vw, 42px); font-weight: 300; }\n  .rpl-hero__img-wrap { position: relative; aspect-ratio: 4\/5; overflow: hidden; background: var(--bg-cream); }\n  .rpl-hero__img { width: 100%; height: 100%; object-fit: cover; transition: transform 1.4s cubic-bezier(.16,1,.3,1); }\n  .rpl-hero__img-wrap:hover .rpl-hero__img { transform: scale(1.04); }\n  .rpl-btn { display: inline-flex; align-items: center; justify-content: center; gap: 18px; padding: 20px 36px; background: transparent; color: var(--ink); border: 1px solid var(--ink); font-size: 11px; letter-spacing: 0.32em; text-transform: uppercase; font-weight: 500; cursor: pointer; transition: background 0.4s cubic-bezier(.4,0,.2,1), color 0.4s cubic-bezier(.4,0,.2,1), border-color 0.4s cubic-bezier(.4,0,.2,1); text-align: center; line-height: 1; }\n  .rpl-btn:hover { background: var(--red); color: #fff; border-color: var(--red); }\n  .rpl-btn--lg { padding: 24px 48px; letter-spacing: 0.36em; }\n  .rpl-btn__arrow { width: 14px; height: 10px; flex-shrink: 0; transition: transform 0.4s cubic-bezier(.4,0,.2,1); display: inline-block; }\n  .rpl-btn__arrow svg { width: 100%; height: 100%; fill: currentColor; display: block; }\n  .rpl-btn:hover .rpl-btn__arrow { transform: translateX(6px); }\n  .rpl-assure { max-width: var(--maxw); margin: 0 auto; padding: 0 var(--gx); }\n  .rpl-assure__grid { display: grid; grid-template-columns: repeat(3, 1fr); border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); }\n  .rpl-assure__item { padding: clamp(26px, 3.4vw, 40px) clamp(20px, 3vw, 44px); border-left: 1px solid var(--line-soft); }\n  .rpl-assure__item:first-child { border-left: none; }\n  .rpl-assure__k { font-size: 10px; letter-spacing: 0.36em; text-transform: uppercase; color: var(--red); margin-bottom: 14px; font-weight: 500; }\n  .rpl-assure__v { font-family: var(--font-serif); font-size: clamp(17px, 1.6vw, 21px); font-weight: 400; line-height: 1.35; letter-spacing: -0.01em; }\n  @media (max-width: 760px) { .rpl-assure__grid { grid-template-columns: 1fr; } .rpl-assure__item { border-left: none; border-top: 1px solid var(--line-soft); } .rpl-assure__item:first-child { border-top: none; } }\n  .rpl-form { border-top: 1px solid var(--line); padding: var(--section-py) 0; background: var(--bg); }\n  .rpl-form__inner { max-width: 680px; margin: 0 auto; padding: 0 var(--gx); }\n  .rpl-form__num { margin-bottom: 22px; text-align: left; }\n  .rpl-form__h2 { font-family: var(--font-serif); font-weight: 500; font-size: clamp(32px, 4.8vw, 56px); line-height: 1.05; letter-spacing: -0.015em; text-align: left; margin-bottom: 18px; }\n  .rpl-form__h2 em { font-style: italic; font-weight: 500; color: var(--red); }\n  .rpl-form__lead { text-align: left; font-size: 14px; line-height: 1.75; color: var(--ink-soft); max-width: 46ch; margin: 0 0 clamp(40px, 5.5vw, 64px); font-weight: 300; }\n  .rpl-form-shell { width: 100%; }\n  .rpl-honeypot { display: none !important; }\n  .rpl-row { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; }\n  .rpl-row--single { grid-template-columns: 1fr; }\n  @media (max-width: 600px) { .rpl-row { grid-template-columns: 1fr; gap: 0; } }\n  .rpl-field { padding: 14px 0 18px; margin: 0; border: none; }\n  .rpl-field__label { display: block; font-size: 10px; letter-spacing: 0.32em; text-transform: uppercase; color: var(--ink); font-weight: 500; margin-bottom: 12px; opacity: 0.7; }\n  .rpl-field input, .rpl-field select, .rpl-field textarea { background: transparent; border: none; border-bottom: 1px solid var(--line); border-radius: 0; padding: 8px 0; font-family: var(--font); font-size: 16px; font-weight: 300; color: var(--ink); width: 100%; box-shadow: none; transition: border-color 0.3s ease; -webkit-appearance: none; appearance: none; }\n  .rpl-field select { background-image: linear-gradient(45deg, transparent 50%, var(--ink) 50%), linear-gradient(135deg, var(--ink) 50%, transparent 50%); background-position: calc(100% - 14px) calc(50% + 2px), calc(100% - 8px) calc(50% + 2px); background-size: 6px 6px, 6px 6px; background-repeat: no-repeat; padding-right: 28px; cursor: pointer; }\n  .rpl-field select option[disabled] { color: #B8B8B8; }\n  .rpl-field textarea { min-height: 90px; resize: vertical; padding-top: 12px; }\n  .rpl-field input:focus, .rpl-field select:focus, .rpl-field textarea:focus { outline: none; border-bottom-color: var(--red); border-bottom-width: 2px; }\n  .rpl-field input::placeholder, .rpl-field textarea::placeholder { color: var(--ink-soft); opacity: 0.5; font-weight: 300; }\n  .rpl-field__hint { display: none; margin-top: 10px; font-size: 12px; line-height: 1.5; color: var(--red); font-family: var(--font-body); letter-spacing: 0; }\n  .rpl-field__hint.is-visible { display: block; }\n  \/* ===== CUSTOM DATE PICKER ===== *\/\n  .rpl-datepicker { position: relative; }\n  .rpl-datepicker__trigger { width: 100%; text-align: left; background: transparent; border: none; border-bottom: 1px solid var(--line); border-radius: 0; padding: 8px 0; font-family: var(--font); font-size: 16px; font-weight: 300; color: var(--ink); cursor: pointer; transition: border-color 0.3s ease; }\n  .rpl-datepicker__trigger:hover { border-bottom-color: var(--red); }\n  .rpl-datepicker__trigger.is-empty { color: var(--ink-soft); opacity: 0.5; }\n  .rpl-cal { position: absolute; z-index: 50; top: calc(100% + 8px); left: 0; width: 300px; max-width: calc(100vw - 40px); border: 1px solid var(--line); background: var(--bg); padding: 16px; box-shadow: 0 12px 40px rgba(23,19,15,0.14); }\n  .rpl-cal[hidden] { display: none; }\n  .rpl-cal.is-right { left: auto; right: 0; }\n  .rpl-cal__head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 14px; gap: 8px; }\n  .rpl-cal__title { font-family: var(--font-serif); font-size: 15px; letter-spacing: 0.01em; font-weight: 500; white-space: nowrap; }\n  .rpl-cal__nav { width: 30px; height: 30px; flex-shrink: 0; border: 1px solid var(--line-soft); background: transparent; cursor: pointer; font-size: 16px; line-height: 1; display: flex; align-items: center; justify-content: center; color: var(--ink); transition: background 0.2s, color 0.2s, border-color 0.2s; }\n  .rpl-cal__nav[disabled] { opacity: 0.25; cursor: default; }\n  .rpl-cal__nav:not([disabled]):hover { background: var(--red); color: #fff; border-color: var(--red); }\n  .rpl-cal__weekdays { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; margin-bottom: 6px; }\n  .rpl-cal__weekdays span { text-align: center; font-size: 9px; letter-spacing: 0.04em; text-transform: uppercase; opacity: 0.45; padding: 4px 0; }\n  .rpl-cal__grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; }\n  .rpl-cal__day { aspect-ratio: 1\/1; display: flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 300; border: none; background: transparent; cursor: pointer; color: var(--ink); transition: background 0.2s, color 0.2s; padding: 0; }\n  .rpl-cal__day:hover:not([disabled]) { background: var(--bg-cream); }\n  .rpl-cal__day.is-selected { background: var(--red); color: #fff; }\n  .rpl-cal__day.is-empty { visibility: hidden; cursor: default; }\n  .rpl-cal__day.is-past { color: #CFC7BC; cursor: default; }\n  .rpl-cal__day.is-blocked { color: var(--red); background: rgba(193,10,30,0.08); text-decoration: line-through; cursor: not-allowed; }\n  .rpl-cal__legend { margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--line-soft); font-size: 11px; color: var(--ink-soft); display: flex; align-items: center; gap: 8px; font-family: var(--font-body); line-height: 1.4; }\n  .rpl-cal__legend-dot { width: 12px; height: 12px; background: rgba(193,10,30,0.12); border: 1px solid var(--red); display: inline-block; flex-shrink: 0; }\n  @media (max-width: 600px) { .rpl-cal { width: 100%; left: 0; right: auto; } .rpl-cal.is-right { left: 0; right: auto; } }\n  .rpl-submit-wrap { margin-top: clamp(36px, 5vw, 56px); text-align: left; }\n  .rpl-submit { display: inline-flex; align-items: center; justify-content: center; gap: 14px; background: var(--ink); color: var(--bg); border: 1px solid var(--ink); border-radius: 0; padding: 22px 56px; font-family: var(--font); font-size: 11px; letter-spacing: 0.36em; text-transform: uppercase; font-weight: 500; cursor: pointer; transition: background 0.4s cubic-bezier(.4,0,.2,1), color 0.4s cubic-bezier(.4,0,.2,1), border-color 0.4s cubic-bezier(.4,0,.2,1), opacity 0.3s ease; min-width: 260px; line-height: 1; }\n  .rpl-submit:hover { background: var(--red); color: #fff; border-color: var(--red); }\n  .rpl-submit[disabled] { opacity: 0.55; cursor: default; }\n  .rpl-submit[disabled]:hover { background: var(--ink); color: var(--bg); border-color: var(--ink); }\n  .rpl-spinner { width: 14px; height: 14px; border: 1.5px solid currentColor; border-right-color: transparent; border-radius: 50%; display: none; animation: rpl-spin 0.7s linear infinite; }\n  .rpl-submit.is-loading .rpl-spinner { display: inline-block; }\n  @keyframes rpl-spin { to { transform: rotate(360deg); } }\n  .rpl-form__note { margin-top: clamp(34px, 4vw, 48px); padding-top: 26px; border-top: 1px solid var(--line-soft); text-align: left; font-size: 12px; line-height: 1.75; color: var(--ink-soft); max-width: 54ch; font-weight: 300; }\n  .rpl-form__note strong { color: var(--ink); font-weight: 500; }\n  .rpl-result { display: none; text-align: left; padding: clamp(20px, 4vw, 40px) 0; }\n  .rpl-result.is-active { display: block; }\n  .rpl-result__icon { width: 56px; height: 56px; margin: 0 0 28px; border: 1px solid var(--sage); border-radius: 50%; display: flex; align-items: center; justify-content: center; }\n  .rpl-result__icon svg { width: 24px; height: 24px; stroke: var(--sage); fill: none; stroke-width: 1.5; }\n  .rpl-result__title { font-family: var(--font-serif); font-size: clamp(26px, 3.6vw, 40px); font-weight: 500; letter-spacing: -0.015em; color: var(--sage); margin-bottom: 16px; }\n  .rpl-result__text { font-size: 14px; line-height: 1.75; color: var(--ink-soft); max-width: 48ch; margin: 0; font-weight: 300; }\n  .rpl-result--error .rpl-result__icon { border-color: var(--red); }\n  .rpl-result--error .rpl-result__icon svg { stroke: var(--red); }\n  .rpl-result--error .rpl-result__title { color: var(--red); }\n  .rpl-result--error .rpl-retry { margin-top: 22px; display: inline-block; font-size: 11px; letter-spacing: 0.28em; text-transform: uppercase; border-bottom: 1px solid currentColor; padding-bottom: 2px; cursor: pointer; }\n  .rpl-gallery { border-top: 1px solid var(--line); padding: var(--section-py) var(--gx); background: var(--bg); }\n  .rpl-gallery__inner { max-width: var(--maxw); margin: 0 auto; }\n  .rpl-gallery__head { max-width: 52ch; margin: 0 auto clamp(44px, 6vw, 72px); text-align: center; }\n  .rpl-gallery__eyebrow { margin-bottom: 22px; }\n  .rpl-gallery__h2 { font-family: var(--font-serif); font-weight: 500; font-size: clamp(30px, 4.2vw, 50px); line-height: 1.06; letter-spacing: -0.015em; margin-bottom: 18px; }\n  .rpl-gallery__h2 em { font-style: italic; font-weight: 500; color: var(--red); }\n  .rpl-gallery__lead { font-size: 14px; line-height: 1.75; color: var(--ink-soft); font-weight: 300; }\n  .rpl-gallery__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(16px, 2.4vw, 32px); align-items: start; }\n  .rpl-gallery__fig { position: relative; overflow: hidden; background: var(--bg-cream); }\n  .rpl-gallery__fig img { width: 100%; height: 100%; object-fit: cover; transition: transform 1.2s cubic-bezier(.16,1,.3,1), filter 0.6s ease; }\n  .rpl-gallery__fig:hover img { transform: scale(1.045); }\n  .rpl-gallery__fig--a { aspect-ratio: 3\/4; } .rpl-gallery__fig--b { aspect-ratio: 4\/5; } .rpl-gallery__fig--c { aspect-ratio: 3\/4; }\n  @media (min-width: 901px) { .rpl-gallery__fig--b { margin-top: clamp(28px, 4vw, 64px); } }\n  @media (max-width: 900px) { .rpl-gallery__grid { grid-template-columns: 1fr 1fr; } .rpl-gallery__fig { aspect-ratio: 4\/5; } .rpl-gallery__fig--c { grid-column: 1 \/ -1; aspect-ratio: 16\/10; } }\n  @media (max-width: 540px) { .rpl-gallery__grid { grid-template-columns: 1fr; gap: 14px; } .rpl-gallery__fig, .rpl-gallery__fig--c { aspect-ratio: 4\/5; } }\n  .rpl-salon { border-top: 1px solid var(--line); background: var(--bg-cream); padding: var(--section-py) var(--gx); }\n  .rpl-salon__inner { max-width: var(--maxw); margin: 0 auto; display: grid; grid-template-columns: 1fr 1.4fr; gap: clamp(40px, 6vw, 90px); align-items: start; }\n  @media (max-width: 900px) { .rpl-salon__inner { grid-template-columns: 1fr; } }\n  .rpl-salon__num { margin-bottom: 22px; }\n  .rpl-salon__h2 { font-family: var(--font-serif); font-weight: 500; font-size: clamp(30px, 4.2vw, 50px); line-height: 1.05; letter-spacing: -0.015em; margin: 18px 0 36px; max-width: 14ch; }\n  .rpl-salon__h2 em { font-style: italic; font-weight: 500; color: var(--red); }\n  .rpl-salon__info { font-size: 14px; line-height: 1.85; }\n  .rpl-salon__info-block { padding: 18px 0; border-top: 1px solid var(--line-soft); display: grid; grid-template-columns: 110px 1fr; gap: 18px; }\n  .rpl-salon__info-block:last-child { border-bottom: 1px solid var(--line-soft); }\n  @media (max-width: 500px) { .rpl-salon__info-block { grid-template-columns: 1fr; gap: 4px; } }\n  .rpl-salon__info-key { font-size: 10px; letter-spacing: 0.32em; text-transform: uppercase; color: var(--red); padding-top: 4px; font-weight: 500; }\n  .rpl-salon__info-val { color: var(--ink); font-weight: 300; }\n  .rpl-salon__info-val a { border-bottom: 1px solid currentColor; padding-bottom: 1px; }\n  .rpl-salon__info-val a:hover { color: var(--red); }\n  .rpl-salon__info-val strong { font-weight: 500; }\n  .rpl-salon__map-wrap { position: relative; background: var(--bg); }\n  .rpl-salon__map { width: 100%; height: 100%; min-height: 480px; border: 1px solid var(--line); filter: grayscale(100%) contrast(1.05); transition: filter 0.5s ease; }\n  .rpl-salon__map:hover { filter: grayscale(0%); }\n  @media (max-width: 900px) { .rpl-salon__map { min-height: 360px; } }\n  .rpl-faq { border-top: 1px solid var(--line); padding: var(--section-py) var(--gx); }\n  .rpl-faq__inner { max-width: 900px; margin: 0 auto; }\n  .rpl-faq__num { margin-bottom: 22px; text-align: center; }\n  .rpl-faq__h2 { font-family: var(--font-serif); font-weight: 500; font-size: clamp(30px, 4.2vw, 50px); line-height: 1.05; letter-spacing: -0.015em; text-align: center; margin: 18px 0 clamp(46px, 6vw, 70px); }\n  .rpl-faq__h2 em { font-style: italic; font-weight: 500; color: var(--red); }\n  .rpl-faq__list { border-top: 1px solid var(--line-soft); }\n  .rpl-faq__item { border-bottom: 1px solid var(--line-soft); }\n  .rpl-faq__q { width: 100%; background: none; border: none; text-align: left; padding: 28px 0; font-family: var(--font-serif); font-size: clamp(17px, 1.5vw, 20px); font-weight: 500; color: var(--ink); cursor: pointer; display: flex; justify-content: space-between; align-items: center; gap: 24px; transition: color 0.2s ease; line-height: 1.4; }\n  .rpl-faq__q:hover { color: var(--red); }\n  .rpl-faq__q-icon { flex-shrink: 0; width: 14px; height: 14px; position: relative; }\n  .rpl-faq__q-icon::before, .rpl-faq__q-icon::after { content: ''; position: absolute; background: var(--red); top: 50%; left: 50%; transform: translate(-50%, -50%); }\n  .rpl-faq__q-icon::before { width: 14px; height: 1.5px; }\n  .rpl-faq__q-icon::after { width: 1.5px; height: 14px; transition: transform 0.3s ease; }\n  .rpl-faq__item.is-open .rpl-faq__q-icon::after { transform: translate(-50%, -50%) rotate(90deg); }\n  .rpl-faq__a { max-height: 0; overflow: hidden; transition: max-height 0.4s cubic-bezier(.4,0,.2,1); }\n  .rpl-faq__a-inner { padding: 0 0 32px; font-size: 14px; line-height: 1.85; color: var(--ink-soft); max-width: 72ch; font-weight: 300; }\n  .rpl-faq__item.is-open .rpl-faq__a { max-height: 600px; }\n  .rpl-final { border-top: 1px solid var(--line); padding: clamp(80px, 11vw, 150px) var(--gx); text-align: center; background: var(--bg); }\n  .rpl-final__eyebrow { margin-bottom: 24px; }\n  .rpl-final__h2 { font-family: var(--font-serif); font-weight: 500; font-size: clamp(36px, 5.8vw, 68px); line-height: 1; letter-spacing: -0.02em; max-width: 16ch; margin: 0 auto clamp(40px, 5vw, 60px); }\n  .rpl-final__h2 em { font-style: italic; font-weight: 500; color: var(--red); }\n  .rpl-final__alt { margin-top: 38px; font-size: 11px; letter-spacing: 0.28em; text-transform: uppercase; opacity: 0.6; font-weight: 300; }\n  .rpl-final__alt a { border-bottom: 1px solid currentColor; padding-bottom: 2px; transition: color 0.2s ease; }\n  .rpl-final__alt a:hover { color: var(--red); opacity: 1; }\n  @media (prefers-reduced-motion: no-preference) {\n    .rpl-fade { opacity: 0; transform: translateY(24px); transition: opacity 1s cubic-bezier(.4,0,.2,1), transform 1s cubic-bezier(.4,0,.2,1); }\n    .rpl-fade.is-in { opacity: 1; transform: translateY(0); }\n    .rpl-fade--d1 { transition-delay: 0.08s; } .rpl-fade--d2 { transition-delay: 0.16s; } .rpl-fade--d3 { transition-delay: 0.24s; } .rpl-fade--d4 { transition-delay: 0.32s; }\n  }\n  .rpl-hero__sub, .rpl-form__lead, .rpl-form__note, .rpl-result__text, .rpl-gallery__lead,\n  .rpl-salon__info, .rpl-salon__info-val, .rpl-salon__info-val a, .rpl-faq__a-inner { font-family: var(--font-body); letter-spacing: 0; }\n<\/style>\n<div class=\"rpl\">\n  <section class=\"rpl-hero\">\n    <div class=\"rpl-hero__text\">\n      <div class=\"rpl-hero__eyebrow rpl-eyebrow rpl-fade\">Salon &amp; studio \u00b7 Warszawa \u00b7 \u015ar\u00f3dmie\u015bcie<\/div>\n      <h1 class=\"rpl-hero__h1 rpl-fade rpl-fade--d1\">Zarezerwuj <em>wizyt\u0119<\/em><\/h1>\n      <p class=\"rpl-hero__sub rpl-fade rpl-fade--d2\">ul. Lindleya 16\/509, Warszawa. Przymierz plisowane suknie z autorskiej kolekcji REPULO'S i zam\u00f3w kr\u00f3j szyty na miar\u0119. Wizyty wy\u0142\u0105cznie po wcze\u015bniejszym um\u00f3wieniu, w kameralnej, prywatnej atmosferze.<\/p>\n      <a href=\"#rezerwacja\" class=\"rpl-btn rpl-fade rpl-fade--d3\">Wype\u0142nij formularz\n        <span class=\"rpl-btn__arrow\"><svg viewBox=\"0 0 14 10\"><path d=\"M9 0l-1.4 1.4L11.2 5H0v2h11.2L7.6 8.6 9 10l5-5z\"\/><\/svg><\/span><\/a>\n    <\/div>\n    <div class=\"rpl-hero__visual rpl-fade\">\n      <div class=\"rpl-hero__img-wrap\">\n        <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/repulos.com\/wp-content\/uploads\/2026\/04\/IMG_9295-scaled.webp\" alt=\"Plisowana suknia wieczorowa REPULO'S w salonie w Warszawie \u2014 autorska kolekcja Kateryny Nechyporenko\" class=\"rpl-hero__img\" loading=\"eager\" fetchpriority=\"high\" width=\"800\" height=\"1000\">\n      <\/div>\n    <\/div>\n  <\/section>\n  <div class=\"rpl-assure rpl-fade\">\n    <div class=\"rpl-assure__grid\">\n      <div class=\"rpl-assure__item\"><div class=\"rpl-assure__k\">Konsultacja<\/div><div class=\"rpl-assure__v\">Bezp\u0142atna konsultacja stylistyczna<\/div><\/div>\n      <div class=\"rpl-assure__item\"><div class=\"rpl-assure__k\">Krawiectwo<\/div><div class=\"rpl-assure__v\">Szycie na miar\u0119 bez dop\u0142at<\/div><\/div>\n      <div class=\"rpl-assure__item\"><div class=\"rpl-assure__k\">Atmosfera<\/div><div class=\"rpl-assure__v\">Prywatna wizyta, pe\u0142na uwaga<\/div><\/div>\n    <\/div>\n  <\/div>\n  <section class=\"rpl-form\" id=\"rezerwacja\">\n    <div class=\"rpl-form__inner\">\n      <div class=\"rpl-form__num rpl-eyebrow rpl-fade\">01 \u00b7 Rezerwacja<\/div>\n      <h2 class=\"rpl-form__h2 rpl-fade rpl-fade--d1\">Wybierz <em>termin<\/em> wizyty<\/h2>\n      <p class=\"rpl-form__lead rpl-fade rpl-fade--d2\">Wype\u0142nij kr\u00f3tki formularz. Rezerwacja mo\u017cliwa najwcze\u015bniej na 2 godziny od bie\u017c\u0105cej chwili. Dok\u0142adny termin potwierdzimy indywidualnym mailem.<\/p>\n      <form id=\"rpl-reservation-form\" class=\"rpl-form-shell rpl-fade rpl-fade--d3\" novalidate>\n        <input type=\"hidden\" name=\"access_key\" value=\"b74dc836-9848-4058-ab7c-e30a0e46d5f8\">\n        <input type=\"hidden\" name=\"subject\" value=\"Nowa rezerwacja wizyty \u00b7 Salon REPULO'S Warszawa\">\n        <input type=\"hidden\" name=\"from_name\" value=\"REPULO'S \u00b7 Salon Warszawa\">\n        <input type=\"checkbox\" name=\"botcheck\" class=\"rpl-honeypot\" tabindex=\"-1\" autocomplete=\"off\">\n        <div class=\"rpl-row\">\n          <div class=\"rpl-field\"><label class=\"rpl-field__label\" for=\"rpl-name\">Imi\u0119 i nazwisko<\/label><input type=\"text\" id=\"rpl-name\" name=\"Imi\u0119 i nazwisko\" required autocomplete=\"name\"><\/div>\n          <div class=\"rpl-field\"><label class=\"rpl-field__label\" for=\"rpl-phone\">Telefon<\/label><input type=\"tel\" id=\"rpl-phone\" name=\"Telefon\" required autocomplete=\"tel\" placeholder=\"+48\"><\/div>\n        <\/div>\n        <div class=\"rpl-row rpl-row--single\">\n          <div class=\"rpl-field\"><label class=\"rpl-field__label\" for=\"rpl-email\">E-mail<\/label><input type=\"email\" id=\"rpl-email\" name=\"email\" required autocomplete=\"email\"><\/div>\n        <\/div>\n        <div class=\"rpl-row\">\n          <div class=\"rpl-field rpl-datepicker\">\n            <label class=\"rpl-field__label\" for=\"rpl-date-trigger\">Data wizyty<\/label>\n            <button type=\"button\" id=\"rpl-date-trigger\" class=\"rpl-datepicker__trigger is-empty\" aria-haspopup=\"dialog\" aria-expanded=\"false\">Wybierz dat\u0119<\/button>\n            <input type=\"hidden\" id=\"rpl-date\" name=\"Data wizyty\">\n            <div class=\"rpl-cal\" id=\"rpl-cal\" role=\"dialog\" aria-label=\"Wyb\u00f3r daty\" hidden>\n              <div class=\"rpl-cal__head\">\n                <button type=\"button\" class=\"rpl-cal__nav\" id=\"rpl-cal-prev\" aria-label=\"Poprzedni miesi\u0105c\">\u2039<\/button>\n                <div class=\"rpl-cal__title\" id=\"rpl-cal-title\"><\/div>\n                <button type=\"button\" class=\"rpl-cal__nav\" id=\"rpl-cal-next\" aria-label=\"Nast\u0119pny miesi\u0105c\">\u203a<\/button>\n              <\/div>\n              <div class=\"rpl-cal__weekdays\"><span>Pn<\/span><span>Wt<\/span><span>\u015ar<\/span><span>Cz<\/span><span>Pt<\/span><span>So<\/span><span>Nd<\/span><\/div>\n              <div class=\"rpl-cal__grid\" id=\"rpl-cal-grid\"><\/div>\n              <div class=\"rpl-cal__legend\"><span class=\"rpl-cal__legend-dot\"><\/span> Termin niedost\u0119pny (salon nieczynny)<\/div>\n            <\/div>\n            <div class=\"rpl-field__hint\" id=\"rpl-date-hint\"><\/div>\n          <\/div>\n          <div class=\"rpl-field\">\n            <label class=\"rpl-field__label\" for=\"rpl-time\">Preferowana godzina<\/label>\n            <select id=\"rpl-time\" name=\"Preferowana godzina\" required>\n              <option value=\"\">Najpierw wybierz dat\u0119<\/option>\n            <\/select>\n            <div class=\"rpl-field__hint\" id=\"rpl-time-hint\">Rezerwacja mo\u017cliwa najwcze\u015bniej na 2 godziny od teraz. Wybierz p\u00f3\u017aniejsz\u0105 godzin\u0119 lub inny dzie\u0144.<\/div>\n          <\/div>\n        <\/div>\n        <div class=\"rpl-row rpl-row--single\">\n          <div class=\"rpl-field\">\n            <label class=\"rpl-field__label\" for=\"rpl-occ\">Okazja<\/label>\n            <select id=\"rpl-occ\" name=\"Okazja\" required>\n              <option value=\"\">Wybierz okazj\u0119<\/option>\n              <option>Wesele<\/option><option>Gala<\/option><option>Studni\u00f3wka<\/option><option>Jubileusz<\/option><option>Komunia<\/option><option>Inna<\/option>\n            <\/select>\n          <\/div>\n        <\/div>\n        <div class=\"rpl-row rpl-row--single\">\n          <div class=\"rpl-field\"><label class=\"rpl-field__label\" for=\"rpl-msg\">Wiadomo\u015b\u0107 (opcjonalnie)<\/label><textarea id=\"rpl-msg\" name=\"Wiadomo\u015b\u0107\" rows=\"3\" placeholder=\"Modele, kt\u00f3re Ci\u0119 interesuj\u0105, osoba towarzysz\u0105ca, pytania.\"><\/textarea><\/div>\n        <\/div>\n        <div class=\"rpl-submit-wrap\">\n          <button type=\"submit\" class=\"rpl-submit\" id=\"rpl-submit-btn\"><span class=\"rpl-spinner\" aria-hidden=\"true\"><\/span><span class=\"rpl-submit-label\">Zarezerwuj wizyt\u0119<\/span><\/button>\n        <\/div>\n      <\/form>\n      <div class=\"rpl-result rpl-result--success\" id=\"rpl-success\" role=\"status\" aria-live=\"polite\">\n        <div class=\"rpl-result__icon\"><svg viewBox=\"0 0 24 24\"><path d=\"M5 13l4 4L19 7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><\/div>\n        <div class=\"rpl-result__title\">Dzi\u0119kujemy za zg\u0142oszenie<\/div>\n        <p class=\"rpl-result__text\">Otrzymali\u015bmy Twoj\u0105 rezerwacj\u0119. Dok\u0142adny termin wizyty potwierdzimy indywidualnym mailem w ci\u0105gu od 2 do 4 godzin w godzinach pracy salonu.<\/p>\n      <\/div>\n      <div class=\"rpl-result rpl-result--error\" id=\"rpl-error\" role=\"alert\" aria-live=\"assertive\">\n        <div class=\"rpl-result__icon\"><svg viewBox=\"0 0 24 24\"><path d=\"M12 8v5M12 16.5v.01M12 3l9 16H3z\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><\/div>\n        <div class=\"rpl-result__title\">Co\u015b posz\u0142o nie tak<\/div>\n        <p class=\"rpl-result__text\">Nie uda\u0142o si\u0119 wys\u0142a\u0107 formularza. Spr\u00f3buj ponownie lub napisz do nas na WhatsApp: <a href=\"https:\/\/wa.me\/48508772319\" target=\"_blank\" rel=\"noopener\" style=\"border-bottom:1px solid currentColor\">+48 508 772 319<\/a>.<\/p>\n        <span class=\"rpl-retry\" id=\"rpl-retry\">Spr\u00f3buj ponownie<\/span>\n      <\/div>\n      <p class=\"rpl-form__note rpl-fade\" id=\"rpl-note\">Po wys\u0142aniu formularza skontaktujemy si\u0119 z Tob\u0105, aby potwierdzi\u0107 <strong>dok\u0142adny termin wizyty<\/strong>. Potwierdzenie wy\u015blemy indywidualnym mailem w ci\u0105gu od 2 do 4 godzin w godzinach pracy salonu.<\/p>\n    <\/div>\n  <\/section>\n  <section class=\"rpl-gallery\">\n    <div class=\"rpl-gallery__inner\">\n      <div class=\"rpl-gallery__head\">\n        <div class=\"rpl-gallery__eyebrow rpl-eyebrow rpl-fade\">Wn\u0119trze salonu<\/div>\n        <h2 class=\"rpl-gallery__h2 rpl-fade rpl-fade--d1\">Tak wygl\u0105da <em>wizyta<\/em><\/h2>\n        <p class=\"rpl-gallery__lead rpl-fade rpl-fade--d2\">Kameralna przestrze\u0144 w sercu \u015ar\u00f3dmie\u015bcia, w kt\u00f3rej bez po\u015bpiechu przymierzysz plisowane modele z autorskiej kolekcji i dobierzesz kr\u00f3j pod swoj\u0105 okazj\u0119.<\/p>\n      <\/div>\n      <div class=\"rpl-gallery__grid\">\n        <figure class=\"rpl-gallery__fig rpl-gallery__fig--a rpl-fade\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/repulos.com\/wp-content\/uploads\/2026\/05\/IMG_1103-scaled.webp\" alt=\"Plisowana suknia REPULO'S na wizyt\u0119 w salonie w Warszawie\" loading=\"lazy\" width=\"800\" height=\"1067\"><\/figure>\n        <figure class=\"rpl-gallery__fig rpl-gallery__fig--b rpl-fade rpl-fade--d1\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/repulos.com\/wp-content\/uploads\/2026\/05\/IMG_1037-scaled.webp\" alt=\"Autorska kolekcja plisowanej odzie\u017cy wieczorowej \u2014 salon REPULO'S Warszawa\" loading=\"lazy\" width=\"800\" height=\"1000\"><\/figure>\n        <figure class=\"rpl-gallery__fig rpl-gallery__fig--c rpl-fade rpl-fade--d2\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/repulos.com\/wp-content\/uploads\/2026\/05\/IMG_1052-scaled.webp\" alt=\"Stylizacja na gal\u0119 i wesele \u2014 plisowana suknia z salonu REPULO'S w Warszawie\" loading=\"lazy\" width=\"800\" height=\"1067\"><\/figure>\n      <\/div>\n    <\/div>\n  <\/section>\n  <section class=\"rpl-salon\">\n    <div class=\"rpl-salon__inner\">\n      <div>\n        <div class=\"rpl-salon__num rpl-eyebrow rpl-fade\">02 \u00b7 Adres<\/div>\n        <h2 class=\"rpl-salon__h2 rpl-fade rpl-fade--d1\">Salon w sercu <em>\u015ar\u00f3dmie\u015bcia<\/em><\/h2>\n        <div class=\"rpl-salon__info rpl-fade rpl-fade--d2\">\n          <div class=\"rpl-salon__info-block\"><div class=\"rpl-salon__info-key\">Adres<\/div><div class=\"rpl-salon__info-val\"><strong>ul. W. H. Lindleya 16\/509<\/strong><br>02-013 Warszawa<\/div><\/div>\n          <div class=\"rpl-salon__info-block\"><div class=\"rpl-salon__info-key\">Godziny<\/div><div class=\"rpl-salon__info-val\">Pon\u2013pt 9:00\u201319:00 \u00b7 Sob 11:00\u201319:00 \u00b7 Nd 11:00\u201317:00<br>Wy\u0142\u0105cznie po wcze\u015bniejszej rezerwacji<\/div><\/div>\n          <div class=\"rpl-salon__info-block\"><div class=\"rpl-salon__info-key\">WhatsApp<\/div><div class=\"rpl-salon__info-val\"><a href=\"https:\/\/wa.me\/48508772319\" target=\"_blank\" rel=\"noopener\">+48 508 772 319<\/a><\/div><\/div>\n          <div class=\"rpl-salon__info-block\"><div class=\"rpl-salon__info-key\">Email<\/div><div class=\"rpl-salon__info-val\"><a href=\"mailto:order@repulos.com\">order@repulos.com<\/a><\/div><\/div>\n          <div class=\"rpl-salon__info-block\"><div class=\"rpl-salon__info-key\">Dojazd<\/div><div class=\"rpl-salon__info-val\">Metro M1 \u00b7 st. Centrum<br>Tramwaje 7, 9, 22, 24 \u00b7 Rondo ONZ<\/div><\/div>\n        <\/div>\n      <\/div>\n      <div class=\"rpl-salon__map-wrap rpl-fade rpl-fade--d3\">\n        <iframe class=\"rpl-salon__map\" src=\"https:\/\/www.google.com\/maps?q=ul.%20Williama%20Heerleina%20Lindleya%2016,%2002-013%20Warszawa&hl=pl&z=16&output=embed\" loading=\"lazy\" referrerpolicy=\"no-referrer-when-downgrade\" title=\"Salon REPULO'S \u2014 ul. Lindleya 16, Warszawa\" allowfullscreen><\/iframe>\n      <\/div>\n    <\/div>\n  <\/section>\n  <section class=\"rpl-faq\">\n    <div class=\"rpl-faq__inner\">\n      <div class=\"rpl-faq__num rpl-eyebrow rpl-fade\">03 \u00b7 Pytania<\/div>\n      <h2 class=\"rpl-faq__h2 rpl-fade rpl-fade--d1\">Najcz\u0119\u015bciej <em>pytane<\/em><\/h2>\n      <div class=\"rpl-faq__list rpl-fade rpl-fade--d2\">\n        <div class=\"rpl-faq__item\"><button class=\"rpl-faq__q\" aria-expanded=\"false\">Z jakim wyprzedzeniem trzeba zarezerwowa\u0107 wizyt\u0119?<span class=\"rpl-faq__q-icon\" aria-hidden=\"true\"><\/span><\/button><div class=\"rpl-faq__a\"><div class=\"rpl-faq__a-inner\">Wizyt\u0119 mo\u017cna zarezerwowa\u0107 najwcze\u015bniej na 2 godziny od bie\u017c\u0105cej chwili. Potrzebujemy tego czasu, aby dojecha\u0107 do salonu i przygotowa\u0107 si\u0119 na Twoj\u0105 wizyt\u0119. Godziny, kt\u00f3re s\u0105 zbyt blisko, s\u0105 automatycznie niedost\u0119pne w formularzu.<\/div><\/div><\/div>\n        <div class=\"rpl-faq__item\"><button class=\"rpl-faq__q\" aria-expanded=\"false\">W jakich godzinach mo\u017cna um\u00f3wi\u0107 wizyt\u0119?<span class=\"rpl-faq__q-icon\" aria-hidden=\"true\"><\/span><\/button><div class=\"rpl-faq__a\"><div class=\"rpl-faq__a-inner\">Wizyty umawiamy od poniedzia\u0142ku do pi\u0105tku w godzinach 9:00\u201319:00, w sobot\u0119 11:00\u201319:00, a w niedziel\u0119 11:00\u201317:00. Ostatni\u0105 wizyt\u0119 w dni powszednie i w sobot\u0119 rozpoczynamy o 18:00, a w niedziel\u0119 o 16:00.<\/div><\/div><\/div>\n        <div class=\"rpl-faq__item\"><button class=\"rpl-faq__q\" aria-expanded=\"false\">Czy s\u0105 terminy, w kt\u00f3rych salon jest nieczynny?<span class=\"rpl-faq__q-icon\" aria-hidden=\"true\"><\/span><\/button><div class=\"rpl-faq__a\"><div class=\"rpl-faq__a-inner\">W dniach od 10 do 23 lipca 2026 salon jest nieczynny. Terminy te s\u0105 w kalendarzu oznaczone na czerwono \u2014 w tym okresie rezerwacja wizyt jest niedost\u0119pna.<\/div><\/div><\/div>\n        <div class=\"rpl-faq__item\"><button class=\"rpl-faq__q\" aria-expanded=\"false\">Czy po wype\u0142nieniu formularza wizyta jest od razu potwierdzona?<span class=\"rpl-faq__q-icon\" aria-hidden=\"true\"><\/span><\/button><div class=\"rpl-faq__a\"><div class=\"rpl-faq__a-inner\">Nie od razu. Po wys\u0142aniu formularza zobaczysz potwierdzenie, \u017ce przyj\u0119li\u015bmy zg\u0142oszenie. Dok\u0142adny termin wizyty potwierdzimy indywidualnym mailem w ci\u0105gu od 2 do 4 godzin w godzinach pracy salonu.<\/div><\/div><\/div>\n        <div class=\"rpl-faq__item\"><button class=\"rpl-faq__q\" aria-expanded=\"false\">Jak d\u0142ugo trwa wizyta?<span class=\"rpl-faq__q-icon\" aria-hidden=\"true\"><\/span><\/button><div class=\"rpl-faq__a\"><div class=\"rpl-faq__a-inner\">Standardowa wizyta trwa od 45 do 90 minut. Ka\u017cd\u0105 wizyt\u0119 rezerwujemy indywidualnie i po\u015bwi\u0119camy klientce pe\u0142n\u0105 uwag\u0119.<\/div><\/div><\/div>\n        <div class=\"rpl-faq__item\"><button class=\"rpl-faq__q\" aria-expanded=\"false\">Czy wizyta jest p\u0142atna?<span class=\"rpl-faq__q-icon\" aria-hidden=\"true\"><\/span><\/button><div class=\"rpl-faq__a\"><div class=\"rpl-faq__a-inner\">Wizyta i konsultacja stylistyczna s\u0105 bezp\u0142atne. Nie pobieramy op\u0142aty rezerwacyjnej.<\/div><\/div><\/div>\n        <div class=\"rpl-faq__item\"><button class=\"rpl-faq__q\" aria-expanded=\"false\">Czy mog\u0119 przyj\u015b\u0107 z osob\u0105 towarzysz\u0105c\u0105?<span class=\"rpl-faq__q-icon\" aria-hidden=\"true\"><\/span><\/button><div class=\"rpl-faq__a\"><div class=\"rpl-faq__a-inner\">Tak. Zach\u0119camy do zabrania jednej osoby towarzysz\u0105cej. Je\u015bli planujesz wi\u0119ksz\u0105 grup\u0119, zaznacz to w polu Wiadomo\u015b\u0107 przy rezerwacji.<\/div><\/div><\/div>\n        <div class=\"rpl-faq__item\"><button class=\"rpl-faq__q\" aria-expanded=\"false\">Czy modele s\u0105 szyte na miar\u0119?<span class=\"rpl-faq__q-icon\" aria-hidden=\"true\"><\/span><\/button><div class=\"rpl-faq__a\"><div class=\"rpl-faq__a-inner\">Tak. Ka\u017cdy model REPULO'S szyjemy na Twoje indywidualne miary i wzrost, bez dop\u0142at i bez sztywnej rozmiar\u00f3wki. Podczas wizyty przymierzysz modele z autorskiej kolekcji, a my dobierzemy kr\u00f3j idealnie dopasowany do Twojej sylwetki.<\/div><\/div><\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n  <section class=\"rpl-final\">\n    <div class=\"rpl-final__eyebrow rpl-eyebrow rpl-fade\">Gotowa, \u017ceby przyj\u015b\u0107?<\/div>\n    <h2 class=\"rpl-final__h2 rpl-fade rpl-fade--d1\">Zarezerwuj <em>sw\u00f3j<\/em> termin<\/h2>\n    <a href=\"#rezerwacja\" class=\"rpl-btn rpl-btn--lg rpl-fade rpl-fade--d2\">Wype\u0142nij formularz<span class=\"rpl-btn__arrow\"><svg viewBox=\"0 0 14 10\"><path d=\"M9 0l-1.4 1.4L11.2 5H0v2h11.2L7.6 8.6 9 10l5-5z\"\/><\/svg><\/span><\/a>\n    <div class=\"rpl-final__alt rpl-fade rpl-fade--d3\">lub napisz na <a href=\"https:\/\/wa.me\/48508772319\" target=\"_blank\" rel=\"noopener\">WhatsApp<\/a><\/div>\n  <\/section>\n<\/div>\n<script>\n(function(){\n  var root = document.querySelector('.rpl');\n  if(!root) return;\n  var items = root.querySelectorAll('.rpl-faq__item');\n  items.forEach(function(item){\n    var btn = item.querySelector('.rpl-faq__q');\n    if(!btn) return;\n    btn.addEventListener('click', function(){\n      var isOpen = item.classList.contains('is-open');\n      items.forEach(function(i){ i.classList.remove('is-open'); var b = i.querySelector('.rpl-faq__q'); if(b) b.setAttribute('aria-expanded','false'); });\n      if(!isOpen){ item.classList.add('is-open'); btn.setAttribute('aria-expanded','true'); }\n    });\n  });\n  root.querySelectorAll('a[href^=\"#\"]').forEach(function(a){\n    a.addEventListener('click', function(e){\n      var hash = a.getAttribute('href'); if(hash.length < 2) return;\n      var target = document.querySelector(hash);\n      if(target){ e.preventDefault(); target.scrollIntoView({ behavior:'smooth', block:'start' }); }\n    });\n  });\n  if ('IntersectionObserver' in window) {\n    var io = new IntersectionObserver(function(entries){\n      entries.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('is-in'); io.unobserve(e.target); } });\n    }, { threshold: 0.08, rootMargin: '0px 0px -40px 0px' });\n    root.querySelectorAll('.rpl-fade').forEach(function(el){ io.observe(el); });\n  } else {\n    root.querySelectorAll('.rpl-fade').forEach(function(el){ el.classList.add('is-in'); });\n  }\n  \/* ===== KONFIGURACJA ===== *\/\n  var LEAD_MS     = 2 * 60 * 60 * 1000;\n  var BLOCK_START = '2026-07-10';\n  var BLOCK_END   = '2026-07-23';\n  var SLOTS_API   = '\/wp-json\/repulos\/v1';\n  var MONTHS     = ['Stycze\u0144','Luty','Marzec','Kwiecie\u0144','Maj','Czerwiec','Lipiec','Sierpie\u0144','Wrzesie\u0144','Pa\u017adziernik','Listopad','Grudzie\u0144'];\n  var MONTHS_GEN = ['stycznia','lutego','marca','kwietnia','maja','czerwca','lipca','sierpnia','wrze\u015bnia','pa\u017adziernika','listopada','grudnia'];\n  var dateInput  = document.getElementById('rpl-date');\n  var timeSelect = document.getElementById('rpl-time');\n  var timeHint   = document.getElementById('rpl-time-hint');\n  var dateHint   = document.getElementById('rpl-date-hint');\n  var takenCache = {};\n  function pad(n){ return (n < 10 ? '0' : '') + n; }\n  function toDateStr(d){ return d.getFullYear() + '-' + pad(d.getMonth()+1) + '-' + pad(d.getDate()); }\n  function minAllowed(){ return new Date(Date.now() + LEAD_MS); }\n  function scheduleForDow(dow){\n    if(dow === 0) return { from: 11, lastStart: 16 };\n    if(dow === 6) return { from: 11, lastStart: 18 };\n    return { from: 9, lastStart: 18 };\n  }\n  function slotLabel(h){ return h + ':00 do ' + (h+1) + ':00'; }\n  function slotKey(h){ return pad(h) + ':00'; } \/\/ kanoniczny klucz wsp\u00f3lny dla PL\/EN\n  function slotDateTime(dateStr, hour){\n    if(!dateStr) return null;\n    var p = dateStr.split('-');\n    return new Date(+p[0], (+p[1])-1, +p[2], hour, 0, 0, 0);\n  }\n  function dowFromStr(dateStr){ var p = dateStr.split('-'); return new Date(+p[0], (+p[1])-1, +p[2]).getDay(); }\n  function isDateBlocked(dateStr){ return !!dateStr && dateStr >= BLOCK_START && dateStr <= BLOCK_END; }\n  function showDateHint(msg){ if(dateHint){ dateHint.textContent = msg; dateHint.classList.add('is-visible'); } }\n  function clearDateHint(){ if(dateHint){ dateHint.classList.remove('is-visible'); } }\n  function showTimeHint(){ if(timeHint) timeHint.classList.add('is-visible'); if(timeSelect) timeSelect.setCustomValidity('Rezerwacja mozliwa najwczesniej na 2 godziny od teraz.'); }\n  function clearTimeHint(){ if(timeHint) timeHint.classList.remove('is-visible'); if(timeSelect) timeSelect.setCustomValidity(''); }\n  \/* ===== W\u0141ASNY KALENDARZ ===== *\/\n  var trigger  = document.getElementById('rpl-date-trigger');\n  var cal      = document.getElementById('rpl-cal');\n  var calTitle = document.getElementById('rpl-cal-title');\n  var calGrid  = document.getElementById('rpl-cal-grid');\n  var calPrev  = document.getElementById('rpl-cal-prev');\n  var calNext  = document.getElementById('rpl-cal-next');\n  var today = new Date(); today.setHours(0,0,0,0);\n  var todayStr = toDateStr(today);\n  var viewY = today.getFullYear();\n  var viewM = today.getMonth();\n  function fmtDisplay(ds){ var p = ds.split('-'); return parseInt(p[2],10) + ' ' + MONTHS_GEN[parseInt(p[1],10)-1] + ' ' + p[0]; }\n  function openCal(){\n    if(!cal) return;\n    cal.hidden = false;\n    trigger.setAttribute('aria-expanded','true');\n    renderCal();\n    cal.classList.remove('is-right');\n    var rect = cal.getBoundingClientRect();\n    if(rect.right > window.innerWidth - 8){ cal.classList.add('is-right'); }\n  }\n  function closeCal(){ if(!cal) return; cal.hidden = true; trigger.setAttribute('aria-expanded','false'); }\n  function toggleCal(){ cal.hidden ? openCal() : closeCal(); }\n  function renderCal(){\n    calTitle.textContent = MONTHS[viewM] + ' ' + viewY;\n    calPrev.disabled = (viewY === today.getFullYear() && viewM === today.getMonth());\n    calGrid.innerHTML = '';\n    var first = new Date(viewY, viewM, 1);\n    var offset = (first.getDay() + 6) % 7;\n    var daysInMonth = new Date(viewY, viewM+1, 0).getDate();\n    for(var i=0; i<offset; i++){ var e = document.createElement('span'); e.className = 'rpl-cal__day is-empty'; calGrid.appendChild(e); }\n    for(var d=1; d<=daysInMonth; d++){\n      var ds = viewY + '-' + pad(viewM+1) + '-' + pad(d);\n      var btn = document.createElement('button');\n      btn.type = 'button'; btn.className = 'rpl-cal__day'; btn.textContent = d;\n      if(isDateBlocked(ds)){ btn.classList.add('is-blocked'); btn.disabled = true; btn.title = 'Salon nieczynny'; }\n      else if(ds < todayStr){ btn.classList.add('is-past'); btn.disabled = true; }\n      else {\n        if(ds === dateInput.value){ btn.classList.add('is-selected'); }\n        (function(dsl){ btn.addEventListener('click', function(){ selectDate(dsl); }); })(ds);\n      }\n      calGrid.appendChild(btn);\n    }\n  }\n  function selectDate(ds){\n    dateInput.value = ds;\n    trigger.textContent = fmtDisplay(ds);\n    trigger.classList.remove('is-empty');\n    clearDateHint();\n    closeCal();\n    buildTimeOptions();\n  }\n  function calShiftMonth(delta){\n    viewM += delta;\n    if(viewM < 0){ viewM = 11; viewY--; } else if(viewM > 11){ viewM = 0; viewY++; }\n    renderCal();\n  }\n  if(trigger){ trigger.addEventListener('click', function(e){ e.stopPropagation(); toggleCal(); }); }\n  if(calPrev){ calPrev.addEventListener('click', function(){ if(!calPrev.disabled) calShiftMonth(-1); }); }\n  if(calNext){ calNext.addEventListener('click', function(){ calShiftMonth(1); }); }\n  if(cal){ cal.addEventListener('click', function(e){ e.stopPropagation(); }); }\n  document.addEventListener('click', function(e){ if(cal && !cal.hidden && !cal.contains(e.target) && e.target !== trigger){ closeCal(); } });\n  \/* ===== GODZINY ===== *\/\n  function setTimePlaceholder(text){\n    if(!timeSelect) return;\n    timeSelect.innerHTML = '';\n    var o = document.createElement('option'); o.value = ''; o.textContent = text;\n    timeSelect.appendChild(o);\n  }\n  function buildTimeOptions(){\n    if(!dateInput || !timeSelect) return;\n    var dateStr = dateInput.value;\n    clearTimeHint();\n    if(!dateStr){ setTimePlaceholder('Najpierw wybierz dat\u0119'); return; }\n    if(isDateBlocked(dateStr)){ setTimePlaceholder('Termin niedost\u0119pny'); return; }\n    var prev  = timeSelect.value;\n    var sched = scheduleForDow(dowFromStr(dateStr));\n    var min   = minAllowed().getTime();\n    var hours = [];\n    for(var h = sched.from; h <= sched.lastStart; h++){\n      var dt = slotDateTime(dateStr, h);\n      if(dt && dt.getTime() < min){ continue; } \/\/ za mniej ni\u017c 2h \u2013 nie pokazuj\n      hours.push(h);\n    }\n    if(!hours.length){ setTimePlaceholder('Brak wolnych godzin \u2014 wybierz inny dzie\u0144'); return; }\n    setTimePlaceholder('Wybierz godzin\u0119');\n    hours.forEach(function(h){\n      var o = document.createElement('option');\n      o.value = slotLabel(h);       \/\/ etykieta w mailu (PL)\n      o.textContent = slotLabel(h);\n      o.dataset.slot = slotKey(h);  \/\/ kanoniczny klucz do API\n      timeSelect.appendChild(o);\n    });\n    if(prev){\n      var still = Array.prototype.slice.call(timeSelect.options).filter(function(op){ return op.value === prev; });\n      if(still.length){ timeSelect.value = prev; }\n    }\n    applyTakenSlots(dateStr);\n  }\n  function applyTakenSlots(dateStr){\n    fetchTaken(dateStr, function(taken){\n      if(!dateInput || dateInput.value !== dateStr) return;\n      if(!taken || !taken.length) return;\n      Array.prototype.slice.call(timeSelect.options).forEach(function(o){\n        if(o.value && o.dataset.slot && taken.indexOf(o.dataset.slot) !== -1){\n          if(timeSelect.value === o.value){ timeSelect.value = ''; }\n          o.parentNode.removeChild(o); \/\/ zaj\u0119ta godzina znika z listy\n        }\n      });\n    });\n  }\n  function fetchTaken(dateStr, cb){\n    if(takenCache[dateStr]){ cb(takenCache[dateStr]); return; }\n    fetch(SLOTS_API + '\/booked-slots?date=' + encodeURIComponent(dateStr) + '&_=' + Date.now(), { cache: 'no-store' })\n      .then(function(r){ return r.ok ? r.json() : []; })\n      .then(function(list){ var arr = Array.isArray(list) ? list : (list && list.slots ? list.slots : []); takenCache[dateStr] = arr; cb(arr); })\n      .catch(function(){ cb([]); });\n  }\n  function markSlotBooked(dateStr, slotKeyVal){\n    if(!dateStr || !slotKeyVal) return;\n    if(takenCache[dateStr]){ takenCache[dateStr].push(slotKeyVal); }\n    fetch(SLOTS_API + '\/book-slot', { method:'POST', headers:{ 'Content-Type':'application\/json' }, body: JSON.stringify({ date: dateStr, time: slotKeyVal }) }).catch(function(){});\n  }\n  function isLeadTimeOk(){\n    if(!dateInput || !timeSelect) return true;\n    var sel = timeSelect.options[timeSelect.selectedIndex];\n    if(!sel || !sel.value) return true;\n    var hour = parseInt(sel.value, 10);\n    var dt = slotDateTime(dateInput.value, hour);\n    if(!dt) return true;\n    return dt.getTime() >= minAllowed().getTime();\n  }\n  if(timeSelect) timeSelect.addEventListener('change', clearTimeHint);\n  buildTimeOptions();\n  \/* ===== Web3Forms submit ===== *\/\n  var form = document.getElementById('rpl-reservation-form');\n  var btn = document.getElementById('rpl-submit-btn');\n  var success = document.getElementById('rpl-success');\n  var errorEl = document.getElementById('rpl-error');\n  var note = document.getElementById('rpl-note');\n  var retry = document.getElementById('rpl-retry');\n  if(!form) return;\n  function setLoading(state){\n    if(state){ btn.classList.add('is-loading'); btn.setAttribute('disabled','disabled'); btn.querySelector('.rpl-submit-label').textContent = 'Wysy\u0142anie...'; }\n    else { btn.classList.remove('is-loading'); btn.removeAttribute('disabled'); btn.querySelector('.rpl-submit-label').textContent = 'Zarezerwuj wizyt\u0119'; }\n  }\n  function showResult(el){ el.classList.add('is-active'); el.scrollIntoView({ behavior:'smooth', block:'center' }); }\n  if(retry){ retry.addEventListener('click', function(){ errorEl.classList.remove('is-active'); form.style.display = ''; if(note) note.style.display = ''; }); }\n  form.addEventListener('submit', function(e){\n    e.preventDefault();\n    if(form.querySelector('.rpl-honeypot') && form.querySelector('.rpl-honeypot').checked){ return; }\n    if(!dateInput.value){ showDateHint('Prosimy wybra\u0107 dat\u0119 wizyty.'); if(trigger){ trigger.focus(); trigger.scrollIntoView({ behavior:'smooth', block:'center' }); } return; }\n    if(isDateBlocked(dateInput.value)){ showDateHint('W dniach 10\u201323 lipca 2026 salon jest nieczynny.'); return; }\n    if(!isLeadTimeOk()){ showTimeHint(); form.reportValidity(); timeSelect.scrollIntoView({ behavior:'smooth', block:'center' }); return; }\n    clearTimeHint();\n    if(!form.checkValidity()){ form.reportValidity(); return; }\n    setLoading(true);\n    errorEl.classList.remove('is-active');\n    var selOpt = timeSelect.options[timeSelect.selectedIndex];\n    var bookedKey = selOpt ? selOpt.dataset.slot : '';\n    var bookedDate = dateInput.value;\n    var data = Object.fromEntries(new FormData(form).entries());\n    fetch('https:\/\/api.web3forms.com\/submit', { method:'POST', headers:{ 'Content-Type':'application\/json', 'Accept':'application\/json' }, body: JSON.stringify(data) })\n      .then(function(res){ return res.json(); })\n      .then(function(json){\n        setLoading(false);\n        if(json.success){\n          markSlotBooked(bookedDate, bookedKey);\n          form.style.display = 'none'; if(note) note.style.display = 'none';\n          showResult(success);\n          form.reset();\n          dateInput.value = ''; if(trigger){ trigger.textContent = 'Wybierz dat\u0119'; trigger.classList.add('is-empty'); }\n          buildTimeOptions();\n        } else { showResult(errorEl); form.style.display = 'none'; if(note) note.style.display = 'none'; }\n      })\n      .catch(function(){ setLoading(false); showResult(errorEl); form.style.display = 'none'; if(note) note.style.display = 'none'; });\n  });\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-2050affd e-flex e-con-boxed e-con e-parent\" data-id=\"2050affd\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3c06c279 elementor-widget elementor-widget-html\" data-id=\"3c06c279\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"pl\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>REPULO'S | Stopka (PL)<\/title>\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Manrope:wght@300;400;500;600;700&display=swap\" rel=\"stylesheet\">\n<style>\n  body { margin: 0; padding: 0; background: #efefef; font-family: 'Manrope', sans-serif; }\n<\/style>\n<\/head>\n<body>\n\n<style>\n  .repulos-pl-footer {\n    background: #FFFFFF;\n    color: #000000;\n    font-family: 'Manrope', 'Helvetica Neue', Arial, sans-serif;\n    font-weight: 300;\n    letter-spacing: 0.01em;\n    padding: clamp(40px, 5vw, 72px) clamp(16px, 4vw, 64px) clamp(20px, 2vw, 28px);\n    border-top: 1px solid #000000;\n    width: 100%;\n    box-sizing: border-box;\n  }\n\n  .repulos-pl-footer *,\n  .repulos-pl-footer *::before,\n  .repulos-pl-footer *::after { box-sizing: border-box; }\n\n  .repulos-pl-footer__inner { max-width: 100%; width: 100%; margin: 0 auto; }\n\n  \/* === Top grid: 6 columns === *\/\n  .repulos-pl-footer__top {\n    display: grid;\n    grid-template-columns: 1.5fr 1fr 0.85fr 1fr 1.1fr 1.4fr;\n    gap: clamp(20px, 2.5vw, 48px);\n    padding-bottom: clamp(32px, 4vw, 56px);\n  }\n\n  \/* === Brand === *\/\n  .repulos-pl-footer__brand-logo {\n    height: 87px;\n    margin-bottom: 24px;\n    display: flex;\n    align-items: center;\n  }\n  .repulos-pl-footer__brand-logo a { display: inline-block; line-height: 0; }\n  .repulos-pl-footer__brand-logo img { height: 87px; width: auto; display: block; max-width: 100%; }\n\n  .repulos-pl-footer__brand-desc {\n    font-size: 13px;\n    line-height: 1.5;\n    font-weight: 300;\n    color: #000000;\n    max-width: 340px;\n    margin: 0 0 16px;\n  }\n\n  .repulos-pl-footer__brand-tag {\n    font-size: 11px;\n    letter-spacing: 0.15em;\n    text-transform: uppercase;\n    font-weight: 500;\n    color: #000000;\n    border-top: 1px solid #000000;\n    padding-top: 12px;\n    margin-top: 6px;\n    display: inline-block;\n  }\n\n  \/* === Column titles \u2014 all align at bottom of 87px header band === *\/\n  .repulos-pl-footer__col-title {\n    font-size: 16px;\n    font-weight: 600;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: #000000;\n    margin: 0 0 24px;\n    min-height: 87px;\n    display: flex;\n    align-items: flex-end;\n    line-height: 1.2;\n  }\n\n  \/* === Lists === *\/\n  .repulos-pl-footer__list { list-style: none; padding: 0; margin: 0; }\n  .repulos-pl-footer__list li { margin-bottom: 8px; }\n  .repulos-pl-footer__list a {\n    color: #000000;\n    text-decoration: none;\n    font-size: 14px;\n    font-weight: 300;\n    letter-spacing: 0.01em;\n    line-height: 1.4;\n    display: inline-block;\n    border-bottom: 1px solid transparent;\n    padding-bottom: 1px;\n    transition: border-color 0.25s ease;\n  }\n  .repulos-pl-footer__list a:hover { border-bottom-color: #000000; }\n\n  \/* === Contact items === *\/\n  .repulos-pl-footer__contact-item {\n    font-size: 14px;\n    font-weight: 300;\n    margin-bottom: 12px;\n    color: #000000;\n    line-height: 1.35;\n  }\n  .repulos-pl-footer__contact-item a {\n    color: #000000;\n    text-decoration: none;\n    border-bottom: 1px solid transparent;\n    transition: border-color 0.25s ease;\n    padding-bottom: 1px;\n    word-break: break-word;\n  }\n  .repulos-pl-footer__contact-item a:hover { border-bottom-color: #000000; }\n  .repulos-pl-footer__contact-label {\n    font-size: 10px;\n    letter-spacing: 0.18em;\n    text-transform: uppercase;\n    font-weight: 500;\n    color: #8a8a8a;\n    display: block;\n    margin-bottom: 3px;\n  }\n\n  \/* === WhatsApp button === *\/\n  .repulos-pl-footer__whatsapp {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    gap: 10px;\n    background: #000000;\n    color: #FFFFFF !important;\n    padding: 13px 22px;\n    font-size: 12px;\n    font-weight: 500;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    text-decoration: none;\n    margin-top: 16px;\n    transition: background 0.25s ease;\n    border: none;\n  }\n  .repulos-pl-footer__whatsapp:hover,\n  .repulos-pl-footer__whatsapp:focus { background: #333333; color: #FFFFFF !important; }\n  .repulos-pl-footer__whatsapp svg { width: 15px; height: 15px; fill: #FFFFFF; flex-shrink: 0; }\n\n  \/* === Newsletter === *\/\n  .repulos-pl-footer__newsletter-desc {\n    font-size: 13px;\n    font-weight: 300;\n    line-height: 1.5;\n    margin: 0 0 16px;\n    color: #000000;\n    max-width: 380px;\n  }\n  .repulos-pl-footer__newsletter-form { display: flex; flex-direction: column; gap: 12px; width: 100%; }\n  .repulos-pl-footer__newsletter-input {\n    width: 100%;\n    background: transparent;\n    border: none;\n    border-bottom: 1px solid #000000;\n    padding: 10px 2px;\n    font-family: inherit;\n    font-size: 14px;\n    font-weight: 300;\n    color: #000000;\n    outline: none;\n    letter-spacing: 0.01em;\n  }\n  .repulos-pl-footer__newsletter-input::placeholder { color: #8a8a8a; font-weight: 300; }\n  .repulos-pl-footer__newsletter-input:focus { border-bottom-color: #000000; }\n  .repulos-pl-footer__newsletter-btn {\n    background: #000000;\n    color: #FFFFFF;\n    border: none;\n    padding: 13px 22px;\n    font-family: inherit;\n    font-size: 11.5px;\n    font-weight: 500;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    cursor: pointer;\n    transition: background 0.25s ease;\n    white-space: nowrap;\n    align-self: flex-start;\n  }\n  .repulos-pl-footer__newsletter-btn:hover,\n  .repulos-pl-footer__newsletter-btn:focus { background: #333333; }\n  .repulos-pl-footer__newsletter-btn:disabled { background: #8a8a8a; cursor: not-allowed; }\n  .repulos-pl-footer__newsletter-msg {\n    font-size: 12px;\n    font-weight: 400;\n    margin: 10px 0 0;\n    min-height: 16px;\n    letter-spacing: 0.02em;\n    color: #000000;\n    line-height: 1.4;\n  }\n  .repulos-pl-footer__newsletter-msg.is-success { color: #2d6a2d; }\n  .repulos-pl-footer__newsletter-msg.is-error   { color: #b00020; }\n  .repulos-pl-footer__newsletter-consent {\n    font-size: 10.5px;\n    line-height: 1.5;\n    color: #8a8a8a;\n    margin: 14px 0 0;\n    letter-spacing: 0.02em;\n  }\n  .repulos-pl-footer__newsletter-consent a {\n    color: #000000;\n    text-decoration: none;\n    border-bottom: 1px solid #d4d4d4;\n    transition: border-color 0.25s ease;\n  }\n  .repulos-pl-footer__newsletter-consent a:hover { border-bottom-color: #000000; }\n\n  \/* === Divider === *\/\n  .repulos-pl-footer__divider { height: 1px; background: #000000; margin: 0; width: 100%; }\n\n  \/* === Bottom bar === *\/\n  .repulos-pl-footer__bottom {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    padding-top: 24px;\n    flex-wrap: wrap;\n    gap: 16px;\n  }\n  .repulos-pl-footer__copyright { font-size: 12px; font-weight: 300; letter-spacing: 0.02em; color: #000000; }\n  .repulos-pl-footer__legal { display: flex; gap: 24px; flex-wrap: wrap; }\n  .repulos-pl-footer__legal a {\n    color: #000000;\n    text-decoration: none;\n    font-size: 12px;\n    font-weight: 300;\n    letter-spacing: 0.02em;\n    border-bottom: 1px solid transparent;\n    padding-bottom: 1px;\n    transition: border-color 0.25s ease;\n  }\n  .repulos-pl-footer__legal a:hover { border-bottom-color: #000000; }\n  .repulos-pl-footer__payments {\n    font-size: 11px;\n    letter-spacing: 0.12em;\n    text-transform: uppercase;\n    font-weight: 500;\n    color: #000000;\n    white-space: nowrap;\n  }\n\n  \/* ========================================================================\n     RESPONSIVE\n     ======================================================================== *\/\n\n  @media (min-width: 1600px) {\n    .repulos-pl-footer {\n      padding-left: clamp(48px, 6vw, 120px);\n      padding-right: clamp(48px, 6vw, 120px);\n    }\n  }\n\n  \/* Below 1200px \u2014 4 link cols + brand full row + newsletter full row *\/\n  @media (max-width: 1200px) {\n    .repulos-pl-footer__top {\n      grid-template-columns: repeat(4, 1fr);\n    }\n    .repulos-pl-footer__brand {\n      grid-column: 1 \/ -1;\n      margin-bottom: 8px;\n    }\n    .repulos-pl-footer__brand-logo { height: auto; }\n    .repulos-pl-footer__brand-desc { max-width: 540px; }\n    .repulos-pl-footer__col-title {\n      min-height: 0;\n      display: block;\n      margin-bottom: 18px;\n      font-size: 15px;\n    }\n    .repulos-pl-footer__col--newsletter {\n      grid-column: 1 \/ -1;\n      display: grid;\n      grid-template-columns: 1fr 1.4fr;\n      gap: 32px;\n      align-items: start;\n      padding-top: 20px;\n      margin-top: 8px;\n      border-top: 1px solid #e5e5e5;\n    }\n    .repulos-pl-footer__col--newsletter .repulos-pl-footer__col-title { grid-column: 1 \/ -1; }\n    .repulos-pl-footer__newsletter-desc { max-width: 100%; margin: 0; }\n  }\n\n  \/* Tablet portrait *\/\n  @media (max-width: 900px) {\n    .repulos-pl-footer__top { grid-template-columns: 1fr 1fr 1fr; }\n    .repulos-pl-footer__col--newsletter { grid-template-columns: 1fr; gap: 14px; }\n  }\n\n  @media (max-width: 768px) {\n    .repulos-pl-footer__top { grid-template-columns: 1fr 1fr; gap: 28px 24px; }\n    .repulos-pl-footer__brand-logo { margin-bottom: 18px; }\n    .repulos-pl-footer__brand-logo img { height: 78px; }\n    .repulos-pl-footer__col-title { margin-bottom: 14px; font-size: 14px; }\n    .repulos-pl-footer__bottom { flex-direction: column; align-items: flex-start; gap: 14px; }\n  }\n\n  @media (max-width: 540px) {\n    .repulos-pl-footer { padding-left: 18px; padding-right: 18px; }\n    .repulos-pl-footer__top { grid-template-columns: 1fr; gap: 28px; padding-bottom: 28px; }\n    .repulos-pl-footer__brand { grid-column: auto; }\n    .repulos-pl-footer__brand-logo img { height: 73px; }\n    .repulos-pl-footer__brand-desc { font-size: 13px; max-width: 100%; }\n    .repulos-pl-footer__col-title { font-size: 13.5px; }\n    .repulos-pl-footer__list a,\n    .repulos-pl-footer__contact-item { font-size: 13.5px; }\n    .repulos-pl-footer__list li { margin-bottom: 7px; }\n    .repulos-pl-footer__col--newsletter { padding-top: 4px; border-top: none; margin-top: 0; }\n    .repulos-pl-footer__whatsapp { display: flex; width: 100%; padding: 14px 16px; font-size: 11.5px; }\n    .repulos-pl-footer__newsletter-btn { width: 100%; padding: 14px 20px; text-align: center; }\n    .repulos-pl-footer__legal { gap: 10px 18px; }\n    .repulos-pl-footer__legal a { font-size: 12px; }\n    .repulos-pl-footer__payments { font-size: 10.5px; letter-spacing: 0.08em; white-space: normal; }\n  }\n\n  @media (max-width: 380px) {\n    .repulos-pl-footer__top { gap: 24px; }\n    .repulos-pl-footer__brand-logo img { height: 67px; }\n  }\n\n  @media (hover: none) {\n    .repulos-pl-footer__list a:active,\n    .repulos-pl-footer__contact-item a:active,\n    .repulos-pl-footer__legal a:active { opacity: 0.6; }\n    .repulos-pl-footer__whatsapp:active,\n    .repulos-pl-footer__newsletter-btn:active { background: #333333; }\n  }\n\n  \/* ========================================================================\n     SALON POPUP\n     ======================================================================== *\/\n  .repulos-pl-popup {\n    position: fixed;\n    inset: 0;\n    z-index: 999999;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    padding: 20px;\n    font-family: 'Manrope', 'Helvetica Neue', Arial, sans-serif;\n    opacity: 0;\n    visibility: hidden;\n    transition: opacity 0.35s ease, visibility 0.35s ease;\n  }\n  .repulos-pl-popup.is-open { opacity: 1; visibility: visible; }\n  .repulos-pl-popup[hidden] { display: none; }\n\n  .repulos-pl-popup *,\n  .repulos-pl-popup *::before,\n  .repulos-pl-popup *::after { box-sizing: border-box; }\n\n  .repulos-pl-popup__overlay {\n    position: absolute;\n    inset: 0;\n    background: rgba(0, 0, 0, 0.55);\n    cursor: pointer;\n  }\n\n  .repulos-pl-popup__dialog {\n    position: relative;\n    z-index: 1;\n    display: grid;\n    grid-template-columns: 0.9fr 1.1fr;\n    width: 100%;\n    max-width: 880px;\n    max-height: calc(100vh - 40px);\n    max-height: calc(100dvh - 40px);\n    background: #FFFFFF;\n    overflow: hidden;\n    transform: translateY(14px) scale(0.985);\n    transition: transform 0.4s ease;\n  }\n  .repulos-pl-popup.is-open .repulos-pl-popup__dialog { transform: translateY(0) scale(1); }\n\n  .repulos-pl-popup__close {\n    position: absolute;\n    top: 12px;\n    right: 14px;\n    z-index: 2;\n    width: 36px;\n    height: 36px;\n    background: transparent;\n    border: none;\n    color: #000000;\n    font-size: 28px;\n    font-weight: 300;\n    line-height: 1;\n    cursor: pointer;\n    padding: 0;\n    transition: opacity 0.25s ease;\n  }\n  .repulos-pl-popup__close:hover { opacity: 0.55; }\n\n  .repulos-pl-popup__media { position: relative; min-height: 100%; background: #f3f3f3; }\n  .repulos-pl-popup__media img {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    display: block;\n  }\n\n  .repulos-pl-popup__content {\n    padding: clamp(28px, 4vw, 48px) clamp(24px, 3.5vw, 44px);\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    min-height: 0;\n    overflow-y: auto;\n    overscroll-behavior: contain;\n    -webkit-overflow-scrolling: touch;\n  }\n  .repulos-pl-popup__eyebrow {\n    font-size: 11px;\n    letter-spacing: 0.2em;\n    text-transform: uppercase;\n    font-weight: 500;\n    color: #000000;\n    margin-bottom: 16px;\n  }\n  .repulos-pl-popup__title {\n    font-size: clamp(22px, 2.4vw, 30px);\n    font-weight: 300;\n    line-height: 1.2;\n    letter-spacing: 0.01em;\n    margin: 0 0 16px;\n    color: #000000;\n  }\n  .repulos-pl-popup__text {\n    font-size: 14.5px;\n    font-weight: 300;\n    line-height: 1.6;\n    color: #000000;\n    margin: 0 0 18px;\n  }\n  .repulos-pl-popup__address {\n    font-size: 13px;\n    font-weight: 400;\n    line-height: 1.5;\n    color: #000000;\n    margin: 0 0 20px;\n  }\n  .repulos-pl-popup__cta {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    align-self: flex-start;\n    background: #000000;\n    color: #FFFFFF;\n    text-decoration: none;\n    padding: 15px 32px;\n    font-size: 12px;\n    font-weight: 500;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    transition: background 0.25s ease;\n  }\n  .repulos-pl-popup__cta:hover { background: #333333; }\n  .repulos-pl-popup__notice {\n    margin: 16px 0 0;\n    font-size: 12px;\n    font-weight: 500;\n    line-height: 1.5;\n    letter-spacing: 0.03em;\n    color: #000000;\n  }\n\n  \/* Widoczny focus tylko dla nawigacji klawiatur\u0105 *\/\n  .repulos-pl-popup__dialog:focus { outline: none; }\n  .repulos-pl-popup__close:focus-visible,\n  .repulos-pl-popup__cta:focus-visible {\n    outline: 2px solid #000000;\n    outline-offset: 3px;\n  }\n\n  @media (prefers-reduced-motion: reduce) {\n    .repulos-pl-popup,\n    .repulos-pl-popup__dialog { transition: none; }\n  }\n\n  @media (max-width: 720px) {\n    .repulos-pl-popup { padding: 14px; }\n    .repulos-pl-popup__dialog {\n      grid-template-columns: 1fr;\n      grid-template-rows: 220px minmax(0, 1fr);\n      max-width: 440px;\n      max-height: calc(100vh - 28px);\n      max-height: calc(100dvh - 28px);\n    }\n    .repulos-pl-popup__media { height: 220px; min-height: 0; }\n    .repulos-pl-popup__media img { object-position: center 30%; }\n    .repulos-pl-popup__content {\n      padding: 26px 22px calc(28px + env(safe-area-inset-bottom, 0px));\n      justify-content: flex-start;\n    }\n    \/* Bia\u0142y kwadrat dla widocznego X na tle zdj\u0119cia *\/\n    .repulos-pl-popup__close {\n      top: 10px;\n      right: 10px;\n      width: 44px;\n      height: 44px;\n      background: #FFFFFF;\n      font-size: 26px;\n    }\n    .repulos-pl-popup__title { font-size: 23px; }\n    .repulos-pl-popup__cta { width: 100%; padding: 16px 24px; }\n  }\n\n  @media (max-width: 400px) {\n    .repulos-pl-popup { padding: 10px; }\n    .repulos-pl-popup__dialog {\n      grid-template-rows: 184px minmax(0, 1fr);\n      max-height: calc(100vh - 20px);\n      max-height: calc(100dvh - 20px);\n    }\n    .repulos-pl-popup__media { height: 184px; }\n    .repulos-pl-popup__content { padding: 22px 18px calc(24px + env(safe-area-inset-bottom, 0px)); }\n    .repulos-pl-popup__eyebrow { margin-bottom: 12px; }\n    .repulos-pl-popup__title { font-size: 22px; margin-bottom: 12px; }\n    .repulos-pl-popup__text { font-size: 14px; margin-bottom: 16px; }\n    .repulos-pl-popup__address { margin-bottom: 16px; }\n    .repulos-pl-popup__notice { font-size: 11.5px; margin-top: 14px; letter-spacing: 0.02em; }\n  }\n<\/style>\n\n<footer class=\"repulos-pl-footer\">\n  <div class=\"repulos-pl-footer__inner\">\n\n    <div class=\"repulos-pl-footer__top\">\n\n      <!-- Brand -->\n      <div class=\"repulos-pl-footer__brand\">\n        <div class=\"repulos-pl-footer__brand-logo\">\n          <a href=\"https:\/\/repulos.com\/\" aria-label=\"REPULO&#039;S, strona g\u0142\u00f3wna\">\n            <img decoding=\"async\" src=\"https:\/\/repulos.com\/wp-content\/uploads\/2026\/04\/1.png\" alt=\"REPULO'S\">\n          <\/a>\n        <\/div>\n        <p class=\"repulos-pl-footer__brand-desc\">\n          REPULO'S, europejska autorska marka eleganckiej odzie\u017cy damskiej. Projektuje Kateryna Nechyporenko z Warszawy. Unikalne kolekcje na wesele, studni\u00f3wk\u0119, gal\u0119 i inne wyj\u0105tkowe okazje.\n        <\/p>\n        <span class=\"repulos-pl-footer__brand-tag\">Salon Warszawa \u00b7 ul. Lindleya 16\/509<\/span>\n      <\/div>\n\n      <!-- Sklep -->\n      <div class=\"repulos-pl-footer__col\">\n        <h3 class=\"repulos-pl-footer__col-title\">Sklep<\/h3>\n        <ul class=\"repulos-pl-footer__list\">\n          <li><a href=\"https:\/\/repulos.com\/sklep\/\">Wszystkie produkty<\/a><\/li>\n          <li><a href=\"https:\/\/repulos.com\/product-category\/sukienki\/\">Sukienki<\/a><\/li>\n          <li><a href=\"https:\/\/repulos.com\/product-category\/zakiety\/\">\u017bakiety<\/a><\/li>\n          <li><a href=\"https:\/\/repulos.com\/product-category\/spodnie\/\">Spodnie<\/a><\/li>\n          <li><a href=\"https:\/\/repulos.com\/product-category\/spodnice\/\">Sp\u00f3dnice<\/a><\/li>\n          <li><a href=\"https:\/\/repulos.com\/product-category\/topy\/\">Topy<\/a><\/li>\n          <li><a href=\"https:\/\/repulos.com\/product-category\/szorty\/\">Szorty<\/a><\/li>\n          <li><a href=\"https:\/\/repulos.com\/product-category\/bestselery\/\">Bestsellery<\/a><\/li>\n        <\/ul>\n      <\/div>\n\n      <!-- Marka -->\n      <div class=\"repulos-pl-footer__col\">\n        <h3 class=\"repulos-pl-footer__col-title\">Marka<\/h3>\n        <ul class=\"repulos-pl-footer__list\">\n          <li><a href=\"https:\/\/repulos.com\/o-marce\/\">O marce<\/a><\/li>\n          <li><a href=\"https:\/\/repulos.com\/blog\/\">Blog<\/a><\/li>\n        <\/ul>\n      <\/div>\n\n      <!-- Informacje -->\n      <div class=\"repulos-pl-footer__col\">\n        <h3 class=\"repulos-pl-footer__col-title\">Informacje<\/h3>\n        <ul class=\"repulos-pl-footer__list\">\n          <li><a href=\"https:\/\/repulos.com\/rezerwacja-warszawa\/\">Um\u00f3w wizyt\u0119 w salonie<\/a><\/li>\n          <li><a href=\"https:\/\/repulos.com\/zwroty-i-reklamacje\/\">Zwroty i reklamacje<\/a><\/li>\n          <li><a href=\"https:\/\/repulos.com\/kontakt\/\">Kontakt<\/a><\/li>\n        <\/ul>\n      <\/div>\n\n      <!-- Kontakt -->\n      <div class=\"repulos-pl-footer__col\">\n        <h3 class=\"repulos-pl-footer__col-title\">Kontakt<\/h3>\n\n        <div class=\"repulos-pl-footer__contact-item\">\n          <span class=\"repulos-pl-footer__contact-label\">E-mail<\/span>\n          <a href=\"mailto:order@repulos.com\">order@repulos.com<\/a>\n        <\/div>\n\n        <div class=\"repulos-pl-footer__contact-item\">\n          <span class=\"repulos-pl-footer__contact-label\">Instagram<\/span>\n          <a href=\"https:\/\/www.instagram.com\/repulos_brand\/\" target=\"_blank\" rel=\"noopener noreferrer\">@repulos_brand<\/a>\n        <\/div>\n\n        <a href=\"https:\/\/wa.me\/380983045455\" class=\"repulos-pl-footer__whatsapp\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"Napisz na WhatsApp\">\n          <svg viewBox=\"0 0 24 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\"><path d=\"M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413Z\"\/><\/svg>\n          Napisz na WhatsApp\n        <\/a>\n      <\/div>\n\n      <!-- Newsletter -->\n      <div class=\"repulos-pl-footer__col repulos-pl-footer__col--newsletter\">\n        <h3 class=\"repulos-pl-footer__col-title\">Newsletter<\/h3>\n        <div>\n          <p class=\"repulos-pl-footer__newsletter-desc\">\n            Zapisz si\u0119 i otrzymuj informacje o premierach kolekcji, wydarzeniach w salonie i ekskluzywnych ofertach.\n          <\/p>\n\n          <form class=\"repulos-pl-footer__newsletter-form\" id=\"repulos-newsletter-form\" novalidate>\n            <input type=\"hidden\" name=\"access_key\" value=\"YOUR_WEB3FORMS_ACCESS_KEY\">\n            <input type=\"hidden\" name=\"subject\" value=\"Nowa subskrypcja newslettera REPULO'S\">\n            <input type=\"hidden\" name=\"from_name\" value=\"REPULO'S \u2014 Newsletter PL\">\n            <input type=\"checkbox\" name=\"botcheck\" style=\"display:none;\" tabindex=\"-1\" autocomplete=\"off\">\n\n            <input\n              type=\"email\"\n              name=\"email\"\n              class=\"repulos-pl-footer__newsletter-input\"\n              placeholder=\"Tw\u00f3j adres e-mail\"\n              required\n              autocomplete=\"email\">\n\n            <button type=\"submit\" class=\"repulos-pl-footer__newsletter-btn\">Zapisz si\u0119<\/button>\n          <\/form>\n\n          <p class=\"repulos-pl-footer__newsletter-msg\" id=\"repulos-newsletter-msg\" role=\"status\" aria-live=\"polite\"><\/p>\n\n          <p class=\"repulos-pl-footer__newsletter-consent\">\n            Zapisuj\u0105c si\u0119 akceptujesz <a href=\"https:\/\/repulos.com\/polityka-prywatnosci\/\">polityk\u0119 prywatno\u015bci<\/a>.\n          <\/p>\n        <\/div>\n      <\/div>\n\n    <\/div>\n\n    <div class=\"repulos-pl-footer__divider\"><\/div>\n\n    <div class=\"repulos-pl-footer__bottom\">\n\n      <div class=\"repulos-pl-footer__copyright\">\n        \u00a9 2026 REPULO'S. Wszelkie prawa zastrze\u017cone.\n      <\/div>\n\n      <div class=\"repulos-pl-footer__legal\">\n        <a href=\"https:\/\/repulos.com\/polityka-prywatnosci\/\">Polityka prywatno\u015bci<\/a>\n        <a href=\"https:\/\/repulos.com\/cookie-policy-eu\/\">Cookie<\/a>\n      <\/div>\n\n      <div class=\"repulos-pl-footer__payments\">\n        Visa \u00b7 Mastercard \u00b7 Apple Pay \u00b7 Google Pay\n      <\/div>\n\n    <\/div>\n\n  <\/div>\n<\/footer>\n\n<!-- ====================================================================\n     SALON POPUP\n     ==================================================================== -->\n<div class=\"repulos-pl-popup\" id=\"repulos-salon-popup\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"repulos-salon-popup-title\" hidden>\n  <div class=\"repulos-pl-popup__overlay\" data-popup-close><\/div>\n  <div class=\"repulos-pl-popup__dialog\" tabindex=\"-1\" aria-describedby=\"repulos-salon-popup-desc\">\n    <button class=\"repulos-pl-popup__close\" type=\"button\" aria-label=\"Zamknij\" data-popup-close>&times;<\/button>\n\n    <div class=\"repulos-pl-popup__media\">\n      <img decoding=\"async\" src=\"https:\/\/repulos.com\/wp-content\/uploads\/2026\/04\/IMG_2758-scaled.webp\" alt=\"Salon autorski REPULO'S w Warszawie\" loading=\"lazy\">\n    <\/div>\n\n    <div class=\"repulos-pl-popup__content\">\n      <span class=\"repulos-pl-popup__eyebrow\">Salon Warszawa<\/span>\n      <h2 class=\"repulos-pl-popup__title\" id=\"repulos-salon-popup-title\">Zapraszamy do salonu w Warszawie<\/h2>\n      <p class=\"repulos-pl-popup__text\" id=\"repulos-salon-popup-desc\">\n        W autorskim salonie w Warszawie mo\u017cesz przymierzy\u0107 wszystkie modele z kolekcji oraz z bliska pozna\u0107 tkaniny i kr\u00f3j.\n      <\/p>\n      <p class=\"repulos-pl-popup__address\">\n        ul. Williama Heerleina Lindleya 16\/509, Warszawa\n      <\/p>\n      <a class=\"repulos-pl-popup__cta\" href=\"https:\/\/repulos.com\/rezerwacja-warszawa\/\">Um\u00f3w wizyt\u0119<\/a>\n      <p class=\"repulos-pl-popup__notice\">\n        Wizyty wy\u0142\u0105cznie po wcze\u015bniejszej rezerwacji na stronie\n      <\/p>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function () {\n  \/* === Newsletter === *\/\n  var form = document.getElementById('repulos-newsletter-form');\n  var msg  = document.getElementById('repulos-newsletter-msg');\n  if (form && msg) {\n    form.addEventListener('submit', function (e) {\n      e.preventDefault();\n      var btn = form.querySelector('.repulos-pl-footer__newsletter-btn');\n      var emailInput = form.querySelector('input[name=\"email\"]');\n      var email = (emailInput.value || '').trim();\n      msg.className = 'repulos-pl-footer__newsletter-msg';\n      if (!email || !\/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(email)) {\n        msg.textContent = 'Podaj prawid\u0142owy adres e-mail.';\n        msg.classList.add('is-error');\n        emailInput.focus();\n        return;\n      }\n      btn.disabled = true;\n      var originalLabel = btn.textContent;\n      btn.textContent = 'Wysy\u0142anie\u2026';\n      msg.textContent = '';\n      var data = new FormData(form);\n      fetch('https:\/\/api.web3forms.com\/submit', {\n        method: 'POST',\n        headers: { 'Accept': 'application\/json' },\n        body: data\n      })\n        .then(function (res) { return res.json().then(function (j) { return { ok: res.ok, body: j }; }); })\n        .then(function (result) {\n          if (result.ok && result.body && result.body.success) {\n            msg.textContent = 'Dzi\u0119kujemy! Subskrypcja zosta\u0142a potwierdzona.';\n            msg.classList.add('is-success');\n            form.reset();\n          } else {\n            msg.textContent = (result.body && result.body.message) ? result.body.message : 'Co\u015b posz\u0142o nie tak. Spr\u00f3buj ponownie.';\n            msg.classList.add('is-error');\n          }\n        })\n        .catch(function () {\n          msg.textContent = 'B\u0142\u0105d po\u0142\u0105czenia. Sprawd\u017a internet i spr\u00f3buj ponownie.';\n          msg.classList.add('is-error');\n        })\n        .finally(function () {\n          btn.disabled = false;\n          btn.textContent = originalLabel;\n        });\n    });\n  }\n\n  \/* === Salon popup === *\/\n  var popup = document.getElementById('repulos-salon-popup');\n  if (!popup) return;\n\n  \/\/ Nie pokazuj na stronie rezerwacji\n  if (window.location.pathname.indexOf('rezerwacja-warszawa') !== -1) return;\n\n  var STORAGE_KEY = 'repulos_salon_popup_seen';\n  var DELAY_MS = 15000;          \/\/ 15 sekund od otwarcia strony\n  var opened = false;\n  var timer = null;\n  var lastFocused = null;\n\n  function alreadySeen() {\n    try { return sessionStorage.getItem(STORAGE_KEY) === '1'; }\n    catch (e) { return false; }\n  }\n  function markSeen() {\n    try { sessionStorage.setItem(STORAGE_KEY, '1'); } catch (e) {}\n  }\n\n  function openPopup() {\n    if (opened || alreadySeen()) return;\n    opened = true;\n    markSeen();\n    clearTimeout(timer);\n    lastFocused = document.activeElement;\n    popup.hidden = false;\n    void popup.offsetWidth; \/\/ reflow dla animacji\n    popup.classList.add('is-open');\n    \/\/ Blokada przewijania t\u0142a bez przeskoku strony\n    var scrollbar = window.innerWidth - document.documentElement.clientWidth;\n    document.body.style.overflow = 'hidden';\n    if (scrollbar > 0) document.body.style.paddingRight = scrollbar + 'px';\n    \/\/ Fokus na okno (bez widocznej ramki na X)\n    var dialog = popup.querySelector('.repulos-pl-popup__dialog');\n    if (dialog) dialog.focus();\n  }\n\n  function closePopup() {\n    popup.classList.remove('is-open');\n    document.body.style.overflow = '';\n    document.body.style.paddingRight = '';\n    setTimeout(function () { popup.hidden = true; }, 400);\n    if (lastFocused && typeof lastFocused.focus === 'function') lastFocused.focus();\n  }\n\n  if (alreadySeen()) return;\n\n  \/\/ Wyzwalacz: 15 sekund od otwarcia strony\n  timer = setTimeout(openPopup, DELAY_MS);\n\n  \/\/ Zamykanie\n  popup.addEventListener('click', function (e) {\n    if (e.target.hasAttribute('data-popup-close')) closePopup();\n  });\n  document.addEventListener('keydown', function (e) {\n    if (!popup.classList.contains('is-open')) return;\n    if (e.key === 'Escape') { closePopup(); return; }\n    \/\/ Focus trap: Tab nie wychodzi poza okno\n    if (e.key === 'Tab') {\n      var focusable = popup.querySelectorAll('a[href], button:not([disabled])');\n      if (!focusable.length) return;\n      var first = focusable[0];\n      var last = focusable[focusable.length - 1];\n      var active = document.activeElement;\n      if (e.shiftKey && (active === first || active === popup.querySelector('.repulos-pl-popup__dialog'))) {\n        e.preventDefault(); last.focus();\n      } else if (!e.shiftKey && active === last) {\n        e.preventDefault(); first.focus();\n      }\n    }\n  });\n})();\n<\/script>\n\n<\/body>\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>REPULO&#8217;S Strona g\u0142\u00f3wna Sklep O marce Inspiracje Salon Kontakt PL Polski \u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430 English PLN Polski Z\u0142oty Euro Hrywna 0 Strona [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-931","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/repulos.com\/pl\/wp-json\/wp\/v2\/pages\/931","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/repulos.com\/pl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/repulos.com\/pl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/repulos.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/repulos.com\/pl\/wp-json\/wp\/v2\/comments?post=931"}],"version-history":[{"count":117,"href":"https:\/\/repulos.com\/pl\/wp-json\/wp\/v2\/pages\/931\/revisions"}],"predecessor-version":[{"id":6771,"href":"https:\/\/repulos.com\/pl\/wp-json\/wp\/v2\/pages\/931\/revisions\/6771"}],"wp:attachment":[{"href":"https:\/\/repulos.com\/pl\/wp-json\/wp\/v2\/media?parent=931"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}