/* Layout Primitives
 * Reusable layout patterns: stack, center, sidebar, cluster.
 * Based on Every Layout patterns adapted for Rails.
 */

@layer base {
  /* Page main — base padding for all pages */
  .page-main {
    padding-inline: var(--inline-space-l);
    padding-block: var(--block-space);
  }

  /* Width constraints — pages opt in via their root element */
  .page-narrow {
    max-width: 40rem;
    margin-inline: auto;
  }

  .page-medium {
    max-width: 44rem;
    margin-inline: auto;
  }

  /* Full-bleed escape — for hero images that need edge-to-edge */
  .full-bleed {
    margin-inline: calc(-1 * var(--inline-space-l));
  }

  /* Stack — vertical flow with consistent spacing */
  .stack {
    display: flex;
    flex-direction: column;
    gap: var(--block-space);
  }

  .stack--s { gap: var(--block-space-s); }
  .stack--l { gap: var(--block-space-l); }

  /* Center — constrained width for index/listing pages */
  .center {
    max-width: clamp(320px, 90vw, 1200px);
    margin-inline: auto;
  }

  .center--narrow {
    max-width: 65ch;
  }

  .center--wide {
    max-width: 1400px;
  }

  /* Sidebar layout — main + sidebar, collapses on small screens */
  .with-sidebar {
    display: flex;
    flex-wrap: wrap;
    gap: var(--inline-space-l);

    & > :first-child {
      flex: 1;
      min-width: 60%;
    }

    & > :last-child {
      flex-basis: 16rem;
      flex-grow: 1;
    }
  }

  /* Cluster — horizontal flow that wraps */
  .cluster {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--inline-space);
  }

  .cluster--s { gap: var(--inline-space-s); }
  .cluster--l { gap: var(--inline-space-l); }

  /* Section spacing */
  .section {
    padding-block: var(--block-space-l);

    & + .section {
      border-block-start: 1px solid var(--color-border);
    }
  }

  /* Grid auto-fill — responsive grid without media queries */
  .auto-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(min(100%, 18rem), 1fr));
    gap: var(--inline-space-l);
  }

  /* Page title — centered variant for top-level pages */
  .page-title--centered {
    text-align: center;
  }
}
