Karta zbiorcza pages/index.html grupowała tylko korzeń i oferty/ — dziewięć konceptów wariantów dostawało własne karty, ale nie było ich na liście. Grupowanie idzie teraz po katalogach najwyższego poziomu, a nazwa grupy to pierwszy nagłówek index.md tego katalogu, więc kolejny region wystarczy dodać do bundle'a, żeby pojawił się tu sam. Linki wariantów w root index.md prowadzą do region.md, nie do index.md podkatalogów: pliki zarezerwowane nie mają kart, więc w pages/ taki odnośnik degenerował się do linku na samego siebie. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
568 lines
81 KiB
HTML
568 lines
81 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>OKF Bundle Viewer</title>
|
|
<script src="https://cdn.jsdelivr.net/npm/cytoscape@3.28.1/dist/cytoscape.min.js"></script>
|
|
<script src="https://cdn.jsdelivr.net/npm/marked@12.0.0/marked.min.js"></script>
|
|
<style>
|
|
* { box-sizing: border-box; }
|
|
body {
|
|
margin: 0;
|
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
|
|
font-size: 14px;
|
|
color: #0f172a;
|
|
background: #f8fafc;
|
|
display: flex;
|
|
flex-direction: column;
|
|
height: 100vh;
|
|
}
|
|
header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 10px 16px;
|
|
background: #fff;
|
|
border-bottom: 1px solid #e2e8f0;
|
|
flex-shrink: 0;
|
|
}
|
|
.title strong { font-size: 16px; margin-right: 8px; }
|
|
.muted { color: #64748b; font-size: 12px; }
|
|
.controls { display: flex; gap: 8px; }
|
|
.controls input, .controls select, .controls button {
|
|
font-size: 13px;
|
|
padding: 5px 8px;
|
|
border: 1px solid #cbd5e1;
|
|
border-radius: 4px;
|
|
background: #fff;
|
|
}
|
|
.controls input { width: 220px; }
|
|
.controls button { cursor: pointer; background: #f1f5f9; }
|
|
.controls button:hover { background: #e2e8f0; }
|
|
|
|
main {
|
|
display: flex;
|
|
flex: 1;
|
|
min-height: 0;
|
|
}
|
|
#graph {
|
|
flex: 1 1 60%;
|
|
background: #fff;
|
|
border-right: 1px solid #e2e8f0;
|
|
min-width: 0;
|
|
position: relative;
|
|
}
|
|
#detail {
|
|
flex: 0 0 40%;
|
|
overflow-y: auto;
|
|
padding: 18px 22px;
|
|
background: #fff;
|
|
}
|
|
#detail-empty {
|
|
text-align: center;
|
|
margin-top: 40px;
|
|
}
|
|
|
|
.detail-header { margin-bottom: 12px; }
|
|
.detail-header h1 {
|
|
font-size: 18px;
|
|
margin: 4px 0 2px;
|
|
font-weight: 600;
|
|
}
|
|
.type-chip {
|
|
display: inline-block;
|
|
padding: 2px 8px;
|
|
border-radius: 10px;
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
color: #fff;
|
|
background: #94a3b8;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.5px;
|
|
}
|
|
dl.frontmatter {
|
|
display: grid;
|
|
grid-template-columns: 90px 1fr;
|
|
row-gap: 4px;
|
|
column-gap: 12px;
|
|
margin: 8px 0 12px;
|
|
font-size: 13px;
|
|
}
|
|
dl.frontmatter dt {
|
|
color: #64748b;
|
|
font-weight: 500;
|
|
}
|
|
dl.frontmatter dd { margin: 0; }
|
|
dl.frontmatter a { color: #2563eb; word-break: break-all; }
|
|
|
|
.tag {
|
|
display: inline-block;
|
|
padding: 1px 6px;
|
|
margin: 0 4px 2px 0;
|
|
border-radius: 4px;
|
|
background: #f1f5f9;
|
|
color: #475569;
|
|
font-size: 11px;
|
|
}
|
|
|
|
.badges {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 6px;
|
|
margin: 8px 0 4px;
|
|
}
|
|
.badge {
|
|
display: inline-block;
|
|
padding: 2px 8px;
|
|
border-radius: 10px;
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
border: 1px solid transparent;
|
|
}
|
|
.badge.status-stable { background: #ecfdf5; color: #047857; border-color: #a7f3d0; }
|
|
.badge.status-draft { background: #fefce8; color: #a16207; border-color: #fde68a; }
|
|
.badge.status-deprecated { background: #f1f5f9; color: #64748b; border-color: #cbd5e1; text-decoration: line-through; }
|
|
.badge.trust-unverified { background: #f1f5f9; color: #64748b; border-color: #cbd5e1; }
|
|
.badge.trust-machine-confirmed { background: #eff6ff; color: #1d4ed8; border-color: #bfdbfe; }
|
|
.badge.trust-human-reviewed { background: #f5f3ff; color: #6d28d9; border-color: #ddd6fe; }
|
|
.badge.stale { background: #fef2f2; color: #b91c1c; border-color: #fecaca; }
|
|
.badge.fresh { background: #ecfdf5; color: #047857; border-color: #a7f3d0; }
|
|
|
|
.sources-list { padding-left: 18px; margin: 0; }
|
|
.sources-list li { margin: 1px 0; }
|
|
|
|
hr { border: none; border-top: 1px solid #e2e8f0; margin: 14px 0; }
|
|
|
|
#detail-body { font-size: 13px; line-height: 1.55; }
|
|
#detail-body h1 {
|
|
font-size: 16px; margin: 18px 0 6px;
|
|
padding-bottom: 4px; border-bottom: 1px solid #e2e8f0;
|
|
}
|
|
#detail-body h2 { font-size: 14px; margin: 14px 0 4px; }
|
|
#detail-body h3 { font-size: 13px; margin: 12px 0 4px; }
|
|
#detail-body p { margin: 6px 0; }
|
|
#detail-body code {
|
|
background: #f1f5f9;
|
|
padding: 1px 4px;
|
|
border-radius: 3px;
|
|
font-size: 12px;
|
|
font-family: ui-monospace, "SF Mono", Consolas, monospace;
|
|
}
|
|
#detail-body pre {
|
|
background: #0f172a;
|
|
color: #e2e8f0;
|
|
padding: 10px 12px;
|
|
border-radius: 6px;
|
|
overflow-x: auto;
|
|
font-size: 12px;
|
|
}
|
|
#detail-body pre code { background: transparent; color: inherit; padding: 0; }
|
|
#detail-body ul, #detail-body ol { padding-left: 22px; margin: 6px 0; }
|
|
#detail-body li { margin: 2px 0; }
|
|
#detail-body table { border-collapse: collapse; margin: 8px 0; }
|
|
#detail-body th, #detail-body td {
|
|
border: 1px solid #e2e8f0; padding: 4px 8px; font-size: 12px;
|
|
}
|
|
#detail-body a.internal { color: #2563eb; cursor: pointer; }
|
|
#detail-body a.external { color: #2563eb; }
|
|
|
|
#detail-backlinks { margin-top: 18px; }
|
|
#detail-backlinks h2 { font-size: 13px; color: #64748b; margin-bottom: 6px; }
|
|
#detail-backlinks ul { padding-left: 18px; }
|
|
#detail-backlinks a { color: #2563eb; cursor: pointer; }
|
|
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<header>
|
|
<div class="title">
|
|
<strong id="bundle-name"></strong>
|
|
<span class="muted">OKF bundle</span>
|
|
</div>
|
|
<div class="controls">
|
|
<input id="search" type="search" placeholder="Search title / id / tag">
|
|
<select id="filter-type">
|
|
<option value="">All types</option>
|
|
</select>
|
|
<select id="layout">
|
|
<option value="cose">cose (force)</option>
|
|
<option value="concentric">concentric</option>
|
|
<option value="breadthfirst">breadth-first</option>
|
|
<option value="circle">circle</option>
|
|
<option value="grid">grid</option>
|
|
</select>
|
|
<button id="reset">Reset view</button>
|
|
</div>
|
|
</header>
|
|
|
|
<main>
|
|
<section id="graph"></section>
|
|
<section id="detail">
|
|
<div id="detail-empty" class="muted">Click a node to see its details.</div>
|
|
<article id="detail-content" hidden>
|
|
<header class="detail-header">
|
|
<span class="type-chip" id="detail-type"></span>
|
|
<h1 id="detail-title"></h1>
|
|
<div class="muted" id="detail-id"></div>
|
|
</header>
|
|
<div class="badges" id="detail-badges"></div>
|
|
<dl class="frontmatter">
|
|
<dt>Description</dt><dd id="detail-description"></dd>
|
|
<dt>Resource</dt><dd id="detail-resource"></dd>
|
|
<dt>Tags</dt><dd id="detail-tags"></dd>
|
|
<dt>Generated</dt><dd id="detail-generated"></dd>
|
|
<dt>Verified</dt><dd id="detail-verified"></dd>
|
|
<dt>Sources</dt><dd id="detail-sources"></dd>
|
|
</dl>
|
|
<hr>
|
|
<div id="detail-body"></div>
|
|
<section id="detail-backlinks" hidden>
|
|
<h2>Cited by</h2>
|
|
<ul id="backlinks-list"></ul>
|
|
</section>
|
|
</article>
|
|
</section>
|
|
</main>
|
|
|
|
<script>
|
|
window.BUNDLE_NAME = "Ski 2027 \u2014 Skicircus Saalbach";
|
|
window.BUNDLE = {"nodes": [{"data": {"id": "ischgl/oferty/apartment-brandau-kappl", "label": "Apartment Brandau (Kappl)", "type": "oferta", "description": "Rodzinny dom z sze\u015bcioma apartamentami w Kappl \u2014 bierzemy cztery, ceny doliny zamiast cen Ischgl, PLAN A wariantu Ischgl.", "resource": "pages/ischgl/oferty/apartment-brandau-kappl.html", "tags": ["nocleg", "ischgl", "kappl", "plan-a"], "status": "stable", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#94a3b8", "size": 35}}, {"data": {"id": "ischgl/oferty/apartments-kappl", "label": "Apartments Kappl", "type": "oferta", "description": "Tyrolski dom apartamentowy 100 m od przystanku skibusa bez przesiadki do Ischgl \u2014 liczba wolnych jednostek do potwierdzenia, PLAN B wariantu Ischgl.", "resource": "pages/ischgl/oferty/apartments-kappl.html", "tags": ["nocleg", "ischgl", "kappl", "plan-b"], "status": "stable", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#94a3b8", "size": 33}}, {"data": {"id": "ischgl/region", "label": "Ischgl / Silvretta Arena + dolina Paznaun", "type": "region", "description": "Wariant alternatywny: 239 km Silvretta Areny z jazd\u0105 do bezc\u0142owego Samnaun, nocleg w ta\u0144szym Kappl \u2014 skipass zweryfikowany na 26/27, bez zni\u017cki dla 17-latk\u00f3w.", "resource": "pages/ischgl/region.html", "tags": ["region", "ischgl", "wariant", "skipass", "logistyka"], "status": "stable", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#94a3b8", "size": 41}}, {"data": {"id": "kronplatz/oferty/haeuslerhof-valdaora", "label": "H\u00e4uslerhof (Valdaora)", "type": "oferta", "description": "Gospodarstwo z dok\u0142adnie czterema apartamentami \u2014 grupa zajmuje ca\u0142y obiekt, anulacja bezp\u0142atna do 2 miesi\u0119cy przed, PLAN A wariantu Kronplatz.", "resource": "pages/kronplatz/oferty/haeuslerhof-valdaora.html", "tags": ["nocleg", "kronplatz", "valdaora", "plan-a"], "status": "stable", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#94a3b8", "size": 35}}, {"data": {"id": "kronplatz/oferty/residence-corones-valdaora", "label": "Residence Corones (Valdaora)", "type": "oferta", "description": "Rezydencja w centrum Valdaory z przystankiem skibusa przed domem i Digital Guestpassem w cenie \u2014 PLAN B wariantu Kronplatz.", "resource": "pages/kronplatz/oferty/residence-corones-valdaora.html", "tags": ["nocleg", "kronplatz", "valdaora", "plan-b"], "status": "stable", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#94a3b8", "size": 34}}, {"data": {"id": "kronplatz/region", "label": "Kronplatz / Plan de Corones (Po\u0142udniowy Tyrol)", "type": "region", "description": "Wariant alternatywny: 121 km na jednej g\u00f3rze plus ca\u0142y Dolomiti Superski w karnecie, baza w tanim Olang/Valdaora, junior do 18 lat bez dop\u0142aty.", "resource": "pages/kronplatz/region.html", "tags": ["region", "kronplatz", "wariant", "skipass", "logistyka"], "status": "stable", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#94a3b8", "size": 41}}, {"data": {"id": "oferty/alpenparks-rehrenberg", "label": "AlpenParks Apartments Rehrenberg", "type": "oferta", "description": "Najta\u0144szy nowy obiekt na li\u015bcie \u2014 przestronne apartamenty z prywatnymi saunami w Viehhofen, wariant rezerwowy o mieszanych opiniach, PLAN C.", "resource": "pages/oferty/alpenparks-rehrenberg.html", "tags": ["nocleg", "viehhofen", "plan-c"], "status": "stable", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#94a3b8", "size": 35}}, {"data": {"id": "oferty/alpenparks-sonnleiten", "label": "AlpenParks Hotel & Apartment Sonnleiten", "type": "oferta", "description": "Du\u017cy aparthotel ~2 min pieszo od stoku w Saalbach, z basenem i saun\u0105 w cenie \u2014 najwi\u0119ksza szansa na 4 wolne apartamenty w jednym tygodniu.", "resource": "pages/oferty/alpenparks-sonnleiten.html", "tags": ["nocleg", "saalbach", "aparthotel"], "status": "stable", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#94a3b8", "size": 37}}, {"data": {"id": "oferty/dom-dla-grupy", "label": "Du\u017cy dom wakacyjny 12\u201314 os. (do wyszukania)", "type": "oferta-koncept", "description": "Koncept wynaj\u0119cia jednego domu wakacyjnego dla ca\u0142ej grupy zamiast czterech osobnych apartament\u00f3w \u2014 klimat chaletowy w po\u0142owie ceny Glemm Lodge.", "resource": "pages/oferty/dom-dla-grupy.html", "tags": ["nocleg", "dom-wakacyjny", "koncept"], "status": "stable", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#94a3b8", "size": 38}}, {"data": {"id": "oferty/glemm-lodge", "label": "Glemm Lodge Apartments \u2b50\u2b50\u2b50\u2b50", "type": "oferta", "description": "Jedyna oferta z w pe\u0142ni zweryfikowanym cennikiem (~4 370 \u20ac/rodzin\u0119) \u2014 odrzucona bud\u017cetowo, s\u0142u\u017cy jako punkt odniesienia cenowego.", "resource": "pages/oferty/glemm-lodge.html", "tags": ["nocleg", "saalbach", "referencja"], "status": "stable", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#94a3b8", "size": 41}}, {"data": {"id": "oferty/kristall-schattbergxpress", "label": "Appartementhaus Kristall at SchattbergXpress", "type": "oferta", "description": "Apartamenty 50 m od gondoli Schattberg X-press w centrum Saalbach \u2014 najlepsza lokalizacja w rozwa\u017canym bud\u017cecie, PLAN A.", "resource": "pages/oferty/kristall-schattbergxpress.html", "tags": ["nocleg", "saalbach", "plan-a"], "status": "stable", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#94a3b8", "size": 39}}, {"data": {"id": "oferty/sportchalet-viehhofen", "label": "Sportchalet Viehhofen", "type": "oferta", "description": "Kameralny obiekt holenderskich gospodarzy w Viehhofen z ocen\u0105 5.0 \u2014 najlepszy stosunek ceny do jako\u015bci, PLAN B.", "resource": "pages/oferty/sportchalet-viehhofen.html", "tags": ["nocleg", "viehhofen", "plan-b"], "status": "stable", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#94a3b8", "size": 39}}, {"data": {"id": "region", "label": "Skicircus Saalbach-Hinterglemm-Leogang-Fieberbrunn", "type": "region", "description": "Wszystko poza noclegiem: teren narciarski, skipassy ALPIN CARD, dojazd z Warszawy, analiza termin\u00f3w, koszty \u017cycia i bud\u017cet ca\u0142kowity grupy.", "resource": "pages/region.html", "tags": ["region", "saalbach", "skipass", "logistyka"], "status": "stable", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#94a3b8", "size": 52}}, {"data": {"id": "sfl/oferty/apart-ideal-serfaus", "label": "Apart Ideal (Serfaus)", "type": "oferta", "description": "Sze\u015b\u0107 apartament\u00f3w z ocen\u0105 4.8/5, 50 m od podziemnego metra w Serfaus \u2014 pe\u0142ne do\u015bwiadczenie regionu za dop\u0142at\u0105, PLAN B wariantu SFL.", "resource": "pages/sfl/oferty/apart-ideal-serfaus.html", "tags": ["nocleg", "sfl", "serfaus", "plan-b"], "status": "stable", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#94a3b8", "size": 35}}, {"data": {"id": "sfl/oferty/haus-central-ladis", "label": "Haus Central (Apart Central), Ladis", "type": "oferta", "description": "Dok\u0142adnie cztery apartamenty z balkonami przy kolejce Sonnenbahn w najta\u0144szej wsi p\u0142askowy\u017cu \u2014 ca\u0142y dom dla grupy, PLAN A wariantu SFL.", "resource": "pages/sfl/oferty/haus-central-ladis.html", "tags": ["nocleg", "sfl", "ladis", "plan-a"], "status": "stable", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#94a3b8", "size": 35}}, {"data": {"id": "sfl/region", "label": "Serfaus-Fiss-Ladis (SFL)", "type": "region", "description": "Wariant alternatywny i najta\u0144szy bud\u017cetowo: 214 km na s\u0142onecznym p\u0142askowy\u017cu, infrastruktura skrojona pod rodziny, a termin 16\u201323.01 to u nich oficjalnie niski sezon.", "resource": "pages/sfl/region.html", "tags": ["region", "sfl", "wariant", "skipass", "logistyka"], "status": "stable", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#94a3b8", "size": 43}}, {"data": {"id": "szablon-maila", "label": "Szablon zapytania grupowego (EN)", "type": "narzedzie", "description": "Gotowy angielski mail z zapytaniem o 4 apartamenty dla 14 os\u00f3b w terminie 16\u201323.01.2027 wraz z notatkami negocjacyjnymi.", "resource": "pages/szablon-maila.html", "tags": ["szablon", "komunikacja", "rezerwacja"], "status": "stable", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#94a3b8", "size": 37}}, {"data": {"id": "wyjazd", "label": "Ski 2027 \u2014 Skicircus Saalbach", "type": "Trip", "description": "Wyjazd narciarski 4 rodzin (14 os\u00f3b) z Warszawy do Skicircus Saalbach w styczniu 2027, z celem bud\u017cetowym ~2 000 \u20ac za nocleg na rodzin\u0119.", "resource": "pages/wyjazd.html", "tags": ["wyjazd", "saalbach", "2027", "planowanie"], "status": "stable", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#94a3b8", "size": 53}}, {"data": {"id": "ext:www.kappl-apartment-brandau.at", "label": "www.kappl-apartment-brandau.at", "type": "external", "description": "http://www.kappl-apartment-brandau.at", "resource": "http://www.kappl-apartment-brandau.at", "tags": [], "status": "external", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#0d9488", "size": 22}}, {"data": {"id": "ext:allchalets.com", "label": "allchalets.com", "type": "external", "description": "https://allchalets.com", "resource": "https://allchalets.com", "tags": [], "status": "external", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#0d9488", "size": 22}}, {"data": {"id": "ext:alpenparks.at", "label": "alpenparks.at", "type": "external", "description": "https://alpenparks.at", "resource": "https://alpenparks.at", "tags": [], "status": "external", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#0d9488", "size": 22}}, {"data": {"id": "ext:alpincard.at", "label": "alpincard.at", "type": "external", "description": "https://alpincard.at", "resource": "https://alpincard.at", "tags": [], "status": "external", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#0d9488", "size": 22}}, {"data": {"id": "ext:apartments.kappl.at", "label": "apartments.kappl.at", "type": "external", "description": "https://apartments.kappl.at", "resource": "https://apartments.kappl.at", "tags": [], "status": "external", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#0d9488", "size": 22}}, {"data": {"id": "ext:belvilla.com", "label": "belvilla.com", "type": "external", "description": "https://belvilla.com", "resource": "https://belvilla.com", "tags": [], "status": "external", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#0d9488", "size": 22}}, {"data": {"id": "ext:casamundo.pl", "label": "casamundo.pl", "type": "external", "description": "https://casamundo.pl", "resource": "https://casamundo.pl", "tags": [], "status": "external", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#0d9488", "size": 22}}, {"data": {"id": "ext:corones.it", "label": "corones.it", "type": "external", "description": "https://corones.it", "resource": "https://corones.it", "tags": [], "status": "external", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#0d9488", "size": 22}}, {"data": {"id": "ext:e-domizil.de", "label": "e-domizil.de", "type": "external", "description": "https://e-domizil.de", "resource": "https://e-domizil.de", "tags": [], "status": "external", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#0d9488", "size": 22}}, {"data": {"id": "ext:glemmlodge-apartments.com", "label": "glemmlodge-apartments.com", "type": "external", "description": "https://glemmlodge-apartments.com", "resource": "https://glemmlodge-apartments.com", "tags": [], "status": "external", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#0d9488", "size": 22}}, {"data": {"id": "ext:interhome.pl", "label": "interhome.pl", "type": "external", "description": "https://interhome.pl", "resource": "https://interhome.pl", "tags": [], "status": "external", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#0d9488", "size": 22}}, {"data": {"id": "ext:serfaus-fiss-ladis.at", "label": "serfaus-fiss-ladis.at", "type": "external", "description": "https://serfaus-fiss-ladis.at", "resource": "https://serfaus-fiss-ladis.at", "tags": [], "status": "external", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#0d9488", "size": 22}}, {"data": {"id": "ext:serfaus-fiss-ladis.at/en/serfaus/apartment/apart-ideal_dr91356", "label": "serfaus-fiss-ladis.at/\u2026/apart-ideal_dr91356", "type": "external", "description": "https://serfaus-fiss-ladis.at/en/serfaus/apartment/apart-ideal_dr91356", "resource": "https://serfaus-fiss-ladis.at/en/serfaus/apartment/apart-ideal_dr91356", "tags": [], "status": "external", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#0d9488", "size": 22}}, {"data": {"id": "ext:sportchaletviehhofen.com", "label": "sportchaletviehhofen.com", "type": "external", "description": "https://sportchaletviehhofen.com", "resource": "https://sportchaletviehhofen.com", "tags": [], "status": "external", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#0d9488", "size": 22}}, {"data": {"id": "ext:vrbo.com", "label": "vrbo.com", "type": "external", "description": "https://vrbo.com", "resource": "https://vrbo.com", "tags": [], "status": "external", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#0d9488", "size": 22}}, {"data": {"id": "ext:www.alpenparks.at", "label": "www.alpenparks.at", "type": "external", "description": "https://www.alpenparks.at", "resource": "https://www.alpenparks.at", "tags": [], "status": "external", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#0d9488", "size": 22}}, {"data": {"id": "ext:www.apartments.kappl.at", "label": "www.apartments.kappl.at", "type": "external", "description": "https://www.apartments.kappl.at", "resource": "https://www.apartments.kappl.at", "tags": [], "status": "external", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#0d9488", "size": 22}}, {"data": {"id": "ext:www.booking.com/hotel/at/appartementhaus-kristall.html", "label": "www.booking.com/\u2026/appartementhaus-kristal\u2026", "type": "external", "description": "https://www.booking.com/hotel/at/appartementhaus-kristall.html", "resource": "https://www.booking.com/hotel/at/appartementhaus-kristall.html", "tags": [], "status": "external", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#0d9488", "size": 22}}, {"data": {"id": "ext:www.haeuslerhof.it", "label": "www.haeuslerhof.it", "type": "external", "description": "https://www.haeuslerhof.it", "resource": "https://www.haeuslerhof.it", "tags": [], "status": "external", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#0d9488", "size": 22}}, {"data": {"id": "ext:www.serfaus-fiss-ladis.at/en/Accommodation-list/Haus-Central-holiday-apartment-Ladis_ad-40835", "label": "www.serfaus-fiss-ladis.at/\u2026/Haus-Central-holiday-ap\u2026", "type": "external", "description": "https://www.serfaus-fiss-ladis.at/en/Accommodation-list/Haus-Central-holiday-apartment-Ladis_ad-40835", "resource": "https://www.serfaus-fiss-ladis.at/en/Accommodation-list/Haus-Central-holiday-apartment-Ladis_ad-40835", "tags": [], "status": "external", "generated": {}, "verified": [], "stale_after": "", "sources": [], "trust_tier": "unverified", "stale": false, "color": "#0d9488", "size": 22}}], "edges": [{"data": {"id": "region__szablon-maila", "source": "region", "target": "szablon-maila"}}, {"data": {"id": "wyjazd__region", "source": "wyjazd", "target": "region"}}, {"data": {"id": "wyjazd__oferty/kristall-schattbergxpress", "source": "wyjazd", "target": "oferty/kristall-schattbergxpress"}}, {"data": {"id": "wyjazd__oferty/alpenparks-sonnleiten", "source": "wyjazd", "target": "oferty/alpenparks-sonnleiten"}}, {"data": {"id": "wyjazd__oferty/sportchalet-viehhofen", "source": "wyjazd", "target": "oferty/sportchalet-viehhofen"}}, {"data": {"id": "wyjazd__oferty/dom-dla-grupy", "source": "wyjazd", "target": "oferty/dom-dla-grupy"}}, {"data": {"id": "wyjazd__oferty/alpenparks-rehrenberg", "source": "wyjazd", "target": "oferty/alpenparks-rehrenberg"}}, {"data": {"id": "wyjazd__oferty/glemm-lodge", "source": "wyjazd", "target": "oferty/glemm-lodge"}}, {"data": {"id": "wyjazd__ischgl/region", "source": "wyjazd", "target": "ischgl/region"}}, {"data": {"id": "wyjazd__kronplatz/region", "source": "wyjazd", "target": "kronplatz/region"}}, {"data": {"id": "wyjazd__sfl/region", "source": "wyjazd", "target": "sfl/region"}}, {"data": {"id": "wyjazd__ischgl/oferty/apartment-brandau-kappl", "source": "wyjazd", "target": "ischgl/oferty/apartment-brandau-kappl"}}, {"data": {"id": "wyjazd__ischgl/oferty/apartments-kappl", "source": "wyjazd", "target": "ischgl/oferty/apartments-kappl"}}, {"data": {"id": "wyjazd__kronplatz/oferty/haeuslerhof-valdaora", "source": "wyjazd", "target": "kronplatz/oferty/haeuslerhof-valdaora"}}, {"data": {"id": "wyjazd__kronplatz/oferty/residence-corones-valdaora", "source": "wyjazd", "target": "kronplatz/oferty/residence-corones-valdaora"}}, {"data": {"id": "wyjazd__sfl/oferty/haus-central-ladis", "source": "wyjazd", "target": "sfl/oferty/haus-central-ladis"}}, {"data": {"id": "wyjazd__sfl/oferty/apart-ideal-serfaus", "source": "wyjazd", "target": "sfl/oferty/apart-ideal-serfaus"}}, {"data": {"id": "wyjazd__szablon-maila", "source": "wyjazd", "target": "szablon-maila"}}, {"data": {"id": "ischgl/oferty/apartment-brandau-kappl__ext:www.kappl-apartment-brandau.at", "source": "ischgl/oferty/apartment-brandau-kappl", "target": "ext:www.kappl-apartment-brandau.at"}}, {"data": {"id": "oferty/dom-dla-grupy__ext:allchalets.com", "source": "oferty/dom-dla-grupy", "target": "ext:allchalets.com"}}, {"data": {"id": "oferty/alpenparks-rehrenberg__ext:alpenparks.at", "source": "oferty/alpenparks-rehrenberg", "target": "ext:alpenparks.at"}}, {"data": {"id": "oferty/alpenparks-sonnleiten__ext:alpenparks.at", "source": "oferty/alpenparks-sonnleiten", "target": "ext:alpenparks.at"}}, {"data": {"id": "region__ext:alpincard.at", "source": "region", "target": "ext:alpincard.at"}}, {"data": {"id": "ischgl/oferty/apartment-brandau-kappl__ext:apartments.kappl.at", "source": "ischgl/oferty/apartment-brandau-kappl", "target": "ext:apartments.kappl.at"}}, {"data": {"id": "oferty/dom-dla-grupy__ext:belvilla.com", "source": "oferty/dom-dla-grupy", "target": "ext:belvilla.com"}}, {"data": {"id": "oferty/dom-dla-grupy__ext:casamundo.pl", "source": "oferty/dom-dla-grupy", "target": "ext:casamundo.pl"}}, {"data": {"id": "kronplatz/oferty/residence-corones-valdaora__ext:corones.it", "source": "kronplatz/oferty/residence-corones-valdaora", "target": "ext:corones.it"}}, {"data": {"id": "oferty/dom-dla-grupy__ext:e-domizil.de", "source": "oferty/dom-dla-grupy", "target": "ext:e-domizil.de"}}, {"data": {"id": "oferty/glemm-lodge__ext:glemmlodge-apartments.com", "source": "oferty/glemm-lodge", "target": "ext:glemmlodge-apartments.com"}}, {"data": {"id": "oferty/dom-dla-grupy__ext:interhome.pl", "source": "oferty/dom-dla-grupy", "target": "ext:interhome.pl"}}, {"data": {"id": "sfl/oferty/haus-central-ladis__ext:serfaus-fiss-ladis.at", "source": "sfl/oferty/haus-central-ladis", "target": "ext:serfaus-fiss-ladis.at"}}, {"data": {"id": "sfl/region__ext:serfaus-fiss-ladis.at", "source": "sfl/region", "target": "ext:serfaus-fiss-ladis.at"}}, {"data": {"id": "sfl/oferty/apart-ideal-serfaus__ext:serfaus-fiss-ladis.at/en/serfaus/apartment/apart-ideal_dr91356", "source": "sfl/oferty/apart-ideal-serfaus", "target": "ext:serfaus-fiss-ladis.at/en/serfaus/apartment/apart-ideal_dr91356"}}, {"data": {"id": "oferty/sportchalet-viehhofen__ext:sportchaletviehhofen.com", "source": "oferty/sportchalet-viehhofen", "target": "ext:sportchaletviehhofen.com"}}, {"data": {"id": "oferty/dom-dla-grupy__ext:vrbo.com", "source": "oferty/dom-dla-grupy", "target": "ext:vrbo.com"}}, {"data": {"id": "oferty/alpenparks-rehrenberg__ext:www.alpenparks.at", "source": "oferty/alpenparks-rehrenberg", "target": "ext:www.alpenparks.at"}}, {"data": {"id": "oferty/alpenparks-sonnleiten__ext:www.alpenparks.at", "source": "oferty/alpenparks-sonnleiten", "target": "ext:www.alpenparks.at"}}, {"data": {"id": "ischgl/oferty/apartments-kappl__ext:www.apartments.kappl.at", "source": "ischgl/oferty/apartments-kappl", "target": "ext:www.apartments.kappl.at"}}, {"data": {"id": "oferty/kristall-schattbergxpress__ext:www.booking.com/hotel/at/appartementhaus-kristall.html", "source": "oferty/kristall-schattbergxpress", "target": "ext:www.booking.com/hotel/at/appartementhaus-kristall.html"}}, {"data": {"id": "kronplatz/oferty/haeuslerhof-valdaora__ext:www.haeuslerhof.it", "source": "kronplatz/oferty/haeuslerhof-valdaora", "target": "ext:www.haeuslerhof.it"}}, {"data": {"id": "sfl/oferty/haus-central-ladis__ext:www.serfaus-fiss-ladis.at/en/Accommodation-list/Haus-Central-holiday-apartment-Ladis_ad-40835", "source": "sfl/oferty/haus-central-ladis", "target": "ext:www.serfaus-fiss-ladis.at/en/Accommodation-list/Haus-Central-holiday-apartment-Ladis_ad-40835"}}], "bodies": {"ischgl/oferty/apartment-brandau-kappl": "# Apartment Brandau (Kappl) \u2014 PLAN A\n\n## W skr\u00f3cie\n\nRodzinnie prowadzony dom z **6 komfortowymi apartamentami** w Kappl \u2014\nidealna konfiguracja pod 4 rodziny (bierzemy 4 jednostki, dom prawie\nna wy\u0142\u0105czno\u015b\u0107). Silvretta Arena Ischgl/Samnaun ~10 min autem/skibusem,\nskibus po ca\u0142ej dolinie bezp\u0142atny.\n\n## Fakty\n\n- Apartamenty z pe\u0142nymi aneksami kuchennymi (piekarnik, zmywarka \u2014\n poza typami 1 i 6), SAT-TV, WLAN, sejf.\n- W Kappl: 40 km rodzinnych tras + o\u015bwietlony 6-km tor saneczkowy.\n- Wyposa\u017cenie dla dzieci (krzese\u0142ka, \u0142\u00f3\u017ceczka).\n\n## Plusy / minusy\n\n**+** uk\u0142ad 6 apartament\u00f3w = klimat \"nasz dom\"; ceny Kappl zamiast Ischgl;\ntor saneczkowy na wieczory; parking.\n**\u2212** codzienna logistyka skibus/auto do Silvretta Areny; wieczorne\n\u017cycie tylko w Ischgl (10 min taks\u00f3wk\u0105).\n\n## Do zrobienia\n\n- [ ] Mail (szablon EN): 4 apartamenty, 16\u201323.01.2027, konfiguracja\n 4+4+3+3, cena grupowa.\n- [ ] Alternatywy w Kappl, je\u015bli brak miejsc: Apartments Kappl\n (apartments.kappl.at \u2014 skibus 100 m, narciarnia z suszark\u0105),\n Ferienwohnen Mattle (centrum, blisko trasy i skibusa),\n Apart Avenzio (3 min od gondoli Kappl).", "ischgl/oferty/apartments-kappl": "# Apartments Kappl \u2014 PLAN B\n\n## Fakty\n\n- Przystanek skibusa **100 m od domu**, bez przesiadki do Ischgl,\n Galt\u00fcr i See.\n- Bezp\u0142atna narciarnia z suszark\u0105 do but\u00f3w; WLAN w ca\u0142ym domu;\n \u0142\u00f3\u017ceczko i krzese\u0142ko dla najm\u0142odszych gratis.\n\n## Plusy / minusy\n\n**+** logistyka skibusowa najlepsza w Kappl (100 m); typowy tyrolski\ndom apartamentowy = uczciwe ceny; kontakt EN bez problemu.\n**\u2212** liczba jednostek do potwierdzenia (mo\u017ce nie pomie\u015bci\u0107 4 rodzin \u2014\nwtedy podzia\u0142 grupy na 2 domy obok siebie).\n\n## Do zrobienia\n\n- [ ] Mail: ile apartament\u00f3w dost\u0119pnych 16\u201323.01.2027, konfiguracje \u0142\u00f3\u017cek.\n- [ ] Je\u015bli < 4 jednostek: dobra\u0107 drugi dom w Kappl (lista alternatyw\n w karcie Brandau).", "ischgl/region": "# Ischgl / Paznaun \u2014 informacje o regionie\n\nWariant \"Ischgl, ale w bud\u017cecie\": je\u017adzimy w Silvretta Arenie, mieszkamy\nw **Kappl** (10 min od Ischgl, skibus gratis). Nocleg w samym Ischgl\nodrzucony cenowo ju\u017c na etapie pierwszego por\u00f3wnania.\n\n## Teren\n\n- **Silvretta Arena Ischgl\u2013Samnaun: 239 km tras**, jazda do Szwajcarii\n (bezc\u0142owy Samnaun \u2014 tanie zakupy), wysoko po\u0142o\u017cona (1 400\u20132 872 m),\n pewny \u015bnieg.\n- **Kappl: 40 km** rodzinnych tras pod domem + o\u015bwietlony tor saneczkowy\n 6 km (hit dla nastolatk\u00f3w wieczorem).\n- Skipass VIP obejmuje ca\u0142y Paznaun (Ischgl, Kappl, See, Galt\u00fcr) \u2014\n darmowy skibus \u0142\u0105czy wszystkie miejscowo\u015bci.\n\n## Skipass \u2014 VIP Skipass (cennik OFICJALNY 2026/27, zweryfikowany)\n\n| Taryfa 6 dni | Cena 26/27 |\n|---|---|\n| Doros\u0142y | **451 \u20ac** |\n| Dziecko/m\u0142odzie\u017c 8 \u2013 <17 lat | **257 \u20ac** |\n| \u26a0\ufe0f 17-latek | p\u0142aci jak doros\u0142y (451 \u20ac) |\n\n| Rodzina | Sk\u0142ad | Skipassy 6 dni |\n|---|---|---|\n| 2+2 (nastolatki <17) | 2 doros\u0142ych + 2 m\u0142odzie\u017c | **1 416 \u20ac** |\n| 2+1 | 2 doros\u0142ych + 1 dziecko | **1 159 \u20ac** |\n| **Grupa 14 os. razem** | | **~5 150 \u20ac** |\n\n> \u26a0\ufe0f Kluczowe ryzyko taryfowe: je\u015bli kt\u00f3ry\u015b nastolatek ma ur. przed\n> wyjazdem i ko\u0144czy 17 lat \u2192 +194 \u20ac na rodzin\u0119. Sprawdzi\u0107 roczniki!\n\n## Dojazd z Warszawy\n\n- ~1 150 km: Katowice \u2192 Ostrawa \u2192 Brno \u2192 Wiede\u0144/Linz \u2192 Innsbruck \u2192\n Landeck \u2192 dolina Paznaun (zjazd Pians). 11\u201312 h.\n- Op\u0142aty: winiety CZ + AT, bez odcink\u00f3w specjalnych. Dojazd ~350 \u20ac/auto\n w obie strony.\n\n## Terminy\n\n16\u201323.01 i 9\u201316.01 \u2014 oba poza szczytem, w Ischgl stycze\u0144 po 6.01 to\nnajlu\u017aniejszy okres; ceny nocleg\u00f3w w Kappl wtedy najni\u017csze w sezonie.\n\n## Koszty \u017cycia\n\nIschgl = najdro\u017csza gastronomia z 4 por\u00f3wnywanych region\u00f3w (obiad na\nstoku 18\u201325 \u20ac/os.). Ratunek: gotowanie w Kappl (Spar w wiosce) + 1 dzie\u0144\nzakup\u00f3w w bezc\u0142owym Samnaun (nartami!). Taksa ~3 \u20ac/os./noc.\n\n## Bud\u017cet grupy (14 os., tydzie\u0144)\n\n| Pozycja | Kwota |\n|---|---|\n| Noclegi (Kappl, 4 apartamenty) | 4 000\u20135 600 \u20ac |\n| Skipassy | ~5 150 \u20ac |\n| Dojazd (4 auta) | ~1 400 \u20ac |\n| Jedzenie + taksy | 3 000\u20133 800 \u20ac |\n| **RAZEM** | **~13 500\u201316 000 \u20ac** |\n\n## Ocena wzgl\u0119dem Saalbach (bazowego planu)\n\n**+** najwy\u017cej po\u0142o\u017cony i najbardziej \"wow\" teren; Samnaun; tor saneczkowy.\n**\u2212** skipass najdro\u017cszy (brak zni\u017cki 17+); mieszkanie poza g\u0142\u00f3wn\u0105 aren\u0105\n(codziennie 10 min skibusem do Ischgl); gastronomia najdro\u017csza.", "kronplatz/oferty/haeuslerhof-valdaora": "# H\u00e4uslerhof (Valdaora) \u2014 PLAN A\n\n## W skr\u00f3cie\n\nGospodarstwo z **dok\u0142adnie 4 przestronnymi apartamentami** (2, 4 lub\n6 os.) \u2014 nasza grupa zajmuje ca\u0142y obiekt. Tyrolski styl, osobne kuchnie,\nwidok na Dolomity, w\u0142asne produkty na \u015bniadanie (jajka, mleko, chleb).\n\n## Fakty\n\n- 4 apartamenty z osobnymi kuchniami, zmywark\u0105, po\u015bciel\u0105 i r\u0119cznikami\n w cenie; miejsce na narty; carport; grill.\n- **Polityka anulacji opublikowana wprost**: bezp\u0142atnie do 2 miesi\u0119cy\n przed przyjazdem (dla 16.01 \u2192 deadline ~16.11.2026 \u2014 o miesi\u0105c\n \u0142agodniej ni\u017c Glemm Lodge!), potem 50%/80%.\n- \u0141\u00f3\u017ceczka dla dzieci na \u017cyczenie.\n\n## Plusy / minusy\n\n**+** ca\u0142y obiekt = klimat wsp\u00f3lnego wyjazdu przy prywatno\u015bci 4 kuchni;\nagroturystyczny vibe (zwierz\u0119ta, w\u0142asne produkty) \u2014 hit u m\u0142odszych\ndzieci; przewidywalna anulacja; ceny gospodarstwa, nie kurortu.\n**\u2212** dojazd na stok skibusem/autem (nie ski-in); wieczorem cicho \u2014\nrozrywki w Brunico (10 min autem).\n\n## Do zrobienia\n\n- [ ] Mail: wszystkie 4 apartamenty, 16\u201323.01.2027, 4+4+3+3.\n- [ ] Potwierdzi\u0107 odleg\u0142o\u015b\u0107 do przystanku skibusa i cz\u0119stotliwo\u015b\u0107 rano.", "kronplatz/oferty/residence-corones-valdaora": "# Residence Corones (Valdaora) \u2014 PLAN B\n\n## Fakty\n\n- Apartamenty z balkonami/wykuszami, centrum Valdaory, sklepy pieszo.\n- **Przystanek skibusa bezpo\u015brednio przed domem, 5 min do wyci\u0105g\u00f3w**\n Kronplatz.\n- **Digital Guestpass w cenie**: bezp\u0142atny transport publiczny po ca\u0142ym\n Po\u0142udniowym Tyrolu + skibus \u2014 u\u0142atwia wycieczki (Brunico, San Candido)\n bez odpalania aut.\n\n## Plusy / minusy\n\n**+** najlepsza logistyka skibusowa w Valdaorze; guestpass = darmowa\nkomunikacja regionalna; rodzinnie prowadzone.\n**\u2212** liczba i wielko\u015b\u0107 jednostek do potwierdzenia pod 4 rodziny;\nstandard klasyczny (nie \"designerski\").\n\n## Do zrobienia\n\n- [ ] Mail: dost\u0119pno\u015b\u0107 4 jednostek 16\u201323.01.2027.\n- [ ] Alternatywy w Olang, je\u015bli brak: Residence Maximilian (centrum,\n prywatna sauna w apartamencie), Aparthotel Familiaris (family\n resort z basenami \u2014 wy\u017csza p\u00f3\u0142ka, dzieci 0\u201318 target), Residence\n Sonnwies (opcja kolacji w hotelu Markushof obok).", "kronplatz/region": "# Kronplatz \u2014 informacje o regionie\n\nWariant \"Dolomity, ale nie Sella Ronda\": ta sama jako\u015b\u0107 karnetu\nDolomiti Superski i widok\u00f3w, zupe\u0142nie inny teren. Baza: **Olang/Valdaora**\nu podn\u00f3\u017ca g\u00f3ry \u2014 wyra\u017anie taniej ni\u017c doliny Sella Rondy.\n\n## Teren\n\n- **Kronplatz: 121 km tras** na jednej g\u00f3rze \u2014 d\u0142ugie, szerokie zjazdy\n we wszystkich kierunkach; s\u0142ynne czarne (Sylvester, Herrnegg, Piculin);\n snowpark; kolejki z ka\u017cdej strony g\u00f3ry (Brunico, Olang, San Vigilio).\n- **Karnet = ca\u0142y Dolomiti Superski (1 200 km)**: kolejk\u0105 Piculin zjazd\n do **Alta Badii** (bez auta!), autem 40\u201350 min: Cortina, 3 Zinnen \u2014\n gotowe wycieczki na 1\u20132 dni.\n- Nowoczesna infrastruktura (Kronplatz uchodzi za najlepiej \"okablowan\u0105\"\n g\u00f3r\u0119 W\u0142och), MMM Corones (muzeum Messnera) na szczycie.\n\n## Skipass \u2014 Dolomiti Superski\n\n| Taryfa 6 dni (16\u201323.01 = sezon \"regular\", taniej ni\u017c szczyt) | Szacunek 26/27 |\n|---|---|\n| Doros\u0142y | ~400\u2013435 \u20ac |\n| Junior (do 18 lat, rocznik!) \u221230% | ~280\u2013305 \u20ac |\n| Online \u22652 dni wcze\u015bniej | \u22125% |\n\n| Rodzina | Skipassy 6 dni |\n|---|---|\n| 2+2 (junior do 18 \u2014 obejmuje te\u017c 17-latka!) | ~1 360\u20131 480 \u20ac |\n| 2+1 | ~1 080\u20131 175 \u20ac |\n| **Grupa 14 os.** | **~4 900\u20135 300 \u20ac** (online \u22125%) |\n\n## Dojazd z Warszawy\n\n- ~1 050 km \u2014 najkr\u00f3tszy z w\u0142oskich wariant\u00f3w: Wiede\u0144 \u2192 Salzburg \u2192\n Kitzb\u00fchel/Felbertauern **albo** Innsbruck \u2192 Brenner \u2192 Val Pusteria.\n- Op\u0142aty: winiety CZ+AT; wariant Brenner: A13 (~12 \u20ac/stron\u0119) + kawa\u0142ek\n A22; wariant Felbertauern: tunel ~13 \u20ac/stron\u0119. Dojazd ~370 \u20ac/auto.\n\n## Terminy\n\n16\u201323.01: po feriach w\u0142oskich (Befana do 6.01) \u2014 lu\u017ano; Superski w cenie\n\"regular season\". Idealne okno.\n\n## Koszty \u017cycia\n\nPo\u0142udniowy Tyrol: obiad na stoku 14\u201320 \u20ac, pizza w dolinie 9\u201313 \u20ac,\nzakupy w Brunico (Eurospar, Lidl). Taksa ~2\u20132,50 \u20ac/os./noc (doro\u015bli).\n\n## Bud\u017cet grupy (14 os., tydzie\u0144)\n\n| Pozycja | Kwota |\n|---|---|\n| Noclegi (Olang, 4 apartamenty) | 4 000\u20136 000 \u20ac |\n| Skipassy | ~4 900\u20135 300 \u20ac |\n| Dojazd (4 auta) | ~1 480 \u20ac |\n| Jedzenie + taksy | 2 800\u20133 500 \u20ac |\n| **RAZEM** | **~13 200\u201316 300 \u20ac** |\n\n## Ocena wzgl\u0119dem Saalbach\n\n**+** Dolomity bez powt\u00f3rki Sella Rondy; wycieczki Alta Badia/Cortina\nna karnecie; junior do 18 lat (17-latek bez dop\u0142aty); tania dolina.\n**\u2212** \"objazdowo\u015b\u0107\" wymaga kolejki/auta (jedna g\u00f3ra na co dzie\u0144);\ndojazd ~100 km d\u0142u\u017cszy ni\u017c do Saalbach.", "oferty/alpenparks-rehrenberg": "# AlpenParks Rehrenberg Viehhofen \u2014 PLAN C\n\n## W skr\u00f3cie\n\nNajta\u0144szy \"nowy\" obiekt na li\u015bcie: przestronne, nowoczesne apartamenty\nz prywatnymi saunami w Viehhofen. Traktowany jako rezerwa \u2014 cena kusi,\nale opinie s\u0105 mieszane i logistyka na stok s\u0142absza ni\u017c u konkurencji.\n\n## Fakty\n\n- Nowe budownictwo, du\u017ce apartamenty, cz\u0119\u015b\u0107 z w\u0142asn\u0105 saun\u0105.\n- 5\u201310 min pieszo do gondoli zellamseeXpress (strona Zell am See);\n do Skicircusu skibusem.\n- Rezerwacja online przez alpenparks.at.\n\n## Uk\u0142ad dla naszej grupy (14 os.)\n\n| Rodzina | Szacunkowy koszt/tydzie\u0144 |\n|---|---|\n| 2\u00d7 rodzina 2+2 | ~1 100\u20131 500 \u20ac |\n| 2\u00d7 rodzina 2+1 | ~950\u20131 250 \u20ac |\n\n## Plusy / minusy\n\n**+** najni\u017csza cena za nowy standard; prywatne sauny; du\u017ca dost\u0119pno\u015b\u0107\n(spory obiekt); pe\u0142na rezerwacja online.\n\n**\u2212** powtarzaj\u0105ce si\u0119 w recenzjach zastrze\u017cenia do skibusa (ma\u0142y,\nzat\u0142oczony rano) i obs\u0142ugi/organizacji \u2014 **przed rezerwacj\u0105 przeczyta\u0107\n\u015bwie\u017ce opinie z zimy 25/26**; Viehhofen bez wieczornego \u017cycia; sumarycznie\ngorszy pakiet ni\u017c Sportchalet za podobne pieni\u0105dze.\n\n## Do zrobienia\n\n- [ ] Tylko je\u015bli plany A i B nie wypal\u0105: sprawdzi\u0107 ceny datami 16\u201323.01.2027.\n- [ ] Zweryfikowa\u0107 najnowsze opinie (Booking/Google, filtr: zima 2026).", "oferty/alpenparks-sonnleiten": "# AlpenParks Sonnleiten Saalbach\n\n## W skr\u00f3cie\n\nDu\u017cy, nowoczesny aparthotel ~2 minuty pieszo od stoku w Saalbach. Kluczowa\nprzewaga: **skala obiektu** \u2014 kilkadziesi\u0105t apartament\u00f3w oznacza najwi\u0119ksze\nprawdopodobie\u0144stwo, \u017ce 4 jednostki b\u0119d\u0105 wolne w jednym tygodniu, i pe\u0142n\u0105\nrezerwacj\u0119 online bez korespondencji.\n\n## Fakty\n\n- Apartamenty rodzinne z aneksami kuchennymi, r\u00f3\u017cne rozmiary (2\u20138 os.).\n- **Basen + sauna w cenie** \u2014 argument nie do przecenienia przy 5 dzieciakach\n i tygodniu intensywnej jazdy.\n- Restauracja w obiekcie (opcja \"nie gotujemy dzi\u015b\").\n- Rezerwacja przez silnik online (EN), przejrzyste ceny od r\u0119ki.\n\n## Uk\u0142ad dla naszej grupy (14 os.)\n\n| Rodzina | Apartament | Szacunkowy koszt/tydzie\u0144 |\n|---|---|---|\n| 2\u00d7 rodzina 2+2 | 4-os. | ~1 400\u20131 900 \u20ac |\n| 2\u00d7 rodzina 2+1 | 3\u20134-os. | ~1 200\u20131 500 \u20ac |\n\n## Plusy / minusy\n\n**+** basen dla dzieci, restauracja, wysoka dost\u0119pno\u015b\u0107, przewidywalna\njako\u015b\u0107 sieci\u00f3wki, rezerwacja i anulacja na warunkach online.\n\n**\u2212** mniej \"kameralnie\" ni\u017c u prywatnego gospodarza; ceny sieci\u00f3wki\nsztywniejsze w negocjacji (cho\u0107 mail grupowy i tak warto wys\u0142a\u0107);\nlokalizacja dobra, ale nie tak spektakularna jak Kristall przy gondoli.\n\n## Do zrobienia\n\n- [ ] Wpisa\u0107 daty 16\u201323.01.2027 w silnik na alpenparks.at \u2192 zrzut cen\n rzeczywistych dla 4 jednostek.\n- [ ] R\u00f3wnolegle mail grupowy z pytaniem o rabat przy 4 apartamentach.\n- [ ] Sprawdzi\u0107 polityk\u0119 anulacji (sieci\u00f3wki cz\u0119sto maj\u0105 elastyczne taryfy\n za dop\u0142at\u0105 \u2014 przy grupie 14 os. warto).", "oferty/dom-dla-grupy": "# Dom dla ca\u0142ej grupy (12\u201314 os.) \u2014 koncept\n\n## W skr\u00f3cie\n\nAlternatywa dla \"4 osobnych apartament\u00f3w\": jeden du\u017cy dom wakacyjny dla\nca\u0142ej czternastki. Klimat chaletowy jak w Glemm Lodge (wsp\u00f3lne kolacje,\nwieczory, dzieciaki razem), ale w bud\u017cecie ~po\u0142owy jego ceny \u2014 pod\nwarunkiem odpuszczenia adresu w samym Saalbach.\n\n## Gdzie geograficznie\n\n- **Viehhofen / Maishofen** \u2014 3\u20138 km od Saalbach, skibus lub 10 min autem.\n- **Strona Fieberbrunn / St. Jakob in Haus / Hochfilzen** \u2014 wej\u015bcie do\n Skicircusu od ty\u0142u przez gondol\u0119 Fieberbrunn; okolica ta\u0144sza, spokojna.\n\n## Parametry do filtrowania przy szukaniu\n\n- \u2265 5 sypialni (4 rodzicielskie + konfiguracje dla 6 dzieci), \u2265 3 \u0142azienki.\n- Du\u017cy salon + jadalnia na 14 os. (wsp\u00f3lne kolacje to sens tego wariantu).\n- Parking na 4 auta, narciarnia/suszarnia.\n- Cena docelowa: \u2264 6 500 \u20ac/tydzie\u0144 w terminie 16\u201323.01.2027.\n- Sauna = mi\u0142y bonus, cz\u0119sty w tym segmencie.\n\n## Rozliczenie (podzia\u0142 od osoby, 14 os.)\n\n| Rodzina | Udzia\u0142 | Przy 5 500 \u20ac/tydzie\u0144 |\n|---|---|---|\n| 2+2 | 4/14 | ~1 570 \u20ac |\n| 2+1 | 3/14 | ~1 180 \u20ac |\n\n## Plusy / minusy\n\n**+** najlepszy klimat grupowy; wsp\u00f3lne gotowanie tnie koszty jedzenia;\nzwykle najlepszy metra\u017c za euro; jedna rezerwacja.\n\n**\u2212** logistyka poranna (14 os. na skibus/auta); jedna kuchnia i salon =\npotrzebna zgodno\u015b\u0107 grupy; pojedyncza rezerwacja = pojedyncze ryzyko\n(anulacja jednej rodziny obci\u0105\u017ca reszt\u0119 \u2014 spisa\u0107 zasady z g\u00f3ry!);\nkonkretny dom trzeba dopiero znale\u017a\u0107.\n\n## Do zrobienia\n\n- [ ] Przeszuka\u0107 portale (lista w nag\u0142\u00f3wku) filtrem: 14 os., 16\u201323.01.2027,\n Viehhofen/Maishofen/Fieberbrunn.\n- [ ] Shortlista 3 dom\u00f3w \u2192 weryfikacja opinii \u2192 zapytania.\n- [ ] Umowa wewn\u0119trzna grupy: zaliczki, zasady rezygnacji, podzia\u0142 od osoby.", "oferty/glemm-lodge": "# Glemm Lodge Apartments \u2014 poza bud\u017cetem (dane referencyjne)\n\n## Dlaczego w bazie mimo odrzucenia\n\nJedyny obiekt z **pe\u0142nymi zweryfikowanymi danymi** (publiczny cennik\ni kalendarz ob\u0142o\u017cenia) \u2014 s\u0142u\u017cy jako punkt odniesienia cenowego. Wraca\ndo gry, je\u015bli w\u0142a\u015bciciel zejdzie do ~5 000 \u20ac/apartament przy 7 osobach\n(precedens: cennik letni skaluje ceny wg liczby os\u00f3b).\n\n## Fakty (zweryfikowane 31.07.2026)\n\n- 3 luksusowe apartamenty 10\u201312 os. (117\u2013128 m\u00b2, po 3 \u0142azienki + WC).\n- Zjazd tras\u0105 86 bezpo\u015brednio pod dom; powr\u00f3t na stok skibusem\n (przystanek pod drzwiami, 5 min); supermarket MPREIS naprzeciwko.\n- Wallbox dla aut elektrycznych; zakaz imprez wieczor\u00f3w kawalerskich itp.\n\n## Cennik zima 2026/27 (oficjalny)\n\n| Okres | Sezon | Za noc | Za tydzie\u0144 |\n|---|---|---|---|\n| 27.11\u201311.12.2026 | przedsezon | 800 \u20ac | 5 600 \u20ac |\n| 12\u201318.12.2026 | niski | 900 \u20ac | 6 300 \u20ac |\n| 19\u201325.12.2026 | wysoki | 1 000 \u20ac | 7 000 \u20ac |\n| 26.12.2026\u201301.01.2027 | top | 1 200 \u20ac | 8 400 \u20ac |\n| **02.01\u201305.03.2027** | **wysoki** | **1 000 \u20ac** | **7 000 \u20ac** |\n| 06\u201319.03.2027 | niski | 900 \u20ac | 6 300 \u20ac |\n| 20.03\u201304.04.2027 | p\u00f3\u017any | 800 \u20ac | 5 600 \u20ac |\n\nDodatkowo: sprz\u0105tanie ko\u0144cowe 500 \u20ac/apartament, taksa 3 \u20ac/os./noc,\nkaucja zwrotna 900 \u20ac/apartament.\n\n## Dost\u0119pno\u015b\u0107 w naszym oknie (stan 31.07.2026)\n\n| Termin | Top 1 | Top 2 | Top 3 | 2 apartamenty naraz? |\n|---|---|---|---|---|\n| 2\u20139.01.2027 | zaj\u0119ty | WOLNY | zaj\u0119ty | \u2717 |\n| 9\u201316.01.2027 | zaj\u0119ty | zaj\u0119ty | WOLNY | \u2717 |\n| **16\u201323.01.2027** | WOLNY | WOLNY | WOLNY | \u2705 |\n\n## Kosztorys wariantu 2\u00d7 apartament, 16\u201323.01 (14 os.)\n\n| Pozycja | Na apartament (7 os.) |\n|---|---|\n| Czynsz 7 nocy | 7 000 \u20ac |\n| Sprz\u0105tanie | 500 \u20ac |\n| Taksa (3 \u20ac \u00d7 7 os. \u00d7 7 nocy) | 147 \u20ac |\n| **Razem** (bez kaucji 900 \u20ac) | **7 647 \u20ac** |\n\nPodzia\u0142 od osoby: rodzina 2+2 \u2192 ~4 370 \u20ac, rodzina 2+1 \u2192 ~3 277 \u20ac.\n**Wniosek: 2\u00d7 powy\u017cej celu bud\u017cetowego (~2 000 \u20ac/rodzin\u0119).**\n\n## Warunki rezerwacji\n\n- Zaliczka 30% od razu; reszta + kaucja 90 dni przed przyjazdem.\n- **Darmowa anulacja tylko do 91 dni przed** (dla 16.01 \u2192 deadline\n ~16.10.2026); p\u00f3\u017aniej 100% koszt\u00f3w.\n\n## Do zrobienia (opcjonalnie)\n\n- [ ] Mail do Dietera: cena za 7 os./apartament zamiast 10\u201312 \u2014\n je\u015bli \u2264 5 000 \u20ac, wariant wraca do rozwa\u017ca\u0144 (~2 900/2 200 \u20ac na rodzin\u0119).", "oferty/kristall-schattbergxpress": "# Appartementhaus Kristall at SchattbergXpress \u2014 PLAN A\n\n## W skr\u00f3cie\n\nNajlepsza lokalizacja w rozwa\u017canym bud\u017cecie: **50 m od gondoli Schattberg\nX-press** \u2014 g\u0142\u00f3wnej stacji startowej ca\u0142ego Skicircusu, w \u015bcis\u0142ym centrum\nSaalbach. Nastolatki wychodz\u0105 z narciarni prosto na gondol\u0119, zero skibusa,\nzero odwo\u017cenia. Rodzice maj\u0105 restauracje, bary i sklep w promieniu 50 m.\n\n## Fakty\n\n- Eleganckie apartamenty w stylu alpejskim, w pe\u0142ni wyposa\u017cone aneksy\n kuchenne, balkony z widokiem na g\u00f3ry.\n- Apartamenty typowo 2\u20136 os.; opinie go\u015bci potwierdzaj\u0105 wygodne jednostki\n 4-osobowe **z dwiema \u0142azienkami**.\n- 1 bezp\u0142atne miejsce parkingowe na apartament (wa\u017cne: 4 rodziny = 4 auta \u2713).\n- Wsp\u00f3lna strefa spa w budynku; narciarnia z suszark\u0105 do but\u00f3w.\n- Restauracja 20 m, sklep spo\u017cywczy 50 m, przystanek skibusa 10 m.\n\n## Uk\u0142ad dla naszej grupy (14 os.)\n\n| Rodzina | Apartament | Szacunkowy koszt/tydzie\u0144 |\n|---|---|---|\n| Rodzina A (2+2) | 4-os. z 2 \u0142azienkami | ~1 500\u20132 000 \u20ac |\n| Rodzina B (2+2) | 4-os. z 2 \u0142azienkami | ~1 500\u20132 000 \u20ac |\n| Rodzina C (2+1) | 3\u20134-os. (mniejszy) | ~1 200\u20131 600 \u20ac |\n| Rodzina D (2+1) | 3\u20134-os. (mniejszy) | ~1 200\u20131 600 \u20ac |\n\n## Plusy / minusy\n\n**+** lokalizacja bezkonkurencyjna (za taki adres w Saalbach zwykle si\u0119\ndop\u0142aca), ka\u017cda rodzina ma prywatno\u015b\u0107 i w\u0142asn\u0105 \u0142azienk\u0119, spa w budynku,\nparking w cenie, centrum = wieczorne \u017cycie dla nastolatk\u00f3w pod nosem.\n\n**\u2212** brak wsp\u00f3lnego du\u017cego salonu na wieczory ca\u0142ej ekipy (wieczory\n\"na apartamentach\" albo w knajpie); dost\u0119pno\u015b\u0107 4 jednostek naraz do\npotwierdzenia; centrum Saalbach bywa g\u0142o\u015bne w weekendy.\n\n## Do zrobienia\n\n- [ ] Sprawdzi\u0107 dost\u0119pno\u015b\u0107 4 apartament\u00f3w: 16\u201323.01.2027 (opcja B: 9\u201316.01)\n \u2014 Booking + strona All in One Apartments.\n- [ ] Wys\u0142a\u0107 zapytanie grupowe mailem (4 jednostki, 14 os., pro\u015bba o cen\u0119\n grupow\u0105 \u2014 przy 4 apartamentach rabat direct jest norm\u0105).\n- [ ] Dopyta\u0107: wysoko\u015b\u0107 kaucji, sprz\u0105tanie ko\u0144cowe, taksa, polityka anulacji.", "oferty/sportchalet-viehhofen": "# Sportchalet Viehhofen \u2014 PLAN B (bud\u017cetowy faworyt)\n\n## W skr\u00f3cie\n\nKameralny obiekt w Viehhofen \u2014 wsi 3 km przed Saalbach \u2014 prowadzony przez\nholenderskich gospodarzy z ocen\u0105 5.0. Opinie go\u015bci wprost opisuj\u0105 scenariusz\n\"kilka rodzin bookuje kilka apartament\u00f3w razem\" \u2014 czyli dok\u0142adnie nasz\nprzypadek. Najni\u017csze ceny na li\u015bcie przy bardzo dobrej jako\u015bci.\n\n## Fakty\n\n- Kilka apartament\u00f3w w jednym budynku \u2014 mo\u017cliwo\u015b\u0107 zaj\u0119cia obiektu niemal\n na wy\u0142\u0105czno\u015b\u0107 przez nasz\u0105 grup\u0119.\n- Gondola **zellamseeXpress** za rogiem (strona Zell am See \u2014 na tym samym\n karnecie ALPIN CARD!), skibus do gondoli Sch\u00f6nleiten w Saalbach staje\n pod domem (bezp\u0142atny ze skipassem, kursuje cz\u0119sto).\n- Gospodarze m\u00f3wi\u0105 po angielsku, nastawieni rodzinnie, kontakt bezpo\u015bredni.\n\n## Uk\u0142ad dla naszej grupy (14 os.)\n\nZale\u017cnie od konfiguracji apartament\u00f3w (do potwierdzenia mailem):\nwariant 4\u00d7(3\u20134 os.) albo 2\u00d7(6\u20137 os.) + 1\u00d7(3\u20134 os.). Przy zaj\u0119ciu ca\u0142ego\nbudynku wsp\u00f3lne wieczory de facto \"jak w chalecie\".\n\n| Rodzina | Szacunkowy koszt/tydzie\u0144 |\n|---|---|\n| 2+2 | ~1 200\u20131 600 \u20ac |\n| 2+1 | ~1 000\u20131 300 \u20ac |\n\n## Plusy / minusy\n\n**+** najni\u017csza cena przy oceny 5.0; klimat \"ca\u0142y dom dla nas\"; elastyczni\nprywatni gospodarze = realna negocjacja grupowa; parking bez problemu;\ndwie opcje startu na stok (Zell am See gondol\u0105 / Skicircus skibusem)\n\u2014 fajna r\u00f3\u017cnorodno\u015b\u0107 w trakcie tygodnia.\n\n**\u2212** to nie ski-in/ski-out: do Skicircusu 5\u201310 min skibusem (z 5 dzieci\ni sprz\u0119tem \u2014 logistyka poranna do ogarni\u0119cia); Viehhofen jest cichy \u2014\nzero wieczornego \u017cycia dla nastolatk\u00f3w (trzeba dojecha\u0107 do Saalbach);\nbrak silnika online \u2014 wszystko mailowo.\n\n## Do zrobienia\n\n- [ ] Mail z zapytaniem o dost\u0119pno\u015b\u0107 wszystkich apartament\u00f3w 16\u201323.01.2027\n (opcja B: 9\u201316.01) + konfiguracj\u0119 \u0142\u00f3\u017cek dla 4+4+3+3.\n- [ ] Zapyta\u0107 o cen\u0119 za zaj\u0119cie ca\u0142ego obiektu (package deal).\n- [ ] Potwierdzi\u0107 rozk\u0142ad skibusa w styczniu (cz\u0119stotliwo\u015b\u0107 rano 8:30\u20139:30).", "region": "# Skicircus Saalbach \u2014 informacje o regionie\n\nBaza wiedzy wyjazdu narciarskiego zim\u0105 2026/27. Ten dokument zbiera wszystko,\nco **nie dotyczy konkretnego noclegu**: teren narciarski, skipassy, dojazd,\nterminy, koszty \u017cycia i logistyk\u0119 grupy. Oferty noclegowe \u2192 katalog\n[`oferty/`](/oferty/index.md).\n\n## Dlaczego ten region\n\n- **270 km po\u0142\u0105czonych tras** \u2014 najwi\u0119kszy w pe\u0142ni po\u0142\u0105czony teren w Salzburgu,\n klimat \"wielkiej karuzeli\" najbli\u017cszy Sella Rondzie (kt\u00f3r\u0105 grupa zna i lubi,\n ale by\u0142a tam ju\u017c 2\u00d7).\n- Objazdowa p\u0119tla **\"Skicircus challenge\"** \u2014 ca\u0142odzienna runda po ca\u0142ym\n terenie, atrakcyjna dla nastolatk\u00f3w (odpowiednik p\u0119tli Sella Ronda).\n- Snowparki (Nightpark Hinterglemm, Learn-to-Ride Leogang), junior race'y.\n- **Najkr\u00f3tszy dojazd z Warszawy** spo\u015br\u00f3d rozwa\u017canych du\u017cych o\u015brodk\u00f3w\n (~950 km; dla por\u00f3wnania: Sella Ronda ~1 100 km, Livigno ~1 250 km).\n\n## Skipass \u2014 ALPIN CARD\n\nKarnet **Ski ALPIN CARD** obejmuje: Skicircus Saalbach-Hinterglemm-Leogang-\nFieberbrunn + Schmittenh\u00f6he (Zell am See) + lodowiec Kitzsteinhorn (Kaprun).\nIstotne: gondola zellamseeXpress w Viehhofen te\u017c jest na tym karnecie.\n\n| Taryfa 6 dni | Cena 2025/26 (orient.) | Prognoza 2026/27 (+3\u20135%) |\n|---|---|---|\n| Doros\u0142y | ~430\u2013450 \u20ac | ~445\u2013470 \u20ac |\n| M\u0142odzie\u017c (do 18 lat) | ~ -25% od ceny doros\u0142ego | ~335\u2013355 \u20ac |\n| Dziecko (do ~15 lat) | ~ -50% | ~225\u2013235 \u20ac |\n\n**Szacunkowy koszt skipass\u00f3w dla grupy 14 os.** (8 doros\u0142ych + 4 nastolatk\u00f3w\n+ 2 dzieci, 6 dni): **~4 900\u20135 400 \u20ac** \u0142\u0105cznie, czyli:\n\n| Rodzina | Sk\u0142ad | Skipassy 6 dni |\n|---|---|---|\n| 2+2 (nastolatki) | 2 doros\u0142ych + 2 m\u0142odzie\u017c | ~1 570\u20131 650 \u20ac |\n| 2+1 (dziecko) | 2 doros\u0142ych + 1 dziecko | ~1 120\u20131 175 \u20ac |\n\n> \u26a0\ufe0f Ceny 26/27 do potwierdzenia jesieni\u0105 2026 na alpincard.at.\n> Dzieci/m\u0142odzie\u017c: decyduje rocznik, nie wiek w dniu wyjazdu \u2014 sprawdzi\u0107\n> dok\u0142adne progi rocznikowe przy zakupie.\n\n## Dojazd z Warszawy\n\n- **Trasa:** Warszawa \u2192 Katowice \u2192 Ostrawa \u2192 Brno \u2192 Wiede\u0144 \u2192 Salzburg \u2192\n Zell am See \u2192 dolina Glemmtal. **~950 km, 9\u201310 h jazdy** (realnie 11\u201312 h\n z przerwami). Da si\u0119 w jeden dzie\u0144.\n- **Op\u0142aty:** winiety Czechy (~14 \u20ac/10 dni) + Austria (~13 \u20ac/10 dni, 2026);\n odcinek specjalny A10 (tunele Tauern) ~14 \u20ac w jedn\u0105 stron\u0119 je\u015bli trasa\n przez Salzburg\u2013Villach (uwaga: do Zell am See zwykle zjazd wcze\u015bniej \u2014\n bez op\u0142aty specjalnej).\n- **Paliwo:** ~1 900 km w obie strony \u2192 ~150\u2013170 l \u2192 **~950\u20131 100 z\u0142/auto**\n (diesel, spalanie 8 l/100 km).\n- **\u0141\u0105czny koszt dojazdu:** ~300\u2013350 \u20ac/auto w obie strony. Grupa jedzie\n 4 autami (po 1 na rodzin\u0119) lub 3 (oszcz\u0119dno\u015b\u0107 ~300 \u20ac, ale mniej elastycznie).\n- \u0141a\u0144cuchy/opony zimowe obowi\u0105zkowe; ostatnie 15 km dolin\u0105 Glemmtal \u2014\n droga lokalna, zim\u0105 od\u015bnie\u017cana na bie\u017c\u0105co.\n\n## Terminy \u2014 analiza okna 1\u201323.01.2027\n\n| Tydzie\u0144 | Ocena | Uzasadnienie |\n|---|---|---|\n| 2\u20139.01 | \u26a0\ufe0f \u015brednio | ogon szczytu noworocznego: t\u0142umy do ~6.01, najwy\u017csze ceny nocleg\u00f3w |\n| 9\u201316.01 | \u2705 dobry | pierwszy \"pusty\" tydzie\u0144 zimy, ni\u017csze ceny, \u015bwietny \u015bnieg |\n| **16\u201323.01** | \u2705\u2705 **rekomendowany** | najlu\u017aniejsze stoki, pe\u0142na dost\u0119pno\u015b\u0107 nocleg\u00f3w (m.in. jedyne okno na 2\u00d7 Glemm Lodge), te same ceny co 9\u201316.01 |\n\n## Koszty \u017cycia na miejscu\n\n- Obiad na stoku: 15\u201322 \u20ac/os. (spaghetti/schnitzel + nap\u00f3j).\n- Zakupy spo\u017cywcze: MPREIS/Billa w Saalbach i Hinterglemm; ceny ~20\u201330%\n wy\u017csze ni\u017c w PL. Patent grupowy: du\u017ce zakupy w Zell am See (Lidl, Spar)\n po drodze.\n- Wieczorne wyj\u015bcie na pizz\u0119/burgery: 18\u201325 \u20ac/os.\n- **Taksa klimatyczna:** ~2\u20133 \u20ac/os./noc (doro\u015bli; wg gminy), p\u0142atna na miejscu.\n- Skibus w dolinie: **bezp\u0142atny ze skipassem**, kursuje Saalbach \u2194\n Hinterglemm \u2194 Viehhofen co 10\u201320 min.\n\n## Bud\u017cet ca\u0142kowity grupy (orientacyjnie, tydzie\u0144, 6 dni jazdy)\n\n| Pozycja | 14 os\u00f3b \u0142\u0105cznie |\n|---|---|\n| Noclegi (cel: ~1 200\u20132 000 \u20ac/apartament) | 5 500\u20137 500 \u20ac |\n| Skipassy | 4 900\u20135 400 \u20ac |\n| Dojazd (4 auta) | 1 200\u20131 400 \u20ac |\n| Jedzenie + taksy | 2 500\u20133 500 \u20ac |\n| **RAZEM** | **~14 000\u201318 000 \u20ac** (\u2248 1 000\u20131 300 \u20ac/os.) |\n\n## Kalendarz decyzji\n\n1. **Sierpie\u0144 2026** \u2014 wys\u0142anie zapyta\u0144 grupowych do obiekt\u00f3w\n ([szablon maila](/szablon-maila.md)), zebranie ofert, wyb\u00f3r.\n2. **Wrzesie\u0144 2026** \u2014 rezerwacja + zaliczki (typowo 30%).\n3. **~16.10.2026** \u2014 ostateczny deadline darmowej anulacji dla Glemm Lodge\n (91 dni przed 16.01); inne obiekty: sprawdzi\u0107 indywidualnie.\n4. **Jesie\u0144 2026** \u2014 potwierdzenie cen skipass\u00f3w 26/27, decyzja o zakupie\n online (ewentualne przedsprzeda\u017ce).\n5. **Grudzie\u0144 2026** \u2014 dop\u0142aty (typowo 90 dni przed), organizacja aut,\n sprz\u0119tu, ubezpiecze\u0144 (rekomendowane: koszty rezygnacji + NNW/OC narciarskie).", "sfl/oferty/apart-ideal-serfaus": "# Apart Ideal (Serfaus) \u2014 PLAN B\n\n## W skr\u00f3cie\n\nDom z **6 jasnymi apartamentami** na spokojnych obrze\u017cach Serfaus,\nocena 4.8/5. Przystanek s\u0142ynnego podziemnego metra (\"Tube\") 50 m od\ndomu \u2014 dojazd do kolejki w <10 min bez auta i bez skibusa. Wariant\n\"pe\u0142ne do\u015bwiadczenie Serfaus\" za dop\u0142at\u0105 wzgl\u0119dem Ladis/Fiss.\n\n## Fakty\n\n- 6 apartament\u00f3w, 1 400 m n.p.m.; w\u0142asny trawnik, parking przed domem,\n darmowe WLAN i serwis pieczywa rano.\n- Serfaus = wioska bez ruchu samochodowego (metro!), pe\u0142na\n infrastruktura: restauracje, sklepy, szk\u00f3\u0142ki, wieczorne atrakcje\n dla dzieci.\n\n## Plusy / minusy\n\n**+** 4 z 6 apartament\u00f3w = prawie ca\u0142y dom; metro zamiast skibusa\n(frajda sama w sobie); centrum rodzinnego \u017cycia regionu.\n**\u2212** Serfaus to najdro\u017csza z trzech wsi (nocleg ~+20\u201330% vs Ladis);\nw wysokim sezonie t\u0142oczno (w naszym niskim terminie \u2014 OK).\n\n## Do zrobienia\n\n- [ ] Enquiry przez portal regionu: 4 apartamenty, 16\u201323.01.2027.\n- [ ] Por\u00f3wna\u0107 z ofert\u0105 z Ladis (Haus Central) po otrzymaniu obu cen \u2014\n decyzja grupy: dop\u0142aca\u0107 do Serfaus czy nie.", "sfl/oferty/haus-central-ladis": "# Haus Central / Apart Central (Ladis) \u2014 PLAN A\n\n## W skr\u00f3cie\n\nDom z **dok\u0142adnie 4 nowoczesnymi apartamentami** (ka\u017cdy z balkonem)\nw Ladis \u2014 najta\u0144szej i najspokojniejszej z trzech wsi p\u0142askowy\u017cu.\nOficjalnie otagowany jako \"group accommodation\" i \"family friendly\",\npo\u0142o\u017cony przy wyci\u0105gu/trasie i przystanku skibusa. Nasza grupa\nzajmuje ca\u0142y dom.\n\n## Fakty\n\n- 4 w pe\u0142ni wyposa\u017cone apartamenty z balkonami; narciarnia z suszark\u0105\n do but\u00f3w; parking; ogr\u00f3d.\n- Lokalizacja: \"direkt an der Bergbahn\" \u2014 przy kolejce Sonnenbahn\n Ladis-Fiss, przy trasie i skibusie.\n- Ladis: klimatyczna wioska z zamkiem Laudegg i stawem; do pe\u0142nej\n infrastruktury Fiss \u2014 1 kolejka lub skibus.\n\n## Plusy / minusy\n\n**+** konfiguracja 1:1 pod nasze 4 rodziny; ca\u0142y dom na wy\u0142\u0105czno\u015b\u0107;\nLadis = najni\u017csze ceny na p\u0142askowy\u017cu; przy wyci\u0105gu.\n**\u2212** najmniejsza z trzech wsi (sklep podstawowy, 2\u20133 restauracje);\nwieczorem bardzo cicho.\n\n## Do zrobienia\n\n- [ ] Zapytanie przez system serfaus-fiss-ladis.at (przycisk enquiry)\n lub mail: 4 apartamenty, 16\u201323.01.2027, 4+4+3+3.\n- [ ] Alternatywa w Ladis: Laudegghof (4\u2605 apartamenty, jacuzzi/spa,\n 8.0 na Expedia, sprz\u0105tanie 100\u2013120 \u20ac/apartament).", "sfl/region": "# Serfaus-Fiss-Ladis \u2014 informacje o regionie\n\nNajbardziej \"rodzinny\" kurort Alp: s\u0142oneczny p\u0142askowy\u017c na 1 200\u20131 400 m,\n**214 km tras i 68 wyci\u0105g\u00f3w**, \u015bnieg pewny do wiosny (jazda do 2 820 m).\nWielokrotny zwyci\u0119zca ranking\u00f3w family-friendly. Dla naszej mieszanki\nwiekowej (nastolatki + m\u0142odsze dzieci) teren skrojony idealnie:\ndwa snowparki (Freestyle Circus Serfaus, Fun Area Fiss-Ladis), funslope'y,\na w Serfaus kultowe metro podziemne (wioska bez aut).\n\n## Kluczowy atut terminu: 16\u201323.01 = NISKI SEZON w SFL\n\nSFL dzieli zim\u0119 nietypowo: **10\u201323.01 to oficjalnie low season**\n(mi\u0119dzy szczytem \u015bwi\u0105tecznym a reszt\u0105 zimy) \u2014 nasz tydzie\u0144 \u0142apie si\u0119\nw ca\u0142o\u015bci. Efekt: ta\u0144sze skipassy, ta\u0144sze noclegi, pusto na trasach.\n\n## Skipass\n\nSystem dwucenowy: **G\u00e4stekarta** (dostajesz j\u0105 automatycznie nocuj\u0105c\nw regionie \u22651 noc) daje obni\u017cone taryfy dla ca\u0142ej rodziny.\n\n| Taryfa 6 dni, niski sezon, z g\u00e4stekart\u0105 | Szacunek 26/27 |\n|---|---|\n| Doros\u0142y | ~360\u2013390 \u20ac |\n| M\u0142odzie\u017c (rocznikowo, ~15\u201317 lat) | ~290\u2013320 \u20ac |\n| Dziecko (rocznikowo, ~11\u201315 lat) | ~180\u2013200 \u20ac |\n| Dzieci ur. 2020+ | gratis |\n\n| Rodzina | Skipassy 6 dni (szacunek) |\n|---|---|\n| 2+2 (nastolatki) | ~1 300\u20131 420 \u20ac |\n| 2+1 (dziecko) | ~900\u2013980 \u20ac |\n| **Grupa 14 os.** | **~4 400\u20134 800 \u20ac** |\n\n> \u26a0\ufe0f Kategorie wiekowe s\u0105 ROCZNIKOWE (w 25/26: dzieci Jg 2010\u20132014,\n> m\u0142odzie\u017c starsza osobno) \u2014 przed zakupem sprawdzi\u0107 progi 26/27\n> na serfaus-fiss-ladis.at. KeyCard: depozyt 2 \u20ac/szt.\n\n## Dojazd z Warszawy\n\n- ~1 120 km: jak do Ischgl (Innsbruck \u2192 Landeck), potem zamiast w dolin\u0119\n Paznaun \u2014 serpentyny na p\u0142askowy\u017c SFL (Ried \u2192 Fiss/Serfaus, ~10 km\n podjazdu, zim\u0105 dobrze utrzymane).\n- Winiety CZ+AT, bez odcink\u00f3w specjalnych. ~350 \u20ac/auto w obie strony.\n\n## Koszty \u017cycia\n\nPoziom tyrolski standard (taniej ni\u017c Ischgl, podobnie do Saalbach):\nobiad na stoku 15\u201320 \u20ac. Sklepy: MPREIS/Spar w ka\u017cdej z trzech wsi.\nTaksa ~2,50\u20133 \u20ac/os./noc. Bezp\u0142atny skibus \u0142\u0105czy Serfaus\u2013Fiss\u2013Ladis.\n\n## Bud\u017cet grupy (14 os., tydzie\u0144)\n\n| Pozycja | Kwota |\n|---|---|\n| Noclegi (Fiss/Ladis, 4 apartamenty) | 4 200\u20136 000 \u20ac |\n| Skipassy | ~4 400\u20134 800 \u20ac |\n| Dojazd (4 auta) | ~1 400 \u20ac |\n| Jedzenie + taksy | 2 800\u20133 500 \u20ac |\n| **RAZEM** | **~12 800\u201315 700 \u20ac** |\n\n## Ocena wzgl\u0119dem Saalbach\n\n**+** nasz termin = ich niski sezon (unikat w\u015br\u00f3d 4 wariant\u00f3w!);\nnajbardziej dzieci\u0119co-rodzinna infrastruktura; s\u0142oneczny p\u0142askowy\u017c;\nskipassy realnie najta\u0144sze po Livigno.\n**\u2212** mniej \"objazdowy\" charakter ni\u017c Skicircus (jeden po\u0142\u0105czony teren,\nale bez efektu p\u0119tli); apres-ski/wieczorne \u017cycie skromne (to celowo\nrodzinny kurort); nastolatki-eksperci mog\u0105 po 4 dniach zna\u0107 teren na pami\u0119\u0107.", "szablon-maila": "# Szablon maila \u2014 zapytanie grupowe (EN)\n\nWys\u0142a\u0107 ten sam mail do 2\u20133 obiekt\u00f3w r\u00f3wnolegle, podmieniaj\u0105c [pola].\nWersja uniwersalna pod 4 apartamenty; przy Sportchalet/Glemm Lodge\ndopisa\u0107 pytanie o zaj\u0119cie ca\u0142ego obiektu.\n\n---\n\n**Subject:** Group inquiry \u2014 4 apartments, week 16\u201323 Jan 2027 (14 persons)\n\nDear [Sir or Madam / imi\u0119 gospodarza],\n\nWe are a group of four families from Poland (14 persons in total:\n8 adults, 4 teenagers and 2 children) planning a ski week in Saalbach\nin January 2027.\n\nWe would like to ask about availability and a group offer for:\n\n- **4 apartments** (2\u00d7 for 4 persons: 2 adults + 2 teenagers;\n 2\u00d7 for 3 persons: 2 adults + 1 child)\n- **Arrival Sat 16 January \u2013 departure Sat 23 January 2027** (7 nights)\n- Alternative dates: 9\u201316 January 2027\n\nCould you please send us:\n\n1. Availability for these dates and apartment types,\n2. Your best total price for the group (incl. final cleaning and taxes),\n3. Deposit and cancellation terms.\n\nSince we are booking four apartments for a full week directly with you,\nwe would appreciate a group rate if possible.\n\nBest regards,\n[Imi\u0119 i nazwisko]\n[Telefon / e-mail]\n\n---\n\n## Notatki taktyczne\n\n- Wysy\u0142a\u0107 z jednego \"kontaktowego\" adresu \u2014 jedna osoba negocjuje za grup\u0119.\n- Nie podawa\u0107 bud\u017cetu w pierwszym mailu; najpierw ich oferta.\n- Po otrzymaniu 2 ofert mo\u017cna uczciwie napisa\u0107 \"we received a comparable\n offer at X \u20ac\" \u2014 w Alpach to normalna praktyka.\n- Prosi\u0107 o ofert\u0119 mailem (pisemnie), nie telefonicznie.", "wyjazd": "# Ski 2027 \u2014 Skicircus Saalbach\n\nWyjazd narciarski 4 rodzin: 2\u00d7(2+2 nastolatki) + 2\u00d7(2+1 dziecko) = **14 os\u00f3b**,\nwyjazd samochodami z Warszawy.\n\n- **Termin:** 16\u201323.01.2027 (alternatywa: 9\u201316.01.2027).\n- **Cel bud\u017cetowy noclegu:** **~2 000 \u20ac/rodzin\u0119 za tydzie\u0144** (nie 3\u20134 tys.).\n\nKontekst regionu, skipass\u00f3w, dojazdu i bud\u017cetu ca\u0142kowitego \u2192 [region](/region.md).\nKarty nocleg\u00f3w \u2192 [oferty](/oferty/index.md).\n\n## Oferty \u2014 ranking\n\n| # | Oferta | Miejscowo\u015b\u0107 | \u20ac/rodzin\u0119 2+2 | Status | Priorytet |\n|---|---|---|---|---|---|\n| 1 | [Kristall @ SchattbergXpress](/oferty/kristall-schattbergxpress.md) | Saalbach centrum, 50 m od gondoli | ~1 500\u20132 000 | szacunek | **PLAN A** |\n| 2 | [AlpenParks Sonnleiten](/oferty/alpenparks-sonnleiten.md) | Saalbach, 2 min od stoku | ~1 400\u20131 900 | szacunek | PLAN A-bis |\n| 3 | [Sportchalet Viehhofen](/oferty/sportchalet-viehhofen.md) | Viehhofen, skibus | ~1 200\u20131 600 | szacunek | **PLAN B** |\n| 4 | [Dom 12\u201314 os.](/oferty/dom-dla-grupy.md) | Viehhofen/Maishofen/Fieberbrunn | ~1 400\u20131 900 | koncept | r\u00f3wnoleg\u0142y |\n| 5 | [AlpenParks Rehrenberg](/oferty/alpenparks-rehrenberg.md) | Viehhofen | ~1 100\u20131 500 | szacunek | PLAN C |\n| 6 | [Glemm Lodge](/oferty/glemm-lodge.md) | Saalbach/Hinterglemm | ~4 370 | **zweryfikowane** | odrzucona (referencja) |\n\n## Por\u00f3wnanie wariant\u00f3w regionu\n\nSaalbach jest wariantem bazowym; obok niego badane s\u0105 trzy alternatywy.\nWszystkie bud\u017cety liczone t\u0105 sam\u0105 metodologi\u0105 (14 os., tydzie\u0144, 6 dni jazdy),\nwi\u0119c tabele s\u0105 por\u00f3wnywalne 1:1.\n\n| | [Saalbach (baza)](/region.md) | [Ischgl/Paznaun](/ischgl/region.md) | [Kronplatz](/kronplatz/region.md) | [SFL](/sfl/region.md) |\n|---|---|---|---|---|\n| Trasy | 270 km | 239 km (+40 km Kappl) | 121 km + Superski 1200 km | 214 km |\n| Dojazd z W-wy | **~950 km** | ~1 150 km | ~1 050 km | ~1 120 km |\n| Skipassy grupy | ~4 900\u20135 400 \u20ac | ~5 150 \u20ac (zweryf. 26/27) | ~4 900\u20135 300 \u20ac | **~4 400\u20134 800 \u20ac** |\n| Zni\u017cka 17-latka | \u2705 (do 18) | \u274c brak (od 17 lat = doros\u0142y) | \u2705 junior do 18 | \u2705 (rocznikowo) |\n| Nocleg / 4 apartamenty | 5 500\u20137 500 \u20ac | 4 000\u20135 600 \u20ac (Kappl) | 4 000\u20136 000 \u20ac (Olang) | 4 200\u20136 000 \u20ac (Ladis/Fiss) |\n| Sezon w terminie 16\u201323.01 | niski | niski | regular | **NISKI (oficjalnie!)** |\n| **Bud\u017cet grupy razem** | ~14 000\u201318 000 \u20ac | ~13 500\u201316 000 \u20ac | ~13 200\u201316 300 \u20ac | **~12 800\u201315 700 \u20ac** |\n| Charakter | wielka karuzela | wysokog\u00f3rski + Samnaun | Dolomity bez powt\u00f3rki | rodzinny kombajn |\n| G\u0142\u00f3wne ryzyko | najdro\u017cszy nocleg | wiek nastolatk\u00f3w (17!) | objazdowo\u015b\u0107 = auto/kolejka | za spokojnie dla nastolatk\u00f3w? |\n\n### Noclegi w wariantach\n\n| Wariant | PLAN A | PLAN B | \u20ac/rodzin\u0119 2+2 | Status |\n|---|---|---|---|---|\n| [Ischgl](/ischgl/index.md) | [Apartment Brandau](/ischgl/oferty/apartment-brandau-kappl.md), Kappl | [Apartments Kappl](/ischgl/oferty/apartments-kappl.md) | ~900\u20131 400 | szacunek |\n| [Kronplatz](/kronplatz/index.md) | [H\u00e4uslerhof](/kronplatz/oferty/haeuslerhof-valdaora.md), Valdaora | [Residence Corones](/kronplatz/oferty/residence-corones-valdaora.md) | ~800\u20131 400 | szacunek |\n| [SFL](/sfl/index.md) | [Haus Central](/sfl/oferty/haus-central-ladis.md), Ladis | [Apart Ideal](/sfl/oferty/apart-ideal-serfaus.md), Serfaus | ~1 000\u20131 800 | szacunek |\n\n### Wnioski przekrojowe\n\n1. **SFL wygrywa cenowo** w\u015br\u00f3d alternatyw \u2014 jedyny region, gdzie\n 16\u201323.01 to oficjalnie niski sezon (skipassy i noclegi w do\u0142ku).\n2. **Ischgl ma pu\u0142apk\u0119 wiekow\u0105**: zni\u017cka tylko do <17 lat \u2014 policzy\u0107\n roczniki nastolatk\u00f3w PRZED decyzj\u0105; brak zni\u017cki = +388 \u20ac na grup\u0119.\n3. Dwa obiekty maj\u0105 konfiguracj\u0119 **dok\u0142adnie 4 apartament\u00f3w**\n ([H\u00e4uslerhof](/kronplatz/oferty/haeuslerhof-valdaora.md),\n [Haus Central](/sfl/oferty/haus-central-ladis.md)) \u2014 grupa zajmuje\n ca\u0142y dom, co daje klimat wsp\u00f3lnego chaletu bez chaletowej ceny.\n4. Saalbach zostaje wariantem bazowym ze wzgl\u0119du na najkr\u00f3tszy dojazd\n i najwi\u0119kszy po\u0142\u0105czony teren; alternatywy bij\u0105 go bud\u017cetem noclegowym.\n\n## Najbli\u017csze kroki\n\n1. Mail grupowy ([szablon](/szablon-maila.md)) \u2192 Kristall/All in One + Sportchalet Viehhofen.\n2. Ceny online datami 16\u201323.01.2027 \u2192 AlpenParks (oba obiekty).\n3. Zebranie ofert \u2192 decyzja grupy \u2192 zaliczki (wrzesie\u0144 2026).\n\n## Konwencja danych\n\nKa\u017cda karta oferty ma frontmatter YAML z polami OKF (`type`, `title`,\n`description`, `timestamp`, `tags`) oraz z polami rozszerze\u0144: `id`, `nazwa`,\n`miejscowosc`, `gps`, `odleglosc_od_wyciagu`, `ocena`,\n`cena_za_apartament_tydzien`, `koszt_rodzina_2p2`, `koszt_rodzina_2p1`,\n`status_ceny` (SZACUNEK / ZWERYFIKOWANE), `priorytet`, `www`,\n`ostatnia_aktualizacja` \u2014 stron\u0119 mo\u017cna generowa\u0107 statycznie prosto\nz tych p\u00f3l (Astro/Hugo/Eleventy czytaj\u0105 frontmatter natywnie)."}, "types": ["Trip", "external", "narzedzie", "oferta", "oferta-koncept", "region"], "palette": {"BigQuery Dataset": "#8b5cf6", "BigQuery Table": "#3b82f6", "Reference": "#10b981", "external": "#0d9488"}};
|
|
</script>
|
|
<script>
|
|
(function () {
|
|
const bundle = window.BUNDLE;
|
|
const bundleName = window.BUNDLE_NAME;
|
|
document.title = `${bundleName} — OKF Viewer`;
|
|
document.getElementById("bundle-name").textContent = bundleName;
|
|
|
|
// Populate type filter
|
|
const typeSelect = document.getElementById("filter-type");
|
|
for (const t of bundle.types) {
|
|
const opt = document.createElement("option");
|
|
opt.value = t;
|
|
opt.textContent = t;
|
|
typeSelect.appendChild(opt);
|
|
}
|
|
|
|
// Build reverse-link index for backlinks
|
|
const backlinks = {};
|
|
for (const edge of bundle.edges) {
|
|
const { source, target } = edge.data;
|
|
(backlinks[target] ||= []).push(source);
|
|
}
|
|
|
|
// Look up node label/type by id
|
|
const nodeIndex = {};
|
|
for (const n of bundle.nodes) nodeIndex[n.data.id] = n.data;
|
|
|
|
const cy = cytoscape({
|
|
container: document.getElementById("graph"),
|
|
elements: [...bundle.nodes, ...bundle.edges],
|
|
style: [
|
|
{
|
|
selector: "node",
|
|
style: {
|
|
"background-color": "data(color)",
|
|
"label": "data(label)",
|
|
"color": "#0f172a",
|
|
"font-size": 11,
|
|
"text-valign": "bottom",
|
|
"text-margin-y": 4,
|
|
"text-wrap": "wrap",
|
|
"text-max-width": 120,
|
|
"width": "data(size)",
|
|
"height": "data(size)",
|
|
"border-width": 1,
|
|
"border-color": "#0f172a",
|
|
},
|
|
},
|
|
{
|
|
// DODANE (gen_viz.py): węzły linków zewnętrznych. Inny kształt niż
|
|
// koncepty, żeby jedno i drugie dało się rozróżnić bez czytania
|
|
// etykiet i niezależnie od koloru.
|
|
selector: 'node[type = "external"]',
|
|
style: {
|
|
"shape": "round-diamond",
|
|
"border-style": "dotted",
|
|
"font-size": 10,
|
|
"color": "#0f766e",
|
|
},
|
|
},
|
|
{
|
|
selector: "node[?stale]",
|
|
style: {
|
|
"border-width": 2,
|
|
"border-color": "#b91c1c",
|
|
"border-style": "dashed",
|
|
},
|
|
},
|
|
{
|
|
selector: 'node[status = "deprecated"]',
|
|
style: {
|
|
"opacity": 0.55,
|
|
},
|
|
},
|
|
{
|
|
selector: "node:selected",
|
|
style: {
|
|
"border-width": 3,
|
|
"border-color": "#f59e0b",
|
|
},
|
|
},
|
|
{
|
|
selector: "edge",
|
|
style: {
|
|
"width": 1.5,
|
|
"line-color": "#cbd5e1",
|
|
"target-arrow-color": "#cbd5e1",
|
|
"target-arrow-shape": "triangle",
|
|
"curve-style": "bezier",
|
|
"arrow-scale": 0.9,
|
|
},
|
|
},
|
|
{
|
|
selector: "edge:selected",
|
|
style: {
|
|
"line-color": "#f59e0b",
|
|
"target-arrow-color": "#f59e0b",
|
|
"width": 2.5,
|
|
},
|
|
},
|
|
{
|
|
selector: ".dim",
|
|
style: { "opacity": 0.15 },
|
|
},
|
|
],
|
|
layout: { name: "cose", animate: false, padding: 30 },
|
|
wheelSensitivity: 0.2,
|
|
});
|
|
|
|
cy.on("tap", "node", (evt) => showDetail(evt.target.id()));
|
|
cy.on("tap", (evt) => {
|
|
if (evt.target === cy) clearSelection();
|
|
});
|
|
|
|
document.getElementById("layout").addEventListener("change", (e) => {
|
|
cy.layout({ name: e.target.value, animate: false, padding: 30 }).run();
|
|
});
|
|
|
|
document.getElementById("reset").addEventListener("click", () => {
|
|
cy.fit(null, 30);
|
|
clearSelection();
|
|
});
|
|
|
|
document.getElementById("search").addEventListener("input", (e) => {
|
|
const q = e.target.value.trim().toLowerCase();
|
|
if (!q) {
|
|
cy.elements().removeClass("dim");
|
|
return;
|
|
}
|
|
cy.nodes().forEach((n) => {
|
|
const d = n.data();
|
|
const hay =
|
|
(d.label || "").toLowerCase() + " " +
|
|
d.id.toLowerCase() + " " +
|
|
(d.tags || []).join(" ").toLowerCase();
|
|
n.toggleClass("dim", !hay.includes(q));
|
|
});
|
|
cy.edges().forEach((edge) => {
|
|
const src = edge.source();
|
|
const tgt = edge.target();
|
|
edge.toggleClass("dim", src.hasClass("dim") || tgt.hasClass("dim"));
|
|
});
|
|
});
|
|
|
|
document.getElementById("filter-type").addEventListener("change", (e) => {
|
|
const t = e.target.value;
|
|
if (!t) {
|
|
cy.elements().removeClass("dim");
|
|
return;
|
|
}
|
|
cy.nodes().forEach((n) => {
|
|
n.toggleClass("dim", n.data("type") !== t);
|
|
});
|
|
cy.edges().forEach((edge) => {
|
|
edge.toggleClass("dim", edge.source().hasClass("dim") || edge.target().hasClass("dim"));
|
|
});
|
|
});
|
|
|
|
function clearSelection() {
|
|
cy.elements().unselect();
|
|
document.getElementById("detail-empty").hidden = false;
|
|
document.getElementById("detail-content").hidden = true;
|
|
}
|
|
|
|
function showDetail(conceptId) {
|
|
const data = nodeIndex[conceptId];
|
|
if (!data) return;
|
|
cy.elements().unselect();
|
|
const node = cy.getElementById(conceptId);
|
|
if (node) node.select();
|
|
|
|
document.getElementById("detail-empty").hidden = true;
|
|
const content = document.getElementById("detail-content");
|
|
content.hidden = false;
|
|
|
|
const chip = document.getElementById("detail-type");
|
|
chip.textContent = data.type;
|
|
chip.style.background = data.color;
|
|
|
|
document.getElementById("detail-title").textContent = data.label;
|
|
document.getElementById("detail-id").textContent = conceptId;
|
|
document.getElementById("detail-description").textContent = data.description || "—";
|
|
|
|
const resourceEl = document.getElementById("detail-resource");
|
|
resourceEl.innerHTML = "";
|
|
if (data.resource) {
|
|
const a = document.createElement("a");
|
|
a.href = data.resource;
|
|
a.textContent = data.resource;
|
|
a.target = "_blank";
|
|
a.rel = "noopener";
|
|
a.className = "external";
|
|
resourceEl.appendChild(a);
|
|
} else {
|
|
resourceEl.textContent = "—";
|
|
}
|
|
|
|
const tagsEl = document.getElementById("detail-tags");
|
|
tagsEl.innerHTML = "";
|
|
if (data.tags && data.tags.length) {
|
|
for (const t of data.tags) {
|
|
const span = document.createElement("span");
|
|
span.className = "tag";
|
|
span.textContent = t;
|
|
tagsEl.appendChild(span);
|
|
}
|
|
} else {
|
|
tagsEl.textContent = "—";
|
|
}
|
|
|
|
// v0.2 signal badges: status, trust tier, staleness.
|
|
const badgesEl = document.getElementById("detail-badges");
|
|
badgesEl.innerHTML = "";
|
|
const status = data.status || "stable";
|
|
badgesEl.appendChild(makeBadge(status, "status-" + status));
|
|
const tier = data.trust_tier || "unverified";
|
|
badgesEl.appendChild(makeBadge(tier.replace(/-/g, " "), "trust-" + tier));
|
|
if (data.stale) {
|
|
const label = data.stale_after ? `stale (since ${data.stale_after})` : "stale";
|
|
badgesEl.appendChild(makeBadge(label, "stale"));
|
|
} else if (data.stale_after) {
|
|
badgesEl.appendChild(makeBadge(`stale after ${data.stale_after}`, "fresh"));
|
|
}
|
|
|
|
document.getElementById("detail-generated").textContent = formatActorEvent(data.generated);
|
|
|
|
const verifiedEl = document.getElementById("detail-verified");
|
|
const verified = data.verified || [];
|
|
if (verified.length) {
|
|
verifiedEl.textContent = verified.map(formatActorEvent).join("; ");
|
|
} else {
|
|
verifiedEl.textContent = "—";
|
|
}
|
|
|
|
const sourcesEl = document.getElementById("detail-sources");
|
|
sourcesEl.innerHTML = "";
|
|
const sources = data.sources || [];
|
|
if (sources.length) {
|
|
const ul = document.createElement("ul");
|
|
ul.className = "sources-list";
|
|
for (const s of sources) {
|
|
const li = document.createElement("li");
|
|
const label = s.title || s.resource || s.id || "source";
|
|
if (s.resource && /^https?:\/\//.test(s.resource)) {
|
|
const a = document.createElement("a");
|
|
a.href = s.resource;
|
|
a.textContent = label;
|
|
a.target = "_blank";
|
|
a.rel = "noopener";
|
|
a.className = "external";
|
|
li.appendChild(a);
|
|
} else {
|
|
li.textContent = s.resource ? `${label} (${s.resource})` : label;
|
|
}
|
|
ul.appendChild(li);
|
|
}
|
|
sourcesEl.appendChild(ul);
|
|
} else {
|
|
sourcesEl.textContent = "—";
|
|
}
|
|
|
|
const body = bundle.bodies[conceptId] || "";
|
|
const html = marked.parse(body, { breaks: false, gfm: true });
|
|
const bodyEl = document.getElementById("detail-body");
|
|
bodyEl.innerHTML = html;
|
|
rewriteInternalLinks(bodyEl);
|
|
|
|
const bl = backlinks[conceptId] || [];
|
|
const blSection = document.getElementById("detail-backlinks");
|
|
const blList = document.getElementById("backlinks-list");
|
|
blList.innerHTML = "";
|
|
if (bl.length) {
|
|
blSection.hidden = false;
|
|
for (const src of bl) {
|
|
const li = document.createElement("li");
|
|
const a = document.createElement("a");
|
|
a.textContent = nodeIndex[src]?.label || src;
|
|
a.dataset.target = src;
|
|
a.addEventListener("click", () => showDetail(src));
|
|
li.appendChild(a);
|
|
const muted = document.createElement("span");
|
|
muted.className = "muted";
|
|
muted.textContent = ` (${src})`;
|
|
li.appendChild(muted);
|
|
blList.appendChild(li);
|
|
}
|
|
} else {
|
|
blSection.hidden = true;
|
|
}
|
|
|
|
cy.animate({ center: { eles: node }, zoom: Math.max(cy.zoom(), 1.0) }, { duration: 200 });
|
|
}
|
|
|
|
function makeBadge(text, cls) {
|
|
const span = document.createElement("span");
|
|
span.className = "badge " + cls;
|
|
span.textContent = text;
|
|
return span;
|
|
}
|
|
|
|
function formatActorEvent(event) {
|
|
if (!event || !event.by) return "—";
|
|
return event.at ? `${event.by} · ${event.at}` : String(event.by);
|
|
}
|
|
|
|
function rewriteInternalLinks(root) {
|
|
root.querySelectorAll("a[href]").forEach((a) => {
|
|
const href = a.getAttribute("href");
|
|
if (!href) return;
|
|
if (href.startsWith("/") && href.endsWith(".md")) {
|
|
const target = href.slice(1, -3);
|
|
if (nodeIndex[target]) {
|
|
a.className = "internal";
|
|
a.setAttribute("href", "javascript:void(0)");
|
|
a.addEventListener("click", (e) => {
|
|
e.preventDefault();
|
|
showDetail(target);
|
|
});
|
|
return;
|
|
}
|
|
}
|
|
a.className = "external";
|
|
a.setAttribute("target", "_blank");
|
|
a.setAttribute("rel", "noopener");
|
|
});
|
|
}
|
|
|
|
// Auto-show the first node (a dataset if available, else first concept)
|
|
const initial =
|
|
bundle.nodes.find((n) => n.data.type === "BigQuery Dataset") ||
|
|
bundle.nodes[0];
|
|
if (initial) showDetail(initial.data.id);
|
|
})();
|
|
|
|
</script>
|
|
</body>
|
|
</html>
|