.input-group:has(.is-invalid) .input-group-text,
.input-group:has(.is-invalid):focus-within .input-group-text {
    border-color: #ff5b5c;
}


@keyframes shake {
    0% {
        transform: translateX(0);
    }
    20% {
        transform: translateX(-4px);
    }
    40% {
        transform: translateX(4px);
    }
    60% {
        transform: translateX(-4px);
    }
    80% {
        transform: translateX(4px);
    }
    100% {
        transform: translateX(0);
    }
}

.shake {
    animation: shake 0.35s ease-in-out;
}


table.fixed {
    table-layout: fixed;
}

table.fixed td.max-200 {
    max-width: 200px;
    white-space: normal;
    word-break: break-word;
    overflow-wrap: anywhere;
}


label.required::after,
.required::after {
    content: " *";
    color: red;
}


.feedback {
    width: 100%;
    margin-top: 0.25rem;
    font-size: 85%;
    line-height: 1.75;
}

.valid-feedback {
    line-height: 1.75;
}


.input-group.input-group-merge input.form-control[disabled],
.input-group.input-group-merge input.form-control.disabled {
    padding-right: 0.5rem;
}


.cursor-default {
    cursor: default !important;
}

.pointer-event-none {
    pointer-events: none;
}

.text-justify {
    text-align: justify;
}

.flex-1 {
    flex: 1 !important;
}

.w-0 {
    width: 0;
}


.no-animations,
.no-animations * {
    animation: none !important;
    transition: none !important;
}


.rounded-4 {
    border-radius: 0.5rem !important;
}


.text-ellipsis,
.text-limited {
    display: inline-block;
    max-width: 30ch; /* default limit to 30 character */
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}


html:not(.dark-style) .only-dark,
html.dark-style .only-light {
    display: none !important;
}


/*region: navbar*/

.layout-navbar #navbar-titles-container {
    align-items: center;
    flex-direction: column;
    flex: 1;
    text-align: center;
}

.layout-navbar #navbar-titles-container #navbar-title {
    width: 25ch;
    font-weight: bold;
    padding: 0;
}

.layout-navbar #navbar-titles-container #navbar-subtitle {
    width: 30ch;
    font-size: 78% !important;
    padding: 0;
}


.layout-navbar-fixed .layout-wrapper:not(.layout-horizontal) .layout-navbar {
    transition: all 0.3s ease-in-out;
    background-color: transparent !important;
    backdrop-filter: blur(0px);
    border-bottom: 0 solid var(--bs-border-color-translucent);
}

.layout-navbar-fixed .layout-wrapper:not(.layout-horizontal) .layout-navbar.navbar-elevated {
    background-color: rgba(243, 244, 244, 0.8) !important;
    backdrop-filter: blur(2px);
    border-bottom-width: 1px;
}

.dark-style.layout-navbar-fixed .layout-wrapper:not(.layout-horizontal) .layout-navbar.navbar-elevated {
    background-color: rgba(28, 34, 47, 0.8) !important;
}

/*endregion: navbar*/


/*region: FAB*/

.btn-float-action-button,
.btn-fab {
    position: fixed !important;
    right: 2rem;
    bottom: 2rem;

    /* tip: z-index: 1099 to show below of drawer menu */
    z-index: 1099;
}

@media (min-width: 1199.98px) {
    html[data-template*="vertical-menu"] .btn-float-action-button,
    html[data-template*="vertical-menu"] .btn-fab {
        /* 2rem + .menu-vertical width */
        right: calc(2rem + 16.25rem);
    }
}

/*endregion: FAB*/
