narty-2027/pages/saalbach/oferty/glemm-lodge.html
oskar 06ab1b24aa UI: kolumna dostępności 6–13.02, sekcja Archiwum, nowy termin w nagłówkach
porownanie.html:
- nowa kolumna „Dostępność 6–13.02” z pola `dostepnosc_6_13_02_2027`,
  skrócona do emoji + werdyktu ( DOSTĘPNE / 🔍 do sprawdzenia /
   BRAK (zweryf.)), pełna notatka w atrybucie title
- sortowanie kolumny układa decyzyjnie (wolne → do sprawdzenia → brak),
  nie alfabetycznie po emoji
- wiersz Glemm Lodge na czerwono i z przekreśloną nazwą: zweryfikowany
  brak miejsc bije kolor statusu ceny (reguła CSS niżej wygrywa)
- karty `priorytet: ARCHIWALNA` wypadają z tabeli i z bilansu do osobnej
  sekcji „Archiwum” na dole strony
- legenda i bilans statusów pod tabelą

Termin wyjazdu wyjechał do stałych TERM_LABEL/TERM_SHORT/TERM_NOTE:
nagłówki wszystkich stron (BUNDLE_NAME, też w gen_viz.py), lead
start.html, opis kafla porównania i raport braków biorą go stąd.
Zmiana terminu = zmiana stałych i regeneracja.

Raport braków czyta teraz dostępność z pola frontmattera zamiast zgadywać
z nagłówków w body, i pomija karty archiwalne. Wypis po regeneracji
podaje bilans /🔍/.

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

195 lines
15 KiB
HTML
Raw Permalink 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 — wyjazd 613.02.2027</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); }
/* zweryfikowany BRAK miejsc bije kolor statusu ceny — reguła niżej wygrywa */
tr.unavailable td { background: rgba(220, 38, 38, .16); }
tr.unavailable td.name a { text-decoration: line-through; }
td.avail { white-space: nowrap; font-weight: 600; }
.archive { margin-top: 2.5rem; }
.archive h2 { margin-bottom: .2rem; }
.archive .lead { font-size: .88rem; margin-top: .2rem; }
.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); }
.legend .box.u { background: rgba(220, 38, 38, .35); }
/* 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 — ❌ NIEDOSTĘPNY 613.02 (zweryfikowane)</h1>
<p class="lead">Jedyny obiekt w bazie ze zweryfikowanym cennikiem i kalendarzem — na 613.02 wszystkie trzy apartamenty zajęte (Fasching), wolne dopiero od 13.02.</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>Jedyny obiekt w bazie ze zweryfikowanym cennikiem i kalendarzem — na 613.02 wszystkie trzy apartamenty zajęte (Fasching), wolne dopiero od 13.02.</td></tr><tr><th>timestamp</th><td>2026-08-01T00:00:00Z</td></tr><tr><th>tags</th><td>nocleg, saalbach, referencja, niedostepny</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</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)</td></tr><tr><th>ocena</th><td>9.1/10 (Booking)</td></tr><tr><th>uklad_dla_grupy</th><td>2 apartamenty po 7 os. (potrzebne 2 z 3)</td></tr><tr><th>cena_za_apartament_tydzien</th><td>7 000 € + 500 € sprzątanie + taksy (30.0126.02 = high season, cennik oficjalny)</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 01.08.2026)</td></tr><tr><th>dostepnosc_6_13_02_2027</th><td>❌ BRAK — zweryfikowane: 0612.02 wszystkie 3 apartamenty ZAJĘTE (Fasching)</td></tr><tr><th>dostepnosc_alternatywy</th><td>✅ 1320.02: Top 1 + Top 3 WOLNE (2 naraz!); ✅ 27.0206.03: wszystkie 3 wolne</td></tr><tr><th>priorytet</th><td>NIEDOSTĘPNY w terminie; referencja cenowa + opcja przy zmianie tygodnia</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-08-01</td></tr></tbody></table></div></details>
<h2>Dostępność (kalendarz obiektu, stan 01.08.2026)</h2>
<div class="table-wrap"><table><thead><tr><th style="text-align:left">Tydzień</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"><strong>0613.02.2027</strong></td><td style="text-align:left">ZAJĘTY</td><td style="text-align:left">ZAJĘTY</td><td style="text-align:left">ZAJĘTY</td><td style="text-align:left"></td></tr><tr><td style="text-align:left">1320.02.2027</td><td style="text-align:left"><strong>WOLNY</strong></td><td style="text-align:left">zajęty</td><td style="text-align:left"><strong>WOLNY</strong></td><td style="text-align:left"></td></tr><tr><td style="text-align:left">2027.02.2027</td><td style="text-align:left">ZAJĘTY</td><td style="text-align:left">ZAJĘTY</td><td style="text-align:left">ZAJĘTY</td><td style="text-align:left"></td></tr><tr><td style="text-align:left">27.0206.03.2027</td><td style="text-align:left"><strong>WOLNY</strong></td><td style="text-align:left"><strong>WOLNY</strong></td><td style="text-align:left"><strong>WOLNY</strong></td><td style="text-align:left"></td></tr></tbody></table></div>
<p>Kalendarz obiektu oznacza 0408.02 jako Fasching — tydzień wyprzedany.</p>
<h2>Cennik (oficjalny, zima 26/27)</h2>
<p>Cały okres 02.0105.03.2027 = high season: <strong>1 000 €/noc, 7 000 €/tydz.</strong> za apartament 1012 os. (117128 m², 3 łazienki). Plus: sprzątanie 500 €, taksa 3 €/os./noc, kaucja 900 €. Kosztorys 2 apartamentów (14 os.): 2× 7 647 € → rodzina 2+2 ~4 370 €, rodzina 2+1 ~3 277 €.</p>
<h2>Warunki</h2>
<p>Zaliczka 30%; reszta + kaucja 90 dni przed. Bezpłatna anulacja do 91 dni przed przyjazdem (dla 13.02 → deadline ~14.11.2026), potem 100%.</p>
<h2>Wniosek</h2>
<p>Dla 613.02 odpada fizycznie. Przy przesunięciu grupy na <strong>1320.02</strong> wraca opcja 2 apartamentów (nadal ~2× powyżej celu ~2 000 €/rodzinę, chyba że negocjacja za 7 os. zejdzie do ~5 000 €/apartament). Ten wpis jest zarazem twardym dowodem presji na tydzień Fasching — patrz <a href="../../wyjazd.html">wyjazd</a> i <a href="../region.html">region</a>.</p>
<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>