/*
 * Shared card system — one four-field article card (title, short description,
 * date, primary-category pill) used by the home bento and the article's related
 * blocks.
 *
 * The type scale is driven by the card's OWN inline size (`container-type:
 * inline-size` on `.fm-card`, `cqi` in the fluid term) and capped per screen band
 * through rem-based breakpoints — a narrow sidebar card on an ultrawide monitor
 * keeps a sidebar-sized title.
 */

:root {
  --fm-home-xl-max: 2.25rem;
  --fm-home-l-max: 1.875rem;
  --fm-home-m-max: 1.5rem;
  --fm-home-s-max: 1.25rem;
  --fm-home-xs-max: 1.125rem;
  --fm-home-desc-max: 1.0625rem;
  --fm-home-desc-lg-max: 1.0625rem;
  --fm-home-date-max: 0.875rem;
  --fm-home-pill-max: 0.8125rem;
  --fm-home-head-max: 1.5rem;
  --fm-home-gap: 1.25rem;
}

@media (min-width: 48rem) {
  :root {
    --fm-home-xl-max: 2.625rem;
    --fm-home-l-max: 2rem;
    --fm-home-m-max: 1.625rem;
    --fm-home-head-max: 1.625rem;
    --fm-home-gap: 1.5rem;
  }
}

@media (min-width: 64rem) {
  :root {
    --fm-home-xl-max: 3rem;
    --fm-home-l-max: 2.25rem;
    --fm-home-m-max: 1.75rem;
    --fm-home-s-max: 1.3125rem;
    --fm-home-xs-max: 1.1875rem;
    --fm-home-desc-max: 1.0625rem;
    --fm-home-desc-lg-max: 1.125rem;
    --fm-home-head-max: 1.75rem;
    --fm-home-gap: 1.75rem;
  }
}

@media (min-width: 90rem) {
  :root {
    --fm-home-xl-max: 3.25rem;
    --fm-home-l-max: 2.375rem;
    --fm-home-m-max: 1.875rem;
    --fm-home-s-max: 1.375rem;
    --fm-home-xs-max: 1.25rem;
    --fm-home-desc-max: 1.125rem;
    --fm-home-desc-lg-max: 1.1875rem;
    --fm-home-date-max: 0.9375rem;
    --fm-home-pill-max: 0.875rem;
    --fm-home-head-max: 1.875rem;
    --fm-home-gap: 2rem;
  }
}

@media (min-width: 120rem) {
  :root {
    --fm-home-xl-max: 3.5rem;
    --fm-home-l-max: 2.5rem;
    --fm-home-head-max: 2rem;
  }
}

/* ≥160rem (ultrawide): the same caps — the composition simply stops growing. */

/* ==========================================================================
   2. Card base
   ========================================================================== */

.fm-card {
  container-type: inline-size;
  container-name: fm-card;
  position: relative;
  display: flex;
  flex-direction: column;
  justify-content: space-between; /* meta row on top, story block at the bottom */
  min-inline-size: 0;
  overflow: hidden;
  border-radius: var(--fm-radius-card);
  background: var(--fm-surface);
}

/* ---- Top meta row: space-between flex row (cards: date left, category pill right) ---- */
.fm-card__meta,
.fm-band__meta {
  position: relative;
  z-index: 2;
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: 0.5rem 1rem;
  padding: clamp(1rem, calc(0.75rem + 1cqi), 2rem) clamp(1rem, calc(0.75rem + 1cqi), 2rem) 0;
  margin: 0;
}

.fm-card__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
}

.fm-card__body {
  position: relative;
  z-index: 2;
  display: grid;
  align-content: end;
  gap: 0.5rem;
  padding: 0.75rem clamp(1rem, calc(0.75rem + 1cqi), 2rem) clamp(1rem, calc(0.75rem + 1cqi), 2rem);
  min-inline-size: 0;
}

