pages/linki.html: spis wszystkich adresów wystawki do wysłania
Nowa strona z pełnymi URL-ami wszystkich 24 stron na https://narty27.kapala.org (BASE_URL — jedyne miejsce z domeną w kodzie), w sekcjach: Wejście, Regiony, Oferty per region z priorytetem PLAN A/B z frontmattera, Pozostałe. Każda pozycja to klikalny link, widoczny adres tekstem do skopiowania i krótki opis. Lista powstaje z tych samych danych co porownanie.html i start.html — regiony z wyjazd.md, oferty z katalogów i frontmatterów, "Pozostałe" to koncepty, których nie złapała żadna wcześniejsza sekcja. Nowa oferta wpada na listę sama przy regeneracji. Przyciski "Kopiuj wszystkie" (plain text: nazwa sekcji + adresy) i "Kopiuj link startowy"; navigator.clipboard z odwrotem na zaznaczenie, bo po http z adresu IP nie ma bezpiecznego kontekstu. Do nawigacji każdej strony i na start.html doszła pozycja "Linki". Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
8f1557e736
commit
0d0acdb3a4
259
gen_pages.py
259
gen_pages.py
|
|
@ -54,6 +54,13 @@ PAGES_DIR = BUNDLE_ROOT / PAGES_DIRNAME
|
||||||
BUNDLE_NAME = "Ski 2027 — Skicircus Saalbach"
|
BUNDLE_NAME = "Ski 2027 — Skicircus Saalbach"
|
||||||
RESERVED = {"index.md", "log.md"}
|
RESERVED = {"index.md", "log.md"}
|
||||||
|
|
||||||
|
# Publiczny adres wystawki — jedyne miejsce, w którym siedzi domena. Używa go
|
||||||
|
# WYŁĄCZNIE pages/linki.html (spis do kopiowania i wysyłania grupie); wszystkie
|
||||||
|
# pozostałe strony linkują względnie albo root-absolutnie, żeby działały tak
|
||||||
|
# samo lokalnie (python3 -m http.server) i po deployu. Zmiana domeny = zmiana
|
||||||
|
# tej jednej stałej i regeneracja.
|
||||||
|
BASE_URL = "https://narty27.kapala.org"
|
||||||
|
|
||||||
try: # renderer preferowany, jeśli dostępny w systemie
|
try: # renderer preferowany, jeśli dostępny w systemie
|
||||||
import markdown as _markdown_lib
|
import markdown as _markdown_lib
|
||||||
except ModuleNotFoundError:
|
except ModuleNotFoundError:
|
||||||
|
|
@ -382,7 +389,7 @@ body.wide { max-width: 72rem; }
|
||||||
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
||||||
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
||||||
@media (min-width: 34rem) {
|
@media (min-width: 34rem) {
|
||||||
.tiles { grid-template-columns: repeat(3, 1fr); }
|
.tiles { grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); }
|
||||||
.regions { grid-template-columns: repeat(2, 1fr); }
|
.regions { grid-template-columns: repeat(2, 1fr); }
|
||||||
}
|
}
|
||||||
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
||||||
|
|
@ -440,6 +447,24 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
||||||
border-radius: 4px; display: block; }
|
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 */
|
/* kafel regionu ze zdjęciem w tle */
|
||||||
.regions a.hero { background-size: cover; background-position: center;
|
.regions a.hero { background-size: cover; background-position: center;
|
||||||
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
||||||
|
|
@ -504,6 +529,7 @@ def _page_shell(
|
||||||
f'<a href="{up}start.html">← Start</a> · '
|
f'<a href="{up}start.html">← Start</a> · '
|
||||||
f'<a href="{up}index.html">Wszystkie karty</a> · '
|
f'<a href="{up}index.html">Wszystkie karty</a> · '
|
||||||
f'<a href="{up}porownanie.html">Porównanie ofert</a> · '
|
f'<a href="{up}porownanie.html">Porównanie ofert</a> · '
|
||||||
|
f'<a href="{up}linki.html">Linki</a> · '
|
||||||
f'<a href="{up}../viz.html">Graf</a>'
|
f'<a href="{up}../viz.html">Graf</a>'
|
||||||
)
|
)
|
||||||
css_class = f' class="{body_class}"' if body_class else ""
|
css_class = f' class="{body_class}"' if body_class else ""
|
||||||
|
|
@ -1043,6 +1069,9 @@ TILES = [
|
||||||
("/viz.html", "Graf powiązań",
|
("/viz.html", "Graf powiązań",
|
||||||
"Struktura bazy wiedzy — koncepty, linki między nimi i adresy "
|
"Struktura bazy wiedzy — koncepty, linki między nimi i adresy "
|
||||||
"zewnętrzne. Załącznik, nie punkt wejścia."),
|
"zewnętrzne. Załącznik, nie punkt wejścia."),
|
||||||
|
("/pages/linki.html", "Linki do wysłania",
|
||||||
|
"Pełne adresy wszystkich stron wystawki, z przyciskiem „kopiuj” — "
|
||||||
|
"do wrzucenia grupie."),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1092,6 +1121,7 @@ def render_start(concepts: list[Concept], regions: list[Region]) -> str:
|
||||||
nav = (
|
nav = (
|
||||||
'<a href="/pages/index.html">Wszystkie karty</a> · '
|
'<a href="/pages/index.html">Wszystkie karty</a> · '
|
||||||
'<a href="/pages/porownanie.html">Porównanie ofert</a> · '
|
'<a href="/pages/porownanie.html">Porównanie ofert</a> · '
|
||||||
|
'<a href="/pages/linki.html">Linki</a> · '
|
||||||
'<a href="/viz.html">Graf</a>'
|
'<a href="/viz.html">Graf</a>'
|
||||||
)
|
)
|
||||||
return _page_shell("Start", 0, content, nav=nav)
|
return _page_shell("Start", 0, content, nav=nav)
|
||||||
|
|
@ -1119,6 +1149,232 @@ def region_hero(concepts: list[Concept], region: Region) -> str:
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
|
||||||
|
# --- spis linków do wysłania ------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Link:
|
||||||
|
url: str
|
||||||
|
label: str
|
||||||
|
description: str = ""
|
||||||
|
|
||||||
|
|
||||||
|
def site_url(path: str) -> str:
|
||||||
|
"""Ścieżka w bundle'u → pełny adres publiczny."""
|
||||||
|
return f"{BASE_URL}/{path.lstrip('/')}"
|
||||||
|
|
||||||
|
|
||||||
|
def _describe(concept: Concept | None, limit: int = 110) -> str:
|
||||||
|
"""Opis konceptu przycięty do jednej linijki — bez skracania po separatorze,
|
||||||
|
bo w opisach nawias i myślnik niosą treść (inaczej niż w polach tabeli)."""
|
||||||
|
if not concept:
|
||||||
|
return ""
|
||||||
|
text = str(concept.frontmatter.get("description") or "")
|
||||||
|
if len(text) > limit:
|
||||||
|
text = text[: limit - 1].rsplit(" ", 1)[0] + "…"
|
||||||
|
return text
|
||||||
|
|
||||||
|
|
||||||
|
def link_sections(
|
||||||
|
concepts: list[Concept], regions: list[Region]
|
||||||
|
) -> list[tuple[str, list[Link]]]:
|
||||||
|
"""Spis wszystkich stron wystawki — z tych samych danych co reszta stron.
|
||||||
|
|
||||||
|
Nic tu nie jest wypisane ręcznie: regiony biorą się z `wyjazd.md`, oferty
|
||||||
|
z katalogów i frontmatterów, a „Pozostałe” to po prostu koncepty, których
|
||||||
|
nie złapała żadna wcześniejsza sekcja. Nowa oferta czy piąty wariant
|
||||||
|
pojawiają się na liście przy najbliższej regeneracji, same z siebie.
|
||||||
|
"""
|
||||||
|
by_id = {c.id: c for c in concepts}
|
||||||
|
used: set[str] = set()
|
||||||
|
|
||||||
|
entry = [
|
||||||
|
Link(site_url(""), "Start", "Landing decyzyjny — od tego zaczyna grupa."),
|
||||||
|
Link(
|
||||||
|
site_url("pages/porownanie.html"),
|
||||||
|
"Porównanie ofert",
|
||||||
|
"Wszystkie noclegi w jednej sortowalnej tabeli, ze zdjęciami.",
|
||||||
|
),
|
||||||
|
Link(
|
||||||
|
site_url("pages/wyjazd.html"),
|
||||||
|
"Analiza wariantów",
|
||||||
|
_describe(by_id.get("wyjazd")) or "Cztery regiony obok siebie.",
|
||||||
|
),
|
||||||
|
Link(
|
||||||
|
site_url("pages/index.html"),
|
||||||
|
"Spis wszystkich kart",
|
||||||
|
"Każdy dokument bazy wiedzy w jednym miejscu.",
|
||||||
|
),
|
||||||
|
Link(site_url("viz.html"), "Graf powiązań", "Struktura bazy — załącznik."),
|
||||||
|
Link(site_url("pages/linki.html"), "Ten spis linków", "Strona, którą czytasz."),
|
||||||
|
]
|
||||||
|
used.add("wyjazd")
|
||||||
|
|
||||||
|
sections: list[tuple[str, list[Link]]] = [("Wejście", entry)]
|
||||||
|
|
||||||
|
region_links = []
|
||||||
|
for region in regions:
|
||||||
|
concept = by_id.get(region.concept_id)
|
||||||
|
if not concept:
|
||||||
|
continue
|
||||||
|
used.add(region.concept_id)
|
||||||
|
budget = f"Budżet grupy {region.budget}. " if region.budget else ""
|
||||||
|
region_links.append(
|
||||||
|
Link(
|
||||||
|
site_url(f"{PAGES_DIRNAME}/{concept.page}"),
|
||||||
|
region.label,
|
||||||
|
budget + _describe(concept, 90),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
if region_links:
|
||||||
|
sections.append(("Regiony", region_links))
|
||||||
|
|
||||||
|
for region in regions:
|
||||||
|
offers = [
|
||||||
|
c
|
||||||
|
for c in concepts
|
||||||
|
if is_offer(c)
|
||||||
|
and posixpath.dirname(posixpath.dirname(c.id)) == region.dirname
|
||||||
|
]
|
||||||
|
if not offers:
|
||||||
|
continue
|
||||||
|
links = []
|
||||||
|
for concept in sorted(offers, key=_priority_rank):
|
||||||
|
used.add(concept.id)
|
||||||
|
priority = _shorten(str(concept.frontmatter.get("priorytet") or ""))
|
||||||
|
place = str(concept.frontmatter.get("miejscowosc") or "")
|
||||||
|
links.append(
|
||||||
|
Link(
|
||||||
|
site_url(f"{PAGES_DIRNAME}/{concept.page}"),
|
||||||
|
str(concept.frontmatter.get("nazwa") or concept.title),
|
||||||
|
" · ".join(part for part in (priority, place) if part),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
sections.append((f"Oferty — {region.label}", links))
|
||||||
|
|
||||||
|
rest = [
|
||||||
|
Link(
|
||||||
|
site_url(f"{PAGES_DIRNAME}/{c.page}"),
|
||||||
|
c.title,
|
||||||
|
_describe(c),
|
||||||
|
)
|
||||||
|
for c in concepts
|
||||||
|
if c.id not in used
|
||||||
|
]
|
||||||
|
rest.append(
|
||||||
|
Link(
|
||||||
|
site_url(f"{PAGES_DIRNAME}/start.html"),
|
||||||
|
"Start pod własną ścieżką",
|
||||||
|
"Ten sam landing co adres główny — przydaje się w zakładkach.",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
sections.append(("Pozostałe", rest))
|
||||||
|
return sections
|
||||||
|
|
||||||
|
|
||||||
|
def _priority_rank(concept: Concept) -> tuple[int, str]:
|
||||||
|
priority = str(concept.frontmatter.get("priorytet") or "").upper()
|
||||||
|
for n, marker in enumerate(("PLAN A", "PLAN B", "PLAN C")):
|
||||||
|
if priority.startswith(marker):
|
||||||
|
return (n, concept.title)
|
||||||
|
return (9, concept.title)
|
||||||
|
|
||||||
|
|
||||||
|
LINKS_JS = """
|
||||||
|
function collectAll() {
|
||||||
|
var lines = [];
|
||||||
|
document.querySelectorAll('section[data-section]').forEach(function (section) {
|
||||||
|
lines.push(section.dataset.section + ':');
|
||||||
|
section.querySelectorAll('.url').forEach(function (code) {
|
||||||
|
lines.push(code.textContent.trim());
|
||||||
|
});
|
||||||
|
lines.push('');
|
||||||
|
});
|
||||||
|
return lines.join('\\n').trim() + '\\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
function say(message) {
|
||||||
|
var status = document.querySelector('.copy-status');
|
||||||
|
status.textContent = message;
|
||||||
|
window.setTimeout(function () {
|
||||||
|
if (status.textContent === message) status.textContent = '';
|
||||||
|
}, 4000);
|
||||||
|
}
|
||||||
|
|
||||||
|
// navigator.clipboard istnieje tylko w bezpiecznym kontekście (https albo
|
||||||
|
// localhost) — po http z adresu IP trzeba starą drogą przez zaznaczenie.
|
||||||
|
function copyLegacy(text) {
|
||||||
|
var area = document.createElement('textarea');
|
||||||
|
area.value = text;
|
||||||
|
area.setAttribute('readonly', '');
|
||||||
|
area.style.position = 'fixed';
|
||||||
|
area.style.top = '-1000px';
|
||||||
|
document.body.appendChild(area);
|
||||||
|
area.select();
|
||||||
|
var copied = false;
|
||||||
|
try { copied = document.execCommand('copy'); } catch (error) { copied = false; }
|
||||||
|
document.body.removeChild(area);
|
||||||
|
return copied;
|
||||||
|
}
|
||||||
|
|
||||||
|
function copyText(text, what) {
|
||||||
|
var ok = function () { say('Skopiowane: ' + what); };
|
||||||
|
var no = function () { say('Nie udało się skopiować — zaznacz adres ręcznie.'); };
|
||||||
|
if (navigator.clipboard && window.isSecureContext) {
|
||||||
|
navigator.clipboard.writeText(text).then(ok, function () {
|
||||||
|
if (copyLegacy(text)) { ok(); } else { no(); }
|
||||||
|
});
|
||||||
|
} else if (copyLegacy(text)) { ok(); } else { no(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
document.getElementById('copy-all').addEventListener('click', function () {
|
||||||
|
copyText(collectAll(), 'cała lista');
|
||||||
|
});
|
||||||
|
document.getElementById('copy-start').addEventListener('click', function () {
|
||||||
|
copyText(this.dataset.url, 'link startowy');
|
||||||
|
});
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def render_links(concepts: list[Concept], regions: list[Region]) -> str:
|
||||||
|
sections = link_sections(concepts, regions)
|
||||||
|
blocks = []
|
||||||
|
total = 0
|
||||||
|
for title, links in sections:
|
||||||
|
if not links:
|
||||||
|
continue
|
||||||
|
items = []
|
||||||
|
for link in links:
|
||||||
|
total += 1
|
||||||
|
escaped = html.escape(link.url, quote=True)
|
||||||
|
description = (
|
||||||
|
f"<p>{html.escape(link.description)}</p>" if link.description else ""
|
||||||
|
)
|
||||||
|
items.append(
|
||||||
|
f'<li><a href="{escaped}">{html.escape(link.label)}</a>'
|
||||||
|
f'<code class="url">{html.escape(link.url)}</code>{description}</li>'
|
||||||
|
)
|
||||||
|
blocks.append(
|
||||||
|
f'<section data-section="{html.escape(title, quote=True)}">'
|
||||||
|
f"<h2>{html.escape(title)}</h2>"
|
||||||
|
f'<ul class="links">{"".join(items)}</ul></section>'
|
||||||
|
)
|
||||||
|
|
||||||
|
content = (
|
||||||
|
"<h1>Linki do wysłania</h1>\n"
|
||||||
|
f'<p class="lead">Wszystkie {total} stron wystawki jako pełne adresy — '
|
||||||
|
"do skopiowania i wrzucenia grupie. Lista powstaje z tych samych danych "
|
||||||
|
"co reszta stron, więc nowa oferta pojawi się tu sama.</p>\n"
|
||||||
|
'<div class="copybar">'
|
||||||
|
'<button type="button" id="copy-all">Kopiuj wszystkie</button>'
|
||||||
|
f'<button type="button" id="copy-start" data-url="{html.escape(site_url(""), quote=True)}">'
|
||||||
|
"Kopiuj link startowy</button>"
|
||||||
|
'<span class="copy-status" role="status" aria-live="polite"></span>'
|
||||||
|
"</div>\n" + "\n".join(blocks)
|
||||||
|
)
|
||||||
|
return _page_shell("Linki", 0, content, script=LINKS_JS)
|
||||||
|
|
||||||
|
|
||||||
# --- raport braków ----------------------------------------------------
|
# --- raport braków ----------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1181,6 +1437,7 @@ def main() -> int:
|
||||||
for name, markup in (
|
for name, markup in (
|
||||||
("index.html", render_index(concepts)),
|
("index.html", render_index(concepts)),
|
||||||
("porownanie.html", render_comparison(concepts, regions)),
|
("porownanie.html", render_comparison(concepts, regions)),
|
||||||
|
("linki.html", render_links(concepts, regions)),
|
||||||
("start.html", render_start(concepts, regions)),
|
("start.html", render_start(concepts, regions)),
|
||||||
):
|
):
|
||||||
path = PAGES_DIR / name
|
path = PAGES_DIR / name
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ body.wide { max-width: 72rem; }
|
||||||
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
||||||
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
||||||
@media (min-width: 34rem) {
|
@media (min-width: 34rem) {
|
||||||
.tiles { grid-template-columns: repeat(3, 1fr); }
|
.tiles { grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); }
|
||||||
.regions { grid-template-columns: repeat(2, 1fr); }
|
.regions { grid-template-columns: repeat(2, 1fr); }
|
||||||
}
|
}
|
||||||
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
||||||
|
|
@ -122,6 +122,24 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
||||||
border-radius: 4px; display: block; }
|
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 */
|
/* kafel regionu ze zdjęciem w tle */
|
||||||
.regions a.hero { background-size: cover; background-position: center;
|
.regions a.hero { background-size: cover; background-position: center;
|
||||||
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
||||||
|
|
@ -130,7 +148,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<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="../viz.html">Graf</a></nav>
|
<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 — Skicircus Saalbach</h1>
|
<h1>Ski 2027 — Skicircus Saalbach</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>
|
<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>
|
<h2>Wyjazd i wiedza ogólna</h2>
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ body.wide { max-width: 72rem; }
|
||||||
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
||||||
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
||||||
@media (min-width: 34rem) {
|
@media (min-width: 34rem) {
|
||||||
.tiles { grid-template-columns: repeat(3, 1fr); }
|
.tiles { grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); }
|
||||||
.regions { grid-template-columns: repeat(2, 1fr); }
|
.regions { grid-template-columns: repeat(2, 1fr); }
|
||||||
}
|
}
|
||||||
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
||||||
|
|
@ -122,6 +122,24 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
||||||
border-radius: 4px; display: block; }
|
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 */
|
/* kafel regionu ze zdjęciem w tle */
|
||||||
.regions a.hero { background-size: cover; background-position: center;
|
.regions a.hero { background-size: cover; background-position: center;
|
||||||
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
||||||
|
|
@ -130,7 +148,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<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="../../../viz.html">Graf</a></nav>
|
<nav><a href="../../start.html">← Start</a> · <a href="../../index.html">Wszystkie karty</a> · <a href="../../porownanie.html">Porównanie ofert</a> · <a href="../../linki.html">Linki</a> · <a href="../../../viz.html">Graf</a></nav>
|
||||||
<span class="chip">oferta</span>
|
<span class="chip">oferta</span>
|
||||||
<h1>Apartment Brandau (Kappl) — PLAN A</h1>
|
<h1>Apartment Brandau (Kappl) — PLAN A</h1>
|
||||||
<p class="lead">Rodzinny dom z sześcioma apartamentami w Kappl — bierzemy cztery, ceny doliny zamiast cen Ischgl, PLAN A wariantu Ischgl.</p>
|
<p class="lead">Rodzinny dom z sześcioma apartamentami w Kappl — bierzemy cztery, ceny doliny zamiast cen Ischgl, PLAN A wariantu Ischgl.</p>
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ body.wide { max-width: 72rem; }
|
||||||
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
||||||
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
||||||
@media (min-width: 34rem) {
|
@media (min-width: 34rem) {
|
||||||
.tiles { grid-template-columns: repeat(3, 1fr); }
|
.tiles { grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); }
|
||||||
.regions { grid-template-columns: repeat(2, 1fr); }
|
.regions { grid-template-columns: repeat(2, 1fr); }
|
||||||
}
|
}
|
||||||
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
||||||
|
|
@ -122,6 +122,24 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
||||||
border-radius: 4px; display: block; }
|
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 */
|
/* kafel regionu ze zdjęciem w tle */
|
||||||
.regions a.hero { background-size: cover; background-position: center;
|
.regions a.hero { background-size: cover; background-position: center;
|
||||||
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
||||||
|
|
@ -130,7 +148,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<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="../../../viz.html">Graf</a></nav>
|
<nav><a href="../../start.html">← Start</a> · <a href="../../index.html">Wszystkie karty</a> · <a href="../../porownanie.html">Porównanie ofert</a> · <a href="../../linki.html">Linki</a> · <a href="../../../viz.html">Graf</a></nav>
|
||||||
<span class="chip">oferta</span>
|
<span class="chip">oferta</span>
|
||||||
<h1>Apartments Kappl — PLAN B</h1>
|
<h1>Apartments Kappl — PLAN B</h1>
|
||||||
<p class="lead">Tyrolski dom apartamentowy 100 m od przystanku skibusa bez przesiadki do Ischgl — liczba wolnych jednostek do potwierdzenia, PLAN B wariantu Ischgl.</p>
|
<p class="lead">Tyrolski dom apartamentowy 100 m od przystanku skibusa bez przesiadki do Ischgl — liczba wolnych jednostek do potwierdzenia, PLAN B wariantu Ischgl.</p>
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ body.wide { max-width: 72rem; }
|
||||||
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
||||||
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
||||||
@media (min-width: 34rem) {
|
@media (min-width: 34rem) {
|
||||||
.tiles { grid-template-columns: repeat(3, 1fr); }
|
.tiles { grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); }
|
||||||
.regions { grid-template-columns: repeat(2, 1fr); }
|
.regions { grid-template-columns: repeat(2, 1fr); }
|
||||||
}
|
}
|
||||||
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
||||||
|
|
@ -122,6 +122,24 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
||||||
border-radius: 4px; display: block; }
|
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 */
|
/* kafel regionu ze zdjęciem w tle */
|
||||||
.regions a.hero { background-size: cover; background-position: center;
|
.regions a.hero { background-size: cover; background-position: center;
|
||||||
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
||||||
|
|
@ -130,7 +148,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<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="../../viz.html">Graf</a></nav>
|
<nav><a href="../start.html">← Start</a> · <a href="../index.html">Wszystkie karty</a> · <a href="../porownanie.html">Porównanie ofert</a> · <a href="../linki.html">Linki</a> · <a href="../../viz.html">Graf</a></nav>
|
||||||
<span class="chip">region</span>
|
<span class="chip">region</span>
|
||||||
<h1>Ischgl / Paznaun — informacje o regionie</h1>
|
<h1>Ischgl / Paznaun — informacje o regionie</h1>
|
||||||
<p class="lead">Wariant alternatywny: 239 km Silvretta Areny z jazdą do bezcłowego Samnaun, nocleg w tańszym Kappl — skipass zweryfikowany na 26/27, bez zniżki dla 17-latków.</p>
|
<p class="lead">Wariant alternatywny: 239 km Silvretta Areny z jazdą do bezcłowego Samnaun, nocleg w tańszym Kappl — skipass zweryfikowany na 26/27, bez zniżki dla 17-latków.</p>
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ body.wide { max-width: 72rem; }
|
||||||
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
||||||
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
||||||
@media (min-width: 34rem) {
|
@media (min-width: 34rem) {
|
||||||
.tiles { grid-template-columns: repeat(3, 1fr); }
|
.tiles { grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); }
|
||||||
.regions { grid-template-columns: repeat(2, 1fr); }
|
.regions { grid-template-columns: repeat(2, 1fr); }
|
||||||
}
|
}
|
||||||
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
||||||
|
|
@ -122,6 +122,24 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
||||||
border-radius: 4px; display: block; }
|
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 */
|
/* kafel regionu ze zdjęciem w tle */
|
||||||
.regions a.hero { background-size: cover; background-position: center;
|
.regions a.hero { background-size: cover; background-position: center;
|
||||||
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
||||||
|
|
@ -130,7 +148,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<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="../../../viz.html">Graf</a></nav>
|
<nav><a href="../../start.html">← Start</a> · <a href="../../index.html">Wszystkie karty</a> · <a href="../../porownanie.html">Porównanie ofert</a> · <a href="../../linki.html">Linki</a> · <a href="../../../viz.html">Graf</a></nav>
|
||||||
<span class="chip">oferta</span>
|
<span class="chip">oferta</span>
|
||||||
<h1>Häuslerhof (Valdaora) — PLAN A</h1>
|
<h1>Häuslerhof (Valdaora) — PLAN A</h1>
|
||||||
<p class="lead">Gospodarstwo z dokładnie czterema apartamentami — grupa zajmuje cały obiekt, anulacja bezpłatna do 2 miesięcy przed, PLAN A wariantu Kronplatz.</p>
|
<p class="lead">Gospodarstwo z dokładnie czterema apartamentami — grupa zajmuje cały obiekt, anulacja bezpłatna do 2 miesięcy przed, PLAN A wariantu Kronplatz.</p>
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ body.wide { max-width: 72rem; }
|
||||||
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
||||||
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
||||||
@media (min-width: 34rem) {
|
@media (min-width: 34rem) {
|
||||||
.tiles { grid-template-columns: repeat(3, 1fr); }
|
.tiles { grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); }
|
||||||
.regions { grid-template-columns: repeat(2, 1fr); }
|
.regions { grid-template-columns: repeat(2, 1fr); }
|
||||||
}
|
}
|
||||||
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
||||||
|
|
@ -122,6 +122,24 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
||||||
border-radius: 4px; display: block; }
|
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 */
|
/* kafel regionu ze zdjęciem w tle */
|
||||||
.regions a.hero { background-size: cover; background-position: center;
|
.regions a.hero { background-size: cover; background-position: center;
|
||||||
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
||||||
|
|
@ -130,7 +148,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<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="../../../viz.html">Graf</a></nav>
|
<nav><a href="../../start.html">← Start</a> · <a href="../../index.html">Wszystkie karty</a> · <a href="../../porownanie.html">Porównanie ofert</a> · <a href="../../linki.html">Linki</a> · <a href="../../../viz.html">Graf</a></nav>
|
||||||
<span class="chip">oferta</span>
|
<span class="chip">oferta</span>
|
||||||
<h1>Residence Corones (Valdaora) — PLAN B</h1>
|
<h1>Residence Corones (Valdaora) — PLAN B</h1>
|
||||||
<p class="lead">Rezydencja w centrum Valdaory z przystankiem skibusa przed domem i Digital Guestpassem w cenie — PLAN B wariantu Kronplatz.</p>
|
<p class="lead">Rezydencja w centrum Valdaory z przystankiem skibusa przed domem i Digital Guestpassem w cenie — PLAN B wariantu Kronplatz.</p>
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ body.wide { max-width: 72rem; }
|
||||||
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
||||||
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
||||||
@media (min-width: 34rem) {
|
@media (min-width: 34rem) {
|
||||||
.tiles { grid-template-columns: repeat(3, 1fr); }
|
.tiles { grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); }
|
||||||
.regions { grid-template-columns: repeat(2, 1fr); }
|
.regions { grid-template-columns: repeat(2, 1fr); }
|
||||||
}
|
}
|
||||||
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
||||||
|
|
@ -122,6 +122,24 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
||||||
border-radius: 4px; display: block; }
|
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 */
|
/* kafel regionu ze zdjęciem w tle */
|
||||||
.regions a.hero { background-size: cover; background-position: center;
|
.regions a.hero { background-size: cover; background-position: center;
|
||||||
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
||||||
|
|
@ -130,7 +148,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<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="../../viz.html">Graf</a></nav>
|
<nav><a href="../start.html">← Start</a> · <a href="../index.html">Wszystkie karty</a> · <a href="../porownanie.html">Porównanie ofert</a> · <a href="../linki.html">Linki</a> · <a href="../../viz.html">Graf</a></nav>
|
||||||
<span class="chip">region</span>
|
<span class="chip">region</span>
|
||||||
<h1>Kronplatz — informacje o regionie</h1>
|
<h1>Kronplatz — informacje o regionie</h1>
|
||||||
<p class="lead">Wariant alternatywny: 121 km na jednej górze plus cały Dolomiti Superski w karnecie, baza w tanim Olang/Valdaora, junior do 18 lat bez dopłaty.</p>
|
<p class="lead">Wariant alternatywny: 121 km na jednej górze plus cały Dolomiti Superski w karnecie, baza w tanim Olang/Valdaora, junior do 18 lat bez dopłaty.</p>
|
||||||
|
|
|
||||||
219
pages/linki.html
Normal file
219
pages/linki.html
Normal file
|
|
@ -0,0 +1,219 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html lang="pl">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>Linki — Ski 2027 — Skicircus Saalbach</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(13rem, 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); }
|
||||||
|
.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); }
|
||||||
|
|
||||||
|
/* 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>Linki do wysłania</h1>
|
||||||
|
<p class="lead">Wszystkie 24 stron wystawki jako pełne adresy — do skopiowania i wrzucenia grupie. Lista powstaje z tych samych danych co reszta stron, więc nowa oferta pojawi się tu sama.</p>
|
||||||
|
<div class="copybar"><button type="button" id="copy-all">Kopiuj wszystkie</button><button type="button" id="copy-start" data-url="https://narty27.kapala.org/">Kopiuj link startowy</button><span class="copy-status" role="status" aria-live="polite"></span></div>
|
||||||
|
<section data-section="Wejście"><h2>Wejście</h2><ul class="links"><li><a href="https://narty27.kapala.org/">Start</a><code class="url">https://narty27.kapala.org/</code><p>Landing decyzyjny — od tego zaczyna grupa.</p></li><li><a href="https://narty27.kapala.org/pages/porownanie.html">Porównanie ofert</a><code class="url">https://narty27.kapala.org/pages/porownanie.html</code><p>Wszystkie noclegi w jednej sortowalnej tabeli, ze zdjęciami.</p></li><li><a href="https://narty27.kapala.org/pages/wyjazd.html">Analiza wariantów</a><code class="url">https://narty27.kapala.org/pages/wyjazd.html</code><p>Wyjazd narciarski 4 rodzin (14 osób) z Warszawy do Skicircus Saalbach w styczniu 2027, z celem budżetowym ~2…</p></li><li><a href="https://narty27.kapala.org/pages/index.html">Spis wszystkich kart</a><code class="url">https://narty27.kapala.org/pages/index.html</code><p>Każdy dokument bazy wiedzy w jednym miejscu.</p></li><li><a href="https://narty27.kapala.org/viz.html">Graf powiązań</a><code class="url">https://narty27.kapala.org/viz.html</code><p>Struktura bazy — załącznik.</p></li><li><a href="https://narty27.kapala.org/pages/linki.html">Ten spis linków</a><code class="url">https://narty27.kapala.org/pages/linki.html</code><p>Strona, którą czytasz.</p></li></ul></section>
|
||||||
|
<section data-section="Regiony"><h2>Regiony</h2><ul class="links"><li><a href="https://narty27.kapala.org/pages/region.html">Saalbach (baza)</a><code class="url">https://narty27.kapala.org/pages/region.html</code><p>Budżet grupy ~14 000–18 000 €. Wszystko poza noclegiem: teren narciarski, skipassy ALPIN CARD, dojazd z Warszawy,…</p></li><li><a href="https://narty27.kapala.org/pages/ischgl/region.html">Ischgl/Paznaun</a><code class="url">https://narty27.kapala.org/pages/ischgl/region.html</code><p>Budżet grupy ~13 500–16 000 €. Wariant alternatywny: 239 km Silvretta Areny z jazdą do bezcłowego Samnaun, nocleg w…</p></li><li><a href="https://narty27.kapala.org/pages/kronplatz/region.html">Kronplatz</a><code class="url">https://narty27.kapala.org/pages/kronplatz/region.html</code><p>Budżet grupy ~13 200–16 300 €. Wariant alternatywny: 121 km na jednej górze plus cały Dolomiti Superski w karnecie,…</p></li><li><a href="https://narty27.kapala.org/pages/sfl/region.html">SFL</a><code class="url">https://narty27.kapala.org/pages/sfl/region.html</code><p>Budżet grupy ~12 800–15 700 €. Wariant alternatywny i najtańszy budżetowo: 214 km na słonecznym płaskowyżu,…</p></li></ul></section>
|
||||||
|
<section data-section="Oferty — Saalbach (baza)"><h2>Oferty — Saalbach (baza)</h2><ul class="links"><li><a href="https://narty27.kapala.org/pages/oferty/alpenparks-sonnleiten.html">AlpenParks Hotel & Apartment Sonnleiten</a><code class="url">https://narty27.kapala.org/pages/oferty/alpenparks-sonnleiten.html</code><p>PLAN A-bis · Saalbach</p></li><li><a href="https://narty27.kapala.org/pages/oferty/kristall-schattbergxpress.html">Appartementhaus Kristall at SchattbergXpress</a><code class="url">https://narty27.kapala.org/pages/oferty/kristall-schattbergxpress.html</code><p>PLAN A · Saalbach (centrum)</p></li><li><a href="https://narty27.kapala.org/pages/oferty/sportchalet-viehhofen.html">Sportchalet Viehhofen</a><code class="url">https://narty27.kapala.org/pages/oferty/sportchalet-viehhofen.html</code><p>PLAN B · Viehhofen (3 km od Saalbach)</p></li><li><a href="https://narty27.kapala.org/pages/oferty/alpenparks-rehrenberg.html">AlpenParks Apartments Rehrenberg</a><code class="url">https://narty27.kapala.org/pages/oferty/alpenparks-rehrenberg.html</code><p>PLAN C · Viehhofen</p></li><li><a href="https://narty27.kapala.org/pages/oferty/dom-dla-grupy.html">Duży dom wakacyjny 12–14 os. (do wyszukania)</a><code class="url">https://narty27.kapala.org/pages/oferty/dom-dla-grupy.html</code><p>WARIANT RÓWNOLEGŁY · Viehhofen / Maishofen / strona Fieberbrunn</p></li><li><a href="https://narty27.kapala.org/pages/oferty/glemm-lodge.html">Glemm Lodge Apartments ⭐⭐⭐⭐</a><code class="url">https://narty27.kapala.org/pages/oferty/glemm-lodge.html</code><p>ODRZUCONA BUDŻETOWO · między Saalbach a Hinterglemm</p></li></ul></section>
|
||||||
|
<section data-section="Oferty — Ischgl/Paznaun"><h2>Oferty — Ischgl/Paznaun</h2><ul class="links"><li><a href="https://narty27.kapala.org/pages/ischgl/oferty/apartment-brandau-kappl.html">Apartment Brandau</a><code class="url">https://narty27.kapala.org/pages/ischgl/oferty/apartment-brandau-kappl.html</code><p>PLAN A · Kappl (Paznaun)</p></li><li><a href="https://narty27.kapala.org/pages/ischgl/oferty/apartments-kappl.html">Apartments Kappl</a><code class="url">https://narty27.kapala.org/pages/ischgl/oferty/apartments-kappl.html</code><p>PLAN B · Kappl (Paznaun)</p></li></ul></section>
|
||||||
|
<section data-section="Oferty — Kronplatz"><h2>Oferty — Kronplatz</h2><ul class="links"><li><a href="https://narty27.kapala.org/pages/kronplatz/oferty/haeuslerhof-valdaora.html">Häuslerhof</a><code class="url">https://narty27.kapala.org/pages/kronplatz/oferty/haeuslerhof-valdaora.html</code><p>PLAN A · Valdaora/Olang</p></li><li><a href="https://narty27.kapala.org/pages/kronplatz/oferty/residence-corones-valdaora.html">Residence Corones</a><code class="url">https://narty27.kapala.org/pages/kronplatz/oferty/residence-corones-valdaora.html</code><p>PLAN B · Valdaora (centrum)</p></li></ul></section>
|
||||||
|
<section data-section="Oferty — SFL"><h2>Oferty — SFL</h2><ul class="links"><li><a href="https://narty27.kapala.org/pages/sfl/oferty/haus-central-ladis.html">Haus Central (Apart Central)</a><code class="url">https://narty27.kapala.org/pages/sfl/oferty/haus-central-ladis.html</code><p>PLAN A · Ladis</p></li><li><a href="https://narty27.kapala.org/pages/sfl/oferty/apart-ideal-serfaus.html">Apart Ideal</a><code class="url">https://narty27.kapala.org/pages/sfl/oferty/apart-ideal-serfaus.html</code><p>PLAN B · Serfaus (obrzeża)</p></li></ul></section>
|
||||||
|
<section data-section="Pozostałe"><h2>Pozostałe</h2><ul class="links"><li><a href="https://narty27.kapala.org/pages/szablon-maila.html">Szablon zapytania grupowego (EN)</a><code class="url">https://narty27.kapala.org/pages/szablon-maila.html</code><p>Gotowy angielski mail z zapytaniem o 4 apartamenty dla 14 osób w terminie 16–23.01.2027 wraz z notatkami…</p></li><li><a href="https://narty27.kapala.org/pages/start.html">Start pod własną ścieżką</a><code class="url">https://narty27.kapala.org/pages/start.html</code><p>Ten sam landing co adres główny — przydaje się w zakładkach.</p></li></ul></section>
|
||||||
|
<footer>Wygenerowane z bundle'a OKF przez <code>gen_pages.py</code> — nie edytuj
|
||||||
|
tych plików, edytuj <code>.md</code> i przegeneruj.</footer>
|
||||||
|
<script>
|
||||||
|
function collectAll() {
|
||||||
|
var lines = [];
|
||||||
|
document.querySelectorAll('section[data-section]').forEach(function (section) {
|
||||||
|
lines.push(section.dataset.section + ':');
|
||||||
|
section.querySelectorAll('.url').forEach(function (code) {
|
||||||
|
lines.push(code.textContent.trim());
|
||||||
|
});
|
||||||
|
lines.push('');
|
||||||
|
});
|
||||||
|
return lines.join('\n').trim() + '\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
function say(message) {
|
||||||
|
var status = document.querySelector('.copy-status');
|
||||||
|
status.textContent = message;
|
||||||
|
window.setTimeout(function () {
|
||||||
|
if (status.textContent === message) status.textContent = '';
|
||||||
|
}, 4000);
|
||||||
|
}
|
||||||
|
|
||||||
|
// navigator.clipboard istnieje tylko w bezpiecznym kontekście (https albo
|
||||||
|
// localhost) — po http z adresu IP trzeba starą drogą przez zaznaczenie.
|
||||||
|
function copyLegacy(text) {
|
||||||
|
var area = document.createElement('textarea');
|
||||||
|
area.value = text;
|
||||||
|
area.setAttribute('readonly', '');
|
||||||
|
area.style.position = 'fixed';
|
||||||
|
area.style.top = '-1000px';
|
||||||
|
document.body.appendChild(area);
|
||||||
|
area.select();
|
||||||
|
var copied = false;
|
||||||
|
try { copied = document.execCommand('copy'); } catch (error) { copied = false; }
|
||||||
|
document.body.removeChild(area);
|
||||||
|
return copied;
|
||||||
|
}
|
||||||
|
|
||||||
|
function copyText(text, what) {
|
||||||
|
var ok = function () { say('Skopiowane: ' + what); };
|
||||||
|
var no = function () { say('Nie udało się skopiować — zaznacz adres ręcznie.'); };
|
||||||
|
if (navigator.clipboard && window.isSecureContext) {
|
||||||
|
navigator.clipboard.writeText(text).then(ok, function () {
|
||||||
|
if (copyLegacy(text)) { ok(); } else { no(); }
|
||||||
|
});
|
||||||
|
} else if (copyLegacy(text)) { ok(); } else { no(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
document.getElementById('copy-all').addEventListener('click', function () {
|
||||||
|
copyText(collectAll(), 'cała lista');
|
||||||
|
});
|
||||||
|
document.getElementById('copy-start').addEventListener('click', function () {
|
||||||
|
copyText(this.dataset.url, 'link startowy');
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -64,7 +64,7 @@ body.wide { max-width: 72rem; }
|
||||||
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
||||||
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
||||||
@media (min-width: 34rem) {
|
@media (min-width: 34rem) {
|
||||||
.tiles { grid-template-columns: repeat(3, 1fr); }
|
.tiles { grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); }
|
||||||
.regions { grid-template-columns: repeat(2, 1fr); }
|
.regions { grid-template-columns: repeat(2, 1fr); }
|
||||||
}
|
}
|
||||||
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
||||||
|
|
@ -122,6 +122,24 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
||||||
border-radius: 4px; display: block; }
|
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 */
|
/* kafel regionu ze zdjęciem w tle */
|
||||||
.regions a.hero { background-size: cover; background-position: center;
|
.regions a.hero { background-size: cover; background-position: center;
|
||||||
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
||||||
|
|
@ -130,7 +148,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<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="../../viz.html">Graf</a></nav>
|
<nav><a href="../start.html">← Start</a> · <a href="../index.html">Wszystkie karty</a> · <a href="../porownanie.html">Porównanie ofert</a> · <a href="../linki.html">Linki</a> · <a href="../../viz.html">Graf</a></nav>
|
||||||
<span class="chip">oferta</span>
|
<span class="chip">oferta</span>
|
||||||
<h1>AlpenParks Rehrenberg Viehhofen — PLAN C</h1>
|
<h1>AlpenParks Rehrenberg Viehhofen — PLAN C</h1>
|
||||||
<p class="lead">Najtańszy nowy obiekt na liście — przestronne apartamenty z prywatnymi saunami w Viehhofen, wariant rezerwowy o mieszanych opiniach, PLAN C.</p>
|
<p class="lead">Najtańszy nowy obiekt na liście — przestronne apartamenty z prywatnymi saunami w Viehhofen, wariant rezerwowy o mieszanych opiniach, PLAN C.</p>
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ body.wide { max-width: 72rem; }
|
||||||
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
||||||
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
||||||
@media (min-width: 34rem) {
|
@media (min-width: 34rem) {
|
||||||
.tiles { grid-template-columns: repeat(3, 1fr); }
|
.tiles { grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); }
|
||||||
.regions { grid-template-columns: repeat(2, 1fr); }
|
.regions { grid-template-columns: repeat(2, 1fr); }
|
||||||
}
|
}
|
||||||
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
||||||
|
|
@ -122,6 +122,24 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
||||||
border-radius: 4px; display: block; }
|
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 */
|
/* kafel regionu ze zdjęciem w tle */
|
||||||
.regions a.hero { background-size: cover; background-position: center;
|
.regions a.hero { background-size: cover; background-position: center;
|
||||||
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
||||||
|
|
@ -130,7 +148,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<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="../../viz.html">Graf</a></nav>
|
<nav><a href="../start.html">← Start</a> · <a href="../index.html">Wszystkie karty</a> · <a href="../porownanie.html">Porównanie ofert</a> · <a href="../linki.html">Linki</a> · <a href="../../viz.html">Graf</a></nav>
|
||||||
<span class="chip">oferta</span>
|
<span class="chip">oferta</span>
|
||||||
<h1>AlpenParks Sonnleiten Saalbach</h1>
|
<h1>AlpenParks Sonnleiten Saalbach</h1>
|
||||||
<p class="lead">Duży aparthotel ~2 min pieszo od stoku w Saalbach, z basenem i sauną w cenie — największa szansa na 4 wolne apartamenty w jednym tygodniu.</p>
|
<p class="lead">Duży aparthotel ~2 min pieszo od stoku w Saalbach, z basenem i sauną w cenie — największa szansa na 4 wolne apartamenty w jednym tygodniu.</p>
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ body.wide { max-width: 72rem; }
|
||||||
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
||||||
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
||||||
@media (min-width: 34rem) {
|
@media (min-width: 34rem) {
|
||||||
.tiles { grid-template-columns: repeat(3, 1fr); }
|
.tiles { grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); }
|
||||||
.regions { grid-template-columns: repeat(2, 1fr); }
|
.regions { grid-template-columns: repeat(2, 1fr); }
|
||||||
}
|
}
|
||||||
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
||||||
|
|
@ -122,6 +122,24 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
||||||
border-radius: 4px; display: block; }
|
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 */
|
/* kafel regionu ze zdjęciem w tle */
|
||||||
.regions a.hero { background-size: cover; background-position: center;
|
.regions a.hero { background-size: cover; background-position: center;
|
||||||
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
||||||
|
|
@ -130,7 +148,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<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="../../viz.html">Graf</a></nav>
|
<nav><a href="../start.html">← Start</a> · <a href="../index.html">Wszystkie karty</a> · <a href="../porownanie.html">Porównanie ofert</a> · <a href="../linki.html">Linki</a> · <a href="../../viz.html">Graf</a></nav>
|
||||||
<span class="chip">oferta-koncept</span>
|
<span class="chip">oferta-koncept</span>
|
||||||
<h1>Dom dla całej grupy (12–14 os.) — koncept</h1>
|
<h1>Dom dla całej grupy (12–14 os.) — koncept</h1>
|
||||||
<p class="lead">Koncept wynajęcia jednego domu wakacyjnego dla całej grupy zamiast czterech osobnych apartamentów — klimat chaletowy w połowie ceny Glemm Lodge.</p>
|
<p class="lead">Koncept wynajęcia jednego domu wakacyjnego dla całej grupy zamiast czterech osobnych apartamentów — klimat chaletowy w połowie ceny Glemm Lodge.</p>
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ body.wide { max-width: 72rem; }
|
||||||
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
||||||
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
||||||
@media (min-width: 34rem) {
|
@media (min-width: 34rem) {
|
||||||
.tiles { grid-template-columns: repeat(3, 1fr); }
|
.tiles { grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); }
|
||||||
.regions { grid-template-columns: repeat(2, 1fr); }
|
.regions { grid-template-columns: repeat(2, 1fr); }
|
||||||
}
|
}
|
||||||
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
||||||
|
|
@ -122,6 +122,24 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
||||||
border-radius: 4px; display: block; }
|
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 */
|
/* kafel regionu ze zdjęciem w tle */
|
||||||
.regions a.hero { background-size: cover; background-position: center;
|
.regions a.hero { background-size: cover; background-position: center;
|
||||||
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
||||||
|
|
@ -130,7 +148,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<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="../../viz.html">Graf</a></nav>
|
<nav><a href="../start.html">← Start</a> · <a href="../index.html">Wszystkie karty</a> · <a href="../porownanie.html">Porównanie ofert</a> · <a href="../linki.html">Linki</a> · <a href="../../viz.html">Graf</a></nav>
|
||||||
<span class="chip">oferta</span>
|
<span class="chip">oferta</span>
|
||||||
<h1>Glemm Lodge Apartments — poza budżetem (dane referencyjne)</h1>
|
<h1>Glemm Lodge Apartments — poza budżetem (dane referencyjne)</h1>
|
||||||
<p class="lead">Jedyna oferta z w pełni zweryfikowanym cennikiem (~4 370 €/rodzinę) — odrzucona budżetowo, służy jako punkt odniesienia cenowego.</p>
|
<p class="lead">Jedyna oferta z w pełni zweryfikowanym cennikiem (~4 370 €/rodzinę) — odrzucona budżetowo, służy jako punkt odniesienia cenowego.</p>
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ body.wide { max-width: 72rem; }
|
||||||
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
||||||
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
||||||
@media (min-width: 34rem) {
|
@media (min-width: 34rem) {
|
||||||
.tiles { grid-template-columns: repeat(3, 1fr); }
|
.tiles { grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); }
|
||||||
.regions { grid-template-columns: repeat(2, 1fr); }
|
.regions { grid-template-columns: repeat(2, 1fr); }
|
||||||
}
|
}
|
||||||
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
||||||
|
|
@ -122,6 +122,24 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
||||||
border-radius: 4px; display: block; }
|
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 */
|
/* kafel regionu ze zdjęciem w tle */
|
||||||
.regions a.hero { background-size: cover; background-position: center;
|
.regions a.hero { background-size: cover; background-position: center;
|
||||||
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
||||||
|
|
@ -130,7 +148,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<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="../../viz.html">Graf</a></nav>
|
<nav><a href="../start.html">← Start</a> · <a href="../index.html">Wszystkie karty</a> · <a href="../porownanie.html">Porównanie ofert</a> · <a href="../linki.html">Linki</a> · <a href="../../viz.html">Graf</a></nav>
|
||||||
<span class="chip">oferta</span>
|
<span class="chip">oferta</span>
|
||||||
<h1>Appartementhaus Kristall at SchattbergXpress — PLAN A</h1>
|
<h1>Appartementhaus Kristall at SchattbergXpress — PLAN A</h1>
|
||||||
<p class="lead">Apartamenty 50 m od gondoli Schattberg X-press w centrum Saalbach — najlepsza lokalizacja w rozważanym budżecie, PLAN A.</p>
|
<p class="lead">Apartamenty 50 m od gondoli Schattberg X-press w centrum Saalbach — najlepsza lokalizacja w rozważanym budżecie, PLAN A.</p>
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ body.wide { max-width: 72rem; }
|
||||||
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
||||||
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
||||||
@media (min-width: 34rem) {
|
@media (min-width: 34rem) {
|
||||||
.tiles { grid-template-columns: repeat(3, 1fr); }
|
.tiles { grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); }
|
||||||
.regions { grid-template-columns: repeat(2, 1fr); }
|
.regions { grid-template-columns: repeat(2, 1fr); }
|
||||||
}
|
}
|
||||||
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
||||||
|
|
@ -122,6 +122,24 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
||||||
border-radius: 4px; display: block; }
|
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 */
|
/* kafel regionu ze zdjęciem w tle */
|
||||||
.regions a.hero { background-size: cover; background-position: center;
|
.regions a.hero { background-size: cover; background-position: center;
|
||||||
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
||||||
|
|
@ -130,7 +148,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<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="../../viz.html">Graf</a></nav>
|
<nav><a href="../start.html">← Start</a> · <a href="../index.html">Wszystkie karty</a> · <a href="../porownanie.html">Porównanie ofert</a> · <a href="../linki.html">Linki</a> · <a href="../../viz.html">Graf</a></nav>
|
||||||
<span class="chip">oferta</span>
|
<span class="chip">oferta</span>
|
||||||
<h1>Sportchalet Viehhofen — PLAN B (budżetowy faworyt)</h1>
|
<h1>Sportchalet Viehhofen — PLAN B (budżetowy faworyt)</h1>
|
||||||
<p class="lead">Kameralny obiekt holenderskich gospodarzy w Viehhofen z oceną 5.0 — najlepszy stosunek ceny do jakości, PLAN B.</p>
|
<p class="lead">Kameralny obiekt holenderskich gospodarzy w Viehhofen z oceną 5.0 — najlepszy stosunek ceny do jakości, PLAN B.</p>
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ body.wide { max-width: 72rem; }
|
||||||
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
||||||
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
||||||
@media (min-width: 34rem) {
|
@media (min-width: 34rem) {
|
||||||
.tiles { grid-template-columns: repeat(3, 1fr); }
|
.tiles { grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); }
|
||||||
.regions { grid-template-columns: repeat(2, 1fr); }
|
.regions { grid-template-columns: repeat(2, 1fr); }
|
||||||
}
|
}
|
||||||
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
||||||
|
|
@ -122,6 +122,24 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
||||||
border-radius: 4px; display: block; }
|
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 */
|
/* kafel regionu ze zdjęciem w tle */
|
||||||
.regions a.hero { background-size: cover; background-position: center;
|
.regions a.hero { background-size: cover; background-position: center;
|
||||||
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
||||||
|
|
@ -130,7 +148,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body class="wide">
|
<body class="wide">
|
||||||
<nav><a href="start.html">← Start</a> · <a href="index.html">Wszystkie karty</a> · <a href="porownanie.html">Porównanie ofert</a> · <a href="../viz.html">Graf</a></nav>
|
<nav><a href="start.html">← Start</a> · <a href="index.html">Wszystkie karty</a> · <a href="porownanie.html">Porównanie ofert</a> · <a href="linki.html">Linki</a> · <a href="../viz.html">Graf</a></nav>
|
||||||
<h1>Porównanie ofert</h1>
|
<h1>Porównanie ofert</h1>
|
||||||
<p class="lead">Wszystkie 12 rozważanych noclegów w jednej tabeli — dane prosto z frontmatterów kart. Kliknij nagłówek, żeby posortować; domyślnie od najtańszej rodziny 2+2.</p>
|
<p class="lead">Wszystkie 12 rozważanych noclegów w jednej tabeli — dane prosto z frontmatterów kart. Kliknij nagłówek, żeby posortować; domyślnie od najtańszej rodziny 2+2.</p>
|
||||||
<h2>Regiony w skrócie</h2>
|
<h2>Regiony w skrócie</h2>
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ body.wide { max-width: 72rem; }
|
||||||
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
||||||
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
||||||
@media (min-width: 34rem) {
|
@media (min-width: 34rem) {
|
||||||
.tiles { grid-template-columns: repeat(3, 1fr); }
|
.tiles { grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); }
|
||||||
.regions { grid-template-columns: repeat(2, 1fr); }
|
.regions { grid-template-columns: repeat(2, 1fr); }
|
||||||
}
|
}
|
||||||
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
||||||
|
|
@ -122,6 +122,24 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
||||||
border-radius: 4px; display: block; }
|
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 */
|
/* kafel regionu ze zdjęciem w tle */
|
||||||
.regions a.hero { background-size: cover; background-position: center;
|
.regions a.hero { background-size: cover; background-position: center;
|
||||||
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
||||||
|
|
@ -130,7 +148,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<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="../viz.html">Graf</a></nav>
|
<nav><a href="start.html">← Start</a> · <a href="index.html">Wszystkie karty</a> · <a href="porownanie.html">Porównanie ofert</a> · <a href="linki.html">Linki</a> · <a href="../viz.html">Graf</a></nav>
|
||||||
<span class="chip">region</span>
|
<span class="chip">region</span>
|
||||||
<h1>Skicircus Saalbach — informacje o regionie</h1>
|
<h1>Skicircus Saalbach — informacje o regionie</h1>
|
||||||
<p class="lead">Wszystko poza noclegiem: teren narciarski, skipassy ALPIN CARD, dojazd z Warszawy, analiza terminów, koszty życia i budżet całkowity grupy.</p>
|
<p class="lead">Wszystko poza noclegiem: teren narciarski, skipassy ALPIN CARD, dojazd z Warszawy, analiza terminów, koszty życia i budżet całkowity grupy.</p>
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ body.wide { max-width: 72rem; }
|
||||||
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
||||||
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
||||||
@media (min-width: 34rem) {
|
@media (min-width: 34rem) {
|
||||||
.tiles { grid-template-columns: repeat(3, 1fr); }
|
.tiles { grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); }
|
||||||
.regions { grid-template-columns: repeat(2, 1fr); }
|
.regions { grid-template-columns: repeat(2, 1fr); }
|
||||||
}
|
}
|
||||||
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
||||||
|
|
@ -122,6 +122,24 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
||||||
border-radius: 4px; display: block; }
|
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 */
|
/* kafel regionu ze zdjęciem w tle */
|
||||||
.regions a.hero { background-size: cover; background-position: center;
|
.regions a.hero { background-size: cover; background-position: center;
|
||||||
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
||||||
|
|
@ -130,7 +148,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<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="../../../viz.html">Graf</a></nav>
|
<nav><a href="../../start.html">← Start</a> · <a href="../../index.html">Wszystkie karty</a> · <a href="../../porownanie.html">Porównanie ofert</a> · <a href="../../linki.html">Linki</a> · <a href="../../../viz.html">Graf</a></nav>
|
||||||
<span class="chip">oferta</span>
|
<span class="chip">oferta</span>
|
||||||
<h1>Apart Ideal (Serfaus) — PLAN B</h1>
|
<h1>Apart Ideal (Serfaus) — PLAN B</h1>
|
||||||
<p class="lead">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>
|
<p class="lead">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>
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ body.wide { max-width: 72rem; }
|
||||||
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
||||||
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
||||||
@media (min-width: 34rem) {
|
@media (min-width: 34rem) {
|
||||||
.tiles { grid-template-columns: repeat(3, 1fr); }
|
.tiles { grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); }
|
||||||
.regions { grid-template-columns: repeat(2, 1fr); }
|
.regions { grid-template-columns: repeat(2, 1fr); }
|
||||||
}
|
}
|
||||||
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
||||||
|
|
@ -122,6 +122,24 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
||||||
border-radius: 4px; display: block; }
|
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 */
|
/* kafel regionu ze zdjęciem w tle */
|
||||||
.regions a.hero { background-size: cover; background-position: center;
|
.regions a.hero { background-size: cover; background-position: center;
|
||||||
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
||||||
|
|
@ -130,7 +148,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<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="../../../viz.html">Graf</a></nav>
|
<nav><a href="../../start.html">← Start</a> · <a href="../../index.html">Wszystkie karty</a> · <a href="../../porownanie.html">Porównanie ofert</a> · <a href="../../linki.html">Linki</a> · <a href="../../../viz.html">Graf</a></nav>
|
||||||
<span class="chip">oferta</span>
|
<span class="chip">oferta</span>
|
||||||
<h1>Haus Central / Apart Central (Ladis) — PLAN A</h1>
|
<h1>Haus Central / Apart Central (Ladis) — PLAN A</h1>
|
||||||
<p class="lead">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>
|
<p class="lead">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>
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ body.wide { max-width: 72rem; }
|
||||||
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
||||||
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
||||||
@media (min-width: 34rem) {
|
@media (min-width: 34rem) {
|
||||||
.tiles { grid-template-columns: repeat(3, 1fr); }
|
.tiles { grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); }
|
||||||
.regions { grid-template-columns: repeat(2, 1fr); }
|
.regions { grid-template-columns: repeat(2, 1fr); }
|
||||||
}
|
}
|
||||||
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
||||||
|
|
@ -122,6 +122,24 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
||||||
border-radius: 4px; display: block; }
|
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 */
|
/* kafel regionu ze zdjęciem w tle */
|
||||||
.regions a.hero { background-size: cover; background-position: center;
|
.regions a.hero { background-size: cover; background-position: center;
|
||||||
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
||||||
|
|
@ -130,7 +148,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<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="../../viz.html">Graf</a></nav>
|
<nav><a href="../start.html">← Start</a> · <a href="../index.html">Wszystkie karty</a> · <a href="../porownanie.html">Porównanie ofert</a> · <a href="../linki.html">Linki</a> · <a href="../../viz.html">Graf</a></nav>
|
||||||
<span class="chip">region</span>
|
<span class="chip">region</span>
|
||||||
<h1>Serfaus-Fiss-Ladis — informacje o regionie</h1>
|
<h1>Serfaus-Fiss-Ladis — informacje o regionie</h1>
|
||||||
<p class="lead">Wariant alternatywny i najtańszy budżetowo: 214 km na słonecznym płaskowyżu, infrastruktura skrojona pod rodziny, a termin 16–23.01 to u nich oficjalnie niski sezon.</p>
|
<p class="lead">Wariant alternatywny i najtańszy budżetowo: 214 km na słonecznym płaskowyżu, infrastruktura skrojona pod rodziny, a termin 16–23.01 to u nich oficjalnie niski sezon.</p>
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ body.wide { max-width: 72rem; }
|
||||||
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
||||||
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
||||||
@media (min-width: 34rem) {
|
@media (min-width: 34rem) {
|
||||||
.tiles { grid-template-columns: repeat(3, 1fr); }
|
.tiles { grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); }
|
||||||
.regions { grid-template-columns: repeat(2, 1fr); }
|
.regions { grid-template-columns: repeat(2, 1fr); }
|
||||||
}
|
}
|
||||||
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
||||||
|
|
@ -122,6 +122,24 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
||||||
border-radius: 4px; display: block; }
|
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 */
|
/* kafel regionu ze zdjęciem w tle */
|
||||||
.regions a.hero { background-size: cover; background-position: center;
|
.regions a.hero { background-size: cover; background-position: center;
|
||||||
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
||||||
|
|
@ -130,10 +148,10 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<nav><a href="/pages/index.html">Wszystkie karty</a> · <a href="/pages/porownanie.html">Porównanie ofert</a> · <a href="/viz.html">Graf</a></nav>
|
<nav><a href="/pages/index.html">Wszystkie karty</a> · <a href="/pages/porownanie.html">Porównanie ofert</a> · <a href="/pages/linki.html">Linki</a> · <a href="/viz.html">Graf</a></nav>
|
||||||
<h1>Ski 2027 — Skicircus Saalbach</h1>
|
<h1>Ski 2027 — Skicircus Saalbach</h1>
|
||||||
<p class="lead">16–23.01.2027, 4 rodziny / 14 osób, wyjazd z Warszawy. Od czego zacząć:</p>
|
<p class="lead">16–23.01.2027, 4 rodziny / 14 osób, wyjazd z Warszawy. Od czego zacząć:</p>
|
||||||
<ul class="tiles"><li><a href="/pages/porownanie.html">Porównanie ofert<small>Wszystkie noclegi w jednej sortowalnej tabeli: ceny, status ceny, priorytet, odległość od wyciągu.</small></a></li><li><a href="/pages/wyjazd.html">Analiza wariantów<small>Cztery regiony obok siebie: skipassy, dojazd, budżet całkowity grupy i wnioski przekrojowe.</small></a></li><li><a href="/viz.html">Graf powiązań<small>Struktura bazy wiedzy — koncepty, linki między nimi i adresy zewnętrzne. Załącznik, nie punkt wejścia.</small></a></li></ul>
|
<ul class="tiles"><li><a href="/pages/porownanie.html">Porównanie ofert<small>Wszystkie noclegi w jednej sortowalnej tabeli: ceny, status ceny, priorytet, odległość od wyciągu.</small></a></li><li><a href="/pages/wyjazd.html">Analiza wariantów<small>Cztery regiony obok siebie: skipassy, dojazd, budżet całkowity grupy i wnioski przekrojowe.</small></a></li><li><a href="/viz.html">Graf powiązań<small>Struktura bazy wiedzy — koncepty, linki między nimi i adresy zewnętrzne. Załącznik, nie punkt wejścia.</small></a></li><li><a href="/pages/linki.html">Linki do wysłania<small>Pełne adresy wszystkich stron wystawki, z przyciskiem „kopiuj” — do wrzucenia grupie.</small></a></li></ul>
|
||||||
<h2>Regiony</h2>
|
<h2>Regiony</h2>
|
||||||
<p class="lead">Karta regionu = skipassy, dojazd, terminy, koszty życia i budżet całkowity.</p>
|
<p class="lead">Karta regionu = skipassy, dojazd, terminy, koszty życia i budżet całkowity.</p>
|
||||||
<ul class="regions"><li><a href="/pages/region.html" class="hero" style="background-image:linear-gradient(rgba(15,23,42,.62),rgba(15,23,42,.72)),url('/pages/img/alpenparks-sonnleiten/01.jpg')">Saalbach (baza)<small>Budżet grupy: ~14 000–18 000 €</small></a></li><li><a href="/pages/ischgl/region.html" class="hero" style="background-image:linear-gradient(rgba(15,23,42,.62),rgba(15,23,42,.72)),url('/pages/img/apartment-brandau-kappl/01.jpg')">Ischgl/Paznaun<small>Budżet grupy: ~13 500–16 000 €</small></a></li><li><a href="/pages/kronplatz/region.html" class="hero" style="background-image:linear-gradient(rgba(15,23,42,.62),rgba(15,23,42,.72)),url('/pages/img/haeuslerhof-valdaora/01.jpg')">Kronplatz<small>Budżet grupy: ~13 200–16 300 €</small></a></li><li><a href="/pages/sfl/region.html" class="hero" style="background-image:linear-gradient(rgba(15,23,42,.62),rgba(15,23,42,.72)),url('/pages/img/haus-central-ladis/01.jpg')">SFL<small>Budżet grupy: ~12 800–15 700 €</small></a></li></ul>
|
<ul class="regions"><li><a href="/pages/region.html" class="hero" style="background-image:linear-gradient(rgba(15,23,42,.62),rgba(15,23,42,.72)),url('/pages/img/alpenparks-sonnleiten/01.jpg')">Saalbach (baza)<small>Budżet grupy: ~14 000–18 000 €</small></a></li><li><a href="/pages/ischgl/region.html" class="hero" style="background-image:linear-gradient(rgba(15,23,42,.62),rgba(15,23,42,.72)),url('/pages/img/apartment-brandau-kappl/01.jpg')">Ischgl/Paznaun<small>Budżet grupy: ~13 500–16 000 €</small></a></li><li><a href="/pages/kronplatz/region.html" class="hero" style="background-image:linear-gradient(rgba(15,23,42,.62),rgba(15,23,42,.72)),url('/pages/img/haeuslerhof-valdaora/01.jpg')">Kronplatz<small>Budżet grupy: ~13 200–16 300 €</small></a></li><li><a href="/pages/sfl/region.html" class="hero" style="background-image:linear-gradient(rgba(15,23,42,.62),rgba(15,23,42,.72)),url('/pages/img/haus-central-ladis/01.jpg')">SFL<small>Budżet grupy: ~12 800–15 700 €</small></a></li></ul>
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ body.wide { max-width: 72rem; }
|
||||||
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
||||||
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
||||||
@media (min-width: 34rem) {
|
@media (min-width: 34rem) {
|
||||||
.tiles { grid-template-columns: repeat(3, 1fr); }
|
.tiles { grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); }
|
||||||
.regions { grid-template-columns: repeat(2, 1fr); }
|
.regions { grid-template-columns: repeat(2, 1fr); }
|
||||||
}
|
}
|
||||||
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
||||||
|
|
@ -122,6 +122,24 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
||||||
border-radius: 4px; display: block; }
|
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 */
|
/* kafel regionu ze zdjęciem w tle */
|
||||||
.regions a.hero { background-size: cover; background-position: center;
|
.regions a.hero { background-size: cover; background-position: center;
|
||||||
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
||||||
|
|
@ -130,7 +148,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<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="../viz.html">Graf</a></nav>
|
<nav><a href="start.html">← Start</a> · <a href="index.html">Wszystkie karty</a> · <a href="porownanie.html">Porównanie ofert</a> · <a href="linki.html">Linki</a> · <a href="../viz.html">Graf</a></nav>
|
||||||
<span class="chip">narzedzie</span>
|
<span class="chip">narzedzie</span>
|
||||||
<h1>Szablon maila — zapytanie grupowe (EN)</h1>
|
<h1>Szablon maila — zapytanie grupowe (EN)</h1>
|
||||||
<p class="lead">Gotowy angielski mail z zapytaniem o 4 apartamenty dla 14 osób w terminie 16–23.01.2027 wraz z notatkami negocjacyjnymi.</p>
|
<p class="lead">Gotowy angielski mail z zapytaniem o 4 apartamenty dla 14 osób w terminie 16–23.01.2027 wraz z notatkami negocjacyjnymi.</p>
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ body.wide { max-width: 72rem; }
|
||||||
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
.tiles { margin: 1.25rem 0 2rem; display: grid; gap: .75rem; }
|
||||||
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
.regions { margin: .6rem 0 0; display: grid; gap: .5rem; }
|
||||||
@media (min-width: 34rem) {
|
@media (min-width: 34rem) {
|
||||||
.tiles { grid-template-columns: repeat(3, 1fr); }
|
.tiles { grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); }
|
||||||
.regions { grid-template-columns: repeat(2, 1fr); }
|
.regions { grid-template-columns: repeat(2, 1fr); }
|
||||||
}
|
}
|
||||||
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
.tiles a, .regions a { display: block; border: 1px solid var(--line); border-radius: 10px;
|
||||||
|
|
@ -122,6 +122,24 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
.gallery-thumbs img { width: 5.5rem; height: 3.6rem; object-fit: cover;
|
||||||
border-radius: 4px; display: block; }
|
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 */
|
/* kafel regionu ze zdjęciem w tle */
|
||||||
.regions a.hero { background-size: cover; background-position: center;
|
.regions a.hero { background-size: cover; background-position: center;
|
||||||
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
border-color: transparent; color: #f8fafc; min-height: 6.5rem;
|
||||||
|
|
@ -130,7 +148,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<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="../viz.html">Graf</a></nav>
|
<nav><a href="start.html">← Start</a> · <a href="index.html">Wszystkie karty</a> · <a href="porownanie.html">Porównanie ofert</a> · <a href="linki.html">Linki</a> · <a href="../viz.html">Graf</a></nav>
|
||||||
<span class="chip">Trip</span>
|
<span class="chip">Trip</span>
|
||||||
<h1>Ski 2027 — Skicircus Saalbach</h1>
|
<h1>Ski 2027 — Skicircus Saalbach</h1>
|
||||||
<p class="lead">Wyjazd narciarski 4 rodzin (14 osób) z Warszawy do Skicircus Saalbach w styczniu 2027, z celem budżetowym ~2 000 € za nocleg na rodzinę.</p>
|
<p class="lead">Wyjazd narciarski 4 rodzin (14 osób) z Warszawy do Skicircus Saalbach w styczniu 2027, z celem budżetowym ~2 000 € za nocleg na rodzinę.</p>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue