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

  .cinder-card {
    position: relative;
    inline-size: 100%;
    border-radius: var(--cinder-radius-lg);
    background: var(--cinder-surface-raised);
    border: 1px solid var(--cinder-border);
    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 the border. 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);
    border-color: var(--cinder-status-danger-border);
  }

  /* 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);
  }

  /* ----------------------------------------
 * 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);
  }

  /* 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: center;
    gap: var(--cinder-space-2);
    min-inline-size: 0;
  }

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

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

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

  .cinder-card__body {
    padding: var(--cinder-space-4);
    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;
    }
  }
}
