html {
    font-size: 16px; /* = 1rem everywhere below */
    cursor: default;
    overflow-y: scroll;
}

:root {
    /* Landscape mobile has 40rem=640px */
    /* Tablet starting from 48rem=768px */
    /* Tablet landscape, laptop 64rem=1024px */
    /* Desktop standard 80rem=1280px (restrict general content width) */

    --header-height: 3.35rem;
    --footer-height: 3.5rem;
    --content-container-desktop-padding: 1.5rem;
    --content-container-mobile-padding: 1rem;
    --content-container-height: calc(100vh - var(--header-height) - var(--footer-height));

    --font-size-smaller: 0.65rem;
    --font-size-small: 0.85rem;
    --font-size-default: 1rem;
    --font-size-big: 1.5rem;
    --font-size-bigger: 2rem;

    --margin-default: 0.3rem;
    --margin-big: 1.5rem;
    --margin-bigger: 2rem;

    --padding-set-small: 0.25rem 0.5rem;
    --padding-set-default: 0.5rem 1rem;
    --padding-set-default-air: 0.75rem 1rem;
    --padding-set-big: 1rem 1.5rem;

    --padding-small: 0.25rem;
    --padding-default: 0.5rem;
    --padding-big: 1rem;
    --padding-bigger: 1.5rem;

    --gap-small: 0.3rem;
    --gap-default: 0.5rem;
    --gap-big: 1rem;

    --transition-hover-default: color 0.2s ease-in-out;
    --transition-transform-default: transform 0.3s ease-in-out;

    --color-overlay-dark: black 10%;

    --color-background: #f4f4f4;

    --color-font-dark: #1f2937;
    --color-font-medium: #6b7280;
    --color-font-light: #fff;

    --color-primary: #007bff;
    --color-secondary: var(--color-background);
    --color-secondary-dark: color-mix(in srgb, var(--color-secondary), var(--color-overlay-dark));

    --color-thead: var(--color-background);
    --color-inputs-background: #fafafa;

    --color-action: #28a745;
    --color-danger: #dc3545;

    --color-item-highlighted: #c4dbff;

    --color-disabled: #e9ecef;
    --opacity-disabled: 0.8;

    --color-border: #ccc;
    --border-radius-smaller: 0.25rem;
    --border-radius-small: 0.3rem;
    --border-radius-medium: 0.5rem;
    --border-radius-big: 0.75rem;
    --border-radius-bigger: 1.25rem;

    --border-width-default: 0.06rem;
    --border-width-thick: 0.18rem;
    --border-style-default: var(--border-width-default) solid var(--color-border);
    --border-style-highlighted: var(--border-width-default) solid var(--color-primary);
    --border-style-selected: var(--border-width-thick) solid var(--color-primary);
    --box-shadow-selected-left: inset var(--border-width-thick) 0 0 0 var(--color-primary);

    --shadow-border-top: 0 -0.5rem 0.3rem -0.3rem rgba(0, 0, 0, 0.1);
    --shadow-border-bottom: 0 0.5rem 0.3rem -0.3rem rgba(0, 0, 0, 0.1);
    --shadow-border-left: -0.5rem 0 0.3rem -0.3rem rgba(0, 0, 0, 0.1);
    --shadow-border-right: 0.5rem 0 0.3rem -0.3rem rgba(0, 0, 0, 0.1);
    --shadow-input: inset 0 2px 4px 0 rgba(0, 0, 0, 0.06), inset 0 0 0 1px rgba(0, 0, 0, 0.05);
    --shadow-bubble: 0 1px 2px rgba(0, 0, 0, 0.1);
    --shadow-modal: 0 0.6rem 1rem rgba(0, 0, 0, 0.1), 0 0.25rem 0.4rem rgba(0, 0, 0, 0.05);
}

/* ================================ */
/* --- Basic and general styles --- */
/* ================================ */

