/* ==========================================================================
   UVFIT — layout: shell, sections, editorial grid
   All horizontal values use logical properties so RTL is the native case.
   ========================================================================== */

.shell {
  width: 100%;
  max-width: var(--shell);
  margin-inline: auto;
  padding-inline: var(--gutter);
}
.shell--wide { max-width: 1480px; }
.shell--narrow { max-width: 860px; }

/* ---- vertical rhythm ---------------------------------------------------
   One class owns section padding. Modifiers only change colour, never
   padding, so nothing cancels out.                                        */

.band { padding-block: var(--sp-8); }
.band--tight { padding-block: var(--sp-6); }
.band--flush-top { padding-block-start: 0; }
.band--flush-bottom { padding-block-end: 0; }

.band-bone { background: var(--bone); }
.band-deep { background: var(--bone-deep); }
.band-ink  { background: var(--ink); color: var(--bone); }

.band-ink .eyebrow { color: var(--pink); }
.band-ink .lede { color: rgba(247, 243, 241, 0.78); }
.band-ink .rule { border-top-color: rgba(247, 243, 241, 0.18); }

.band-line { border-top: 1px solid var(--sand); }

/* ---- editorial header block: eyebrow + title offset from the grid ----- */

.band-head {
  display: grid;
  grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
  gap: var(--sp-4) var(--sp-6);
  align-items: end;
  margin-block-end: var(--sp-6);
}
.band-head__aside {
  font-size: var(--step-0);
  color: var(--ink-soft);
  padding-block-end: 0.4rem;
}
.band-ink .band-head__aside { color: rgba(247, 243, 241, 0.72); }

@media (max-width: 800px) {
  .band-head { grid-template-columns: 1fr; }
}

/* ---- grids ------------------------------------------------------------- */

.grid { display: grid; gap: var(--sp-5); }
.grid--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.grid--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.grid--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }

@media (max-width: 980px) {
  .grid--4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .grid--3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 640px) {
  .grid--2, .grid--3, .grid--4 { grid-template-columns: minmax(0, 1fr); }
}

/* asymmetric split: content sits in 7 of 12, offset toward the RTL start */
.split {
  display: grid;
  grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
  gap: var(--sp-6);
  align-items: center;
}
.split--flip { grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); }
.split--even { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.split--top { align-items: start; }

@media (max-width: 900px) {
  .split, .split--flip, .split--even { grid-template-columns: minmax(0, 1fr); }
}

.bleed {
  width: 100vw;
  margin-inline-start: 50%;
  transform: translateX(50%);
}
[dir="rtl"] .bleed { transform: translateX(-50%); }

/* ---- scroll reveal ------------------------------------------------------ */

.reveal {
  opacity: 0;
  transform: translateY(18px);
  transition: opacity 0.7s var(--ease), transform 0.7s var(--ease);
}
.reveal.is-in { opacity: 1; transform: none; }
.reveal[data-delay="1"] { transition-delay: 0.08s; }
.reveal[data-delay="2"] { transition-delay: 0.16s; }
.reveal[data-delay="3"] { transition-delay: 0.24s; }
.reveal[data-delay="4"] { transition-delay: 0.32s; }
.reveal[data-delay="5"] { transition-delay: 0.4s; }

@media (prefers-reduced-motion: reduce) {
  .reveal { opacity: 1; transform: none; }
}
