docs/assets/style.css
@layer typedoc {
    :root {
        --dim-toolbar-contents-height: 2.5rem;
        --dim-toolbar-border-bottom-width: 1px;
        --dim-header-height: calc(
            var(--dim-toolbar-border-bottom-width) +
                var(--dim-toolbar-contents-height)
        );

        /* 0rem For mobile; unit is required for calculation in `calc` */
        --dim-container-main-margin-y: 0rem;

        --dim-footer-height: 3.5rem;

        --modal-animation-duration: 0.2s;
    }

    :root {
        /* Light */
        --light-color-background: #f2f4f8;
        --light-color-background-secondary: #eff0f1;
        /* Not to be confused with [:active](https://developer.mozilla.org/en-US/docs/Web/CSS/:active) */
        --light-color-background-active: #d6d8da;
        --light-color-background-warning: #e6e600;
        --light-color-warning-text: #222;
        --light-color-accent: #c5c7c9;
        --light-color-active-menu-item: var(--light-color-background-active);
        --light-color-text: #222;
        --light-color-contrast-text: #000;
        --light-color-text-aside: #5e5e5e;

        --light-color-icon-background: var(--light-color-background);
        --light-color-icon-text: var(--light-color-text);

        --light-color-comment-tag-text: var(--light-color-text);
        --light-color-comment-tag: var(--light-color-background);

        --light-color-link: #1f70c2;
        --light-color-focus-outline: #3584e4;

        --light-color-ts-keyword: #056bd6;
        --light-color-ts-project: #b111c9;
        --light-color-ts-module: var(--light-color-ts-project);
        --light-color-ts-namespace: var(--light-color-ts-project);
        --light-color-ts-enum: #7e6f15;
        --light-color-ts-enum-member: var(--light-color-ts-enum);
        --light-color-ts-variable: #4760ec;
        --light-color-ts-function: #572be7;
        --light-color-ts-class: #1f70c2;
        --light-color-ts-interface: #108024;
        --light-color-ts-constructor: var(--light-color-ts-class);
        --light-color-ts-property: #9f5f30;
        --light-color-ts-method: #be3989;
        --light-color-ts-reference: #ff4d82;
        --light-color-ts-call-signature: var(--light-color-ts-method);
        --light-color-ts-index-signature: var(--light-color-ts-property);
        --light-color-ts-constructor-signature: var(
            --light-color-ts-constructor
        );
        --light-color-ts-parameter: var(--light-color-ts-variable);
        /* type literal not included as links will never be generated to it */
        --light-color-ts-type-parameter: #a55c0e;
        --light-color-ts-accessor: #c73c3c;
        --light-color-ts-get-signature: var(--light-color-ts-accessor);
        --light-color-ts-set-signature: var(--light-color-ts-accessor);
        --light-color-ts-type-alias: #d51270;
        /* reference not included as links will be colored with the kind that it points to */
        --light-color-document: #000000;

        --light-color-alert-note: #0969d9;
        --light-color-alert-tip: #1a7f37;
        --light-color-alert-important: #8250df;
        --light-color-alert-warning: #9a6700;
        --light-color-alert-caution: #cf222e;

        --light-external-icon: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100' width='10' height='10'><path fill-opacity='0' stroke='%23000' stroke-width='10' d='m43,35H5v60h60V57M45,5v10l10,10-30,30 20,20 30-30 10,10h10V5z'/></svg>");
        --light-color-scheme: light;
    }

    :root {
        /* Dark */
        --dark-color-background: #2b2e33;
        --dark-color-background-secondary: #1e2024;
        /* Not to be confused with [:active](https://developer.mozilla.org/en-US/docs/Web/CSS/:active) */
        --dark-color-background-active: #5d5d6a;
        --dark-color-background-warning: #bebe00;
        --dark-color-warning-text: #222;
        --dark-color-accent: #9096a2;
        --dark-color-active-menu-item: var(--dark-color-background-active);
        --dark-color-text: #f5f5f5;
        --dark-color-contrast-text: #ffffff;
        --dark-color-text-aside: #dddddd;

        --dark-color-icon-background: var(--dark-color-background-secondary);
        --dark-color-icon-text: var(--dark-color-text);

        --dark-color-comment-tag-text: var(--dark-color-text);
        --dark-color-comment-tag: var(--dark-color-background);

        --dark-color-link: #00aff4;
        --dark-color-focus-outline: #4c97f2;

        --dark-color-ts-keyword: #3399ff;
        --dark-color-ts-project: #e358ff;
        --dark-color-ts-module: var(--dark-color-ts-project);
        --dark-color-ts-namespace: var(--dark-color-ts-project);
        --dark-color-ts-enum: #f4d93e;
        --dark-color-ts-enum-member: var(--dark-color-ts-enum);
        --dark-color-ts-variable: #798dff;
        --dark-color-ts-function: #a280ff;
        --dark-color-ts-class: #8ac4ff;
        --dark-color-ts-interface: #6cff87;
        --dark-color-ts-constructor: var(--dark-color-ts-class);
        --dark-color-ts-property: #ff984d;
        --dark-color-ts-method: #ff4db8;
        --dark-color-ts-reference: #ff4d82;
        --dark-color-ts-call-signature: var(--dark-color-ts-method);
        --dark-color-ts-index-signature: var(--dark-color-ts-property);
        --dark-color-ts-constructor-signature: var(--dark-color-ts-constructor);
        --dark-color-ts-parameter: var(--dark-color-ts-variable);
        /* type literal not included as links will never be generated to it */
        --dark-color-ts-type-parameter: #e07d13;
        --dark-color-ts-accessor: #ff6060;
        --dark-color-ts-get-signature: var(--dark-color-ts-accessor);
        --dark-color-ts-set-signature: var(--dark-color-ts-accessor);
        --dark-color-ts-type-alias: #ff6492;
        /* reference not included as links will be colored with the kind that it points to */
        --dark-color-document: #ffffff;

        --dark-color-alert-note: #0969d9;
        --dark-color-alert-tip: #1a7f37;
        --dark-color-alert-important: #8250df;
        --dark-color-alert-warning: #9a6700;
        --dark-color-alert-caution: #cf222e;

        --dark-external-icon: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100' width='10' height='10'><path fill-opacity='0' stroke='%23fff' stroke-width='10' d='m43,35H5v60h60V57M45,5v10l10,10-30,30 20,20 30-30 10,10h10V5z'/></svg>");
        --dark-color-scheme: dark;
    }

    @media (prefers-color-scheme: light) {
        :root {
            --color-background: var(--light-color-background);
            --color-background-secondary: var(
                --light-color-background-secondary
            );
            --color-background-active: var(--light-color-background-active);
            --color-background-warning: var(--light-color-background-warning);
            --color-warning-text: var(--light-color-warning-text);
            --color-accent: var(--light-color-accent);
            --color-active-menu-item: var(--light-color-active-menu-item);
            --color-text: var(--light-color-text);
            --color-contrast-text: var(--light-color-contrast-text);
            --color-text-aside: var(--light-color-text-aside);

            --color-icon-background: var(--light-color-icon-background);
            --color-icon-text: var(--light-color-icon-text);

            --color-comment-tag-text: var(--light-color-text);
            --color-comment-tag: var(--light-color-background);

            --color-link: var(--light-color-link);
            --color-focus-outline: var(--light-color-focus-outline);

            --color-ts-keyword: var(--light-color-ts-keyword);
            --color-ts-project: var(--light-color-ts-project);
            --color-ts-module: var(--light-color-ts-module);
            --color-ts-namespace: var(--light-color-ts-namespace);
            --color-ts-enum: var(--light-color-ts-enum);
            --color-ts-enum-member: var(--light-color-ts-enum-member);
            --color-ts-variable: var(--light-color-ts-variable);
            --color-ts-function: var(--light-color-ts-function);
            --color-ts-class: var(--light-color-ts-class);
            --color-ts-interface: var(--light-color-ts-interface);
            --color-ts-constructor: var(--light-color-ts-constructor);
            --color-ts-property: var(--light-color-ts-property);
            --color-ts-method: var(--light-color-ts-method);
            --color-ts-reference: var(--light-color-ts-reference);
            --color-ts-call-signature: var(--light-color-ts-call-signature);
            --color-ts-index-signature: var(--light-color-ts-index-signature);
            --color-ts-constructor-signature: var(
                --light-color-ts-constructor-signature
            );
            --color-ts-parameter: var(--light-color-ts-parameter);
            --color-ts-type-parameter: var(--light-color-ts-type-parameter);
            --color-ts-accessor: var(--light-color-ts-accessor);
            --color-ts-get-signature: var(--light-color-ts-get-signature);
            --color-ts-set-signature: var(--light-color-ts-set-signature);
            --color-ts-type-alias: var(--light-color-ts-type-alias);
            --color-document: var(--light-color-document);

            --color-alert-note: var(--light-color-alert-note);
            --color-alert-tip: var(--light-color-alert-tip);
            --color-alert-important: var(--light-color-alert-important);
            --color-alert-warning: var(--light-color-alert-warning);
            --color-alert-caution: var(--light-color-alert-caution);

            --external-icon: var(--light-external-icon);
            --color-scheme: var(--light-color-scheme);
        }
    }

    @media (prefers-color-scheme: dark) {
        :root {
            --color-background: var(--dark-color-background);
            --color-background-secondary: var(
                --dark-color-background-secondary
            );
            --color-background-active: var(--dark-color-background-active);
            --color-background-warning: var(--dark-color-background-warning);
            --color-warning-text: var(--dark-color-warning-text);
            --color-accent: var(--dark-color-accent);
            --color-active-menu-item: var(--dark-color-active-menu-item);
            --color-text: var(--dark-color-text);
            --color-contrast-text: var(--dark-color-contrast-text);
            --color-text-aside: var(--dark-color-text-aside);

            --color-icon-background: var(--dark-color-icon-background);
            --color-icon-text: var(--dark-color-icon-text);

            --color-comment-tag-text: var(--dark-color-text);
            --color-comment-tag: var(--dark-color-background);

            --color-link: var(--dark-color-link);
            --color-focus-outline: var(--dark-color-focus-outline);

            --color-ts-keyword: var(--dark-color-ts-keyword);
            --color-ts-project: var(--dark-color-ts-project);
            --color-ts-module: var(--dark-color-ts-module);
            --color-ts-namespace: var(--dark-color-ts-namespace);
            --color-ts-enum: var(--dark-color-ts-enum);
            --color-ts-enum-member: var(--dark-color-ts-enum-member);
            --color-ts-variable: var(--dark-color-ts-variable);
            --color-ts-function: var(--dark-color-ts-function);
            --color-ts-class: var(--dark-color-ts-class);
            --color-ts-interface: var(--dark-color-ts-interface);
            --color-ts-constructor: var(--dark-color-ts-constructor);
            --color-ts-property: var(--dark-color-ts-property);
            --color-ts-method: var(--dark-color-ts-method);
            --color-ts-reference: var(--dark-color-ts-reference);
            --color-ts-call-signature: var(--dark-color-ts-call-signature);
            --color-ts-index-signature: var(--dark-color-ts-index-signature);
            --color-ts-constructor-signature: var(
                --dark-color-ts-constructor-signature
            );
            --color-ts-parameter: var(--dark-color-ts-parameter);
            --color-ts-type-parameter: var(--dark-color-ts-type-parameter);
            --color-ts-accessor: var(--dark-color-ts-accessor);
            --color-ts-get-signature: var(--dark-color-ts-get-signature);
            --color-ts-set-signature: var(--dark-color-ts-set-signature);
            --color-ts-type-alias: var(--dark-color-ts-type-alias);
            --color-document: var(--dark-color-document);

            --color-alert-note: var(--dark-color-alert-note);
            --color-alert-tip: var(--dark-color-alert-tip);
            --color-alert-important: var(--dark-color-alert-important);
            --color-alert-warning: var(--dark-color-alert-warning);
            --color-alert-caution: var(--dark-color-alert-caution);

            --external-icon: var(--dark-external-icon);
            --color-scheme: var(--dark-color-scheme);
        }
    }

    :root[data-theme="light"] {
        --color-background: var(--light-color-background);
        --color-background-secondary: var(--light-color-background-secondary);
        --color-background-active: var(--light-color-background-active);
        --color-background-warning: var(--light-color-background-warning);
        --color-warning-text: var(--light-color-warning-text);
        --color-icon-background: var(--light-color-icon-background);
        --color-accent: var(--light-color-accent);
        --color-active-menu-item: var(--light-color-active-menu-item);
        --color-text: var(--light-color-text);
        --color-contrast-text: var(--light-color-contrast-text);
        --color-text-aside: var(--light-color-text-aside);
        --color-icon-text: var(--light-color-icon-text);

        --color-comment-tag-text: var(--light-color-text);
        --color-comment-tag: var(--light-color-background);

        --color-link: var(--light-color-link);
        --color-focus-outline: var(--light-color-focus-outline);

        --color-ts-keyword: var(--light-color-ts-keyword);
        --color-ts-project: var(--light-color-ts-project);
        --color-ts-module: var(--light-color-ts-module);
        --color-ts-namespace: var(--light-color-ts-namespace);
        --color-ts-enum: var(--light-color-ts-enum);
        --color-ts-enum-member: var(--light-color-ts-enum-member);
        --color-ts-variable: var(--light-color-ts-variable);
        --color-ts-function: var(--light-color-ts-function);
        --color-ts-class: var(--light-color-ts-class);
        --color-ts-interface: var(--light-color-ts-interface);
        --color-ts-constructor: var(--light-color-ts-constructor);
        --color-ts-property: var(--light-color-ts-property);
        --color-ts-method: var(--light-color-ts-method);
        --color-ts-reference: var(--light-color-ts-reference);
        --color-ts-call-signature: var(--light-color-ts-call-signature);
        --color-ts-index-signature: var(--light-color-ts-index-signature);
        --color-ts-constructor-signature: var(
            --light-color-ts-constructor-signature
        );
        --color-ts-parameter: var(--light-color-ts-parameter);
        --color-ts-type-parameter: var(--light-color-ts-type-parameter);
        --color-ts-accessor: var(--light-color-ts-accessor);
        --color-ts-get-signature: var(--light-color-ts-get-signature);
        --color-ts-set-signature: var(--light-color-ts-set-signature);
        --color-ts-type-alias: var(--light-color-ts-type-alias);
        --color-document: var(--light-color-document);

        --color-note: var(--light-color-note);
        --color-tip: var(--light-color-tip);
        --color-important: var(--light-color-important);
        --color-warning: var(--light-color-warning);
        --color-caution: var(--light-color-caution);

        --external-icon: var(--light-external-icon);
        --color-scheme: var(--light-color-scheme);
    }

    :root[data-theme="dark"] {
        --color-background: var(--dark-color-background);
        --color-background-secondary: var(--dark-color-background-secondary);
        --color-background-active: var(--dark-color-background-active);
        --color-background-warning: var(--dark-color-background-warning);
        --color-warning-text: var(--dark-color-warning-text);
        --color-icon-background: var(--dark-color-icon-background);
        --color-accent: var(--dark-color-accent);
        --color-active-menu-item: var(--dark-color-active-menu-item);
        --color-text: var(--dark-color-text);
        --color-contrast-text: var(--dark-color-contrast-text);
        --color-text-aside: var(--dark-color-text-aside);
        --color-icon-text: var(--dark-color-icon-text);

        --color-comment-tag-text: var(--dark-color-text);
        --color-comment-tag: var(--dark-color-background);

        --color-link: var(--dark-color-link);
        --color-focus-outline: var(--dark-color-focus-outline);

        --color-ts-keyword: var(--dark-color-ts-keyword);
        --color-ts-project: var(--dark-color-ts-project);
        --color-ts-module: var(--dark-color-ts-module);
        --color-ts-namespace: var(--dark-color-ts-namespace);
        --color-ts-enum: var(--dark-color-ts-enum);
        --color-ts-enum-member: var(--dark-color-ts-enum-member);
        --color-ts-variable: var(--dark-color-ts-variable);
        --color-ts-function: var(--dark-color-ts-function);
        --color-ts-class: var(--dark-color-ts-class);
        --color-ts-interface: var(--dark-color-ts-interface);
        --color-ts-constructor: var(--dark-color-ts-constructor);
        --color-ts-property: var(--dark-color-ts-property);
        --color-ts-method: var(--dark-color-ts-method);
        --color-ts-reference: var(--dark-color-ts-reference);
        --color-ts-call-signature: var(--dark-color-ts-call-signature);
        --color-ts-index-signature: var(--dark-color-ts-index-signature);
        --color-ts-constructor-signature: var(
            --dark-color-ts-constructor-signature
        );
        --color-ts-parameter: var(--dark-color-ts-parameter);
        --color-ts-type-parameter: var(--dark-color-ts-type-parameter);
        --color-ts-accessor: var(--dark-color-ts-accessor);
        --color-ts-get-signature: var(--dark-color-ts-get-signature);
        --color-ts-set-signature: var(--dark-color-ts-set-signature);
        --color-ts-type-alias: var(--dark-color-ts-type-alias);
        --color-document: var(--dark-color-document);

        --color-note: var(--dark-color-note);
        --color-tip: var(--dark-color-tip);
        --color-important: var(--dark-color-important);
        --color-warning: var(--dark-color-warning);
        --color-caution: var(--dark-color-caution);

        --external-icon: var(--dark-external-icon);
        --color-scheme: var(--dark-color-scheme);
    }

    html {
        color-scheme: var(--color-scheme);
        @media (prefers-reduced-motion: no-preference) {
            scroll-behavior: smooth;
        }
    }

    *:focus-visible,
    .tsd-accordion-summary:focus-visible svg {
        outline: 2px solid var(--color-focus-outline);
    }

    .always-visible,
    .always-visible .tsd-signatures {
        display: inherit !important;
    }

    h1,
    h2,
    h3,
    h4,
    h5,
    h6 {
        line-height: 1.2;
    }

    h1 {
        font-size: 1.875rem;
        margin: 0.67rem 0;
    }

    h2 {
        font-size: 1.5rem;
        margin: 0.83rem 0;
    }

    h3 {
        font-size: 1.25rem;
        margin: 1rem 0;
    }

    h4 {
        font-size: 1.05rem;
        margin: 1.33rem 0;
    }

    h5 {
        font-size: 1rem;
        margin: 1.5rem 0;
    }

    h6 {
        font-size: 0.875rem;
        margin: 2.33rem 0;
    }

    dl,
    menu,
    ol,
    ul {
        margin: 1em 0;
    }

    dd {
        margin: 0 0 0 34px;
    }

    .container {
        max-width: 1700px;
        padding: 0 2rem;
    }

    /* Footer */
    footer {
        border-top: 1px solid var(--color-accent);
        padding-top: 1rem;
        padding-bottom: 1rem;
        max-height: var(--dim-footer-height);
    }
    footer > p {
        margin: 0 1em;
    }

    .container-main {
        margin: var(--dim-container-main-margin-y) auto;
        /* toolbar, footer, margin */
        min-height: calc(
            100svh - var(--dim-header-height) - var(--dim-footer-height) -
                2 * var(--dim-container-main-margin-y)
        );
    }

    @keyframes fade-in {
        from {
            opacity: 0;
        }
        to {
            opacity: 1;
        }
    }
    @keyframes fade-out {
        from {
            opacity: 1;
            visibility: visible;
        }
        to {
            opacity: 0;
        }
    }
    @keyframes pop-in-from-right {
        from {
            transform: translate(100%, 0);
        }
        to {
            transform: translate(0, 0);
        }
    }
    @keyframes pop-out-to-right {
        from {
            transform: translate(0, 0);
            visibility: visible;
        }
        to {
            transform: translate(100%, 0);
        }
    }
    body {
        background: var(--color-background);
        font-family:
            -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans",
            Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
        font-size: 16px;
        color: var(--color-text);
        margin: 0;
    }

    a {
        color: var(--color-link);
        text-decoration: none;
    }
    a:hover {
        text-decoration: underline;
    }
    a.external[target="_blank"] {
        background-image: var(--external-icon);
        background-position: top 3px right;
        background-repeat: no-repeat;
        padding-right: 13px;
    }
    a.tsd-anchor-link {
        color: var(--color-text);
    }
    :target {
        scroll-margin-block: calc(var(--dim-header-height) + 0.5rem);
    }

    code,
    pre {
        font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
        padding: 0.2em;
        margin: 0;
        font-size: 0.875rem;
        border-radius: 0.8em;
    }

    pre {
        position: relative;
        white-space: pre-wrap;
        word-wrap: break-word;
        padding: 10px;
        border: 1px solid var(--color-accent);
        margin-bottom: 8px;
    }
    pre code {
        padding: 0;
        font-size: 100%;
    }
    pre > button {
        position: absolute;
        top: 10px;
        right: 10px;
        opacity: 0;
        transition: opacity 0.1s;
        box-sizing: border-box;
    }
    pre:hover > button,
    pre > button.visible,
    pre > button:focus-visible {
        opacity: 1;
    }

    blockquote {
        margin: 1em 0;
        padding-left: 1em;
        border-left: 4px solid gray;
    }

    img {
        max-width: 100%;
    }

    * {
        scrollbar-width: thin;
        scrollbar-color: var(--color-accent) var(--color-icon-background);
    }

    *::-webkit-scrollbar {
        width: 0.75rem;
    }

    *::-webkit-scrollbar-track {
        background: var(--color-icon-background);
    }

    *::-webkit-scrollbar-thumb {
        background-color: var(--color-accent);
        border-radius: 999rem;
        border: 0.25rem solid var(--color-icon-background);
    }

    dialog {
        border: none;
        outline: none;
        padding: 0;
        background-color: var(--color-background);
    }
    dialog::backdrop {
        display: none;
    }
    #tsd-overlay {
        background-color: rgba(0, 0, 0, 0.5);
        position: fixed;
        z-index: 9999;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        animation: fade-in var(--modal-animation-duration) forwards;
    }
    #tsd-overlay.closing {
        animation-name: fade-out;
    }

    .tsd-typography {
        line-height: 1.333em;
    }
    .tsd-typography ul {
        list-style: square;
        padding: 0 0 0 20px;
        margin: 0;
    }
    .tsd-typography .tsd-index-panel h3,
    .tsd-index-panel .tsd-typography h3,
    .tsd-typography h4,
    .tsd-typography h5,
    .tsd-typography h6 {
        font-size: 1em;
    }
    .tsd-typography h5,
    .tsd-typography h6 {
        font-weight: normal;
    }
    .tsd-typography p,
    .tsd-typography ul,
    .tsd-typography ol {
        margin: 1em 0;
    }
    .tsd-typography table {
        border-collapse: collapse;
        border: none;
    }
    .tsd-typography td,
    .tsd-typography th {
        padding: 6px 13px;
        border: 1px solid var(--color-accent);
    }
    .tsd-typography thead,
    .tsd-typography tr:nth-child(even) {
        background-color: var(--color-background-secondary);
    }

    .tsd-alert {
        padding: 8px 16px;
        margin-bottom: 16px;
        border-left: 0.25em solid var(--alert-color);
    }
    .tsd-alert blockquote > :last-child,
    .tsd-alert > :last-child {
        margin-bottom: 0;
    }
    .tsd-alert-title {
        color: var(--alert-color);
        display: inline-flex;
        align-items: center;
    }
    .tsd-alert-title span {
        margin-left: 4px;
    }

    .tsd-alert-note {
        --alert-color: var(--color-alert-note);
    }
    .tsd-alert-tip {
        --alert-color: var(--color-alert-tip);
    }
    .tsd-alert-important {
        --alert-color: var(--color-alert-important);
    }
    .tsd-alert-warning {
        --alert-color: var(--color-alert-warning);
    }
    .tsd-alert-caution {
        --alert-color: var(--color-alert-caution);
    }

    .tsd-breadcrumb {
        margin: 0;
        margin-top: 1rem;
        padding: 0;
        color: var(--color-text-aside);
    }
    .tsd-breadcrumb a {
        color: var(--color-text-aside);
        text-decoration: none;
    }
    .tsd-breadcrumb a:hover {
        text-decoration: underline;
    }
    .tsd-breadcrumb li {
        display: inline;
    }
    .tsd-breadcrumb li:after {
        content: " / ";
    }

    .tsd-comment-tags {
        display: flex;
        flex-direction: column;
    }
    dl.tsd-comment-tag-group {
        display: flex;
        align-items: center;
        overflow: hidden;
        margin: 0.5em 0;
    }
    dl.tsd-comment-tag-group dt {
        display: flex;
        margin-right: 0.5em;
        font-size: 0.875em;
        font-weight: normal;
    }
    dl.tsd-comment-tag-group dd {
        margin: 0;
    }
    code.tsd-tag {
        padding: 0.25em 0.4em;
        border: 0.1em solid var(--color-accent);
        margin-right: 0.25em;
        font-size: 70%;
    }
    h1 code.tsd-tag:first-of-type {
        margin-left: 0.25em;
    }

    dl.tsd-comment-tag-group dd:before,
    dl.tsd-comment-tag-group dd:after {
        content: " ";
    }
    dl.tsd-comment-tag-group dd pre,
    dl.tsd-comment-tag-group dd:after {
        clear: both;
    }
    dl.tsd-comment-tag-group p {
        margin: 0;
    }

    .tsd-panel.tsd-comment .lead {
        font-size: 1.1em;
        line-height: 1.333em;
        margin-bottom: 2em;
    }
    .tsd-panel.tsd-comment .lead:last-child {
        margin-bottom: 0;
    }

    .tsd-filter-visibility h4 {
        font-size: 1rem;
        padding-top: 0.75rem;
        padding-bottom: 0.5rem;
        margin: 0;
    }
    .tsd-filter-item:not(:last-child) {
        margin-bottom: 0.5rem;
    }
    .tsd-filter-input {
        display: flex;
        width: -moz-fit-content;
        width: fit-content;
        align-items: center;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        user-select: none;
        cursor: pointer;
    }
    .tsd-filter-input input[type="checkbox"] {
        cursor: pointer;
        position: absolute;
        width: 1.5em;
        height: 1.5em;
        opacity: 0;
    }
    .tsd-filter-input input[type="checkbox"]:disabled {
        pointer-events: none;
    }
    .tsd-filter-input svg {
        cursor: pointer;
        width: 1.5em;
        height: 1.5em;
        margin-right: 0.5em;
        border-radius: 0.33em;
        /* Leaving this at full opacity breaks event listeners on Firefox.
        Don't remove unless you know what you're doing. */
        opacity: 0.99;
    }
    .tsd-filter-input input[type="checkbox"]:focus-visible + svg {
        outline: 2px solid var(--color-focus-outline);
    }
    .tsd-checkbox-background {
        fill: var(--color-accent);
    }
    input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark {
        stroke: var(--color-text);
    }
    .tsd-filter-input input:disabled ~ svg > .tsd-checkbox-background {
        fill: var(--color-background);
        stroke: var(--color-accent);
        stroke-width: 0.25rem;
    }
    .tsd-filter-input input:disabled ~ svg > .tsd-checkbox-checkmark {
        stroke: var(--color-accent);
    }

    .settings-label {
        font-weight: bold;
        text-transform: uppercase;
        display: inline-block;
    }

    .tsd-filter-visibility .settings-label {
        margin: 0.75rem 0 0.5rem 0;
    }

    .tsd-theme-toggle .settings-label {
        margin: 0.75rem 0.75rem 0 0;
    }

    .tsd-hierarchy h4 label:hover span {
        text-decoration: underline;
    }

    .tsd-hierarchy {
        list-style: square;
        margin: 0;
    }
    .tsd-hierarchy-target {
        font-weight: bold;
    }
    .tsd-hierarchy-toggle {
        color: var(--color-link);
        cursor: pointer;
    }

    .tsd-full-hierarchy:not(:last-child) {
        margin-bottom: 1em;
        padding-bottom: 1em;
        border-bottom: 1px solid var(--color-accent);
    }
    .tsd-full-hierarchy,
    .tsd-full-hierarchy ul {
        list-style: none;
        margin: 0;
        padding: 0;
    }
    .tsd-full-hierarchy ul {
        padding-left: 1.5rem;
    }
    .tsd-full-hierarchy a {
        padding: 0.25rem 0 !important;
        font-size: 1rem;
        display: inline-flex;
        align-items: center;
        color: var(--color-text);
    }
    .tsd-full-hierarchy svg[data-dropdown] {
        cursor: pointer;
    }
    .tsd-full-hierarchy svg[data-dropdown="false"] {
        transform: rotate(-90deg);
    }
    .tsd-full-hierarchy svg[data-dropdown="false"] ~ ul {
        display: none;
    }

    .tsd-panel-group.tsd-index-group {
        margin-bottom: 0;
    }
    .tsd-index-panel .tsd-index-list {
        list-style: none;
        line-height: 1.333em;
        margin: 0;
        padding: 0.25rem 0 0 0;
        overflow: hidden;
        display: grid;
        grid-template-columns: repeat(3, 1fr);
        column-gap: 1rem;
        grid-template-rows: auto;
    }
    @media (max-width: 1024px) {
        .tsd-index-panel .tsd-index-list {
            grid-template-columns: repeat(2, 1fr);
        }
    }
    @media (max-width: 768px) {
        .tsd-index-panel .tsd-index-list {
            grid-template-columns: repeat(1, 1fr);
        }
    }
    .tsd-index-panel .tsd-index-list li {
        -webkit-page-break-inside: avoid;
        -moz-page-break-inside: avoid;
        -ms-page-break-inside: avoid;
        -o-page-break-inside: avoid;
        page-break-inside: avoid;
    }

    .tsd-flag {
        display: inline-block;
        padding: 0.25em 0.4em;
        border-radius: 4px;
        color: var(--color-comment-tag-text);
        background-color: var(--color-comment-tag);
        text-indent: 0;
        font-size: 75%;
        line-height: 1;
        font-weight: normal;
    }

    .tsd-anchor {
        position: relative;
        top: -100px;
    }

    .tsd-member {
        position: relative;
    }
    .tsd-member .tsd-anchor + h3 {
        display: flex;
        align-items: center;
        margin-top: 0;
        margin-bottom: 0;
        border-bottom: none;
    }

    .tsd-navigation.settings {
        margin: 0;
        margin-bottom: 1rem;
    }
    .tsd-navigation > a,
    .tsd-navigation .tsd-accordion-summary {
        width: calc(100% - 0.25rem);
        display: flex;
        align-items: center;
    }
    .tsd-navigation a,
    .tsd-navigation summary > span,
    .tsd-page-navigation a {
        display: flex;
        width: calc(100% - 0.25rem);
        align-items: center;
        padding: 0.25rem;
        color: var(--color-text);
        text-decoration: none;
        box-sizing: border-box;
    }
    .tsd-navigation a.current,
    .tsd-page-navigation a.current {
        background: var(--color-active-menu-item);
        color: var(--color-contrast-text);
    }
    .tsd-navigation a:hover,
    .tsd-page-navigation a:hover {
        text-decoration: underline;
    }
    .tsd-navigation ul,
    .tsd-page-navigation ul {
        margin-top: 0;
        margin-bottom: 0;
        padding: 0;
        list-style: none;
    }
    .tsd-navigation li,
    .tsd-page-navigation li {
        padding: 0;
        max-width: 100%;
    }
    .tsd-navigation .tsd-nav-link {
        display: none;
    }
    .tsd-nested-navigation {
        margin-left: 3rem;
    }
    .tsd-nested-navigation > li > details {
        margin-left: -1.5rem;
    }
    .tsd-small-nested-navigation {
        margin-left: 1.5rem;
    }
    .tsd-small-nested-navigation > li > details {
        margin-left: -1.5rem;
    }

    .tsd-page-navigation-section > summary {
        padding: 0.25rem;
    }
    .tsd-page-navigation-section > summary > svg {
        margin-right: 0.25rem;
    }
    .tsd-page-navigation-section > div {
        margin-left: 30px;
    }
    .tsd-page-navigation ul {
        padding-left: 1.75rem;
    }

    #tsd-sidebar-links a {
        margin-top: 0;
        margin-bottom: 0.5rem;
        line-height: 1.25rem;
    }
    #tsd-sidebar-links a:last-of-type {
        margin-bottom: 0;
    }

    a.tsd-index-link {
        padding: 0.25rem 0 !important;
        font-size: 1rem;
        line-height: 1.25rem;
        display: inline-flex;
        align-items: center;
        color: var(--color-text);
    }
    .tsd-accordion-summary {
        list-style-type: none; /* hide marker on non-safari */
        outline: none; /* broken on safari, so just hide it */
        display: flex;
        align-items: center;
        gap: 0.25rem;
        box-sizing: border-box;
    }
    .tsd-accordion-summary::-webkit-details-marker {
        display: none; /* hide marker on safari */
    }
    .tsd-accordion-summary,
    .tsd-accordion-summary a {
        -moz-user-select: none;
        -webkit-user-select: none;
        -ms-user-select: none;
        user-select: none;

        cursor: pointer;
    }
    .tsd-accordion-summary a {
        width: calc(100% - 1.5rem);
    }
    .tsd-accordion-summary > * {
        margin-top: 0;
        margin-bottom: 0;
        padding-top: 0;
        padding-bottom: 0;
    }
    /*
     * We need to be careful to target the arrow indicating whether the accordion
     * is open, but not any other SVGs included in the details element.
     */
    .tsd-accordion:not([open]) > .tsd-accordion-summary > svg:first-child {
        transform: rotate(-90deg);
    }
    .tsd-index-content > :not(:first-child) {
        margin-top: 0.75rem;
    }
    .tsd-index-summary {
        margin-top: 1.5rem;
        margin-bottom: 0.75rem;
        display: flex;
        align-content: center;
    }

    .tsd-no-select {
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        user-select: none;
    }
    .tsd-kind-icon {
        margin-right: 0.5rem;
        width: 1.25rem;
        height: 1.25rem;
        min-width: 1.25rem;
        min-height: 1.25rem;
    }
    .tsd-signature > .tsd-kind-icon {
        margin-right: 0.8rem;
    }

    .tsd-panel {
        margin-bottom: 2.5rem;
    }
    .tsd-panel.tsd-member {
        margin-bottom: 4rem;
    }
    .tsd-panel:empty {
        display: none;
    }
    .tsd-panel > h1,
    .tsd-panel > h2,
    .tsd-panel > h3 {
        margin: 1.5rem -1.5rem 0.75rem -1.5rem;
        padding: 0 1.5rem 0.75rem 1.5rem;
    }
    .tsd-panel > h1.tsd-before-signature,
    .tsd-panel > h2.tsd-before-signature,
    .tsd-panel > h3.tsd-before-signature {
        margin-bottom: 0;
        border-bottom: none;
    }

    .tsd-panel-group {
        margin: 2rem 0;
    }
    .tsd-panel-group.tsd-index-group {
        margin: 2rem 0;
    }
    .tsd-panel-group.tsd-index-group details {
        margin: 2rem 0;
    }
    .tsd-panel-group > .tsd-accordion-summary {
        margin-bottom: 1rem;
    }

    #tsd-search[open] {
        animation: fade-in var(--modal-animation-duration) ease-out forwards;
    }
    #tsd-search[open].closing {
        animation-name: fade-out;
    }

    /* Avoid setting `display` on closed dialog */
    #tsd-search[open] {
        display: flex;
        flex-direction: column;
        padding: 1rem;
        width: 32rem;
        max-width: 90vw;
        max-height: calc(100vh - env(keyboard-inset-height, 0px) - 25vh);
        /* Anchor dialog to top */
        margin-top: 10vh;
        border-radius: 6px;
        will-change: max-height;
    }
    #tsd-search-input {
        box-sizing: border-box;
        width: 100%;
        padding: 0 0.625rem; /* 10px */
        outline: 0;
        border: 2px solid var(--color-accent);
        background-color: transparent;
        color: var(--color-text);
        border-radius: 4px;
        height: 2.5rem;
        flex: 0 0 auto;
        font-size: 0.875rem;
        transition: border-color 0.2s, background-color 0.2s;
    }
    #tsd-search-input:focus-visible {
        background-color: var(--color-background-active);
        border-color: transparent;
        color: var(--color-contrast-text);
    }
    #tsd-search-input::placeholder {
        color: inherit;
        opacity: 0.8;
    }
    #tsd-search-results {
        margin: 0;
        padding: 0;
        list-style: none;
        flex: 1 1 auto;
        display: flex;
        flex-direction: column;
        overflow-y: auto;
    }
    #tsd-search-results:not(:empty) {
        margin-top: 0.5rem;
    }
    #tsd-search-results > li {
        background-color: var(--color-background);
        line-height: 1.5;
        box-sizing: border-box;
        border-radius: 4px;
    }
    #tsd-search-results > li:nth-child(even) {
        background-color: var(--color-background-secondary);
    }
    #tsd-search-results > li:is(:hover, [aria-selected="true"]) {
        background-color: var(--color-background-active);
        color: var(--color-contrast-text);
    }
    /* It's important that this takes full size of parent `li`, to capture a click on `li` */
    #tsd-search-results > li > a {
        display: flex;
        align-items: center;
        padding: 0.5rem 0.25rem;
        box-sizing: border-box;
        width: 100%;
    }
    #tsd-search-results > li > a > .text {
        flex: 1 1 auto;
        min-width: 0;
        overflow-wrap: anywhere;
    }
    #tsd-search-results > li > a .parent {
        color: var(--color-text-aside);
    }
    #tsd-search-results > li > a mark {
        color: inherit;
        background-color: inherit;
        font-weight: bold;
    }
    #tsd-search-status {
        flex: 1;
        display: grid;
        place-content: center;
        text-align: center;
        overflow-wrap: anywhere;
    }
    #tsd-search-status:not(:empty) {
        min-height: 6rem;
    }

    .tsd-signature {
        margin: 0 0 1rem 0;
        padding: 1rem 0.5rem;
        border: 1px solid var(--color-accent);
        font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
        font-size: 14px;
        overflow-x: auto;
    }

    .tsd-signature-keyword {
        color: var(--color-ts-keyword);
        font-weight: normal;
    }

    .tsd-signature-symbol {
        color: var(--color-text-aside);
        font-weight: normal;
    }

    .tsd-signature-type {
        font-style: italic;
        font-weight: normal;
    }

    .tsd-signatures {
        padding: 0;
        margin: 0 0 1em 0;
        list-style-type: none;
    }
    .tsd-signatures .tsd-signature {
        margin: 0;
        border-color: var(--color-accent);
        border-width: 1px 0;
        transition: background-color 0.1s;
    }
    .tsd-signatures .tsd-index-signature:not(:last-child) {
        margin-bottom: 1em;
    }
    .tsd-signatures .tsd-index-signature .tsd-signature {
        border-width: 1px;
    }
    .tsd-description .tsd-signatures .tsd-signature {
        border-width: 1px;
    }

    ul.tsd-parameter-list,
    ul.tsd-type-parameter-list {
        list-style: square;
        margin: 0;
        padding-left: 20px;
    }
    ul.tsd-parameter-list > li.tsd-parameter-signature,
    ul.tsd-type-parameter-list > li.tsd-parameter-signature {
        list-style: none;
        margin-left: -20px;
    }
    ul.tsd-parameter-list h5,
    ul.tsd-type-parameter-list h5 {
        font-size: 16px;
        margin: 1em 0 0.5em 0;
    }
    .tsd-sources {
        margin-top: 1rem;
        font-size: 0.875em;
    }
    .tsd-sources a {
        color: var(--color-text-aside);
        text-decoration: underline;
    }
    .tsd-sources ul {
        list-style: none;
        padding: 0;
    }

    .tsd-page-toolbar {
        position: sticky;
        z-index: 1;
        top: 0;
        left: 0;
        width: 100%;
        color: var(--color-text);
        background: var(--color-background-secondary);
        border-bottom: var(--dim-toolbar-border-bottom-width)
            var(--color-accent) solid;
        transition: transform 0.3s ease-in-out;
    }
    .tsd-page-toolbar a {
        color: var(--color-text);
    }
    .tsd-toolbar-contents {
        display: flex;
        align-items: center;
        height: var(--dim-toolbar-contents-height);
        margin: 0 auto;
    }
    .tsd-toolbar-contents > .title {
        font-weight: bold;
        margin-right: auto;
    }
    #tsd-toolbar-links {
        display: flex;
        align-items: center;
        gap: 1.5rem;
        margin-right: 1rem;
    }

    .tsd-widget {
        box-sizing: border-box;
        display: inline-block;
        opacity: 0.8;
        height: 2.5rem;
        width: 2.5rem;
        transition: opacity 0.1s, background-color 0.1s;
        text-align: center;
        cursor: pointer;
        border: none;
        background-color: transparent;
    }
    .tsd-widget:hover {
        opacity: 0.9;
    }
    .tsd-widget:active {
        opacity: 1;
        background-color: var(--color-accent);
    }
    #tsd-toolbar-menu-trigger {
        display: none;
    }

    .tsd-member-summary-name {
        display: inline-flex;
        align-items: center;
        padding: 0.25rem;
        text-decoration: none;
    }

    .tsd-anchor-icon {
        display: inline-flex;
        align-items: center;
        margin-left: 0.5rem;
        color: var(--color-text);
        vertical-align: middle;
    }

    .tsd-anchor-icon svg {
        width: 1em;
        height: 1em;
        visibility: hidden;
    }

    .tsd-member-summary-name:hover > .tsd-anchor-icon svg,
    .tsd-anchor-link:hover > .tsd-anchor-icon svg,
    .tsd-anchor-icon:focus-visible svg {
        visibility: visible;
    }

    .deprecated {
        text-decoration: line-through !important;
    }

    .warning {
        padding: 1rem;
        color: var(--color-warning-text);
        background: var(--color-background-warning);
    }

    .tsd-kind-project {
        color: var(--color-ts-project);
    }
    .tsd-kind-module {
        color: var(--color-ts-module);
    }
    .tsd-kind-namespace {
        color: var(--color-ts-namespace);
    }
    .tsd-kind-enum {
        color: var(--color-ts-enum);
    }
    .tsd-kind-enum-member {
        color: var(--color-ts-enum-member);
    }
    .tsd-kind-variable {
        color: var(--color-ts-variable);
    }
    .tsd-kind-function {
        color: var(--color-ts-function);
    }
    .tsd-kind-class {
        color: var(--color-ts-class);
    }
    .tsd-kind-interface {
        color: var(--color-ts-interface);
    }
    .tsd-kind-constructor {
        color: var(--color-ts-constructor);
    }
    .tsd-kind-property {
        color: var(--color-ts-property);
    }
    .tsd-kind-method {
        color: var(--color-ts-method);
    }
    .tsd-kind-reference {
        color: var(--color-ts-reference);
    }
    .tsd-kind-call-signature {
        color: var(--color-ts-call-signature);
    }
    .tsd-kind-index-signature {
        color: var(--color-ts-index-signature);
    }
    .tsd-kind-constructor-signature {
        color: var(--color-ts-constructor-signature);
    }
    .tsd-kind-parameter {
        color: var(--color-ts-parameter);
    }
    .tsd-kind-type-parameter {
        color: var(--color-ts-type-parameter);
    }
    .tsd-kind-accessor {
        color: var(--color-ts-accessor);
    }
    .tsd-kind-get-signature {
        color: var(--color-ts-get-signature);
    }
    .tsd-kind-set-signature {
        color: var(--color-ts-set-signature);
    }
    .tsd-kind-type-alias {
        color: var(--color-ts-type-alias);
    }

    /* if we have a kind icon, don't color the text by kind */
    .tsd-kind-icon ~ span {
        color: var(--color-text);
    }

    /* mobile */
    @media (max-width: 769px) {
        #tsd-toolbar-menu-trigger {
            display: inline-block;
            /* temporary fix to vertically align, for compatibility */
            line-height: 2.5;
        }
        #tsd-toolbar-links {
            display: none;
        }

        .container-main {
            display: flex;
        }
        .col-content {
            float: none;
            max-width: 100%;
            width: 100%;
        }
        .col-sidebar {
            position: fixed !important;
            overflow-y: auto;
            -webkit-overflow-scrolling: touch;
            z-index: 1024;
            top: 0 !important;
            bottom: 0 !important;
            left: auto !important;
            right: 0 !important;
            padding: 1.5rem 1.5rem 0 0;
            width: 75vw;
            visibility: hidden;
            background-color: var(--color-background);
            transform: translate(100%, 0);
        }
        .col-sidebar > *:last-child {
            padding-bottom: 20px;
        }
        .overlay {
            content: "";
            display: block;
            position: fixed;
            z-index: 1023;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            background-color: rgba(0, 0, 0, 0.75);
            visibility: hidden;
        }

        .to-has-menu .overlay {
            animation: fade-in 0.4s;
        }

        .to-has-menu .col-sidebar {
            animation: pop-in-from-right 0.4s;
        }

        .from-has-menu .overlay {
            animation: fade-out 0.4s;
        }

        .from-has-menu .col-sidebar {
            animation: pop-out-to-right 0.4s;
        }

        .has-menu body {
            overflow: hidden;
        }
        .has-menu .overlay {
            visibility: visible;
        }
        .has-menu .col-sidebar {
            visibility: visible;
            transform: translate(0, 0);
            display: flex;
            flex-direction: column;
            gap: 1.5rem;
            max-height: 100vh;
            padding: 1rem 2rem;
        }
        .has-menu .tsd-navigation {
            max-height: 100%;
        }
        .tsd-navigation .tsd-nav-link {
            display: flex;
        }
    }

    /* one sidebar */
    @media (min-width: 770px) {
        .container-main {
            display: grid;
            grid-template-columns: minmax(0, 1fr) minmax(0, 2fr);
            grid-template-areas: "sidebar content";
            --dim-container-main-margin-y: 2rem;
        }

        .tsd-breadcrumb {
            margin-top: 0;
        }

        .col-sidebar {
            grid-area: sidebar;
        }
        .col-content {
            grid-area: content;
            padding: 0 1rem;
        }
    }
    @media (min-width: 770px) and (max-width: 1399px) {
        .col-sidebar {
            max-height: calc(
                100vh - var(--dim-header-height) - var(--dim-footer-height) -
                    2 * var(--dim-container-main-margin-y)
            );
            overflow: auto;
            position: sticky;
            top: calc(
                var(--dim-header-height) + var(--dim-container-main-margin-y)
            );
        }
        .site-menu {
            margin-top: 1rem;
        }
    }

    /* two sidebars */
    @media (min-width: 1200px) {
        .container-main {
            grid-template-columns:
                minmax(0, 1fr) minmax(0, 2.5fr) minmax(
                0,
                20rem
            );
            grid-template-areas: "sidebar content toc";
        }

        .col-sidebar {
            display: contents;
        }

        .page-menu {
            grid-area: toc;
            padding-left: 1rem;
        }
        .site-menu {
            grid-area: sidebar;
        }

        .site-menu {
            margin-top: 0rem;
        }

        .page-menu,
        .site-menu {
            max-height: calc(
                100vh - var(--dim-header-height) - var(--dim-footer-height) -
                    2 * var(--dim-container-main-margin-y)
            );
            overflow: auto;
            position: sticky;
            top: calc(
                var(--dim-header-height) + var(--dim-container-main-margin-y)
            );
        }
    }
}
