PageSourceSearch

https://podnozyczkami.pl/galeria

html podnozyczkami.pl collected 2026-10-07 20:52:45 UTC 5,581 bytes, 133 lines download raw bytes

1<!DOCTYPE html>
2<html lang="pl">
3<head>
4  <meta charset="UTF-8">
5  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6  <title>Galeria – Pod Nożyczkami Salon Fryzjerski Męski - Łańcut</title>
7  <meta name="description" content="Galeria zdjęć salonu fryzjerskiego męskiego Pod Nożyczkami w Łańcucie – wnętrze, stanowiska i atmosfera salonu.">
8  <meta name="robots" content="index, follow">
9  <link rel="canonical" href="https://podnozyczkami.pl/galeria.html">
10  <meta property="og:title" content="Galeria – Pod Nożyczkami Salon Fryzjerski Męski - Łańcut">
11  <meta property="og:description" content="Zobacz wnętrze salonu fryzjerskiego męskiego Pod Nożyczkami w Łańcucie.">
12  <meta property="og:type" content="website">
13  <meta property="og:url" content="https://podnozyczkami.pl/galeria.html">
14  <meta property="og:site_name" content="Pod Nożyczkami">
15  <meta property="og:image" content="https://podnozyczkami.pl/assets/og-image.jpg">
16  <meta property="og:locale" content="pl_PL">
17  <link rel="icon" href="/favicon.ico" sizes="any">
18  <link rel="icon" type="image/png" sizes="96x96" href="/favicon.png?v=3">
19  <link rel="apple-touch-icon" href="/apple-touch-icon.png">
20  <link rel="preconnect" href="https://fonts.googleapis.com">
21  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
22  <link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600;700;800&family=Inter:wght@300;400;500;600&family=Dancing+Script:wght@600;700&family=Cormorant+Garamond:ital,wght@0,500;0,600;1,500&display=swap" rel="stylesheet">
23  <link rel="stylesheet" href="style.css?v=14">
24  
24<script src="config.js?v=12"></script>
24
25</head>
26<body>
27
28  <!-- NAGŁÓWEK -->
29  <header class="header scrolled">
30    <div class="container header-inner">
31      <a aria-label='Pod Nożyczkami – strona główna' class='brand' href='/'>
32        <img class="brand-mark" src="assets/logo-header.png" alt="Pod Nożyczkami" width="202" height="200">
33        <span class="brand-tagline"><strong>Salon Fryzjerski Męski</strong><small>Łańcut</small></span>
34      </a>
35      <nav class="nav-links" aria-label="Nawigacja">
36        <a class='nav-back' href='/'>← Strona główna</a>
37      </nav>
38    </div>
39  </header>
40
41  <main>
42    <section class="section gallery-page-section">
43      <div class="container">
44        <span class="eyebrow">Zajrzyj do nas</span>
45        <h1 class="section-title">Galeria</h1>
46        <div class="title-rule"></div>
47        <div id="galleryGrid" class="gallery-grid">
48          <p class="gallery-loading">Wczytywanie zdjęć…</p>
49        </div>
50      </div>
51    </section>
52  </main>
53
54  <!-- LIGHTBOX -->
55  <div id="lightbox" class="lightbox hidden" role="dialog" aria-modal="true" aria-label="Powiększone zdjęcie">
56    <button class="lb-close" onclick="closeLightbox()" aria-label="Zamknij">✕</button>
57    <button class="lb-prev" onclick="lbMove(-1)" aria-label="Poprzednie">&#8249;</button>
58    <img id="lbImg" class="lb-img" alt="">
59    <button class="lb-next" onclick="lbMove(1)" aria-label="Następne">&#8250;</button>
60  </div>
61
62  <!-- STOPKA -->
63  <footer class="footer">
64    <div class="container footer-bottom">
65      <p>© <span id="yr"></span> Pod Nożyczkami · Justyna Drozd · Łańcut</p>
66    </div>
67  </footer>
68
69  
69<script>
70    document.getElementById("yr").textContent = new Date().getFullYear();
71
72    let _items = [], _lbIdx = 0;
73
74    async function loadGallery() {
75      const grid = document.getElementById("galleryGrid");
76      try {
77        const res = await fetch("/.netlify/functions/gallery");
78        if (!res.ok) throw new Error();
79        const files = await res.json();
80        _items = files.map(f => ({
81          file: f,
82          alt: decodeURIComponent(f.split("/").pop().replace(/\.[^.]+$/, "").replace(/[-_]/g, " "))
83        }));
84      } catch {
85        _items = (typeof CONFIG !== "undefined" && Array.isArray(CONFIG.gallery)) ? CONFIG.gallery : [];
86      }
87
88      if (_items.length === 0) {
89        grid.innerHTML = '<p class="gallery-empty">Zdjęcia wkrótce – obserwuj nas na Facebook.</p>';
90        return;
91      }
92
93      grid.innerHTML = _items.map((item, i) =>
94        `<button class="gallery-item" onclick="openLightbox(${i})" aria-label="${escH(item.alt || 'Zdjęcie ' + (i + 1))}">
95           <img class="gallery-img" src="${escH(item.file)}" alt="${escH(item.alt || '')}" loading="lazy">
96         </button>`
97      ).join("");
98    }
99
100    function openLightbox(idx) {
101      _lbIdx = idx;
102      const img = document.getElementById("lbImg");
103      if (img) { img.src = _items[idx].file; img.alt = _items[idx].alt || ""; }
104      document.getElementById("lightbox").classList.remove("hidden");
105      document.body.style.overflow = "hidden";
106    }
107
108    function closeLightbox() {
109      document.getElementById("lightbox").classList.add("hidden");
110      document.body.style.overflow = "";
111    }
112
113    function lbMove(dir) {
114      _lbIdx = (_lbIdx + dir + _items.length) % _items.length;
115      openLightbox(_lbIdx);
116    }
117
118    function escH(s) {
119      return String(s).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;");
120    }
121
122    document.addEventListener("keydown", (e) => {
123      const lb = document.getElementById("lightbox");
124      if (!lb || lb.classList.contains("hidden")) return;
125      if (e.key === "ArrowLeft")  lbMove(-1);
126      if (e.key === "ArrowRight") lbMove(1);
127      if (e.key === "Escape")     closeLightbox();
128    });
129
130    document.addEventListener("DOMContentLoaded", loadGallery);
131  </script>
131
132</body>
133</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.