@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-link-hover);
      background: var(--color-surface);
    }

    &.is-active {
      color: var(--color-link);
      font-weight: var(--font-medium);
    }
  }

  .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 {
    background: var(--color-surface);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-lg);
    margin-bottom: var(--space-8);

    .blog-toc__toggle {
      display: flex;
      align-items: center;
      justify-content: space-between;
      width: 100%;
      padding: var(--space-4) var(--space-6);
      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 var(--space-6) var(--space-6);
    }
  }

  /* =============================================
     Desktop TOC (>= 1280px)
     ============================================= */
  .blog-toc--desktop {
    position: fixed;
    right: 16px;
    max-width: 240px;
    z-index: var(--z-sticky);
    overflow-y: auto;

    .blog-toc__title {
      font-size: 0.6875rem;
      font-weight: var(--font-semibold);
      text-transform: uppercase;
      letter-spacing: 0.05em;
      color: var(--color-text-muted);
      margin-bottom: var(--space-3);
    }

    .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 {
        border-left-color: var(--color-link);
      }
    }
  }

  /* =============================================
     Dark mode
     ============================================= */
  [data-theme="dark"] {
    .blog-toc--mobile {
      background: var(--color-hover);
    }

    .blog-toc__link:hover {
      background: var(--color-hover);
    }

    .blog-toc--desktop .blog-toc__link:hover {
      background: none;
    }
  }
}
