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>
217 lines
29 KiB
HTML
217 lines
29 KiB
HTML
<!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 6–13.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>6–13.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 200–19 500 €</span><p>Saalbach traci przewagę cenową noclegów w Fasching — wchodzi w budżet 16–19,5 tys.</p></li><li><a href="ischgl/region.html">Ischgl/Paznaun</a><br><span class="budget"><strong>Budżet grupy:</strong> ~14 200–17 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 <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 500–17 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 500–17 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ść 6–13.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 100–1 600 € (szacunek, szczyt lutowy)">~1 100–1 600 €</td><td data-num="1100">~1 100–1 600 €</td><td data-num="900">~900–1 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 100–1 700 € (szacunek, szczyt lutowy)">~1 100–1 700 €</td><td data-num="1100">~1 100–1 700 €</td><td data-num="900">~900–1 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 000–1 500 € (szacunek, wysoki sezon)">~1 000–1 500 €</td><td data-num="1100">~1 100–1 500 €</td><td data-num="950">~950–1 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 100–1 600 € (szacunek, wysoki sezon)">~1 100–1 600 €</td><td data-num="1100">~1 100–1 600 €</td><td data-num="950">~950–1 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 300–1 700 € (szacunek, wysoki sezon)">~1 300–1 700 €</td><td data-num="1300">~1 300–1 700 €</td><td data-num="1100">~1 100–1 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 500–1 900 € (szacunek, szczyt lutowy)">~1 500–1 900 €</td><td data-num="1500">~1 500–1 900 €</td><td data-num="1250">~1 250–1 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 600–2 200 € (szacunek; Serfaus = najdroższa wieś, wysoki sezon)">~1 600–2 200 €</td><td data-num="1600">~1 600–2 200 €</td><td data-num="1350">~1 350–1 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 'Tube' → <10 min do kolejki">50 m do stacji metra 'Tube' → <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 & Apartment Sonnleiten" loading="lazy"></a></td><td class="name" data-key="AlpenParks Hotel & Apartment Sonnleiten"><a href="saalbach/oferty/alpenparks-sonnleiten.html">AlpenParks Hotel & 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 700–2 300 € (szacunek, szczyt lutowy)">~1 700–2 300 €</td><td data-num="1700">~1 700–2 300 €</td><td data-num="1400">~1 400–1 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 800–2 400 € (szacunek, szczyt lutowy)">~1 800–2 400 €</td><td data-num="1800">~1 800–2 400 €</td><td data-num="1500">~1 500–2 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: 06–12.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.01–26.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 <span class="box e"></span>szacunek do potwierdzenia <span class="box u"></span>zweryfikowany brak miejsc<br>Dostępność 6–13.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 (16–23.01.2027). Ceny i dostępność nie były weryfikowane na 6–13.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ść 6–13.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 100–1 500 € (szacunek, styczeń poza feriami)">~1 100–1 500 €</td><td data-num="1100">~1 100–1 500 €</td><td data-num="950">~950–1 250 €</td><td data-key="SZACUNEK — silnik online na alpenparks.at" title="SZACUNEK — silnik online na alpenparks.at">SZACUNEK</td><td data-key="5–10 min pieszo do gondoli zellamseeXpress">5–10 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 12–14 os. (do wyszukania)"><a href="saalbach/oferty/dom-dla-grupy.html">Duży dom wakacyjny 12–14 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 500–6 500 € (szacunek, styczeń poza feriami)">4 500–6 500 € (cały dom)</td><td data-num="1400" title="~1 400–1 900 € (podział od osoby)">~1 400–1 900 €</td><td data-num="1100" title="~1 100–1 500 € (podział od osoby)">~1 100–1 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>
|