/* ============================================================
   platforma.css (Faza 2, plan 04): app-shell platformy AP.
   Ladowane TYLKO na is_platforma() (functions.php @21), z ap-css
   jako zaleznoscia. JASNA strefa pracy: cream tresc + navy sidebar.
   Tokeny pf-x scope'owane do body.ap-platforma; bazowe face,
   radius i font dziedziczone z ap.css :root (ciemny NIE ruszany).
   Koral = JEDEN akcent na widok (aktywna nav, postep, CTA, focus
   na navy). Zero side-stripe, zero importu stylu cioci (klej/krem/roz).
   Pelne stany interaktywne + prefers-reduced-motion.
   ============================================================ */

body.ap-platforma {
  /* 2026-07-05: paleta A (POLISH_KOLORY_UNIWERSALNE) — neutrale bez zielonego
     podbicia D ("kolory uniwersalne", decyzja Michala); ciepla neutralnosc
     a la Notion, terakota i zielen postepu NIE ruszane (4 panele walidacji).
     WCAG: ink/cream 15.18, ink-3/cream 5.02, side-ink/side 12.46 — komplet AA. */
  --pf-cream:#F8F7F4; --pf-surface:#FFFEFC; --pf-surface-2:#F0EFEA; /* taste v2: off-white zamiast czystego #FFF */
  --pf-ink:#22201C; --pf-ink-2:#4A463F; --pf-ink-3:#6E6A62;
  --pf-line:#E7E4DD; --pf-line-2:#DAD6CD;
  --pf-side:#22201B; --pf-side-2:#14120E; --pf-side-ink:#E4E1DA; --pf-side-ink-3:#A29C92; --pf-side-line:rgba(255,255,255,.08);
  --face:#A64A1B; --face-ink:#FFF9F4; --face-hover:#9E441A; /* 04-06: akcent LOKALNY platformy (decoupling od ap.css :root — UI-SPEC §0); cieply off-white na terakocie ~5.6, hover ~6.1 (AA; taste v2 zakazuje czystego #FFF) */
  --tint-face:rgba(166,74,27,.12); --tint-face-cream:rgba(166,74,27,.10); --tint-official:#FAF3EC; /* r2 panelu: tint wyroznika prowadzacego */ --pf-danger:#B4322A;
  --pf-success:#217A4E; --pf-success-tint:rgba(33,122,78,.14); /* zielen TYLKO dla postepu/checkboxow (04-UI-SPEC §2) */
  --pf-side-w:260px; --pf-topbar-h:64px; --pf-tap:44px;
  --ease:cubic-bezier(.22,1,.36,1);
  margin:0;
  min-height:100dvh;
  background:var(--pf-cream);
  background-image:none;               /* neutralizuje ciemna scene z ap.css body */
  color:var(--pf-ink);
  font-family:var(--font-body);
  font-size:1rem;
  line-height:1.55;
  letter-spacing:0;
}

/* skip-link (osobna klasa od publicznej .skip-link) */
.apf-skip {
  position:absolute; left:-9999px; top:0; z-index:100;
  background:var(--face); color:var(--face-ink); padding:.7rem 1.2rem;
  border-radius:0 0 12px 0; font-weight:700; text-decoration:none;
}
.apf-skip:focus { left:0; }

/* ---------- shell: grid [sidebar] [main] (desktop >=1024) ---------- */
.apf-shell {
  display:grid;
  grid-template-columns:var(--pf-side-w) minmax(0,1fr);
  min-height:100dvh;
}

/* ---------- sidebar (navy, sticky desktop) ---------- */
.apf-side {
  position:sticky; top:0; align-self:start;
  height:100dvh; overflow-y:auto;
  padding:24px;
  display:flex; flex-direction:column; gap:24px;
  background:linear-gradient(180deg, var(--pf-side), var(--pf-side-2)); /* ciemnieje ku dolowi */
  color:var(--pf-side-ink);
  z-index:60;
}
.apf-brand {
  display:block; text-decoration:none;
  font:800 1.05rem/1.1 var(--font-display); color:var(--ink);
}
.apf-brand .lo-dot, .apf-brand .lo-tld { color:var(--pf-side-ink-3); }

.apf-nav ul { list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:4px; }
.apf-nav-item {
  position:relative;
  display:flex; align-items:center; gap:4px;
  min-height:var(--pf-tap); padding:0 12px;
  border-radius:var(--radius);
  color:var(--pf-side-ink); text-decoration:none;
  font:600 .94rem/1.25 var(--font-body);
  transition:background .18s var(--ease), color .18s var(--ease);
}
.apf-nav-item svg { width:20px; height:20px; flex:none; } /* party SVG bez width/height -> wymiaruj */
.apf-nav-item > span { padding-left:4px; }
/* 04-05 r4 (fix H): drobny akcent terakoty (--face: koral na F2 / terakota na D) wjezdza na hover */
.apf-nav-item::before {
  content:""; position:absolute; left:2px; top:50%;
  transform:translateY(-50%) scaleY(0); transform-origin:center;
  width:3px; height:18px; border-radius:2px; background:var(--face);
  transition:transform .16s var(--ease);
}
.apf-nav-item:hover::before { transform:translateY(-50%) scaleY(1); }
.apf-nav-item.is-active::before, .apf-nav-item[aria-current="page"]::before { display:none; } /* aktywna = pigulka, bez kreski */
.apf-nav-item:hover { background:rgba(255,255,255,.07); color:var(--ink); } /* 04-05 r3: hover lighten czytelniejszy */
.apf-nav-item.is-active,
.apf-nav-item[aria-current="page"] { background:var(--pf-side-ink); color:var(--pf-side); } /* 04-05 r3 (REGULY D): jasna pigulka + ciemny tekst, zastepuje --face */
.apf-nav-item:focus-visible { outline:3px solid var(--face); outline-offset:2px; }  /* koral OK na navy */
.apf-nav-quiet { color:var(--pf-side-ink-3); }
.apf-nav-quiet:hover { color:var(--pf-side-ink); }

/* 04-deslop (reguła 11 / §4.6): 27 działów -> 6 zwijanych grup (natywne <details>).
   Etykieta grupy = overline 12px uppercase --pf-side-ink-3; aktywna grupa auto-open. */
.apf-nav-dzialy { display:flex; flex-direction:column; }
.apf-nav-group { border:0; }
.apf-nav-group > summary {
  list-style:none; cursor:pointer;
  display:flex; align-items:center; justify-content:space-between; gap:8px;
  min-height:36px; margin-top:14px; padding:0 12px;
  font:700 .75rem/1 var(--font-body); text-transform:uppercase; letter-spacing:.08em;
  color:var(--pf-side-ink-3);
}
.apf-nav-group > summary::-webkit-details-marker { display:none; }
.apf-nav-group > summary::marker { content:""; }
.apf-nav-group > summary:hover { color:var(--pf-side-ink); }
.apf-nav-group > summary:focus-visible { outline:3px solid var(--face); outline-offset:2px; border-radius:var(--radius); }
.apf-nav-chevron { width:16px; height:16px; flex:none; transition:transform .18s var(--ease); }
.apf-nav-group[open] > summary .apf-nav-chevron { transform:rotate(180deg); }
.apf-nav-group > ul { list-style:none; margin:2px 0 0; padding:0; display:flex; flex-direction:column; gap:2px; }
.apf-nav-dzial { min-height:40px; font-weight:400; font-size:.9rem; }
.apf-nav-dzial.is-active { font-weight:600; } /* aktywny dział: pigułka (dziedziczy .is-active) + waga 600 */

.apf-side-foot { margin-top:auto; display:flex; flex-direction:column; gap:8px; padding-top:16px; border-top:1px solid var(--pf-side-line); }
.apf-side-account { display:flex; flex-direction:column; gap:4px; padding-top:16px; border-top:1px solid var(--pf-side-line); } /* 04-05 r3: konto/wyloguj wydzielone z sekcji TWOJ POSTEP osobnym separatorem */
/* F6.2 (06.2-01, B par.5.2): blok .apf-progress (pasek % z mianownikiem calej
   platformy) WYPADL — w jego miejscu licznik-link .apf-side-dzialy (regula:
   ZAKAZ paskow przy duzych mianownikach; jedyna kreska = aktywny dzial). */
.apf-side-dzialy { display:block; padding:0 12px 8px; text-decoration:none; }
.apf-side-dzialy-label { display:block; margin-bottom:6px; font:700 .75rem/1 var(--font-body);
                         text-transform:uppercase; letter-spacing:.08em; color:var(--pf-side-ink-3); }
.apf-side-dzialy-val { color:var(--pf-side-ink); font:600 .9rem/1.3 var(--font-body);
                       font-variant-numeric:tabular-nums; }
.apf-side-dzialy:hover .apf-side-dzialy-val { color:var(--ink); }   /* jak hover nav-item */
.apf-side-dzialy:focus-visible { outline:3px solid var(--face); outline-offset:2px; border-radius:var(--radius); }

/* ---------- scrim (backdrop drawera) ---------- */
.apf-scrim { position:fixed; inset:0; z-index:50; background:rgba(5,13,30,.5); border:0; }
.apf-scrim[hidden] { display:none; }

/* ---------- main + topbar + content (cream) ---------- */
.apf-main { min-width:0; background:var(--pf-cream); }
.apf-topbar {
  display:flex; align-items:center; gap:12px;
  min-height:var(--pf-topbar-h); padding:16px 32px;
  background:var(--pf-cream); border-bottom:1px solid var(--pf-line);
}
.apf-crumb {
  font:700 .75rem/1 var(--font-body); text-transform:uppercase; letter-spacing:.08em;
  color:var(--pf-ink-3);
}
.apf-topbar-aux { margin-left:auto; }
.apf-content { max-width:1080px; margin:0 auto; padding:32px; }

/* tresc na cream: naglowki solid, body czytelne, linki ciemne (ap.css a=bialy) */
/* panel r3: 26/22/20px = trzy poziomy w 6px, hierarchie niosl glownie kolor;
   32px daje stopien >=1.25 wzgledem h2 (research LMS) */
.apf-content h1 { font:800 clamp(1.65rem,4.2vw,2rem)/1.2 var(--font-display); color:var(--pf-ink); margin:0 0 1rem; }
.apf-content h2, .apf-content h3 { font:800 1.125rem/1.3 var(--font-display); color:var(--pf-ink); margin:0 0 .75rem; }
.apf-content p { color:var(--pf-ink-2); margin:0 0 1rem; }
.apf-content a { color:var(--pf-ink); }
.apf-content a:focus-visible { outline:3px solid var(--pf-ink); outline-offset:2px; } /* koral na cream = 1.64:1 -> NIGDY */

/* ---------- burger (topbar; ukryty na desktopie) ---------- */
.apf-burger {
  display:none;
  align-items:center; justify-content:center;
  width:var(--pf-tap); height:var(--pf-tap);
  padding:0; border:0; background:transparent; color:var(--pf-ink);
  border-radius:var(--radius); cursor:pointer;
  transition:background .18s var(--ease);
}
.apf-burger svg { display:block; }
.apf-burger:hover { background:var(--pf-surface-2); }
.apf-burger:focus-visible { outline:3px solid var(--pf-ink); outline-offset:2px; } /* ring na cream = ink, nie koral */

/* ============================================================
   RESPONSYWNOSC: prog drawera 1024px (cele 390 / 768 / 1440)
   ============================================================ */

/* tablet + telefon: jedna kolumna, sidebar = off-canvas drawer */
@media (max-width:1023.98px) {
  .apf-shell { grid-template-columns:1fr; }
  .apf-side {
    position:fixed; inset:0 auto 0 0;
    width:min(86vw,320px); height:100%;
    transform:translateX(-100%);
    transition:transform .18s var(--ease);
    box-shadow:0 0 40px rgba(5,13,30,.42);
  }
  .apf-shell.nav-open .apf-side { transform:none; }
  .apf-burger { display:inline-flex; }
  .apf-topbar { position:sticky; top:0; z-index:40; padding:0 24px; }
  .apf-content { padding:24px; }
}

/* telefon: ciasniejszy padding + zero poziomego scrolla */
@media (max-width:767.98px) {
  html, body.ap-platforma, .apf-shell { overflow-x:hidden; }
  .apf-topbar { padding:0 16px; }
  .apf-content { padding:16px; }
}

/* desktop: pas bezpieczenstwa (WR-05) — scrim nigdy nie zaslania widoku,
   nawet gdyby klasa nav-open przezyla resize (JS sprzata przez matchMedia) */
@media (min-width:1024px) {
  .apf-scrim { display:none; }
}

/* ---------- ruch ograniczony ---------- */
@media (prefers-reduced-motion:reduce) {
  body.ap-platforma * { transition-duration:.01ms !important; animation-duration:.01ms !important; }
  .apf-side { transition:none; } /* drawer bez slajdu */
}

/* ============================================================
   Faza 3: landing/paywall (publiczny, poza app-shellem) + dashboard.
   Bez nowych tokenow - reuse --pf-* oraz --face z bazy. Kryterium: czytelnie,
   nie wypala oczu; polish copywritingowy na koniec projektu.
   ============================================================ */

/* ---- wspolny koralowy CTA (na jasnym tle) ----
   body.ap-platforma w selektorze NIE jest ozdoba: .apf-content a (0,1,1)
   nadpisywal color .apf-cta (0,1,0) — CTA dashboardu renderowal ciemny
   tekst na terakocie (zlapane przez Michala na live) */
