/* ============================================================
   AllocLab 2.0 Layout
   ------------------------------------------------------------
   Page shell / section 垂直節奏 / grid 基礎。
   不含 component 樣式（在 components.css）。
   ============================================================ */

/* ── Page shell ─────────────────────────────────────── */
.al-page {
  width: 100%;
  max-width: var(--al-container);
  margin-inline: auto;
  padding: var(--sp-6) var(--sp-4) var(--sp-8);
}

@media (min-width: 640px) {
  .al-page {
    padding: var(--sp-7) var(--sp-5) var(--sp-8);
  }
}

@media (min-width: 960px) {
  .al-page {
    padding: var(--sp-8) var(--sp-5) var(--sp-8);
  }
}

/* ── Page hero（頁面頂部標題區） ─────────────────── */
.al-page-hero {
  margin-bottom: var(--sp-5);
}
.al-page-hero__kicker {
  margin-bottom: var(--sp-2);
}
.al-page-hero__title {
  margin-bottom: var(--sp-3);
}
.al-page-hero__desc {
  max-width: 640px;
  color: var(--al-ink-2);
}

@media (min-width: 640px) {
  .al-page-hero {
    margin-bottom: var(--sp-6);
  }
}

/* ── Section（配合 section.html macro） ─────────── */
.al-section + .al-section {
  margin-top: var(--sp-6);
}

.al-section--tight + .al-section,
.al-section + .al-section--tight {
  margin-top: var(--sp-5);
}

.al-section--loose + .al-section,
.al-section + .al-section--loose {
  margin-top: var(--sp-7);
}

.al-section__header {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: var(--sp-3);
  margin-bottom: var(--sp-4);
}

.al-section__heading {
  display: flex;
  flex-direction: column;
  gap: var(--sp-1);
  min-width: 0;
}

.al-section__kicker {
  color: var(--al-ink-muted);
}

.al-section__title {
  margin: 0;
}

.al-section__desc {
  margin: 0;
  color: var(--al-ink-2);
}

.al-section__action {
  flex-shrink: 0;
  font-size: var(--fs-caption);
  font-weight: var(--fw-medium);
  padding: var(--sp-1) var(--sp-3);
}

.al-section__body {
  display: block;
}

/* ── Grid presets（給頁面 layout 用） ──────────── */
.al-grid-2 {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--sp-4);
}
.al-grid-3 {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--sp-4);
}
.al-grid-4 {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: var(--sp-3);
}

@media (min-width: 640px) {
  .al-grid-2 { grid-template-columns: repeat(2, 1fr); gap: var(--sp-5); }
  .al-grid-3 { grid-template-columns: repeat(2, 1fr); gap: var(--sp-4); }
  .al-grid-4 { grid-template-columns: repeat(4, 1fr); gap: var(--sp-4); }
}

@media (min-width: 960px) {
  .al-grid-3 { grid-template-columns: repeat(3, 1fr); }
}

/* ── Card list（一列卡片直排） ──────────────────── */
.al-card-list {
  display: flex;
  flex-direction: column;
  gap: var(--sp-4);
}

/* ── Card scroller（手機橫向滑動，如警示卡組） ── */
.al-card-scroller {
  display: flex;
  gap: var(--sp-3);
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  -webkit-overflow-scrolling: touch;
  padding-bottom: var(--sp-2);
  /* scrollbar 低視覺 */
  scrollbar-width: thin;
}
.al-card-scroller > * {
  flex: 0 0 82%;
  max-width: 320px;
  scroll-snap-align: start;
}

@media (min-width: 640px) {
  .al-card-scroller > * {
    flex: 0 0 auto;
    min-width: 260px;
  }
}

/* ── Stack（垂直節奏，flex-based） ─────────────── */
.al-stack-sm { display: flex; flex-direction: column; gap: var(--sp-2); }
.al-stack-md { display: flex; flex-direction: column; gap: var(--sp-3); }
.al-stack-lg { display: flex; flex-direction: column; gap: var(--sp-5); }

/* ── Footer safe-area ──────────────────────────── */
.al-page--with-sticky-bottom {
  padding-bottom: calc(var(--sp-8) + env(safe-area-inset-bottom));
}
