.mod-accordioncats {
    font-family: var(--acc-font, inherit);

    /* default: light */
    --acc-text: var(--acc-light-text, #333333);
    --acc-border: var(--acc-light-border, #e5e5e5);
    --acc-toggle-border: var(--acc-light-toggle-border, #d0d0d0);
    --acc-toggle-color: var(--acc-light-toggle-color, #666666);
    --acc-active-bg: var(--acc-light-active-bg, #eef2ff);
    --acc-count-color: var(--acc-light-count-color, #999999);
}

/* Cassiopeia dark mode */
html[data-bs-theme="dark"] .mod-accordioncats,
body[data-bs-theme="dark"] .mod-accordioncats {
    --acc-text: var(--acc-dark-text, #e6e6e6);
    --acc-border: var(--acc-dark-border, #3a3a3a);
    --acc-toggle-border: var(--acc-dark-toggle-border, #5a5a5a);
    --acc-toggle-color: var(--acc-dark-toggle-color, #bdbdbd);
    --acc-active-bg: var(--acc-dark-active-bg, #2a3550);
    --acc-count-color: var(--acc-dark-count-color, #a0a0a0);
}

/* Base list */
.mod-accordioncats .acc-cats {
    list-style: none;
    margin: 0;
    padding: 0;
    border: none;
    border-radius: 0;
    background: transparent;
}

.mod-accordioncats .acc-item {
    display: block;
    padding: var(--acc-pad-y, 8px) var(--acc-pad-x, 10px);
    border-top: 0;
    border-bottom: 1px solid var(--acc-border, #e5e5e5);
}

.mod-accordioncats .acc-item:first-child {
    border-top: 0;
}

.mod-accordioncats .acc-row {
    display: flex;
    align-items: center;
    gap: var(--acc-row-gap, 16px);
}

/* Toggle: квадрат */
.mod-accordioncats .acc-toggle {
    position: relative;
    flex: 0 0 auto;
    align-self: center;
    box-sizing: border-box;
    width: var(--acc-toggle-size, 26px);
    height: var(--acc-toggle-size, 26px);
    margin: 0;
    padding: 0;
    /* целая толщина рамки: дробная даёт нечётную внутреннюю область */
    border: max(1px, round(nearest, var(--acc-toggle-border-w, 1px), 1px)) solid var(--acc-toggle-border, #d0d0d0);
    border-radius: var(--acc-toggle-radius, 6px);
    background-color: var(--acc-toggle-bg, transparent);
    color: var(--acc-toggle-color, #666);
    cursor: pointer;
    user-select: none;
    font-size: 0;
    line-height: 0;
}

/* значок +/- : один элемент, два штриха одной толщины */
.mod-accordioncats .acc-toggle::before {
    content: "";
    position: absolute;
    inset: 0;
    margin: auto;
    width: 12px;
    height: 12px;
    --acc-line: 1px;
    --acc-line: round(nearest, calc(var(--acc-toggle-weight, 300) * 0.004px), 1px);
    background:
        linear-gradient(currentColor, currentColor) center / 100% var(--acc-line) no-repeat,
        linear-gradient(currentColor, currentColor) center / var(--acc-line) 100% no-repeat;
}

/* открыто: остаётся только минус */
.mod-accordioncats .acc-item.is-open > .acc-row > .acc-toggle::before {
    background:
        linear-gradient(currentColor, currentColor) center / 100% var(--acc-line) no-repeat;
}

.mod-accordioncats .acc-toggle::after {
    content: none;
}

/* Link */
.mod-accordioncats .acc-link {
    text-decoration: none;
    color: var(--acc-text, #333) !important;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    line-height: 1.3;
}

.mod-accordioncats .acc-link.is-active .acc-title {
    background: var(--acc-active-bg, #eef2ff);
    padding: 2px 12px;
    border-radius: 8px;
    font-weight: var(--acc-active-weight, 400);
}

/* Counter */
.mod-accordioncats .acc-count {
    color: var(--acc-count-color, #999);
    font-size: var(--acc-count-size, 13px);
    line-height: 1;
    margin-left: 0;
    margin-inline-start: calc(var(--acc-title-count-gap, 6px) - var(--acc-row-gap, 16px));
}

/* Children + animation */
.mod-accordioncats .acc-children {
    max-height: 0;
    opacity: 0;
    overflow: hidden;
    padding-left: var(--acc-children-pad, 10px);
    margin-top: var(--acc-children-mt, 4px);
    width: 100%;
    transition: max-height var(--acc-anim, .2s) ease, opacity var(--acc-anim, .2s) ease;
    box-sizing: content-box;
}

.mod-accordioncats .acc-item.is-open > .acc-children {
    max-height: 2000px;
    opacity: 1;
}

/* Order (toggle left default) */
.mod-accordioncats .acc-row > .acc-toggle { order: 1; }
.mod-accordioncats .acc-row > .acc-link   { order: 2; }
.mod-accordioncats .acc-row > .acc-count  { order: 3; }

/* Toggle right */
.mod-accordioncats.acc-toggle-right .acc-row > .acc-link   { order: 1; }
.mod-accordioncats.acc-toggle-right .acc-row > .acc-count  { order: 2; }
.mod-accordioncats.acc-toggle-right .acc-row > .acc-toggle { order: 3; }

.mod-accordioncats.acc-toggle-right .acc-row {
    gap: 0;
}

.mod-accordioncats.acc-toggle-left .acc-toggle {
    margin-inline-start: 0;
    margin-inline-end: var(--acc-toggle-gap, 8px);
}

.mod-accordioncats.acc-toggle-right .acc-link {
    flex: 0 1 auto;
    margin-inline-end: 0;
}

.mod-accordioncats.acc-toggle-right .acc-count {
    margin-inline-start: var(--acc-title-count-gap, 6px);
    margin-inline-end: 0;
}

.mod-accordioncats.acc-toggle-right .acc-toggle {
    margin-inline-start: auto;
    margin-inline-end: 0;
}

/* =========================
   Sticky support (Cassiopeia/Grid)
   ========================= */

.site-grid > .container-sidebar-left,
.site-grid > .container-sidebar-right {
    align-self: stretch !important;
    min-height: 0;
}

.site-grid,
.site-grid > .grid-child,
.site-grid > .container-sidebar-left,
.site-grid > .container-sidebar-right,
.site-grid > .container-sidebar-left .sidebar-left,
.site-grid > .container-sidebar-right .sidebar-right,
.site-grid > .container-sidebar-left .card,
.site-grid > .container-sidebar-right .card,
.site-grid > .container-sidebar-left .card-body,
.site-grid > .container-sidebar-right .card-body {
    overflow: visible !important;
    contain: none !important;
}

/* Fallback sticky */
.mod-accordioncats.acc-sticky {
    position: -webkit-sticky;
    position: sticky;
    top: var(--acc-sticky-top-final, var(--acc-sticky-top, 10px));
    z-index: 2;
    max-height: calc(100vh - var(--acc-sticky-top-final, var(--acc-sticky-top, 10px)));
    overflow: auto;
}

/* Main sticky mode */
.card.acc-sticky-card {
    position: -webkit-sticky !important;
    position: sticky !important;
    top: var(--acc-sticky-top-final, var(--acc-sticky-top, 10px));
    z-index: 2 !important;
    max-height: calc(100vh - var(--acc-sticky-top-final, var(--acc-sticky-top, 10px)));
    overflow: auto;
    align-self: start;
}

/* Disable double sticky */
.card.acc-sticky-card .mod-accordioncats.acc-sticky {
    position: static !important;
    top: auto !important;
    max-height: none !important;
    overflow: visible !important;
}

/* Prevent width jump */
.card.acc-sticky-card {
    width: 100% !important;
    max-width: 100% !important;
    box-sizing: border-box;
    overflow: visible !important;
}

/* Internal scroll inside module */
.card.acc-sticky-card .mod-accordioncats.acc-sticky {
    position: static !important;
    width: 100%;
    max-width: 100%;
    box-sizing: border-box;
    max-height: calc(100vh - var(--acc-sticky-top-final, var(--acc-sticky-top, 10px)));
    overflow-y: auto;
    overflow-x: hidden;
    scrollbar-gutter: stable;
}