body.ap-platforma .apf-cta {
  display:inline-flex; align-items:center; justify-content:center;
  min-height:var(--pf-tap); padding:0 1.4rem;
  background:var(--face); color:var(--face-ink);
  border-radius:var(--radius); text-decoration:none;
  font:800 1rem/1 var(--font-display);
  transition:transform .18s var(--ease), filter .18s var(--ease);
}
body.ap-platforma .apf-cta:hover { transform:translateY(-2px); background:var(--face-hover); } /* 04-06: hover terakota #9E441A z tabeli D (sankcjonowana zmiana reguly) */
body.ap-platforma .apf-cta:focus-visible { outline:3px solid var(--pf-ink); outline-offset:3px; }
/* 04-05 r3: CTA pobierania w gridzie/doc-card szepcze (26+ przyciskow) — nizsze, lzejsze;
   SOLID terakota (kanon D) bez zmiany koloru/modelu */
.apf-ts-foot .apf-cta, .apf-doc-card .apf-cta { min-height:38px; padding:0 1rem; font-size:.85rem; }

/* ---- landing: lekki publiczny chrome ---- */
.apf-public { background:var(--pf-cream); }
.apf-lp-top {
  display:flex; align-items:center; justify-content:space-between; gap:16px;
  max-width:1080px; margin:0 auto; padding:20px 32px;
}
.apf-lp-top .apf-brand { color:var(--pf-ink); }
.apf-lp-top .apf-brand .lo-dot, .apf-lp-top .apf-brand .lo-tld { color:var(--pf-ink-3); }
.apf-lp-account { color:var(--pf-ink-2); text-decoration:none; font:700 .9rem/1 var(--font-body); }
.apf-lp-account:hover { color:var(--pf-ink); }

.apf-landing { max-width:760px; margin:0 auto; padding:24px 32px 64px; }
.apf-lp-hero { text-align:center; padding:24px 0 8px; }
.apf-lp-eyebrow {
  display:inline-block; margin-bottom:.75rem;
  font:700 .75rem/1 var(--font-body); text-transform:uppercase; letter-spacing:.08em;
  color:var(--pf-ink-3);
}
.apf-lp-hero h1 { font:800 clamp(1.75rem,5vw,2.4rem)/1.15 var(--font-display); color:var(--pf-ink); margin:0 0 1rem; }
.apf-lp-hero p { color:var(--pf-ink-2); font-size:1.08rem; margin:0 auto; max-width:52ch; }

.apf-lp-state {
  margin:20px 0; padding:14px 18px;
  background:var(--tint-face-cream); border:1px solid var(--pf-line);
  border-radius:var(--radius);
}
.apf-lp-state p { margin:0; color:var(--pf-ink-2); }
.apf-lp-state a { color:var(--pf-ink); font-weight:700; }

.apf-paywall {
  margin:28px 0; padding:28px;
  background:var(--pf-surface); border:1px solid var(--pf-line);
  border-radius:calc(var(--radius) + 4px); text-align:center;
  box-shadow:0 12px 30px rgba(22,39,63,.06);
}
.apf-price { color:var(--pf-ink); font-variant-numeric:tabular-nums; margin-bottom:1rem; }
.apf-price-num { font:800 3rem/1 var(--font-display); }
.apf-price-per { color:var(--pf-ink-3); font-weight:600; }
.apf-paywall-list {
  list-style:none; margin:0 0 1.5rem; padding:0;
  display:flex; flex-direction:column; gap:.5rem; text-align:left; max-width:34ch; margin-inline:auto;
}
.apf-paywall-list li { position:relative; padding-left:1.6rem; color:var(--pf-ink-2); }
.apf-paywall-list li::before {
  content:"\2713"; position:absolute; left:0; top:0;
  font-weight:700; color:var(--face); /* taste v2: znak "w pakiecie" zamiast dekoracyjnego dota */
}
.apf-lp-cta { width:100%; max-width:20rem; }
.apf-paywall-note { margin:1rem 0 0; font-size:.85rem; color:var(--pf-ink-3); }

.apf-faq { margin-top:40px; }
.apf-faq h2 { font:800 1.25rem/1.2 var(--font-display); color:var(--pf-ink); margin:0 0 1rem; }
.apf-faq details {
  border:1px solid var(--pf-line); border-radius:var(--radius);
  background:var(--pf-surface); padding:14px 18px; margin-bottom:.75rem;
}
.apf-faq summary { cursor:pointer; font:700 1rem/1.3 var(--font-body); color:var(--pf-ink); }
.apf-faq details p { margin:.75rem 0 0; color:var(--pf-ink-2); }

/* ---- dashboard (wewnatrz .apf-content app-shellu) ---- */
.apf-dash-head { margin-bottom:24px; }
.apf-dash-head h1 { margin-bottom:.5rem; }
.apf-dash-head .apf-passnag { margin:14px 0 0; padding:10px 14px; border:1px solid var(--pf-line); border-radius:var(--radius); background:var(--pf-surface); color:var(--pf-ink-2); font-size:.92rem; } /* FIX UAT 06.1 (5a): informacja o nieustawionym hasle - neutralna, zero czerwieni */
.apf-dash-head .apf-passnag a { color:var(--face); font-weight:700; text-decoration:none; white-space:nowrap; }
.apf-dash-head .apf-passnag a:hover { text-decoration:underline; text-underline-offset:2px; }
.apf-dash-head .apf-passnag a:focus-visible { outline:3px solid var(--pf-ink); outline-offset:2px; }
.apf-card {
  padding:24px; margin-bottom:20px;
  background:var(--pf-surface); border:1px solid var(--pf-line);
  border-radius:calc(var(--radius) + 4px);
}
.apf-card h2 { margin-bottom:.75rem; }
/* 04-deslop (reguła 1 / §3.1): dashboard = sekcje WPROST na cream (koniec „każda sekcja
   w obramowanej białej karcie"); hierarchię niesie biel 48/32px, nie ramki. */
.apf-dashboard .apf-card {
  padding:0; margin-bottom:48px;
  background:none; border:0; border-radius:0;
}
.apf-dashboard .apf-card:last-child { margin-bottom:0; }
@media (max-width:767.98px) { .apf-dashboard .apf-card { margin-bottom:32px; } }
.apf-news-list { list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:.5rem; }
.apf-news-item {
  padding:.6rem 0; border-bottom:1px solid var(--pf-line);
}
/* 04-deslop fix: flex NA KOTWICY (jedyne dziecko li) — wczesniej data kleila
   sie do etykiety, bo space-between dzialal na li z jednym dzieckiem-linkiem */
.apf-news-link {
  display:flex; align-items:baseline; justify-content:space-between; gap:12px;
  text-decoration:none;
}
.apf-news-link:hover .apf-news-title { color:var(--face); }
.apf-news-item:last-child { border-bottom:0; }
.apf-news-title { color:var(--pf-ink); font-weight:600; }
.apf-news-date { color:var(--pf-ink-3); font-size:.85rem; font-variant-numeric:tabular-nums; white-space:nowrap; }
.apf-empty { color:var(--pf-ink-3); }

@media (max-width:767.98px) {
  .apf-lp-top, .apf-landing { padding-inline:16px; }
  .apf-paywall { padding:20px; }
}

/* ============================================================
   Faza 4 (04-03): tresc strony dzialu + index dzialow.
   WYLACZNIE nowe klasy (§5) — shell nietkniety, reskin tokenow = 04-06.
   Skala odstepow 4/8/12/16/24/32/48; radius 16/24; ikony inline-SVG.
   ============================================================ */

/* filtry (hidden po data-typ) — display na klasach wygrywa z UA [hidden] bez tej reguly */
body.ap-platforma [hidden] { display:none !important; }

/* ---- breadcrumb dzialu ---- */
.apf-dzial-crumb {
  margin-bottom:8px;
  font:700 .75rem/1.4 var(--font-body); text-transform:uppercase; letter-spacing:.08em;
  color:var(--pf-ink-3);
}
.apf-dzial-crumb a { color:var(--pf-ink-3); text-decoration:none; }
.apf-dzial-crumb a:hover { color:var(--pf-ink); text-decoration:underline; }
.apf-dzial-crumb a:focus-visible { outline:3px solid var(--pf-ink); outline-offset:2px; }
.apf-dzial-crumb [aria-current="page"] { color:var(--pf-ink); }
.apf-crumb-sep { padding:0 4px; }

/* ---- naglowek dzialu + pasek postepu (§1.2) ---- */
.apf-dzial-head { margin-bottom:32px; }
.apf-dzial-lede { max-width:60ch; }
.apf-dzial-head .apf-dzial-progress { display:block; margin-top:16px; max-width:440px; } /* 04-05 r3: pasek pod lede (desktop i mobile), nie samotna linijka w rogu */
.apf-dzial-progress-track {
  display:block; height:8px; border-radius:99px;
  background:var(--pf-line); overflow:hidden;
}
.apf-dzial-progress-track i { display:block; height:100%; background:var(--pf-success); border-radius:inherit; }
.apf-dzial-progress-link {
  display:inline-flex; align-items:center; gap:6px; margin-top:10px;
  padding:6px 14px; border-radius:99px;
  background:var(--pf-surface-2); color:var(--pf-ink-2); text-decoration:none;
  font:600 .85rem/1.2 var(--font-body); font-variant-numeric:tabular-nums;
} /* 04-05 r3: etykieta postepu = dyskretna link-pigulka do #materialy, NIE CTA (wchlania kotwice mobile z r2) */
.apf-dzial-progress-link:hover { background:var(--pf-line); color:var(--pf-ink); }
.apf-dzial-progress-link:focus-visible { outline:3px solid var(--pf-ink); outline-offset:2px; }
.apf-dzial-progress-badge {
  display:inline-grid; place-items:center;
  width:18px; height:18px; vertical-align:-4px;
  border-radius:50%; background:var(--pf-success); color:var(--pf-surface);
  animation:apf-badge-in .2s var(--ease) 1;
}
.apf-dzial-progress-badge svg { width:11px; height:11px; }
@keyframes apf-badge-in { from { transform:scale(.6); opacity:0; } to { transform:scale(1); opacity:1; } }
@media (prefers-reduced-motion:reduce) { .apf-dzial-progress-badge { animation:none; } }

/* ---- sekcje tresci dzialu ---- */
.apf-dzial-section { margin-bottom:48px; } /* 04-deslop (reguła 2): 48px desktop */
@media (max-width:767.98px) { .apf-dzial-section { margin-bottom:32px; } } /* 04-deslop (reguła 2): 32px mobile */
.apf-dzial-section > h2 { margin-bottom:16px; font-size:1.25rem; } /* h2 sekcji = 20px (§4.2); overline grupy pod nim */
.apf-mat-meta { font-size:.85rem; color:var(--pf-ink-3); margin:0; font-variant-numeric:tabular-nums; }

