@layer components {
  /* Every update gets air above it, the first one included — it would
     otherwise butt straight against the page intro. */
  .changelog-entry {
    margin-top: var(--space-6);
  }

  /* What stands in for a list: how many cards an update moved, or that it
     moved none. Muted, because the prose above it is the part to read. */
  .changelog-entry__note {
    margin-top: var(--space-3);
    color: var(--color-ink-muted);
  }

  .changelog-entry__description p + p {
    margin-top: var(--space-3);
  }

  .changelog-entry__back {
    margin-bottom: var(--space-3);
    font-size: var(--text-sm);
  }

  .changelog-list {
    list-style: none;
    padding: 0;
    margin-top: var(--space-3);
    display: grid;
    gap: var(--space-3);
  }

  /* The rationale is the part worth reading, so it gets its own line rather
     than trailing off the end of the movement. */
  .changelog-list__rationale {
    margin-top: var(--space-1);
    color: var(--color-ink-muted);
    font-size: var(--text-sm);
  }

  /* A footnote, not a section: most cards never move, and the update's own page
     has the reasoning. Small and muted so it doesn't compete with the points. */
  .card-page__history {
    margin-top: var(--space-2);
    font-size: var(--text-sm);
    color: var(--color-ink-muted);
  }

  .card-page__history h2 {
    font-size: var(--text-base);
    margin-bottom: 0;
  }

  .card-page__history ul {
    list-style: none;
    padding: 0;
    margin-top: var(--space-1);
    display: grid;
    gap: var(--space-1);
  }

  .card-page__earlier {
    margin-top: var(--space-2);
  }

  .card-page__earlier summary {
    cursor: pointer;
    color: var(--color-accent);
  }
}
