@layer components {
  .reactions {
    --btn-icon-size: 1.3em;
    --column-gap: 0.4ch;
    --reaction-border-color: var(--color-ink-lighter);
    --row-gap: 0;

    align-items: center;
    display: flex;
    flex-wrap: wrap;
    gap: var(--inline-space-half);
    inline-size: 100%;
    margin-block-start: calc(var(--block-space-half) / 2);
    margin-inline: calc(var(--column-gap) / -1);
  }

  .reactions__list {
    display: inline-flex;
    flex-wrap: wrap;
    gap: var(--column-gap);

    &:not(:has(.reaction)) {
      display: none;
    }
  }

  .reaction {
    --btn-size: 100%;
    --reaction-hover-brightness: 0.9;

    align-items: center;
    background-color: var(--color-canvas);
    block-size: var(--reaction-size);
    border: 1px solid var(--reaction-border-color);
    border-radius: 4rem;
    display: inline-flex;
    gap: var(--column-gap);
    max-inline-size: 100%;
    opacity: 1;
    padding: 0.1em 0.25em 0.1em 0.12em;
    postion: relative;
    transition: opacity 100ms ease-in-out, transform 150ms ease-in-out;

    .btn {
      font-size: 0.6em;
      inline-size: auto;
    }
  }

  .reaction--deleteable {
    cursor: pointer;

    @media (any-hover: hover) {
      &:not(:active):hover {
        filter: brightness(var(--reaction-hover-brightness));

        @media (prefers-color-scheme: dark) {
          --reaction-hover-brightness: 1.25;
        }
      }
    }
  }

  /* Make the avatar and delete buttons fit nicely within the reaction */
  .reaction__avatar,
  .reaction__form-label,
  .reaction form {
    block-size: var(--btn-size);
  }

  .reaction__delete {
    display: none;
    translate: 0.25em;

    .expanded & {
      display: grid;
    }
  }

  .reaction__form {
    transition: none;

    &.expanded {
      animation: react 300ms both;
      transform: translate3d(0, 0, 0);
      transform-origin: left center;
    }

    &:has(.input:focus) {
      outline: var(--focus-ring-size) solid var(--focus-ring-color);
      outline-offset: var(--focus-ring-offset);
    }

    .reaction__form-label:focus {
      outline: none;
    }
  }

  .reaction__input {
    --input-background: transparent;
    --input-border-size: 0;
    --input-padding: 0;

    box-shadow: none;
    display: inherit;
    max-inline-size: 16ch;
    min-inline-size: 2em;
    outline: 0;
  }

  .reaction--deleting {
    animation: scale-fade-out 0.2s both;
  }

  .reaction__action {
    --btn-border-color: var(--reaction-border-color);
    --btn-size: var(--reaction-size);

    font-size: 0.75em;

    .reactions:not(:has(.reaction)) & {
      display: none;
    }
  }

  /* Quick reactions
  /* ------------------------------------------------------------------------ */

  .quick-reaction {
    position: relative;
  }

  .quick-reaction__popup {
    --panel-border-radius: 1.2em;
    --panel-padding: 0.5ch;
    --offset: calc(-1 * var(--panel-padding));

    inset: var(--offset) auto auto var(--offset);
    min-inline-size: auto;
    transform: none;
  }

  .quick-reaction__emojis {
    display: grid;
    grid-template-columns: repeat(3, 1fr);

    .btn {
      --btn-icon-size: 1.5ch;
      --btn-size: var(--reaction-size);
      --btn-border-color: var(--color-canvas);

      position: relative;

      /* Make sure the selection ring sits on top of adjacent buttons on hover */
      &:hover,
      &:focus-visible {
        z-index: 1;
      }
    }
  }
}