/* Universal box-sizing */
*, *::before, *::after {
    box-sizing: border-box; /* Count paddings as part of item size */
}

body {
    background-color: var(--color-background);
    margin: 0;
    overflow-x: hidden;  /* Any content can not initiate horizontal scroll on all site level  */
    font-family: sans-serif;
    color: var(--color-font-dark);
    font-size: var(--font-size-default);
    line-height: 1.3;
}

.hidden {
    display: none !important;
}

.fullwidth {
    width: 100%;
}

.error-message {
    color: var(--color-danger);
    font-size: var(--font-size-small);
    margin-top: var(--margin-default);
}

/* Styles for session status alerts and inline warnings */
.alert { padding: var(--padding-set-default); margin-bottom: var(--margin-big); border-radius: var(--border-radius-small); }
.alert-success { background-color: #d4edda; color: #155724; }
.alert-danger { background-color: #f8d7da; color: #721c24; }
.alert-warning { background-color: #fef9c3; color: var(--color-font-dark); }

span.highlighted,
p.highlighted,
.simple-table tbody td p.highlighted {
    border-radius: var(--border-radius-small);
    padding: var(--padding-set-small);
    background-color: var(--color-item-highlighted);
}

.spinner {
    border: 0.25rem solid var(--color-secondary-dark);
    border-top: 0.25rem solid var(--color-primary);
    border-radius: 50%;
    width: 1.5rem;
    height: 1.5rem;
    animation: spin 1s linear infinite;
    margin: 0 auto 0.5rem;
}
@keyframes spin {
    0% { transform: rotate(0deg); }
    100% { transform: rotate(360deg); }
}

/* Global v/h scrollbar styles */
/* region */

/* Chrome, Safari, Edge */
*::-webkit-scrollbar {
    width: 0.25rem;
    height: 0.25rem;
}

*::-webkit-scrollbar-thumb {
    background: var(--color-border);
    border-radius: var(--border-radius-small);
}

/* Firefox */
* {
    scrollbar-width: thin;
    scrollbar-color: var(--color-border) transparent;
}
/* endregion */

/* Styles for container with vertical scroll */
/* region */

.scroll-container {
    overflow-y: auto;
    position: relative;
}

.hide-scrollbar {
    /* IE та Edge */
    -ms-overflow-style: none;
    /* Firefox */
    scrollbar-width: none;
}

/* Chrome, Safari, Opera */
.hide-scrollbar::-webkit-scrollbar {
    display: none !important; /* !important to override styles above */
}
/* endregion */

/* Styles for container with horizontal scroll */
/* region */

/* Class to let child to have horizontal scroll for its content if its bigger,
than parent width (parent width should be explicitly restricted) */
.wrapper-for-hscrolled-layout {
    width: 100%;
    overflow-x: auto;
    margin-bottom: 0;
}

.wrapper-for-hscrolled-layout.margin-bottom {
    margin-bottom: var(--margin-default);
}
/* endregion */

/* === Outputs and Inputs === */
/* region */

small {
    font-size: var(--font-size-small);
    display: inline-flex;
}

small.hint {/* For settings hint */
    display: block;
    padding: 0 var(--padding-default);
}

small.hint.hint-bg {
    padding: var(--padding-set-small);
    margin-bottom: var(--margin-default);
    background-color: var(--color-secondary);
}

small.hint.hint-lb {
    margin-left: var(--margin-default);
    margin-bottom: var(--margin-default);
    box-shadow: inset var(--border-width-thick) 0 0 0 var(--color-primary);
}

.x-small {
    display: inline-flex;
    font-size: var(--font-size-smaller);
}

label {
    display: block;
    margin-bottom: var(--margin-default);
    font-weight: bold;
    color: var(--color-font-dark);
}

a {
    color: inherit;
    text-decoration: none;
    transition: var(--transition-hover-default);
}
a:hover {
    text-decoration: none;
    opacity: 0.8;
}

a[href^="tel:"] {
    color: inherit;
    text-decoration: none;
}
a[href^="tel:"]:hover {
    text-decoration: none;
    opacity: 0.8;
}

a[href^="mailto:"] {
    color: inherit;
    text-decoration: none;
}
a[href^="mailto:"]:hover {
    text-decoration: none;
    opacity: 0.8;
}

input[type="text"],
input[type="email"],
input[type="password"],
input[type="number"],
input[type="tel"],
input[type="url"],
input[type="date"],
input[type="time"],
input[type="datetime-local"],
textarea,
select {
    width: 100%;
    box-sizing: border-box;
    padding: var(--padding-set-small); /* for use inside tables */
    margin: 0;
    border: var(--border-style-default);
    border-radius: var(--border-radius-small);
    box-shadow: var(--shadow-input);
    background-color: var(--color-inputs-background);
    font-size: var(--font-size-default);
    color: var(--color-font-dark);
    outline: none; /* no border changes on focus */
}

textarea {
    min-height: 10rem;
    resize: vertical;
    vertical-align: top; /* To avoid extra (browser makes) margin under it */
}

select {
    /* Remove browser styles */
    -webkit-appearance: none;
    -moz-appearance: none;
    appearance: none;
    /* Arrow */
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23333' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right var(--padding-default) center;
    background-size: var(--padding-default);
    cursor: pointer;
}

input.input-lg,
textarea.input-lg,
select.input-lg {
    padding: var(--padding-set-default); /* big for separate inputs like login or filters */
}

select.input-lg {
    background-position: right var(--padding-big) center;
    background-size: var(--padding-big);
}

input.is-invalid,
select.is-invalid,
textarea.is-invalid {
    border-color: var(--color-danger);
}

.is-invalid::placeholder {
    color: var(--color-danger);
}

input[readonly],
textarea[readonly] {
    background-color: var(--color-disabled);
    opacity: var(--opacity-disabled);
    overflow-wrap: break-word;
}

.checkbox-container,
.radio-container {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    width: fit-content;
    margin-bottom: 0;
    white-space: nowrap;
}

/* label tags wrap input */
.checkbox-container label,
.radio-container label {
    margin-bottom: 0;
}

/* May be with or without text */
.checkbox-container input[type="checkbox"],
.radio-container input[type="radio"] {
    margin-right: 0;
}
/* endregion */

/* === Buttons === */
/* region */

button {
    width: auto;
    padding: var(--padding-set-default);
    border: none;
    border-radius: var(--border-radius-small);
    background-color: var(--color-primary);
    color: var(--color-font-light);
    font-size: var(--font-size-default);
    white-space: nowrap;
    flex-shrink: 0;
    cursor: pointer;
}
button:hover, button:active { background-color: color-mix(in srgb, var(--color-primary), var(--color-overlay-dark)); }
button:active { transform: translateY(0.0625rem); }
button:disabled {
    background-color: var(--color-disabled);
    opacity: var(--opacity-disabled);
    cursor: not-allowed;
    transform: none;
}

.action_button { background-color: var(--color-action); }
.action_button:hover, .action_button:active { background-color: color-mix(in srgb, var(--color-action), var(--color-overlay-dark)); }

.danger_button { background-color: var(--color-danger); }
.danger_button:hover, .danger_button:active { background-color: color-mix(in srgb, var(--color-danger), var(--color-overlay-dark)); }

.transparent_button {
    padding: 0;
    background-color: transparent;
    color: var(--color-font-dark);
}
.transparent_button:hover, .transparent_button:active { background-color: transparent; }

.secondary_button {
    background-color: var(--color-secondary);
    color: var(--color-font-dark);
}
.secondary_button:hover, .secondary_button:active { background-color: color-mix(in srgb, var(--color-secondary), var(--color-overlay-dark)); }

.icon_only_button
{
    padding: 0;
    background-color: transparent;
    color: var(--color-font-dark);
    flex-shrink: 1;
    flex-grow: 1;
    min-width: 1rem;
}
.icon_only_button:hover, .icon_only_button:active { background-color: transparent; }
/* endregion */

/* === Tables === */
/* region */

/* Supposed it is always wrapped with wrapper-for-hscrolled-layout */
.simple-table {
    display: table;
    table-layout: auto;
    width: 100%;
    min-width: 100%;
    border-collapse: collapse;
    border: var(--border-style-default);
}

.simple-table thead {
    display: table-header-group;
    background-color: var(--color-thead);
}

.simple-table tr {
    display: table-row;
    margin-bottom: 0;
    border: none;
    background-color: transparent;
}

.simple-table th,
.simple-table tbody td {
    width: auto;
    display: table-cell;
    border: var(--border-style-default);
    padding: var(--padding-set-default);
    background-color: transparent;
    vertical-align: top;
    white-space: normal;
    /*overflow-wrap: break-word;*/
    word-break: keep-all;
}

.fixed-lines-cell-inner-wrapper {
    display: -webkit-box;
    -webkit-line-clamp: 2; /* Lines amount */
    -webkit-box-orient: vertical;
    overflow: hidden;
    overflow-wrap: break-word;
}

.h-centered-cell-inner-wrapper {
    display: flex;
    justify-content: center; /* horizontal */
    width: 100%; /* for justify */
}

.simple-table th {
    font-weight: bold;
    text-align: left;
}

.th-add-btn-div
{
    display: grid;
}

.simple-table tbody td.highlighted {
    background-color: var(--color-item-highlighted);
}

.simple-table tbody td p {
    padding: 0;
    margin: 0;
}

.simple-table tbody td p.highlighted {
    border-radius: var(--border-radius-small);
    padding: var(--padding-set-small);
    background-color: var(--color-item-highlighted);
}

/* Inner simple-table for subitems */

.simple-table-wrapper-for-nested {
    border: none;
    box-shadow: inset var(--border-width-thick) 0 0 0 var(--color-primary);
}

tr.hidden[data-template="row-template"],
tr.hidden[data-wrapper="subitems-layout-content-row"] {
    display: none !important;
}

.inline-crud-action-buttons-wrapper {
    display: flex;
    justify-content: center;
    align-items: center;
    white-space: nowrap;
    gap: var(--gap-default);
}

tr[data-wrapper="subitems-layout-header-row"] {
}

tr[data-wrapper="subitems-layout-content-row"] {
}

td[data-wrapper="subitems-table-wrapper"], td[data-wrapper="subitems-header-button-wrapper"] {
    border: none !important;
    padding: 0 0 0 var(--padding-default) !important;
}
/* endregion */

/* === Pagination === */
/* region */

.pagination-container {
    display: flex;
    justify-content: center;
}

/* List */
.pagination {
    display: flex;
    list-style: none;
    padding: 0;
    border-radius: var(--border-radius-small);
    cursor: pointer;
}

/* List element */

.page-item {
    margin: 0 0.125rem;
}

.page-link {
    display: block;
    border: var(--border-style-default);
    border-radius: var(--border-radius-small);
    padding: 0.5rem 0.75rem;
    background-color: #fff;
    color: var(--color-font-dark);
    text-decoration: none;
    transition: var(--transition-hover-default);
}

.page-link:hover {
    background-color: var(--color-secondary);
}

/* Current page */
.page-item.active .page-link {
    border-color: var(--color-primary);
    background-color: var(--color-primary);
    color: var(--color-font-light);
    pointer-events: none; /* Doesn't allow to click twice */
    z-index: 1;
}

.page-item.disabled .page-link {
    border-color: var(--color-disabled);
    color: var(--color-disabled);
    opacity: var(--opacity-disabled);
    pointer-events: none; /* Click disabled */
}
/* endregion */

/* === Footer === */

footer p {
    text-align: center;
    color: var(--color-font-dark);
}

/* === Forms === */
/* region */

.form-group {
    margin-bottom: var(--margin-big);
}

/* Supposed it is always wrapped with wrapper-for-hscrolled-layout */
.form-group.filters {
    display: flex;
    justify-content: flex-start; /* horizontal alignment */
    align-items: center; /* vertical alignment */
    gap: var(--gap-default);
    margin-bottom: var(--margin-default);
}

.form-group.filters .compact-date {
    min-width: 6rem;
    max-width: 6rem;
}

.form-group.settings,
.form-group.overview {
    width: 100%;
    padding: var(--padding-set-big);
    margin-bottom: var(--margin-big);
    background-color: #fff;
    border: var(--border-style-default);
}

.form-group.overview.highlighted {
    background-color: var(--color-item-highlighted);
}

/* Outside settings form-group */
.settings-button {
    width: 100%;
}

.settings-wrapper,
.overview-wrapper {
    display: flex;
    flex-direction: column;
    align-items: center;
}

/* Modal forms */

/* Block general scroll */
body.modal-open {
    overflow: hidden;
}

/* Overlay background and scroll block */
.modal-overlay {
    display: none;
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-color: rgba(0, 0, 0, 0.6);
    z-index: 1000;
    justify-content: center;
    align-items: center;
}

.modal-overlay.active {
    display: flex;
}

.modal {
    width: 90%;
    max-width: 24rem;
    padding: var(--padding-set-big);
    background-color: #fff;
    border-radius: var(--border-radius-big);
    box-shadow: var(--shadow-modal);
}

.modal.login-form {
    position: absolute; /* parent class, to be centered in, should have "position: relative" as container-screen has */
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
}

.modal.alert-form {
    transform: translateY(-50px);
    transition: var(--transition-transform-default);
}

.modal-overlay.active .modal.alert-form {
    transform: translateY(0);
}

.modal-header, .modal-header-danger {
    font-size: var(--font-size-big);
    font-weight: bold;
    color: var(--color-action);
    margin-bottom: var(--margin-big);
}

.modal-header-danger {
    color: var(--color-danger);
}

.modal-body {
    color: var(--color-font-dark);
}

.modal-actions {
    display: flex;
    justify-content: flex-end;
    gap: var(--gap-default);
}
/* endregion */

/* ======================= */
/* --- Adaptive styles --- */
/* ======================= */

/* Common, mobile first */
.outer-container {
    width: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
    background-color: #fff;
    border-radius: 0;
    box-shadow:
        var(--shadow-border-top),
        var(--shadow-border-bottom);
}

.container,
.container-fluid {
    width: 100%;
    min-height: var(--content-container-height);
    padding: var(--content-container-mobile-padding);
    margin: 0 auto;
    background-color: #fff;
    border-radius: 0;
    box-shadow: none;
    position: relative;
}

.container.no-header, .container-fluid.no-header {
    min-height: calc(100vh - var(--footer-height));
}

h1 {
    margin-bottom: var(--margin-big);
    font-size: var(--font-size-big);
    color: var(--color-font-dark);
    text-align: center;
}

/* Navbar (mobile) */
/* region */

.navbar {
    padding: var(--padding-set-default);
    margin-bottom: 0;
    border-radius: 0;
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    align-items: center;
}

.nav-wrapper {
    display: flex;
    flex-direction: column;
    max-height: 0;
    width: 100%;
    overflow: hidden;
    transition: max-height 0.3s ease-out;
}

.nav-wrapper.show {
    max-height: 31.3rem;
    transition: max-height 0.5s ease-in;
}

.nav-links, .nav-buttons {
    list-style: none;
    width: 100%;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--gap-small);
    cursor: pointer;
}

.nav-links li {
    width: 100%;
}

.nav-links a {
    display: block;
    width: 100%;
    padding: var(--padding-set-small);
    border: none;
    border-radius: var(--border-radius-small);
    color: var(--color-font-dark);
    text-decoration: none;
    text-align: left;
    transition: var(--transition-hover-default);
}

.nav-links a:hover {
    background-color: var(--color-secondary-dark);
}

.nav-links .active-link {
    background-color: var(--color-secondary-dark);
}

.nav-buttons .btn {
    width: 100%;
    padding: var(--padding-set-default);
    margin-left: 0;
    font-size: var(--font-size-small);
}
/* endregion */

/* Logout button (mobile) */
/* region */
.logout-form-mobile {
    display: block;
    width: 100%;
    padding: 0;
    margin: var(--gap-small) 0 0;
}

.logout-form-mobile .btn {
    width: 100%;
}

.logout-form-desktop {
    display: none;
}
/* endregion */

/* Hamburger menu and its styles (shown on mobile) */
/* region */
.menu-toggle {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0;
    border: none;
    background-color: transparent;
    font-size: var(--font-size-bigger);
    line-height: 1;
    color: var(--color-font-dark);
    cursor: pointer;
    z-index: 1000;
}

.menu-toggle:hover {
    background-color: transparent;
}
/* endregion */

/* Manage content visibility on mobile with or without alert */
/*region*/
.mobile-allowed .content-toggle, .mobile-not-allowed .content-toggle {
    width: 100%;
    padding: 0;
    margin: 0;
}

.mobile-allowed .alert-warning, .mobile-not-allowed .alert-warning {
    text-align: center;
}

.mobile-not-allowed .content-toggle { display: none; }
.mobile-not-allowed .alert-warning { display: block;}

.mobile-allowed .content-toggle { display: block; }
.mobile-allowed .alert-warning { display: none; }
/*endregion*/

/* ================================= */
/* --- Updates for desktop below --- */
/* ================================= */

/* For tablets and more */
@media (min-width: 48rem) {
    .container,
    .container-fluid {
        padding: var(--content-container-desktop-padding);
    }

    .container {
        max-width: 48rem; /* Tablet landscape, laptop */
    }

    .container-fluid {
        max-width: 80rem; /* Desktop standard */
    }

    .form-group.settings, .settings-button /* Outside settings form-group */,
    .form-group.overview {
        width: auto;
        min-width: calc(48rem - 2 * var(--content-container-desktop-padding));
    }

    h1 {
        margin-bottom: var(--margin-bigger);
        font-size: var(--font-size-bigger);
    }

    /*  Navbar */
    /* region */

    .navbar {
        height: var(--header-height);
        justify-content: space-between;
    }

    .nav-wrapper {
        display: flex;
        flex-direction: row;
        max-height: none;
        width: auto;
        overflow: visible;
        align-items: center;
        gap: 0;
    }

    .nav-links {
        width: auto;
        flex-direction: row;
        align-items: center;
        gap: 0;
    }

    .nav-links li {
        margin-right: var(--margin-big);
        width: auto;
    }

    .nav-links li:last-child {
        margin-right: 0;
    }

    .nav-links a {
        display: inline-block;
        width: auto;
    }

    .nav-buttons {
        width: auto;
        margin-top: 0;
        flex-direction: row;
        gap: 0;
    }

    .nav-buttons .btn {
        width: auto;
        margin-left: var(--margin-big);
    }
    /* endregion */

    /* Logout button */
    /* region */
    .logout-form-mobile {
        display: none;
    }

    .logout-form-desktop {
        display: block;
        width: auto;
        margin-left: auto;
    }

    .logout-form-desktop .btn {
        width: auto;
    }
    /* endregion */

    /* Hamburger menu */
    .menu-toggle {
        display: none; /* Hide on desktops */
    }

    .mobile-not-allowed .content-toggle { display: block; }
    .mobile-not-allowed .alert-warning { display: none;}
}