.fm-card__pill {
  justify-self: start;
  display: inline-flex;
  align-items: center;
  max-inline-size: 100%;
  padding: 0.2em 0.7em;
  border: var(--fm-line-hairline) solid var(--fm-color-grid);
  border-radius: var(--fm-radius-chip);
  font-family: var(--fm-font-data);
  font-size: clamp(0.8125rem, calc(0.78rem + 0.15cqi), var(--fm-home-pill-max));
  font-weight: 600;
  line-height: 1.35;
  letter-spacing: 0.025em;
  color: var(--fm-color-ink);
  text-transform: none;
}

.fm-card__title {
  margin: 0;
  font-family: var(--fm-font-disp);
  font-weight: 700;
  font-size: var(--card-title-min, 1.25rem);
  line-height: var(--card-title-leading, 1.18);
  letter-spacing: var(--card-title-ls, -0.015em);
  text-wrap: pretty;
  overflow-wrap: break-word;
  hyphens: auto;
  min-inline-size: 0;
}

@supports (font-size: 1cqi) {
  .fm-card__title {
    font-size: clamp(var(--card-title-min), var(--card-title-fluid), var(--card-title-max));
  }
}

.fm-card__link {
  text-decoration: none;
  color: inherit;
}
.fm-card__link:hover {
  text-decoration: underline;
  text-decoration-color: var(--fm-color-signal);
  text-underline-offset: 0.2em;
  text-decoration-thickness: 0.06em;
}
.fm-card__link:focus-visible {
  outline: 2px solid var(--fm-focus-ring);
  outline-offset: 2px;
}

.fm-card__desc {
  margin: 0;
  font-family: var(--fm-font-body);
  font-size: clamp(1rem, calc(0.96rem + 0.25cqi), var(--fm-home-desc-max));
  line-height: 1.45;
  color: var(--fm-color-steel);
  text-wrap: pretty;
  overflow-wrap: break-word;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  line-clamp: 2;
  overflow: hidden;
}

.fm-card__date {
  font-family: var(--fm-font-ui);
  font-size: clamp(0.875rem, calc(0.85rem + 0.1cqi), var(--fm-home-date-max));
  line-height: 1.35;
  letter-spacing: 0;
  color: var(--fm-color-steel);
  font-variant-numeric: tabular-nums;
}

/* ---- On-image cards: the picture is the surface, text sits on the scrim ---- */
.fm-card--on-image {
  box-shadow: var(--fm-shadow-soft);
}
.fm-card--on-image .fm-card__img {
  position: absolute;
  inset: 0;
  z-index: 0;
}
.fm-card--on-image::before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 1;
  background: linear-gradient(
    180deg,
    rgba(18, 22, 31, 0.55) 0%,
    rgba(18, 22, 31, 0.12) 16%,
    rgba(18, 22, 31, 0.20) 34%,
    rgba(18, 22, 31, 0.62) 54%,
    rgba(18, 22, 31, 0.95) 100%
  );
}
.fm-card--on-image .fm-card__title { color: var(--fm-on-dark); }
.fm-card--on-image .fm-card__desc { color: var(--fm-on-dark-muted); }
.fm-card--on-image .fm-card__date { color: var(--fm-on-dark-muted); }
.fm-card--on-image .fm-card__pill {
  color: var(--fm-on-dark);
  border-color: rgba(251, 250, 246, 0.42);
}

/* ---- Beside cards: image left, text right (editorial + rail) ---- */
.fm-card--beside {
  display: grid;
  grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
  grid-template-rows: auto minmax(0, 1fr);
  align-items: stretch;
  border: var(--fm-line-hairline) solid var(--fm-color-grid);
  background: var(--fm-surface);
}
.fm-card--beside .fm-card__img {
  position: static;
  grid-column: 1;
  grid-row: 1 / span 2;
  height: 100%;
}
.fm-card--beside .fm-card__meta { grid-column: 2; grid-row: 1; }
.fm-card--beside .fm-card__body { grid-column: 2; grid-row: 2; align-content: start; }

.fm-card--rail {
  gap: 0.875rem;
  border: 0;
  border-radius: 0;
  background: transparent;
  align-items: start;
}

/* The thumb grid only applies when a rail card actually carries an image. */
.fm-card--rail.fm-card--beside { grid-template-columns: 80px minmax(0, 1fr); }

