narty-2027/pages/porownanie.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

217 lines
29 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>Porównanie ofert — 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 class="wide">
<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>
<h1>Porównanie ofert</h1>
<p class="lead">Wszystkie 10 rozważanych noclegów na termin <strong>613.02.2027</strong> (tydzień Fasching, szczyt sezonu) w jednej tabeli — dane prosto z frontmatterów kart. Kliknij nagłówek, żeby posortować; domyślnie od najtańszej rodziny 2+2.</p>
<h2>Regiony w skrócie</h2>
<ul class="summary"><li><a href="saalbach/region.html">Saalbach</a><br><span class="budget"><strong>Budżet grupy:</strong> ~16 20019 500 €</span><p>Saalbach traci przewagę cenową noclegów w Fasching — wchodzi w budżet 1619,5 tys.</p></li><li><a href="ischgl/region.html">Ischgl/Paznaun</a><br><span class="budget"><strong>Budżet grupy:</strong> ~14 20017 000 €</span><p>Ischgl paradoksalnie konkurencyjny cenowo (mieszkając w Kappl): skipass bez dopłaty sezonowej — ale pilnować rocznika 17-latków (❌ zniżka tylko do &lt;17, +194 € za każdego 17-latka) i liczyć się z maksymalnym tłokiem.</p></li><li><a href="kronplatz/region.html">Kronplatz</a><br><span class="budget"><strong>Budżet grupy:</strong> ~14 50017 700 €</span><p>Kronplatz najlepiej znosi ten termin: mniejszy nacisk karnawałowy niż Austria, budżet w środku stawki, junior do 18 lat.</p></li><li><a href="sfl/region.html">SFL</a><br><span class="budget"><strong>Budżet grupy:</strong> ~14 50017 900 €</span><p>SFL w lutym bez styczniowej przewagi cenowej — nadal najlepszy funkcjonalnie dla dzieci, ale już nie najtańszy (u nich luty to pełny wysoki sezon).</p></li></ul>
<h2>Wszystkie oferty</h2>
<div class="table-wrap"><table class="sortable"><thead><tr><th data-key="">Zdjęcie</th><th scope="col" aria-sort="none">Oferta</th><th scope="col" aria-sort="none">Dostępność 613.02</th><th scope="col" aria-sort="none">Priorytet</th><th scope="col" aria-sort="none">Region</th><th scope="col" aria-sort="none">Miejscowość</th><th scope="col" aria-sort="none">€ / apart. / tydzień</th><th scope="col" aria-sort="none">Rodzina 2+2</th><th scope="col" aria-sort="none">Rodzina 2+1</th><th scope="col" aria-sort="none">Status ceny</th><th scope="col" aria-sort="none">Od wyciągu</th><th scope="col" aria-sort="none">WWW</th></tr></thead><tbody><tr class="estimate"><td class="thumb" data-key=""><a href="ischgl/oferty/apartment-brandau-kappl.html"><img src="img/apartment-brandau-kappl/01.jpg" alt="Apartment Brandau" loading="lazy"></a></td><td class="name" data-key="Apartment Brandau"><a href="ischgl/oferty/apartment-brandau-kappl.html">Apartment Brandau</a></td><td class="avail" data-key="2" title="🔍 BRAK DANYCH — tylko mail">🔍 do sprawdzenia</td><td data-key="PLAN A dla wariantu Ischgl" title="PLAN A dla wariantu Ischgl">PLAN A</td><td data-key="Ischgl/Paznaun"><a href="ischgl/region.html">Ischgl/Paznaun</a></td><td data-key="Kappl (Paznaun)" title="Kappl (Paznaun)">Kappl</td><td data-num="1100" title="~1 1001 600 € (szacunek, szczyt lutowy)">~1 1001 600 €</td><td data-num="1100">~1 1001 600 €</td><td data-num="900">~9001 350 €</td><td data-key="SZACUNEK — wycena mailowo" title="SZACUNEK — wycena mailowo">SZACUNEK</td><td data-key="skibus przy domu → Kappl / Ischgl ~10 min">skibus przy domu → Kappl / Ischgl ~10 min</td><td data-key="kappl-apartment-brandau.at"><a href="http://www.kappl-apartment-brandau.at" target="_blank" rel="noopener" class="ext">kappl-apartment-brandau.at</a></td></tr><tr class="estimate"><td class="thumb" data-key=""><a href="ischgl/oferty/apartments-kappl.html"><img src="img/apartments-kappl/01.jpg" alt="Apartments Kappl" loading="lazy"></a></td><td class="name" data-key="Apartments Kappl"><a href="ischgl/oferty/apartments-kappl.html">Apartments Kappl</a></td><td class="avail" data-key="2" title="🔍 BRAK DANYCH — tylko mail">🔍 do sprawdzenia</td><td data-key="PLAN B dla wariantu Ischgl" title="PLAN B dla wariantu Ischgl">PLAN B</td><td data-key="Ischgl/Paznaun"><a href="ischgl/region.html">Ischgl/Paznaun</a></td><td data-key="Kappl (Paznaun)" title="Kappl (Paznaun)">Kappl</td><td data-num="1100" title="~1 1001 700 € (szacunek, szczyt lutowy)">~1 1001 700 €</td><td data-num="1100">~1 1001 700 €</td><td data-num="900">~9001 400 €</td><td data-key="SZACUNEK — wycena mailowo" title="SZACUNEK — wycena mailowo">SZACUNEK</td><td data-key="przystanek skibusa 100 m — bez przesiadki do Ischgl, Galtür, See">przystanek skibusa 100 m — bez przesiadki do Ischgl, Galtür, See</td><td data-key="apartments.kappl.at"><a href="https://www.apartments.kappl.at" target="_blank" rel="noopener" class="ext">apartments.kappl.at</a></td></tr><tr class="estimate"><td class="thumb" data-key=""><a href="kronplatz/oferty/haeuslerhof-valdaora.html"><img src="img/haeuslerhof-valdaora/01.jpg" alt="Häuslerhof" loading="lazy"></a></td><td class="name" data-key="Häuslerhof"><a href="kronplatz/oferty/haeuslerhof-valdaora.html">Häuslerhof</a></td><td class="avail" data-key="2" title="🔍 BRAK DANYCH — tylko mail">🔍 do sprawdzenia</td><td data-key="PLAN A dla wariantu Kronplatz" title="PLAN A dla wariantu Kronplatz">PLAN A</td><td data-key="Kronplatz"><a href="kronplatz/region.html">Kronplatz</a></td><td data-key="Valdaora/Olang">Valdaora/Olang</td><td data-num="1000" title="~1 0001 500 € (szacunek, wysoki sezon)">~1 0001 500 €</td><td data-num="1100">~1 1001 500 €</td><td data-num="950">~9501 300 €</td><td data-key="SZACUNEK — wycena mailowo" title="SZACUNEK — wycena mailowo">SZACUNEK</td><td data-key="skibus do gondoli Olang (Kronplatz)">skibus do gondoli Olang (Kronplatz)</td><td data-key="haeuslerhof.it"><a href="https://www.haeuslerhof.it" target="_blank" rel="noopener" class="ext">haeuslerhof.it</a></td></tr><tr class="estimate"><td class="thumb" data-key=""><a href="kronplatz/oferty/residence-corones-valdaora.html" class="placeholder" title="brak zdjęć">RC</a></td><td class="name" data-key="Residence Corones"><a href="kronplatz/oferty/residence-corones-valdaora.html">Residence Corones</a></td><td class="avail" data-key="2" title="🔍 BRAK DANYCH — tylko mail">🔍 do sprawdzenia</td><td data-key="PLAN B dla wariantu Kronplatz" title="PLAN B dla wariantu Kronplatz">PLAN B</td><td data-key="Kronplatz"><a href="kronplatz/region.html">Kronplatz</a></td><td data-key="Valdaora (centrum)" title="Valdaora (centrum)">Valdaora</td><td data-num="1100" title="~1 1001 600 € (szacunek, wysoki sezon)">~1 1001 600 €</td><td data-num="1100">~1 1001 600 €</td><td data-num="950">~9501 350 €</td><td data-key="SZACUNEK — wycena mailowo (reception@corones.it)" title="SZACUNEK — wycena mailowo (reception@corones.it)">SZACUNEK</td><td data-key="skibus PRZED domem → 5 min do gondoli Kronplatz">skibus PRZED domem → 5 min do gondoli Kronplatz</td><td data-key="corones.it"><a href="https://corones.it" target="_blank" rel="noopener" class="ext">corones.it</a></td></tr><tr class="estimate"><td class="thumb" data-key=""><a href="sfl/oferty/haus-central-ladis.html"><img src="img/haus-central-ladis/01.jpg" alt="Haus Central (Apart Central)" loading="lazy"></a></td><td class="name" data-key="Haus Central (Apart Central)"><a href="sfl/oferty/haus-central-ladis.html">Haus Central (Apart Central)</a></td><td class="avail" data-key="2" title="🔍 BRAK DANYCH — enquiry przez serfaus-fiss-ladis.at">🔍 do sprawdzenia</td><td data-key="PLAN A dla wariantu SFL" title="PLAN A dla wariantu SFL">PLAN A</td><td data-key="SFL"><a href="sfl/region.html">SFL</a></td><td data-key="Ladis">Ladis</td><td data-num="1300" title="~1 3001 700 € (szacunek, wysoki sezon)">~1 3001 700 €</td><td data-num="1300">~1 3001 700 €</td><td data-num="1100">~1 1001 450 €</td><td data-key="SZACUNEK — enquiry przez portal regionu lub mail" title="SZACUNEK — enquiry przez portal regionu lub mail">SZACUNEK</td><td data-key="przy kolejce Sonnenbahn Ladis-Fiss / skibusie">przy kolejce Sonnenbahn Ladis-Fiss / skibusie</td><td data-key="serfaus-fiss-ladis.at"><a href="https://www.serfaus-fiss-ladis.at/en/Accommodation-list/Haus-Central-holiday-apartment-Ladis_ad-40835" target="_blank" rel="noopener" class="ext">serfaus-fiss-ladis.at</a></td></tr><tr class="estimate"><td class="thumb" data-key=""><a href="saalbach/oferty/sportchalet-viehhofen.html"><img src="img/sportchalet-viehhofen/01.jpg" alt="Sportchalet Viehhofen" loading="lazy"></a></td><td class="name" data-key="Sportchalet Viehhofen"><a href="saalbach/oferty/sportchalet-viehhofen.html">Sportchalet Viehhofen</a></td><td class="avail" data-key="2" title="🔍 BRAK DANYCH — tylko mail do gospodarzy">🔍 do sprawdzenia</td><td data-key="PLAN B (cena/jakość)" title="PLAN B (cena/jakość)">PLAN B</td><td data-key="Saalbach"><a href="saalbach/region.html">Saalbach</a></td><td data-key="Viehhofen (3 km od Saalbach)" title="Viehhofen (3 km od Saalbach)">Viehhofen</td><td data-num="1500" title="~1 5001 900 € (szacunek, szczyt lutowy)">~1 5001 900 €</td><td data-num="1500">~1 5001 900 €</td><td data-num="1250">~1 2501 550 €</td><td data-key="SZACUNEK — wycena tylko mailowo" title="SZACUNEK — wycena tylko mailowo">SZACUNEK</td><td data-key="gondola zellamseeXpress za rogiem; skibus do Skicircusu pod domem">gondola zellamseeXpress za rogiem; skibus do Skicircusu pod domem</td><td data-key="sportchaletviehhofen.com"><a href="https://sportchaletviehhofen.com" target="_blank" rel="noopener" class="ext">sportchaletviehhofen.com</a></td></tr><tr class="estimate"><td class="thumb" data-key=""><a href="sfl/oferty/apart-ideal-serfaus.html" class="placeholder" title="brak zdjęć">AI</a></td><td class="name" data-key="Apart Ideal"><a href="sfl/oferty/apart-ideal-serfaus.html">Apart Ideal</a></td><td class="avail" data-key="2" title="🔍 BRAK DANYCH — enquiry">🔍 do sprawdzenia</td><td data-key="PLAN B dla wariantu SFL" title="PLAN B dla wariantu SFL">PLAN B</td><td data-key="SFL"><a href="sfl/region.html">SFL</a></td><td data-key="Serfaus (obrzeża)" title="Serfaus (obrzeża)">Serfaus</td><td data-num="1600" title="~1 6002 200 € (szacunek; Serfaus = najdroższa wieś, wysoki sezon)">~1 6002 200 €</td><td data-num="1600">~1 6002 200 €</td><td data-num="1350">~1 3501 850 €</td><td data-key="SZACUNEK — enquiry przez portal regionu" title="SZACUNEK — enquiry przez portal regionu">SZACUNEK</td><td data-key="50 m do stacji metra &#x27;Tube&#x27; → &lt;10 min do kolejki">50 m do stacji metra &#x27;Tube&#x27;&lt;10 min do kolejki</td><td data-key="serfaus-fiss-ladis.at"><a href="https://serfaus-fiss-ladis.at/en/serfaus/apartment/apart-ideal_dr91356" target="_blank" rel="noopener" class="ext">serfaus-fiss-ladis.at</a></td></tr><tr class="estimate"><td class="thumb" data-key=""><a href="saalbach/oferty/alpenparks-sonnleiten.html"><img src="img/alpenparks-sonnleiten/01.jpg" alt="AlpenParks Hotel &amp; Apartment Sonnleiten" loading="lazy"></a></td><td class="name" data-key="AlpenParks Hotel &amp; Apartment Sonnleiten"><a href="saalbach/oferty/alpenparks-sonnleiten.html">AlpenParks Hotel &amp; Apartment Sonnleiten</a></td><td class="avail" data-key="2" title="🔍 BRAK DANYCH — silnik online pokaże od ręki (najszybsza weryfikacja na liście)">🔍 do sprawdzenia</td><td data-key="PLAN A-bis">PLAN A-bis</td><td data-key="Saalbach"><a href="saalbach/region.html">Saalbach</a></td><td data-key="Saalbach">Saalbach</td><td data-num="1700" title="~1 7002 300 € (szacunek, szczyt lutowy)">~1 7002 300 €</td><td data-num="1700">~1 7002 300 €</td><td data-num="1400">~1 4001 800 €</td><td data-key="SZACUNEK — ceny rzeczywiste od ręki w silniku alpenparks.at" title="SZACUNEK — ceny rzeczywiste od ręki w silniku alpenparks.at">SZACUNEK</td><td data-key="~2 min pieszo do stoku">~2 min pieszo do stoku</td><td data-key="alpenparks.at"><a href="https://www.alpenparks.at" target="_blank" rel="noopener" class="ext">alpenparks.at</a></td></tr><tr class="estimate"><td class="thumb" data-key=""><a href="saalbach/oferty/kristall-schattbergxpress.html" class="placeholder" title="brak zdjęć">AK</a></td><td class="name" data-key="Appartementhaus Kristall at SchattbergXpress"><a href="saalbach/oferty/kristall-schattbergxpress.html">Appartementhaus Kristall at SchattbergXpress</a></td><td class="avail" data-key="2" title="🔍 BRAK DANYCH — brak publicznego kalendarza; sprawdzić datami na Booking/All in One + mail grupowy">🔍 do sprawdzenia</td><td data-key="PLAN A">PLAN A</td><td data-key="Saalbach"><a href="saalbach/region.html">Saalbach</a></td><td data-key="Saalbach (centrum)" title="Saalbach (centrum)">Saalbach</td><td data-num="1800" title="~1 8002 400 € (szacunek, szczyt lutowy)">~1 8002 400 €</td><td data-num="1800">~1 8002 400 €</td><td data-num="1500">~1 5002 000 €</td><td data-key="SZACUNEK">SZACUNEK</td><td data-key="50 m — gondola Schattberg X-press">50 m — gondola Schattberg X-press</td><td data-key="booking.com"><a href="https://www.booking.com/hotel/at/appartementhaus-kristall.html" target="_blank" rel="noopener" class="ext">booking.com</a></td></tr><tr class="verified unavailable"><td class="thumb" data-key=""><a href="saalbach/oferty/glemm-lodge.html"><img src="img/glemm-lodge/01.jpg" alt="Glemm Lodge Apartments ⭐⭐⭐⭐" loading="lazy"></a></td><td class="name" data-key="Glemm Lodge Apartments ⭐⭐⭐⭐"><a href="saalbach/oferty/glemm-lodge.html">Glemm Lodge Apartments ⭐⭐⭐⭐</a></td><td class="avail" data-key="3" title="❌ BRAK — zweryfikowane: 0612.02 wszystkie 3 apartamenty ZAJĘTE (Fasching)">❌ BRAK (zweryf.)</td><td data-key="NIEDOSTĘPNY w terminie; referencja cenowa + opcja przy zmianie tygodnia">NIEDOSTĘPNY w terminie; referencja cenowa + opcja przy zmianie tygodnia</td><td data-key="Saalbach"><a href="saalbach/region.html">Saalbach</a></td><td data-key="między Saalbach a Hinterglemm">między Saalbach a Hinterglemm</td><td data-num="7000" title="7 000 € + 500 € sprzątanie + taksy (30.0126.02 = high season, cennik oficjalny)">7 000 € + 500 € sprzątanie + taksy</td><td data-num="4370">~4 370 €</td><td data-num="3277">~3 277 €</td><td data-key="ZWERYFIKOWANE (cennik + kalendarz obiektu, stan 01.08.2026)" title="ZWERYFIKOWANE (cennik + kalendarz obiektu, stan 01.08.2026)">ZWERYFIKOWANE</td><td data-key="zjazd trasą 86 pod dom; skibus pod drzwiami (5 min)">zjazd trasą 86 pod dom; skibus pod drzwiami (5 min)</td><td data-key="glemmlodge-apartments.com"><a href="https://glemmlodge-apartments.com" target="_blank" rel="noopener" class="ext">glemmlodge-apartments.com</a></td></tr></tbody></table></div>
<p class="legend"><span class="box v"></span>cena zweryfikowana &nbsp; <span class="box e"></span>szacunek do potwierdzenia &nbsp; <span class="box u"></span>zweryfikowany brak miejsc<br>Dostępność 613.02: ✅ DOSTĘPNE (zweryfikowane) · 🔍 do sprawdzenia (obiekt nie publikuje kalendarza) · ❌ BRAK (zweryfikowane). Bilans: ❌ BRAK (zweryf.): 1 · 🔍 do sprawdzenia: 9. Najedź na komórkę, żeby zobaczyć pełną notatkę.</p>
<section class="archive">
<h2>Archiwum — poza paczką riserczową 08.2026</h2>
<p class="lead">Karty z riserczu na poprzedni termin (1623.01.2027). Ceny i dostępność nie były weryfikowane na 613.02.2027 — nie wchodzą do porównania wyżej ani do statusów dostępności. Zostają, bo tropy są nadal dobre.</p>
<div class="table-wrap"><table class="sortable"><thead><tr><th data-key="">Zdjęcie</th><th scope="col" aria-sort="none">Oferta</th><th scope="col" aria-sort="none">Dostępność 613.02</th><th scope="col" aria-sort="none">Priorytet</th><th scope="col" aria-sort="none">Region</th><th scope="col" aria-sort="none">Miejscowość</th><th scope="col" aria-sort="none">€ / apart. / tydzień</th><th scope="col" aria-sort="none">Rodzina 2+2</th><th scope="col" aria-sort="none">Rodzina 2+1</th><th scope="col" aria-sort="none">Status ceny</th><th scope="col" aria-sort="none">Od wyciągu</th><th scope="col" aria-sort="none">WWW</th></tr></thead><tbody><tr class="estimate"><td class="thumb" data-key=""><a href="saalbach/oferty/alpenparks-rehrenberg.html"><img src="img/alpenparks-rehrenberg/01.jpg" alt="AlpenParks Apartments Rehrenberg" loading="lazy"></a></td><td class="name" data-key="AlpenParks Apartments Rehrenberg"><a href="saalbach/oferty/alpenparks-rehrenberg.html">AlpenParks Apartments Rehrenberg</a></td><td class="avail" data-key="9"></td><td data-key="ARCHIWALNA (poza paczką 08.2026)" title="ARCHIWALNA (poza paczką 08.2026)">ARCHIWALNA</td><td data-key="Saalbach"><a href="saalbach/region.html">Saalbach</a></td><td data-key="Viehhofen">Viehhofen</td><td data-num="1100" title="~1 1001 500 € (szacunek, styczeń poza feriami)">~1 1001 500 €</td><td data-num="1100">~1 1001 500 €</td><td data-num="950">~9501 250 €</td><td data-key="SZACUNEK — silnik online na alpenparks.at" title="SZACUNEK — silnik online na alpenparks.at">SZACUNEK</td><td data-key="510 min pieszo do gondoli zellamseeXpress">510 min pieszo do gondoli zellamseeXpress</td><td data-key="alpenparks.at"><a href="https://www.alpenparks.at" target="_blank" rel="noopener" class="ext">alpenparks.at</a></td></tr><tr class="estimate"><td class="thumb" data-key=""><a href="saalbach/oferty/dom-dla-grupy.html" class="placeholder" title="brak zdjęć">DD</a></td><td class="name" data-key="Duży dom wakacyjny 1214 os. (do wyszukania)"><a href="saalbach/oferty/dom-dla-grupy.html">Duży dom wakacyjny 1214 os. (do wyszukania)</a></td><td class="avail" data-key="9"></td><td data-key="ARCHIWALNA (poza paczką 08.2026)" title="ARCHIWALNA (poza paczką 08.2026)">ARCHIWALNA</td><td data-key="Saalbach"><a href="saalbach/region.html">Saalbach</a></td><td data-key="Viehhofen / Maishofen / strona Fieberbrunn">Viehhofen / Maishofen / strona Fieberbrunn</td><td data-num="4500" title="4 5006 500 € (szacunek, styczeń poza feriami)">4 5006 500 € (cały dom)</td><td data-num="1400" title="~1 4001 900 € (podział od osoby)">~1 4001 900 €</td><td data-num="1100" title="~1 1001 500 € (podział od osoby)">~1 1001 500 €</td><td data-key="SZACUNEK — konkretny dom do znalezienia" title="SZACUNEK — konkretny dom do znalezienia">SZACUNEK</td><td data-key=""></td><td data-key=""></td></tr></tbody></table></div>
</section>
<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('table.sortable').forEach(function (table) {
var head = table.tHead.rows[0];
Array.prototype.forEach.call(head.cells, function (th, i) {
th.tabIndex = 0;
th.setAttribute('role', 'button');
th.addEventListener('click', function () { sortTable(table, i, th); });
th.addEventListener('keydown', function (e) {
if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); sortTable(table, i, th); }
});
});
});
function sortTable(table, index, th) {
var dir = th.dataset.dir === 'asc' ? 'desc' : 'asc';
Array.prototype.forEach.call(table.tHead.rows[0].cells, function (h) {
delete h.dataset.dir;
h.setAttribute('aria-sort', 'none');
});
th.dataset.dir = dir;
th.setAttribute('aria-sort', dir === 'asc' ? 'ascending' : 'descending');
var body = table.tBodies[0];
var rows = Array.prototype.slice.call(body.rows);
var mul = dir === 'asc' ? 1 : -1;
rows.sort(function (a, b) {
var x = a.cells[index], y = b.cells[index];
var nx = x.dataset.num, ny = y.dataset.num;
if (nx !== undefined && ny !== undefined) return (parseFloat(nx) - parseFloat(ny)) * mul;
// Wiersze bez wartości liczbowej zawsze na końcu — w obie strony.
if (nx !== undefined) return -1;
if (ny !== undefined) return 1;
var kx = x.dataset.key !== undefined ? x.dataset.key : x.textContent;
var ky = y.dataset.key !== undefined ? y.dataset.key : y.textContent;
if (!kx) return 1;
if (!ky) return -1;
return kx.localeCompare(ky, 'pl') * mul;
});
rows.forEach(function (row) { body.appendChild(row); });
}
</script>
</body>
</html>