/*
 * ============================================================
 * CAMERAWEB — SOCLE GRAPHIQUE
 * ============================================================
 *
 * Thèmes :
 * - Clair
 * - Sombre
 * - Système
 *
 * Le thème est piloté par theme.js via l'attribut
 * data-theme présent sur <html>.
 */


/*
 * ============================================================
 * VARIABLES — THÈME CLAIR
 * ============================================================
 */

:root {
    color-scheme: light;

    --cw-background: #f3f4f6;
    --cw-surface: #ffffff;
    --cw-surface-soft: #f8f9fa;
    --cw-surface-hover: #eef0f3;

    --cw-border: #dfe2e6;
    --cw-border-strong: #cfd3d8;

    --cw-text: #20242a;
    --cw-text-soft: #626a73;
    --cw-text-muted: #858d96;

    --cw-accent: #3f4852;
    --cw-accent-hover: #2f3740;
    --cw-accent-text: #ffffff;

    --cw-danger: #b42318;
    --cw-danger-soft: #fef3f2;

    --cw-success: #18794e;
    --cw-success-soft: #ecfdf3;

    --cw-shadow-sm:
        0 2px 8px rgba(25, 30, 35, 0.06);

    --cw-shadow-md:
        0 6px 18px rgba(25, 30, 35, 0.09);

    --cw-radius-sm: 6px;
    --cw-radius-md: 10px;
    --cw-radius-lg: 14px;

    --cw-navbar-height: 64px;

    --cw-transition-fast:
        140ms ease;

    --cw-transition:
        180ms ease;
}


/*
 * ============================================================
 * THÈME SOMBRE
 * ============================================================
 */

html[data-theme="dark"] {
    color-scheme: dark;

    --cw-background: #15171a;
    --cw-surface: #1c1f23;
    --cw-surface-soft: #20242a;
    --cw-surface-hover: #292e34;

    --cw-border: #30353b;
    --cw-border-strong: #3a4149;

    --cw-text: #edf0f2;
    --cw-text-soft: #aeb5bd;
    --cw-text-muted: #7e8791;

    --cw-accent: #d9dde1;
    --cw-accent-hover: #ffffff;
    --cw-accent-text: #17191c;

    --cw-danger: #f97066;
    --cw-danger-soft: #351b1a;

    --cw-success: #6ce9a6;
    --cw-success-soft: #123323;

    --cw-shadow-sm:
        0 2px 8px rgba(0, 0, 0, 0.20);

    --cw-shadow-md:
        0 8px 22px rgba(0, 0, 0, 0.28);
}


/*
 * ============================================================
 * BASE
 * ============================================================
 */

html {
    min-height: 100%;
    background:
        var(--cw-background);
}

body {
    min-height: 100vh;

    margin: 0;

    background:
        var(--cw-background);

    color:
        var(--cw-text);

    font-family:
        -apple-system,
        BlinkMacSystemFont,
        "Segoe UI",
        Roboto,
        Helvetica,
        Arial,
        sans-serif;

    font-size: 15px;

    line-height: 1.5;

    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}


/*
 * ============================================================
 * ÉLÉMENTS GÉNÉRAUX
 * ============================================================
 */

*,
*::before,
*::after {
    box-sizing: border-box;
}

a {
    color:
        inherit;
}

button,
input,
select,
textarea {
    font: inherit;
}

img {
    max-width: 100%;
}


/*
 * ============================================================
 * ZONE PRINCIPALE
 * ============================================================
 */

.app-main {
    min-height:
        calc(100vh - var(--cw-navbar-height));

    background:
        var(--cw-background);
}


/*
 * ============================================================
 * NAVBAR
 * ============================================================
 */

.app-navbar {
    min-height:
        var(--cw-navbar-height);

    padding:
        0 12px;

    background:
        var(--cw-surface) !important;

    border-bottom:
        1px solid var(--cw-border);

    box-shadow:
        var(--cw-shadow-sm);

    position:
        relative;

    z-index:
        1000;
}

.app-navbar .container-fluid {
    min-height:
        var(--cw-navbar-height);
}

.app-navbar-brand {
    display:
        inline-flex;

    align-items:
        center;

    justify-content:
        center;

    width:
        42px;

    height:
        42px;

    margin:
        0;

    padding:
        5px;

    border-radius:
        var(--cw-radius-sm);

    transition:
        background var(--cw-transition-fast);
}

