@layer components {
    .ui-button, .ui-radio-button, .ui-check-button {
        font-size: 13px;
        cursor: pointer;
        align-items: center;
        justify-content: center;
        letter-spacing: 1px;
        border-radius: 10000px;
        display: inline-flex;
        gap: var(--bt-gap,6px);
        height: var(--height-base);
        border: 1px solid var(--border-color);
        padding: 0 var(--bt-spacing);
        font-family: var(--font-serif), serif;
        background-color: var(--bt-background,var(--bg-color));
        flex-shrink: 0;
        color: var(--text-color);
        user-select: none;
        white-space: nowrap;

        --bt-spacing:12px;

        &.size-xxs  { font-size:9px;  --icon-size: 12px; --bt-spacing:5px;  --bt-gap:2px; }
        &.size-xs   { font-size:10px; --icon-size: 12px; --bt-spacing:7px;  --bt-gap:3px; }
        &.size-sm   { font-size:11px; --icon-size: 14px; --bt-spacing:9px;  --bt-gap:4px;}
        &.size-base { }
        &.size-md   { font-size:14px; --icon-size: 18px; --bt-spacing:15px; --bt-gap:7px; }
        &.size-lg   { font-size:16px; --icon-size: 24px; --bt-spacing:18px; --bt-gap:7px; }
        &.size-xl   { font-size:18px; --icon-size: 26px; --bt-spacing:20px; --bt-gap:7px; }
        &.size-2xl  { font-size:20px; --icon-size: 28px; --bt-spacing:25px; --bt-gap:8px; }
        &.size-3xl  { font-size:22px; --icon-size: 32px; --bt-spacing:30px; --bt-gap:10px; }

        /** Icon styles **/
        i { font-size: var(--icon-size,18px); color: var(--icon-color,inherit); }
        i:is(:last-child)  { margin-right: calc(var(--bt-spacing) / -3.1); }
        i:is(:first-child) { margin-left: calc(var(--bt-spacing) / -3.1);}

        span {
            display: inline-block;
            line-height: 1;
        }

        &.solid {
            --border-color: transparent;
            --bt-background: var(--solid-color);
            --text-color: var(--solid-text-color);

            letter-spacing: 0;
            font-family: var(--font-sans), sans-serif;
            &.font-serif {
                font-family: var(--font-serif), serif;
                letter-spacing: 1px;
            }
        }

        &.ui-0  { --bt-background: var(--ui-0);    --solid-text-color: var(--ui-900); }
        &.ui-50  { --bt-background: var(--ui-50);  --solid-text-color: var(--ui-900); }
        &.ui-100 { --bt-background: var(--ui-100); --solid-text-color: var(--ui-800); }
        &.ui-150 { --bt-background: var(--ui-150); --solid-text-color: var(--ui-800); }
        &.ui-200 { --bt-background: var(--ui-200); --solid-text-color: var(--ui-800); }
        &.ui-300 { --bt-background: var(--ui-300); --solid-text-color: var(--ui-800); }
        &.ui-400 { --bt-background: var(--ui-400); --solid-text-color: var(--ui-50);}
        &.ui-500 { --bt-background: var(--ui-500); --solid-text-color: var(--ui-50);}
        &.ui-600 { --bt-background: var(--ui-600); --solid-text-color: var(--ui-50);}
        &.ui-700 { --bt-background: var(--ui-700); --solid-text-color: var(--ui-50);}
        &.ui-800 { --bt-background: var(--ui-800); --solid-text-color: var(--ui-50);}
        &.ui-900 { --bt-background: var(--ui-900); --solid-text-color: var(--ui-50);}
        &.ui-950 { --bt-background: var(--ui-950); --solid-text-color: var(--ui-50);}

        &.ui-white {
            --bt-background: var(--bg-color);
            --solid-text-color: var(--text-color);
            border-color: var(--border-color);
        }

        &.signal {
            background-color: var(--signal);
            color: rgba(0,0,0,0.8);
            border-color: var(--signal);
            i {
                color: rgba(0,0,0,0.8);
            }
        }

        &.clear, &.transparent { --bt-background: transparent; border: none; }


        &.circle {
            padding: 0 !important;
            aspect-ratio: 1;
            i { margin: 0 !important; }
        }

        &.squircle {
            corner-shape: squircle;
        }

        &.rectangle {
            border-radius: 3px;
        }
        &.square {
            padding: 0 !important;
            aspect-ratio: 1;
            i { margin: 0 !important; }
            border-radius: 3px !important;
        }
    }

    .ui-button {
        accent-color: var(--text-color);

        &:not(.solid):has(input[type="radio"]:checked) {
            --bt-background: var(--ui-50);
        }

        &.solid {
            input[type="radio"] {
                display: none;
                pointer-events: none;
            }

            &:has(input[type="radio"]) {
                background-color: var(--ui-100);
                color: var(--ui-950);
            }

            &:has(input[type="radio"]:checked) {
                background-color: var(--bt-background);
                color: var(--solid-text-color);
            }
        }
    }

    a.ui-button[disabled="disabled"] {
        opacity: 0.6;
        pointer-events: none;
    }

    .ui-button-group {
        display: flex;
        > *:not(:first-child) {
            border-top-left-radius: 0;
            border-bottom-left-radius: 0;
        }
        > *:not(:last-child) {
            border-top-right-radius: 0;
            border-bottom-right-radius: 0;
        }
        .ui-button + .ui-button {
            margin-left: -1px;
        }
    }

    .ui-dropdown {
        transition: 250ms all ease-in-out;
        transform-origin: top left;
        border-radius: var(--rounded);
        background-color: var(--ui-0);
        border: var(--border-width) solid var(--border-color);
        position: absolute;
        width: calc(3 * var(--spaceing-xxl));
        box-shadow: var(--elevation-4);
        right: 0;
        overflow: hidden;
        z-index: 100;

        a, button {
            text-decoration: none;
            background-color: var(--ui-0);
            color: var(--text-700);
            display: block;
            text-align: justify;
            width: 100%;
            cursor: pointer;
            padding: var(--spaceing) var(--spaceing-md);

            &:hover {
                background-color: var(--ui-50);
            }
        }

        &.scale-95 {transform: scale(0.95);}
        &.scale-100 {transform: scale(1);}
        &.opacity-0 {opacity: 0}
        &.opacity-100 {opacity: 1}
    }
}
