@layer components {

    /* ── Shared ── */
    .toc {
        font-family: var(--toc-list-font, var(--font-meta, var(--font-body)));
        font-size: var(--toc-font-size, var(--font-size-base));
        line-height: 1.4;
    }

    .toc__list {
        list-style: none;
        padding: 0;
        margin: 0;
        display: flex;
        flex-direction: column;
        align-items: var(--toc-align-items, stretch);
        gap: var(--toc-item-gap, var(--spacing-xs));
    }

    .toc__item {
        padding-inline-start: calc(var(--toc-depth, 0) * var(--spacing-md));
    }

    .toc .toc__link {
        display: block;
        width: fit-content;
        color: var(--toc-link-color, var(--color-muted));
        margin-inline-start: var(--toc-link-ms);
        margin-inline-end: var(--toc-link-me);
    }

    .toc__link:hover {
        color: var(--color-text);
        opacity: 1;
    }

    /* ── Inline variant ── */
    .toc--inline {
        margin-block: var(--spacing-md);
    }

    .toc--content-width {
        max-width: var(--toc-max-width, 65ch);
    }

    .toc--auto-width {
        width: fit-content;
    }

    .toc--center {
        margin-inline: auto;
    }

    .toc-float {
        max-width: var(--toc-float-width, 45%);
        margin-block: var(--spacing-sm) var(--spacing-md);
    }

    .toc-float--right {
        float: right;
        margin-left: var(--spacing-lg);
    }

    .toc-float--left {
        float: left;
        margin-right: var(--spacing-lg);
    }


    .toc-float .toc--inline {
        margin-block: 0;
    }

    .toc-float .toc--content-width {
        max-width: none;
    }


    .tldr-toc .toc--inline details {
        border: none;
        border-radius: 0;
    }

    .tldr-toc .toc--inline {
        margin-block: 0;
    }

    .tldr-toc .toc--content-width {
        max-width: none;
    }

    .toc--inline details {
        border: var(--toc-border, 1px solid var(--color-border));
        border-radius: var(--radius-md);
        overflow: hidden;
    }

    .toc__heading {
        list-style: none;
        margin: 0;
        font-family: var(--toc-heading-font, var(--font-heading));
        font-weight: var(--toc-heading-weight, var(--font-weight-heading));
        font-size: var(--toc-heading-size, var(--font-size-base));
        color: var(--toc-heading-color, var(--color-text));
        font-style: var(--toc-heading-style, normal);
        text-transform: var(--toc-heading-transform, none);
        letter-spacing: var(--toc-heading-spacing, normal);
    }

    .toc__toggle {
        display: flex;
        align-items: center;
        gap: var(--spacing-sm);
        padding: var(--toc-toggle-padding, var(--spacing-sm) var(--spacing-md));
        font-family: var(--toc-toggle-font, var(--font-heading));
        font-weight: var(--toc-toggle-weight, var(--font-weight-heading));
        font-size: var(--toc-toggle-size, var(--font-size-body-sm));
        color: var(--toc-toggle-color, var(--color-muted));
        cursor: pointer;
        user-select: none;
        list-style: none;
        transition: color var(--transition-speed);
    }

    .toc__toggle:hover {
        color: var(--color-text);
    }

    .toc__toggle::-webkit-details-marker {
        display: none;
    }

    /* ── Toggle icons ── */

    .toc__toggle::after {
        content: '';
        margin-inline-start: auto;
        flex-shrink: 0;
    }

    /* Chevron */
    .toc--icon-chevron .toc__toggle::after {
        width: 8px;
        height: 8px;
        border-inline-end: 2px solid currentColor;
        border-block-end: 2px solid currentColor;
        transform: translateY(-1px) rotate(45deg);
        transition: transform var(--transition-speed);
    }

    .toc--icon-chevron:not(.toc--animated) details[open] > .toc__toggle::after,
    .toc--icon-chevron.toc--animated:has(.toc__content--open) .toc__toggle::after {
        transform: translateY(1px) rotate(-135deg);
    }

    /* Hamburger (static) — 3 bars via gradient */
    .toc--icon-hamburger .toc__toggle::after {
        width: 16px;
        height: 12px;
        background:
            linear-gradient(currentColor, currentColor) top/100% 2px no-repeat,
            linear-gradient(currentColor, currentColor) center/100% 2px no-repeat,
            linear-gradient(currentColor, currentColor) bottom/100% 2px no-repeat;
    }

    /* Hamburger-X — 3 bars animate to X */
    .toc--icon-hamburger-x .toc__toggle::after {
        display: none;
    }

    .toc__icon {
        display: flex;
        flex-direction: column;
        justify-content: center;
        gap: 3px;
        width: 16px;
        height: 12px;
        margin-inline-start: auto;
        flex-shrink: 0;
    }

    .toc__icon-bar {
        display: block;
        width: 100%;
        height: 2px;
        background: currentColor;
        transition: transform var(--transition-speed), opacity var(--transition-speed);
        transform-origin: center;
    }

    :not(.toc--animated) > details[open] > .toc__toggle .toc__icon-bar:nth-child(1),
    .toc--animated:has(.toc__content--open) .toc__icon-bar:nth-child(1) {
        transform: translateY(5px) rotate(-45deg);
    }

    :not(.toc--animated) > details[open] > .toc__toggle .toc__icon-bar:nth-child(2),
    .toc--animated:has(.toc__content--open) .toc__icon-bar:nth-child(2) {
        opacity: 0;
    }

    :not(.toc--animated) > details[open] > .toc__toggle .toc__icon-bar:nth-child(3),
    .toc--animated:has(.toc__content--open) .toc__icon-bar:nth-child(3) {
        transform: translateY(-5px) rotate(45deg);
    }

    /* Plus shared base */
    .toc--icon-plus-minus .toc__toggle::after,
    .toc--icon-plus-x .toc__toggle::after {
        width: 14px;
        height: 14px;
        background:
            linear-gradient(currentColor, currentColor) center/2px 100% no-repeat,
            linear-gradient(currentColor, currentColor) center/100% 2px no-repeat;
    }

    /* Plus → minus */
    .toc--icon-plus-minus .toc__toggle::after {
        transition: background-size var(--transition-speed);
    }

    .toc--icon-plus-minus:not(.toc--animated) details[open] > .toc__toggle::after,
    .toc--icon-plus-minus.toc--animated:has(.toc__content--open) .toc__toggle::after {
        background:
            linear-gradient(currentColor, currentColor) center/2px 0 no-repeat,
            linear-gradient(currentColor, currentColor) center/100% 2px no-repeat;
    }

    /* Plus → X */
    .toc--icon-plus-x .toc__toggle::after {
        transition: transform var(--transition-speed);
    }

    .toc--icon-plus-x:not(.toc--animated) details[open] > .toc__toggle::after,
    .toc--icon-plus-x.toc--animated:has(.toc__content--open) .toc__toggle::after {
        transform: rotate(45deg);
    }

    .toc--inline .toc__list {
        padding-block: var(--toc-list-padding-block, var(--toc-list-padding, var(--spacing-md)));
        padding-inline: var(--toc-list-padding-inline, var(--toc-list-padding, var(--spacing-md)));
    }

    .toc--animated .toc__list {
        overflow: hidden;
        transition: height var(--transition-speed) ease, opacity var(--transition-speed) ease;
    }

    /* ── Inline: minimal ── */
    .toc--minimal details {
        border: none;
        border-radius: 0;
    }

    .toc--minimal .toc__toggle {
        padding-inline: var(--toc-list-padding-inline, 0);
    }

    .toc--minimal .toc__list {
        padding-inline: var(--toc-list-padding-inline, 0);
    }

    .toc--has-bg.toc--minimal .toc__toggle {
        padding-inline: var(--spacing-md);
    }

    .toc--has-bg.toc--minimal .toc__list {
        padding-inline: var(--toc-list-padding-inline, var(--spacing-md));
    }

    /* ── Inline: card ── */
    .toc--card {
        border: 1px solid var(--color-border);
        border-radius: var(--radius-md);
        background: var(--card-bg, transparent);
        overflow: hidden;
    }

    .toc--card .toc__list {
        padding: var(--toc-list-padding, var(--spacing-md));
    }

    /* ── Inline: ruled ── */
    .toc--ruled {
        border-top: 1px solid var(--color-border);
        padding-top: var(--toc-list-padding, var(--spacing-md));
    }

    /* ── Inline: pill ── */
    .toc--pill .toc__list {
        display: flex;
        flex-wrap: wrap;
        gap: var(--spacing-xs);
        padding: var(--spacing-sm) var(--spacing-md) var(--spacing-md);
    }

    .toc--pill .toc__item {
        padding-inline-start: 0;
    }

    .toc--pill .toc__link {
        display: inline-block;
        padding: var(--spacing-xs) var(--spacing-sm);
        background: var(--color-surface);
        border-radius: var(--radius-full);
        font-size: var(--font-size-xs);
    }

    .toc--pill .toc__link:hover {
        background: var(--color-primary);
        color: var(--color-on-primary);
    }

    /* ── Numbering (CSS counters) ── */
    .toc--numbered .toc__list {
        counter-reset: toc-h2;
    }

    .toc--numbered .toc__item--h2 {
        counter-increment: toc-h2;
        counter-reset: toc-h3;
    }

    .toc--numbered .toc__item--h3 {
        counter-increment: toc-h3;
        counter-reset: toc-h4;
    }

    .toc--numbered .toc__item--h4 {
        counter-increment: toc-h4;
    }

    .toc--num-decimal .toc__item--h2 > .toc__link::before {
        content: counter(toc-h2) '. ';
    }

    .toc--num-decimal .toc__item--h3 > .toc__link::before {
        content: counter(toc-h2) '.' counter(toc-h3) '. ';
    }

    .toc--num-decimal .toc__item--h4 > .toc__link::before {
        content: counter(toc-h2) '.' counter(toc-h3) '.' counter(toc-h4) '. ';
    }

    .toc--num-roman .toc__item--h2 > .toc__link::before {
        content: counter(toc-h2, upper-roman) '. ';
    }

    .toc--num-roman .toc__item--h3 > .toc__link::before {
        content: counter(toc-h3, lower-roman) '. ';
    }

    .toc--num-roman .toc__item--h4 > .toc__link::before {
        content: counter(toc-h4, lower-roman) '. ';
    }

    .toc--num-ordinal .toc__item--h2 > .toc__link::before {
        content: counter(toc-h2) '. ';
    }

    .toc--num-ordinal .toc__item--h3 > .toc__link::before {
        content: counter(toc-h3) '. ';
    }

    .toc--num-ordinal .toc__item--h4 > .toc__link::before {
        content: counter(toc-h4) '. ';
    }

    /* ── Stagger on inline expand ── */
    @keyframes toc-stagger-in {
        from {
            opacity: 0;
            transform: translateY(var(--stagger-distance, 10px));
        }
        to {
            opacity: 1;
            transform: none;
        }
    }

    .toc--stagger.toc--animated .toc__item {
        opacity: 0;
    }

    .toc--stagger:not(.toc--animated) details[open] .toc__item,
    .toc--stagger .toc__content--open .toc__item {
        animation: toc-stagger-in var(--stagger-duration, 0.3s) ease both;
        animation-delay: calc(var(--stagger-index, 0) * var(--stagger-delay, 0.05s));
    }

    /* ── Aside variant ── */
    .toc-aside {
        display: flex;
        gap: var(--toc-aside-gap, var(--spacing-xl));
        align-items: var(--toc-aside-align, stretch);
    }

    .toc-aside--left {
        flex-direction: row-reverse;
    }

    .toc-aside__content {
        flex: 1;
        min-width: 0;
    }

    .toc-aside__toc {
        width: var(--toc-aside-width, 220px);
        flex-shrink: 0;
        display: flex;
        flex-direction: column;
        justify-content: var(--toc-aside-justify, flex-end);
        border-inline-start: var(--toc-aside-border, none);
    }

    .toc-aside--left .toc-aside__toc {
        border-inline-start: none;
        border-inline-end: var(--toc-aside-border, none);
    }

    .toc-aside__toc .toc--inline {
        margin-block: 0;
    }

    .toc-aside__toc[style*="background"] {
        padding-block: var(--toc-list-padding-block, var(--toc-list-padding, var(--spacing-md)));
        padding-inline: var(--toc-list-padding-inline, var(--toc-list-padding, var(--spacing-md)));
        gap: var(--toc-list-padding-block, var(--toc-list-padding, var(--spacing-md)));
    }

    .toc-aside__toc[style*="background"] .tldr p {
        margin: 0;
    }

    .toc-aside__toc[style*="background"] .toc--inline .toc__list {
        padding: 0;
    }

    /* ── Fixed variant ── */
    .toc--fixed {
        position: sticky;
        top: calc(var(--header-height, 0px) + var(--toc-top-offset, var(--spacing-lg)));
        max-height: calc(100vh - var(--header-height, 0px) - var(--toc-top-offset, var(--spacing-lg)));
        overflow-y: auto;
        scrollbar-width: none;
        width: var(--toc-fixed-width, 220px);
        flex-shrink: 0;
    }

    .toc--fixed-center {
        top: 50vh;
        transform: translateY(-50%);
        max-height: 60vh;
    }

    .toc--fixed::-webkit-scrollbar {
        display: none;
    }

    .toc--fixed-left {
        float: inline-start;
        margin-inline-start: calc(-1 * var(--toc-fixed-width, 220px) - var(--toc-fixed-gap, var(--spacing-xl)));
    }

    .toc--fixed-right {
        float: inline-end;
        margin-inline-end: calc(-1 * var(--toc-fixed-width, 220px) - var(--toc-fixed-gap, var(--spacing-xl)));
    }

    /* Extended mode: invisible track positions the sticky TOC boundaries */
    .toc-track {
        position: absolute;
        pointer-events: none;
        z-index: 10;
    }

    .toc-track .toc--viewport {
        pointer-events: auto;
        float: none;
        margin: 0;
    }

    /* Sidebar mode: static inside smart-sticky sidebar */
    .toc--sidebar {
        width: 100%;
        position: static;
        float: none;
        margin: 0;
    }

    .toc--fixed .toc__link {
        padding-block: 0;
        padding-inline-start: var(--spacing-sm);
        border-inline-start: 2px solid transparent;
        transition: color var(--transition-speed), border-color var(--transition-speed), background var(--transition-speed), font-weight var(--transition-speed);
    }

    .toc--sidebar .toc__link {
        padding-block: 0;
        transition: color var(--transition-speed), border-color var(--transition-speed), background var(--transition-speed), font-weight var(--transition-speed);
    }

    /* ── Active heading ── */
    .toc__item--active > .toc__link {
        color: var(--color-text);
    }

    /* Bar indicator */
    .toc--indicator-bar .toc__item--active > .toc__link {
        border-inline-start-color: var(--color-primary);
    }

    /* Dot indicator */
    .toc--indicator-dot .toc__link {
        padding-inline-start: calc(var(--spacing-sm) + 12px);
        position: relative;
    }

    .toc--indicator-dot .toc__link::before {
        content: '';
        position: absolute;
        inset-inline-start: var(--spacing-sm);
        top: 50%;
        transform: translateY(-50%);
        width: 6px;
        height: 6px;
        border-radius: var(--radius-full);
        background: transparent;
        transition: background var(--transition-speed);
    }

    .toc--indicator-dot .toc__item--active > .toc__link::before {
        background: var(--color-primary);
    }

    /* Background indicator */
    .toc--indicator-background .toc__item--active > .toc__link {
        background: var(--color-surface);
        border-radius: var(--radius-sm);
    }

    /* ── List styles ── */
    .toc.toc--ls-bullet .toc__list,
    .toc.toc--ls-decimal .toc__list,
    .toc.toc--ls-roman .toc__list {
        padding-inline-start: var(--spacing-lg);
    }

    .toc--ls-bullet .toc__list {
        list-style: disc;
    }

    .toc--ls-decimal .toc__list {
        list-style: decimal;
    }

    .toc--ls-roman .toc__list {
        list-style: upper-roman;
    }

    .toc--ls-bullet .toc__item,
    .toc--ls-decimal .toc__item,
    .toc--ls-roman .toc__item {
        padding-inline-start: 0;
        margin-inline-start: calc(var(--toc-depth, 0) * var(--spacing-md));
    }

    /* ── Sublist (nested children) ── */
    .toc__sublist {
        list-style: none;
        padding: 0;
        margin: 0;
        padding-inline-start: var(--spacing-md);
    }

    /* ── Collapsible children ── */
    .toc__item--child {
        max-height: 0;
        overflow: hidden;
        opacity: 0;
        transition: max-height var(--transition-speed), opacity var(--transition-speed);
    }

    .toc__item--child.toc__item--expanded {
        max-height: 3em;
        opacity: 1;
    }

    /* ── Progress bar ── */
    .toc__progress {
        height: 2px;
        background: var(--color-border);
        margin-block-end: var(--spacing-sm);
        border-radius: var(--radius-full);
        overflow: hidden;
    }

    .toc__progress-bar {
        height: 100%;
        width: 0%;
        background: var(--color-primary);
        transition: width 100ms linear;
    }

    /* ── Auto-hide ── */
    .toc--fixed {
        transition: opacity var(--transition-speed), visibility var(--transition-speed), border-color var(--transition-speed);
    }

    .toc--fixed[data-toc-hidden] {
        opacity: 0;
        visibility: hidden;
        pointer-events: none;
        border-color: transparent !important;
        scrollbar-width: none;
    }

    .toc--fixed[data-toc-hidden]::-webkit-scrollbar {
        display: none;
    }

    /* ── Print ── */
    @media print {
        .toc--fixed {
            display: none;
        }
    }
}
