@layer cinder.tokens, cinder.foundation, cinder.components, cinder.utilities;
@layer cinder.components {
  /* ========================================
 * CARD
 * ======================================== */

  .cinder-card {
    position: relative;
    inline-size: 100%;
    /* The surface radius (12px by default), so a comfortable-density page rounds its cards to
       16px (COR-2310). */
    border-radius: var(--cinder-radius-surface);
    background: var(--cinder-surface-raised);
    border: 1px solid transparent;
    background-clip: padding-box;
    color: var(--cinder-text-default);
    box-shadow: none;
    overflow: hidden;
    transition:
      border-color var(--cinder-duration-fast) var(--cinder-ease-standard),
      box-shadow var(--cinder-duration-fast) var(--cinder-ease-standard),
      background-color var(--cinder-duration-fast) var(--cinder-ease-standard);
  }

  .cinder-card[data-cinder-interactive] {
    display: block;
    cursor: pointer;
    text-align: start;
    text-decoration: none;
  }

  .cinder-card__action {
    position: absolute;
    inset: 0;
    border: 0;
    background: transparent;
    cursor: pointer;
  }

  .cinder-card__action:disabled {
    cursor: default;
  }

  .cinder-card__action:focus-visible {
    /* cinder-focus-ring-owner: parent */
    outline: none;
  }

  /* One edge per surface (COR-1821): a card draws a border or a shadow, never both. The default
   * edge is none. The shadow edge keeps the 1px border in the box, so the card does not
   * change size, and paints it transparent. These rules sit after the tone rules below so the
   * danger border colour cannot bring a second edge back. */
  @media (hover: hover) {
    .cinder-card[data-cinder-edge='border'][data-cinder-interactive]:hover {
      border-color: var(--cinder-border-strong);
    }

    .cinder-card[data-cinder-edge='shadow'][data-cinder-interactive]:hover {
      box-shadow: var(--cinder-shadow-md);
    }
  }

  .cinder-card[data-cinder-interactive]:focus-visible {
    outline: var(--cinder-ring-width) solid transparent;
    box-shadow: var(--_cinder-focus-ring-shadow);
  }

  .cinder-card[data-cinder-interactive]:has(.cinder-card__action:focus-visible) {
    outline: var(--cinder-ring-width) solid transparent;
    box-shadow: var(--_cinder-focus-ring-shadow);
  }

  .cinder-card[data-cinder-edge='shadow'][data-cinder-interactive]:focus-visible,
  .cinder-card[data-cinder-edge='shadow'][data-cinder-interactive]:has(
      .cinder-card__action:focus-visible
    ) {
    box-shadow: var(--_cinder-focus-ring-shadow), var(--cinder-shadow-md);
  }

  @media (forced-colors: active) {
    .cinder-card[data-cinder-interactive]:focus-visible {
      outline: var(--cinder-ring-width) solid ButtonText;
      outline-offset: 3px;
    }

    .cinder-card[data-cinder-interactive]:has(.cinder-card__action:focus-visible) {
      outline: var(--cinder-ring-width) solid ButtonText;
      outline-offset: 3px;
    }
  }

  .cinder-card[data-cinder-variant='well'] {
    background: transparent;
  }

  .cinder-card[data-cinder-tone='danger'] {
    background: var(--cinder-status-danger-background);
  }

  /* The border edge is the opt-in for a real panel; the default edge is none (COR-2311), so the
   * surface step separates a card from the page. */
  .cinder-card[data-cinder-edge='border'] {
    border-color: var(--cinder-border);
  }

  .cinder-card[data-cinder-tone='danger'][data-cinder-edge='border'] {
    border-color: var(--cinder-status-danger-border);
  }

  /* The plain variant is a heading on the page: no box, no edge, no inset. */
  .cinder-card[data-cinder-variant='plain'] {
    background: transparent;
    border-color: transparent;
    box-shadow: none;
    border-radius: 0;
    overflow: visible;
  }

  .cinder-card[data-cinder-variant='plain'] > :is(.cinder-card__header, .cinder-card__body) {
    background: transparent;
    padding-inline: 0;
  }

  .cinder-card[data-cinder-variant='plain'] > .cinder-card__footer {
    background: transparent;
    padding-inline: 0;
    border-top-color: transparent;
  }

  /* The shadow edge: no visible border, one soft shadow. After the danger rule above so it wins. */
  .cinder-card[data-cinder-edge='shadow'] {
    border-color: transparent;
    box-shadow: var(--cinder-shadow-sm);
  }

  .cinder-card[data-cinder-tone='danger'] > .cinder-card__header,
  .cinder-card[data-cinder-tone='danger'] > .cinder-card__body:not([data-cinder-tone='muted']),
  .cinder-card[data-cinder-tone='danger'] > .cinder-card__footer:not([data-cinder-tone='muted']) {
    background: transparent;
  }

  .cinder-card[data-cinder-tone='danger'][data-cinder-variant='well'] {
    background: var(--cinder-status-danger-background);
  }

  /* ----------------------------------------
 * Media
 *
 * Optional: a card with no media renders no element, so there is no placeholder and no reserved
 * space. The box takes its aspect ratio from the `aspect-ratio` style, and the media fills it.
 * ---------------------------------------- */

  .cinder-card__media {
    position: relative;
    overflow: hidden;
    min-inline-size: 0;
  }

  .cinder-card__media > :where(img, picture, video, svg) {
    display: block;
    inline-size: 100%;
    block-size: 100%;
    object-fit: cover;
  }

  /* A leading media column sits before the header, body and footer, which stack in the second. */
  .cinder-card[data-cinder-media='leading'] {
    display: grid;
    grid-template-columns: minmax(0, 10rem) minmax(0, 1fr);
    align-items: start;
  }

  .cinder-card[data-cinder-media='leading'] > .cinder-card__media {
    grid-column: 1;
    grid-row: 1 / span 3;
  }

  .cinder-card[data-cinder-media='leading']
    > :where(.cinder-card__header, .cinder-card__body, .cinder-card__footer) {
    grid-column: 2;
  }

  .cinder-card[data-cinder-variant='plain'] > .cinder-card__media {
    border-radius: var(--cinder-radius-md);
  }

  /* ----------------------------------------
 * Header
 * ---------------------------------------- */

  .cinder-card__header {
    display: flex;
    flex-direction: column;
    gap: var(--cinder-space-1);
    padding: var(--cinder-space-3) var(--cinder-space-4);
    background: var(--cinder-surface);
  }

  /* A muted header is the inset band over a card's rows. */
  .cinder-card__header[data-cinder-tone='muted'] {
    background: var(--cinder-surface-inset);
  }

  /* The divider under the header is opt-in (`headerDivider`). */
  .cinder-card__header[data-cinder-divider] {
    border-bottom: 1px solid var(--cinder-border-muted);
  }

  .cinder-card[data-cinder-tone='danger'] > .cinder-card__header[data-cinder-divider] {
    border-bottom-color: var(--cinder-status-danger-border);
  }

  /* ----------------------------------------
 * Title & description (title arm)
 * ---------------------------------------- */

  .cinder-card__title-row {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--cinder-space-2);
    min-inline-size: 0;
  }

  .cinder-card__title-group {
    display: flex;
    align-items: center;
    gap: var(--cinder-space-2);
    min-inline-size: 0;
  }

  /* Actions sit on the title's baseline and never grow the header: the xs control height (24px)
     is centered on the title's line box with a margin that cancels the difference, so the
     header is the same height with and without actions. */
  .cinder-card__actions {
    display: flex;
    flex: none;
    align-items: center;
    gap: var(--cinder-space-2);
    font-size: var(--cinder-text-sm);
    margin-block: calc((1lh - var(--_cinder-compact-control-height)) / 2);
  }

  .cinder-card__risk-icon {
    display: inline-flex;
    flex: 0 0 auto;
    color: var(--cinder-status-danger-text);
  }

  .cinder-card__title {
    font-size: var(--cinder-text-sm);
    font-weight: var(--cinder-font-medium);
    color: var(--cinder-text-default);
    margin: 0;
  }

  .cinder-card[data-cinder-tone='danger'] > .cinder-card__header .cinder-card__title {
    color: var(--cinder-status-danger-text);
  }

  /* Suggested (COR-2326): drafted content that is not saved until confirmed says so in quiet
   * accent words on its label line. No tint, border or pill: the colour and the words carry it. */
  .cinder-card__suggested {
    flex: none;
    color: var(--cinder-accent-text);
    font-size: var(--cinder-text-sm);
    font-weight: var(--cinder-font-medium);
  }

  .cinder-card__body > .cinder-card__suggested {
    display: block;
    margin-block-end: var(--cinder-space-1);
  }

  .cinder-card__description {
    font-size: var(--cinder-text-sm);
    color: var(--cinder-text-subtle);
    margin: 0;
  }

  /* ----------------------------------------
 * Body
 * ---------------------------------------- */

  .cinder-card__body {
    /* The density's card padding: 16px by default, 12px compact, 20px comfortable (COR-2310). */
    padding: var(--cinder-density-pad-card);
    background: var(--cinder-surface);
  }

  .cinder-card__body[data-cinder-tone='muted'] {
    background: var(--cinder-surface-inset);
  }

  .cinder-card__body[data-cinder-padding='none'] {
    padding: 0;
  }

  .cinder-card[data-cinder-variant='well'] > .cinder-card__body {
    background: var(--cinder-surface-inset);
  }

  .cinder-card[data-cinder-tone='danger'][data-cinder-variant='well']
    > .cinder-card__body:not([data-cinder-tone='muted']) {
    background: transparent;
  }

  /* ----------------------------------------
 * Footer
 * ---------------------------------------- */

  .cinder-card__footer {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: var(--cinder-space-2);
    padding: var(--cinder-space-3) var(--cinder-space-4);
    border-top: 1px solid var(--cinder-border-muted);
    background: transparent;
  }

  .cinder-card[data-cinder-tone='danger'] > .cinder-card__footer {
    border-top-color: var(--cinder-status-danger-border);
  }

  .cinder-card__footer[data-cinder-tone='muted'] {
    background: var(--cinder-surface-inset);
  }

  .cinder-card[data-cinder-variant='well'] > .cinder-card__footer:not([data-cinder-tone='muted']) {
    background: var(--cinder-surface);
  }

  .cinder-card[data-cinder-tone='danger'][data-cinder-variant='well']
    > .cinder-card__footer:not([data-cinder-tone='muted']) {
    background: transparent;
  }

  @media (forced-colors: active) {
    .cinder-card[data-cinder-tone='danger'] {
      background: Canvas;
      border-color: CanvasText;
    }

    /* Forced colors drops box-shadow, so the shadow edge needs a border to stay visible. */
    .cinder-card[data-cinder-edge='shadow'] {
      border-color: CanvasText;
    }

    .cinder-card[data-cinder-tone='danger'] .cinder-card__header,
    .cinder-card[data-cinder-tone='danger'] .cinder-card__footer {
      border-color: CanvasText;
    }

    .cinder-card[data-cinder-tone='danger'] .cinder-card__title,
    .cinder-card__risk-icon {
      color: CanvasText;
    }
  }

  @media (width < 640px) {
    .cinder-card[data-cinder-edge-to-edge-mobile] {
      inline-size: calc(100% + (var(--cinder-card-mobile-bleed) * 2));
      margin-inline: calc(var(--cinder-card-mobile-bleed) * -1);
      border-inline: 0;
      border-radius: 0;
    }
  }
}