.app-navbar-brand:hover {
    background:
        var(--cw-surface-hover);
}

.app-navbar-brand img {
    display:
        block;

    width:
        32px;

    height:
        32px;

    object-fit:
        contain;
}


/*
 * Titre utilisé sur les pages d'authentification.
 */

.app-navbar-title {
    color:
        var(--cw-text);

    font-weight:
        600;

    letter-spacing:
        0.01em;
}


/*
 * ============================================================
 * LIENS DE NAVIGATION
 * ============================================================
 */

.app-nav-link {
    display:
        flex;

    align-items:
        center;

    min-height:
        42px;

    margin:
        0 2px;

    padding:
        8px 12px !important;

    border-radius:
        var(--cw-radius-sm);

    color:
        var(--cw-text-soft) !important;

    font-weight:
        500;

    transition:
        background var(--cw-transition-fast),
        color var(--cw-transition-fast);
}

.app-nav-link:hover,
.app-nav-link:focus {
    background:
        var(--cw-surface-hover);

    color:
        var(--cw-text) !important;
}


/*
 * ============================================================
 * MENU ADMINISTRATION
 * ============================================================
 */

.app-dropdown {
    min-width:
        180px;

    margin-top:
        6px !important;

    padding:
        6px;

    background:
        var(--cw-surface);

    border:
        1px solid var(--cw-border);

    border-radius:
        var(--cw-radius-md);

    box-shadow:
        var(--cw-shadow-md);
}

.app-dropdown-item {
    padding:
        9px 12px;

    border-radius:
        var(--cw-radius-sm);

    color:
        var(--cw-text-soft);

    transition:
        background var(--cw-transition-fast),
        color var(--cw-transition-fast);
}

.app-dropdown-item:hover,
.app-dropdown-item:focus {
    background:
        var(--cw-surface-hover);

    color:
        var(--cw-text);
}


/*
 * ============================================================
 * SÉLECTEUR DE THÈME
 * ============================================================
 */

.theme-current {
    margin-left:
        4px;

    color:
        var(--cw-text-muted);

    font-size:
        0.78rem;

    font-weight:
        400;
}

.theme-dropdown {
    min-width:
        180px;
}

.theme-option {
    display:
        flex;

    align-items:
        center;

    gap:
        10px;

    width:
        100%;

    border:
        0;

    background:
        transparent;

    color:
        var(--cw-text-soft);

    text-align:
        left;

    cursor:
        pointer;
}

.theme-option:hover,
.theme-option:focus {
    background:
        var(--cw-surface-hover);

    color:
        var(--cw-text);
}

.theme-option.is-selected {
    background:
        var(--cw-surface-hover);

    color:
        var(--cw-text);

    font-weight:
        600;
}

.theme-option.is-selected::after {
    content:
        "✓";

    margin-left:
        auto;

    color:
        var(--cw-text);

    font-weight:
        700;
}

.theme-option-icon {
    display:
        inline-flex;

    align-items:
        center;

    justify-content:
        center;

    width:
        20px;

    font-size:
        1rem;

    line-height:
        1;
}


/*
 /*
 * ============================================================
 * BOUTON MENU MOBILE
 * ============================================================
 */

.app-navbar-toggler {
    display:
        inline-flex;

    align-items:
        center;

    justify-content:
        center;

    width:
        38px;

    height:
        38px;

    padding:
        0;

    border:
        0;

    border-radius:
        var(--cw-radius-sm);

    background:
        transparent;

    color:
        var(--cw-text);

    box-shadow:
        none;

    transition:
        background var(--cw-transition-fast),
        color var(--cw-transition-fast);
}

.app-navbar-toggler:hover,
.app-navbar-toggler:focus {
    background:
        var(--cw-surface-hover);

    color:
        var(--cw-text);

    box-shadow:
        none;
}

.app-navbar-toggler:focus-visible {
    outline:
        2px solid var(--cw-border-strong);

    outline-offset:
        2px;
}


/*
 * ============================================================
 * ICÔNE DU MENU
 * ============================================================
 *
 * On remplace l'icône Bootstrap par trois traits fins.
 */

.app-navbar-toggler .navbar-toggler-icon {
    width:
        21px;

    height:
        16px;

    opacity:
        1;

    background-image:
        none;

    position:
        relative;

    display:
        block;
}

.app-navbar-toggler .navbar-toggler-icon::before,
.app-navbar-toggler .navbar-toggler-icon::after {
    content:
        "";

    position:
        absolute;

    left:
        0;

    width:
        21px;

    height:
        2px;

    border-radius:
        999px;

    background:
        currentColor;
}

