narty-2027/pages/saalbach/oferty/glemm-lodge.html
oskar d9aa985250 Restrukturyzacja do symetrii: region.md i oferty/ → saalbach/
Cztery regiony w jednym schemacie <region>/region.md + <region>/oferty/*.md.
Saalbach przestaje być wyjątkiem w korzeniu bundle'a.

- git mv region.md → saalbach/region.md, oferty/ → saalbach/oferty/
- linki bundle-relative przepisane: /region.md → /saalbach/region.md,
  /oferty/* → /saalbach/oferty/*
- nowy saalbach/index.md wg §6, symetryczny do ischgl/kronplatz/sfl

Zdjęcia obiektów przetrwały bez zmian: mapowanie oferta→zdjęcia jest
kluczowane po polu `id` we frontmatterze (pages/img/<id>/), nie po
ścieżce pliku — gen_images.py:121,390 i gen_pages.py:695-709.
Region "Saalbach" w gen_pages.py bierze się z dirname konceptu, więc
przejście "" → "saalbach" obsługuje się samo.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-04 09:47:58 +02:00

194 lines
17 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="pl">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Glemm Lodge Apartments ⭐⭐⭐⭐ — Ski 2027 — Skicircus Saalbach</title>
<style>
:root { color-scheme: light dark; --fg:#0f172a; --muted:#64748b; --bg:#ffffff;
--line:#e2e8f0; --accent:#0d9488; --chip:#f1f5f9; --quote:#f8fafc; }
@media (prefers-color-scheme: dark) {
:root { --fg:#e2e8f0; --muted:#94a3b8; --bg:#0f172a; --line:#334155;
--accent:#2dd4bf; --chip:#1e293b; --quote:#1e293b; }
}
* { box-sizing: border-box; }
body { margin: 0 auto; padding: 1.25rem 1rem 4rem; max-width: 46rem;
font-family: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
font-size: 17px; line-height: 1.55; color: var(--fg); background: var(--bg);
-webkit-text-size-adjust: 100%; }
nav { font-size: .85rem; margin-bottom: 1.25rem; }
nav a { color: var(--muted); }
h1 { font-size: 1.55rem; line-height: 1.25; margin: 0 0 .35rem; }
h2 { font-size: 1.2rem; margin: 2rem 0 .5rem; padding-top: .5rem;
border-top: 1px solid var(--line); }
h3 { font-size: 1.02rem; margin: 1.4rem 0 .4rem; }
p, ul, ol { margin: .6rem 0; }
ul, ol { padding-left: 1.3rem; }
li { margin: .25rem 0; }
li.task { list-style: none; margin-left: -1.3rem; }
li.task input { margin-right: .45rem; }
a { color: var(--accent); }
a.ext::after { content: " ↗"; font-size: .8em; color: var(--muted); }
code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: .88em;
background: var(--chip); padding: .1em .35em; border-radius: 4px; }
pre { background: var(--chip); padding: .75rem; border-radius: 6px; overflow-x: auto; }
pre code { background: none; padding: 0; }
blockquote { margin: .9rem 0; padding: .6rem .9rem; background: var(--quote);
border-left: 3px solid var(--accent); border-radius: 0 6px 6px 0; }
blockquote p { margin: .2rem 0; }
hr { border: 0; border-top: 1px solid var(--line); margin: 1.5rem 0; }
.table-wrap { overflow-x: auto; margin: .8rem 0; -webkit-overflow-scrolling: touch; }
table { border-collapse: collapse; width: 100%; font-size: .92rem; }
th, td { border: 1px solid var(--line); padding: .4rem .55rem; vertical-align: top; }
th { background: var(--chip); font-weight: 600; }
.chip { display: inline-block; background: var(--chip); color: var(--muted);
font-size: .72rem; text-transform: uppercase; letter-spacing: .04em;
padding: .15rem .5rem; border-radius: 999px; }
.lead { color: var(--muted); margin: .35rem 0 1.25rem; }
.meta { margin: 0 0 1.5rem; }
.meta summary { cursor: pointer; font-size: .85rem; color: var(--muted);
padding: .3rem 0; }
.meta table { font-size: .85rem; }
.meta th { width: 38%; text-align: left; font-weight: 500; word-break: break-word; }
.cards { list-style: none; padding: 0; margin: 0; }
.cards li { border: 1px solid var(--line); border-radius: 8px; padding: .8rem .9rem;
margin: .6rem 0; }
.cards a { font-weight: 600; text-decoration: none; }
.cards p { margin: .3rem 0 0; font-size: .9rem; color: var(--muted); }
footer { margin-top: 3rem; padding-top: 1rem; border-top: 1px solid var(--line);
font-size: .78rem; color: var(--muted); }
/* landing: kafle i lista regionów */
body.wide { max-width: 72rem; }
.tiles, .regions { list-style: none; padding: 0; }
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
@media (min-width: 34rem) {
.tiles { grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); }
.regions { grid-template-columns: repeat(2, 1fr); }
}
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
padding: .9rem 1rem; text-decoration: none; color: var(--fg); }
.tiles a { font-size: 1.05rem; font-weight: 600; }
.tiles a:hover, .tiles a:focus, .regions a:hover, .regions a:focus {
border-color: var(--accent); }
.tiles small, .regions small { display: block; margin-top: .3rem; font-weight: 400;
font-size: .85rem; color: var(--muted); }
.regions a { font-weight: 600; }
/* podsumowanie per region na karcie porównania */
.summary { list-style: none; padding: 0; margin: .8rem 0 2rem; display: grid; gap: .6rem; }
@media (min-width: 48rem) { .summary { grid-template-columns: repeat(2, 1fr); } }
.summary li { border: 1px solid var(--line); border-left: 3px solid var(--accent);
border-radius: 8px; padding: .65rem .85rem; }
.summary .budget { font-size: .95rem; }
.summary p { margin: .35rem 0 0; font-size: .88rem; color: var(--muted); }
/* tabela porównawcza: sortowanie klikiem + kolor statusu ceny */
table.sortable th { cursor: pointer; user-select: none; white-space: nowrap; }
table.sortable th::after { content: " ↕"; font-size: .8em; opacity: .35; }
table.sortable th[data-dir="asc"]::after { content: " ↑"; opacity: 1; }
table.sortable th[data-dir="desc"]::after { content: " ↓"; opacity: 1; }
table.sortable td { font-size: .88rem; padding: .35rem .5rem; }
table.sortable td[data-num] { white-space: nowrap; }
table.sortable .name { font-weight: 600; }
tr.verified td { background: rgba(13, 148, 136, .14); }
tr.estimate td { background: rgba(100, 116, 139, .10); color: var(--muted); }
tr.estimate td.name a, tr.verified td.name a { color: var(--accent); }
.legend { font-size: .82rem; color: var(--muted); margin: .5rem 0 0; }
.legend .box { display: inline-block; width: .8em; height: .8em; border-radius: 3px;
border: 1px solid var(--line); vertical-align: -.05em; margin-right: .25em; }
.legend .box.v { background: rgba(13, 148, 136, .35); }
.legend .box.e { background: rgba(100, 116, 139, .25); }
/* miniatury w tabeli */
td.thumb { padding: .25rem; width: 128px; }
td.thumb img { width: 120px; height: 80px; object-fit: cover; border-radius: 6px;
display: block; }
td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius: 6px;
align-items: center; justify-content: center; background: var(--chip);
color: var(--muted); font-weight: 700; letter-spacing: .05em;
text-decoration: none; }
/* galeria na karcie oferty */
.gallery { margin: 0 0 1.25rem; }
.gallery-main img { width: 100%; max-height: 24rem; object-fit: cover;
border-radius: 10px; display: block; background: var(--chip); }
.gallery-thumbs { display: flex; gap: .4rem; margin-top: .4rem; overflow-x: auto;
-webkit-overflow-scrolling: touch; padding-bottom: .2rem; }
.gallery-thumbs button { flex: 0 0 auto; padding: 0; border: 2px solid transparent;
border-radius: 6px; background: none; cursor: pointer; }
.gallery-thumbs button[aria-current] { border-color: var(--accent); }
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
border-radius: 4px; display: block; }
/* spis linków do kopiowania */
.copybar { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center;
margin: 1rem 0 1.5rem; }
.copybar button { font: inherit; font-size: .9rem; padding: .45rem .9rem;
border: 1px solid var(--accent); border-radius: 8px;
background: var(--accent); color: #f8fafc; cursor: pointer; }
.copybar button + button { background: none; color: var(--accent); }
.copybar button:hover { filter: brightness(1.08); }
.copy-status { font-size: .85rem; color: var(--muted); }
.links { list-style: none; padding: 0; margin: .5rem 0 0; }
.links li { padding: .55rem 0; border-bottom: 1px solid var(--line); }
.links li:last-child { border-bottom: 0; }
.links a { font-weight: 600; text-decoration: none; }
.links code.url { display: block; margin: .2rem 0; font-size: .82rem;
background: none; padding: 0; color: var(--muted);
word-break: break-all; user-select: all; }
.links p { margin: 0; font-size: .85rem; color: var(--muted); }
/* kafel regionu ze zdjęciem w tle */
.regions a.hero { background-size: cover; background-position: center;
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
display: flex; flex-direction: column; justify-content: flex-end; }
.regions a.hero small { color: #e2e8f0; }
</style>
</head>
<body>
<nav><a href="../../start.html">← Start</a> · <a href="../../index.html">Wszystkie karty</a> · <a href="../../porownanie.html">Porównanie ofert</a> · <a href="../../linki.html">Linki</a> · <a href="../../../viz.html">Graf</a></nav>
<span class="chip">oferta</span>
<h1>Glemm Lodge Apartments — poza budżetem (dane referencyjne)</h1>
<p class="lead">Jedyna oferta z w pełni zweryfikowanym cennikiem (~4 370 €/rodzinę) — odrzucona budżetowo, służy jako punkt odniesienia cenowego.</p>
<figure class="gallery"><div class="gallery-main"><img src="../../img/glemm-lodge/01.jpg" alt="Glemm Lodge Apartments ⭐⭐⭐⭐" loading="lazy"></div><div class="gallery-thumbs"><button type="button" aria-current="true"><img src="../../img/glemm-lodge/01.jpg" alt="Glemm Lodge Apartments ⭐⭐⭐⭐ — zdjęcie 1" loading="lazy"></button><button type="button"><img src="../../img/glemm-lodge/02.jpg" alt="Glemm Lodge Apartments ⭐⭐⭐⭐ — zdjęcie 2" loading="lazy"></button><button type="button"><img src="../../img/glemm-lodge/03.jpg" alt="Glemm Lodge Apartments ⭐⭐⭐⭐ — zdjęcie 3" loading="lazy"></button><button type="button"><img src="../../img/glemm-lodge/04.jpg" alt="Glemm Lodge Apartments ⭐⭐⭐⭐ — zdjęcie 4" loading="lazy"></button><button type="button"><img src="../../img/glemm-lodge/05.jpg" alt="Glemm Lodge Apartments ⭐⭐⭐⭐ — zdjęcie 5" loading="lazy"></button></div></figure>
<details class="meta" open><summary>Metadane (frontmatter)</summary><div class="table-wrap"><table><tbody><tr><th>type</th><td>oferta</td></tr><tr><th>title</th><td>Glemm Lodge Apartments ⭐⭐⭐⭐</td></tr><tr><th>description</th><td>Jedyna oferta z w pełni zweryfikowanym cennikiem (~4 370 €/rodzinę) — odrzucona budżetowo, służy jako punkt odniesienia cenowego.</td></tr><tr><th>timestamp</th><td>2026-07-31T00:00:00Z</td></tr><tr><th>tags</th><td>nocleg, saalbach, referencja</td></tr><tr><th>id</th><td>glemm-lodge</td></tr><tr><th>nazwa</th><td>Glemm Lodge Apartments ⭐⭐⭐⭐</td></tr><tr><th>operator</th><td>Dieter Weschenfelder (prywatny)</td></tr><tr><th>kontakt</th><td><a href="mailto:info@glemmlodge-apartments.com">info@glemmlodge-apartments.com</a></td></tr><tr><th>miejscowosc</th><td>między Saalbach a Hinterglemm</td></tr><tr><th>adres</th><td>Glemmtaler Landesstr. 263, 5753 Saalbach</td></tr><tr><th>gps</th><td>47.3879, 12.6178</td></tr><tr><th>odleglosc_od_wyciagu</th><td>zjazd trasą 86 pod dom; skibus pod drzwiami (5 min do gondoli)</td></tr><tr><th>ocena</th><td>9.1/10 (Booking), 4.8/5 (Google)</td></tr><tr><th>uklad_dla_grupy</th><td>2 apartamenty po 7 os. (Top 2 + Top 3)</td></tr><tr><th>cena_za_apartament_tydzien</th><td>7 000 € + 500 € sprzątanie + taksy (CENNIK OFICJALNY 26/27)</td></tr><tr><th>koszt_rodzina_2p2</th><td>~4 370 €</td></tr><tr><th>koszt_rodzina_2p1</th><td>~3 277 €</td></tr><tr><th>status_ceny</th><td>ZWERYFIKOWANE (cennik + kalendarz obiektu, stan 31.07.2026)</td></tr><tr><th>priorytet</th><td>ODRZUCONA BUDŻETOWO (wraca do gry przy rabacie do ~5 000 €/apartament)</td></tr><tr><th>www</th><td><a href="https://glemmlodge-apartments.com" target="_blank" rel="noopener" class="ext">https://glemmlodge-apartments.com</a></td></tr><tr><th>ostatnia_aktualizacja</th><td>2026-07-31</td></tr></tbody></table></div></details>
<h2>Dlaczego w bazie mimo odrzucenia</h2>
<p>Jedyny obiekt z <strong>pełnymi zweryfikowanymi danymi</strong> (publiczny cennik i kalendarz obłożenia) — służy jako punkt odniesienia cenowego. Wraca do gry, jeśli właściciel zejdzie do ~5 000 €/apartament przy 7 osobach (precedens: cennik letni skaluje ceny wg liczby osób).</p>
<h2>Fakty (zweryfikowane 31.07.2026)</h2>
<ul><li>3 luksusowe apartamenty 1012 os. (117128 m², po 3 łazienki + WC).</li><li>Zjazd trasą 86 bezpośrednio pod dom; powrót na stok skibusem (przystanek pod drzwiami, 5 min); supermarket MPREIS naprzeciwko.</li><li>Wallbox dla aut elektrycznych; zakaz imprez wieczorów kawalerskich itp.</li></ul>
<h2>Cennik zima 2026/27 (oficjalny)</h2>
<div class="table-wrap"><table><thead><tr><th style="text-align:left">Okres</th><th style="text-align:left">Sezon</th><th style="text-align:left">Za noc</th><th style="text-align:left">Za tydzień</th></tr></thead><tbody><tr><td style="text-align:left">27.1111.12.2026</td><td style="text-align:left">przedsezon</td><td style="text-align:left">800 €</td><td style="text-align:left">5 600 €</td></tr><tr><td style="text-align:left">1218.12.2026</td><td style="text-align:left">niski</td><td style="text-align:left">900 €</td><td style="text-align:left">6 300 €</td></tr><tr><td style="text-align:left">1925.12.2026</td><td style="text-align:left">wysoki</td><td style="text-align:left">1 000 €</td><td style="text-align:left">7 000 €</td></tr><tr><td style="text-align:left">26.12.202601.01.2027</td><td style="text-align:left">top</td><td style="text-align:left">1 200 €</td><td style="text-align:left">8 400 €</td></tr><tr><td style="text-align:left"><strong>02.0105.03.2027</strong></td><td style="text-align:left"><strong>wysoki</strong></td><td style="text-align:left"><strong>1 000 €</strong></td><td style="text-align:left"><strong>7 000 €</strong></td></tr><tr><td style="text-align:left">0619.03.2027</td><td style="text-align:left">niski</td><td style="text-align:left">900 €</td><td style="text-align:left">6 300 €</td></tr><tr><td style="text-align:left">20.0304.04.2027</td><td style="text-align:left">późny</td><td style="text-align:left">800 €</td><td style="text-align:left">5 600 €</td></tr></tbody></table></div>
<p>Dodatkowo: sprzątanie końcowe 500 €/apartament, taksa 3 €/os./noc, kaucja zwrotna 900 €/apartament.</p>
<h2>Dostępność w naszym oknie (stan 31.07.2026)</h2>
<div class="table-wrap"><table><thead><tr><th style="text-align:left">Termin</th><th style="text-align:left">Top 1</th><th style="text-align:left">Top 2</th><th style="text-align:left">Top 3</th><th style="text-align:left">2 apartamenty naraz?</th></tr></thead><tbody><tr><td style="text-align:left">29.01.2027</td><td style="text-align:left">zajęty</td><td style="text-align:left">WOLNY</td><td style="text-align:left">zajęty</td><td style="text-align:left"></td></tr><tr><td style="text-align:left">916.01.2027</td><td style="text-align:left">zajęty</td><td style="text-align:left">zajęty</td><td style="text-align:left">WOLNY</td><td style="text-align:left"></td></tr><tr><td style="text-align:left"><strong>1623.01.2027</strong></td><td style="text-align:left">WOLNY</td><td style="text-align:left">WOLNY</td><td style="text-align:left">WOLNY</td><td style="text-align:left"></td></tr></tbody></table></div>
<h2>Kosztorys wariantu 2× apartament, 1623.01 (14 os.)</h2>
<div class="table-wrap"><table><thead><tr><th style="text-align:left">Pozycja</th><th style="text-align:left">Na apartament (7 os.)</th></tr></thead><tbody><tr><td style="text-align:left">Czynsz 7 nocy</td><td style="text-align:left">7 000 €</td></tr><tr><td style="text-align:left">Sprzątanie</td><td style="text-align:left">500 €</td></tr><tr><td style="text-align:left">Taksa (3 € × 7 os. × 7 nocy)</td><td style="text-align:left">147 €</td></tr><tr><td style="text-align:left"><strong>Razem</strong> (bez kaucji 900 €)</td><td style="text-align:left"><strong>7 647 €</strong></td></tr></tbody></table></div>
<p>Podział od osoby: rodzina 2+2 → ~4 370 €, rodzina 2+1 → ~3 277 €. <strong>Wniosek: 2× powyżej celu budżetowego (~2 000 €/rodzinę).</strong></p>
<h2>Warunki rezerwacji</h2>
<ul><li>Zaliczka 30% od razu; reszta + kaucja 90 dni przed przyjazdem.</li><li><strong>Darmowa anulacja tylko do 91 dni przed</strong> (dla 16.01 → deadline ~16.10.2026); później 100% kosztów.</li></ul>
<h2>Do zrobienia (opcjonalnie)</h2>
<ul><li class="task"><input type="checkbox" disabled> Mail do Dietera: cena za 7 os./apartament zamiast 1012 — jeśli ≤ 5 000 €, wariant wraca do rozważań (~2 900/2 200 € na rodzinę).</li></ul>
<footer>Wygenerowane z bundle'a OKF przez <code>gen_pages.py</code> — nie edytuj
tych plików, edytuj <code>.md</code> i przegeneruj.<br>
powered by <a href="https://gethumanai.pl" target="_blank" rel="noopener">gethumanai.pl</a></footer>
<script>
document.querySelectorAll('.gallery').forEach(function (gallery) {
var big = gallery.querySelector('.gallery-main img');
gallery.querySelectorAll('.gallery-thumbs button').forEach(function (button) {
button.addEventListener('click', function () {
var img = button.querySelector('img');
big.src = img.dataset.full || img.src;
gallery.querySelectorAll('.gallery-thumbs button').forEach(function (b) {
b.removeAttribute('aria-current');
});
button.setAttribute('aria-current', 'true');
});
});
});
</script>
</body>
</html>