/* ==========================================================================
   Wrappers, section rhythm, grids.
   ========================================================================== */

.wrap {
  padding-inline: var(--pad);
  max-width: var(--max);
  margin-inline: auto;
}

.wrap-narrow {
  padding-inline: var(--pad);
  max-width: 820px;
  margin-inline: auto;
}

.section { padding-block: var(--section); }

.section-tight { padding-block: calc(var(--section) * .6); }

/* Colour planes. Each section does one job; they alternate down the page. */
.plane-paper  { background: var(--paper); color: var(--ink); }
.plane-paper2 { background: var(--paper-2); color: var(--ink); }
.plane-dusk   { background: var(--dusk); color: var(--paper); }
.plane-ink    { background: var(--ink); color: var(--paper); }

.plane-dusk .lede,
.plane-ink .lede { color: rgba(255, 246, 239, .7); }

.plane-dusk .k,
.plane-ink .k { color: rgba(255, 246, 239, .62); }

/* Section heading with a rule and a label pushed to the end. */
.sec-top {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 18px;
  padding-bottom: 18px;
  border-bottom: var(--border) solid currentColor;
}

.sec-top .k { flex: none; padding-bottom: 4px; }

.plane-dusk .sec-top,
.plane-ink .sec-top { border-bottom-color: var(--rule-i); }

.sec-lede { margin-top: 22px; max-width: 54ch; color: inherit; }

/* Generic grids used across templates. */
.grid { display: grid; gap: var(--gap); }
.grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }

.stack { display: flex; flex-direction: column; gap: var(--gap); }

.flow > * + * { margin-top: 1.1em; }

/* Horizontal snap carousels. The negative margin lets them bleed to the
   screen edge while keeping the first card aligned to the page gutter. */
.rail {
  display: grid;
  grid-auto-flow: column;
  gap: var(--gap);
  overflow-x: auto;
  overscroll-behavior-x: contain;
  scroll-snap-type: x mandatory;
  padding-inline: var(--pad);
  margin-inline: calc(var(--pad) * -1);
  scrollbar-width: none;
}

.rail::-webkit-scrollbar { display: none; }

.rail > * { scroll-snap-align: start; }

@media (min-width: 760px) {
  .grid-2 { gap: 2px; }
  .two-col {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 60px;
    align-items: start;
  }
}

@media (min-width: 1100px) {
  .two-col { gap: 76px; }
  .grid-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  .grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
