@layer components {
  /* Notifications list
  /* ------------------------------------------------------------------------ */

  .notifications-list {
    --panel-size: 45ch;

    .tray__item {
      position: relative;

      &[aria-selected] {
        outline: 0;

        .card {
          border-radius: 0.25ch;
          outline: var(--focus-ring-size) solid var(--focus-ring-color);
          outline-offset: var(--focus-ring-offset);
        }
      }
    }

    .card {
      @media (prefers-color-scheme: dark) {
        box-shadow: 0 0 0 1px var(--color-ink-lighter);
      }
    }

    .card__header {
      column-gap: var(--inline-space-half);
    }

    &:has(.card--notification) {
      .notifications-list__empty-message {
        display: none;
      }
    }
  }

  /* Read items
  /* ------------------------------------------------------------------------ */

  .notifications-list--read {
    &:not(:has(.card--notification)) {
      display: none;
    }

    .card {
      box-shadow: 0 0 0 1px var(--color-ink-lighter);
    }

    .card__notification-unread-indicator {
      --btn-background: transparent;
      --btn-size: 1.8em;

      margin: 2px;

      .icon {
        block-size: 1.7em;
        color: var(--color-ink);
        inline-size: 1.7em;
        opacity: 1;
      }
    }
  }


 /* Help
 /* ------------------------------------------------------------------------ */
  .notifications-help {
    h2 {
      font-size: var(--text-medium);
      margin: 0;
    }

    .icon {
      --icon-size: 1.2em;

      vertical-align: text-top;
    }

    ol {
      margin-block: var(--block-space-half) var(--block-space);

      &:last-of-type {
        margin-block-end: var(--block-space-half);
      }
    }
  }

  .notifications-help__explainer {
    padding: var(--block-space);
  }

  .notifications__on-message {
    display: none;

    .notifications--on & {
      display: block;
    }
  }

  .notifications__off-message {
    display: block;

    .notifications--on & {
      display: none;
    }
  }

  .notifications__status {
    --panel-padding: var(--block-space);
  }

  /* Header notification dropdown
  /* ------------------------------------------------------------------------ */

  .header-notifications {
    position: relative;
    display: flex;
    align-items: center;
  }

  .header-notifications__toggle {
    position: relative;

    &.unread::after {
      content: "";
      position: absolute;
      top: 0.2em;
      right: 0.2em;
      block-size: 0.5em;
      inline-size: 0.5em;
      border-radius: 50%;
      background: var(--color-alert);
    }
  }

  .header-notifications__dialog {
    background: var(--color-canvas);
    border: 1px solid var(--color-ink-lighter);
    border-radius: 0.5em;
    box-shadow: 0 4px 16px oklch(var(--lch-black) / 12%);
    inset: unset;
    margin: 0;
    max-block-size: none;
    max-height: none;
    max-width: none;
    min-height: 0;
    min-width: 0;
    overflow: hidden;
    padding: 0;
    position: absolute;
    inset-block-start: calc(100% + 0.5em);
    inset-inline-end: 0;
    width: min(400px, 90vw);
    z-index: var(--z-popup, 100);

    /* Animation */
    opacity: 0;
    transform: scale(0.85);
    transform-origin: top right;
    transition-behavior: allow-discrete;
    transition-duration: calc(var(--dialog-duration) / 2);
    transition-property: display, opacity, overlay, transform;
    transition-timing-function: ease-out;

    &[open] {
      opacity: 1;
      transform: scale(1);
      transition-duration: var(--dialog-duration);
    }

    @starting-style {
      &[open] {
        opacity: 0;
        transform: scale(0.85);
      }
    }

    &::backdrop {
      background: transparent;
    }
  }

  .header-notifications__header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: var(--block-space-half) var(--inline-space);
    border-block-end: 1px solid var(--color-ink-lighter);
  }

  .header-notifications__list {
    max-block-size: 50vh;
    overflow-y: auto;
  }

  .header-notifications__empty {
    text-align: center;
    padding: var(--block-space-double);
  }

  .header-notifications__list:has(.card--notification) .header-notifications__empty {
    display: none;
  }

  .header-notifications__footer {
    border-block-start: 1px solid var(--color-ink-lighter);
    padding: var(--block-space-half);
    text-align: center;
  }

  /* Notification cards (used in both tray and full page)
  /* ------------------------------------------------------------------------ */

  .card--notification {
    display: flex;
    flex-direction: column;
    gap: 0.4em;
    padding: 0.75em 1em;
    text-decoration: none;
    color: inherit;
    border-block-end: 1px solid var(--color-ink-lighter);

    &:hover {
      background: var(--color-surface-hover, oklch(var(--lch-black) / 3%));
    }

    &.unread {
      background: oklch(var(--lch-blue) / 5%);

      &:hover {
        background: oklch(var(--lch-blue) / 8%);
      }
    }
  }

  .card__header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.5em;
  }

  .card__risk-meta {
    display: flex;
    align-items: center;
    gap: 0.4em;
    overflow: hidden;
    min-width: 0;
  }

  .card__id {
    font-size: var(--text-x-small);
    font-weight: bold;
    flex-shrink: 0;
  }

  .card__project-name {
    font-size: var(--text-x-small);
    color: var(--color-ink-light);
  }

  .card__header-actions {
    display: flex;
    align-items: center;
    gap: 0.25em;
    flex-shrink: 0;
  }

  .card__timestamp {
    font-size: var(--text-x-small);
    color: var(--color-ink-light);
    white-space: nowrap;
  }

  .card__title {
    font-size: var(--text-small);
    font-weight: 600;
    line-height: 1.3;
  }

  .card__notification-body {
    color: var(--color-ink-light);
    font-size: var(--text-x-small);
  }

  .card__notification-unread-indicator {
    --btn-size: 1.4em;
    --btn-background: transparent;
    flex-shrink: 0;

    .icon {
      --icon-size: 1em;
    }
  }

  .badge-count {
    font-size: 0.65em;
    font-weight: bold;
    color: var(--color-alert);
  }
}

