/* ═══ Bilety listy planów — pięć wzorów: Vintage / Niebo / Złoty / Poczta / Modernizm ═══
   Ładowany PO skin-atlas.css (wygrywa kolejnością). Wzór = klasa .tv-* na .ticket,
   wybierana przez ticketStyle(p) w app.js (PANEL „Bilety” albo „Losowo” = z ID planu).

   Zasady, które łatwo zepsuć:
   — Palety NIE zależą od motywu dzień/noc (jak belka). Z motywu bierze się tylko
     kolor wycięć perforacji (var(--bg)), żeby „dziurka” miała kolor strony.
   — Bez overflow:hidden na .ticket: obciąłby wycięcia perforacji, które wystają
     13 px poza kartę. Zaokrąglenia niosą skrajne dzieci siatki (dekor, belka, odcinek).
   — Promień z --tk-r, nie z globalnego --r (2 px, używa go każda .card w aplikacji).
   — Układ zależy od szerokości LISTY (container query), nie okna: .wrap ma 1000 px,
     więc „desktop” to ~950 px treści.
   — Kroje tylko lokalne (static/fonts/): Archivo ma wagi 400/600/800/900, Instrument
     Serif tylko 400 — inna waga = syntetyczny faux-bold. */

.tk-list{container-type:inline-size;}

/* ── Wspólna warstwa ── */
.ticket{--tk-r:14px;position:relative;display:grid;
  grid-template-columns:112px minmax(0,1fr) 200px 28px 176px;grid-template-rows:auto 1fr;
  grid-template-areas:"deco band band perf stub" "deco main visual perf stub";
  background-color:var(--tk-paper);color:var(--tk-ink);border:1px solid var(--tk-edge);border-radius:var(--tk-r);
  box-shadow:0 12px 28px -16px rgba(0,0,0,.45);transition:transform var(--tr);
  animation:tk-in .5s cubic-bezier(.22,1,.36,1) backwards;}
.ticket:hover{transform:translateY(-3px);}
.tk-ico{width:18px;height:18px;flex:none;fill:currentColor;}

.tk-deco{grid-area:deco;position:relative;overflow:hidden;display:flex;align-items:flex-end;padding:18px 14px 30px;
  background:var(--tk-deco);border-radius:calc(var(--tk-r) - 1px) 0 0 calc(var(--tk-r) - 1px);}
.tk-deco-art{position:absolute;inset:0;width:100%;height:100%;}
.tk-deco-tag{position:relative;display:flex;flex-direction:column;white-space:pre-line;
  font:600 10.5px/1.9 'Archivo',sans-serif;letter-spacing:.22em;text-transform:uppercase;color:var(--tk-deco-ink);}
.tk-deco-tag::after{content:'';width:26px;border-top:1.5px solid currentColor;margin-top:10px;}

.tk-band{grid-area:band;display:flex;align-items:center;gap:14px;min-width:0;height:44px;padding:0 20px;
  background:var(--tk-band);color:var(--tk-band-ink);}
.tk-brand,.tk-sbrand{display:flex;align-items:center;gap:8px;font-family:var(--tk-brand-ff);font-weight:var(--tk-brand-fw);
  letter-spacing:var(--tk-brand-ls);text-transform:var(--tk-brand-tt);line-height:1;white-space:nowrap;}
.tk-brand{font-size:var(--tk-brand-fs);}
.tk-brand .tk-ico{width:20px;height:20px;}
.tk-tag,.tk-kind{font:600 10px 'Archivo',sans-serif;letter-spacing:.2em;text-transform:uppercase;white-space:nowrap;opacity:.92;}
.tk-kind{margin-left:auto;display:flex;align-items:center;gap:8px;overflow:hidden;}
.tk-kind span{overflow:hidden;text-overflow:ellipsis;}

.tk-main{grid-area:main;min-width:0;display:flex;flex-direction:column;align-items:stretch;gap:12px;padding:18px 22px;
  background:none;border:none;text-align:left;font:inherit;color:inherit;cursor:pointer;}