/* ---- video 16:9 (§1.3): LIVE facade + stan "Film w drodze" ---- */
.apf-video {
  position:relative; aspect-ratio:16/9;
  border:1px solid var(--pf-line); border-radius:var(--radius-lg); overflow:hidden;
  background:var(--pf-surface-2);
}
.apf-video-thumb {
  position:absolute; inset:0; width:100%; height:100%;
  display:block; padding:0; border:0; cursor:pointer;
  background:var(--pf-surface-2); font:inherit; color:inherit; /* 04-06 (panel #4, fix 4): pre-load/letterbox w jasnym macie (jeden slownik), nie w ciemnym railu */
}
.apf-video-thumb img { width:100%; height:100%; object-fit:cover; display:block; }
.apf-video-play {
  position:absolute; left:50%; top:50%; transform:translate(-50%,-50%);
  width:64px; height:64px; border-radius:50%;
  display:grid; place-items:center;
  background:var(--pf-surface); color:var(--pf-ink);
  box-shadow:0 12px 30px rgba(22,39,63,.25);
  transition:transform .18s var(--ease);
}
.apf-video-play svg { width:26px; height:26px; margin-left:3px; }
.apf-video-thumb:hover .apf-video-play { transform:translate(-50%,-50%) scale(1.06); }
.apf-video-thumb:focus-visible { outline:3px solid var(--pf-ink); outline-offset:-3px; }
.apf-video-thumb.playing { cursor:default; background:#0B0A09; } /* off-black: skill sekcja 7, NO pure black */
.apf-video-thumb.playing iframe { position:absolute; inset:0; width:100%; height:100%; border:0; display:block; }
.apf-dzial-section > .apf-check-row { margin-top:8px; }

/* ---- zapowiedz filmu (26/27 dzialow bez nagrania; /goal Michala 2026-07-05):
   pelna ciemna ramka w geometrii live playera (.apf-video 16:9) zamiast pasa
   statusu z 04-05 r4 — tresc realna (tytul przyszlego nagrania), wiec nie
   czyta sie jak pusty placeholder. Mat z tokenow railu ("kino przed seansem");
   nieklikalna: bez cienia i hoveru (regula: cien tylko na klikalnych).
   Kontrast: side-ink-3 #A29C92 na side-2 #14120E = 6.9:1 (AA). ---- */
.apf-video-soon {
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:2px; text-align:center; padding:28px 24px;
  background:radial-gradient(115% 100% at 50% 0%, #2B2822 0%, var(--pf-side-2) 78%);
  border-color:#3A362E;
}
/* waskie viewporty: ramka rosnie zamiast ucinac tekst — ratio 16:9 zostaje jako
   MINIMUM (min-height:max-content pod aspect-ratio ignorowane przez Chrome,
   zmierzony fakt na live) */
@media (max-width:559.98px) {
  .apf-video-soon { aspect-ratio:auto; min-height:56.25vw; }
}
.apf-video-soon-ring {
  display:grid; place-items:center;
  width:64px; height:64px; border-radius:50%;
  border:2px solid rgba(228,225,218,.38); color:var(--pf-side-ink);
  margin-bottom:12px;
}
.apf-video-soon-ring svg { width:26px; height:26px; opacity:.9; } /* kamera (panel: trojkat = falszywa afordancja play) */
/* scope .apf-video-soon: bez niego .apf-content p (0,1,1) nadpisuje kolor
   ciemnym inkiem — na czarnym macie tekst znikal (zlapane na live shocie) */
.apf-video-soon .apf-video-soon-eyebrow {
  margin:0;
  font:700 .72rem/1 var(--font-body); text-transform:uppercase; letter-spacing:.12em;
  color:var(--pf-side-ink-3);
}
.apf-video-soon .apf-video-soon-title { margin:4px 0 0; font:800 clamp(1.15rem,2.6vw,1.4rem)/1.25 var(--font-display); color:var(--pf-side-ink); }
.apf-video-soon .apf-video-soon-note { margin:6px 0 0; max-width:44ch; font-size:.95rem; line-height:1.55; color:var(--pf-side-ink-3); }

/* ---- kotwica do materialow: link-pigulka postepu (§1.2) prowadzi tu; scroll-margin pod topbar (04-05 r3) ---- */
body.ap-platforma #materialy { scroll-margin-top:calc(var(--pf-topbar-h) + 16px); }

/* ---- karta PDF how-to (§1.4) ---- */
.apf-doc-card {
  display:flex; align-items:center; flex-wrap:wrap; gap:16px;
  padding:16px 24px;
  background:var(--pf-surface); border:1px solid var(--pf-line);
  border-radius:calc(var(--radius) + 4px);
}
.apf-doc-ico {
  flex:none; display:grid; place-items:center;
  width:44px; height:44px; border-radius:50%;
  background:var(--tint-face); color:var(--pf-ink);
}
.apf-doc-ico svg { width:22px; height:22px; }
.apf-doc-card.is-empty .apf-doc-ico { background:var(--pf-line); color:var(--pf-ink-3); }
.apf-doc-card.is-empty .apf-doc-title { color:var(--pf-ink-2); }
.apf-doc-meta { flex:1; min-width:12ch; }
.apf-doc-title { font-weight:600; color:var(--pf-ink); margin:0 0 4px; }

/* ---- stan "wkrotce" — JEDEN wzorzec (stany puste §4.1): doc-card, wierszyki, gra (04-05 r3) ---- */
.apf-soon {
  display:inline-flex; align-items:center; gap:8px;
  min-height:36px; padding:6px 14px; border-radius:99px;
  background:var(--pf-surface-2); color:var(--pf-ink-3);
  font:600 .85rem/1.2 var(--font-body); white-space:nowrap;
}
.apf-soon svg { width:15px; height:15px; flex:none; }

/* ---- pelny kafel „wkrotce" (04-05 r4, fix E): „Wierszyki w drodze" i „Gra wkrotce" jako
   kafel proporcji kart materialow, nie jednolinijkowiec — final strony nie wygasa ---- */
.apf-soon-tile {
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:8px;
  text-align:center; min-height:180px; padding:32px 24px;
  background:var(--pf-surface); border:1px dashed var(--pf-line-2);
  border-radius:calc(var(--radius) + 4px); color:var(--pf-ink-3);
}
.apf-soon-tile-ico {
  flex:none; display:grid; place-items:center; width:44px; height:44px;
  border-radius:50%; background:var(--pf-surface-2); color:var(--pf-ink-3);
}
.apf-soon-tile-ico svg { width:22px; height:22px; }
.apf-soon-tile-title { font:800 1.0625rem/1.3 var(--font-display); color:var(--pf-ink-2); margin:0; }
.apf-soon-tile-sub {
  font:700 .72rem/1 var(--font-body); letter-spacing:.06em; text-transform:uppercase;
  color:var(--pf-ink-3); margin:0;
}
.apf-soon-tile-note { font-size:.9rem; color:var(--pf-ink-3); margin:0; max-width:38ch; }

/* ---- chipy filtrow (DZIAL-06) ---- */
.apf-filter-chips { display:flex; flex-wrap:wrap; gap:8px; margin-bottom:16px; }
.apf-chip {
  min-height:var(--pf-tap); padding:0 16px; border-radius:99px;
  border:1px solid var(--pf-line-2); background:var(--pf-surface); color:var(--pf-ink-2);
  font:600 .85rem/1 var(--font-body); cursor:pointer;
  transition:background .18s var(--ease), color .18s var(--ease), border-color .18s var(--ease);
}
.apf-chip:hover { background:var(--pf-surface-2); color:var(--pf-ink); }
.apf-chip[aria-pressed="true"] { background:var(--pf-ink); border-color:var(--pf-ink); color:var(--pf-cream); }
.apf-chip:focus-visible { outline:3px solid var(--pf-ink); outline-offset:2px; }

/* ---- grid timesaverow (§1.5): 1 -> 2 (>=560) -> 3 (>=900) ---- */
.apf-ts-grid { display:grid; gap:16px; grid-template-columns:1fr; }
@media (min-width:560px) { .apf-ts-grid { grid-template-columns:repeat(2,minmax(0,1fr)); } }
@media (min-width:900px) { .apf-ts-grid { grid-template-columns:repeat(3,minmax(0,1fr)); } }
.apf-ts-card {
  display:flex; flex-direction:column; height:100%;
  background:var(--pf-surface); border:1px solid var(--pf-line);
  border-radius:calc(var(--radius) + 4px); overflow:hidden;
  box-shadow:0 1px 2px rgba(0,0,0,.04); /* 04-deslop (reguła 10): JEDEN subtelny cień = sygnał „klikalne", nie dekoracja */
  transition:transform .18s var(--ease), box-shadow .18s var(--ease);
}
.apf-ts-card:hover { transform:translateY(-2px); box-shadow:0 4px 12px rgba(0,0,0,.06); } /* 04-deslop (reguła 10): lift -2px, cień lekki */
.apf-ts-thumb { aspect-ratio:4/3; background:var(--pf-surface-2); padding:14px; } /* 04-05 r4 (fix C): oprawa + wiekszy oddech, by pojedynczy subject nie balonowal (regen kart z roznych stron) */
.apf-ts-thumb img { width:100%; height:100%; object-fit:contain; display:block; } /* 04-05 r3: contain — ubogie i geste miniatury wyrownane, rozowe ramki PDF nie dotykaja krawedzi */
/* 04-06 (panel #4, fix 3): rzad "Karty prezentacyjne" — grubszy mat + wewnetrzny hairline
   #E7E9E1 (04-SKIN-WINNER); identyczny inner box = wspolna oprawa optyczna stron
   (skala rysunku WEWNATRZ strony PDF to asset zrodlowy — razem z okladka sample w Fazie 7) */
.apf-ts-card[data-typ="karty"] .apf-ts-thumb { padding:24px; box-shadow:inset 0 0 0 1px #E7E9E1; }
.apf-ts-body { padding:16px 16px 0; } /* 04-05 r3: oddech miniatura -> stopka */
.apf-ts-title {
  font-weight:600; color:var(--pf-ink); margin:0 0 4px;
  display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden;
}
.apf-ts-foot {
  display:flex; align-items:center; justify-content:space-between; gap:12px;
  padding:12px 16px 16px; margin-top:auto;
}
.apf-ts-empty { margin-bottom:0; }
.apf-ts-empty p { margin:0; color:var(--pf-ink-3); }
.apf-ts-empty-title { font-weight:600; color:var(--pf-ink-2); margin:0 0 4px; }

/* ---- grupowanie gridu wg typ (04-05 r4, fix A): sekcje z pod-naglowkiem + licznik ---- */
.apf-ts-groups { display:flex; flex-direction:column; gap:32px; }
.apf-ts-group-h {
  margin:0 0 12px;
  font:700 .75rem/1 var(--font-body); text-transform:uppercase; letter-spacing:.08em;
  color:var(--pf-ink-3);
} /* 04-deslop (reguły 5/9 / §4.6): overline zamiast off-scale 17px + pigułki-licznika (chip liczy już per typ — koniec dublowania) */
/* panel r3: na mobile caps+bold overline byl optycznie glosniejszy niz H2 */
@media (max-width:559.98px) {
  .apf-ts-group-h { font-size:.68rem; letter-spacing:.06em; }
}
.apf-chip-n { font-variant-numeric:tabular-nums; opacity:.68; margin-left:1px; }

/* ---- checkbox "przerobione" (§1.9) — disabled do 04-08 ---- */
.apf-check-row {
  position:relative; display:inline-flex; align-items:center; gap:8px;
  min-height:var(--pf-tap); padding:0 8px 0 4px; border-radius:99px;
}
.apf-check { position:absolute; inset:0; width:100%; height:100%; margin:0; opacity:0; cursor:pointer; }
.apf-check:disabled { cursor:default; }
.apf-check-box {
  flex:none; display:grid; place-items:center;
  width:26px; height:26px; border-radius:50%;
  border:2px solid var(--pf-line-2); background:var(--pf-surface); color:var(--pf-surface);
} /* panel #1: wiekszy target w --pf-tap, wyrazniejsza obwodka --pf-line-2 */
.apf-check-box svg { width:13px; height:13px; opacity:0; }
.apf-check:checked ~ .apf-check-box { background:var(--pf-success); border-color:var(--pf-success); }
.apf-check:checked ~ .apf-check-box svg { opacity:1; }
.apf-check:focus-visible ~ .apf-check-box { outline:3px solid var(--pf-ink); outline-offset:2px; }
.apf-check-row:hover .apf-check:not(:checked) ~ .apf-check-box { border-color:var(--pf-ink-3); background:var(--pf-surface-2); } /* 04-05 r4 (fix G): hover wyrazniej ramuje kontrolke (nie rusza zielonego stanu done; tooltip „Oznacz jako przerobione" z title) */
.apf-check-row:hover .apf-check-label { color:var(--pf-ink-2); }
.apf-check-label { font-size:.85rem; color:var(--pf-ink-3); }
.apf-check-row.is-done { background:var(--pf-success-tint); }
.apf-check-row.is-done .apf-check-label { color:var(--pf-ink-2); }

/* ---- piosenki na platformie (reuse wzorca .dzial-songs, tokeny --pf-*) ---- */
.dzial-songs .dzial-list { list-style:none; margin:0; padding:0; display:grid; gap:16px; grid-template-columns:1fr; }
@media (min-width:900px) { .dzial-songs .dzial-list { grid-template-columns:repeat(3,minmax(0,1fr)); } }
.dzial-songs .song {
  margin:0; padding:16px;
  background:var(--pf-surface); border:1px solid var(--pf-line);
  border-radius:calc(var(--radius) + 4px);
  box-shadow:0 1px 2px rgba(0,0,0,.04); /* 04-deslop (reguła 10): jeden subtelny cień, spójny z kartami materiałów */
  /* panel r3: rozne dlugosci opisow -> stopki kart na roznych wysokosciach;
     flex + margin-top:auto rownaja "przerobione" do dolnej krawedzi */
  display:flex; flex-direction:column;
}
.dzial-songs .song .apf-check-row { margin-top:auto; }
.dzial-songs .song-no {
  font:800 .75rem/1 var(--font-display); letter-spacing:.16em;
  color:var(--pf-ink-3); margin:0 0 8px;
}
.dzial-songs .song-thumb {
  display:block; width:100%; position:relative; aspect-ratio:16/9;
  border:1px solid var(--pf-line); border-radius:var(--radius); overflow:hidden;
  cursor:pointer; background:var(--pf-surface-2); padding:6px; font:inherit; color:inherit;
  box-shadow:inset 0 0 0 1px #E7E9E1; /* 04-06 (panel #4, fix 4): jeden slownik containmentu — jasny mat + hairline jak karty PDF, zamiast twardego ciemnego podkladu #141a26 */
}
.dzial-songs .song-thumb img { width:100%; height:100%; object-fit:cover; display:block; border-radius:calc(var(--radius) - 6px); }
.dzial-songs .song-play {
  position:absolute; left:50%; top:50%; transform:translate(-50%,-50%);
  width:56px; height:56px; border-radius:50%;
  display:grid; place-items:center;
  background:var(--face); color:var(--face-ink);
  transition:transform .18s var(--ease);
}
.dzial-songs .song-play svg { width:22px; height:22px; margin-left:2px; }
.dzial-songs .song-thumb:hover .song-play { transform:translate(-50%,-50%) scale(1.06); }
.dzial-songs .song-thumb:focus-visible { outline:3px solid var(--pf-ink); outline-offset:2px; }
.dzial-songs .song-thumb.playing { cursor:default; background:#0B0A09; } /* off-black: skill sekcja 7, NO pure black */
.dzial-songs .song-thumb.playing iframe { position:absolute; inset:0; width:100%; height:100%; border:0; display:block; }
.dzial-songs .song-meta { padding:12px 4px 0; }
.dzial-songs .song-title { font:600 1rem/1.3 var(--font-body); color:var(--pf-ink); margin:0; }
.dzial-songs .song-by {
  font:700 .75rem/1 var(--font-body); letter-spacing:.08em; text-transform:uppercase;
  color:var(--pf-ink-3); margin:8px 0 0;
}
.dzial-songs .song-note { font-size:.97rem; color:var(--pf-ink-2); margin:8px 0 0; }

/* ---- wierszyki (§1.7) ---- */
.apf-rhyme-list { list-style:none; margin:0; padding:0; display:grid; gap:12px; }
.apf-rhyme {
  padding:16px 24px;
  background:var(--pf-surface); border:1px solid var(--pf-line);
  border-radius:var(--radius);
}
.apf-rhyme-title { font-weight:600; color:var(--pf-ink); margin:0 0 4px; }
.apf-rhyme-text { color:var(--pf-ink-2); line-height:1.55; margin:0; white-space:pre-line; }
.apf-rhyme.is-empty { padding:0; border:0; background:none; } /* 04-05 r3: pusty stan = pigulka .apf-soon zamiast pelnego panelu */

/* ---- CTA gry (§1.8) ---- */
.apf-game-cta {
  display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:16px;
  padding:24px;
  background:var(--tint-face-cream); border:1px solid var(--pf-line);
  border-radius:var(--radius-lg);
}
.apf-game-meta { flex:1; min-width:16ch; }
.apf-game-title { font:800 1.125rem/1.3 var(--font-display); color:var(--pf-ink); margin:0 0 4px; }
.apf-game-note { color:var(--pf-ink-2); margin:0; }
.apf-game-cta.is-empty { display:block; padding:0; background:none; border:0; } /* 04-05 r4 (fix E): wrapper przezroczysty — mat daje wewnetrzny .apf-soon-tile */
.apf-game-cta.is-empty .apf-game-title {   /* 0,2,0 — pod-etykieta nazwy gry w kaflu wkrotce */
  font:700 .72rem/1 var(--font-body); letter-spacing:.06em; text-transform:uppercase;
  color:var(--pf-ink-3); margin:0;
}

/* ---- index dzialow (markup z 04-02: parts/platforma-dzialy.php) ---- */
.apf-dzialy-lede { max-width:60ch; }
/* 04-deslop: indeks dzialow pogrupowany overline'ami (taksonomia sidebara) */
.apf-dzialy-group { margin-top:32px; }
.apf-dzialy-group-h {
  margin:0 0 12px;
  font:700 .75rem/1 var(--font-body); text-transform:uppercase; letter-spacing:.08em;
  color:var(--pf-ink-3);
}
.apf-dzialy-group .apf-dzialy-grid { margin-top:0; }
.apf-dzialy-grid { display:grid; gap:16px; grid-template-columns:1fr; margin-top:24px; }
@media (min-width:560px) { .apf-dzialy-grid { grid-template-columns:repeat(2,minmax(0,1fr)); } }
@media (min-width:900px) { .apf-dzialy-grid { grid-template-columns:repeat(3,minmax(0,1fr)); } }
.apf-dzialy-grid .apf-dzial-card { display:block; margin-bottom:0; text-decoration:none; transition:border-color .18s var(--ease); }
.apf-dzialy-grid .apf-dzial-card:hover { border-color:var(--pf-line-2); }
.apf-dzialy-grid .apf-dzial-card:focus-visible { outline:3px solid var(--pf-ink); outline-offset:2px; }
.apf-dzial-label { font:800 1.125rem/1.3 var(--font-display); color:var(--pf-ink); margin:0 0 4px; }
.apf-dzial-meta { color:var(--pf-ink-3); font-size:.85rem; margin:0; font-variant-numeric:tabular-nums; }

/* ============================================================
   r1 po panelu sedziow (2026-07-05): fixy craft/UX/anti-slop.
   Kazda regula podpisana zarzutem, ktory zamyka.
   ============================================================ */
/* s3: numeracja 01..27 na kaflach indeksu — podpis marki (motyw z piosenek) */
.apf-dzial-no {
  display:block; margin-bottom:6px;
  font:800 .72rem/1 var(--font-display); letter-spacing:.12em;
  color:var(--face); font-variant-numeric:tabular-nums;
}
/* s1: gra na mobile lamala trzy osie — pelny stack, CTA na cala szerokosc */
@media (max-width:767.98px) {
  .apf-game-cta { flex-direction:column; align-items:stretch; }
  .apf-game-cta .apf-cta { width:100%; text-align:center; }
}
/* s2: 30+ kart w jednej kolumnie — chipy filtrow lepkie na mobile */
@media (max-width:1023.98px) {
  .apf-filter-chips {
    position:sticky; top:0; z-index:20;
    background:var(--pf-cream); padding:10px 0; margin-bottom:6px;
    box-shadow:0 8px 12px -12px rgba(0,0,0,.18);
  }
}
/* s1 (rezerwa): brand w belce mobilnej; desktop ma brand w sidebarze */
.apf-topbar-brand { display:none; text-decoration:none; font:800 1rem/1.1 var(--font-display); color:var(--pf-ink); }
.apf-topbar-brand .lo-dot, .apf-topbar-brand .lo-tld { color:var(--pf-ink-3); }
@media (max-width:1023.98px) { .apf-topbar-brand { display:block; } }
/* s3: miniatura bez szarego panelu wewnetrznego (karta-w-karcie x3) */
.apf-ts-thumb { background:var(--pf-surface); padding:10px; border-bottom:1px solid var(--pf-line); }
/* s3: wierszyki-empty czysto typograficznie (zamiast kafla zegar-w-kolku) */
.apf-rhyme.is-empty { background:none; border:0; padding:0; box-shadow:none; }
.apf-rhyme-soon { margin:0; color:var(--pf-ink-3); font-size:.95rem; line-height:1.55; }
/* s1: dashboard >=1024 — prawa polowa ekranu byla pusta; dwie kolumny */
@media (min-width:1024px) {
  .apf-dashboard { display:grid; grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr); column-gap:48px; align-items:start; }
  .apf-dashboard .apf-dash-head { grid-column:1 / -1; }
  /* F6.2 (06.2-01, B par.2.1): dwa wrappery kolumn zamiast zonglerki grid-row
     na sekcjach (.apf-continue/.apf-downloads/.apf-news WYPADLY z markupu). */
  .apf-col-main  { grid-column:1; min-width:0; }
  .apf-col-aside { grid-column:2; min-width:0; }
}

/* ============ r2 po drugim panelu (7.5/7.5/7.5) ============ */
/* r2 anti-slop: sciana 17+ terakotowych "Pobierz" lamala 60/30/10 — na kaflach
   gridu wariant cichy (terakota tylko tekstem), pelny button zostaje przy
   hero/Zagraj/kasie. */
body.ap-platforma .apf-ts-card .apf-cta {
  background:none; color:var(--face);
  border:1px solid var(--pf-line-2);
  box-shadow:none;
}
.apf-ts-card .apf-cta:hover { background:var(--tint-face-cream); border-color:var(--face); color:var(--face-hover); }
/* r2 craft: checkbox filmu w listwie zamiast luzem miedzy sekcjami */
.apf-video-done {
  display:flex; align-items:center; justify-content:space-between; gap:12px;
  margin-top:10px; padding:10px 16px;
  background:var(--pf-surface); border:1px solid var(--pf-line);
  border-radius:var(--radius);
}
.apf-video-done-label { font:600 .9rem/1.4 var(--font-body); color:var(--pf-ink-2); min-width:0; }
/* r2: kafel kompletnego dzialu wyroznia sie zawartoscia, nie krzykiem */
.apf-dzial-card.is-complete { border-color:var(--face); }
.apf-dzial-complete {
  display:inline-block; margin:0 0 4px;
  font:700 .68rem/1 var(--font-body); text-transform:uppercase; letter-spacing:.08em;
  color:var(--pf-success);
}
/* r2 anti-slop: numer grupy przy overline indeksu (motyw 01/02) */
.apf-dzialy-group-no { color:var(--face); margin-right:8px; font-variant-numeric:tabular-nums; }
/* F6.2 (06.2-01): reguly doc-carda NA DASHBOARDZIE osierocone (sekcja
   .apf-downloads wypadla z markupu) — usuniete; generyczny .apf-doc-card
   zyje dalej w dzialach. */

/* ---- community: feed + komentarze (zalazek F6, 2026-07-05) ---- */
.apf-forum { max-width:760px; }
.apf-feed { list-style:none; margin:24px 0 0; padding:0; display:flex; flex-direction:column; gap:16px; }
.apf-feed-card {
  background:var(--pf-surface); border:1px solid var(--pf-line);
  border-radius:calc(var(--radius) + 4px); padding:20px 22px;
  box-shadow:0 1px 2px rgba(0,0,0,.04);
}
.apf-feed-meta { display:flex; align-items:center; gap:10px; margin:0 0 10px; color:var(--pf-ink-3); font-size:.85rem; }
.apf-feed-meta strong { color:var(--pf-ink); font-weight:700; }
.apf-feed-title { margin:0 0 8px; font:800 1.15rem/1.3 var(--font-display); }
.apf-feed-title a { color:var(--pf-ink); text-decoration:none; }
.apf-feed-title a:hover { color:var(--face); }
.apf-feed-excerpt, .apf-feed-content { color:var(--pf-ink-2); }
.apf-feed-excerpt p, .apf-feed-content p { margin:0 0 .6rem; }
.apf-feed-more { color:var(--face); font:700 .9rem/1 var(--font-body); text-decoration:none; }
.apf-feed-more:hover { text-decoration:underline; text-underline-offset:2px; }
.apf-feed-single h1.apf-feed-title { font-size:1.5rem; margin-bottom:10px; }
.apf-feed-empty p { margin:0 0 .4rem; color:var(--pf-ink-2); }
.apf-comments-n { color:var(--pf-ink-3); font-weight:600; font-size:.9em; }
.apf-comment-list { list-style:none; margin:0 0 16px; padding:0; display:flex; flex-direction:column; gap:14px; }
.apf-comment { display:flex; gap:12px; }
.apf-comment-ava {
  flex:none; display:grid; place-items:center;
  width:34px; height:34px; border-radius:50%;
  background:var(--tint-face); color:var(--face);
  font:800 .9rem/1 var(--font-display);
}
.apf-comment-body {
  min-width:0; flex:1;
  background:var(--pf-surface); border:1px solid var(--pf-line);
  border-radius:var(--radius); padding:10px 14px;
}
.apf-comment-meta { margin:0 0 4px; display:flex; align-items:baseline; gap:10px; font-size:.85rem; color:var(--pf-ink-3); }
.apf-comment-meta strong { color:var(--pf-ink); }
.apf-comment-body p { margin:0 0 .5rem; color:var(--pf-ink-2); }
.apf-comment-body p:last-child { margin-bottom:0; }
.apf-comments-empty { color:var(--pf-ink-3); }
.apf-comment-form { display:flex; flex-direction:column; gap:10px; align-items:flex-start; margin-top:14px; }
.apf-comment-form textarea {
  width:100%; min-height:76px; resize:vertical;
  border:1px solid var(--pf-line-2); border-radius:var(--radius);
  padding:10px 14px; font:500 .95rem/1.5 var(--font-body);
  color:var(--pf-ink); background:var(--pf-surface);
}
.apf-comment-form textarea:focus { outline:3px solid var(--pf-ink); outline-offset:-1px; }
.apf-comment-form .apf-cta, body.ap-platforma button.apf-cta { border:0; cursor:pointer; }

/* ---- taste-pass (skill design-taste-frontend v1, 2026-07-05):
   tactile :active na wszystkim klikalnym (fizyczne "wcisniecie" zamiast
   martwego kliku) + lift kafli indeksu jak ts-card (jeden slownik ruchu);
   cienie tylko na klikalnych — zgodne z LOCKED research LMS ---- */
body.ap-platforma .apf-cta:active { transform:translateY(0) scale(.98); }
.apf-dzialy-grid .apf-dzial-card {
  transition:transform .18s var(--ease), box-shadow .18s var(--ease), border-color .18s var(--ease);
}
.apf-dzialy-grid .apf-dzial-card:hover { transform:translateY(-2px); box-shadow:0 4px 12px rgba(0,0,0,.06); }
.apf-dzialy-grid .apf-dzial-card:active { transform:translateY(0) scale(.99); }
.apf-chip:active { transform:scale(.96); }
.apf-nav-item:active { transform:scale(.98); }
.apf-video-thumb:active .apf-video-play,
.dzial-songs .song-thumb:active .song-play { transform:translate(-50%,-50%) scale(.94); }

/* ==== METODYKA (F5) ==== */
/* 05-02: przewodnik po ksiazce (strona /platforma/metodyka/). Scope: body.ap-platforma
   .apf-metodyka. REUSE: .apf-cta (+cichy wariant na linku dzialu), .apf-dzial-crumb,
   .apf-lp-eyebrow, .apf-soon, .apf-nav-chevron. Zero nowych tokenow, zero zieleni;
   terakota TYLKO: CTA pobierania, cue okladki, numery 01-04 i 01-03 (przygaszone .78), hover linku dzialu.
   Reduced-motion: globalna regula body.ap-platforma * (l.202-205) obejmuje ten blok. */

body.ap-platforma .apf-metodyka-hero { margin-top:16px; display:grid; gap:32px; align-items:center; }
body.ap-platforma .apf-metodyka-toc,
body.ap-platforma .apf-metodyka-quote,
body.ap-platforma .apf-metodyka-bridge,
body.ap-platforma .apf-metodyka-start,
body.ap-platforma .apf-metodyka-cta-band { margin:48px 0 0; }

/* okladka (panel R2 bramy): "jak ksiazka" — passe-partout + perspektywa rotateY(-5deg),
   grzbiet 5px gradient, cien WARM na grafice; ZERO pigulki (CTA tylko hero+band),
   aria-label na <a> zostaje; hover: rotateY(0) + dotychczasowy lift karty */
body.ap-platforma .apf-metodyka-cover {
  display:block; padding:14px;
  border-radius:var(--radius);
  border:1px solid var(--pf-line); background:var(--pf-surface);
  box-shadow:0 1px 3px rgba(40,30,20,.08), 0 12px 32px rgba(40,30,20,.12);
  transition:transform .18s var(--ease), box-shadow .18s var(--ease);
}
body.ap-platforma .apf-metodyka-book {
  display:block; position:relative;
  transform:perspective(1200px) rotateY(-5deg);
  transition:transform .18s var(--ease);
}
body.ap-platforma .apf-metodyka-book::before {
  content:""; position:absolute; top:0; bottom:0; left:0; width:5px;
  background:linear-gradient(90deg, rgba(40,30,20,.20), rgba(40,30,20,0));
  border-radius:10px 0 0 10px; pointer-events:none;
}
body.ap-platforma .apf-metodyka-cover img {
  display:block; width:100%; height:auto; border-radius:10px;
  box-shadow:0 24px 48px -12px rgba(40,30,20,.28), 0 6px 14px rgba(40,30,20,.12);
}
body.ap-platforma .apf-metodyka-cover:hover { transform:translateY(-2px); box-shadow:0 2px 6px rgba(40,30,20,.10), 0 18px 44px rgba(40,30,20,.16); }
body.ap-platforma .apf-metodyka-cover:hover .apf-metodyka-book { transform:perspective(1200px) rotateY(0); }
/* post-panel polish: mikrotekst afordancji pod karta (R1/R2 zdejmuja pigulke, R3-A brak sygnalu) */
body.ap-platforma .apf-metodyka-cover-wrap { min-width:0; }
body.ap-platforma .apf-metodyka-cover-hint { margin:10px 0 0; text-align:center; font-size:.78rem; color:var(--pf-ink-3); }
body.ap-platforma .apf-metodyka-cover:focus-visible { outline:3px solid var(--pf-ink); outline-offset:3px; }
body.ap-platforma .apf-metodyka-cover:active { transform:translateY(0) scale(.99); }

/* hero: tekst */
body.ap-platforma .apf-metodyka-byline,
body.ap-platforma .apf-metodyka-meta { margin:0 0 4px; font-size:.85rem; color:var(--pf-ink-3); font-variant-numeric:tabular-nums; }
body.ap-platforma .apf-metodyka-support { margin:12px 0 24px; color:var(--pf-ink-2); }

/* toc: wiersze z hairline, numer terakota, bez boksow */
body.ap-platforma .apf-metodyka-chapters { list-style:none; margin:16px 0 0; padding:0; max-width:760px; }
body.ap-platforma .apf-metodyka-chapter { display:flex; gap:16px; padding:16px 0; border-bottom:1px solid var(--pf-line); }
body.ap-platforma .apf-metodyka-chapter:last-child { border-bottom:none; }
body.ap-platforma .apf-metodyka-ch-no {
  flex:0 0 40px; padding-top:5px;
  font:800 .72rem/1 var(--font-display); letter-spacing:.12em;
  color:rgba(166,74,27,.78); font-variant-numeric:tabular-nums;
}
body.ap-platforma .apf-metodyka-ch-main { flex:1; min-width:0; }
body.ap-platforma .apf-metodyka-ch-head { display:flex; align-items:baseline; justify-content:space-between; gap:12px; margin:0; }
body.ap-platforma .apf-metodyka-ch-title { color:var(--pf-ink); font-weight:600; }
body.ap-platforma .apf-metodyka-ch-meta { color:var(--pf-ink-3); font-size:.85rem; white-space:nowrap; font-variant-numeric:tabular-nums; }
body.ap-platforma .apf-metodyka-ch-desc { margin:4px 0 0; color:var(--pf-ink-2); }

/* pull-quote: panel tint, BEZ side-stripe */
body.ap-platforma .apf-metodyka-quote {
  position:relative; max-width:640px;
  background:var(--tint-face-cream); border:1px solid var(--pf-line);
  border-radius:var(--radius-lg); padding:24px;
  box-shadow:0 1px 3px rgba(40,30,20,.08), 0 12px 32px rgba(40,30,20,.12);
}
body.ap-platforma .apf-metodyka-quote::before {
  content:"\201E"; position:absolute; top:-30px; left:12px;
  font:800 4.5rem/1 var(--font-display); color:rgba(166,74,27,.14);
  pointer-events:none;
}
body.ap-platforma .apf-metodyka-quote blockquote { margin:0; color:var(--pf-ink); font-size:1.3rem; line-height:1.5; }
body.ap-platforma .apf-metodyka-quote figcaption { margin-top:8px; color:var(--pf-ink-3); font-size:.85rem; }

/* mostek: <details> z hairline, summary >= cel dotykowy */
body.ap-platforma .apf-metodyka-bridge-meta { margin:0 0 4px; color:var(--pf-ink-3); font-size:.85rem; font-variant-numeric:tabular-nums; }
body.ap-platforma .apf-metodyka-list { margin-top:16px; max-width:760px; }
body.ap-platforma .apf-metodyka-topic { border-bottom:1px solid rgba(0,0,0,.06); }
body.ap-platforma .apf-metodyka-sum {
  display:flex; align-items:center; gap:8px;
  padding:18px 0; min-height:44px; cursor:pointer; list-style:none;
  transition:background .18s var(--ease);
}
body.ap-platforma .apf-metodyka-sum:hover { background:rgba(166,74,27,.04); }
body.ap-platforma .apf-metodyka-sum::-webkit-details-marker { display:none; }
body.ap-platforma .apf-metodyka-sum:focus-visible { outline:3px solid var(--pf-ink); outline-offset:2px; }
body.ap-platforma .apf-metodyka-name { color:var(--pf-ink); font-weight:600; }
body.ap-platforma .apf-metodyka-count { margin-left:auto; color:var(--pf-ink-3); font-size:.85rem; white-space:nowrap; font-variant-numeric:tabular-nums; }
body.ap-platforma .apf-metodyka-sum .apf-nav-chevron { flex:none; }
body.ap-platforma .apf-metodyka-topic[open] .apf-nav-chevron { transform:rotate(180deg); }
body.ap-platforma .apf-metodyka-panel {
  margin:0 0 14px; padding:12px 16px 16px;
  background:rgba(166,74,27,.035); border-radius:10px;
}
body.ap-platforma .apf-metodyka-dzial-link {
  background:none; color:var(--face);
  border:1px solid var(--pf-line-2); box-shadow:none;
  min-height:38px; padding:0 1rem; font-size:.85rem;
  margin:0 8px 8px 0;
}
body.ap-platforma .apf-metodyka-dzial-link:hover { background:var(--tint-face-cream); border-color:var(--face); color:var(--face-hover); }
/* panel R2: cicha etykieta rozdziela klikalne "Otworz dzial" od informacyjnego spisu lekcji */
body.ap-platforma .apf-metodyka-panel-label {
  margin:14px 0 0; font:800 .72rem/1 var(--font-display);
  letter-spacing:.12em; text-transform:uppercase; color:var(--pf-ink-2);
}
body.ap-platforma .apf-metodyka-lekcje {
  list-style:none; margin:12px 0 0; padding:0;
  display:flex; flex-wrap:wrap; gap:8px 24px;
  color:var(--pf-ink-2); font-size:.9rem; font-variant-numeric:tabular-nums;
}
/* panel R1: etykiety lekcji = czysty tekst, bez tla/ramki (nie maja wygladac klikalnie) */
body.ap-platforma .apf-metodyka-lekcje li { background:none; border:0; padding:0; }

/* kroki: typograficzne, bez boksow; numer terakota */
body.ap-platforma .apf-metodyka-steps { list-style:none; margin:16px 0 0; padding:0; display:grid; gap:24px; }
body.ap-platforma .apf-metodyka-step-no { display:block; font:800 clamp(1.5rem,3vw,2rem)/1 var(--font-display); color:rgba(166,74,27,.78); font-variant-numeric:tabular-nums; }
body.ap-platforma .apf-metodyka-step-title { margin:8px 0 4px; font:800 1.125rem/1.3 var(--font-display); color:var(--pf-ink); }
body.ap-platforma .apf-metodyka-step-desc { margin:0; color:var(--pf-ink-2); }

/* band zamykajacy: panel tint jak apf-game-cta */
body.ap-platforma .apf-metodyka-cta-band {
  display:flex; align-items:center; justify-content:space-between; gap:16px;
  background:var(--tint-face-cream); border:1px solid var(--pf-line);
  border-radius:var(--radius-lg); padding:24px;
  box-shadow:0 1px 3px rgba(40,30,20,.08), 0 12px 32px rgba(40,30,20,.12);
}
body.ap-platforma .apf-metodyka-band-title { margin:0; color:var(--pf-ink); font-weight:600; font-size:1.125rem; }

@media (min-width:720px) {
  body.ap-platforma .apf-metodyka-hero { grid-template-columns:minmax(240px,320px) 1fr; }
  body.ap-platforma .apf-metodyka-steps { grid-template-columns:repeat(3,1fr); }
}
/* post-panel polish: 2 kolumny mostka na szerokim desktopie (zbiezny glos 3 sedziow z 2 rund) */
@media (min-width:1024px) {
  body.ap-platforma .apf-metodyka-list { max-width:none; column-count:2; column-gap:32px; }
  body.ap-platforma .apf-metodyka-topic { break-inside:avoid; }
}
@media (max-width:719.98px) {
  body.ap-platforma .apf-metodyka-cover { width:100%; max-width:260px; margin:0 auto; }
}
@media (max-width:559.98px) {
  body.ap-platforma .apf-metodyka-dl { width:100%; }
  body.ap-platforma .apf-metodyka-lekcje { flex-direction:column; gap:6px; }
  body.ap-platforma .apf-metodyka-cta-band { flex-direction:column; align-items:stretch; }
  body.ap-platforma .apf-metodyka-cta-band .apf-cta { width:100%; }
}

/* ==================== F6 (06-03): forum - minimum funkcjonalne ====================
   Honeypot MUSI byc poza ekranem od dnia 1 (inaczej pole lapie ludzi -> 400);
   "Zglos wpis" = maly link --pf-ink-3 przy meta wpisu (spec REPORT planu 06-03).
   Pelny polish composera/watku robi 06-05. */
body.ap-platforma .apf-hp { position:absolute; left:-9999px; }
body.ap-platforma .apf-forum-report { display:inline-block; margin:4px 0 0; }
body.ap-platforma .apf-forum-report-btn { background:none; border:0; padding:0; color:var(--pf-ink-3); font:inherit; font-size:.82rem; cursor:pointer; text-decoration:underline; text-underline-offset:2px; }
body.ap-platforma .apf-forum-report-btn:hover { color:var(--pf-ink); }
body.ap-platforma .apf-forum-report-btn:focus-visible { outline:3px solid var(--face); outline-offset:2px; }
body.ap-platforma .apf-forum-op-reply { display:inline-block; margin:4px 18px 0 0; color:var(--pf-ink); font-size:.9rem; font-weight:600; text-decoration:none; } /* FIX UAT 06.1: afordancja odpowiedzi pod OP - mocniejsza od wyciszonego "Zglos wpis" */
body.ap-platforma .apf-forum-op-reply:hover { text-decoration:underline; text-underline-offset:2px; }
body.ap-platforma .apf-forum-op-reply:focus-visible { outline:3px solid var(--face); outline-offset:2px; }

/* ==================== F6: forum - awatar + profil (06-04) ====================
   Awatar kanoniczny .apf-comment-ava (UI-SPEC par. 3.8): img = to samo kolo co
   span-inicjal (object-fit cover), rozmiary --sm/--lg/--xl wspolne dla obu.
   Profil (par. 2.6/3.7): file-btn jak sekundarny przycisk, natywny input ukryty
   (.screen-reader-text) ale focusowalny - ring na labelu; "Usun awatar" =
   link-danger (akcja odwracalna, RODO). Wylacznie tokeny, zero nowych hexow. */
body.ap-platforma img.apf-comment-ava { object-fit:cover; border-radius:50%; background:var(--tint-face); }
body.ap-platforma .apf-comment-ava--sm { width:28px; height:28px; font-size:.75rem; }
body.ap-platforma .apf-comment-ava--lg { width:48px; height:48px; font-size:1.1rem; }
body.ap-platforma .apf-comment-ava--xl { width:96px; height:96px; font-size:2rem; }
body.ap-platforma .apf-forum-profil { display:flex; flex-direction:column; gap:16px; align-items:flex-start; max-width:640px; }
body.ap-platforma .apf-avatar-preview { display:flex; }
body.ap-platforma .apf-avatar-file { display:flex; flex-direction:column; gap:6px; align-items:flex-start; }
body.ap-platforma .apf-file-btn {
  display:inline-flex; align-items:center; min-height:var(--pf-tap); padding:0 1.1rem;
  border:1px solid var(--pf-line-2); border-radius:var(--radius);
  background:var(--pf-surface); color:var(--pf-ink);
  font:700 .95rem/1 var(--font-body); cursor:pointer;
}
body.ap-platforma .apf-file-btn:hover { background:var(--tint-face-cream); }
body.ap-platforma .apf-file-btn:focus-within { outline:3px solid var(--face); outline-offset:2px; }
body.ap-platforma .apf-forum-hint { margin:0; color:var(--pf-ink-3); font-size:.85rem; }
body.ap-platforma .apf-avatar-name { margin:0; color:var(--pf-ink-2); font-size:.85rem; min-height:1em; }
body.ap-platforma .apf-avatar-actions { display:flex; align-items:center; gap:18px; }
body.ap-platforma .apf-forum-remove { background:none; border:0; padding:0; color:var(--pf-danger); font:inherit; font-size:.9rem; cursor:pointer; }
body.ap-platforma .apf-forum-remove:hover { text-decoration:underline; text-underline-offset:2px; }
body.ap-platforma .apf-forum-remove:focus-visible { outline:3px solid var(--face); outline-offset:2px; }
body.ap-platforma .apf-forum-okbaner { border:1px solid var(--pf-success); border-radius:var(--radius); background:var(--pf-surface); padding:10px 14px; color:var(--pf-success); font-weight:600; } /* FIX UAT 06.1: sukces = zielen checkmarkow karty (--pf-success); lustrzany idiom bladbanera, AA na surface */
body.ap-platforma .apf-forum-bladbaner { border:1px solid var(--pf-danger); border-radius:var(--radius); background:var(--pf-surface); padding:10px 14px; color:var(--pf-danger); }
body.ap-platforma .apf-avatar-next { margin:2px 0 0; color:var(--pf-ink-3); font-size:.9rem; } /* FIX UAT 06.1: ciche prowadzenie po sukcesie awatara */
body.ap-platforma .apf-avatar-next a { color:var(--face); font-weight:700; text-decoration:none; }
body.ap-platforma .apf-avatar-next a:hover { text-decoration:underline; text-underline-offset:2px; }
body.ap-platforma .apf-avatar-next a:focus-visible { outline:3px solid var(--pf-ink); outline-offset:2px; }

/* ==================== F6: forum — widoki (06-05) ====================
   Namespace .apf-forum-* na tokenach skin D (zero nowych hexow; rgba-cienie
   wprost z UI-SPEC par. 3.1). Karty = reuse .apf-feed-card W MARKUPIE (zero
   kopiowania regul). Hierarchie niesie typografia: terakota wylacznie na
   akcje/hover/focus/biezaca strone pagera. Reduced-motion dziedziczy
   globalny wygaszacz transition (l.202). */

/* naglowek widoku: h1 + lede po lewej, CTA przy linii bazowej h1 */
body.ap-platforma .apf-forum-head { display:flex; align-items:flex-start; justify-content:space-between; gap:24px; margin:0 0 22px; }
body.ap-platforma .apf-forum-head-main { flex:1; min-width:0; }
body.ap-platforma .apf-forum-head-main h1 { margin-bottom:8px; }
body.ap-platforma .apf-forum-head-main .apf-dzialy-lede { margin:0; }
body.ap-platforma .apf-forum-head-cta { flex:none; margin-top:4px; }
body.ap-platforma .apf-forum-badge-row { margin:0 0 10px; }

/* wiersz kategorii (landing) — caly wiersz jednym celem dotykowym */
body.ap-platforma .apf-forum-cats { list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:14px; }
body.ap-platforma .apf-forum-cat-link {
  display:flex; align-items:center; gap:24px; min-height:var(--pf-tap);
  text-decoration:none; color:inherit;
  transition:transform .18s var(--ease), box-shadow .18s var(--ease);
}
/* panel r1 (B+C): tytul karty ZAWSZE ink — zrzuty lapaly :hover (mysz Playwrighta
   nad karta po loginie), nie :visited (zero regul :visited w pliku); hover = lift
   + ramka terakotowa BEZ zmiany koloru tytulu; :visited utwardzone na ink. */
body.ap-platforma .apf-forum-cat-link:hover { transform:translateY(-2px); box-shadow:0 4px 12px rgba(0,0,0,.06); border-color:var(--face); }
body.ap-platforma .apf-forum-cat-link, body.ap-platforma .apf-forum-cat-link:visited { color:var(--pf-ink); }
body.ap-platforma .apf-forum-cat-link:focus-visible { outline:3px solid var(--face); outline-offset:2px; border-radius:calc(var(--radius) + 4px); }
body.ap-platforma .apf-forum-cat-link:active { transform:translateY(-1px); }
body.ap-platforma .apf-forum-cat-main { flex:1; min-width:0; }
body.ap-platforma .apf-forum-cat-title { margin:0 0 4px; font:800 1.15rem/1.3 var(--font-display); color:var(--pf-ink); transition:color .18s var(--ease); }
body.ap-platforma .apf-forum-cat-desc { margin:0; color:var(--pf-ink-2); font-size:.95rem; line-height:1.5; max-width:62ch; }
body.ap-platforma .apf-forum-cat-meta { flex:none; display:flex; flex-direction:column; align-items:flex-end; gap:8px; text-align:right; }
body.ap-platforma .apf-forum-cat-count { color:var(--pf-ink-3); font-size:.85rem; }
body.ap-platforma .apf-forum-cat-count strong { color:var(--pf-ink); font-weight:700; font-variant-numeric:tabular-nums; }
body.ap-platforma .apf-forum-cat-last { display:flex; align-items:center; gap:8px; color:var(--pf-ink-3); font-size:.85rem; }
body.ap-platforma .apf-forum-cat-last time { white-space:nowrap; }

/* badge (Ogloszenia, "Prowadzacy platforme") — pigulka BEZ akcentu */
body.ap-platforma .apf-forum-badge {
  display:inline-flex; align-items:center; padding:4px 10px;
  border:1px solid var(--pf-line); border-radius:99px;
  background:var(--pf-surface-2); color:var(--pf-ink-3);
  font:600 .75rem/1.2 var(--font-body); white-space:nowrap; vertical-align:middle;
}
body.ap-platforma .apf-forum-cat-title .apf-forum-badge { margin-left:8px; }

/* Ostatnio na forum */
body.ap-platforma .apf-forum-recent { margin-top:36px; }
body.ap-platforma .apf-forum-recent-list { list-style:none; margin:0; padding:0; display:flex; flex-direction:column; }
body.ap-platforma .apf-forum-recent-item { display:flex; align-items:center; gap:10px; min-height:var(--pf-tap); padding:4px 0; }
body.ap-platforma .apf-forum-recent-title {
  flex:1; min-width:0; color:var(--pf-ink); font-weight:600; font-size:.95rem;
  text-decoration:none; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
body.ap-platforma .apf-forum-recent-title:hover { color:var(--face); text-decoration:underline; text-underline-offset:2px; }
body.ap-platforma .apf-forum-recent-title:focus-visible { outline:3px solid var(--face); outline-offset:2px; border-radius:4px; }
body.ap-platforma .apf-forum-recent-meta { flex:none; color:var(--pf-ink-3); font-size:.85rem; white-space:nowrap; }

/* wiersz watku (widok kategorii) */
body.ap-platforma .apf-forum-threads { list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:12px; }
body.ap-platforma .apf-forum-thread-link {
  display:flex; align-items:center; gap:14px; min-height:var(--pf-tap);
  text-decoration:none; color:inherit;
  transition:transform .18s var(--ease), box-shadow .18s var(--ease);
}
body.ap-platforma .apf-forum-thread-link:hover { transform:translateY(-2px); box-shadow:0 4px 12px rgba(0,0,0,.06); }
body.ap-platforma .apf-forum-thread-link:hover .apf-forum-thread-title { color:var(--face); }
body.ap-platforma .apf-forum-thread-link:focus-visible { outline:3px solid var(--face); outline-offset:2px; border-radius:calc(var(--radius) + 4px); }
body.ap-platforma .apf-forum-thread-link:active { transform:translateY(-1px); }
body.ap-platforma .apf-forum-thread-main { flex:1; min-width:0; display:flex; flex-direction:column; gap:2px; }
body.ap-platforma .apf-forum-thread-title {
  color:var(--pf-ink); font:700 1.05rem/1.35 var(--font-body);
  display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical;
  overflow:hidden; text-overflow:ellipsis; transition:color .18s var(--ease);
}
body.ap-platforma .apf-forum-thread-meta { color:var(--pf-ink-3); font-size:.85rem; }
body.ap-platforma .apf-forum-thread-meta time { white-space:nowrap; }
body.ap-platforma .apf-forum-thread-replies { flex:none; color:var(--pf-ink-3); font-size:.85rem; white-space:nowrap; }
body.ap-platforma .apf-forum-thread-replies strong { color:var(--pf-ink); font-weight:700; font-variant-numeric:tabular-nums; }

/* post otwierajacy — wyroznik Michala = PELNY border 1px --face + badge
   (taste v2 NADPISUJE par. 5.6: side-stripe zakazany; tint tla odrzucony,
   bo kolidowalby z .apf-forum-pending na --tint-face-cream) */
body.ap-platforma .apf-forum-op { margin:0 0 28px; }
body.ap-platforma .apf-forum-op--official { border-color:var(--face); background:var(--tint-official); } /* r2 panelu (B, squint): tint tla do borderu+badge; side-stripe nadal ZAKAZ */
body.ap-platforma .apf-forum-op-head { display:flex; align-items:center; gap:12px; margin:0 0 12px; }
body.ap-platforma .apf-forum-op-meta { display:flex; flex-wrap:wrap; align-items:baseline; gap:2px 10px; margin:0; }
body.ap-platforma .apf-forum-op-meta strong { color:var(--pf-ink); font-weight:700; }
body.ap-platforma .apf-forum-op-meta time { flex-basis:100%; color:var(--pf-ink-3); font-size:.85rem; }
body.ap-platforma .apf-forum-op-body { color:var(--pf-ink-2); font-size:1rem; line-height:1.6; max-width:68ch; overflow-wrap:anywhere; }
body.ap-platforma .apf-forum-op-body p { margin:0 0 .7rem; }
body.ap-platforma .apf-comment-body { overflow-wrap:anywhere; }

/* kotwica mobilna do composera odpowiedzi (desktop zbedna — composer widac) */
body.ap-platforma .apf-forum-jump {
  display:none; align-items:center; min-height:var(--pf-tap);
  color:var(--face); font:700 .9rem/1 var(--font-body); text-decoration:none;
  margin:-4px 0 10px;
}
body.ap-platforma .apf-forum-jump:hover { text-decoration:underline; text-underline-offset:2px; }
body.ap-platforma .apf-forum-jump:focus-visible { outline:3px solid var(--face); outline-offset:2px; border-radius:4px; }

/* composer nowego watku */
body.ap-platforma .apf-forum-composer { display:flex; flex-direction:column; gap:16px; max-width:640px; margin:20px auto 0; }
body.ap-platforma .apf-field { display:flex; flex-direction:column; }
body.ap-platforma .apf-field label { color:var(--pf-ink); font-weight:600; font-size:.9rem; margin-bottom:6px; }
body.ap-platforma .apf-field select,
body.ap-platforma .apf-field input,
body.ap-platforma .apf-field textarea {
  width:100%; border:1px solid var(--pf-line-2); border-radius:var(--radius);
  padding:10px 14px; background:var(--pf-surface); color:var(--pf-ink);
  font:500 .95rem/1.5 var(--font-body);
}
body.ap-platforma .apf-field select, body.ap-platforma .apf-field input { min-height:var(--pf-tap); }
body.ap-platforma .apf-field select:focus,
body.ap-platforma .apf-field input:focus,
body.ap-platforma .apf-field textarea:focus { outline:3px solid var(--pf-ink); outline-offset:-1px; }
body.ap-platforma .apf-field-error { margin:0 0 6px; color:var(--pf-danger); font-size:.9rem; font-weight:600; }
body.ap-platforma .apf-field.is-invalid select,
body.ap-platforma .apf-field.is-invalid input,
body.ap-platforma .apf-field.is-invalid textarea { border-color:var(--pf-danger); }
body.ap-platforma .apf-forum-composer-actions { display:flex; align-items:center; gap:18px; }
body.ap-platforma .apf-forum-cancel { display:inline-flex; align-items:center; min-height:var(--pf-tap); color:var(--pf-ink-3); font-size:.95rem; text-decoration:none; }
body.ap-platforma .apf-forum-cancel:hover { color:var(--pf-ink); text-decoration:underline; text-underline-offset:2px; }
body.ap-platforma .apf-forum-cancel:focus-visible { outline:3px solid var(--face); outline-offset:2px; border-radius:4px; }
body.ap-platforma form[aria-busy="true"] .apf-cta { opacity:.6; cursor:not-allowed; }

/* stan "czeka na akceptacje" — kolejka, nie blad (zero czerwieni) */
body.ap-platforma .apf-forum-pending {
  display:flex; align-items:flex-start; gap:10px; margin:0 0 18px;
  border:1px solid var(--pf-line); border-radius:var(--radius);
  background:var(--tint-face-cream); color:var(--pf-ink-2); padding:12px 16px;
}
body.ap-platforma .apf-forum-pending svg { flex:none; margin-top:3px; color:var(--pf-ink-3); }

/* paginacja */
body.ap-platforma .apf-forum-pager { display:flex; flex-wrap:wrap; gap:8px; margin-top:24px; }
body.ap-platforma .apf-forum-pager-link {
  display:inline-flex; align-items:center; justify-content:center;
  min-height:var(--pf-tap); min-width:var(--pf-tap); padding:0 14px;
  border:1px solid var(--pf-line); border-radius:var(--radius);
  background:var(--pf-surface); color:var(--pf-ink);
  font:600 .95rem/1 var(--font-body); text-decoration:none;
  font-variant-numeric:tabular-nums;
}
body.ap-platforma a.apf-forum-pager-link:hover { background:var(--tint-face-cream); }
body.ap-platforma .apf-forum-pager-link:focus-visible { outline:3px solid var(--face); outline-offset:2px; }
body.ap-platforma .apf-forum-pager-link.is-current { background:var(--face); border-color:var(--face); color:var(--face-ink); }

/* puste stany — trzymaja layout, niosa akcje; spot-ilustracja na cream */
body.ap-platforma .apf-forum-empty { display:flex; flex-direction:column; align-items:center; text-align:center; padding:28px 16px 8px; }
body.ap-platforma .apf-forum-empty-spot { width:168px; height:168px; margin:0 0 6px; border:1px solid var(--pf-line); border-radius:var(--radius); }
/* tlo ilustracji ma odcien o wlos chlodniejszy od cream — ramka-kafelek w
   jezyku kart platformy INTENCJONALIZUJE prostokat (squint-test 06-05;
   blend-mode odpada: lighten zjada rysunek, darken/multiply poglebia ducha) */
body.ap-platforma .apf-forum-empty-title { margin:10px 0 0; font:800 1.25rem/1.3 var(--font-display); color:var(--pf-ink); }
body.ap-platforma .apf-forum-empty-text { margin:8px 0 18px; color:var(--pf-ink-2); max-width:46ch; }
body.ap-platforma .apf-forum-empty--cicho { padding:20px 16px; }
body.ap-platforma .apf-forum-empty--cicho .apf-forum-empty-text { margin:0; }

/* breadcrumb: ostatni segment (tytul) nie rozpycha nawigacji */
body.ap-platforma .apf-forum-crumb-last {
  display:inline-block; max-width:min(56vw, 460px); vertical-align:bottom;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}

/* mobile 390: stosy, pelne szerokosci, tap >=44px, zero poziomego scrolla */
@media (max-width:767.98px) {
  body.ap-platforma .apf-forum-head { flex-direction:column; align-items:stretch; gap:14px; }
  body.ap-platforma .apf-forum-head-cta { width:100%; justify-content:center; margin-top:0; }
  body.ap-platforma .apf-forum-cat-link { flex-direction:column; align-items:stretch; gap:10px; }
  body.ap-platforma .apf-forum-cat-meta { align-items:flex-start; text-align:left; gap:6px; }
  body.ap-platforma .apf-forum-thread-link { flex-wrap:wrap; }
  body.ap-platforma .apf-forum-thread-main { flex-basis:calc(100% - 48px); }
  body.ap-platforma .apf-forum-thread-replies { flex-basis:100%; padding-left:48px; }
  body.ap-platforma .apf-forum-recent-item { flex-wrap:wrap; }
  body.ap-platforma .apf-forum-recent-title { white-space:normal; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; flex-basis:calc(100% - 38px); }
  body.ap-platforma .apf-forum-recent-meta { flex-basis:100%; padding-left:38px; white-space:normal; }
  body.ap-platforma .apf-forum-jump { display:inline-flex; }
  body.ap-platforma .apf-forum-composer { margin-top:12px; }
  body.ap-platforma .apf-forum-composer-actions { flex-direction:column; align-items:stretch; }
  body.ap-platforma .apf-forum-composer-actions .apf-cta { width:100%; justify-content:center; }
  body.ap-platforma .apf-forum-composer-actions .apf-forum-cancel { justify-content:center; }
  body.ap-platforma .apf-forum-empty-spot { width:148px; height:148px; }
}

/* ============ F6 r1 po panelu forum (8.5/7.5/8.4) ============ */
/* r1 wariant cichy CTA — USUNIETY w r2 (konsensus 3 sedziow, koniec wahadla).
   REGULA OSTATECZNA: dokladnie JEDEN solid "Nowy watek" na ekranie, w markupie
   (landing gorny; kategoria z watkami gorny; pusta kategoria tylko kontekstowy;
   watek zaden). Zero wariantow cichych w CSS. */
/* r1 (A): chevron klikalnosci na koncu karty kategorii (REUSE .apf-nav-chevron). */
body.ap-platforma .apf-forum-cat-link { position:relative; }
body.ap-platforma .apf-forum-cat-go { flex:none; display:flex; align-items:center; color:var(--pf-ink-3); }
body.ap-platforma .apf-forum-cat-go .apf-nav-chevron { transform:rotate(-90deg); }
/* r1 (B) kregoslup pionowy — od r2 realizowany WEWNATRZ kart odpowiedzi
   (awatar w karcie, padding-left karty == padding OP 22px) — lista bez wciecia. */
@media (max-width: 767.98px) {
  /* r1 (A): na dotyku chevron przy prawej krawedzi karty (stack kolumnowy); rezerwa pod chevron. */
  body.ap-platforma .apf-forum-cat-link { padding-right:44px; }
  body.ap-platforma .apf-forum-cat-go { position:absolute; right:16px; top:50%; transform:translateY(-50%); }
}

/* ============ F6 r2 po panelu forum (8.5/8.0/9.0) ============ */
/* r2 (B#5): awatar odpowiedzi WEWNATRZ karty — karta na li, body bez wlasnej
   ramki; padding-left 22px = padding OP -> kregoslup awatarow z r1 zachowany. */
body.ap-platforma .apf-forum .apf-comment { background:var(--pf-surface); border:1px solid var(--pf-line); border-radius:calc(var(--radius) + 4px); padding:14px 22px; box-shadow:0 1px 2px rgba(0,0,0,.04); }
body.ap-platforma .apf-forum .apf-comment-body { background:none; border:0; border-radius:0; padding:0; }
/* r2 (B#3): prawy region kart landingu — jednolite centrowanie w pionie. */
body.ap-platforma .apf-forum-cat-meta { justify-content:center; align-self:center; }
/* r2 (B#6): echo tintu wyroznika na karcie Ogloszen (spina system z watkiem). */
body.ap-platforma .apf-forum-cat-link--ogl { background:var(--tint-official); }
/* r2 (A): profil — uploader w wysrodkowanej karcie + statyczna tozsamosc nad nim. */
body.ap-platforma .apf-forum-profil { background:var(--pf-surface); border:1px solid var(--pf-line); border-radius:calc(var(--radius) + 4px); padding:22px; box-shadow:0 1px 2px rgba(0,0,0,.04); max-width:560px; margin:0 auto; align-items:stretch; }
body.ap-platforma .apf-forum-profil-who { margin:0; color:var(--pf-ink); }

/* ============ F6 r3 po panelu forum (8.5/7.5/8.5, plateau premium) ============ */
/* r3 (B#4): akcent podaza za autorytetem — inicjaly userek neutralne (taupe),
   prowadzacy na terakocie. Zdjecia-awatary bez zmian (bg pod spodem). */
body.ap-platforma .apf-comment-ava { background:var(--pf-surface-2); color:var(--pf-ink-2); }
body.ap-platforma .apf-comment-ava--official { background:var(--face); color:var(--face-ink); }
/* r3 (A#1): cue posta otwierajacego — mocniejsza ramka (line-2); official
   zostaje przy --face. BEZ etykiety "Pytanie" (watki bywaja nie-pytaniami). */
body.ap-platforma .apf-forum-op:not(.apf-forum-op--official) { border-color:var(--pf-line-2); }
/* r3 (B#5): biezacy okruch sentence-case + truncate ~40ch (CSS only). */
body.ap-platforma .apf-forum-crumb-last { text-transform:none; letter-spacing:normal; display:inline-block; max-width:40ch; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; vertical-align:bottom; }
/* r3 (B#2): karty kategorii — ujednolicona wysokosc, koniec roznic. */
body.ap-platforma .apf-forum-cat-link { min-height:104px; }
/* r3 (A#3): nudge pod lista watkow kategorii — link, nie solid (regula CTA). */
body.ap-platforma .apf-forum-nudge { margin:14px 0 0; color:var(--pf-ink-3); font-size:.9rem; }
body.ap-platforma .apf-forum-nudge a { color:var(--face); font-weight:700; text-decoration:none; }
body.ap-platforma .apf-forum-nudge a:hover { text-decoration:underline; text-underline-offset:2px; }
body.ap-platforma .apf-forum-nudge a:focus-visible { outline:3px solid var(--pf-ink); outline-offset:2px; }
body.ap-platforma .apf-forum-thread-cta { display:block; margin-top:4px; color:var(--face); font-size:.9rem; font-weight:700; } /* FIX UAT 06.1: afordancja kafla (kafel = jeden <a>, idiom nudge) */
body.ap-platforma .apf-forum-thread-link:hover .apf-forum-thread-cta,
body.ap-platforma .apf-forum-thread-link:focus-visible .apf-forum-thread-cta { text-decoration:underline; text-underline-offset:2px; }

/* ============ F6.1 pierwsze kroki (06.1-02, UI-SPEC §3.4) ============ */
/* Idiom .apf-doc-card (jedyny kafel z ramka na plaskim dashboardzie); WYLACZNIE
   istniejace tokeny --pf-* (zero nowych hexow). Zielen tylko w checkmarku. */
.apf-firststeps {
  background:var(--pf-surface); border:1px solid var(--pf-line);
  border-radius:calc(var(--radius) + 4px);            /* = 20px, idiom .apf-doc-card */
  padding:20px 24px; margin-bottom:48px;               /* rytm dashboardu; 32px @<768 */
}
@media (min-width:1024px) { .apf-dashboard .apf-firststeps { grid-column:1; } }
.apf-firststeps-head  { display:flex; align-items:baseline; gap:10px; }
.apf-firststeps-head h2 { margin:0; }                  /* skala h2 dziedziczona z platformy */
.apf-firststeps-count { color:var(--pf-ink-3); font-size:.85rem; font-variant-numeric:tabular-nums; }
.apf-firststeps-hideform { margin-left:auto; }
.apf-firststeps-hide  { background:none; border:0; cursor:pointer; padding:10px 8px;  /* tap ~44px */
                        color:var(--pf-ink-3); font:600 .85rem var(--font-body); text-decoration:underline; }
.apf-firststeps-hide:hover { color:var(--pf-ink); }
.apf-firststeps-list  { list-style:none; margin:8px 0 0; padding:0; }
.apf-firststeps-item + .apf-firststeps-item { border-top:1px solid var(--pf-line); }
.apf-firststeps-link  { display:flex; gap:12px; align-items:flex-start;
                        padding:12px 0; min-height:var(--pf-tap); text-decoration:none; }
.apf-firststeps-mark  { flex:none; width:24px; height:24px; border-radius:50%; margin-top:2px;
                        border:1.5px solid var(--pf-line-2); display:grid; place-items:center; }
.is-done .apf-firststeps-mark  { border-color:transparent; background:var(--pf-success-tint); color:var(--pf-success); }
.apf-firststeps-text  { display:flex; flex-direction:column; gap:2px; }
.apf-firststeps-title { color:var(--pf-ink); font-weight:600; }
.is-done .apf-firststeps-title { color:var(--pf-ink-3); }
.apf-firststeps-sub   { color:var(--pf-ink-3); font-size:.9rem; line-height:1.5; }
.apf-firststeps-link:hover .apf-firststeps-title { color:var(--face); }
/* Afordancja klikalnosci (panel r1, sedzia A): strzalka muted na koncu wiersza,
   link widoczny staly nie tylko na hover. Tokeny --pf-* only; .is-done bez strzalki. */
.apf-firststeps-item:not(.is-done) .apf-firststeps-link::after {
  content:"\2192"; margin-left:auto; align-self:center; flex:none;
  color:var(--pf-ink-3); font-size:1.1rem; line-height:1;
}
.apf-firststeps-item:not(.is-done) .apf-firststeps-link:hover::after { color:var(--face); }
.apf-firststeps-link:focus-visible, .apf-firststeps-hide:focus-visible
                      { outline:3px solid var(--face); outline-offset:2px; border-radius:8px; }
@media (max-width:767.98px) { .apf-firststeps { padding:16px; margin-bottom:32px; } }

/* ============ F6.2 (06.2-01): kokpit — linia poziomu + hero + postepy ============
   Kontrakt CSS: koncepcja-layout.md par.8 (wylacznie istniejace tokeny --pf-*,
   zero nowych hexow; licznik sidebara .apf-side-dzialy przy dawnym .apf-progress). */

/* ---- linia poziomu (B par.4) — typografia, nie plakietka ---- */
.apf-level { margin:4px 0 0; font-size:.95rem; line-height:1.5; color:var(--pf-ink-3);
             font-variant-numeric:tabular-nums; }
.apf-level b { font-weight:600; color:var(--pf-ink); }
.apf-level.is-new { display:inline; padding:2px 10px; border-radius:8px;
                    background:var(--tint-official);
                    -webkit-box-decoration-break:clone; box-decoration-break:clone; }
                    /* zakreslacz, nie badge; r2 panelu 6.2 (S2): clone = kazda linia
                       wlasne pociagniecie markera zamiast prostokata wokol 2 linii */
.apf-level-note { display:block; margin-top:2px; color:var(--pf-ink-2); }

/* ---- hero: Twoj nastepny krok (B par.3) — jedyny solidny CTA kokpitu ---- */
.apf-next { background:var(--tint-official); border:1px solid var(--pf-line);
            border-radius:calc(var(--radius) + 4px); padding:24px; margin-bottom:48px; }
.apf-next-overline { margin:0 0 10px; font:700 .75rem/1 var(--font-body);
                     text-transform:uppercase; letter-spacing:.08em; color:var(--pf-ink-3); }
.apf-next-done { display:inline-block; margin:0 0 4px; }  /* reszta idiomu: .apf-dzial-complete */
.apf-next p { max-width:52ch; }
.apf-next-alt { font-size:.9rem; color:var(--pf-ink-3); }         /* linia metodyki, stan swiezy */
.apf-next-alt a { color:var(--pf-ink-2); }
.apf-next .apf-cta { margin-top:8px; }
@media (max-width:767.98px) { .apf-next { padding:16px; margin-bottom:32px; } }
@media (max-width:479.98px) { .apf-next .apf-cta { width:100%; } }

/* ---- Twoje postepy (B par.5.1) — jedyna kreska = aktywny dzial ---- */
.apf-postep-active { display:flex; flex-wrap:wrap; align-items:center; gap:8px 16px;
                     min-height:var(--pf-tap); text-decoration:none; }
.apf-postep-label  { font-weight:600; color:var(--pf-ink); }
.apf-postep-active:hover .apf-postep-label { color:var(--face); }   /* idiom news-link */
.apf-postep-track  { flex:1 1 140px; max-width:320px; }             /* wewnatrz: reuse
                       .apf-dzial-progress-track (8px, --pf-success) bez zmian */
.apf-postep-track .apf-dzial-progress-track { display:block; }
.apf-postep-nums   { font-size:.85rem; color:var(--pf-ink-3); font-variant-numeric:tabular-nums;
                     white-space:nowrap; }
.apf-postep-line   { margin:10px 0 0; color:var(--pf-ink-2); font-variant-numeric:tabular-nums; }
.apf-postep-week   { margin:4px 0 0; font-size:.9rem; color:var(--pf-ink-3); }
.apf-postep-active:focus-visible { outline:3px solid var(--pf-ink); outline-offset:2px; } /* cream = ink-ring */

/* ================= F6.2 (06.2-02): Biblioteka + kafel kokpitu ==================
   Scope body.ap-platforma. REUSE: .apf-cta, .apf-soon, .apf-dzial-crumb.
   Wartosci okladki ZDUBLOWANE z .apf-metodyka-cover (l.821-848) pod nazwami
   .apf-bookcover/.apf-bookinner (BEZ granicy slowa 'apf-book' — harness bib_page
   liczy \bapf-book\b tylko na <article>). Zero nowych tokenow/hexow: cienie WARM
   = wartosci juz obecne przy metodyce; rgba(0,0,0,.04/.06) = cienie ts-card. */

/* ---- kokpit: kafel biblioteki (anatomia doc-card jako link, B par.6.3) ---- */
.apf-shelf-tile { display:flex; align-items:center; gap:16px; padding:16px 20px; margin-top:24px;
                  background:var(--pf-surface); border:1px solid var(--pf-line);
                  border-radius:calc(var(--radius) + 4px); text-decoration:none;
                  box-shadow:0 1px 2px rgba(0,0,0,.04);
                  transition:transform .18s var(--ease), box-shadow .18s var(--ease); }
.apf-shelf-tile:hover { transform:translateY(-2px); box-shadow:0 4px 12px rgba(0,0,0,.06); }
.apf-shelf-tile:active { transform:translateY(0) scale(.99); }
.apf-shelf-tile:focus-visible { outline:3px solid var(--pf-ink); outline-offset:2px; }
.apf-shelf-ico  { flex:none; display:grid; place-items:center; width:44px; height:44px;
                  border-radius:50%; background:var(--tint-face); color:var(--pf-ink); }
.apf-shelf-ico svg { width:22px; height:22px; }
.apf-shelf-meta { flex:1; min-width:0; display:flex; flex-direction:column; }
.apf-shelf-title { margin:0 0 2px; font-weight:600; color:var(--pf-ink); }
.apf-shelf-sub  { margin:0; font-size:.85rem; color:var(--pf-ink-3); font-variant-numeric:tabular-nums; }
.apf-shelf-tile::after { content:"\2192"; flex:none; color:var(--pf-ink-3); font-size:1.1rem; }
.apf-shelf-tile:hover::after { color:var(--face); }

/* ---- strona biblioteki (B par.6.1) ---- */
body.ap-platforma .apf-biblio-head { margin-top:16px; }
body.ap-platforma .apf-biblio-lede { max-width:60ch; color:var(--pf-ink-2); }
body.ap-platforma .apf-biblio-gate { margin-top:24px; color:var(--pf-ink-2); }
body.ap-platforma .apf-biblio-gate a { color:var(--pf-ink); text-decoration:underline; }
.apf-biblio-grid { display:grid; gap:32px; grid-template-columns:1fr; margin-top:24px; }
@media (min-width:720px) { .apf-biblio-grid { grid-template-columns:repeat(3,minmax(0,1fr)); } }
.apf-book { display:flex; flex-direction:column; }

/* okladka-ksiazka: przepis 1:1 z .apf-metodyka-cover + .apf-metodyka-book (zdublowany) */
body.ap-platforma .apf-bookcover {
  display:block; padding:14px;
  border-radius:var(--radius);
  border:1px solid var(--pf-line); background:var(--pf-surface);
  box-shadow:0 1px 3px rgba(40,30,20,.08), 0 12px 32px rgba(40,30,20,.12);
  transition:transform .18s var(--ease), box-shadow .18s var(--ease);
}
body.ap-platforma .apf-bookinner {
  display:block; position:relative;
  transform:perspective(1200px) rotateY(-5deg);
  transition:transform .18s var(--ease);
}
body.ap-platforma .apf-bookinner::before {
  content:""; position:absolute; top:0; bottom:0; left:0; width:5px;
  background:linear-gradient(90deg, rgba(40,30,20,.20), rgba(40,30,20,0));
  border-radius:10px 0 0 10px; pointer-events:none;
}
body.ap-platforma .apf-bookcover img {
  display:block; width:100%; height:auto; border-radius:10px;
  box-shadow:0 24px 48px -12px rgba(40,30,20,.28), 0 6px 14px rgba(40,30,20,.12);
}
/* hover/focus/active TYLKO na klikalnej okladce (dostepna = <a>); soon = <span> nie lapie */
body.ap-platforma a.apf-bookcover:hover { transform:translateY(-2px); box-shadow:0 2px 6px rgba(40,30,20,.10), 0 18px 44px rgba(40,30,20,.16); }
body.ap-platforma a.apf-bookcover:hover .apf-bookinner { transform:perspective(1200px) rotateY(0); }
body.ap-platforma a.apf-bookcover:focus-visible { outline:3px solid var(--pf-ink); outline-offset:3px; }
body.ap-platforma a.apf-bookcover:active { transform:translateY(0) scale(.99); }
/* w produkcji: plaski cien spoczynkowy (bez cienia-liftu), rotateY zostaje */
body.ap-platforma .apf-book--soon .apf-bookcover { box-shadow:0 1px 3px rgba(40,30,20,.08); }

.apf-booktitle { margin:14px 0 4px; font:800 1.0625rem/1.35 var(--font-display); color:var(--pf-ink); }
.apf-bookmeta  { margin:0 0 10px; font-size:.85rem; color:var(--pf-ink-3); font-variant-numeric:tabular-nums; }
.apf-book .apf-soon { align-self:flex-start; }
.apf-biblio-note { margin-top:32px; font-size:.9rem; color:var(--pf-ink-3); }

/* metodyka -> Biblioteka: cichy link pod bandem pobierania (06.2-02, zero solid) */
body.ap-platforma .apf-metodyka-biblink { margin:12px 0 0; font-size:.9rem; color:var(--pf-ink-3); }
body.ap-platforma .apf-metodyka-biblink a { color:var(--pf-ink-2); text-decoration:underline; }

/* dzial: cicha kotwica do rozmowy przy odtwarzaczu (06.2-02 DOSCOPE, tap >=44px) */
body.ap-platforma .apf-dzial-talklink { margin:12px 0 0; }
body.ap-platforma .apf-dzial-talklink a { display:inline-flex; align-items:center; min-height:44px;
  font-size:.9rem; color:var(--pf-ink-3); text-decoration:none; }
body.ap-platforma .apf-dzial-talklink a:hover { color:var(--pf-ink-2); text-decoration:underline; }
body.ap-platforma .apf-rozmowa-anchor { scroll-margin-top:24px; }
@media (max-width:719.98px) {
  .apf-book { align-items:center; text-align:center; }
  .apf-bookcover { width:100%; max-width:220px; }
}
@media (max-width:479.98px) { .apf-book .apf-cta { width:100%; } }

/* ============================================================
   F6.3 (06.3-02): DM (wiadomosci 1:1). Reuse idiomow forum
   (.apf-feed-card, .apf-comment-ava, composer boxu) — tu tylko
   minimalne .apf-dm-* + badge sidebara. Wylacznie tokeny
   --pf-*/--face, zero nowych hexow (kanon platformy).
   ============================================================ */
body.ap-platforma .apf-nav-badge { margin-left:auto; background:var(--face); color:var(--face-ink); font-size:.72rem; font-weight:700; line-height:1; padding:4px 8px; border-radius:999px; }
body.ap-platforma .apf-dm-list { list-style:none; margin:0; padding:0; display:grid; gap:12px; }
body.ap-platforma .apf-dm-item { display:flex; align-items:center; gap:14px; text-decoration:none; color:var(--pf-ink); }
body.ap-platforma .apf-dm-item:hover { border-color:var(--pf-line-2); }
body.ap-platforma .apf-dm-item:focus-visible { outline:3px solid var(--face); outline-offset:2px; }
body.ap-platforma .apf-dm-item-main { min-width:0; }
body.ap-platforma .apf-dm-item-kto { display:block; font-weight:600; }
body.ap-platforma .apf-dm-item-czas { display:block; color:var(--pf-ink-3); font-size:.85rem; }
body.ap-platforma .apf-dm-dot { width:10px; height:10px; border-radius:50%; background:var(--face); flex:none; margin-left:auto; }
body.ap-platforma .apf-dm-empty { color:var(--pf-ink-2); }
/* Panel r1 (fix #2/#3): ciche linie pomocnicze DM (idiom zero-state). */
body.ap-platforma .apf-dm-hint { margin:14px 0 0; color:var(--pf-ink-3); font-size:.9rem; }
/* Panel r1 (fix #4, anty-redundancja): licznik przy naglowku "Wiadomosci"
   w watku DM zbedny — liczbe widac po kartach; span zostaje w markupie
   wspolnego ap_pf_comments_box (forum nietkniete), DM go nie pokazuje. */
body.ap-platforma .apf-dm .apf-comments-n { display:none; }
.apf-dm .apf-comments > h2 { display:none; } /* r2 panelu 6.3 (3/3): sub-label 'Wiadomosci' dubluje breadcrumb i sidebar; aria-label sekcji zostaje */
body.ap-platforma .apf-dm-head { display:flex; align-items:center; gap:12px; margin:14px 0 6px; }
body.ap-platforma .apf-dm-head .apf-feed-title { margin:0; }
body.ap-platforma .apf-dm-start { margin-left:auto; display:inline-flex; align-items:center; min-height:var(--pf-tap); color:var(--pf-ink-3); font-size:.85rem; text-decoration:none; }
body.ap-platforma .apf-dm-start:hover { color:var(--pf-ink); text-decoration:underline; text-underline-offset:2px; }
body.ap-platforma .apf-dm-start:focus-visible { outline:3px solid var(--face); outline-offset:2px; border-radius:4px; }

/* F6.3 (06.3-02, FOR-03): netykieta + ciche linki do niej (composer, landing). */
body.ap-platforma .apf-forum-netykieta-link { margin:10px 0 0; color:var(--pf-ink-3); font-size:.9rem; }
body.ap-platforma .apf-forum-netykieta-link a { color:inherit; text-decoration:underline; text-underline-offset:2px; }
body.ap-platforma .apf-forum-netykieta-link a:hover { color:var(--pf-ink); }
body.ap-platforma .apf-forum-netykieta-link a:focus-visible { outline:3px solid var(--face); outline-offset:2px; border-radius:4px; }
body.ap-platforma .apf-netykieta-list { margin:0 0 24px; padding-left:20px; display:grid; gap:10px; max-width:640px; color:var(--pf-ink-2); }

/* F6.4 (06.4-01, ZNA-01): szukajka — pole na indeksie dzialow + /platforma/szukaj/.
   REUSE tokenow --pf-* i .apf-cta (zero nowych hexow); input w idiomie surface+line. */
body.ap-platforma .apf-szukaj-form { display:flex; gap:10px; max-width:520px; margin:20px 0 8px; }
body.ap-platforma .apf-szukaj-form input[type="search"] {
  flex:1 1 auto; min-width:0; min-height:var(--pf-tap); padding:0 14px;
  border:1px solid var(--pf-line-2); border-radius:10px;
  background:var(--pf-surface); color:var(--pf-ink);
  font:400 .95rem/1.4 var(--font-body);
}
body.ap-platforma .apf-szukaj-form input[type="search"]::placeholder { color:var(--pf-ink-3); }
body.ap-platforma .apf-szukaj-form input[type="search"]:focus-visible { outline:3px solid var(--pf-ink); outline-offset:2px; } /* ring na cream = ink, nie koral */
.apf-szukaj-lede, .apf-szukaj-hint { max-width:60ch; }
.apf-szukaj-empty { border:1px solid var(--pf-line); border-radius:12px; background:var(--pf-surface); padding:20px 24px; max-width:60ch; margin-top:16px; }
.apf-szukaj-empty p { margin:0 0 .5rem; }
.apf-szukaj-empty p:last-child { margin:0; }
.apf-szukaj-wyniki { margin-top:8px; }
.apf-szukaj-dzial { margin:28px 0 0; }
.apf-szukaj-dzial-h { margin:0; }
.apf-szukaj-dzial-h a { text-decoration:underline; text-underline-offset:3px; text-decoration-color:var(--pf-line-2); } /* r3 6.4 (3/3): naglowek dzialu to link, ale wygladal jak bold; trwala cicha afordancja, ciemnieje na hover */
.apf-szukaj-dzial-h a:hover { text-decoration-color:currentColor; }
.apf-szukaj-hity { list-style:none; margin:10px 0 0; padding:0; display:flex; flex-direction:column; gap:8px; }
.apf-szukaj-hit { display:flex; align-items:baseline; gap:10px; }
.apf-szukaj-hit a { text-decoration:underline; text-underline-offset:2px; }
.apf-szukaj-typ { font-size:.8rem; color:var(--pf-ink-3); }

/* F6.4 (06.4-02, ZNA-03): ikona Zapisz (ulubione) + /platforma/zapisane/.
   REUSE tokenow --pf-* i klas .apf-szukaj-* na liscie zapisanych (ta sama
   anatomia wyniku). Dwa stany bez koloru jako jedynego nosnika: kontur vs
   wypelnienie (fill przez CSS bije atrybuty prezentacyjne SVG) + aria-pressed. */
.apf-fav {
  flex:none; display:grid; place-items:center;
  width:var(--pf-tap); height:var(--pf-tap);
  margin:0; padding:0; border:0; border-radius:99px;
  background:none; color:var(--pf-ink-3); cursor:pointer;
}
.apf-fav svg { width:18px; height:18px; fill:none; stroke:currentColor; stroke-width:1.75; stroke-linecap:round; stroke-linejoin:round; }
.apf-fav:hover { background:var(--pf-surface-2); color:var(--pf-ink-2); }
.apf-fav:focus-visible { outline:3px solid var(--pf-ink); outline-offset:2px; }
.apf-fav.is-saved { color:var(--pf-ink-2); }
.apf-fav.is-saved svg { fill:currentColor; }
.apf-fav:disabled { opacity:.45; cursor:default; }
.apf-zapisane-lista { margin-top:8px; }
.apf-zap-item { align-items:center; } /* przycisk w wierszu listy — center zamiast baseline */
.apf-zapisane-empty { border:1px solid var(--pf-line); border-radius:12px; background:var(--pf-surface); padding:20px 24px; max-width:60ch; margin-top:16px; }
.apf-zapisane-empty p { margin:0 0 .5rem; }
.apf-zapisane-empty p:last-child { margin:0; }