/* Plain rail cards flow full-width: the start alignment exists for the beside grid,
   and a shrink-to-fit meta row would break the date/pill space-between. */
.fm-card--rail.fm-card--plain { border: 0; background: transparent; align-items: stretch; }

.fm-card--rail .fm-card__img {
  width: 80px;
  height: 80px;
  border-radius: var(--fm-radius-thumb);
  object-fit: cover;
}
.fm-card--rail .fm-card__meta { padding: 0; gap: 0.25rem 0.5rem; }
.fm-card--rail .fm-card__body { padding: 0.2rem 0 0; gap: 0.3rem; }
.fm-card--rail .fm-card__desc { -webkit-line-clamp: 1; line-clamp: 1; }

/* ---- Plain cards (no usable image) keep the same four fields ---- */
.fm-card--plain {
  border: var(--fm-line-hairline) solid var(--fm-color-grid);
  background: var(--fm-surface);
}

/* ==========================================================================
   3. Card type roles — the container decides, the screen band caps
   ========================================================================== */

.fm-card--hero,
.fm-card--band {
  --card-title-min: 1.875rem;
  --card-title-max: var(--fm-home-xl-max);
  --card-title-fluid: calc(1.375rem + 3cqi);
  --card-title-leading: 1.1;
  --card-title-ls: -0.025em;
  min-block-size: clamp(20rem, calc(10rem + 26cqi), 34rem);
}
.fm-card--lead,
.fm-card--wide {
  --card-title-min: 1.5rem;
  --card-title-max: var(--fm-home-l-max);
  --card-title-fluid: calc(1.125rem + 2.4cqi);
  --card-title-leading: 1.13;
  --card-title-ls: -0.025em;
  min-block-size: clamp(16rem, calc(8rem + 20cqi), 26rem);
}
.fm-card--duo,
.fm-card--editorial {
  --card-title-min: 1.25rem;
  --card-title-max: var(--fm-home-m-max);
  --card-title-fluid: calc(1rem + 1.9cqi);
  --card-title-leading: 1.18;
  --card-title-ls: -0.015em;
}
.fm-card--duo { min-block-size: clamp(13rem, calc(8rem + 12cqi), 20rem); }
.fm-card--small {
  --card-title-min: 1.0625rem;
  --card-title-max: var(--fm-home-s-max);
  --card-title-fluid: calc(0.95rem + 0.8cqi);
  --card-title-leading: 1.22;
  --card-title-ls: -0.01em;
  min-block-size: clamp(12rem, calc(8rem + 10cqi), 18rem);
}
.fm-card--rail,
.fm-card--compact {
  --card-title-min: 1rem;
  --card-title-max: var(--fm-home-xs-max);
  --card-title-fluid: calc(0.95rem + 0.4cqi);
  --card-title-leading: 1.3;
  --card-title-ls: -0.01em;
}
.fm-card--compact { min-block-size: 9rem; }

/* Description budget: XL/L run to three lines, M/S two, rail one. */
.fm-card--hero .fm-card__desc,
.fm-card--band .fm-card__desc,
.fm-card--lead .fm-card__desc,
.fm-card--wide .fm-card__desc {
  font-size: clamp(1rem, calc(0.975rem + 0.35cqi), var(--fm-home-desc-lg-max));
  -webkit-line-clamp: 3;
  line-clamp: 3;
}
.fm-card--editorial .fm-card__desc { -webkit-line-clamp: 3; line-clamp: 3; }

@media (max-width: 47.999rem) {
  .fm-card--beside { grid-template-columns: minmax(0, 1fr); }
  .fm-card--beside .fm-card__img { width: 100%; height: auto; aspect-ratio: 16 / 9; }
  .fm-card--beside .fm-card__body { align-content: start; }
}

@media (max-width: 29.999rem) {
  .fm-card--rail.fm-card--beside { grid-template-columns: 64px minmax(0, 1fr); }
  .fm-card--rail .fm-card__img { width: 64px; height: 64px; }
}
