@layer components {
  /* Carnival list pages (protótipos, samba-enredo, produção)
  /* ------------------------------------------------------------------------ */

  .carnival-grid {
    display: grid;
    gap: 1rem;
    grid-template-columns: minmax(0, 1fr);

    @media (min-width: 768px) {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    @media (min-width: 1024px) {
      grid-template-columns: repeat(3, minmax(0, 1fr));
    }
  }

  .carnival-card {
    border: 1px solid var(--color-ink-lighter);
    border-radius: 0.25rem;
    padding: 1rem;
  }

  .carnival-card__image {
    block-size: 12rem;
    border-radius: 0.25rem;
    inline-size: 100%;
    margin-block-end: 0.5rem;
    object-fit: cover;
  }

  .carnival-card__heading {
    align-items: center;
    display: flex;
    gap: 0.5rem;
  }

  .carnival-card__title {
    font-weight: 600;
  }

  .carnival-card__title--large {
    font-size: var(--text-medium);
  }

  .carnival-card__meta {
    color: var(--color-ink-darker);
    font-size: var(--text-small);
  }

  .carnival-card__audio {
    inline-size: 100%;
    margin-block-start: 0.5rem;
    max-inline-size: 28rem;
  }

  /* A status, category or stage next to a title ("Eleito", "Aprovado", "Em andamento") */
  .carnival-badge {
    align-items: center;
    background-color: var(--color-ink-lightest);
    border-radius: 99rem;
    color: var(--color-ink-dark);
    display: inline-flex;
    font-size: var(--text-x-small);
    font-weight: 600;
    padding: 0.2em 0.7em;
    white-space: nowrap;
  }

  .carnival-badge--elected {
    background-color: color-mix(in srgb, var(--color-positive) 12%, var(--color-white));
    color: var(--color-positive);
  }

  .carnival-badge--overdue {
    background-color: #fde8e8;
    color: #b42318;
  }

  /* Prototype / plot perma card
  /* ------------------------------------------------------------------------ */

  /* A card's description, lyrics or notes, which open its form in place */
  .carnival-editable {
    color: inherit;
    cursor: pointer;
    display: block;
    text-decoration: none;
  }

  .carnival-editable--notes {
    white-space: pre-wrap;
  }

  .carnival-prototype__image {
    border-radius: 0.25rem;
    max-block-size: 200px;
  }

  /* Approve button once the current person already approved */
  .carnival-approved {
    cursor: not-allowed;
  }

  /* Production board (tasks, drag_and_drop_controller)
  /* ------------------------------------------------------------------------ */

  .carnival-board {
    display: grid;
    gap: 1rem;
    grid-template-columns: minmax(0, 1fr);

    @media (min-width: 768px) {
      grid-template-columns: repeat(3, minmax(0, 1fr));
    }
  }

  /* A stage's column, tinted with its color (TasksHelper::STAGE_CARD_COLORS). */
  .carnival-board__column {
    --stage-color: var(--color-ink-dark);
  }

  .carnival-board__header {
    align-items: center;
    background-color: color-mix(in oklab, var(--stage-color) 10%, var(--color-canvas));
    border-radius: 0.25rem;
    display: flex;
    font-weight: 600;
    gap: 0.5rem;
    justify-content: center;
    margin-block-end: 0.5rem;
    padding: 0.5rem;
  }

  .carnival-board__count {
    background-color: var(--stage-color);
    border-radius: 999px;
    color: var(--color-white);
    font-size: var(--text-x-small);
    font-variant-numeric: tabular-nums;
    font-weight: 700;
    min-inline-size: 1.5rem;
    padding: 0.05rem 0.5rem;
    text-align: center;
  }

  .carnival-board__items {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    min-block-size: 100px;
  }

  .carnival-task {
    background-color: var(--color-canvas);
    border: 1px solid var(--color-ink-lighter);
    border-radius: 0.25rem;
    cursor: grab;
    padding: 0.75rem;
  }

  .carnival-task__title {
    font-weight: 500;
  }

  .carnival-task__meta {
    color: var(--color-ink-darker);
    font-size: var(--text-small);
  }

  .carnival-task--overdue {
    border-color: #f5b5b5;
    box-shadow: inset 3px 0 0 #e25c66;
  }

  .carnival-task__meta--overdue {
    color: #b42318;
    font-weight: 600;
  }

  /* Late and due-soon list (tasks index with a filter), a shared/_data_table row
  /* ------------------------------------------------------------------------ */

  .carnival-task-row__link {
    color: inherit;
    font-weight: 500;
    text-decoration: none;

    &:hover {
      text-decoration: underline;
    }
  }

  /* The deadline over how late it is */
  .carnival-task-row__due {
    align-items: flex-end;
    flex-direction: column;
    gap: 0;
    justify-content: center;
    line-height: 1.2;

    small {
      font-size: 0.6875rem;
      font-weight: 600;
    }
  }

  .carnival-task-row__due--overdue {
    color: var(--color-negative);
  }
}
