/* Omni Resume — layout primitives
   Containers, grids, stacks, and layout utility primitives. */

.container {
  width: 100%;
  max-width: var(--container-wide);
  margin-inline: auto;
  padding-inline: var(--container-padding);
}

.container--narrow {
  max-width: var(--container-narrow);
}

.container--base {
  max-width: var(--container-base);
}

.container--wide {
  max-width: var(--container-wide);
}

.container--full {
  max-width: var(--container-full);
}

.container--flush {
  padding-inline: 0;
}

/* ---------- Stack primitive ---------- */
.stack {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
}

.stack--tight {
  gap: var(--space-2);
}

.stack--loose {
  gap: var(--space-8);
}

.stack--section {
  gap: var(--spacing-section);
}

/* ---------- Cluster primitive ---------- */
.cluster {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-3);
}

.cluster--between {
  justify-content: space-between;
}

.cluster--center {
  justify-content: center;
}

.cluster--end {
  justify-content: flex-end;
}

/* ---------- Grid primitive ---------- */
.grid {
  display: grid;
  gap: var(--space-6);
}

.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));
}

.grid--auto-sm {
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 220px), 1fr));
}

.grid--auto-md {
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 280px), 1fr));
}

.grid--auto-lg {
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 320px), 1fr));
}

.grid--sidebar {
  grid-template-columns: minmax(0, 1fr);
}

@media (min-width: 1024px) {
  .grid--sidebar {
    grid-template-columns: minmax(0, 1fr) 320px;
    align-items: start;
  }
}

/* ---------- Sidebar / main / aside patterns ---------- */
.with-sidebar {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: var(--space-8);
}

@media (min-width: 900px) {
  .with-sidebar {
    grid-template-columns: minmax(0, 1fr) minmax(260px, 320px);
  }

  .with-sidebar--left {
    grid-template-columns: minmax(260px, 320px) minmax(0, 1fr);
  }
}

/* ---------- Main ---------- */
.site-main {
  display: block;
  min-height: 60vh;
}

.site-main:focus {
  outline: none;
}

/* ---------- Header / footer shells ---------- */
.site-header {
  position: sticky;
  inset-block-start: 0;
  z-index: var(--z-header);
  background-color: var(--header-bg);
  border-block-end: var(--border-width-1) solid var(--header-border);
  backdrop-filter: saturate(180%) blur(8px);
  transition: box-shadow var(--duration-normal) var(--ease-standard);
}

.site-header.is-scrolled {
  box-shadow: var(--shadow-sm);
}

.site-footer {
  margin-block-start: var(--spacing-section);
  background-color: var(--footer-bg);
  border-block-start: var(--border-width-1) solid var(--color-border);
  padding-block: var(--space-12) var(--space-8);
}

/* ---------- Sections ---------- */
.section {
  padding-block: var(--spacing-section);
}

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

.section--flush-top {
  padding-block-start: 0;
}

.section--flush-bottom {
  padding-block-end: 0;
}

.section__header {
  max-width: 60ch;
  margin-block-end: var(--space-10);
}

.section__title {
  font-size: var(--font-size-h2);
  margin-block-end: var(--space-3);
}

.section__subtitle {
  font-size: var(--font-size-lg);
  color: var(--color-text-muted);
  line-height: var(--line-height-relaxed);
}

/* ---------- Utilities for flex layout ---------- */
.flex { display: flex; }
.flex-col { flex-direction: column; }
.flex-row { flex-direction: row; }
.flex-wrap { flex-wrap: wrap; }
.flex-1 { flex: 1 1 0%; }
.flex-none { flex: none; }
.items-start { align-items: flex-start; }
.items-center { align-items: center; }
.items-end { align-items: flex-end; }
.items-stretch { align-items: stretch; }
.justify-start { justify-content: flex-start; }
.justify-center { justify-content: center; }
.justify-between { justify-content: space-between; }
.justify-end { justify-content: flex-end; }
.gap-1 { gap: var(--space-1); }
.gap-2 { gap: var(--space-2); }
.gap-3 { gap: var(--space-3); }
.gap-4 { gap: var(--space-4); }
.gap-6 { gap: var(--space-6); }
.gap-8 { gap: var(--space-8); }

/* ---------- Hidden / responsive visibility ---------- */
.hidden { display: none !important; }

@media (max-width: 767px) {
  .hidden-mobile { display: none !important; }
}

@media (min-width: 768px) {
  .hidden-desktop { display: none !important; }
}

@media (max-width: 1023px) {
  .hidden-tablet-and-below { display: none !important; }
}

/* ---------- Screen-reader only ---------- */
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

/* ---------- Divider ---------- */
.divider {
  height: 1px;
  width: 100%;
  background-color: var(--color-border);
  border: 0;
  margin-block: var(--space-8);
}

.divider--tight {
  margin-block: var(--space-4);
}

/* ---------- Aspect ratio helper ---------- */
.ratio {
  position: relative;
  display: block;
  width: 100%;
  overflow: hidden;
}

.ratio > * {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.ratio--16x9 { aspect-ratio: 16 / 9; }
.ratio--4x3  { aspect-ratio: 4 / 3; }
.ratio--1x1  { aspect-ratio: 1 / 1; }
.ratio--3x4  { aspect-ratio: 3 / 4; }
.ratio--a4   { aspect-ratio: 210 / 297; }