/* SXY theme — company colours + minor overrides.
 * Company is set via data-company="..." on <html>.
 * Dark/light via data-bs-theme="dark|light" on <html> (Bootstrap 5). */

/* ==========================================================
 * SXY kleur-tokens per bedrijf
 *
 * Voeg een nieuw bedrijf toe door onderstaand blok te kopiëren
 * en de variabelen aan te passen. Alle componenten (buttons,
 * tables, links, forms, badges, ...) gebruiken deze variabelen
 * automatisch via de component-overrides verderop in dit bestand.
 *
 * Beschikbare tokens:
 *   --sxy-primary           hoofd-accentkleur (buttons, links, aktieve nav)
 *   --sxy-primary-rgb       RGB-waarden van primary (voor rgba())
 *   --sxy-accent            secundaire accentkleur (hover-states, dot-indicator)
 *   --sxy-sidebar-bg        achtergrondkleur sidebar (transparent = AdminLTE default)
 *   --sxy-btn-color         tekstkleur op primary-buttons (default: #fff)
 *   --sxy-table-head-bg     achtergrond tabelkoppen
 *   --sxy-table-head-color  tekstkleur tabelkoppen
 *   --sxy-link-color        kleur van anchor-links
 *   --sxy-badge-bg          achtergrond van .badge.bg-primary
 *   --sxy-focus-shadow      box-shadow bij form-focus
 * ========================================================== */

:root {
    --sxy-primary:          #2d6a9f;
    --sxy-primary-rgb:      45, 106, 159;
    --sxy-accent:           #4f9fcc;
    --sxy-sidebar-bg:       transparent;
    --sxy-btn-color:        #fff;
    --sxy-table-head-bg:    rgba(45, 106, 159, .10);
    --sxy-table-head-color: inherit;
    --sxy-link-color:       #2d6a9f;
    --sxy-badge-bg:         #2d6a9f;
    --sxy-focus-shadow:     0 0 0 .25rem rgba(45, 106, 159, .25);
}

[data-company="delectat"] {
    --sxy-primary:          #1a5276;
    --sxy-primary-rgb:      26, 82, 118;
    --sxy-accent:           #2980b9;
    --sxy-table-head-bg:    rgba(26, 82, 118, .10);
    --sxy-link-color:       #1a5276;
    --sxy-badge-bg:         #1a5276;
    --sxy-focus-shadow:     0 0 0 .25rem rgba(26, 82, 118, .25);
}

[data-company="omve"] {
    --sxy-primary:          #00489a;
    --sxy-primary-rgb:      0, 72, 154;
    --sxy-accent:           #1a75cc;
    --sxy-sidebar-bg:       #2e2a29;
    --sxy-table-head-bg:    rgba(0, 72, 154, .10);
    --sxy-link-color:       #00489a;
    --sxy-badge-bg:         #00489a;
    --sxy-focus-shadow:     0 0 0 .25rem rgba(0, 72, 154, .25);
}

[data-company="danone"] {
    --sxy-primary:          #26b99a;
    --sxy-primary-rgb:      38, 185, 154;
    --sxy-accent:           #1abb9c;
    --sxy-sidebar-bg:       #2a3f54;
    --sxy-btn-color:        #fff;
    --sxy-table-head-bg:    rgba(38, 185, 154, .12);
    --sxy-link-color:       #1a9b80;
    --sxy-badge-bg:         #26b99a;
    --sxy-focus-shadow:     0 0 0 .25rem rgba(38, 185, 154, .25);
}

[data-company="ulenco"] {
    --sxy-primary:          #27ae60;
    --sxy-primary-rgb:      39, 174, 96;
    --sxy-accent:           #66bc66;
    --sxy-sidebar-bg:       #2a3f54;
    --sxy-btn-color:        #fff;
    --sxy-table-head-bg:    rgba(39, 174, 96, .10);
    --sxy-link-color:       #1e8449;
    --sxy-badge-bg:         #27ae60;
    --sxy-focus-shadow:     0 0 0 .25rem rgba(39, 174, 96, .25);
}

/* ==========================================================
 * Component-overrides — gebruiken bovenstaande tokens.
 * Pas hier de stijl aan van buttons, tabellen, links etc.
 * De juiste kleuren komen automatisch via de tokens hierboven.
 * ========================================================== */

