@layer components {
  /* =============================================
     Shared link styles
     ============================================= */
  .blog-toc__link {
    font-size: var(--text-sm);
    color: var(--color-text-muted);
    text-decoration: none;
    display: block;
    padding: var(--space-1) var(--space-2);
    border-radius: var(--radius-sm);
    transition: color var(--transition-fast), background var(--transition-fast);

    &:hover {
      color: var(--color-text);
      text-decoration: underline;
      text-underline-offset: 0.2em;
    }

    &.is-active {
      color: var(--color-text);
      font-weight: var(--font-semibold);
    }
  }

  .blog-toc__list {
    list-style: none;
    padding: 0;
    margin: 0;
  }

  .blog-toc__item--h3 {
    padding-left: var(--space-4);
  }

  .blog-toc__item--h4 {
    padding-left: var(--space-8);
  }

  /* =============================================
     Mobile TOC (< 1280px)
     ============================================= */
  .blog-toc--mobile {
    margin-bottom: var(--space-8);
    border-top: 2px solid var(--color-text);
    border-bottom: 1px solid var(--color-border);

    .blog-toc__toggle {
      display: flex;
      align-items: center;
      justify-content: space-between;
      width: 100%;
      padding: var(--space-3) 0;
      background: none;
      border: none;
      font-size: var(--text-sm);
      font-weight: var(--font-semibold);
      color: var(--color-text);
      cursor: pointer;
    }

    .blog-toc__chevron {
      transition: transform var(--transition-normal);
    }

    .blog-toc__toggle[aria-expanded="true"] .blog-toc__chevron {
      transform: rotate(180deg);
    }

    .blog-toc__body {
      padding: 0 0 var(--space-4);
    }
  }

  /* =============================================
     Desktop TOC (>= 1280px)
     ============================================= */
  .blog-toc--desktop {
    position: fixed;
    right: 16px;
    max-width: 240px;
    z-index: var(--z-sticky);
    overflow-y: auto;
    padding-top: var(--space-3);
    background: var(--color-background);
    border-top: 2px solid var(--color-text);
    mask-image: linear-gradient(to bottom, #000 85%, transparent 100%);
    -webkit-mask-image: linear-gradient(to bottom, #000 85%, transparent 100%);

    .blog-toc__title {
      font-size: var(--text-sm);
      font-weight: var(--font-semibold);
      color: var(--color-text);
      margin-bottom: var(--space-3);
    }

    .blog-toc__item + .blog-toc__item {
      margin-top: var(--space-1);
    }

    .blog-toc__link {
      padding-left: var(--space-3);
      border-left: 2px solid transparent;
      border-radius: 0;

      &:hover {
        background: none;
        border-left-color: var(--color-border);
      }

      &.is-active {
        color: var(--color-text);
        border-left-color: var(--color-text);
        font-weight: var(--font-semibold);
      }
    }
  }
}
