:root {
  --text-column: 700px;
  --landscape-max: 1400px;
  --portrait-max: 950px;
  --fg: #1a1a1a;
  --muted: #767676;
  --bg: #ffffff;
  --link: #1a5fb4;
}

* {
  box-sizing: border-box;
}

body {
  margin: 0;
  padding: 0 1rem;
  background: var(--bg);
  color: var(--fg);
  font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", Arial, sans-serif;
  line-height: 1.6;
}

a {
  color: var(--link);
}

.site-header {
  margin: 2.5rem 0 3rem;
  /* Wyrównuje tytuł i menu z lewą/prawą krawędzią img.landscape
     (--landscape-max wyśrodkowany w pełnej szerokości strony), nie z
     kolumną tekstu. Odejmujemy 1rem paddingu body — .site-header jest
     bezpośrednim dzieckiem body (bez własnego paddingu), więc jego box
     startuje już w tym punkcie; bez odjęcia tekst wylądowałby o 1rem
     dalej niż krawędź obrazka. max(0px, ...) chroni przed ujemnym
     paddingiem na wąskich ekranach. */
  padding-left: max(0px, calc((100vw - var(--landscape-max)) / 2 - 1rem));
  padding-right: max(0px, calc((100vw - var(--landscape-max)) / 2 - 1rem));
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  flex-wrap: wrap;
  row-gap: 0.5rem;
  column-gap: 1.5rem;
}

.site-title {
  font-size: 1.5rem;
  margin: 0;
}

.site-nav ul {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem 1.5rem;
  margin: 0;
  padding: 0;
  list-style: none;
}

.site-header a {
  text-decoration: none;
  color: inherit;
}

.site-nav a:hover {
  text-decoration: underline;
}

main {
  display: flex;
  flex-direction: column;
  gap: 4rem;
}

/* Post nie jest sam ograniczony do kolumny tekstu — każdy element
   wewnątrz centruje się do WŁASNEJ maksymalnej szerokości (tekst 700px,
   portret szerzej, pejzaż najszerzej). Dzięki temu obrazy "wychodzą"
   poza kolumnę tekstu bez łamliwych sztuczek z ujemnymi marginesami
   liczonymi w vw (te psują się, gdy max-width jest węższy niż viewport). */
.post-title,
.post-date,
.post-content > * {
  max-width: var(--text-column);
  margin-left: auto;
  margin-right: auto;
}

/* Markdown owija samotny <img> w linii w <p>...</p> (tak generuje
   python-markdown), więc img.landscape/.portrait jest WNUKIEM
   .post-content, nie bezpośrednim dzieckiem — reguła powyżej
   (.post-content > *) łapie ten opakowujący <p> i przypina go do
   700px. img w środku, mimo własnego (szerszego) max-width, nigdy nie
   może być szerszy niż już przycięty rodzic. Zdejmujemy cap z takiego
   <p>; docelowy max-width i centrowanie ustawia reguła dla samego img
   niżej. */
.post-content > p:has(> img.landscape),
.post-content > p:has(> img.portrait) {
  max-width: none;
}

.post-title {
  font-size: 1.75rem;
  margin-top: 0;
  margin-bottom: 0.25rem;
}

.post-date {
  display: block;
  color: var(--muted);
  font-size: 0.9rem;
  margin-bottom: 1.5rem;
}

.post-content p {
  margin-top: 1.25rem;
  margin-bottom: 1.25rem;
}

.post-content img.landscape,
.post-content img.portrait {
  display: block;
  width: 100%;
  height: auto;
}

/* Fallback dla zwykłych <img> bez .landscape/.portrait (np. w
   podstronach z pages/) — max-width zamiast width, więc małe obrazki
   zostają w naturalnym rozmiarze, duże są ograniczone do szerokości
   kontenera, nigdy nie są sztucznie powiększane. Specyficzność reguły
   powyżej (2 klasy + typ) jest wyższa niż tej (1 klasa + typ), więc
   zdjęcia z maila i tak dostają width:100% niezależnie od kolejności. */
.post-content img {
  display: block;
  max-width: 100%;
  height: auto;
}

.post-content img.landscape {
  max-width: var(--landscape-max);
  margin: 2rem auto;
}

.post-content img.portrait {
  max-width: var(--portrait-max);
  margin: 2rem auto;
}

.pagination {
  max-width: var(--text-column);
  margin: 3rem auto 4rem;
  display: flex;
  justify-content: space-between;
  font-size: 0.95rem;
}

.empty {
  max-width: var(--text-column);
  margin: 0 auto;
  color: var(--muted);
  text-align: center;
}

/* Poniżej --text-column obrazy i tak są ograniczone przez width:100%
   swojego (niekapowanego) kontenera .post, więc nie potrzeba osobnego
   breakpointu — degradują się płynnie do pełnej szerokości viewportu
   (minus padding body). */
@media (max-width: 480px) {
  .site-header {
    margin-top: 1.5rem;
    margin-bottom: 2rem;
  }

  main {
    gap: 2.5rem;
  }
}