/* ---- Buttons: primary ---- */
.btn-primary {
    --bs-btn-bg:                var(--sxy-primary);
    --bs-btn-border-color:      var(--sxy-primary);
    --bs-btn-color:             var(--sxy-btn-color);
    --bs-btn-hover-bg:          color-mix(in srgb, var(--sxy-primary) 82%, #000);
    --bs-btn-hover-border-color:color-mix(in srgb, var(--sxy-primary) 82%, #000);
    --bs-btn-hover-color:       var(--sxy-btn-color);
    --bs-btn-active-bg:         color-mix(in srgb, var(--sxy-primary) 70%, #000);
    --bs-btn-active-border-color:color-mix(in srgb, var(--sxy-primary) 70%, #000);
    --bs-btn-focus-shadow-rgb:  var(--sxy-primary-rgb);
}

/* ---- Buttons: outline-primary ---- */
.btn-outline-primary {
    --bs-btn-color:             var(--sxy-primary);
    --bs-btn-border-color:      var(--sxy-primary);
    --bs-btn-hover-bg:          var(--sxy-primary);
    --bs-btn-hover-border-color:var(--sxy-primary);
    --bs-btn-hover-color:       var(--sxy-btn-color);
    --bs-btn-active-bg:         color-mix(in srgb, var(--sxy-primary) 82%, #000);
    --bs-btn-focus-shadow-rgb:  var(--sxy-primary-rgb);
}

/* ---- Links ---- */
a:not(.btn):not(.nav-link):not(.dropdown-item):not(.page-link):not(.breadcrumb-item a) {
    color: var(--sxy-link-color);
}
a:not(.btn):not(.nav-link):not(.dropdown-item):not(.page-link):hover {
    color: color-mix(in srgb, var(--sxy-link-color) 75%, #000);
}

/* ---- Tabel koppen ---- */
.table > thead > tr > th,
.table > thead > tr > td {
    background-color: var(--sxy-table-head-bg);
    color: var(--sxy-table-head-color);
}

/* ---- Form focus ring ---- */
.form-control:focus,
.form-select:focus,
.form-check-input:focus {
    border-color: rgba(var(--sxy-primary-rgb), .6);
    box-shadow: var(--sxy-focus-shadow);
    outline: none;
}

/* ---- Badges ---- */
.badge.bg-primary,
.badge.text-bg-primary {
    background-color: var(--sxy-badge-bg) !important;
}

/* ---- Paginering ---- */
.page-item.active .page-link {
    background-color: var(--sxy-primary);
    border-color: var(--sxy-primary);
}
.page-link {
    color: var(--sxy-link-color);
}
.page-link:hover {
    color: color-mix(in srgb, var(--sxy-link-color) 75%, #000);
}

/* ---- Progress bar ---- */
.progress-bar {
    background-color: var(--sxy-primary);
}

/* ---- Nav-tabs actieve tab ---- */
.nav-tabs .nav-link.active {
    border-bottom-color: var(--sxy-primary);
    color: var(--sxy-primary);
}

/* ---- Card: dunne accent-lijn bovenaan ---- */
.card {
    border-top: 2px solid rgba(var(--sxy-primary-rgb), .30);
}

/* ---- Checkboxes & radio (Bootstrap 5) ---- */
.form-check-input:checked {
    background-color: var(--sxy-primary);
    border-color: var(--sxy-primary);
}

/* ---- Yii2 ActiveForm: field-xxx wrapper niet verstoren ---- */
[class*="field-"].sxy-field { margin-bottom: 0; }

/* ---- Tabel zebra-striping ---- */
.table > tbody > tr:nth-child(odd) > td,
.table > tbody > tr:nth-child(odd) > th {
    background-color: rgba(var(--sxy-primary-rgb), .04);
}

/* ==========================================================
 * Floating-label invulveld  (.sxy-field)
 *
 * Gebruik:
 *   <div class="sxy-field">
 *     <input type="text" class="sxy-input" id="myid" placeholder=" ">
 *     <label class="sxy-label" for="myid">Omschrijving</label>
 *   </div>
 *
 * Let op: placeholder=" " (spatie) is verplicht voor het
 * :not(:placeholder-shown) trucje dat de gevulde staat detecteert.
 *
 * Modifiers:
 *   .sxy-field--error    rode lijn + rood label
 *   .sxy-field--success  groene lijn + groen label
 *   input[disabled]      automatisch grijs
 * ========================================================== */
.sxy-field {
    position: relative;
    padding-top: 1.1rem;
    margin-bottom: 1.5rem;
}

.sxy-input {
    display: block;
    width: 100%;
    border: none;
    border-bottom: 1px solid #adb5bd;
    border-radius: 0;
    background: transparent;
    padding: .25rem 0 .35rem;
    font-size: .9rem;
    color: inherit;
    outline: none;
    transition: border-color .2s;
    box-shadow: none !important;
}

/* de kleurende balk onderaan — groeit bij hover (150px) en bij focus (100%) */
.sxy-field::after {
    content: '';
    position: absolute;
    bottom: 0;
    left: 0;
    width: 0;
    height: 2px;
    background: var(--sxy-primary);
    transition: width .2s ease;
}
/* hover: 150px hint-balk, alleen als het veld niet al focused is */
.sxy-field:has(.sxy-input:not([disabled]):hover):not(:focus-within)::after,
.sxy-field:has(.sxy-select:not([disabled]):hover):not(:focus-within)::after {
    width: 150px;
}
.sxy-field:focus-within::after {
    width: 100%;
}

.sxy-label {
    position: absolute;
    top: 1.35rem;
    left: 0;
    font-size: .9rem;
    color: #6c757d;
    pointer-events: none;
    transition: top .2s ease, font-size .2s ease, color .2s ease;
    white-space: nowrap;
}

/* label zweeft omhoog wanneer veld focus heeft of gevuld is */
.sxy-input:focus ~ .sxy-label,
.sxy-input:not(:placeholder-shown) ~ .sxy-label {
    top: 0;
    font-size: .72rem;
    color: var(--sxy-primary);
}

/* disabled */
.sxy-input:disabled {
    border-bottom-style: dashed;
    color: #6c757d;
    cursor: not-allowed;
}
.sxy-input:disabled ~ .sxy-label {
    color: #adb5bd;
}
.sxy-field:has(.sxy-input:disabled)::after {
    display: none;
}

@keyframes sxy-saving-pulse { from { opacity: .25 } to { opacity: 1 } }

/* auto-save status — absoluut gepositioneerd ÍN het label-element
 * .sxy-label is position:absolute → is zelf containing block voor kinderen
 * Andere labels krijgen via :has() position:relative zodat left:100% klopt  */
.sxy-autosave-status {
    position: absolute;
    left: 100%;
    top: 50%;
    transform: translateY(-50%);
    margin-left: .3rem;
    font-size: .62rem;
    font-weight: 400;
    white-space: nowrap;
    pointer-events: none;
    transition: opacity .4s;
}
.sxy-autosave-status.is-fading { opacity: 0; }
.sxy-autosave-status--saving {
    color: #fd7e14;
    animation: sxy-saving-pulse .7s ease-in-out infinite alternate;
}
.sxy-autosave-status--success { color: var(--bs-success, #198754); }
.sxy-autosave-status--error {
    color: var(--bs-danger, #dc3545);
    background: rgba(220, 53, 69, .08);
    padding: .05rem .3rem;
    border-radius: .25rem;
    border: 1px solid rgba(220, 53, 69, .25);
}

/* Niet-.sxy-label labels (radio/switch) krijgen position:relative als containing block */
label:not(.sxy-label):has(.sxy-autosave-status) {
    position: relative;
    display: inline-block;
}

/* Kleur/border via :has() — geen JS-class-mutaties nodig */
.sxy-field:has(.sxy-autosave-status--error) .sxy-input   { border-bottom-color: var(--bs-danger,  #dc3545); }
.sxy-field:has(.sxy-autosave-status--error) .sxy-label   { color: var(--bs-danger,  #dc3545); }
.sxy-field:has(.sxy-autosave-status--success) .sxy-input  { border-bottom-color: var(--bs-success, #198754); }
.sxy-field:has(.sxy-autosave-status--success) .sxy-label  { color: var(--bs-success, #198754); }

/* error-variant */
.sxy-field--error .sxy-input { border-bottom-color: var(--bs-danger, #dc3545); }
.sxy-field--error::after     { background: var(--bs-danger, #dc3545); }
.sxy-field--error .sxy-input:focus ~ .sxy-label,
.sxy-field--error .sxy-input:not(:placeholder-shown) ~ .sxy-label,
.sxy-field--error .sxy-label { color: var(--bs-danger, #dc3545); }

/* success-variant */
.sxy-field--success .sxy-input { border-bottom-color: var(--bs-success, #198754); }
.sxy-field--success::after      { background: var(--bs-success, #198754); }
.sxy-field--success .sxy-input:focus ~ .sxy-label,
.sxy-field--success .sxy-input:not(:placeholder-shown) ~ .sxy-label,
.sxy-field--success .sxy-label { color: var(--bs-success, #198754); }

/* hint-tekst onder het veld */
.sxy-hint {
    font-size: .72rem;
    color: #6c757d;
    margin-top: .15rem;
}
.sxy-field--error   .sxy-hint { color: var(--bs-danger,  #dc3545); }
.sxy-field--success .sxy-hint { color: var(--bs-success, #198754); }

/* ==========================================================
 * Floating-label dropdown  (.sxy-select)
 *
 * Gebruik:
 *   <div class="sxy-field">
 *     <select class="sxy-select" id="myid">
 *       <option value="">Kies…</option>   ← placeholder (value="" verplicht)
 *       <option value="a">Optie A</option>
 *     </select>
 *     <label class="sxy-label" for="myid">Omschrijving</label>
 *   </div>
 *
 * Label zweeft omhoog zodra een echte optie geselecteerd is.
 * Dezelfde modifiers als .sxy-input: --error, --success, disabled.
 * ========================================================== */
.sxy-select {
    display: block;
    width: 100%;
    border: none;
    border-bottom: 1px solid #adb5bd;
    border-radius: 0;
    background-color: transparent;
    /* chevron — neutraal grijs */
    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='%236c757d' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right .25rem center;
    background-size: .9em;
    padding: .25rem 1.5rem .35rem 0;
    font-size: .9rem;
    color: inherit;
    appearance: none;
    -webkit-appearance: none;
    cursor: pointer;
    outline: none;
    transition: border-color .2s;
}

/* De groeiende balk bij focus werkt via .sxy-field::after — al gedefinieerd */

/* chevron wordt primaire kleur bij focus */
.sxy-field:focus-within .sxy-select {
    border-bottom-color: var(--sxy-primary);
    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='%232d6a9f' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E");
}

/* Label staat voor een select ALTIJD bovenaan — select toont altijd tekst */
.sxy-field:has(.sxy-select) .sxy-label {
    top: 0;
    font-size: .72rem;
    color: #6c757d; /* grijs bij placeholder */
}

/* Accent-kleur zodra echte optie geselecteerd of bij focus */
.sxy-field:has(.sxy-select:not(:disabled)):not(:has(.sxy-select option[value=""]:checked)) .sxy-label,
.sxy-field:focus-within:has(.sxy-select) .sxy-label {
    color: var(--sxy-primary);
}

/* disabled */
.sxy-select:disabled {
    border-bottom-style: dashed;
    color: #6c757d;
    cursor: not-allowed;
    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='%23adb5bd' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E");
}
.sxy-field:has(.sxy-select:disabled)::after { display: none; }
.sxy-field:has(.sxy-select:disabled) .sxy-label { color: #adb5bd; }

/* error/success varianten voor select */
.sxy-field--error .sxy-select   { border-bottom-color: var(--bs-danger,  #dc3545); }
.sxy-field--success .sxy-select { border-bottom-color: var(--bs-success, #198754); }

/* ==========================================================
 * Bestand upload dropzone  (.sxy-dropzone)
 *
 * Gebruik:
 *   <div class="sxy-dropzone">
 *     <input type="file" class="sxy-dropzone__input" accept=".pdf,image/*">
 *     <div class="sxy-dropzone__body">
 *       <i class="bi bi-cloud-upload sxy-dropzone__icon"></i>
 *       <span class="sxy-dropzone__text">
 *         Sleep een bestand hierheen of <u>klik om te bladeren</u>
 *       </span>
 *       <span class="sxy-dropzone__name">Geen bestand geselecteerd</span>
 *       <span class="sxy-dropzone__accept">PDF of afbeelding, max 10 MB</span>
 *     </div>
 *   </div>
 *
 * Modifiers: .sxy-dropzone--sm (kleiner), .is-disabled (disabled)
 * Klassen die automatisch gezet worden door sxy-components.js:
 *   .is-dragover   — bestand zweeft boven de zone
 *   .has-file      — bestand geselecteerd
 * ========================================================== */
.sxy-dropzone {
    position: relative;
    border: 2px dashed #adb5bd;
    border-radius: .5rem;
    background: transparent;
    cursor: pointer;
    transition: border-color .2s, background-color .2s;
    overflow: hidden;
}

.sxy-dropzone:hover,
.sxy-dropzone.is-dragover {
    border-color: var(--sxy-primary);
    background-color: rgba(var(--sxy-primary-rgb), .04);
}

.sxy-dropzone.is-dragover {
    border-style: solid;
}

.sxy-dropzone__input {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    opacity: 0;
    cursor: pointer;
    font-size: 0; /* verbergt de "Geen bestand gekozen" tekst van de browser */
}

.sxy-dropzone__body {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: .4rem;
    padding: 2rem 1.5rem;
    text-align: center;
    pointer-events: none; /* klikken gaat door naar de input */
}
.sxy-label[title]:not([title=""]) { pointer-events: auto; cursor: help; }

.sxy-dropzone__icon {
    font-size: 2.2rem;
    color: var(--sxy-primary);
    opacity: .55;
    transition: opacity .2s, transform .2s;
}

.sxy-dropzone:hover .sxy-dropzone__icon,
.sxy-dropzone.is-dragover .sxy-dropzone__icon {
    opacity: 1;
    transform: translateY(-3px);
}

.sxy-dropzone__text {
    font-size: .88rem;
    color: #6c757d;
}

.sxy-dropzone__text u {
    color: var(--sxy-primary);
    text-decoration-color: var(--sxy-primary);
}

.sxy-dropzone__name {
    font-size: .78rem;
    color: #adb5bd;
    font-style: italic;
    word-break: break-all;
}

.sxy-dropzone.has-file .sxy-dropzone__name {
    color: var(--sxy-primary);
    font-style: normal;
    font-weight: 500;
}

.sxy-dropzone__accept {
    font-size: .72rem;
    color: #adb5bd;
}

/* kleine variant */
.sxy-dropzone--sm .sxy-dropzone__body { padding: 1rem; }
.sxy-dropzone--sm .sxy-dropzone__icon { font-size: 1.5rem; }
.sxy-dropzone--sm .sxy-dropzone__text { font-size: .8rem; }

/* disabled */
.sxy-dropzone.is-disabled {
    opacity: .55;
    cursor: not-allowed;
    pointer-events: none;
}

/* error / success */
.sxy-dropzone.is-error   { border-color: var(--bs-danger,  #dc3545); }
.sxy-dropzone.is-success { border-color: var(--bs-success, #198754); }

/* ---------- background overlay ----------
 * A fixed div (#sxy-bg-overlay) sits behind .app-wrapper (z-index 1).
 * Company themes populate it; default/delectat leave it empty. */
#sxy-bg-overlay {
    position: fixed;
    inset: 0;
    pointer-events: none;
    z-index: 0;
}

.app-wrapper {
    position: relative;
    z-index: 1;
}

[data-company="omve"] #sxy-bg-overlay {
    background: url('/img/themes/omve/omve_swoosh.svg') no-repeat center / cover;
    opacity: .02;
}

[data-company="danone"] #sxy-bg-overlay {
    inset: -80px;
    background: url('/img/themes/danone/danone_logo.png') no-repeat center / 85%;
    filter: blur(35px);
    opacity: .15;
}

[data-company="ulenco"] #sxy-bg-overlay {
    inset: -80px;
    background: url('/img/themes/ulenco/ulenco_logo.png') no-repeat center / 85%;
    filter: blur(35px);
    opacity: .15;
}

/* ---------- sidebar ---------- */
.sidebar-brand {
    border-bottom: 1px solid rgba(255, 255, 255, .1);
    padding: .75rem 1rem;
}

.app-sidebar .nav-sidebar .nav-link.active,
.app-sidebar .nav-sidebar .nav-link:hover {
    background-color: rgba(var(--sxy-primary-rgb), .25) !important;
}

.nav-header {
    font-size: .6rem;
    font-weight: 700;
    letter-spacing: .07rem;
    text-transform: uppercase;
    color: rgba(255, 255, 255, .35);
    padding: .75rem 1rem .2rem;
}

/* Sidebar background for companies that supply one */
[data-company="omve"] .app-sidebar,
[data-company="danone"] .app-sidebar,
[data-company="ulenco"] .app-sidebar {
    background-color: var(--sxy-sidebar-bg) !important;
}

/* Replace brand icon+text with company logo */
[data-company="omve"] .sidebar-brand .brand-text,
[data-company="omve"] .sidebar-brand .bi-lightning-charge,
[data-company="danone"] .sidebar-brand .brand-text,
[data-company="danone"] .sidebar-brand .bi-lightning-charge,
[data-company="ulenco"] .sidebar-brand .brand-text,
[data-company="ulenco"] .sidebar-brand .bi-lightning-charge {
    display: none !important;
}

[data-company="omve"] .sidebar-brand a::before {
    content: '';
    display: block;
    width: 140px;
    height: 46px;
    background: url('/img/themes/omve/omve_logo.png') no-repeat center / contain;
}
[data-company="danone"] .sidebar-brand a::before {
    content: '';
    display: block;
    width: 140px;
    height: 46px;
    background: url('/img/themes/danone/danone_logo.png') no-repeat center / contain;
}
[data-company="ulenco"] .sidebar-brand a::before {
    content: '';
    display: block;
    width: 140px;
    height: 46px;
    background: url('/img/themes/ulenco/ulenco_logo.png') no-repeat center / contain;
}

/* Mini collapsed: shrink logo */
[data-company="omve"] body.sidebar-mini.sidebar-collapse .sidebar-brand a::before,
[data-company="danone"] body.sidebar-mini.sidebar-collapse .sidebar-brand a::before,
[data-company="ulenco"] body.sidebar-mini.sidebar-collapse .sidebar-brand a::before {
    width: 36px;
    height: 36px;
}

/* ---------- topbar — compact 30 px ---------- */
:root {
    --lte-topbar-height: 30px;
}
.app-header {
    min-height: 30px !important;
    height: 30px !important;
    padding: 0 !important;
    font-size: .78rem;
    /* Force flex items to centre vertically */
    align-items: center !important;
}
.app-header .container-fluid {
    padding-top: 0 !important;
    padding-bottom: 0 !important;
    height: 100%;
    align-items: center !important;
}
.app-header .navbar-nav {
    align-items: center !important;
    height: 100%;
}
.app-header .nav-link {
    padding: 0 .5rem !important;
    display: flex !important;
    align-items: center !important;
    height: 30px;
    font-size: .78rem;
}
.app-header .nav-link .bi {
    font-size: .95rem;
}
/* Flush dropdown directly under the topbar — remove Bootstrap's default gap */
.app-header .dropdown-menu {
    font-size: .78rem;
    margin-top: 0 !important;
}

/* ---------- footer — compact 24 px ---------- */
.app-footer {
    min-height: 24px !important;
    max-height: 24px !important;
    padding: 3px 1rem !important;
    font-size: 10px !important;
    line-height: 18px;
}
.app-footer a {
    font-size: 10px;
}

/* Copyright: company name hidden by default, visible on hover */
.sxy-footer-company {
    display: none;
}
.app-footer a:hover .sxy-footer-company {
    display: inline;
}

/* ---------- sidebar menu — compact font ---------- */
.app-sidebar .nav-sidebar .nav-link {
    font-size: .73rem;
    padding-top: .28rem;
    padding-bottom: .28rem;
}
.app-sidebar .nav-sidebar .nav-treeview .nav-link {
    font-size: .71rem;
}

/* ---------- content area ---------- */
.sxy-stat-card {
    border-left: 4px solid var(--sxy-primary);
}

.sxy-stat-card .stat-value {
    font-size: 1.8rem;
    font-weight: 600;
    color: var(--sxy-primary);
}

/* ---------- smooth theme transition ---------- */
html {
    transition: background-color .15s ease, color .15s ease;
}

/* ===== Mini sidebar — disable hover-expand =====
 *
 * AdminLTE 4 uses CSS Grid for the layout (grid-template-columns: auto 1fr).
 * sidebar-mini + sidebar-collapse already sets the sidebar to 4.6rem and hides
 * the text — the grid adjusts header/main/footer automatically. No layout
 * overrides needed here.
 *
 * The only thing to fix: AdminLTE's hover rule sets
 *   min-width/max-width: var(--lte-sidebar-width)  →  expands back to 250px.
 * Fix: override --lte-sidebar-width to 4.6rem when collapsed, so the hover
 * "expand" target equals the current width → no visible change on hover.
 */
body.sidebar-mini.sidebar-collapse {
    --lte-sidebar-width: 4.6rem;
}

/* Navigatie groepslabels — lichter dan .nav-header (geen uppercase) */
.sxy-nav-group {
    font-size: .67rem;
    font-weight: 500;
    color: rgba(255, 255, 255, .38);
    padding: .65rem 1rem .1rem 1rem;
    user-select: none;
    cursor: default;
    list-style: none;
}
li.sxy-nav-sub > .nav-link {
    padding-left: 1.4rem !important;
}

/* In collapsed mini mode: hide the floating nav-header labels and brand text
 * that AdminLTE shows in a hover overlay — they overflow the narrow sidebar. */
body.sidebar-mini.sidebar-collapse .nav-header,
body.sidebar-mini.sidebar-collapse .sxy-nav-group,
body.sidebar-mini.sidebar-collapse .sidebar-brand .brand-text {
    display: none !important;
}
body.sidebar-mini.sidebar-collapse li.sxy-nav-sub > .nav-link {
    padding-left: inherit !important;
}

/* Dot indicator on items that have a treeview sub-menu (CSS :has, no JS class needed). */
body.sidebar-mini.sidebar-collapse .nav-item:has(.nav-treeview) > .nav-link {
    position: relative;
}
body.sidebar-mini.sidebar-collapse .nav-item:has(.nav-treeview) > .nav-link::after {
    content: '';
    position: absolute;
    top: 5px;
    right: 5px;
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: var(--sxy-accent);
}

/* ================================================================
 * SXY Tree Widget
 * ================================================================ */

/* Pagina-kaart: vult beschikbare viewport-hoogte */
.sxy-tree-widget-card {
    height: calc(100vh - 230px);
    min-height: 420px;
}
.sxy-tree-widget-card .card-body { height: 100%; }

/* Links paneel wrapper: toolbar + boom als flex-kolom */
.sxy-tree-widget__left {
    width: 260px;
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
}

/* Toolbar boven de boom */
.sxy-tree-widget__toolbar {
    flex-shrink: 0;
    padding: .2rem .35rem;
    border-bottom: 1px solid var(--bs-border-color);
    background: var(--bs-body-bg);
}
.sxy-tree-widget__toolbar .sxy-tree-search {
    font-size: .8rem;
    min-width: 0;
    box-shadow: none !important;
}
.sxy-tree-widget__toolbar .sxy-tree-btn {
    font-size: .85rem;
    line-height: 1;
    padding: 0 .2rem;
    color: var(--bs-secondary-color);
    flex-shrink: 0;
}
.sxy-tree-widget__toolbar .sxy-tree-btn:hover { color: var(--bs-body-color); }
.sxy-tree-widget__toolbar .sxy-tree-btn.sxy-sort-manual { background: #d1e7dd; color: #0a3622; border-radius: 4px; }
.sxy-tree-widget__toolbar .sxy-tree-btn.sxy-sort-manual:hover { background: #a3cfbb; color: #0a3622; }
.sxy-tree-widget__toolbar .sxy-tree-btn-filter.sxy-filter-active { color: var(--bs-primary) !important; }
.sxy-filter-count { font-size: .62rem; font-weight: 700; vertical-align: super; margin-left: 1px; }

/* Filter panel */
.sxy-filter-panel {
    display: none;
    padding: .25rem .35rem;
    border-bottom: 1px solid var(--bs-border-color);
    background: var(--bs-body-bg);
}
.sxy-fp-row {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: .2rem;
    padding: .15rem 0;
}
.sxy-fp-row + .sxy-fp-row {
    border-top: 1px solid var(--bs-border-color-translucent);
    margin-top: .1rem;
    padding-top: .25rem;
}
.sxy-fp-chip {
    font-size: .7rem;
    line-height: 1;
    padding: .22rem .45rem;
    border-radius: 20px;
    border: 1px solid var(--bs-border-color);
    background: transparent;
    color: var(--bs-secondary-color);
    cursor: pointer;
    white-space: nowrap;
    transition: background .1s, color .1s, border-color .1s;
}
.sxy-fp-chip:hover { border-color: var(--bs-secondary); color: var(--bs-body-color); }
.sxy-fp-chip.active { background: var(--bs-primary); border-color: var(--bs-primary); color: #fff; }
.sxy-fp-quick-label { font-size: .66rem; color: var(--bs-secondary-color); flex-shrink: 0; margin-right: .1rem; }
.sxy-fp-preset {
    font-size: .7rem;
    line-height: 1;
    padding: .22rem .45rem;
    border-radius: 20px;
    border: 1px dashed var(--bs-border-color);
    background: transparent;
    color: var(--bs-secondary-color);
    cursor: pointer;
    white-space: nowrap;
    transition: background .1s, color .1s;
}
.sxy-fp-preset:hover { background: var(--bs-secondary-bg); color: var(--bs-body-color); border-style: solid; }

/* Boom (links) — vult resterende hoogte van wrapper */
.sxy-tree-widget__tree {
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
    padding: .4rem .25rem;
    background: var(--bs-body-bg);
}

/* Zoekresultaten rood markeren */
.sxy-tree-widget__tree a.jstree-search {
    color: #c50000 !important;
    font-weight: 600;
}
[data-bs-theme="dark"] .sxy-tree-widget__tree a.jstree-search {
    color: #ff7777 !important;
}

/* Paneel (rechts) */
.sxy-tree-widget__panel {
    background: var(--bs-body-bg);
}

/* Drag-resizer tussen tree en detail-paneel */
.sxy-tree-resizer {
    width: 5px;
    flex-shrink: 0;
    cursor: col-resize;
    background: transparent;
    transition: background .12s;
    margin-left: -1px;
}
.sxy-tree-resizer:hover,
.sxy-tree-resizer.sxy-resizing {
    background: var(--bs-primary);
}

/* Lege staat */
.sxy-tree-panel-empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    height: 100%;
    gap: .75rem;
    color: var(--bs-secondary-color);
    opacity: .45;
}
.sxy-tree-panel-empty i   { font-size: 2.5rem; }
.sxy-tree-panel-empty span { font-size: .85rem; }

/* jsTree: Bootstrap-Icons als node-icoon */
.sxy-tree-widget__tree .jstree-themeicon {
    background-image: none !important;
    background-color: transparent !important;
    font-size: .95rem;
    width: 1.2rem;
    text-align: center;
    line-height: 1;
}
.sxy-icon-folder { color: #f0ad4e; }
.sxy-icon-tag    { color: green; }      /* alle reguliere tags: groen, net als oud systeem */
.sxy-icon-chart       { color: #ffc107; }  /* grafieken (gear) — geel */
.sxy-icon-chart-smart { color: #198754; }  /* smart charts (lightbulb) — groen */

/* jsTree kleur-aanpassingen voor dark-mode */
[data-bs-theme="dark"] .jstree-default .jstree-hovered,
[data-bs-theme="dark"] .jstree-default .jstree-clicked {
    background: rgba(255,255,255,.08);
    border-color: transparent;
}
[data-bs-theme="dark"] .jstree-default .jstree-anchor {
    color: var(--bs-body-color);
}

/* Datalogger status-dot in boom */
.sxy-dl-dot {
    display: inline-block;
    width: 8px;
    height: 8px;
    border-radius: 50%;
    vertical-align: middle;
    flex-shrink: 0;
    margin-right: 5px;
}
.sxy-dl-dot[data-state="online"]  { background: #22c55e; }
.sxy-dl-dot[data-state="offline"] { background: #ef4444; }
.sxy-dl-dot[data-state="unknown"] { background: #94a3b8; }

/* Bedrijfschips in boom */
.sxy-company-chips {
    display: inline-flex;
    gap: 3px;
    align-items: center;
    vertical-align: middle;
    flex-shrink: 0;
    margin-right: 5px;
}
.sxy-cnt-chip {
    display: inline-flex;
    align-items: center;
    gap: 2px;
    font-size: 10px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    padding: 0 4px;
    border-radius: 8px;
    line-height: 16px;
}
.sxy-cnt-chip--online  { color: #22c55e; background: rgba(34,197,94,.14); }
.sxy-cnt-chip--offline { color: #ef4444; background: rgba(239,68,68,.14); }
.sxy-cnt-chip__dot {
    width: 5px;
    height: 5px;
    border-radius: 50%;
}
.sxy-cnt-chip--online  .sxy-cnt-chip__dot { background: #22c55e; }
.sxy-cnt-chip--offline .sxy-cnt-chip__dot { background: #ef4444; }

/* jsTree-anker als inline-flex zodat prepended dot/chips verticaal uitlijnen */
.sxy-tree-widget__tree .jstree-anchor {
    display: inline-flex !important;
    align-items: center;
}

/* Textarea in floating-label velden */
textarea.sxy-input {
    resize: vertical;
    min-height: 5rem;
    padding-top: 1.4rem;
    line-height: 1.45;
}

/* Monospace voor formule/JSON velden */
.sxy-mono {
    font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
    font-size: .8rem;
}

/* Icoonkleuren per node-type */
.sxy-icon-company    { color: var(--sxy-primary); }
.sxy-icon-datalogger { color: #6c757d; }
.sxy-icon-section    { color: #0d6efd; opacity: .7; font-size: .85em; }

/* Formula/smarttag krijgt iets donkerder groen hoofdicoon (net als tag-smartnode in oud systeem) */
.sxy-tree-widget__tree a[data-sxy-type="formula"] > .jstree-themeicon { color: #006000; }

/* position:relative op jstree-themeicon zodat badge absoluut gepositioneerd kan worden */
.sxy-tree-widget__tree .jstree-themeicon {
    position: relative;
}

/* Type-badge — klein gekleurd icoontje rechtsonder het hoofdicoon, geen achtergrond */
.sxy-type-badge {
    position: absolute;
    bottom: 0;
    right: -4px;
    font-size: 11px;
    line-height: 1;
    font-style: normal;
    pointer-events: none;
}
.sxy-type-badge.bi-plug             { color: #1a7cf9; }   /* measurement — blauw      */
.sxy-type-badge.bi-play-circle      { color: #a71d2a; }   /* run         — donkerrood */
.sxy-type-badge.bi-bell-fill        { color: #e71a1a; }   /* alarm       — rood       */
.sxy-type-badge.bi-lightbulb-fill   { color: #10dd10; font-size: 13px; }   /* formula — groen, iets groter */
.sxy-type-badge.bi-shield-check     { color: #730af2; }   /* watchdog    — paars      */
.sxy-type-badge.bi-play-circle-fill { color: #730af2; }   /* startstop   — paars      */
.sxy-type-badge.bi-clock            { color: #1a7cf9; }   /* chart: time  — blauw     */
.sxy-type-badge.bi-speedometer2     { color: #e67e22; }   /* chart: meter — oranje    */
.sxy-type-badge.bi-grid-3x3-gap     { color: #17a2b8; }   /* chart: view  — cyaan     */

/* FDA badge — rood schildje rechtsboven het hoofdicoon */
.sxy-fda-badge {
    position: absolute;
    top: -1px;
    right: -4px;
    font-size: 10px;
    line-height: 1;
    font-style: normal;
    pointer-events: none;
    color: #dc3545;
}

/* Alarm-live badge — groen pulserend stipje linksonder: live detection actief */
@keyframes sxy-live-pulse {
    0%, 100% { opacity: 1;   transform: translateY(-50%) scale(1);   }
    50%       { opacity: 0.45; transform: translateY(-50%) scale(1.5); }
}
.sxy-alarm-live-badge {
    position: absolute;
    top: 50%;
    left: -4px;
    transform: translateY(-50%);
    font-size: 7px;
    line-height: 1;
    font-style: normal;
    pointer-events: none;
    color: #fd7e14;
    animation: sxy-live-pulse 2s ease-in-out infinite;
}
@media (prefers-reduced-motion: reduce) {
    .sxy-alarm-live-badge { animation: none; }
}

/* Required badge — statisch oranje stipje links midden: input-tag is verplicht */
.sxy-required-badge {
    position: absolute;
    top: 50%;
    left: -4px;
    transform: translateY(-50%);
    font-size: 7px;
    line-height: 1;
    font-style: normal;
    pointer-events: none;
    color: #fd7e14;
}

/* Phase-mapping badge — gekleurd fase-icoon linksonder: tag is gemapped aan een symbolic name */
.sxy-phase-badge {
    position: absolute;
    bottom: 0;
    left: -3px;
    font-size: 8px;
    line-height: 1;
    font-style: normal;
    pointer-events: none;
}

/* Run-type badge — icoon linksboven: tag is de run-type indicator voor deze DL */
.sxy-run-type-badge {
    position: absolute;
    top: -1px;
    left: -3px;
    font-size: 8px;
    line-height: 1;
    font-style: normal;
    pointer-events: none;
    color: #a71d2a;
}

/* User-tree: login-leeftijdkleur op het persoons-icoon */
.sxy-icon-user-age-0 { color: #22c55e !important; }   /* < 7d  — actief          */
.sxy-icon-user-age-1 { color: #16a34a !important; }   /* 7–14d — recent          */
.sxy-icon-user-age-2 { color: #ca8a04 !important; }   /* 14–21d — geel           */
.sxy-icon-user-age-3 { color: #ea580c !important; }   /* 21–30d — oranje         */
.sxy-icon-user-age-4 { color: #dc2626 !important; }   /* >30d   — rood           */
.sxy-icon-user-age-5 { color: #64748b !important; }   /* nooit  — grijs          */

/* Rol-badges via typeBadgeClass */
.sxy-type-badge.sxy-role-badge-brand { color: #3b82f6; }   /* brand-admin — blauw schildje  */
.sxy-type-badge.sxy-role-badge-root  { color: #eab308; }   /* root-admin  — gouden ster     */

/* Self-badge: blauw stipje rechtsboven eigen icoon */
.sxy-self-badge {
    position: absolute;
    top: -2px;
    right: -3px;
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: #638bff;
    pointer-events: none;
    font-style: normal;
}

/* "jij"-pill naast eigen naam */
.sxy-you-pill {
    display: inline-block;
    font-size: 10px;
    padding: 0 5px;
    border-radius: 8px;
    background: rgba(99, 139, 255, .18);
    color: #638bff;
    font-weight: 600;
    margin-left: 4px;
    vertical-align: middle;
    pointer-events: none;
    user-select: none;
}

/* Chart tag-lijst in het rechterpaneel */
.sxy-chart-taglist {
    border: 1px solid var(--bs-border-color);
    border-radius: .375rem;
    padding: .2rem .4rem;
}
.sxy-chart-tag-row {
    display: flex;
    align-items: flex-start;
    gap: .4rem;
    padding: .25rem .1rem;
    border-bottom: 1px solid var(--bs-border-color-translucent);
}
.sxy-chart-tag-row:last-child { border-bottom: none; }
.sxy-chart-tag-row > .bi-tag-fill { font-size: .8rem; flex-shrink: 0; margin-top: .15rem; }
.sxy-chart-tag-body { display: flex; flex-direction: column; gap: .1rem; min-width: 0; }
.sxy-chart-tag-main { display: flex; align-items: baseline; gap: .35rem; flex-wrap: wrap; }
.sxy-chart-tag-label {
    font-size: .78rem;
    font-weight: 600;
    white-space: nowrap;
}
.sxy-chart-tag-unit {
    font-size: .7rem;
    color: var(--bs-secondary-color);
    white-space: nowrap;
}
.sxy-chart-tag-name {
    font-size: .72rem;
    font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
    color: var(--bs-secondary-color);
    white-space: nowrap;
}
.sxy-chart-tag-desc {
    font-size: .72rem;
    color: var(--bs-secondary-color);
}
.sxy-chart-tag-meta {
    display: flex;
    gap: .5rem;
    font-size: .68rem;
    color: var(--bs-secondary-color);
}

.sxy-axis-block  { margin-bottom: .5rem; }
.sxy-axis-header { font-size: .72rem; font-weight: 600; color: var(--bs-secondary-color); margin-bottom: .2rem; }
.sxy-axis-row    { display: flex; align-items: baseline; gap: .5rem; padding: .1rem 0; }
.sxy-axis-label  { font-size: .75rem; color: var(--bs-secondary-color); min-width: 8rem; }
.sxy-axis-unit   { font-size: .78rem; font-weight: 600; font-family: monospace; }

/* jsTree contextmenu boven AdminLTE elementen (AdminLTE gaat tot z-index 1050) */
.vakata-context,
.vakata-context ul {
    z-index: 9999 !important;
}

/* Hint-balk in toolbar bij herordenen tijdens alfabetische sortering */
.sxy-sort-hint {
    font-size: .7rem;
    padding: .18rem .5rem .15rem;
    display: flex;
    align-items: center;
    gap: .3rem;
    color: #664d03;
    background: rgba(255, 193, 7, .14);
    border-top: 1px solid rgba(255, 193, 7, .35);
    opacity: 1;
    transition: opacity .5s ease;
}
[data-bs-theme="dark"] .sxy-sort-hint {
    color: #ffc107;
    background: rgba(255, 193, 7, .09);
    border-top-color: rgba(255, 193, 7, .25);
}
.sxy-sort-hint.is-fading { opacity: 0; }

/* jsTree DND: invoegmarkering (blauwe lijn met rondje) */
#jstree-marker {
    z-index: 9999;
    border-left: none;
    border-right: 2px solid var(--sxy-primary);
    border-top: 2px solid var(--sxy-primary);
    border-bottom: none;
}
#jstree-marker::before {
    content: '';
    position: absolute;
    top: -5px;
    left: -6px;
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: var(--sxy-primary);
}

/* jsTree DND: sleep-ghost compact + goed leesbaar */
#jstree-dnd {
    z-index: 9999;
    font-size: .82rem;
    padding: 2px 8px 2px 4px;
    border-radius: .25rem;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: 0 2px 8px rgba(0, 0, 0, .18);
    line-height: 1.6;
}

/* Geldig drop: groen vinkje (vervangt sprite) */
#jstree-dnd .jstree-ok {
    background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='%23198754' d='M13.854 3.646a.5.5 0 0 1 0 .708l-7 7a.5.5 0 0 1-.708 0l-3.5-3.5a.5.5 0 1 1 .708-.708L6.5 10.293l6.646-6.647a.5.5 0 0 1 .708 0z'/%3E%3C/svg%3E") no-repeat center / 14px;
    background-color: transparent;
}

/* ── Chart editor ──────────────────────────────────────────────────────── */

.sxy-edit-tag-row {
    transition: background .1s;
    user-select: none;
    border-bottom: 2px solid var(--bs-border-color);
}
.sxy-edit-tag-row.sxy-drag-over {
    border-top: 2px solid var(--bs-primary);
    background: rgba(var(--sxy-primary-rgb), .05);
}
.sxy-edit-tag-row.sxy-dragging {
    opacity: .45;
}
.sxy-drag-handle {
    cursor: grab;
    touch-action: none;
}
.sxy-tag-color {
    width: 28px;
    height: 28px;
    padding: 0;
    border: none;
    border-radius: .25rem;
    cursor: pointer;
    background: none;
}
.sxy-edit-feedback {
    position: fixed;
    bottom: 1.25rem;
    right: 1.25rem;
    z-index: 1080;
    padding: .35rem .75rem;
    border-radius: .4rem;
    font-size: .82rem;
    font-weight: 500;
    box-shadow: 0 2px 8px rgba(0,0,0,.15);
    transition: opacity .3s;
}
.sxy-edit-feedback-ok  { background: #198754; color: #fff; }
.sxy-edit-feedback-err { background: #dc3545; color: #fff; }
.sxy-edit-tag-header {
    padding: .5rem .75rem;
}
.sxy-edit-tag-body {
    padding: .375rem .75rem .875rem;
    background: var(--bs-tertiary-bg);
    border-top: 1px solid var(--bs-border-color-translucent);
}
.sxy-edit-label {
    display: block;
    font-size: .72rem;
    color: var(--bs-secondary-color);
    margin-bottom: .2rem;
}
.sxy-edit-desc {
    font-size: .78rem;
    color: var(--bs-secondary-color);
    font-style: italic;
}
.sxy-tag-header-desc {
    font-size: .72rem;
    color: var(--bs-secondary-color);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.sxy-folder-info {
    font-size: .72rem;
    color: var(--bs-secondary-color);
}

/* Ongeldig drop: rood kruisje (vervangt sprite) */
#jstree-dnd .jstree-er {
    background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='%23dc3545' d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E") no-repeat center / 14px;
    background-color: transparent;
}