.tk-main:focus-visible,.tk-mini a:focus-visible,.tk-mini button:focus-visible{outline:2px solid var(--tk-accent);outline-offset:2px;}
.tk-codes{display:flex;align-items:flex-end;gap:14px;min-width:0;}
.tk-pt{display:flex;flex-direction:column;gap:2px;min-width:0;}
.tk-lbl{font:600 10px 'Archivo',sans-serif;letter-spacing:.18em;text-transform:uppercase;color:var(--tk-dim);}
.tk-code{font-family:var(--tk-code-ff);font-size:var(--tk-code-fs);font-weight:var(--tk-code-fw);line-height:.92;letter-spacing:.03em;color:var(--tk-code-ink);}
.tk-city{max-width:210px;font:600 10.5px 'Archivo',sans-serif;letter-spacing:.16em;text-transform:uppercase;color:var(--tk-dim);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.tk-path{flex:1;min-width:40px;max-width:170px;display:flex;align-items:center;gap:6px;padding-bottom:22px;color:var(--tk-accent);}
.tk-path i{flex:1;border-top:1.5px var(--tk-path-style) currentColor;opacity:.75;}
.tk-path .tk-ico{width:24px;height:24px;}
.tk-title{font-family:var(--tk-title-ff);font-style:var(--tk-title-fst);font-weight:var(--tk-title-fw);font-size:1.2rem;line-height:1.2;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
/* Opis twardo 2 wiersze — długie streszczenie z LLM nie może rozpychać biletu. */
.tk-desc{margin-top:-6px;font-size:.84rem;line-height:1.45;color:var(--tk-dim);
  display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.tk-meta{display:flex;flex-wrap:wrap;row-gap:10px;}
.tk-meta>span{display:flex;flex-direction:column;gap:3px;padding:0 14px;border-left:1px solid var(--tk-line);}
.tk-meta>span:first-child{padding-left:0;border-left:0;}
.tk-meta b{font-family:var(--tk-val-ff);font-size:var(--tk-val-fs);font-weight:var(--tk-val-fw);letter-spacing:.03em;line-height:1.1;white-space:nowrap;}
.tk-badges{display:flex;gap:6px;flex-wrap:wrap;}
/* Plakietki: kolory z palety wzoru, nie z motywu (b-* są liczone pod tło strony).
   Specyficzność 0,3,0 bije `html.day-theme .b-muted` z index.html. */
.ticket .tk-badges .badge{font-family:'Archivo',sans-serif;font-weight:600;font-size:10px;letter-spacing:.14em;text-transform:uppercase;
  padding:4px 9px;border-radius:999px;background:none;border:1px solid var(--tk-line);color:var(--tk-ink);}
.ticket .tk-badges .badge.b-trip{background:var(--tk-accent);border-color:transparent;color:var(--tk-on-accent);}
.ticket .tk-badges .badge.b-warn{border-color:currentColor;color:var(--tk-warn);}

.tk-visual{grid-area:visual;position:relative;min-height:190px;cursor:pointer;}
.tk-frame{position:absolute;inset:0;overflow:hidden;background:var(--tk-photo-bg);}
.tk-photo{position:absolute;inset:0;background-size:cover;background-position:center;pointer-events:none;}
.tk-shade{position:absolute;inset:0;pointer-events:none;}
.tk-cap{position:absolute;z-index:1;pointer-events:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.tk-stamp{display:none;}

.tk-perf{grid-area:perf;position:relative;}
.tk-perf::before{content:'';position:absolute;left:50%;top:20px;bottom:20px;margin-left:-1px;border-left:2px dashed var(--tk-line);}
.tk-perf .cut{position:absolute;left:50%;width:26px;height:26px;margin-left:-13px;border-radius:50%;background:var(--bg);}
.tk-perf .cut.a{top:-14px;}
.tk-perf .cut.b{bottom:-14px;}

.tk-stub{grid-area:stub;min-width:0;display:flex;flex-direction:column;gap:10px;padding:16px 16px 10px;
  background:var(--tk-stub);border-radius:0 calc(var(--tk-r) - 1px) calc(var(--tk-r) - 1px) 0;}
.tk-sbrand{font-size:calc(var(--tk-brand-fs) * .8);letter-spacing:calc(var(--tk-brand-ls) * .6);color:var(--tk-sbrand-ink);overflow:hidden;}
.tk-sbrand .tk-ico{width:17px;height:17px;}
.tk-scodes{display:flex;align-items:center;gap:8px;font-family:var(--tk-code-ff);font-weight:var(--tk-code-fw);
  font-size:calc(var(--tk-code-fs) * .45);line-height:1;color:var(--tk-code-ink);}
.tk-scodes .tk-ico{color:var(--tk-accent);}
.tk-srows{display:grid;grid-template-columns:auto 1fr;gap:6px 10px;align-items:baseline;margin:0;}
.tk-srows dt{font:600 9.5px 'Archivo',sans-serif;letter-spacing:.16em;text-transform:uppercase;color:var(--tk-dim);}
.tk-srows dd{margin:0;font:600 12px/1.3 'Archivo',sans-serif;}
.tk-bar{margin-top:auto;height:34px;background:repeating-linear-gradient(90deg,var(--tk-bar) 0 2px,transparent 2px 4px,var(--tk-bar) 4px 5px,
  transparent 5px 8px,var(--tk-bar) 8px 11px,transparent 11px 13px,var(--tk-bar) 13px 14px,transparent 14px 17px);}
.tk-qr{margin-top:auto;display:flex;align-items:center;gap:12px;}
.tk-qr svg{width:64px;height:64px;flex:none;display:block;}
.tk-qr span{white-space:pre-line;font:600 9.5px/1.6 'Archivo',sans-serif;letter-spacing:.18em;text-transform:uppercase;}
.tk-mini{display:flex;flex-wrap:wrap;gap:0 14px;padding-top:4px;border-top:1px solid var(--tk-line);}
.tk-mini a,.tk-mini button{padding:8px 0;background:none;border:none;cursor:pointer;text-decoration:none;
  font:600 10px 'Archivo',sans-serif;letter-spacing:.14em;text-transform:uppercase;color:var(--tk-dim);transition:color var(--tr);}
.tk-mini a:hover,.tk-mini button:hover{color:var(--tk-ink);}
.tk-mini .tk-del:hover{color:var(--tk-warn);}

/* ── Wzór 1: Vintage — kremowy papier, sepia, turkusowa belka, odbitka z pieczątką ──
   Kontrasty: #6a5436 na #f1e6cb 5,7:1 · krem na turkusie #2c6a6e 5,2:1 · #1d2a36 na sepii ≥ 5,5:1. */
.tv-vintage{--tk-paper:#f1e6cb;--tk-stub:#ebdcba;--tk-deco:linear-gradient(165deg,#e6cb99,#c98f55 90%);--tk-deco-ink:#1d2a36;
  --tk-ink:#1d2a36;--tk-dim:#6a5436;--tk-line:rgba(106,84,54,.4);--tk-accent:#2c6a6e;--tk-on-accent:#f6ecd2;--tk-warn:#9c3b1c;
  --tk-band:#2c6a6e;--tk-band-ink:#f6ecd2;--tk-edge:#d6c294;--tk-sbrand-ink:#2c6a6e;--tk-photo-bg:#e3d7bb;
  --tk-brand-ff:'Bebas Neue',sans-serif;--tk-brand-fs:27px;--tk-brand-fw:400;--tk-brand-ls:.07em;--tk-brand-tt:uppercase;
  --tk-code-ff:'Bebas Neue',sans-serif;--tk-code-fs:58px;--tk-code-fw:400;--tk-code-ink:#1d2a36;--tk-path-style:dashed;
  --tk-title-ff:'Instrument Serif',serif;--tk-title-fst:italic;--tk-title-fw:400;
  --tk-val-ff:'Bebas Neue',sans-serif;--tk-val-fs:21px;--tk-val-fw:400;--tk-bar:#1d2a36;
  background-image:radial-gradient(ellipse at 30% 20%,rgba(255,255,255,.35),transparent 60%),radial-gradient(ellipse at 80% 90%,rgba(160,120,60,.14),transparent 55%);}
.tv-vintage .tk-deco{align-items:flex-start;padding-top:28px;}
.tv-vintage .tk-deco-tag{font:400 19px/1.05 'Bebas Neue',sans-serif;letter-spacing:.08em;}
.tv-vintage .tk-deco-tag::after{display:none;}
.tv-vintage .tk-deco-tag::before{content:'';width:40px;border-top:1.5px solid currentColor;margin-bottom:8px;}
.tv-vintage .tk-frame{inset:14px 18px 18px 6px;padding:7px 7px 38px;background:#fbf6ea;overflow:visible;
  transform:rotate(-1.8deg);box-shadow:0 8px 16px -8px rgba(60,40,10,.55);}
.tv-vintage .tk-photo{inset:7px 7px 38px;background-color:var(--tk-photo-bg);filter:sepia(.28) saturate(.95);}
.tv-vintage .tk-cap{left:10px;right:44px;bottom:6px;font:italic 400 26px/1 'Instrument Serif',serif;color:#1d2a36;}
.tv-vintage .tk-stamp{display:block;position:absolute;z-index:2;right:-2px;bottom:-4px;width:66px;height:66px;
  color:#2c6a6e;fill:currentColor;opacity:.8;pointer-events:none;}

/* ── Wzór 2: Niebo — biel i granat, poziomice, zdjęcie ścięte po skosie, kod QR ──
   Kontrasty: #56627a na bieli 6,1:1 · biel na #13315c 12:1. */
.tv-sky{--tk-paper:#ffffff;--tk-stub:#f5f7fb;--tk-deco:#eef2f7;--tk-deco-ink:#13315c;
  --tk-ink:#13315c;--tk-dim:#56627a;--tk-line:#d3dbe7;--tk-accent:#13315c;--tk-on-accent:#ffffff;--tk-warn:#a8321f;
  --tk-band:#13315c;--tk-band-ink:#ffffff;--tk-edge:#cfd8e6;--tk-sbrand-ink:#13315c;--tk-photo-bg:#dfe7f2;
  --tk-brand-ff:'Archivo',sans-serif;--tk-brand-fs:18px;--tk-brand-fw:600;--tk-brand-ls:.24em;--tk-brand-tt:uppercase;
  --tk-code-ff:'Archivo',sans-serif;--tk-code-fs:48px;--tk-code-fw:800;--tk-code-ink:#13315c;--tk-path-style:solid;
  --tk-title-ff:'Archivo',sans-serif;--tk-title-fst:normal;--tk-title-fw:600;
  --tk-val-ff:'Archivo',sans-serif;--tk-val-fs:15px;--tk-val-fw:600;--tk-bar:#13315c;}
html.day-theme .tv-sky{box-shadow:0 14px 30px -18px rgba(19,49,92,.5);}
.tv-sky .tk-frame{background:none;clip-path:polygon(22% 0,100% 0,100% 100%,4% 100%);}
.tv-sky .tk-visual::before{content:'';position:absolute;inset:0;background:#dfe7f2;clip-path:polygon(10% 0,22% 0,4% 100%,0 100%,0 70%);}
.tv-sky .tk-photo{background-color:var(--tk-photo-bg);}
.tv-sky .tk-shade{background:linear-gradient(0deg,rgba(10,22,44,.62),transparent 48%);}
.tv-sky .tk-cap{left:30px;right:12px;bottom:14px;color:#fff;font:600 12px/1.3 'Archivo',sans-serif;letter-spacing:.3em;text-transform:uppercase;}
.tv-sky .tk-qr span{color:var(--tk-ink);}

/* ── Wzór 3: Złoty — granat i złoto, szeryf, złote fale ──
   Kontrasty: złoto #d4b26a na #10213b 7,8:1 · #a9b3c4 7,6:1. Złoty obrys trzyma krawędź
   karty na nocnym, prawie czarnym tle. */
.tv-gold{--tk-paper:#10213b;--tk-stub:#0c1a30;--tk-deco:#0c1a30;--tk-deco-ink:#d4b26a;
  --tk-ink:#f3ead7;--tk-dim:#a9b3c4;--tk-line:rgba(212,178,106,.38);--tk-accent:#d4b26a;--tk-on-accent:#10213b;--tk-warn:#f0a37a;
  --tk-band:transparent;--tk-band-ink:#d4b26a;--tk-edge:rgba(212,178,106,.5);--tk-sbrand-ink:#d4b26a;--tk-photo-bg:#1b2d4a;
  --tk-brand-ff:'Instrument Serif',serif;--tk-brand-fs:26px;--tk-brand-fw:400;--tk-brand-ls:.08em;--tk-brand-tt:uppercase;
  --tk-code-ff:'Instrument Serif',serif;--tk-code-fs:56px;--tk-code-fw:400;--tk-code-ink:#d4b26a;--tk-path-style:solid;
  --tk-title-ff:'Instrument Serif',serif;--tk-title-fst:normal;--tk-title-fw:400;
  --tk-val-ff:'Archivo',sans-serif;--tk-val-fs:15px;--tk-val-fw:600;--tk-bar:#d4b26a;
  background-image:linear-gradient(160deg,#132848,#0e1d35 70%);}
.tv-gold .tk-band{border-bottom:1px solid rgba(212,178,106,.45);}
.tv-gold .tk-deco{border-right:1px solid rgba(212,178,106,.25);}
.tv-gold .tk-shade{background:linear-gradient(0deg,rgba(8,16,30,.78),transparent 55%);}
.tv-gold .tk-cap{left:16px;right:12px;bottom:14px;color:#f3ead7;font:400 23px/1 'Instrument Serif',serif;letter-spacing:.14em;text-transform:uppercase;}
.tv-gold .tk-qr span{color:var(--tk-ink);}

/* ── Wzory 4 i 5 (Poczta, Modernizm; od 2026-10-02): gruba ciemna ramka ──
   Wycięcia perforacji mają pierścień w kolorze ramki. Środek koła leży na ZEWNĘTRZNEJ krawędzi
   karty (top = −(promień + ramka)), a clip-path zostawia tylko połówkę w środku karty — bez
   tego pierścień wystawałby łukiem poza bilet. Trasa i odcinek: strzałka tk-arrow zamiast
   samolotu (ticketIcon w app.js). Odcinek: siatka „etykieta nad wartością”, Dni | Zł/dz. obok siebie. */
.tv-post,.tv-swiss{--tk-bw:5px;border-width:var(--tk-bw);}
.tv-post .tk-perf .cut,.tv-swiss .tk-perf .cut{box-sizing:border-box;width:var(--tk-cut);height:var(--tk-cut);
  margin-left:calc(var(--tk-cut) / -2);border:var(--tk-bw) solid var(--tk-edge);}
.tv-post .tk-perf .cut.a,.tv-swiss .tk-perf .cut.a{top:calc(var(--tk-cut) / -2 - var(--tk-bw));clip-path:inset(50% 0 0 0);}
.tv-post .tk-perf .cut.b,.tv-swiss .tk-perf .cut.b{bottom:calc(var(--tk-cut) / -2 - var(--tk-bw));clip-path:inset(0 0 50% 0);}
.tv-post .tk-deco-tag,.tv-swiss .tk-deco-tag,.tv-post .tk-sbrand .tk-ico,.tv-swiss .tk-sbrand .tk-ico,
.tv-post .tk-shade,.tv-swiss .tk-shade{display:none;}
.tv-post .tk-path,.tv-swiss .tk-path{flex:none;min-width:0;padding:0 2px 22px;}
.tv-post .tk-path i,.tv-swiss .tk-path i{display:none;}
.tv-post .tk-path .tk-ico,.tv-swiss .tk-path .tk-ico{width:50px;height:25px;}
.tv-post .tk-scodes .tk-ico,.tv-swiss .tk-scodes .tk-ico{width:30px;}
.tv-post .tk-title,.tv-swiss .tk-title{font-size:1.05rem;}
.tv-post .tk-srows,.tv-swiss .tk-srows{grid-template-columns:1fr 1fr;gap:0;align-items:start;}
.tv-post .tk-srows dt:nth-of-type(1),.tv-swiss .tk-srows dt:nth-of-type(1){grid-area:1 / 1 / 2 / 3;}
.tv-post .tk-srows dd:nth-of-type(1),.tv-swiss .tk-srows dd:nth-of-type(1){grid-area:2 / 1 / 3 / 3;}
.tv-post .tk-srows dt:nth-of-type(2),.tv-swiss .tk-srows dt:nth-of-type(2){grid-area:3 / 1;}
.tv-post .tk-srows dd:nth-of-type(2),.tv-swiss .tk-srows dd:nth-of-type(2){grid-area:4 / 1;}
.tv-post .tk-srows dt:nth-of-type(3),.tv-swiss .tk-srows dt:nth-of-type(3){grid-area:3 / 2;}
.tv-post .tk-srows dd:nth-of-type(3),.tv-swiss .tk-srows dd:nth-of-type(3){grid-area:4 / 2;}
.tv-post .tk-srows :is(dt,dd):nth-of-type(3),.tv-swiss .tk-srows :is(dt,dd):nth-of-type(3){padding-left:14px;border-left:1.5px solid var(--tk-line);}
.tv-post .tk-mini,.tv-swiss .tk-mini{justify-content:space-between;}
.tv-post .tk-mini a,.tv-swiss .tk-mini a{text-decoration:underline;text-underline-offset:3px;}
.tv-post .tk-mini a,.tv-post .tk-mini button,.tv-swiss .tk-mini a,.tv-swiss .tk-mini button{color:var(--tk-ink);}

/* ── Wzór 4: Poczta — list lotniczy: złamana biel, granatowy tusz, paski czerwono-niebieskie,
   mapa w ząbkowanym znaczku ze stemplem. Krój: Space Mono 400/700.
   Kontrasty: #1d2230 na #f0efed 14,6:1 · #4a5060 7,1:1. Paski i stemple to grafika, nie tekst. */
.tv-post{--tk-r:10px;--tk-cut:26px;
  --tk-paper:#f0efed;--tk-stub:#f0efed;--tk-deco:#f0efed;--tk-deco-ink:#1d2230;
  --tk-ink:#1d2230;--tk-dim:#4a5060;--tk-line:#1d2230;--tk-accent:#1d2230;--tk-on-accent:#f0efed;--tk-warn:#b3262d;
  --tk-band:transparent;--tk-band-ink:#1d2230;--tk-edge:#1c222f;--tk-sbrand-ink:#1d2230;--tk-photo-bg:#e1e2e4;
  --tk-brand-ff:'Space Mono',monospace;--tk-brand-fs:26px;--tk-brand-fw:400;--tk-brand-ls:0;--tk-brand-tt:uppercase;
  --tk-code-ff:'Space Mono',monospace;--tk-code-fs:36px;--tk-code-fw:700;--tk-code-ink:#1d2230;--tk-path-style:solid;
  --tk-title-ff:'Space Mono',monospace;--tk-title-fst:normal;--tk-title-fw:700;
  --tk-val-ff:'Space Mono',monospace;--tk-val-fs:16px;--tk-val-fw:700;--tk-bar:#1d2230;
  --tk-stamp-paper:#f6f2e8;
  --tk-air:repeating-linear-gradient(135deg,#e23c3e 0 10px,transparent 10px 17px,#4f70ac 17px 27px,transparent 27px 34px);
  grid-template-columns:79px minmax(0,1fr) 266px 28px 176px;
  grid-template-areas:"deco band visual perf stub" "deco main visual perf stub";}
.tv-post .tk-deco{padding:0;}
.tv-post .tk-deco::before{content:'';position:absolute;top:0;bottom:0;right:6px;width:1.5px;background:var(--tk-ink);}
.tv-post .tk-deco::after{content:'';position:absolute;top:0;bottom:0;right:0;width:6px;background:var(--tk-air);}
/* Ramka dekoru = obrys samego <svg> (wymiary jawne: wymiar auto u pozycjonowanego SVG to 300×150). */
.tv-post .tk-deco-art{top:8px;left:8px;width:calc(100% - 24px);height:calc(100% - 16px);border:1.5px solid var(--tk-ink);}
.tv-post .tk-band{flex-direction:column;align-items:flex-start;justify-content:flex-end;gap:5px;height:auto;padding:14px 18px 0;}
.tv-post .tk-brand{flex-direction:row-reverse;gap:12px;}
.tv-post .tk-brand .tk-ico{width:26px;height:26px;}
.tv-post .tk-tag{font:400 13.5px/1.3 'Space Mono',monospace;letter-spacing:0;text-transform:none;white-space:normal;opacity:1;}
.tv-post .tk-kind{display:none;}
.tv-post .tk-main{position:relative;gap:7px;padding:10px 18px 12px;}
.tv-post .tk-lbl{font:400 11px 'Space Mono',monospace;letter-spacing:.02em;color:var(--tk-ink);}
.tv-post .tk-city{font:400 15px/1.1 'Space Mono',monospace;letter-spacing:0;text-transform:none;color:var(--tk-ink);}
/* Prawy margines opisu = miejsce na plakietkę-pieczątkę, która zachodzi na znaczek. */
.tv-post .tk-desc{margin-top:0;padding-right:58px;font:400 13px/1.4 'Space Mono',monospace;color:var(--tk-ink);}
.tv-post .tk-meta>span{border-left-width:1.5px;}
.tv-post .tk-badges{position:absolute;z-index:3;right:-58px;bottom:58px;flex-direction:column;align-items:flex-end;gap:3px;}
.ticket.tv-post .tk-badges .badge{max-width:108px;padding:3px 7px;border:2px solid currentColor;border-radius:3px;outline:1px solid currentColor;outline-offset:2px;
  background:var(--tk-paper);color:var(--tk-ink);font:700 11px/1.15 'Space Mono',monospace;letter-spacing:.02em;text-align:center;transform:rotate(-8deg);}
.ticket.tv-post .tk-badges .badge.b-trip{background:var(--tk-ink);color:var(--tk-paper);outline-color:var(--tk-ink);}
.ticket.tv-post .tk-badges .badge.b-warn{color:var(--tk-warn);}
/* Znaczek: ząbki to koła w kolorze PAPIERU BILETU z obwódką, wycentrowane na krawędzi ramki —
   tło maluje się tylko w obrębie elementu, więc z każdego koła zostaje wgryziona połówka. */
.tv-post .tk-visual{min-height:200px;}
.tv-post .tk-visual::before,.tv-post .tk-visual::after{content:'';position:absolute;left:0;right:14px;height:6px;background:var(--tk-air);}
.tv-post .tk-visual::before{top:0;}
.tv-post .tk-visual::after{bottom:0;}
.tv-post .tk-frame{inset:24px 11px 20px 0;
  --hole:var(--tk-paper) 0 4.5px,var(--tk-ink) 4.5px 6.2px,transparent 6.7px;
  background-color:var(--tk-stamp-paper);
  background-image:radial-gradient(circle at 50% 0,var(--hole)),radial-gradient(circle at 50% 100%,var(--hole)),
    radial-gradient(circle at 0 50%,var(--hole)),radial-gradient(circle at 100% 50%,var(--hole)),
    linear-gradient(var(--tk-ink),var(--tk-ink)),linear-gradient(var(--tk-ink),var(--tk-ink)),
    linear-gradient(var(--tk-ink),var(--tk-ink)),linear-gradient(var(--tk-ink),var(--tk-ink));
  background-position:0 0,0 100%,0 0,100% 0,0 0,0 100%,0 0,100% 0;
  background-size:13px 13px,13px 13px,13px 13px,13px 13px,100% 1.7px,100% 1.7px,1.7px 100%,1.7px 100%;
  background-repeat:round no-repeat,round no-repeat,no-repeat round,no-repeat round,no-repeat,no-repeat,no-repeat,no-repeat;}
.tv-post .tk-frame::after{content:'';position:absolute;inset:9px;border:2px solid var(--tk-ink);pointer-events:none;}
.tv-post .tk-photo{inset:11px 11px 43px;background-color:var(--tk-photo-bg);}
.tv-post .tk-cap{left:11px;right:11px;bottom:11px;height:32px;padding:0 8px;border-top:2px solid var(--tk-ink);
  font:400 15px/30px 'Space Mono',monospace;text-align:center;color:var(--tk-ink);}
.tk-postmark{display:none;}
.tv-post .tk-postmark{display:block;position:absolute;z-index:2;left:-99px;top:-2px;width:140px;height:100px;
  color:var(--tk-ink);opacity:.72;transform:rotate(-12deg);pointer-events:none;}
.tk-pm-date{font:700 9px 'Space Mono',monospace;letter-spacing:.4px;fill:currentColor;}
.tv-post .tk-perf::before{border-left:0;width:6px;margin-left:-3px;top:22px;bottom:22px;
  background:radial-gradient(circle,var(--tk-ink) 2.3px,transparent 2.9px) 50% 0 / 6px 17px repeat-y;}
/* Odcinek: niepełny stempel przy prawej krawędzi (grafika tła, bez tekstu — obraz SVG nie widzi krojów strony). */
.tv-post .tk-stub{gap:8px;padding:14px 16px 6px 14px;
  background:var(--tk-stub) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cg fill='none' stroke='%231d2230' stroke-opacity='.3'%3E%3Ccircle cx='50' cy='50' r='46' stroke-width='2.4'/%3E%3Ccircle cx='50' cy='50' r='38' stroke-width='1.2'/%3E%3C/g%3E%3C/svg%3E") no-repeat right -50px top 46% / 104px 104px;}
.tv-post .tk-sbrand{font-size:19px;letter-spacing:0;}
.tv-post .tk-scodes{font-size:22px;}
.tv-post .tk-srows dt{font:400 11px 'Space Mono',monospace;letter-spacing:.02em;color:var(--tk-ink);}
.tv-post .tk-srows dd{margin-bottom:3px;font:700 15px/1.3 'Space Mono',monospace;}
.tv-post .tk-qr svg{width:36px;height:36px;}
.tv-post .tk-qr span{display:none;}
.tv-post .tk-mini{border-top:0;}
.tv-post .tk-mini a,.tv-post .tk-mini button{padding:5px 0;font:400 11px 'Space Mono',monospace;letter-spacing:.02em;}

/* ── Wzór 5: Modernizm — szwajcarska typografia: biel, czerń, czerwień, treść w tabeli linii ──
   Krój: Hanken Grotesk 400/600/700. Kontrasty: #15181d na bieli 18:1 · czerwień #cb342c
   tylko na grafice i strzałkach (5:1).
   Układ: belka idzie przez dekor, mapa zachodzi na belkę i wiersz kodów, a opis i dane biegną
   POD mapą do prawej. Treść obejmuje kolumny main+visual, mapa leży nad nią (z-index, własne
   białe tło zakrywa górną linię treści). Pozycje przez NAZWANE linie (main-start / visual-end,
   band-start / main-end), bo numery kolumn zmieniają się w zapytaniach @container. */
.tv-swiss{--tk-r:15px;--tk-bw:7px;--tk-cut:36px;--tk-vis:213px;--tk-rule:1.5px solid var(--tk-ink);
  --tk-paper:#ffffff;--tk-stub:#ffffff;--tk-deco:transparent;--tk-deco-ink:#15181d;
  --tk-ink:#15181d;--tk-dim:#4b5058;--tk-line:#15181d;--tk-accent:#cb342c;--tk-on-accent:#ffffff;--tk-warn:#a8261f;
  --tk-band:transparent;--tk-band-ink:#15181d;--tk-edge:#171a26;--tk-sbrand-ink:#15181d;--tk-photo-bg:#ecebe6;
  --tk-brand-ff:'Hanken Grotesk',sans-serif;--tk-brand-fs:24px;--tk-brand-fw:700;--tk-brand-ls:0;--tk-brand-tt:uppercase;
  --tk-code-ff:'Hanken Grotesk',sans-serif;--tk-code-fs:42px;--tk-code-fw:700;--tk-code-ink:#15181d;--tk-path-style:solid;
  --tk-title-ff:'Hanken Grotesk',sans-serif;--tk-title-fst:normal;--tk-title-fw:600;
  --tk-val-ff:'Hanken Grotesk',sans-serif;--tk-val-fs:18px;--tk-val-fw:600;--tk-bar:#15181d;
  grid-template-columns:115px minmax(0,1fr) var(--tk-vis) 28px 185px;
  grid-template-areas:"band band band perf stub" "deco main visual perf stub";}
.tv-swiss .tk-band{display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-areas:"brand kind" "brand tag";
  column-gap:26px;row-gap:1px;align-content:center;height:69px;padding:0 calc(var(--tk-vis) + 16px) 0 17px;}
.tv-swiss .tk-brand{grid-area:brand;gap:17px;}
.tv-swiss .tk-brand .tk-ico{box-sizing:content-box;width:29px;height:29px;padding:8px;background:var(--tk-accent);color:var(--tk-ink);}
.tv-swiss .tk-kind{grid-area:kind;align-self:end;margin:0;font:700 20px/1.15 'Hanken Grotesk',sans-serif;letter-spacing:0;text-transform:none;opacity:1;}
.tv-swiss .tk-kind .tk-ico{display:none;}
.tv-swiss .tk-tag{grid-area:tag;align-self:start;overflow:hidden;text-overflow:ellipsis;
  font:400 15px/1.3 'Hanken Grotesk',sans-serif;letter-spacing:0;text-transform:none;opacity:1;}
.tv-swiss .tk-deco{padding:0;}
.tv-swiss .tk-deco-art{left:18px;width:calc(100% - 30px);}
/* Ostatni wiersz (dane + plakietka) rośnie do dołu karty — przegródki sięgają ramki. Linie
   wierszy niesie opis (góra i dół), bo plakietki bywa brak, a pusta komórka nie ma krawędzi. */
.tv-swiss .tk-main{grid-column:main-start / visual-end;grid-row:main;flex-direction:row;flex-wrap:wrap;align-content:flex-start;gap:0;padding:0 11px 0 0;
  border-left:var(--tk-rule);border-top:var(--tk-rule);}
.tv-swiss .tk-codes{flex:none;width:calc(100% - var(--tk-vis) + 11px);gap:20px;min-height:84px;padding:8px 12px 4px 26px;}
.tv-swiss .tk-lbl{font:400 12px/1.1 'Hanken Grotesk',sans-serif;letter-spacing:.02em;color:var(--tk-ink);}
.tv-swiss .tk-city{font:400 17px 'Hanken Grotesk',sans-serif;letter-spacing:0;text-transform:none;color:var(--tk-ink);}
.tv-swiss .tk-path .tk-ico{width:46px;height:23px;}
.tv-swiss .tk-title{flex:0 0 100%;padding:0 26px 8px;}
.tv-swiss .tk-desc{flex:0 0 100%;margin:0;padding:4px 26px;border-top:var(--tk-rule);border-bottom:var(--tk-rule);
  font-size:15.5px;line-height:1.4;color:var(--tk-ink);}
.tv-swiss .tk-meta{flex:1 1 auto;flex-wrap:nowrap;padding-left:26px;}
.tv-swiss .tk-meta>span{justify-content:center;padding:4px 26px;border-left:var(--tk-rule);}
.tv-swiss .tk-meta>span:first-child{padding-left:0;border-left:0;}
.tv-swiss .tk-badges{flex:0 1 auto;margin-left:auto;align-items:center;justify-content:flex-end;padding:6px 0 6px 12px;}
.ticket.tv-swiss .tk-badges .badge{padding:6px 10px;border:0;border-radius:8px;background:#e4e4e4;color:var(--tk-ink);
  font:700 11.5px 'Hanken Grotesk',sans-serif;letter-spacing:.03em;}
.ticket.tv-swiss .tk-badges .badge.b-trip{background:var(--tk-ink);color:#fff;}
.ticket.tv-swiss .tk-badges .badge.b-warn{background:none;border:1.5px solid currentColor;color:var(--tk-warn);}
.tv-swiss .tk-visual{grid-column:visual;grid-row:band-start / main-end;align-self:start;z-index:1;height:148px;min-height:0;background:var(--tk-paper);}
.tv-swiss .tk-frame{inset:17px 11px 8px 0;overflow:visible;background:#fff;border:1px solid #d4d4d4;box-shadow:0 8px 14px -8px rgba(0,0,0,.4);}
.tv-swiss .tk-photo{inset:7px 7px 25px;background-color:var(--tk-photo-bg);}
.tv-swiss .tk-cap{left:8px;right:8px;bottom:5px;text-align:center;font:400 12px 'Hanken Grotesk',sans-serif;color:var(--tk-ink);}
.tv-swiss .tk-perf::before{border-left:0;width:1.5px;margin-left:-.75px;top:24px;bottom:24px;
  background:linear-gradient(var(--tk-ink) 55%,transparent 0) 0 0 / 1.5px 9px repeat-y;}
.tv-swiss .tk-stub{gap:0;padding:14px 18px 4px;}
.tv-swiss .tk-sbrand{padding-bottom:7px;border-bottom:var(--tk-rule);font-size:21px;letter-spacing:0;}
.tv-swiss .tk-scodes{gap:10px;padding:7px 0;border-bottom:var(--tk-rule);font-size:25px;}
.tv-swiss .tk-srows{border-bottom:var(--tk-rule);}
.tv-swiss .tk-srows dt{padding-top:5px;font:400 11.5px 'Hanken Grotesk',sans-serif;letter-spacing:.03em;color:var(--tk-ink);}
.tv-swiss .tk-srows dd{padding-bottom:5px;font:700 17px/1.15 'Hanken Grotesk',sans-serif;}
.tv-swiss .tk-srows dd:nth-of-type(1){border-bottom:var(--tk-rule);}
.tv-swiss .tk-bar{width:80px;height:16px;margin:6px auto;}
.tv-swiss .tk-mini{margin-top:auto;border-top:var(--tk-rule);}
.tv-swiss .tk-mini a,.tv-swiss .tk-mini button{padding:6px 0;font:400 12px 'Hanken Grotesk',sans-serif;letter-spacing:.02em;text-decoration:underline;text-underline-offset:3px;}

/* ── Wąska lista: bez paska dekoru ── */
@container (max-width:880px){
  .ticket{grid-template-columns:minmax(0,1fr) 180px 28px 168px;grid-template-areas:"band band perf stub" "main visual perf stub";}
  .tk-deco,.tk-tag{display:none;}
  .tk-band{border-radius:calc(var(--tk-r) - 1px) 0 0 0;}
}
/* Poczta / Modernizm na wąskiej liście — PRZED blokiem telefonu, żeby ten wygrał kolejnością. */
@container (max-width:880px){
  .tv-post{--tk-val-fs:14px;grid-template-columns:minmax(0,1fr) 230px 28px 170px;grid-template-areas:"band visual perf stub" "main visual perf stub";}
  .tv-swiss{--tk-vis:196px;grid-template-columns:minmax(0,1fr) var(--tk-vis) 28px 172px;}
  .tv-swiss .tk-main{border-left:0;}
  .tv-swiss .tk-kind{display:none;}
  .tv-swiss .tk-meta>span{padding:6px 18px;}
}

/* ── Telefon: stos (belka, zdjęcie, treść, perforacja pozioma, odcinek) ── */
@container (max-width:680px){
  .ticket{grid-template-columns:minmax(0,1fr);grid-template-rows:auto 176px auto 30px auto;
    grid-template-areas:"band" "visual" "main" "perf" "stub";--tk-code-fs:42px;}
  .tk-band{border-radius:calc(var(--tk-r) - 1px) calc(var(--tk-r) - 1px) 0 0;padding:0 16px;}
  .tk-kind span,.tk-scodes{display:none;}
  .tk-main{padding:16px 18px;}
  .tk-visual{min-height:0;}
  .tk-city{max-width:130px;}
  .tk-perf::before{left:18px;right:18px;top:50%;bottom:auto;margin:-1px 0 0;border-left:0;border-top:2px dashed var(--tk-line);}
  /* 22 px i -11 px: .wrap ma na telefonie 12 px marginesu — szersze wycięcie
     wystawałoby poza ekran i dawało poziomy scroll. top na .a/.b, bo reguła bazowa
     `.tk-perf .cut.a{top:-14px}` ma wyższą specyficzność niż samo `.cut`. */
  .tk-perf .cut{width:22px;height:22px;margin:-11px 0 0;}
  .tk-perf .cut.a{top:50%;left:-11px;}
  .tk-perf .cut.b{top:50%;bottom:auto;left:auto;right:-11px;}
  .tk-stub{display:grid;grid-template-columns:auto 1fr;align-items:center;gap:10px 16px;padding:14px 18px 8px;
    border-radius:0 0 calc(var(--tk-r) - 1px) calc(var(--tk-r) - 1px);}
  .tk-sbrand{grid-column:1 / -1;}
  .tk-bar,.tk-qr{margin-top:0;}
  .tk-bar{width:120px;}
  .tk-bar,.tk-qr{justify-self:end;}
  .tk-mini{grid-column:1 / -1;justify-content:flex-end;}
  .tk-mini a,.tk-mini button{padding:14px 0;}
  .tv-vintage .tk-frame{inset:12px 16px 12px;}
  .tv-sky .tk-frame{clip-path:none;}
  .tv-sky .tk-visual::before{display:none;}
  .tv-sky .tk-cap{left:18px;}
}
/* Poczta / Modernizm na telefonie. Wycięcia z pierścieniem: średnica 24 px i środek na
   krawędzi karty — .wrap ma 12 px marginesu, więc koło kończy się równo z ekranem (bez poziomego scrolla). */
@container (max-width:680px){
  .tv-post,.tv-swiss{--tk-cut:24px;}
  .tv-post .tk-perf .cut,.tv-swiss .tk-perf .cut{margin:calc(var(--tk-cut) / -2) 0 0;}
  .tv-post .tk-perf .cut.a,.tv-swiss .tk-perf .cut.a{top:50%;left:calc(var(--tk-cut) / -2 - var(--tk-bw));clip-path:inset(0 0 0 50%);}
  .tv-post .tk-perf .cut.b,.tv-swiss .tk-perf .cut.b{top:50%;bottom:auto;left:auto;right:calc(var(--tk-cut) / -2 - var(--tk-bw));clip-path:inset(0 50% 0 0);}
  .tv-post .tk-stub,.tv-swiss .tk-stub{column-gap:16px;}
  .tv-post{grid-template-rows:auto 236px auto 30px auto;}
  .tv-post .tk-visual{min-height:0;}
  .tv-post .tk-band{padding:16px 18px 2px;}
  .tv-post .tk-visual::before,.tv-post .tk-visual::after{right:0;}
  .tv-post .tk-frame{inset:18px 14px 16px;}
  .tv-post .tk-postmark{left:0;top:-6px;}
  .tv-post .tk-desc{padding-right:0;}
  .tv-post .tk-badges{position:static;flex-direction:row;flex-wrap:wrap;align-items:center;padding:4px 0 0 4px;}
  .ticket.tv-post .tk-badges .badge{transform:rotate(-4deg);}
  .tv-post .tk-perf::before{left:18px;right:18px;top:50%;bottom:auto;width:auto;height:6px;margin:-3px 0 0;border-top:0;
    background:radial-gradient(circle,var(--tk-ink) 2.3px,transparent 2.9px) 0 50% / 17px 6px repeat-x;}
  .tv-post .tk-stub{background-position:right -50px top 4px;}
  .tv-swiss .tk-band{height:auto;padding:12px 16px;}
  .tv-swiss .tk-visual{grid-row:visual;align-self:stretch;height:auto;}
  .tv-swiss .tk-frame{inset:4px 16px 12px;}
  .tv-swiss .tk-main{padding:0;border-top:0;}
  .tv-swiss .tk-codes{width:100%;min-height:0;padding:12px 18px 10px;}
  .tv-swiss .tk-title,.tv-swiss .tk-desc{padding-left:18px;padding-right:18px;}
  .tv-swiss .tk-meta{padding-left:18px;}
  .tv-swiss .tk-meta>span{padding:8px 14px;}
  .tv-swiss .tk-badges{flex-basis:100%;margin-left:0;justify-content:flex-start;padding:2px 18px 14px;}
  .tv-swiss .tk-perf::before{left:18px;right:18px;top:50%;bottom:auto;width:auto;height:1.5px;margin:0;border-top:0;
    background:linear-gradient(90deg,var(--tk-ink) 55%,transparent 0) 0 0 / 9px 1.5px repeat-x;}
}

/* ── PANEL belki: wybór wzoru (belka ciemna w obu motywach — kolory zakodowane) ── */
.hd-panel .tk-sel{height:36px;padding:0 10px;border:1px solid #3a3a3a;border-radius:3px;background:#0b0b0b;color:var(--bd-yellow);
  font-family:var(--ff-board-m);font-size:12px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;cursor:pointer;}
.hd-panel .tk-sel:focus-visible{outline:2px solid var(--bd-yellow);outline-offset:2px;}

@media (prefers-reduced-motion:reduce){.ticket{animation:none;transition:none;}.ticket:hover{transform:none;}}
