1<!doctype html> 2<html lang="pl"> 3 <head> 4 <meta charset="UTF-8" /> 5 <!-- Dokument HTML jest zawsze rewalidowany (odwoÅuje siÄ do hashowanych assetów). 6 Pragma czytana przez audyty SEO; docelowo ten sam nagÅówek powinien wysyÅaÄ 7 serwer â patrz docs/seo-hosting.md. --> 8 <meta http-equiv="Cache-Control" content="public, max-age=0, must-revalidate" /> 9 <title>Wydarzenia i warsztaty â Czas na Relaks</title> 10 <meta name="description" content="Pragniemy podzieliÄ siÄ z Wami pasjÄ , która jest zarówno sztukÄ , jak i sposobem wyrażania siebie â sztukÄ rysowania. Zapraszamy do odkrycia tego fascynujÄ cego Åwiata." /> 11 <!-- `max-image-preview:large` pozwala Google pokazywaÄ duże miniatury naszych 12 zdjÄÄ w wynikach; pozostaÅe dwa zdejmujÄ limit dÅugoÅci opisu i wideo. 13 TÄ samÄ wartoÅÄ ustawiajÄ `src/lib/seo.js` i `scripts/prerender.mjs`. --> 14 <meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1" /> 15 <link rel="canonical" href="https://czasnarelakswro.pl/wydarzenia/" /> 16 <link rel="alternate" href="https://czasnarelakswro.pl/wydarzenia/" hreflang="pl" /> 17 <link rel="alternate" href="https://czasnarelakswro.pl/ru/wydarzenia/" hreflang="ru" /> 18 <link rel="alternate" href="https://czasnarelakswro.pl/wydarzenia/" hreflang="x-default" /> 19 <meta property="og:title" content="Wydarzenia i warsztaty â Czas na Relaks" /> 20 <meta property="og:description" content="Pragniemy podzieliÄ siÄ z Wami pasjÄ , która jest zarówno sztukÄ , jak i sposobem wyrażania siebie â sztukÄ rysowania. Zapraszamy do odkrycia tego fascynujÄ cego Åwiata." /> 21 <meta property="og:image" content="https://czasnarelakswro.pl/logo.png" /> 22 <meta property="og:image:alt" content="Wydarzenia i warsztaty â Czas na Relaks" /> 23 <meta property="og:url" content="https://czasnarelakswro.pl/wydarzenia/" /> 24 <meta property="og:type" content="website" /> 25 <meta property="og:site_name" content="Czas na Relaks" /> 26 <meta property="og:locale" content="pl_PL" /> 27 <meta name="twitter:card" content="summary_large_image" /> 28 <meta name="twitter:title" content="Wydarzenia i warsztaty â Czas na Relaks" /> 29 <meta name="twitter:description" content="Pragniemy podzieliÄ siÄ z Wami pasjÄ , która jest zarówno sztukÄ , jak i sposobem wyrażania siebie â sztukÄ rysowania. Zapraszamy do odkrycia tego fascynujÄ cego Åwiata." /> 30 <meta name="twitter:image" content="https://czasnarelakswro.pl/logo.png" /> 31 <meta name="twitter:image:alt" content="Wydarzenia i warsztaty â Czas na Relaks" /> 32 <link rel="preconnect" href="https://fonts.googleapis.com"> 33 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 34 <link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400&family=Inter:wght@300;400;500;600&display=swap" rel="stylesheet"> 35 <link rel="icon" href="/favicon.ico" sizes="any" /> 36 <link rel="icon" type="image/png" href="/favicon.png" /> 37 <link rel="apple-touch-icon" href="/favicon.png" /> 38 <meta name="theme-color" content="#1A1C19" /> 39 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 40 <link rel="manifest" href="/manifest.json" /> 41 <!-- Google tag (gtag.js) -->
vendor: 68 bytes, lines 41-42
41 42 <script async src="https://www.googletagmanager.com/gtag/js?id=
42G-H3M4CR4V6N
vendor: 16 bytes, lines 42-43
42"></script> 43
43<script> 44 window.dataLayer = window.dataLayer || []; 45 function gtag(){dataLayer.push(arguments);} 46 gtag('js', new Date()); 47 48 // Consent Mode v2 â domyÅlnie brak zgody. ZgodÄ podnosi baner cookie 49 // (src/components/spa/CookieConsent.jsx); zapamiÄtany wybór czytamy tutaj, 50 // żeby statystyki dziaÅaÅy od pierwszego widoku strony po akceptacji. 51 gtag('consent', 'default', { 52 ad_storage: 'denied', 53 ad_user_data: 'denied', 54 ad_personalization: 'denied', 55 analytics_storage: 'denied' 56 }); 57 try { 58 if (localStorage.getItem('cookie-consent') === 'accepted') { 59 gtag('consent', 'update', { analytics_storage: 'granted' }); 60 } 61 } catch (e) { /* localStorage niedostÄpny (tryb prywatny) â zostaje 'denied' */ } 62 63 gtag('config', 'G-H3M4CR4V6N'); 64 </script>
64 65 <!-- Wizytówka firmy dla wyszukiwarek. Zostaje w statycznym HTML, bo przeżywa 66 przejÅcia miÄdzy stronami w SPA, a reszta znaczników odwoÅuje siÄ do niej 67 przez "@id". `priceRange` to wideÅki z cennika (`src/lib/services/`) â 68 aktualizowaÄ razem z cenami. 69 70 Jeden graf, trzy wÄzÅy: 71 #website â witryna; z niej wyszukiwarka bierze nazwÄ strony, 72 #organization â firma jako podmiot prawny: Extra VEH sp. z o.o., 73 NIP 8971915108 (`taxID`), wydawca witryny, 74 #business â samo studio: adres, godziny, wideÅki cen, mapa. 75 Studio jest miejscem prowadzonym przez firmÄ, wiÄc wiÄ Å¼e je z niÄ para 76 `parentOrganization` / `subOrganization`. Typ studia podajemy podwójnie: 77 HealthAndBeautyBusiness jest rodzajem LocalBusiness, ale nie każdy 78 czytnik danych o tym wie. Listy `sameAs` w obu wÄzÅach trzymamy 79 zgodne â to te same profile firmy i studia. 80 81 Åwiadomie bez `potentialAction`/`SearchAction` (pole wyszukiwania w 82 wynikach Google): witryna nie ma wÅasnej wyszukiwarki, a adresu wyników, 83 którego nie ma, zgÅaszaÄ nie wolno. --> 84
84<script type="application/ld+json"> 85 { 86 "@context": "https://schema.org", 87 "@graph": [{ 88 "@type": "WebSite", 89 "@id": "https://czasnarelakswro.pl/#website", 90 "url": "https://czasnarelakswro.pl/", 91 "name": "Czas na Relaks", 92 "alternateName": "Czas na Relaks â Studio Masażu WrocÅaw", 93 "description": "Kameralne studio masażu w sercu WrocÅawia. Masaże twarzy i ciaÅa, praktyki energetyczne, zabiegi pielÄgnacyjne i relaks.", 94 "inLanguage": ["pl", "ru"], 95 "publisher": { "@id": "https://czasnarelakswro.pl/#organization" }, 96 "about": { "@id": "https://czasnarelakswro.pl/#business" } 97 }, { 98 "@type": "Organization", 99 "@id": "https://czasnarelakswro.pl/#organization", 100 "name": "Czas na Relaks", 101 "legalName": "Extra VEH sp. z o.o.", 102 "taxID": "8971915108", 103 "identifier": { 104 "@type": "PropertyValue", 105 "propertyID": "NIP", 106 "value": "8971915108" 107 }, 108 "url": "https://czasnarelakswro.pl", 109 "logo": { 110 "@type": "ImageObject", 111 "url": "https://czasnarelakswro.pl/logo.png", 112 "width": 400, 113 "height": 400 114 }, 115 "image": "https://czasnarelakswro.pl/img/hero.webp", 116 "telephone": "+48512358784", 117 "email": "[email protected]", 118 "address": { 119 "@type": "PostalAddress", 120 "streetAddress": "ul. Stawowa 2a", 121 "addressLocality": "WrocÅaw", 122 "postalCode": "50-002", 123 "addressCountry": "PL" 124 }, 125 "areaServed": { "@type": "City", "name": "WrocÅaw" }, 126 "contactPoint": { 127 "@type": "ContactPoint", 128 "contactType": "customer service", 129 "telephone": "+48512358784", 130 "email": "[email protected]", 131 "availableLanguage": ["pl", "ru"] 132 }, 133 "subOrganization": { "@id": "https://czasnarelakswro.pl/#business" }, 134 "sameAs": [ 135 "https://booksy.com/pl-pl/214786_czas-na-relaks_salon-kosmetyczny_13750_wroclaw", 136 "https://www.instagram.com/czasnarelakswro/", 137 "https://www.facebook.com/profile.php?id=100087731803525", 138 "https://www.tiktok.com/@czas_na_relaks_wro", 139 "https://www.youtube.com/@czasnarelakswro" 140 ] 141 }, { 142 "@type": ["HealthAndBeautyBusiness", "LocalBusiness"], 143 "@id": "https://czasnarelakswro.pl/#business", 144 "name": "Czas na Relaks", 145 "parentOrganization": { "@id": "https://czasnarelakswro.pl/#organization" }, 146 "description": "Kameralne studio masażu w sercu WrocÅawia. Masaże twarzy i ciaÅa, praktyki energetyczne, zabiegi pielÄgnacyjne i relaks.", 147 "logo": "https://czasnarelakswro.pl/logo.png", 148 "image": [ 149 "https://czasnarelakswro.pl/img/hero.webp", 150 "https://czasnarelakswro.pl/img/gabinet.webp", 151 "https://czasnarelakswro.pl/img/o-nas.webp" 152 ], 153 "url": "https://czasnarelakswro.pl", 154 "telephone": "+48512358784", 155 "email": "[email protected]", 156 "areaServed": { "@type": "City", "name": "WrocÅaw" }, 157 "knowsLanguage": ["pl", "ru"], 158 "currenciesAccepted": "PLN", 159 "priceRange": "30â400 zÅ", 160 "geo": { 161 "@type": "GeoCoordinates", 162 "latitude": 51.10203, 163 "longitude": 17.03495 164 }, 165 "hasMap": "https://www.google.com/maps/search/?api=1&query=ul.+Stawowa+2a%2C+50-002+Wroc%C5%82aw", 166 "address": { 167 "@type": "PostalAddress", 168 "streetAddress": "ul. Stawowa 2a", 169 "addressLocality": "WrocÅaw", 170 "postalCode": "50-002", 171 "addressCountry": "PL" 172 }, 173 "openingHoursSpecification": { 174 "@type": "OpeningHoursSpecification", 175 "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], 176 "opens": "09:00", 177 "closes": "21:00" 178 }, 179 "sameAs": [ 180 "https://booksy.com/pl-pl/214786_czas-na-relaks_salon-kosmetyczny_13750_wroclaw", 181 "https://www.instagram.com/czasnarelakswro/", 182 "https://www.facebook.com/profile.php?id=100087731803525", 183 "https://www.tiktok.com/@czas_na_relaks_wro", 184 "https://www.youtube.com/@czasnarelakswro" 185 ] 186 }] 187 } 188 </script>
188 189
189<script type="module" crossorigin src="/assets/index-D__ptn8_.js"></script>
189 190 <link rel="modulepreload" crossorigin href="/assets/react-3IxESyam.js"> 191 <link rel="modulepreload" crossorigin href="/assets/framer-motion-Bc3_OT7B.js"> 192 <link rel="stylesheet" crossorigin href="/assets/index-Cmu9Zc0Y.css"> 193 </head> 194 <body> 195 <div id="root"><main> 196<h1>Wydarzenia i warsztaty</h1> 197<p>Pragniemy podzieliÄ siÄ z Wami pasjÄ , która jest zarówno sztukÄ , jak i sposobem wyrażania siebie â sztukÄ rysowania. Zapraszamy do odkrycia tego fascynujÄ cego Åwiata.</p> 198<p>Chcemy Was zaprosiÄ do fascynujÄ cej podróży po Åwiecie naszych masek do twarzy. Przedstawimy Wam nasze najnowsze innowacje i produkty, które pomogÄ Wam osiÄ gnÄ Ä zdrowÄ , promiennÄ skórÄ.</p> 199<p>Åwiat relaksu i oczyszczenia â do naszej wspaniaÅej bani. Bania to nie tylko miejsce ciepÅa, to miejsce, gdzie możemy zadbaÄ o zdrowie i wyciszyÄ siÄ.</p> 200<p>ChcielibyÅmy podzieliÄ siÄ z Wami fascynujÄ cym Åwiatem makramé â sztuki tworzenia piÄknych wzorów za pomocÄ wÄzÅów. Poznajmy tÄ kreatywnÄ technikÄ bliżej.</p> 201<nav><ul> 202<li><a href="/wydarzenia/rysowanie-tworz-wyrazaj-inspiruj/">Rysowanie: Twórz, Wyrażaj, Inspiruj</a></li> 203<li><a href="/wydarzenia/maski-do-twarzy/">Maski do twarzy</a></li> 204<li><a href="/wydarzenia/pani-w-bani/">Pani w Bani</a></li> 205<li><a href="/wydarzenia/makrame-sztuka-wezlow/">Makramé: Sztuka WÄzÅów</a></li> 206<li><a href="/">Strona gÅówna</a></li> 207<li><a href="/cennik/">Cennik</a></li> 208<li><a href="/sklep/">Sklep</a></li> 209<li><a href="/blog/">Inspiracje i wiedza</a></li> 210<li><a href="/wydarzenia/">Wydarzenia i warsztaty</a></li> 211<li><a href="/galeria/">Atmosfera i rezultaty</a></li> 212<li><a href="/mapa-strony/">Mapa strony</a></li> 213</ul></nav> 214</main> 215<footer>Czas na Relaks · ul. Stawowa 2a, 50-002 WrocÅaw · <a href="tel:+48512358784">+48 512 358 784</a></footer></div> 216
216<script async src="https://webchatix.purplelabs.eu/widget/webchatix.js?v=2.4.1" data-site-key="isov758o0oz9l0rk0nzds4fi"></script>
216 217 <!-- Ikona czatu Webchatix w granicach ekranu. 218 Widget ustawia swój przycisk (`.rp-btn`) i dymek zaproszenia 219 (`.rp-invite`) sztywno wzglÄdem layout viewportu. Na telefonach 220 layout viewport bywa wiÄkszy od tego, co widaÄ: pasek adresu i pasek 221 narzÄdzi przeglÄ darki zasÅaniajÄ dóŠoraz prawÄ krawÄdź, wiÄc ikona 222 wychodziÅa poza ekran i byÅa uciÄta. RóżnicÄ mierzymy przez 223 `visualViewport` i o tyle przesuwamy ikonÄ transformacjÄ â wÅasne 224 odstÄpy widgetu (te z jego progu 420px i te z konfiguracji) zostajÄ 225 nietkniÄte. `#chat-viewport-probe` rozciÄ ga siÄ na caÅy layout 226 viewport i sÅuży wyÅÄ cznie do odczytania jego krawÄdzi â jest 227 niewidoczny i nie Åapie klikniÄÄ. --> 228 <style> 229 #chat-viewport-probe { 230 position: fixed; 231 inset: 0; 232 visibility: hidden; 233 pointer-events: none; 234 } 235 /* `--chat-shift-y` podnosi ikonÄ ponad baner cookies, dopóki ten wisi na 236 dole ekranu (ustawia go src/components/spa/CookieConsent.jsx). Bez tego 237 ikona zasÅaniaÅa na telefonie przycisk âAkceptujÄâ. */ 238 .rp-btn, 239 .rp-invite { 240 transform: translate( 241 calc(-1 * var(--chat-inset-x, 0px)), 242 calc(-1 * (var(--chat-inset-y, 0px) + var(--chat-shift-y, 0px))) 243 ); 244 transition: transform 0.25s ease; 245 } 246 </style> 247 <div id="chat-viewport-probe" aria-hidden="true"></div> 248
248<script> 249 (function () { 250 var vv = window.visualViewport; 251 var probe = document.getElementById('chat-viewport-probe'); 252 if (!vv || !probe) return; 253 254 // Paski przeglÄ darki zabierajÄ najwyżej ok. 150 px. WiÄksza różnica 255 // to klawiatura ekranowa â wtedy ikony nie ruszamy, żeby nie 256 // skakaÅa na Årodek ekranu. Przy powiÄkszeniu strony (scale != 1) 257 // zostawiamy jÄ tam, gdzie postawiÅ jÄ widget. 258 var MAX_INSET = 200; 259 var pending = false; 260 var current = { x: null, y: null }; 261 262 function inset(layoutEdge, visibleEdge) { 263 var value = Math.round(layoutEdge - visibleEdge); 264 return value > 0 && value <= MAX_INSET ? value : 0; 265 } 266 267 function update() { 268 pending = false; 269 var x = 0; 270 var y = 0; 271 if (Math.abs(vv.scale - 1) < 0.01) { 272 var box = probe.getBoundingClientRect(); 273 x = inset(box.right, vv.offsetLeft + vv.width); 274 y = inset(box.bottom, vv.offsetTop + vv.height); 275 } 276 if (x === current.x && y === current.y) return; 277 current.x = x; 278 current.y = y; 279 var root = document.documentElement; 280 root.style.setProperty('--chat-inset-x', x + 'px'); 281 root.style.setProperty('--chat-inset-y', y + 'px'); 282 } 283 284 function schedule() { 285 if (pending) return; 286 pending = true; 287 requestAnimationFrame(update); 288 } 289 290 // Widoczny obszar zmienia siÄ przy chowaniu pasków przeglÄ darki i 291 // przy obrocie ekranu (zdarzenia `visualViewport`), a sam layout 292 // viewport â gdy aplikacja dorysuje treÅÄ po wczytaniu strony; to 293 // Åapie obserwator rozmiaru sondy. Pomiar jest ograniczony do 294 // jednego na klatkÄ. 295 vv.addEventListener('resize', schedule); 296 vv.addEventListener('scroll', schedule); 297 window.addEventListener('orientationchange', schedule); 298 if (window.ResizeObserver) new ResizeObserver(schedule).observe(probe); 299 schedule(); 300 })(); 301 </script>
301 302 </body> 303</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.