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

177 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>Karty — 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>
<h1>Ski 2027 — wyjazd 613.02.2027</h1>
<p class="lead">Karty konceptów bundle'a — pełna treść każdego dokumentu (ceny, dostępność, plusy/minusy). Struktura powiązań: <a href="../viz.html">graf</a>.</p>
<h2>Wyjazd i wiedza ogólna</h2>
<ul class="cards"><li><a href="szablon-maila.html">Szablon zapytania grupowego (EN)</a> <span class="chip">narzedzie</span><p>Gotowy angielski mail o 4 apartamenty dla 14 osób w terminie 613.02.2027, z pytaniem o najbliższy wolny tydzień i notatkami negocjacyjnymi na rynek Fasching.</p></li><li><a href="wyjazd.html">Ski 2027 — cztery warianty na termin 613.02.2027</a> <span class="chip">Trip</span><p>Wyjazd narciarski 4 rodzin (14 osób) z Warszawy w tygodniu Fasching: porównanie czterech regionów, statusy dostępności noclegów i wnioski przekrojowe.</p></li></ul>
<h2>Wariant Ischgl / Paznaun</h2>
<ul class="cards"><li><a href="ischgl/region.html">Ischgl / Silvretta Arena + dolina Paznaun</a> <span class="chip">region</span><p>Wariant alternatywny: 239 km Silvretta Areny z jazdą do bezcłowego Samnaun, nocleg w tańszym Kappl — skipass zweryfikowany na 26/27 i bez dopłaty sezonowej, ale bez zniżki dla 17-latków.</p></li><li><a href="ischgl/oferty/apartment-brandau-kappl.html">Apartment Brandau (Kappl)</a> <span class="chip">SZACUNEK</span> <span class="chip">oferta</span><p>Rodzinny dom z sześcioma apartamentami w Kappl — bierzemy cztery, ceny doliny zamiast cen Ischgl, PLAN A wariantu Ischgl; dostępność na 613.02 tylko mailem.</p></li><li><a href="ischgl/oferty/apartments-kappl.html">Apartments Kappl</a> <span class="chip">SZACUNEK</span> <span class="chip">oferta</span><p>Tyrolski dom apartamentowy 100 m od przystanku skibusa bez przesiadki do Ischgl — liczba wolnych jednostek na 613.02 do potwierdzenia mailem, PLAN B wariantu Ischgl.</p></li></ul>
<h2>Wariant Kronplatz / Plan de Corones</h2>
<ul class="cards"><li><a href="kronplatz/region.html">Kronplatz / Plan de Corones (Południowy Tyrol)</a> <span class="chip">region</span><p>Wariant alternatywny i najlepiej znoszący tydzień Fasching: 121 km na jednej górze plus cały Dolomiti Superski, mniejszy nacisk karnawałowy niż w Austrii, junior do 18 lat.</p></li><li><a href="kronplatz/oferty/haeuslerhof-valdaora.html">Häuslerhof (Valdaora)</a> <span class="chip">SZACUNEK</span> <span class="chip">oferta</span><p>Gospodarstwo z dokładnie czterema apartamentami — grupa zajmuje cały obiekt, a zweryfikowana anulacja do 2 miesięcy przed (~6.12.2026) jest najłagodniejsza w bazie.</p></li><li><a href="kronplatz/oferty/residence-corones-valdaora.html">Residence Corones (Valdaora)</a> <span class="chip">SZACUNEK</span> <span class="chip">oferta</span><p>Rezydencja w centrum Valdaory ze skibusem przed domem i Digital Guestpassem w cenie — PLAN B wariantu Kronplatz, dostępność na 613.02 do potwierdzenia mailem.</p></li></ul>
<h2>Wariant Saalbach (baza)</h2>
<ul class="cards"><li><a href="saalbach/region.html">Skicircus Saalbach-Hinterglemm-Leogang-Fieberbrunn</a> <span class="chip">region</span><p>Wariant bazowy: 270 km tras i najkrótszy dojazd z Warszawy, ale w tygodniu Fasching (613.02.2027) nocleg drożeje do 6 5009 000 € za cztery apartamenty.</p></li><li><a href="saalbach/oferty/alpenparks-rehrenberg.html">AlpenParks Apartments Rehrenberg</a> <span class="chip">SZACUNEK</span> <span class="chip">oferta</span><p>ARCHIWALNA: rezerwowy obiekt w Viehhofen z riserczu styczniowego — ceny i dostępność nie były weryfikowane na termin 613.02.2027.</p></li><li><a href="saalbach/oferty/alpenparks-sonnleiten.html">AlpenParks Hotel &amp; Apartment Sonnleiten</a> <span class="chip">SZACUNEK</span> <span class="chip">oferta</span><p>Duży aparthotel 2 min od stoku w Saalbach z basenem i sauną — jedyny obiekt w regionie z silnikiem online, więc dostępność na 613.02 sprawdzicie w dwie minuty.</p></li><li><a href="saalbach/oferty/dom-dla-grupy.html">Duży dom wakacyjny 1214 os. (do wyszukania)</a> <span class="chip">SZACUNEK</span> <span class="chip">oferta-koncept</span><p>ARCHIWALNA: koncept jednego domu dla całej grupy z riserczu styczniowego — nie był weryfikowany na termin 613.02.2027, ceny i dostępność dotyczą stycznia.</p></li><li><a href="saalbach/oferty/glemm-lodge.html">Glemm Lodge Apartments ⭐⭐⭐⭐</a> <span class="chip">ZWERYFIKOWANE (cennik + kalendarz obiektu, stan 01.08.2026)</span> <span class="chip">oferta</span><p>Jedyny obiekt w bazie ze zweryfikowanym cennikiem i kalendarzem — na 613.02 wszystkie trzy apartamenty zajęte (Fasching), wolne dopiero od 13.02.</p></li><li><a href="saalbach/oferty/kristall-schattbergxpress.html">Appartementhaus Kristall at SchattbergXpress</a> <span class="chip">SZACUNEK</span> <span class="chip">oferta</span><p>Apartamenty 50 m od gondoli Schattberg X-press w centrum Saalbach — PLAN A wariantu bazowego, dostępność na 613.02 do sprawdzenia mailem i na Bookingu.</p></li><li><a href="saalbach/oferty/sportchalet-viehhofen.html">Sportchalet Viehhofen</a> <span class="chip">SZACUNEK</span> <span class="chip">oferta</span><p>Kameralny obiekt holenderskich gospodarzy w Viehhofen z oceną 5.0 — najlepszy stosunek ceny do jakości i realna negocjacja nawet w szczycie, PLAN B.</p></li></ul>
<h2>Wariant Serfaus-Fiss-Ladis</h2>
<ul class="cards"><li><a href="sfl/region.html">Serfaus-Fiss-Ladis (SFL)</a> <span class="chip">region</span><p>Wariant alternatywny: 214 km na słonecznym płaskowyżu i najlepsza infrastruktura rodzinna, ale w lutym bez styczniowej przewagi cenowej — u nich to pełny wysoki sezon.</p></li><li><a href="sfl/oferty/apart-ideal-serfaus.html">Apart Ideal (Serfaus)</a> <span class="chip">SZACUNEK</span> <span class="chip">oferta</span><p>Sześć apartamentów z oceną 4.8/5, 50 m od podziemnego metra w Serfaus — pełne doświadczenie regionu za dopłatą, PLAN B wariantu SFL.</p></li><li><a href="sfl/oferty/haus-central-ladis.html">Haus Central (Apart Central), Ladis</a> <span class="chip">SZACUNEK</span> <span class="chip">oferta</span><p>Dokładnie cztery apartamenty z balkonami przy kolejce Sonnenbahn w najtańszej wsi płaskowyżu — cały dom dla grupy, PLAN A wariantu SFL.</p></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>
</body>
</html>