.app-navbar-toggler .navbar-toggler-icon::before {
    top:
        0;

    box-shadow:
        0 7px 0 currentColor,
        0 14px 0 currentColor;
}

.app-navbar-toggler .navbar-toggler-icon::after {
    display:
        none;
}


/*
 * ============================================================
 * MESSAGES FLASH
 * ============================================================
 */

.app-flash-container {
    position:
        relative;

    z-index:
        900;

    width:
        100%;

    max-width:
        900px;

    margin:
        0 auto;

    padding:
        14px 16px 0;
}

.app-alert {
    margin:
        0;

    padding:
        11px 42px 11px 14px;

    background:
        var(--cw-surface);

    border:
        1px solid var(--cw-border);

    border-radius:
        var(--cw-radius-md);

    color:
        var(--cw-text);

    box-shadow:
        var(--cw-shadow-sm);
}

.app-alert .btn-close {
    filter:
        none;

    opacity:
        0.55;
}

html[data-theme="dark"] .app-alert .btn-close {
    filter:
        invert(1);
}


/*
 * ============================================================
 * FORMULAIRES — BASE COMMUNE
 * ============================================================
 */

.form-control,
.form-select {
    background-color:
        var(--cw-surface);

    border-color:
        var(--cw-border);

    color:
        var(--cw-text);

    border-radius:
        var(--cw-radius-sm);
}

.form-control:focus,
.form-select:focus {
    background-color:
        var(--cw-surface);

    border-color:
        var(--cw-border-strong);

    color:
        var(--cw-text);

    box-shadow:
        0 0 0 2px rgba(100, 110, 120, 0.12);
}

.form-control::placeholder {
    color:
        var(--cw-text-muted);
}


/*
 * ============================================================
 * BOUTONS — BASE COMMUNE
 * ============================================================
 */

.btn {
    border-radius:
        var(--cw-radius-sm);

    transition:
        background var(--cw-transition-fast),
        border-color var(--cw-transition-fast),
        color var(--cw-transition-fast),
        box-shadow var(--cw-transition-fast);
}

.btn-primary {
    background:
        var(--cw-accent);

    border-color:
        var(--cw-accent);

    color:
        var(--cw-accent-text);
}

.btn-primary:hover,
.btn-primary:focus {
    background:
        var(--cw-accent-hover);

    border-color:
        var(--cw-accent-hover);

    color:
        var(--cw-accent-text);
}


/*
 * ============================================================
 * TABLEAUX
 * ============================================================
 */

.table {
    --bs-table-bg:
        var(--cw-surface);

    --bs-table-color:
        var(--cw-text);

    --bs-table-border-color:
        var(--cw-border);
}

.table thead {
    color:
        var(--cw-text-soft);
}


/*
 * ============================================================
 * SCROLLBARS
 * ============================================================
 */

* {
    scrollbar-width:
        thin;

    scrollbar-color:
        var(--cw-border-strong)
        transparent;
}

::-webkit-scrollbar {
    width:
        8px;

    height:
        8px;
}

::-webkit-scrollbar-track {
    background:
        transparent;
}

::-webkit-scrollbar-thumb {
    background:
        var(--cw-border-strong);

    border-radius:
        999px;
}

::-webkit-scrollbar-thumb:hover {
    background:
        var(--cw-text-muted);
}


/*
 * ============================================================
 * RESPONSIVE
 * ============================================================
 */

@media (max-width: 991.98px) {

    :root {
        --cw-navbar-height:
            58px;
    }

    .app-navbar {
        padding:
            0 8px;
    }

    .app-navbar .container-fluid {
        min-height:
            var(--cw-navbar-height);
    }

    .app-navbar-brand {
        width:
            40px;

        height:
            40px;
    }

    .navbar-collapse {
        padding:
            8px 0 10px;
    }

    .app-nav-link {
        justify-content:
            flex-end;

        width:
            100%;
    }

    .app-dropdown {
        margin-top:
            2px !important;

        border:
            0;

        box-shadow:
            none;

        background:
            var(--cw-surface-soft);
    }

    .theme-current {
        margin-left:
            8px;
    }

}


@media (max-width: 575.98px) {

    body {
        font-size:
            14px;
    }

    .app-flash-container {
        padding:
            10px 10px 0;
    }

}
