﻿:root {
    --bs-border-color-translucent: rgba(0, 0, 0, 0);
    /* Brand-palet (huisstijl verzuimteam.nl).
       Navy = primaire "chrome": tabs, sidebar-actief, links, dxButtons, focus.
       Magenta = primaire actieknoppen (CTA), zoals "ziekmelden"/opslaan.
       Navy is donker genoeg voor tekst op wit, dus --vt-primary mag ook als
       tekstkleur; --vt-primary-dark is de hover/active-variant. */
    --vt-primary: #004289;
    --vt-primary-dark: #00315f;
    --vt-cta: #a80059;
    --vt-cta-dark: #8f004c;
    /* "Soft" CTA-stijl voor plekken waar veel actieknoppen bij elkaar staan,
       zoals het Acties-blok in de dossier-uitklap: lichtroze vlak met de
       volle CTA-kleur als tekstkleur en een dun roze randje. Het contrast
       zit zo in de tekst i.p.v. het vlak (niet schreeuwerig, niet flets);
       hover vult naar de gewone CTA met witte tekst. */
    --vt-cta-soft-bg: #f7d9ea;
    --vt-cta-soft-border: #e7a8cc;
    --vt-tint: #dce2f2;
    --vt-tint-hover: #cdd9f0;
    --vt-tint-pink: #fdecfb;
    --vt-border: #b9cae8;
    --vt-border-hover: #9bb6e0;
    --vt-text-strong: #00315f;
    /* Linkkleur voor entiteits-chips in grids (namen/bedrijfsnamen):
       gedempt lichtblauw, op hover iets donkerder. */
    --vt-chip-link: #1f6fb2;
    --vt-chip-link-hover: #14517f;
    --blue-color: var(--vt-primary);
    /* Her-accent DevExtreme naar de huisstijl-navy. dx.light.css (gedeeld met
       V1) zet --dx-color-primary:#337ab7 op :root; stylev2.css laadt later én
       alleen in V2, dus deze override maakt dxButtons/pager/checkboxes/focus
       navy zonder V1 te raken. */
    --dx-color-primary: var(--vt-primary);
    --bs-border-radius: 1rem;
    --bs-accordion-active-color: black;
    --bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03);
    --bs-primary-text-emphasis: black;
    --swiper-navigation-color: var(--vt-primary-dark);
    --swiper-pagination-color: var(--vt-primary-dark);
    --swiper-navigation-size: 20px;
}

html, body {
    margin: 0px;
    padding: 0px;
    height: 100%;
    font-family: 'Maven Pro';
}

/* Bootstrap zet bij een open modal overflow:hidden (plus padding-right voor de
   scrollbalk) op <body>. Met de vaste body-hoogte van 100% hierboven kapte dat de
   pagina af op schermhoogte: het document kromp, de scrollpositie viel terug naar 0
   en na het sluiten stond je bovenaan (zichtbaar op lange pagina's zoals het
   medisch dossier). De body-hoogte zelf moet 100% blijven: #layout-wrapper (h-100)
   en de flex-vulling van .main-content rekenen ermee, anders blijft een korte
   pagina (bv. Handleidingen) onderaan wit. Daarom de scroll-lock van Bootstrap
   uitschakelen: de pagina mag achter een modal blijven scrollen, de backdrop dekt
   hem toch af. Een regel op body.modal-open alleen is te laat: Bootstrap zet de
   overflow vóór die klasse en forceert ertussen een layout. */
body {
    overflow: visible !important;
}

body.modal-open {
    padding-right: 0 !important;
}

/* Vangnet tegen ongewenste horizontale paginascroll. Op de root (niet op een
   tussenliggende wrapper) zodat position:sticky grid-koppen blijven werken:
   het document zelf blijft de verticale scroll-container. */
html {
    overflow-x: hidden;
}

/* Heel V2 standaard op 80% weergeven, gelijk aan browserzoom 80% — de UI is
   op 100% te ruim opgezet. Eigen browserzoom van de gebruiker komt hier
   bovenop (wie zelf nog op 80% staat ziet effectief 64% en kan terug naar
   100%). Alleen V2: V1 laadt stylev2.css niet.

   ⚠️ De zoom staat BEWUST op de app-containers en niet op <html>.
   Onder CSS-zoom levert de browser twee meetlatten op: getBoundingClientRect()
   geeft VISUELE px (geschaald), offsetWidth/Height/Top en scrollHeight geven
   LAYOUT px (ongeschaald). Elke JS-bibliotheek die met de ene meet en in de
   andere schrijft, plaatst zichzelf er 25% naast. Met de zoom op <html> trof
   dat álles wat zich zelf positioneert; drie families liepen er achtereenvolgens
   op stuk (jQuery UI datepicker, DevExtreme-overlays, Bootstrap/Popper) en elke
   nieuwe bibliotheek zou volgen.

   Overlays worden door al die bibliotheken in <body> gerenderd. Door alleen de
   app-containers te zoomen vallen ze buiten de zoom, meten en schrijven ze in
   dezelfde meetlat, en klopt hun positionering per constructie — zonder één
   regel compensatie. Bewust aanvaarde prijs: overlays tekenen op 100% en zijn
   dus ruimer dan de pagina eronder.

   Gevolg: --vt-zoom-comp is 1 en de calc()-compensaties in de views zijn no-ops
   geworden. Ze blijven staan zodat één waarde hier de schaal bepaalt; zet je de
   zoom ooit terug op <html>, dan hoort deze variabele weer op 1.25. */
#layout-wrapper,
.vt-wa-balk,
.vt-vv-fab,
.vt-vv-panel {
    zoom: 0.8;
}

html {
    --vt-zoom-comp: 1;
}

/* Dropdown-popups (TagBox/SelectBox e.d.): DevExtreme meet de lijsthoogte
   onder de zoom 0.8× te klein en zet die als vaste hoogte, waardoor de
   onderste items wegvallen. Laat CSS de hoogte bepalen: natuurlijke hoogte,
   begrensd op ~15 rijen, met native scroll voor langere lijsten. */
.dx-dropdowneditor-overlay .dx-overlay-content,
.dx-dropdowneditor-overlay .dx-popup-content,
.dx-dropdowneditor-overlay .dx-list {
    height: auto !important;
    /* !important: DevExtreme schrijft zelf een (onder zoom te kleine) inline
       max-height op de overlay-content; zonder !important wint die en clipt
       de lijst alsnog (o.a. locatiekeuze Afspraken/Plan). */
    max-height: 400px !important;
}

.dx-dropdowneditor-overlay .dx-scrollable-container {
    max-height: 392px;
    overflow-y: auto;
}

/* Header-filter-popup (kolomfilter in grids): DevExtreme geeft de
   popup-content de vólle popup-hoogte in plaats van hoogte minus de
   knoppenbalk — nog een gevolg van de zoom-meetfout. De OK/Annuleren-balk
   viel daardoor buiten de content, die `overflow: clip` heeft, en was
   onbereikbaar bij lange waardenlijsten. Flex-kolom: knoppenbalk houdt zijn
   eigen hoogte, de lijst krijgt de rest en scrollt. */
.dx-header-filter-menu .dx-overlay-content {
    display: flex !important;
    flex-direction: column;
    overflow: visible !important;
}

.dx-header-filter-menu .dx-overlay-content > .dx-popup-content {
    flex: 1 1 auto;
    min-height: 0;
    height: auto !important;
}

.dx-header-filter-menu .dx-overlay-content > .dx-toolbar {
    flex: 0 0 auto;
}

.dx-header-filter-menu .dx-list {
    height: 100% !important;
    max-height: 100% !important;
}

/* Uitzondering: de DevExtreme Scheduler (Agenda) rekent celbreedtes uit in
   pixels en mixt daarbij gemeten (gezoomde) en CSS- (ongezoomde) waarden.
   Onder zoom ≠ 1 lopen kop- en bodykolommen daardoor tot ~15px uit de pas.
   Terugschalen naar netto 100% (0.8 × 1.25 = 1) houdt zijn metingen kloppend;
   de scheduler oogt daardoor iets groter dan de rest van de 80%-UI. */
.dx-scheduler {
    zoom: 1.25;
}

/* Bootstrap-modals: de backdrop zet Bootstrap zelf in <body> (buiten de zoom),
   maar de .modal zelf staat in de view en dus binnen #layout-wrapper (zoom 0.8).
   Een position:fixed element meet daar 100vw als 80% van het scherm, waardoor de
   dialoog links van het midden hangt. Terugschalen naar netto 100% (0.8 × 1.25)
   centreert hem weer; de inhoud oogt dan 100%, net als de DevExtreme-overlays.
   (Stond hier eerder mét calc(... * var(--vt-zoom-comp)) omdat de zoom toen op
   <html> zat en de backdrop maar 80%×80% dekte — het "zwarte vlak linksboven".) */
.modal,
.modal-backdrop {
    width: 100vw;
    height: 100vh;
}

#layout-wrapper .modal {
    zoom: 1.25;
}

h1, h2, h3, h4, h5, h6 {
    font-family: "Raleway", sans-serif;
    /* Raleway toont standaard oldstyle-cijfers, waardoor losse cijfers in een
       kop hoog/laag 'dansen' (bv. factuurnummer 2026S00009). Forceer lining +
       tabular figures zodat alle cijfers gelijke hoogte en breedte krijgen. */
    font-variant-numeric: lining-nums tabular-nums;
    font-feature-settings: "lnum" 1, "tnum" 1;
}

/* DevExtreme-componenten (grids, editors, dropdowns, popups) erven standaard
   de systeemfont uit dx.light.css (.dx-widget → Segoe UI op Windows). Forceer
   Maven Pro zodat de waarden in grids hetzelfde lettertype hebben als de rest
   van V2. Staat in stylev2.css (laadt ná dx.light.css én alleen in V2), dus V1
   blijft ongemoeid. */
.dx-widget,
.dx-widget input,
.dx-widget textarea {
    font-family: 'Maven Pro', sans-serif;
}

header {
    background-color: white;
    padding: 10px;
    margin-left: 10px;
    margin-right: 10px;
}

.dropdown-item:active {
    background: var(--blue-color);
}

.header-item.menu-btn {
    background: var(--blue-color);
    border: 2px solid var(--blue-color);
    color: white;
    margin: 0px;
}

.header-item.menu-btn:hover {
    border: 2px solid var(--blue-color);
    color: var(--blue-color);
    background: white;
}

#user_menu {
    padding: 0px;
    margin-left: 5px;
}

.vertical-menu {
    background: #f5f5f5;
    width: 250px;
    /* Vaste sidebar naast de content (flex-row). flex-basis volgt width, zodat de
       desktop icon-collapse (app.css: .vertical-collpsed .vertical-menu width:70px)
       blijft werken. Op mobiel wordt dit overschreven door de off-canvas media query. */
    flex: 0 0 auto;
    /* Smooth in-/uitklappen: animeer de breedtewissel 250px <-> 70px. */
    transition: width 0.3s ease;
}


.card-header {
    padding: 20px;
}

    .card-header i {
        color: var(--blue-color);
    }

/* Kaart-header met een actieknop (bijv. "+") rechts uitgelijnd op dezelfde
   hoogte als de titel, i.p.v. de DevExtreme-toolbarknop op een eigen regel. */
.card-header-actie {
    display: flex;
    align-items: center;
    justify-content: space-between;
}

    .card-header-actie h5 {
        margin: 0;
    }

/* Magenta accentlijn (CTA, 2px) onder de kolomkoppen van álle V2-datagrids, op
   dezelfde plek: tussen de kopregel en de eerste datarij. Zelfde huisstijl-accent
   als de bovenrand van de uitklap-rij in het verzuimgrid (.masterdetail-row).
   !important + extra .dx-datagrid in de selector omdat dx.light.css én de globale
   ".dx-datagrid .dx-row > td { border-color: tint !important }"-regel de cel-randen
   forceren; deze selector is specifieker zodat de magenta onderrand wint. */
.dx-datagrid .dx-datagrid-headers .dx-header-row > td {
    border-bottom: 2px solid var(--vt-cta) !important;
}

.btn-card-toevoegen {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    padding: 0;
    border: none;
    border-radius: 50%;
    background: var(--vt-cta);
    cursor: pointer;
    transition: background 0.15s ease-in-out;
}

    .btn-card-toevoegen:hover {
        background: var(--vt-cta-dark);
    }

    .card-header-actie .btn-card-toevoegen i {
        color: #fff;
    }

.vertical-menu ul {
    list-style: none;
    margin: 0px;
    padding: 0px;
}

    .vertical-menu ul li i {
        margin-right: 5px;
    }

    .vertical-menu ul li a {
        width: 100%;
        display: block;
        text-decoration: none;
        /* Tijdens de uitklap-animatie is het menu nog smal terwijl de labels al
           zichtbaar zijn; nowrap voorkomt dat tekst dan even omklapt. */
        white-space: nowrap;
    }

.vertical-menu li {
    /*margin: 0px;
        padding: 2px;*/
    /* min-height i.p.v. een vaste height: een menu-item met een uitgeklapt
       submenu (Financieel) moet kunnen meegroeien zodat het submenu de
       items eronder naar beneden duwt i.p.v. eroverheen te vallen. */
    min-height: 50px;
    /*display: flex;
    align-items: center;
        padding-left: 20px;*/
    border-top: 1px solid white;
}

/* De toggle-rij (Financieel) en losse menu-items houden een vaste klikbare
   rijhoogte; submenu-items idem. */
.vertical-menu #side-menu > li > a {
    min-height: 50px;
    display: flex;
    align-items: center;
}

.vertical-menu #side-menu ul li {
    height: 50px;
}

    .vertical-menu li:hover {
        background: #DADADA;
    }

.vertical-menu ul li, .vertical-menu ul li a {
    color: #3d3d3d;
    cursor: pointer;
}

    .vertical-menu ul li.mm-active, .vertical-menu ul li.mm-active a {
        color: var(--vt-primary-dark);
    }

    .vertical-menu ul li.mm-active {
        border-left: solid 5px var(--blue-color);
        /*  padding-left: 15px;*/
    }




.vertical-menu a {
    text-decoration: none;
}

    .vertical-menu a svg path {
        fill: #3d3d3d;
    }

    .vertical-menu a span {
        color: #3d3d3d;
    }

.vertical-menu li {
    border-bottom: solid 1px white;
}

    .vertical-menu li:hover {
        background: #DADADA;
        color: #3d3d3d !important;
    }

.vertical-menu a:hover span {
    color: #3d3d3d !important;
}

.vertical-menu a:hover svg path {
    fill: #3d3d3d;
}

.vertical-menu li.mm-active, .vertical-menu li.mm-active a span {
    color: var(--vt-primary-dark) !important;
}

.vertical-menu li.mm-active {
    border-left: 10px solid var(--blue-color);
    background: #ececec;
}

.vertical-menu ul li.mm-active a {
    padding-left: calc(1.5rem - 10px);
}

/* Uitklap-chevron van menu-items met submenu (bv. "Financieel"). metisMenu
   zet de chevron standaard op rotate(-45deg) = wijst naar links. Wij laten 'm
   in dichtgeklapte staat naar onder wijzen (dropdown-affordance) en bij
   openklappen naar boven draaien. Alleen scoped op het V2-menu; raakt V1 niet. */
.vertical-menu .metismenu .has-arrow::after {
    transform: rotate(-135deg) translate(0, -50%);
}

.vertical-menu .metismenu .mm-active > .has-arrow::after,
.vertical-menu .metismenu .has-arrow[aria-expanded="true"]::after {
    transform: rotate(45deg) translate(0, -50%);
}

.main-content {
    background: var(--vt-tint);
    padding-top: 40px;
    /* Vult de ruimte naast de sidebar. min-width:0 is cruciaal: zonder dit weigert
       een flex-item kleiner te worden dan z'n inhoud, waardoor brede grids/tabellen
       de hele pagina verbreden. Nu scrollen die binnen hun eigen vak. width:auto
       neutraliseert de Bootstrap w-100-class op dit element. */
    flex: 1 1 0%;
    min-width: 0;
    width: auto !important;
}

header .user {
    font-size: 16px;
    font-weight: bold;
}

header .company {
    font-size: 14px;
}

.nav-link.active {
    background-color: var(--blue-color) !important;
}

/* Sectie-/filternavigatie (.nav-pills) op de overzichtspagina's én de
   tabbladen (.nav-tabs) op de detailpagina's delen dezelfde huisstijl:
   lichte teal-blokken, actieve pill/tab in de primaire teal met witte tekst.
   Centraal gedefinieerd zodat alle overzichten en detailtabs identiek ogen
   (voorheen stond dit als gedupliceerd <style>-blok in elke detailview). */
.nav-pills .nav-link,
.nav-tabs .nav-link {
    background-color: var(--vt-tint);
    border: 1px solid var(--vt-border);
    color: var(--vt-primary-dark);
}

.nav-pills .nav-link:hover,
.nav-pills .nav-link:focus,
.nav-tabs .nav-link:hover,
.nav-tabs .nav-link:focus {
    background-color: var(--vt-tint-hover);
    border-color: var(--vt-border-hover);
    color: var(--vt-text-strong);
}

.nav-pills .nav-link.active,
.nav-tabs .nav-link.active {
    background-color: var(--vt-primary);
    border-color: var(--vt-primary) var(--vt-primary) transparent;
    color: #fff;
    font-weight: 600;
}

.nav-pills {
    gap: .25rem;
}

/* Segmented toggle (Bootstrap .btn-group) in de V2-huisstijl — zelfde
   tint/navy-logica als de .nav-pills/.nav-tabs hierboven: inactieve segmenten
   in lichte tint, het actieve segment in de primaire navy met witte tekst.
   Gebruikt o.a. op de admin-home (Per locatie / Per behandelaar). Puur
   presentatie: de .active-class wordt door de bestaande JS gezet, hier worden
   alleen de kleuren (via Bootstrap 5 --bs-btn-* custom properties) overschreven
   zodat we niet de globale .btn-outline-primary raken. */
.vt-segmented .btn {
    --bs-btn-color: var(--vt-primary-dark);
    --bs-btn-bg: var(--vt-tint);
    --bs-btn-border-color: var(--vt-border);
    --bs-btn-hover-color: var(--vt-text-strong);
    --bs-btn-hover-bg: var(--vt-tint-hover);
    --bs-btn-hover-border-color: var(--vt-border-hover);
    --bs-btn-active-color: #fff;
    --bs-btn-active-bg: var(--vt-primary);
    --bs-btn-active-border-color: var(--vt-primary);
    --bs-btn-focus-shadow-rgb: 0, 66, 137;
    font-weight: 500;
}

.vt-segmented .btn.active {
    font-weight: 600;
}

/* Ronde uiteinden zodat de groep als nette pil-toggle oogt (sluit aan op de
   pil-zoekbalken elders in V2). De binnen-randen blijven recht. */
.vt-segmented .btn:first-child {
    border-top-left-radius: 50rem;
    border-bottom-left-radius: 50rem;
    padding-left: 1rem;
}

.vt-segmented .btn:last-child {
    border-top-right-radius: 50rem;
    border-bottom-right-radius: 50rem;
    padding-right: 1rem;
}

/* --- V2 overzicht-filterbalk in de card-header --------------------------
   Compacte zoekbalk (zelfde maat als de Verzuimmeldingen-grid) en het
   uitklap-paneel met de datum-snelkeuzes. Centraal zodat alle overzichten
   met een datumfilter identiek ogen. */
.v2-grid-search {
    width: 230px;
}

/* Zoekbalken boven de overzicht-grids: het invoerveld is zelf een volledige
   pil; het zoekicoon staat er als los icoon rechts naast (geen vastgeplakte
   knop). Dekt zowel de .v2-grid-search-balken (#gridSearch) als de losse
   #txtSearch-balken (Verzuimmeldingen, Klanten, beheer-overzichten).
   !important is nodig omdat Bootstrap's .input-group-regels de binnenhoeken
   van de groep met hogere specificiteit op 0 zetten. */
.v2-grid-search > .form-control,
.input-group > #txtSearch.form-control {
    border-radius: 50rem !important;
    padding-left: 1rem;
}

.v2-grid-search > .form-control + .btn,
.input-group > #txtSearch + .btn {
    border: 0;
    background: transparent;
    margin-left: .35rem !important;
    border-radius: 50rem !important;
    color: var(--vt-primary);
}

.v2-grid-search > .form-control + .btn:hover,
.input-group > #txtSearch + .btn:hover {
    background: var(--vt-tint);
    color: var(--vt-primary-dark);
}

.grid-snelkeuze-menu {
    min-width: 320px;
}

body.sidebar-enable.vertical-collpsed #vertical-menu-btn .menu-collapse-in {
    display: none !important;
}

body #vertical-menu-btn .menu-collapse-out {
    display: none !important;
}

body.sidebar-enable.vertical-collpsed #vertical-menu-btn .menu-collapse-out {
    display: unset !important;
}

/* Ingeklapt zijmenu: het zijmenu is een flex-item met z-index 5 (app.css) en
   vormt daardoor een eigen stacking context. De hover-flyout (icoonlabel +
   submenu) valt zo achter de DevExtreme-grid kolomkoppen/filterrij. Til het
   hele menu boven de grid-inhoud, maar onder modals/overlay-popups (1040+). */
body.vertical-collpsed .vertical-menu {
    z-index: 1002;
}

/* Ingeklapt zijmenu: de template klapt het gehoverde item uit tot een breed
   label-blok (260px) dat buiten het menu steekt. Dat willen we niet: houd de
   hover binnen de 70px menubreedte (alleen het icoon licht op, label blijft
   verborgen). De submenu-flyout van items mét kinderen (Financieel) blijft
   bestaan — anders zijn Offertes/Facturen onbereikbaar in ingeklapte staat. */
body.vertical-collpsed .vertical-menu #sidebar-menu > ul > li:hover > a {
    width: 100%;
    background-color: var(--vt-primary);
    box-shadow: none;
}

    body.vertical-collpsed .vertical-menu #sidebar-menu > ul > li:hover > a i {
        color: #fff;
    }

    body.vertical-collpsed .vertical-menu #sidebar-menu > ul > li:hover > a span {
        display: none;
    }

body.vertical-collpsed .vertical-menu #sidebar-menu > ul > li:hover > ul {
    border: 1px solid var(--vt-border);
    box-shadow: 3px 5px 12px 0 rgba(54, 61, 71, 0.2);
}

/* Inklap-knop: direct onder het laatste menu-item, opgemaakt als de items
   zelf (zelfde kleur, witte scheidingslijn en dezelfde hover-achtergrond);
   het pijltje staat rechts in het menu. */
#vertical-menu-btn {
    display: block;
    font-size: 1rem;
    line-height: 1.40625rem;
    padding: 14px 24px;
    cursor: pointer;
    text-align: right;
    color: #3d3d3d;
    border-top: 1px solid white;
}

    #vertical-menu-btn:hover {
        background: #DADADA !important;
    }

/* Ingeklapt menu is maar 70px breed: centreer het pijltje dan. */
body.vertical-collpsed #vertical-menu-btn {
    text-align: center;
    padding: 14px 12px;
}

section#log-in {
    background: red;
}

.btn-action {
    background: var(--vt-cta);
    color: white;
    font-size: 15px;
}
.accordion-headerbutton:not(.collapsed) {
    background-color: var(--bs-card-cap-bg);
    border: unset;
    box-shadow: unset;
}
.accordion-headerbutton {
    font-weight: 500;
    font-family: "Raleway", sans-serif;
    font-variant-numeric: lining-nums tabular-nums;
    font-feature-settings: "lnum" 1, "tnum" 1;
    font-size: 1.25rem;
    height: 73px;
    background-color: white;
}

.btn-action:hover {
    background: var(--vt-cta-dark);
}

/* Secundaire actieknop: outline-variant van .btn-action voor beheer-/minder
   gebruikte acties, zodat primaire en secundaire acties visueel gescheiden
   kunnen worden (o.a. de tweede knoppenrij op /V2/Bedrijf/Status). */
.btn-action-outline {
    background: transparent;
    color: var(--vt-cta);
    border: 1px solid var(--vt-cta);
    font-size: 14px;
}

.btn-action-outline:hover {
    background: var(--vt-cta);
    color: white;
}

/* Bootstrap-knoppen V2-breed iets ronder dan standaard (4-6px), maar bewust
   geen pilvorm. Geldt voor alle maten (.btn-sm t/m .btn-lg) via de BS5-variabele. */
.btn {
    --bs-btn-border-radius: .5rem;
    border-radius: .5rem;
}

/* Inline cell-/rij-editing: app.css zet op álle grid-cellen
   `padding: 11px 7px 0 !important` (top 11, bottom 0). In een bewerk-/invoegrij
   is de cel ~48px hoog, waardoor de editor-input (33px) met die asymmetrische
   padding bovenin plakte i.p.v. verticaal gecentreerd. Voor bewerk-/invoegrijen
   herstellen we symmetrische verticale padding (links/rechts blijven 0/7 zoals
   app.css) zodat de getypte tekst netjes in het midden staat. V2-only:
   stylev2.css laadt niet in V1, dus de V1-grids blijven ongemoeid. */
.dx-datagrid-rowsview .dx-row.dx-edit-row > td,
.dx-datagrid-rowsview .dx-row.dx-row-inserted > td {
    padding-top: 7px !important;
    padding-bottom: 7px !important;
    vertical-align: middle;
}

/* Inline-invoervelden in V2-grids (bv. Opties, medische opties): duidelijk als
   invoer herkenbaar maken. Pilvorm met een lichte tint-vulling en rand zodat het
   typvlak opvalt; bij focus wit met een accent-rand + subtiele ring in de
   huisstijlkleur. Het percentage-veld heeft een eigen editor (vt-pct-bar) en
   blijft ongemoeid. Alleen het data-gebied (rowsview), niet de filterrij. */
.dx-datagrid-rowsview .dx-editor-cell .dx-texteditor {
    background-color: var(--vt-tint);
    border: 1px solid var(--vt-border);
    border-radius: 50rem;
}

.dx-datagrid-rowsview .dx-editor-cell .dx-texteditor.dx-state-focused {
    background-color: #fff;
    border-color: var(--vt-primary);
    box-shadow: 0 0 0 .15rem rgba(0, 66, 137, .18);
}

.dx-datagrid-rowsview .dx-editor-cell .dx-texteditor .dx-texteditor-input {
    padding-left: .6rem;
    padding-right: .6rem;
    color: var(--vt-text-strong);
}

/* Date-/SelectBox in een cel: de knoppen (kalender/clear) nemen al ruimte in
   smalle kolommen; geen extra padding rechts van de tekst. */
.dx-datagrid-rowsview .dx-editor-cell .dx-dropdowneditor .dx-texteditor-input {
    padding-right: .2rem;
}

/* DevExtreme tekent bij cell-editing een absoluut gepositioneerde focus-overlay
   rond de actieve cel. Positie én grootte komen uit getBoundingClientRect en
   worden als CSS-px weggeschreven: onder html{zoom:.8} landt hij 0,8× te klein
   en steeds verder verschoven naarmate de kolom verder rechts staat — het
   "zwevende lege blokje" uit verbetervoorstellen 6 en 10. app.css zet hem al op
   border:unset, maar app.css laadt in V2 vóór dx.light.css en verliest die
   strijd. Focusindicatie komt in-place van de cel zelf (regel hieronder). */
.dx-datagrid-focus-overlay,
.dx-treelist-focus-overlay {
    display: none !important;
}

.dx-datagrid-rowsview td.dx-focused {
    box-shadow: inset 0 0 0 2px var(--vt-primary);
}

.dx-datagrid-rowsview .dx-selection.dx-row:not(.dx-row-focused) > td, .dx-datagrid-rowsview .dx-selection.dx-row:not(.dx-row-focused) > tr > td, .dx-datagrid-rowsview .dx-selection.dx-row:not(.dx-row-focused):hover > td, .dx-datagrid-rowsview .dx-selection.dx-row:not(.dx-row-focused):hover > tr > td {
    background-color: #fdecfb;
    color: #333;
}
.dx-datagrid-table .dx-data-row.dx-state-hover:not(.dx-selection):not(.dx-row-inserted):not(.dx-row-removed):not(.dx-edit-row):not(.dx-row-focused) > td:not(.dx-focused), .detail .dx-datagrid-table .dx-data-row.dx-state-hover:not(.dx-selection):not(.dx-row-inserted):not(.dx-row-removed):not(.dx-edit-row):not(.dx-row-focused) > td:not(.dx-focused) {
    background-color: #fdecfb;
    color: #333;
}

/* Detail-uitklap verzuimgrid: zachte navy-tint i.p.v. vlak grijs, met een
   magenta accentlijn bovenaan zodat de uitklap zichtbaar bij de geopende
   rij hoort. De negatieve marges laten het vlak doorlopen tot de randen
   van de detailcel — niet aanpassen, anders ontstaan witte naden. */
.masterdetail-row {
    box-shadow: inset 0 6px 6px -6px rgba(0, 49, 95, .25);
    border-top: 3px solid var(--vt-cta);
    min-height: 450px;
    margin-top: -11px;
    margin-left: -11px;
    padding-left: 20px;
    padding-top: 20px;
    margin-right: -11px;
    padding-right: 20px;
    padding-bottom: 20px;
    background: linear-gradient(180deg, #e8eef8 0%, #f4f7fc 100%);
}

/* Compacte variant voor uitklappen met één enkel blok (zoals de
   factuurregels onder een factuur): zelfde achtergrond/accentlijn, maar
   zonder de vaste minimale hoogte van het dossier-overzicht. */
.masterdetail-row--compact {
    min-height: 0;
}

/* Bootstrap-cards binnen de uitklap (bv. hergebruikte _Regels-partial):
   zelfde rand en zachte schaduw als .detail-card, en de mt-3 van het
   Edit-tabblad valt weg omdat de uitklap zelf al padding heeft. */
.masterdetail-row .card {
    border-color: var(--vt-border);
    box-shadow: 0 2px 10px rgba(0, 66, 137, .08);
}

.masterdetail-row .card.mt-3 {
    margin-top: 0 !important;
}

/* Blokken in de detail-uitklap (Poortwachtersignalen, Afspraken, Offertes,
   Acties): witte kaarten met ronde hoeken en een zachte navy schaduw. */
.detail-card {
    background: #fff;
    border: 1px solid var(--vt-border);
    border-radius: 14px;
    padding: 14px 16px 16px;
    box-shadow: 0 2px 10px rgba(0, 66, 137, .08);
}

/* Bloktitel: navy in plaats van zwart, met een dunne navy→magenta
   accentlijn eronder (zelfde huisstijl-gradient als elders in V2). */
.detail-card > strong {
    display: block;
    color: var(--vt-primary-dark);
    padding-bottom: 6px;
    margin-bottom: 10px;
    background: linear-gradient(90deg, var(--vt-primary), var(--vt-cta)) left bottom / 48px 2px no-repeat;
}

/* Acties-blok in de dossier-uitklap: knoppen niet over de volle kaartbreedte
   en in de zachtere CTA-kleur, zodat een stapel knoppen minder zwaar oogt. */
.acties-paneel .btn-action {
    align-self: center;
    width: 90%;
    background: var(--vt-cta-soft-bg);
    border: 1px solid var(--vt-cta-soft-border);
    color: var(--vt-cta);
    font-weight: 600;
}

.acties-paneel .btn-action:hover {
    background: var(--vt-cta);
    border-color: var(--vt-cta);
    color: #fff;
}

/* "Uitvoeren"-knop per regel in het actie-overzicht (voorheen alleen een
   bliksem-icoontje): opgemaakt als kleine knop zodat zichtbaar is dat je
   hiermee de betreffende actie start.
   !important op color: dx.light.css zet op geselecteerde/gefocuste rijen
   met hogere specificiteit color:inherit op .dx-link, waardoor de tekst
   anders donker blijft op de donkere hover-achtergrond. */
.acties-grid .dx-command-edit .dx-link {
    display: inline-block;
    background: var(--vt-cta-soft-bg);
    color: var(--vt-cta) !important;
    border: 1px solid var(--vt-cta-soft-border);
    border-radius: .5rem;
    padding: 2px 10px;
    font-size: 13px !important;
    font-weight: 600;
    text-decoration: none;
}

.acties-grid .dx-command-edit .dx-link:hover {
    background: var(--vt-cta);
    border-color: var(--vt-cta);
    color: #fff !important;
}

/* ------------------------------------------------------------------
   Actie-knoppen: laadtoestand & dubbelklik-bescherming (VtBusy, utils.js)
   Bij het starten van een actie (beter melden, verslag downloaden,
   "Uitvoeren", verwijderen, ...) krijgt de aangeklikte knop een spinner
   en wordt het omliggende actie-paneel uitgegrijsd. Zo komt een tweede
   klik of een parallelle actie er niet doorheen tot de actie klaar is
   (of de pagina herlaadt). Geldt V2-breed.
   ------------------------------------------------------------------ */

/* Aangeklikte knop/link in laadtoestand: spinner zichtbaar, niet klikbaar. */
.vt-busy-btn {
    pointer-events: none;
    cursor: progress;
}

/* Spinner-icoon (zelfde Font Awesome-variant als elders in V2). */
.vt-busy-spin {
    margin-right: .4em;
}

/* Uitgegrijsd actie-paneel: de overlay vangt kliks af, dimt de inhoud en
   toont een centrale spinner. position via .vt-busy zodat de overlay zich
   over het volledige paneel legt. */
.vt-busy {
    position: relative;
}

.vt-busy-overlay {
    position: absolute;
    inset: 0;
    z-index: 20;
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba(255, 255, 255, .55);
    border-radius: inherit;
    cursor: progress;
}

.vt-busy-overlay .vt-busy-spin {
    margin: 0;
    font-size: 1.6rem;
    color: var(--vt-cta);
}

/* ------------------------------------------------------------------
   Mini-actieknoppen in grid-rijen: vervangen losse icoontjes door
   kleine tekstknoppen zodat duidelijk is wat elke actie doet.
   Toepassen op DevExtreme command-buttons via
   .CssClass("vt-grid-btn vt-grid-btn--...") of op <button>/<a>-elementen
   in een celtemplate. Varianten (kleurgroepen):
     --status, --bewerk          : blauwe tint — openen, bewerken,
                                   downloaden, verzenden, navigeren
     --verwijder, --nietakkoord  : zachtrood — verwijderen, afwijzen
     --herstel, --akkoord        : zachtgroen — herstellen, akkoord
   !important op color: zie de toelichting bij .acties-grid hierboven
   (dx.light.css overschrijft de linkkleur op geselecteerde rijen).
   ------------------------------------------------------------------ */
.dx-datagrid .dx-link.vt-grid-btn,
.dx-datagrid button.vt-grid-btn {
    display: inline-block;
    padding: 2px 10px;
    border-radius: .5rem;
    font-size: 13px;
    line-height: 1.5;
    text-decoration: none;
    white-space: nowrap;
    border: 1px solid transparent;
    transition: background-color .12s ease, color .12s ease, border-color .12s ease;
}

/* Celtemplate-<button>s erven geen linkstijl; browserdefaults resetten. */
.dx-datagrid button.vt-grid-btn {
    -webkit-appearance: none;
    appearance: none;
    cursor: pointer;
    font-family: inherit;
    margin: 0;
    background: none;
}

.dx-datagrid .vt-grid-btn + .vt-grid-btn {
    margin-left: 6px;
}

.dx-datagrid .dx-link.vt-grid-btn--status,
.dx-datagrid .dx-link.vt-grid-btn--bewerk,
.dx-datagrid button.vt-grid-btn--status,
.dx-datagrid button.vt-grid-btn--bewerk {
    background: var(--vt-tint);
    color: var(--vt-text-strong) !important;
    border-color: var(--vt-border);
}

.dx-datagrid .dx-link.vt-grid-btn--status:hover,
.dx-datagrid .dx-link.vt-grid-btn--bewerk:hover,
.dx-datagrid button.vt-grid-btn--status:hover,
.dx-datagrid button.vt-grid-btn--bewerk:hover {
    background: var(--vt-tint-hover);
    color: var(--vt-text-strong) !important;
    border-color: var(--vt-border-hover);
}

.dx-datagrid .dx-link.vt-grid-btn--verwijder,
.dx-datagrid .dx-link.vt-grid-btn--nietakkoord,
.dx-datagrid button.vt-grid-btn--verwijder,
.dx-datagrid button.vt-grid-btn--nietakkoord {
    background: #fdecec;
    color: #b02a37 !important;
    border-color: #f5c2c7;
}

.dx-datagrid .dx-link.vt-grid-btn--verwijder:hover,
.dx-datagrid .dx-link.vt-grid-btn--nietakkoord:hover,
.dx-datagrid button.vt-grid-btn--verwijder:hover,
.dx-datagrid button.vt-grid-btn--nietakkoord:hover {
    background: #f8d7da;
    color: #842029 !important;
    border-color: #f1aeb5;
}

.dx-datagrid .dx-link.vt-grid-btn--herstel,
.dx-datagrid .dx-link.vt-grid-btn--akkoord,
.dx-datagrid button.vt-grid-btn--herstel,
.dx-datagrid button.vt-grid-btn--akkoord {
    background: #e3f3ea;
    color: #1b5e20 !important;
    border-color: #c4e3cf;
}

.dx-datagrid .dx-link.vt-grid-btn--herstel:hover,
.dx-datagrid .dx-link.vt-grid-btn--akkoord:hover,
.dx-datagrid button.vt-grid-btn--herstel:hover,
.dx-datagrid button.vt-grid-btn--akkoord:hover {
    background: #d2ecdd;
    color: #14491a !important;
    border-color: #a8d5ba;
}

/* ------------------------------------------------------------------
   Geen grijs in V2-tabellen (design-feedback Dean, jun 2026).
   dx.light.css gebruikt grijstinten voor rand-/scheidingslijnen (#ddd,
   #e6e6e6), om-en-om-rijen (whitesmoke) en de master-detail-uitklap
   (#fafafa). Vervang in alle V2-grids door wit en lichte huisstijl-
   blauwtinten. N.B. dx.light definieert wel variabelen zoals
   --dx-color-border, maar de gecompileerde regels gebruiken hex-
   waarden — variabelen overriden werkt hier dus niet.
   ------------------------------------------------------------------ */
/* Om-en-om-rijen: whitesmoke-grijs -> heel licht huisstijl-blauw. */
.dx-datagrid .dx-row-alt > td,
.dx-datagrid .dx-row-alt > tr > td {
    background-color: #f3f6fb;
}

/* Master-detail-uitklap: dx geeft de cel een grijze achtergrond die
   links en boven het witte detailpaneel als grijze rand zichtbaar is. */
.dx-datagrid-rowsview .dx-master-detail-row:not(.dx-datagrid-edit-form) .dx-master-detail-cell {
    background-color: #fff;
}

/* Alle rand-/scheidingslijnen in grids: grijs -> blauwtint.
   !important omdat dx.light.css tientallen losse borderregels heeft
   (headers, sticky kolommen, selectie- en detailrijen) met wisselende
   specificiteit; dit dekt ze in één keer af. */
.dx-datagrid .dx-row > td,
.dx-datagrid-headers,
.dx-datagrid-rowsview,
.dx-datagrid-total-footer {
    border-color: var(--vt-tint) !important;
}

/* Bootstrap-grijs eruit: kaartkop (de balk met tabs boven een grid)
   krijgt geen grijze tint meer, en secundaire outline-knoppen (o.a.
   de zoekknop naast elk grid) gaan van grijs naar huisstijl-navy. */
.card > .card-header {
    background-color: transparent;
}

.btn-outline-secondary {
    --bs-btn-color: var(--vt-primary);
    --bs-btn-border-color: var(--vt-border);
    --bs-btn-hover-color: var(--vt-text-strong);
    --bs-btn-hover-bg: var(--vt-tint);
    --bs-btn-hover-border-color: var(--vt-border-hover);
    --bs-btn-active-color: var(--vt-text-strong);
    --bs-btn-active-bg: var(--vt-tint-hover);
    --bs-btn-active-border-color: var(--vt-border-hover);
    --bs-btn-disabled-color: #92a7c4;
    --bs-btn-disabled-border-color: var(--vt-tint);
}
.sidebarright {
    position: sticky;
    top: 1rem; /* afstand vanaf de bovenkant van de viewport */
    z-index: 10;
}
#sidebar-menu {
    position: sticky;
    top: 1rem; /* afstand vanaf de bovenkant van de viewport */
    z-index: 10;
}

.swiper {
    width: 100%;
    max-width: 500px;
    height: 200px;
}

.swiper-slide i {
    color: var(--vt-primary-dark);
}
.swiper-slide {
    border-radius: 10px;
    background: var(--vt-tint);
    padding: 10px;
}
.swiper-slide:hover {
    background: #fdecfb;
}
.row:not([class*="g-"]):not([class*="gx-"]):not([class*="gy-"]) {
    --bs-gutter-x: 0;
    --bs-gutter-y: 0;
}
/* Badge met aantal openstaande taken in de navigatie (huisstijl: donkerroze CTA met witte tekst).
   !important omdat de menu-CSS (id-selectors zoals #sidebar-menu a) anders de tekstkleur overschrijft. */
.taken-badge,
#sidebar-menu .taken-badge {
    background-color: var(--vt-cta);
    color: #fff !important;
    font-weight: 600;
}
.accordion-button:hover {
    background-color: #fdecfb;
}
/* Uitklap-animatie van detailrijen (geldt voor alle V2-grids met een
   master-detail uitklap): 250ms met ease-out zodat het openen rustig oogt. */
.dx-master-detail-row {
    animation: animation 250ms ease-out;
    transform-origin: top;
}

@keyframes animation {
    0% {
        transform: scaleY(0.3);
        opacity: 0;
    }

    100% {
        transform: scaleY(1);
        opacity: 1;
    }
}

/* Sluit-animatie van de master-detail uitklap, symmetrisch met de
   open-animatie hierboven. utils.js zet bij het inklappen de class
   vt-detail-collapsing op de detailrij en max-height:0 op de inhoud;
   deze transitie laat dat in 250ms dichtlopen, waarna de rij pas
   echt wordt ingeklapt. */
.vt-detail-collapsing > .dx-master-detail-cell > * {
    transition: max-height 250ms ease-out, opacity 250ms ease-out;
    opacity: 0;
}

.vt-detail-collapsing > .dx-master-detail-cell {
    padding-top: 0 !important;
    padding-bottom: 0 !important;
    transition: padding 250ms ease-out;
}

.bsn {
    cursor: pointer;
}
.bsn .value {
    display: none;
}

.bsn .hiddenvalue:not(.noblock) {
    display: block;
}

.bsn .hiddenvalue.noblock {
    display:unset;
}
.bsn:hover .value:not(.noblock) {
    display: block;
}
.bsn:hover .value.noblock{
    display:unset;
}
.bsn:hover .hiddenvalue {
    display: none;
}

/* ------------------------------------------------------------------
   Klikbare entiteits-chip in V2 grid-cellen (Werkgever / Werknemer).
   Wordt gerenderd in DataGrid cellTemplate als <a class="grid-entity-chip">.
   Tekst in gedempt lichtblauw zodat zichtbaar is dat het een link is;
   op hover wordt de kleur iets donkerder en licht de chip op.
   Persoon en werkgever krijgen bewust dezelfde kleuren (design-feedback
   Dean, jun 2026); de class grid-entity-chip--werkgever in de views is
   alleen nog een semantische marker zonder eigen styling.
   ------------------------------------------------------------------ */
.grid-entity-chip {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 2px 10px;
    border-radius: 999px;
    background: #eef3fb;
    color: var(--vt-chip-link);
    text-decoration: none;
    font-weight: 500;
    line-height: 1.4;
    border: 1px solid transparent;
    transition: background-color .12s ease, color .12s ease, border-color .12s ease, box-shadow .12s ease;
    max-width: 100%;
}

.grid-entity-chip > .chip-text {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.grid-entity-chip > i {
    font-size: .8em;
    opacity: .8;
    flex: 0 0 auto;
}

.grid-entity-chip:hover,
.grid-entity-chip:focus-visible {
    background: var(--vt-tint);
    color: var(--vt-chip-link-hover);
    border-color: var(--vt-border);
    text-decoration: none;
    box-shadow: 0 1px 2px rgba(13, 59, 102, .08);
}

.grid-entity-chip:hover > i,
.grid-entity-chip:focus-visible > i {
    opacity: 1;
    color: var(--vt-chip-link-hover);
}

/* Fallback voor cellen zonder ID — toon de naam plat, niet als chip.
   Gedempt blauwgrijs i.p.v. Bootstrap-grijs (geen grijs in V2). */
.grid-entity-plain {
    color: #51719a;
}

/* ------------------------------------------------------------------
   dxSwitch in "pastel ja/nee" variant.

   Markeer een Switch met .ElementAttr("class", "vt-pastel-switch") en
   krijg een rustige neutrale track met een ronde, pastel-gekleurde
   handle: groen bij "Ja", rood bij "Nee".

   Selectors targeten .dx-switch-handle::before — daar zit in dx.light.css
   de blauwe achtergrond. Ook hover/focus/active states moeten expliciet
   overschreven worden, anders flitsen ze terug naar het DevExtreme-blauw
   zodra je de switch aanraakt.
   ------------------------------------------------------------------ */
.vt-pastel-switch.dx-switch .dx-switch-container,
.vt-pastel-switch.dx-switch.dx-state-hover .dx-switch-container,
.vt-pastel-switch.dx-switch.dx-state-focused .dx-switch-container,
.vt-pastel-switch.dx-switch.dx-state-active .dx-switch-container {
    background-color: #f8f9fa !important;
    border-color: #dee2e6 !important;
}

.vt-pastel-switch.dx-switch .dx-switch-handle::before {
    border-radius: 999px !important;
    transition: background-color .15s ease;
}

.vt-pastel-switch.dx-switch.dx-switch-on-value .dx-switch-handle::before,
.vt-pastel-switch.dx-switch.dx-switch-on-value.dx-state-hover .dx-switch-handle::before,
.vt-pastel-switch.dx-switch.dx-switch-on-value.dx-state-focused .dx-switch-handle::before,
.vt-pastel-switch.dx-switch.dx-switch-on-value.dx-state-active .dx-switch-handle::before {
    background-color: #a5d6a7 !important;
}

.vt-pastel-switch.dx-switch:not(.dx-switch-on-value) .dx-switch-handle::before,
.vt-pastel-switch.dx-switch:not(.dx-switch-on-value).dx-state-hover .dx-switch-handle::before,
.vt-pastel-switch.dx-switch:not(.dx-switch-on-value).dx-state-focused .dx-switch-handle::before,
.vt-pastel-switch.dx-switch:not(.dx-switch-on-value).dx-state-active .dx-switch-handle::before {
    background-color: #f1aeb5 !important;
}

.vt-pastel-switch.dx-switch .dx-switch-on,
.vt-pastel-switch.dx-switch .dx-switch-off {
    color: #495057 !important;
    font-weight: 500;
}

/* ===========================================================================
   Statusbalk factuurproces (V2)
   Horizontale stepper bovenin /V2/Facturen/Edit/{id}.
   States: is-realized (groen), is-current (oranje), is-future (grijs),
           is-skipped (lichtgrijs/doorgestreept), is-paid-overlay (groen vinkje).
   =========================================================================== */

.status-balk .card-body {
    padding: 1.25rem 1.5rem 1rem 1.5rem;
}

.status-balk__meta {
    font-size: 0.95rem;
    color: #495057;
    margin-bottom: 1.25rem;
    font-weight: 500;
}

.status-balk__steps {
    list-style: none;
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 0;
    margin: 0;
    padding: 0;
    counter-reset: stepcount;
}

.status-step {
    flex: 1 1 0;
    position: relative;
    text-align: center;
    padding: 0 0.5rem;
    min-width: 0;
}

/* Connector tussen stappen (dashed line). Niet renderen op de laatste stap. */
.status-step::after {
    content: "";
    position: absolute;
    top: 22px; /* verticaal gecentreerd op cirkel (36px / 2 + 4px padding) */
    left: calc(50% + 26px);
    right: calc(-50% + 26px);
    border-top: 2px dashed #ced4da;
    z-index: 0;
}

.status-step.is-last::after {
    display: none;
}

/* Connector wordt 'voltooid' (donkergroen) alleen als BEIDE kanten voltooid
   zijn. Voltooid -> overgeslagen blijft dashed grijs zodat de sprong zichtbaar is. */
.status-step.is-realized.has-realized-next::after {
    border-top-color: #1b5e20;
    border-top-style: solid;
}

.status-step__circle {
    position: relative;
    z-index: 1;
    width: 44px;
    height: 44px;
    border-radius: 50%;
    background: #e9ecef;
    color: #6c757d;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 1.05rem;
    border: 2px solid #ced4da;
    transition: transform 0.15s ease;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
}

.status-step__label {
    margin-top: 0.6rem;
    font-weight: 600;
    color: #343a40;
    font-size: 0.95rem;
}

.status-step__date {
    margin-top: 0.2rem;
    font-size: 0.825rem;
    color: #6c757d;
    line-height: 1.3;
}

.status-step__overdue {
    display: block;
    margin-top: 0.15rem;
    font-size: 0.75rem;
    color: #b02a37;
    font-weight: 600;
}

/* --- State: voltooid (gerealiseerd) --- */
.status-step.is-realized .status-step__circle {
    background: #d8f3df;
    color: #1b5e20;
    border-color: #1b5e20;
}

.status-step.is-realized .status-step__label {
    color: #1b5e20;
}

.status-step.is-realized .status-step__date {
    color: #2a6e2f;
}

/* --- State: huidige stap (oranje pastel) --- */
.status-step.is-current .status-step__circle {
    background: #fdf1cf;
    color: #7a5d00;
    border-color: #c89c00;
    transform: scale(1.08);
    box-shadow: 0 0 0 4px rgba(200, 156, 0, 0.15);
}

.status-step.is-current .status-step__label {
    color: #7a5d00;
}

.status-step.is-current .status-step__date {
    color: #7a5d00;
    font-weight: 500;
}

/* Overdue: huidige stap loopt achter op planning. */
.status-step.is-current.is-overdue .status-step__circle {
    background: #fde0e3;
    color: #b02a37;
    border-color: #b02a37;
    box-shadow: 0 0 0 4px rgba(176, 42, 55, 0.12);
}

.status-step.is-current.is-overdue .status-step__label {
    color: #b02a37;
}

/* --- State: overgeslagen (betaald voordat stap nodig was) --- */
.status-step.is-skipped .status-step__circle {
    background: #f8f9fa;
    color: #adb5bd;
    border-color: #dee2e6;
    opacity: 0.7;
}

.status-step.is-skipped .status-step__label {
    color: #adb5bd;
    text-decoration: line-through;
}

.status-step.is-skipped .status-step__date {
    color: #adb5bd;
    font-style: italic;
}

/* Mobile: stappen verticaal stapelen. */
@media (max-width: 767.98px) {
    .status-balk__steps {
        flex-direction: column;
        gap: 0.5rem;
    }

    .status-step {
        display: flex;
        align-items: center;
        text-align: left;
        gap: 0.85rem;
        padding: 0.25rem 0;
    }

    .status-step__circle {
        flex: 0 0 auto;
    }

    .status-step__label,
    .status-step__date {
        margin: 0;
    }

    /* Verticale connector tussen cirkels. */
    .status-step::after {
        top: calc(100% - 0.25rem);
        left: 21px;
        right: auto;
        bottom: -0.5rem;
        width: 0;
        border-top: none;
        border-left: 2px dashed #ced4da;
    }

    .status-step.is-realized.has-realized-next::after {
        border-left-color: #1b5e20;
        border-left-style: solid;
    }
}

/* ===========================================================================
   Proportionele poortwachter-tijdlijn (V2)
   Statusbalk bovenin /V2/Verzuimmeldingen/Status/{id}. Hergebruikt de state-
   kleuren van de factuurbalk (.status-step.is-realized / .is-current / ...),
   maar plaatst mijlpalen proportioneel op een tijdlijn (ziekmelding -> WIA).
   Stappen staan om-en-om boven (.is-above) en onder (.is-below) de track.
   =========================================================================== */

.vm-statusbalk {
    border-color: var(--vt-border);
    box-shadow: 0 2px 10px rgba(0, 66, 137, .08);
}

.vm-statusbalk .card-body {
    padding: 0.75rem 1.5rem;
    overflow-x: auto;
}

/* Inklapbare tijdlijn: de hele header is de toggle, met een duidelijke chevron
   rechts die omklapt bij openklappen. */
.vm-statusbalk__header {
    cursor: pointer;
    gap: .75rem;
}

.vm-statusbalk__header-right {
    display: flex;
    align-items: center;
    gap: .75rem;
}

.vm-statusbalk__chevron {
    color: var(--vt-primary);
    font-size: 1.15rem;
    transition: transform .25s ease;
}

.vm-statusbalk__header[aria-expanded="true"] .vm-statusbalk__chevron {
    transform: rotate(180deg);
}

/* Compacte voortgangsbalk: een dunne lijn met groene vulling (zelfde palet als
   de volledige tijdlijn) die laat zien hoe ver het traject is. Verdwijnt zodra
   de volledige tijdlijn is uitgeklapt. */
.vm-statusbalk__compact {
    padding: 0 1.5rem 1rem;
}

.vm-statusbalk__header[aria-expanded="true"] ~ .vm-statusbalk__compact {
    display: none;
}

.vm-statusbalk__compact-track {
    position: relative;
    height: 6px;
    background: #e2e8f4;
    border-radius: 999px;
}

.vm-statusbalk__compact-progress {
    height: 100%;
    background: var(--vt-cta);
    border-radius: 999px;
}

/* Info-icoon in een kolomkop (bv. 'Vangnet' in het verzuimverloop): klein
   blauw informatiebolletje met een uitleg-tooltip (native title) bij hover. */
.vt-kop-info {
    display: inline-flex;
    align-items: center;
    gap: .35rem;
}

.vt-info-icoon {
    color: var(--vt-primary);
    cursor: help;
    font-size: .85rem;
}


/* Kop: zelfde patroon als de andere status-kaarten (card-header-actie met h5),
   met rechts een samenvattingspill (MetaTekst: betergemeld / ziektedagen /
   dagen tot uiterlijke WIA-datum). */
.vm-statusbalk .card-header h5 {
    margin: 0;
}

.vm-statusbalk__meta-pill {
    background: var(--vt-tint);
    color: var(--vt-text-strong);
    border-color: var(--vt-border);
}

/* Toelichting over de getoonde (registratie)datums: voetnoot onder de
   tijdlijn, met een hairline erboven zodat hij los staat van de balk zelf. */
.vm-statusbalk__note {
    margin: 0.25rem 0 0;
    padding-top: 0.5rem;
    border-top: 1px solid #eef1f6;
    font-size: 0.72rem;
    color: #98a0a8;
    line-height: 1.3;
}

.status-timeline {
    position: relative;
    height: 240px;
    margin: 0.25rem 0;
    width: 100%;
    /* Ondergrens: zolang de balk breder is dan dit, vult hij de volle breedte en
       is er geen scrollbalk. Pas wanneer er minder ruimte is (bv. ver inzoomen)
       komt de horizontale scrollbalk van .card-body in beeld. */
    min-width: 880px;
    box-sizing: border-box;
}

/* Plotvlak: aan beide zijden ingesprongen zodat de gecentreerde labels van de
   eerste en laatste mijlpaal binnen de balk blijven (en dus geen scroll geven).
   Alle gepositioneerde elementen rekenen hun left:X% af op dit vlak. */
.status-timeline__plot {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 56px;
    right: 56px;
}

/* Horizontale track met groene voortgangsvulling. Navy-getinte basiskleur
   zodat de balk in het huisstijl-palet valt i.p.v. neutraal Bootstrap-grijs. */
.status-timeline__track {
    position: absolute;
    top: 50%;
    left: 0;
    right: 0;
    height: 4px;
    background: #e2e8f4;
    border-radius: 4px;
    transform: translateY(-50%);
    z-index: 0;
}

.status-timeline__progress {
    position: absolute;
    top: 0;
    left: 0;
    height: 100%;
    background: #1b5e20;
    border-radius: 4px;
}

/* Vandaag-marker: verticale streep over de volle hoogte met label bovenin.
   In de magenta accentkleur (CTA) — informatief "nu"-punt, geen alarm. */
.status-timeline__today {
    position: absolute;
    top: 2px;
    bottom: 2px;
    border-left: 2px dashed var(--vt-cta);
    z-index: 3;
}

.status-timeline__today-label {
    position: absolute;
    top: 0;
    left: 50%;
    transform: translateX(-50%);
    background: var(--vt-cta);
    color: #fff;
    font-size: 0.65rem;
    font-weight: 600;
    padding: 1px 7px;
    border-radius: 9px;
    white-space: nowrap;
}

/* Eén stap: absoluut op de track-positie (left:X% inline), met een verticale
   stem naar de track. Om-en-om boven/onder zodat dicht-bij-elkaar liggende
   mijlpalen elkaar niet overlappen. */
.status-timeline__step {
    position: absolute;
    width: 104px;
    transform: translateX(-50%);
    display: flex;
    align-items: center;
    gap: 4px;
    z-index: 2;
    text-align: center;
    padding: 0;
}

.status-timeline__step.is-above {
    bottom: calc(50% + 12px);
    flex-direction: column-reverse; /* circle onderaan (bij de track), label/datum erboven */
}

.status-timeline__step.is-below {
    top: calc(50% + 12px);
    flex-direction: column; /* circle bovenaan (bij de track), label/datum eronder */
}

/* Verticale stem tussen circle en track. Overschrijft de dashed-connector van
   de factuurbalk (.status-step::after). */
.status-timeline__step::after {
    content: "";
    position: absolute;
    left: 50%;
    right: auto;
    width: 2px;
    height: 12px;
    background: #dbe2ee;
    border: none;
    transform: translateX(-50%);
    z-index: 0;
}

.status-timeline__step.is-above::after {
    bottom: -12px;
    top: auto;
}

.status-timeline__step.is-below::after {
    top: -12px;
    bottom: auto;
}

.status-timeline__step.is-realized::after {
    background: #1b5e20;
}

.status-timeline__step.is-handling::after {
    background: #c89c00;
}

/* State 'in behandeling' (oranje) — zelfde kleuren als het poortwachter-grid. */
.status-timeline .status-step.is-handling .status-step__circle {
    background: #fdf1cf;
    color: #7a5d00;
    border-color: #c89c00;
}

.status-timeline .status-step.is-handling .status-step__label {
    color: #7a5d00;
}

.status-timeline .status-step.is-handling .status-step__date {
    color: #7a5d00;
    font-weight: 500;
}

/* State 'nog te doen' (toekomstige mijlpaal): licht navy-getint zodat de
   route die nog komt herkenbaar bij de huisstijl hoort i.p.v. vlak grijs. */
.status-timeline .status-step.is-future .status-step__circle {
    background: #eef2fa;
    color: var(--vt-primary);
    border-color: var(--vt-border);
}

.status-timeline .status-step.is-future .status-step__label {
    color: var(--vt-text-strong);
}

/* State 'niet van toepassing' (neutraal grijs, gestippelde rand). */
.status-timeline__step.is-nvt::after {
    background: #e3e7ed;
}

.status-timeline .status-step.is-nvt .status-step__circle {
    background: #f6f7f9;
    color: #9aa1a9;
    border-style: dashed;
    border-color: #c6ccd4;
}

.status-timeline .status-step.is-nvt .status-step__label {
    color: #9aa1a9;
}

.status-timeline .status-step.is-nvt .status-step__date {
    color: #b0b6bd;
    font-style: italic;
}

/* State 'overgeslagen' (proces afgesloten vóór deze stap): bewust naar de
   achtergrond — kleinere, vervaagde circle en GEEN doorhaling (de factuurbalk
   streept door; hier zegt het datumlabel "Overgeslagen" al genoeg en geeft
   doorgestreepte tekst alleen maar onrust in de balk). */
.status-timeline__step.is-skipped::after {
    background: #e3e7ed;
}

.status-timeline .status-step.is-skipped .status-step__circle,
.status-timeline .status-step.is-nvt .status-step__circle {
    width: 30px;
    height: 30px;
    font-size: 0.72rem;
    box-shadow: none;
}

.status-timeline .status-step.is-skipped .status-step__circle {
    background: #f6f7f9;
    color: #b0b6bd;
    border-color: #e0e4ea;
    opacity: 1;
}

.status-timeline .status-step.is-skipped .status-step__label {
    color: #9aa1a9;
    text-decoration: none;
    font-weight: 500;
}

.status-timeline .status-step.is-skipped .status-step__date {
    color: #b0b6bd;
    font-style: italic;
    font-size: 0.62rem;
}

/* Iets compactere circle dan de factuurbalk. */
.status-timeline .status-step__circle {
    width: 38px;
    height: 38px;
    font-size: 0.9rem;
}

.status-timeline .status-step__label {
    margin: 0;
    font-size: 0.72rem;
    line-height: 1.15;
    max-width: 104px;
}

.status-timeline .status-step__date {
    margin: 0;
    font-size: 0.68rem;
    line-height: 1.1;
}

/* Secundaire regel met de oorspronkelijk geplande datum (bij afgeronde stap die
   op een ander moment is afgehandeld dan gepland). */
.status-timeline .status-step__plan {
    margin: 0;
    font-size: 0.64rem;
    line-height: 1.1;
    color: #adb5bd;
    font-style: italic;
}

/* Bevestigde afspraken: kleine markers op de track. */
.status-timeline__appointment {
    position: absolute;
    top: 50%;
    transform: translate(-50%, -50%);
    width: 20px;
    height: 20px;
    background: var(--vt-tint);
    border: 1px solid var(--vt-primary-dark);
    border-radius: 50%;
    color: var(--vt-primary-dark);
    font-size: 0.6rem;
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 4;
    cursor: default;
}

/* Gecomprimeerde periode: stippellijn-segment over de track met duur-label.
   Duidt een lange periode zonder mijlpalen aan (zo krijgen de drukke periodes
   meer ruimte). */
.status-timeline__gap {
    position: absolute;
    top: 50%;
    height: 0;
    transform: translateY(-50%);
    border-top: 3px dotted #c3cce0;
    z-index: 1;
}

.status-timeline__gap-label {
    position: absolute;
    top: -0.55rem;
    left: 50%;
    transform: translateX(-50%);
    background: #fff;
    padding: 0 4px;
    font-size: 0.62rem;
    color: #a7afbc;
    white-space: nowrap;
}

/* ===========================================================================
   V2 overzicht-grids: vastgepinde kolomkoppen + Ja/Nee-iconen
   =========================================================================== */

/* Kolomkoppen + filterrij blijven vastgepind bovenin tijdens page-scroll.
   Bewust per grid-id opgesomd zodat ingebedde grids in status-/edit-views
   (detailrijen, master-detail) hun koppen NIET vastpinnen. Nieuw overzicht-
   grid? Voeg het #id hier toe. */
#gridFacturen .dx-datagrid-headers,
#gridFactuurregels .dx-datagrid-headers,
#gridDwDossiers .dx-datagrid-headers,
#gridAfspraken .dx-datagrid-headers,
#gridBeschikbaarheid .dx-datagrid-headers,
#gridVerzuimmeldingen .dx-datagrid-headers {
    position: sticky;
    top: 0;
    z-index: 20;
}

/* Ja/Nee-kolommen tonen een icoon i.p.v. tekst. De kleur volgt de betekenis
   van de waarde in déze kolom (positief/aandacht/escalatie/informatief), niet
   simpelweg groen=ja — want bv. 'deurwaarder = ja' is juist ongunstig. */
.janee {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 1.05rem;
    line-height: 1;
}
.janee-good  { color: #198754; } /* positief, bv. betaald / gesloten dossier */
.janee-attn  { color: #c77700; } /* aandacht, bv. openstaand / open dossier */
.janee-bad   { color: #dc3545; } /* escalatie, bv. deurwaarder */
.janee-info  { color: var(--vt-primary-dark); } /* informatief, bv. voorfactuur */
.janee-muted { color: #b0b6bd; } /* neutrale 'nee' / n.v.t. */

/* Badge voor voorfacturatie-klanten in bedrijven-overzicht. Compacte
   variant — bewust klein zodat het naast de bedrijfsnaam in een grid-cel
   past zonder de rij te verbreden. Voor de grotere statuspagina-versie
   zie .vt-status-pill--voorfactuur hieronder. */
.vt-badge-voorfactuur {
    background-color: #dc3545;
    color: #fff;
    font-weight: 500;
    font-size: 0.72em;
    padding: 0.25em 0.55em;
    border-radius: 4px;
    vertical-align: middle;
    letter-spacing: 0.02em;
}

/* ------------------------------------------------------------------
   Status-pills naast de h1-titel op /V2/Bedrijf/Status: ovaal liggend,
   met kleur. Visueel familie van .grid-entity-chip (zie boven) maar
   niet klikbaar — puur informatief. Drie semantische varianten:
     --voorfactuur : zachte rode waarschuwing
     --btw         : neutrale info (vt-tint / blauw)
     --segment     : neutraal grijs voor klantsegment
   ------------------------------------------------------------------ */
.vt-status-pill {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 4px 12px;
    border-radius: 999px;
    font-weight: 500;
    font-size: 0.82rem;
    line-height: 1.4;
    letter-spacing: 0.02em;
    border: 1px solid transparent;
    vertical-align: middle;
}

.vt-status-pill--voorfactuur {
    background: #fde8ec;
    color: #b02a37;
    border-color: #f5c2c7;
}

.vt-status-pill--btw {
    background: var(--vt-tint);
    color: var(--vt-text-strong);
    border-color: var(--vt-border);
}

.vt-status-pill--segment {
    background: #f1f3f7;
    color: #2c3e50;
    border-color: #d8dde6;
}

/* Zachte rode waarschuwing, zelfde palet als --voorfactuur maar semantisch
   generiek (bv. "Niet beschikbaar in AFAS" op de dossier-statuspagina). */
.vt-status-pill--warn {
    background: #fde8ec;
    color: #b02a37;
    border-color: #f5c2c7;
}

/* Amber "pending"-pill voor tussenstatussen die actie vragen
   (bv. factuurregel "Te factureren"). */
.vt-status-pill--pending {
    background: #fdf3e0;
    color: #92600a;
    border-color: #f3ddb0;
}

/* Groene "ok"-pill voor positieve status (bv. account actief / niet
   geblokkeerd). Mag rustig blijven omdat het de default-toestand is. */
.vt-status-pill--ok {
    background: #e3f3ea;
    color: #1b5e20;
    border-color: #c4e3cf;
}

/* Klikbare varianten krijgen een lichte hover-feedback zonder de
   informatieve kleurcodering te verliezen. */
a.vt-status-pill:hover,
a.vt-status-pill:focus-visible {
    filter: brightness(0.96);
    text-decoration: none;
    box-shadow: 0 1px 2px rgba(13, 59, 102, .08);
}

/* Wrapper rond de pills in de Autorisaties-kolom van het medewerkers-grid.
   DevExtreme zet default white-space:nowrap op cellen; dat zou de pills
   afkappen met "…". Hier overrulen we dat zodat alle pills altijd zichtbaar
   zijn — zo nodig groeit de rij verticaal mee. */
.medewerker-autorisaties {
    display: flex;
    flex-wrap: wrap;
    gap: 4px;
    white-space: normal;
}
.dx-datagrid .dx-data-row td:has(> .medewerker-autorisaties) {
    white-space: normal;
}

/* Behouden voor backwards-compat (Klanten/Bedrijven-grid gebruikt nog
   .vt-badge-info nergens, maar mocht dat ooit terugkomen). */
.vt-badge-info {
    background-color: var(--vt-tint);
    color: var(--vt-text-strong);
    border: 1px solid var(--vt-border);
    font-weight: 500;
    font-size: 0.72em;
    padding: 0.25em 0.55em;
    border-radius: 4px;
    vertical-align: middle;
    letter-spacing: 0.02em;
}

/* ------------------------------------------------------------------
   Categorie-badges in de documentenlijst van het verzuimdossier
   (_Documenten.cshtml). Niet-klikbaar, puur informatief — visueel
   familie van .vt-status-pill. Eén basis + kleur per documentcategorie,
   met neutrale fallback (--neutraal) voor onbekende/lege categorieën.
   ------------------------------------------------------------------ */
.vt-doc-badge {
    display: inline-flex;
    align-items: center;
    padding: 3px 10px;
    border-radius: 999px;
    font-weight: 500;
    font-size: 0.8rem;
    line-height: 1.4;
    letter-spacing: 0.02em;
    border: 1px solid transparent;
    white-space: nowrap;
    vertical-align: middle;
}

/* Spreekuurverslagen — teal */
.vt-doc-badge--spreekuur { background: #e1f3ee; color: #0f6e56; border-color: #b8e0d3; }
/* Spoor II-verslagen — paars */
.vt-doc-badge--spoor2    { background: #ece9f7; color: #4b3f9e; border-color: #d6cef0; }
/* Arbeidsdeskundig Onderzoek — blauw (navy-familie) */
.vt-doc-badge--ado       { background: var(--vt-tint); color: var(--vt-text-strong); border-color: var(--vt-border); }
/* Evaluatie werkgever-werknemer — amber */
.vt-doc-badge--evaluatie { background: #fdf0d8; color: #8a5a00; border-color: #f0d59a; }
/* Concept — gedimd grijs (kladversie, rustig houden) */
.vt-doc-badge--concept   { background: #f1f3f7; color: #6c7a8a; border-color: #d8dde6; }
/* Onbekend / overig / leeg — neutraal grijs */
.vt-doc-badge--neutraal  { background: #f1f3f7; color: #2c3e50; border-color: #d8dde6; }

/* Tweeregelige documentcel in de documentenlijst: bestandsnaam als
   hoofdtekst (krijgt volle kolombreedte, kapt af met ellipsis) en de
   categorie-badge eronder als secundaire metadata. Zo blijft de
   bestandsnaam altijd zichtbaar, ook in het smalle Documenten-paneel. */
.vt-doc-cel {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 5px;
    padding: 4px 0;
    max-width: 100%;
}
.vt-doc-cel__naam {
    font-weight: 500;
    font-size: 0.8rem;
    color: var(--vt-text-strong);
    line-height: 1.3;
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
/* Gedempte subregel (bv. de Code bij beveiligde documenten) onder de naam. */
.vt-doc-cel__meta {
    font-size: 0.72rem;
    color: #6c7a8a;
    line-height: 1.3;
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Icon-only actieknoppen in de documentenlijst: compacter dan de tekst-pills
   (.vt-grid-btn), zodat de bestandsnaam-kolom meer breedte krijgt. Download
   in navy, verwijderen in rood. */
.vt-grid-ico.dx-link {
    font-size: 17px;
    margin: 0 5px;
    opacity: 1;
}
.vt-grid-ico--download.dx-link { color: var(--vt-primary); }
.vt-grid-ico--download.dx-link:hover { color: var(--vt-primary-dark); }
.vt-grid-ico--verwijder.dx-link { color: #b02a37; }
.vt-grid-ico--verwijder.dx-link:hover { color: #8f1f2a; }

/* Generiek label/waarde-paar voor read-only detailblokken (bv. Overige
   gegevens op /V2/Bedrijf/Status en /V2/Verzuimmeldingen/Status). Twee
   varianten:
     .gegeven-rij  → label links, waarde rechts (vetgedrukt). Voor korte labels.
     .gegeven-blok → label boven waarde. Voor lange labels of meertekstige waardes.
   Bewust globaal i.p.v. per-pagina inline <style>; zie memory
   "feedback_v2_styling_centraal". */
.gegeven-rij {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: 1rem;
    padding: 6px 0;
    border-bottom: 1px solid #eef0f3;
}

    .gegeven-rij label {
        margin: 0;
    }

    .gegeven-rij span {
        /* 0 1 auto + min-width:0 zodat een lange waarde (bv. SBI-code met
           activiteitomschrijving) netjes binnen het blok afbreekt i.p.v.
           eroverheen te lopen. */
        flex: 0 1 auto;
        min-width: 0;
        text-align: right;
        font-weight: 600;
        overflow-wrap: anywhere;
    }

    /* Geen scheidingslijn onder de laatste rij: die zou dubbelen met de
       rand van de omliggende card/accordion. */
    .gegeven-rij:last-child {
        border-bottom: 0;
    }

/* Sectiekop binnen een .gegeven-rij-blok (bv. Bezoekadres/Factuuradres onder
   Adresgegevens). Navy en vet, met wat lucht erboven zodat de secties zich
   visueel scheiden. */
.gegeven-subkop {
    font-weight: 600;
    font-size: 1.05rem;
    color: var(--vt-text-strong);
    margin-top: 10px;
    margin-bottom: 2px;
}

    .gegeven-subkop:first-child {
        margin-top: 0;
    }

/* Kop van het Persoon & contactgegevens-blok op de dossier-statuspagina:
   naam prominent in navy, werkgever/afdeling eronder gedempt. */
.persoon-kop {
    padding-bottom: 10px;
    border-bottom: 1px solid #eef0f3;
    margin-bottom: 4px;
}

    .persoon-kop .persoon-naam {
        font-size: 1.05rem;
        font-weight: 600;
        color: var(--vt-text-strong);
    }

    .persoon-kop .persoon-sub {
        color: #6b7a90;
        font-size: .875rem;
    }

.gegeven-blok {
    padding: 8px 0 2px 0;
}

    .gegeven-blok label {
        display: block;
        margin: 0 0 2px 0;
        font-weight: 600;
    }

/* Variant met scheidingslijn eronder — zelfde lijn als .gegeven-rij, voor
   opeenvolgende gegeven-blokken (bv. Contact boven Adres in het persoonsblok). */
.gegeven-blok--lijn {
    border-bottom: 1px solid #eef0f3;
    padding-bottom: 8px;
}

/* Grid-rij zonder datum (bv. dossieraantekening zonder DateAdded): vet zodat
   hij als "altijd actueel" opvalt; sorteert via CalculateSortValue bovenaan. */
.vt-rij-zonderdatum td {
    font-weight: 600;
}

/* Offerte-hoofdregel (punt 61+66): vaste kolombreedtes voor de chips en de
   herinnering-info zodat de knoppen over alle groepen heen uitgelijnd staan —
   bij korte/lange namen versprongen de open-/herinneringknoppen voorheen. */
.offerte-group-header {
    display: inline-flex;
    align-items: center;
    gap: 4px;
}

    .offerte-group-header > .grid-entity-chip,
    .offerte-group-header > .grid-entity-plain {
        width: 220px;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }

.og-herinnering-info {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    width: 170px;
    margin-left: .5rem;
    font-size: 0.82rem;
    color: var(--vt-text-strong);
    white-space: nowrap;
}

.og-herinnering-info--leeg {
    color: #98a2b0;
}

/* Categorie-cel in het samengevoegde opties-grid (punt 86): pastel in de
   verzuimteam-kleuren — blauw voor normale opties, roze voor medische. */
.vt-optie-cat--normaal {
    background-color: #e3edf7 !important;
    color: #1d4e79;
}

.vt-optie-cat--medisch {
    background-color: #fbe4ec !important;
    color: #9c2b55;
}

/* ===========================================================================
   Off-canvas zijmenu (mobiel / < 992px)
   Op smalle schermen schuift het zijmenu als overlay over de content i.p.v.
   inline ruimte in te nemen. Geopend met de hamburger in de topbar
   (#topbar-menu-btn) die body.sidebar-enable toggelt; de backdrop sluit het.
   Overschrijft het display:none/block-gedrag uit app.css (stylev2 laadt later).
   =========================================================================== */
@media (max-width: 991.98px) {
    .vertical-menu {
        display: block;
        position: fixed;
        top: 0;
        left: 0;
        bottom: 0;
        width: 250px;
        z-index: 1050;
        transform: translateX(-100%);
        transition: transform 0.25s ease;
        overflow-y: auto;
        box-shadow: 0 0 25px rgba(0, 0, 0, 0.2);
    }

    body.sidebar-enable .vertical-menu {
        transform: translateX(0);
    }

    /* De inklap-pijl is op mobiel overbodig: hamburger + backdrop regelen open/dicht. */
    #vertical-menu-btn {
        display: none;
    }

    .app-backdrop {
        display: none;
        position: fixed;
        inset: 0;
        background: rgba(0, 0, 0, 0.4);
        z-index: 1040;
    }

    body.sidebar-enable .app-backdrop {
        display: block;
    }

    /* Header zelf mag niet horizontaal overlopen op smalle schermen. */
    header {
        margin-left: 0;
        margin-right: 0;
    }

    header .user,
    header .company {
        display: block;
        max-width: 38vw;
        overflow: hidden;
        text-overflow: ellipsis;
    }
}

/* Desktop (>= 992px): zijmenu staat inline naast de content. Overschrijft de
   display:none die app.css op de 992px-grens nog toepast, en verbergt de
   mobiele hamburger als fallback naast de Bootstrap d-lg-none-class. */
@media (min-width: 992px) {
    .vertical-menu {
        display: block;
    }

    #topbar-menu-btn {
        display: none;
    }
}

/* Topbar-hamburger (mobiel). */
#topbar-menu-btn {
    border: none;
    background: transparent;
    color: var(--blue-color);
    padding: 0.25rem 0.5rem;
}

/* --- V2 Beheer-overzicht (tegel/navigatie) -------------------------------
   De beheerpagina is een launchpad naar zes modules. Tegels zijn daarom
   ontworpen als grote ankers met duidelijke hover-affordance (lift, accent-
   strip, slidende chevron) en gegroepeerd in twee secties zodat de wand niet
   als één lange rij leest. */
.beheer-subtitle {
    color: var(--vt-text-strong);
    opacity: .65;
    font-size: 1rem;
}

.beheer-section + .beheer-section {
    margin-top: 2rem;
}

.beheer-section-title {
    margin: 0 .5rem .75rem;
    font-family: "Raleway", sans-serif;
    font-size: .75rem;
    font-weight: 700;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: var(--vt-primary-dark);
    opacity: .65;
}

.beheer-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
    gap: 1rem;
}

.beheer-tile {
    position: relative;
    display: flex;
    align-items: center;
    gap: 1rem;
    padding: 1.25rem;
    background: #fff;
    border: 1px solid var(--vt-border);
    border-radius: 1rem;
    box-shadow: 0 1px 2px rgba(0, 49, 95, .04);
    text-decoration: none;
    color: inherit;
    overflow: hidden;
    transition: transform .15s ease, box-shadow .2s ease, border-color .15s ease;
}

    /* Accentstreep bovenaan die op hover verschijnt — verwijst naar de
       huisstijl (navy → magenta) zonder de rustige basisstaat te verstoren. */
    .beheer-tile::before {
        content: "";
        position: absolute;
        inset: 0 0 auto 0;
        height: 3px;
        background: linear-gradient(90deg, var(--vt-primary), var(--vt-cta));
        opacity: 0;
        transition: opacity .15s ease;
    }

    .beheer-tile:hover,
    .beheer-tile:focus-visible {
        transform: translateY(-2px);
        box-shadow: 0 12px 24px -12px rgba(0, 49, 95, .22);
        border-color: var(--vt-border-hover);
        color: inherit;
    }

        .beheer-tile:hover::before,
        .beheer-tile:focus-visible::before {
            opacity: 1;
        }

    .beheer-tile:focus-visible {
        outline: 2px solid var(--vt-primary);
        outline-offset: 2px;
    }

.beheer-tile-icon {
    flex: 0 0 auto;
    width: 56px;
    height: 56px;
    border-radius: 14px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: var(--vt-tint);
    color: var(--vt-primary);
    font-size: 1.5rem;
    transition: background .15s ease, color .15s ease, transform .15s ease;
}

.beheer-tile:hover .beheer-tile-icon,
.beheer-tile:focus-visible .beheer-tile-icon {
    background: var(--vt-primary);
    color: #fff;
    transform: scale(1.05);
}

.beheer-tile-body {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: .15rem;
}

.beheer-tile-title {
    font-family: "Raleway", sans-serif;
    font-size: 1.15rem;
    font-weight: 600;
    color: var(--vt-text-strong);
    line-height: 1.2;
}

.beheer-tile-desc {
    font-size: .875rem;
    line-height: 1.35;
    color: #5a6677;
}

.beheer-tile-arrow {
    flex: 0 0 auto;
    color: var(--vt-primary);
    opacity: 0;
    transform: translateX(-6px);
    transition: opacity .15s ease, transform .2s ease;
}

.beheer-tile:hover .beheer-tile-arrow,
.beheer-tile:focus-visible .beheer-tile-arrow {
    opacity: 1;
    transform: translateX(0);
}

/* ---------- File-input (input[type=file]) ----------
   De native "Bestand kiezen"-knop is per browser een grijs OS-knopje dat uit
   de huisstijl valt. Werking blijft 100% native: alleen het uiterlijk wordt
   overschreven via ::file-selector-button (de knop binnen <input type=file>).
   Scope: V2-klassen .type-file en .form-control op file-inputs — andere
   verborgen file-inputs (bv. in DevExtreme widgets) blijven ongemoeid. */
input[type="file"].type-file,
input[type="file"].form-control {
    display: block;
    width: 100%;
    padding: .375rem .75rem;
    font-size: .9rem;
    color: var(--vt-text-strong);
    background-color: #fff;
    border: 1px solid var(--vt-border);
    border-radius: .5rem;
    transition: border-color .15s ease, box-shadow .15s ease;
    cursor: pointer;
}

input[type="file"].type-file:hover,
input[type="file"].form-control:hover {
    border-color: var(--vt-border-hover);
}

input[type="file"].type-file:focus,
input[type="file"].form-control:focus {
    border-color: var(--vt-primary);
    box-shadow: 0 0 0 .2rem rgba(0, 66, 137, .15);
    outline: 0;
}

input[type="file"].type-file::file-selector-button,
input[type="file"].form-control::file-selector-button {
    margin: -.375rem .9rem -.375rem -.75rem;
    padding: .375rem .9rem;
    font-family: inherit;
    font-size: .875rem;
    font-weight: 500;
    color: #fff;
    background-color: var(--vt-primary);
    border: 0;
    border-radius: .5rem 0 0 .5rem;
    cursor: pointer;
    transition: background-color .15s ease;
}

input[type="file"].type-file:hover::file-selector-button,
input[type="file"].form-control:hover::file-selector-button {
    background-color: var(--vt-primary-dark);
}

/* WebKit-fallback voor oudere Safari (<14.1) — zelfde regels via het
   prefixed pseudo-element. */
input[type="file"].type-file::-webkit-file-upload-button,
input[type="file"].form-control::-webkit-file-upload-button {
    margin: -.375rem .9rem -.375rem -.75rem;
    padding: .375rem .9rem;
    font-family: inherit;
    font-size: .875rem;
    font-weight: 500;
    color: #fff;
    background-color: var(--vt-primary);
    border: 0;
    border-radius: .5rem 0 0 .5rem;
    cursor: pointer;
    transition: background-color .15s ease;
}

/* form-control-sm variant (Afspraken-bestanden) — kleinere padding/radius
   zodat de knop in compacte panelen niet uit verhouding loopt. */
input[type="file"].form-control.form-control-sm {
    padding: .25rem .6rem;
    font-size: .8125rem;
    border-radius: .4rem;
}

input[type="file"].form-control.form-control-sm::file-selector-button,
input[type="file"].form-control.form-control-sm::-webkit-file-upload-button {
    margin: -.25rem .75rem -.25rem -.6rem;
    padding: .25rem .75rem;
    font-size: .8125rem;
    border-radius: .4rem 0 0 .4rem;
}

/* ------------------------------------------------------------------
   Home-dashboard: telkaarten + actielijst (taken) en tijdlijn (komende
   afspraken). Vervangt de DevExtreme-grids op Home; /V2/Taken behoudt
   zijn functionele grid. Kleurfamilies per taaktype, aansluitend op de
   bestaande semantiek (.vt-status-pill--*, .janee-*):
     --document : navy/tint   (ongelezen document)
     --offerte  : groen       (openstaande offerte)
     --vraag    : amber       (onderzoeksvraag ontbreekt)
     --factuur  : zacht rood  (factuur openstaand)
   ------------------------------------------------------------------ */
.vt-taak-stats {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 12px;
    margin-bottom: 14px;
}

/* Smal (mobiel/smalle kolom): 2x2 zodat de labels leesbaar blijven. */
@media (max-width: 575.98px) {
    .vt-taak-stats {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

.vt-taak-stat {
    border-radius: 12px;
    padding: 10px 14px;
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: 2px;
    min-width: 0;
    /* Telkaarten zijn klikbaar: ze filteren de actielijst op hun categorie. */
    cursor: pointer;
    transition: box-shadow .12s ease, transform .12s ease;
}

    .vt-taak-stat:hover {
        transform: translateY(-1px);
    }

    /* Actief filter: rand in de eigen categoriekleur (color staat op de kaart-root). */
    .vt-taak-stat--actief {
        box-shadow: inset 0 0 0 2px currentColor;
    }

    .vt-taak-stat:focus-visible {
        outline: 2px solid var(--vt-primary);
        outline-offset: 2px;
    }

/* Icoon en aantal naast elkaar op één regel, met het label eronder. */
.vt-taak-stat-kop {
    display: flex;
    align-items: center;
    gap: 8px;
}

.vt-taak-stat-icoon {
    font-size: 1rem;
    opacity: .85;
}

.vt-taak-stat-aantal {
    font-size: 1.4rem;
    font-weight: 600;
    line-height: 1.2;
    font-variant-numeric: lining-nums tabular-nums;
}

.vt-taak-stat-label {
    font-size: .78rem;
    line-height: 1.25;
}

.vt-taak-stat--document,
.vt-actie-icoon--document {
    background: var(--vt-tint);
    color: var(--vt-text-strong);
}

.vt-taak-stat--offerte,
.vt-actie-icoon--offerte {
    background: #e3f3ea;
    color: #1b5e20;
}

.vt-taak-stat--vraag,
.vt-actie-icoon--vraag {
    background: #fdf3e3;
    color: #c77700;
}

.vt-taak-stat--factuur,
.vt-actie-icoon--factuur {
    background: #fde8ec;
    color: #b02a37;
}

/* Neutraal grijs voor administratieve taken (basiscontract e.d.). */
.vt-taak-stat--admin,
.vt-actie-icoon--admin {
    background: #f1f3f7;
    color: #2c3e50;
}

/* ---------- Periodefilter: klikbare blokken (enkelvoudige keuze) ----------
   Segmented control op de home-cockpit; identiek in het signaleringen- en
   optiesblok zodat de filterhoogte in beide kaarten gelijk loopt. */
.vt-periode-filter {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin-bottom: 14px;
}

.vt-periode-optie {
    flex: 1 1 0;
    min-width: 60px;
    border: 1px solid var(--vt-border);
    background: #fff;
    color: var(--vt-text-strong);
    border-radius: 10px;
    padding: 8px 6px;
    font-size: .8rem;
    line-height: 1.2;
    white-space: nowrap;
    text-align: center;
    cursor: pointer;
    transition: box-shadow .12s ease, transform .12s ease, background-color .12s ease, border-color .12s ease;
}

    .vt-periode-optie:hover {
        transform: translateY(-1px);
        border-color: var(--vt-border-hover);
        background: var(--vt-tint);
    }

    /* Actieve periode: rand + lichte vulling in de primaire kleur. */
    .vt-periode-optie--actief,
    .vt-periode-optie--actief:hover {
        background: var(--vt-tint);
        border-color: var(--vt-primary);
        box-shadow: inset 0 0 0 1px var(--vt-primary);
        color: var(--vt-primary);
        font-weight: 600;
    }

    .vt-periode-optie:focus-visible {
        outline: 2px solid var(--vt-primary);
        outline-offset: 2px;
    }

/* ---------- Actielijst: één rij per taak ---------- */
.vt-actie-rij {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 10px 6px;
    border-top: 1px solid #eef0f4;
}

    .vt-actie-rij:first-child {
        border-top: 0;
    }

    .vt-actie-rij:hover {
        background: #f7f9fd;
    }

.vt-actie-icoon {
    width: 36px;
    height: 36px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    font-size: .95rem;
}

    /* Kleinere variant voor gebruik in grid-cellen (o.a. de Type-kolom op Taken). */
    .vt-actie-icoon--sm {
        width: 28px;
        height: 28px;
        font-size: .8rem;
        display: inline-flex;
    }

/* Type-cel in grids: icoon en label naast elkaar, verticaal gecentreerd. */
.vt-grid-type {
    display: inline-flex;
    align-items: center;
    gap: 8px;
}

.vt-actie-tekst {
    flex: 1 1 auto;
    min-width: 0;
}

.vt-actie-titel {
    font-weight: 500;
    font-size: .9rem;
    line-height: 1.3;
}

.vt-actie-sub {
    font-size: .8rem;
    color: #6c757d;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.vt-actie-datum {
    font-size: .75rem;
    color: #98a1ab;
    white-space: nowrap;
    font-variant-numeric: lining-nums tabular-nums;
}

.vt-actielijst-meer {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin-top: 10px;
    font-size: .85rem;
    font-weight: 500;
    color: var(--vt-primary);
    text-decoration: none;
}

    .vt-actielijst-meer:hover,
    .vt-actielijst-meer:focus-visible {
        color: var(--vt-primary-dark);
        text-decoration: underline;
    }

/* ---------- Tijdlijn: komende afspraken ---------- */
.vt-tijdlijn-rij {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 9px 6px;
    border-top: 1px solid #eef0f4;
    color: inherit;
    text-decoration: none;
}

    .vt-tijdlijn-rij:first-child {
        border-top: 0;
    }

    .vt-tijdlijn-rij:hover,
    .vt-tijdlijn-rij:focus-visible {
        background: #f7f9fd;
        color: inherit;
    }

.vt-datum-pill {
    background: var(--vt-tint);
    color: var(--vt-text-strong);
    font-size: .78rem;
    font-weight: 500;
    border-radius: 8px;
    padding: 4px 10px;
    white-space: nowrap;
    min-width: 138px;
    text-align: center;
    flex-shrink: 0;
    font-variant-numeric: lining-nums tabular-nums;
}

.vt-tijdlijn-tekst {
    flex: 1 1 auto;
    min-width: 0;
    font-size: .9rem;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.vt-vraag-indicator {
    flex-shrink: 0;
}

/* Nieuw-document-banner op de dossier-statuspagina: attentiekaart voor
   bedrijfsgebruikers wanneer er een ongelezen document klaarstaat. Zachte
   CTA-tint met accentrand links, zodat hij opvalt zonder te schreeuwen.
   De __regel-variant wordt ook in de nieuw-document-popup hergebruikt. */
.vt-nieuw-document-banner {
    background: var(--vt-cta-soft-bg);
    border: 1px solid var(--vt-cta-soft-border);
    border-left: 4px solid var(--vt-cta);
    border-radius: 8px;
    padding: 12px 16px;
    margin: 8px 0 4px;
}

.vt-nieuw-document-banner__kop {
    display: flex;
    align-items: center;
    gap: 8px;
    font-weight: 600;
    color: var(--vt-cta);
}

.vt-nieuw-document-banner__regel {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    flex-wrap: wrap;
    padding-top: 8px;
}

/* ---------- Infoblok in de taak-popup (_TaakPopup.cshtml) ---------- */
.vt-popup-info {
    background: #f6f8fb;
    border-radius: 10px;
    padding: 10px 14px;
    font-size: .88rem;
}

.vt-popup-info-rij {
    display: flex;
    justify-content: space-between;
    gap: 16px;
    padding: 2px 0;
}

.vt-popup-info-label {
    color: #6c757d;
    flex-shrink: 0;
}

.vt-popup-info-waarde {
    text-align: right;
    overflow-wrap: anywhere;
}

/* ------------------------------------------------------------------
   Verzuimcijfers-dashboard (/V2/Bedrijf/Verzuimcijfers): KPI-kaarten,
   maandgrafiek en kwartaalinvoer. Moderne webversie van het Power BI-
   verzuimrapport, in de huisstijl (navy titels, magenta waarden).
   ------------------------------------------------------------------ */
/* Info-notitie boven het dashboard in de huisstijl. Het standaard Bootstrap
   .alert-info is turquoise en valt buiten het palet; deze variant maakt er een
   zacht roze vlak van (soft-CTA-tint) met navy tekst en een CTA-gekleurd icoon.
   Bewust een aparte klasse i.p.v. .alert-info zelf overschrijven, zodat de
   info-meldingen op andere V2-pagina's ongemoeid blijven. */
.alert.alert-vt-info {
    background-color: var(--vt-cta-soft-bg);
    border-color: var(--vt-cta-soft-border);
    color: var(--vt-text-strong);
}

    .alert.alert-vt-info .fa-circle-info {
        color: var(--vt-cta);
    }

/* "Aangepast"-knop (eigen periode): de standaard .btn-outline-primary pakt het
   felle Bootstrap-blauw. Hier alleen déze knop naar de huisstijl-navy trekken
   (tekst + filter-icoon), met een nette navy hover. Bewust op id i.p.v. de
   globale .btn-outline-primary, zodat outline-knoppen elders ongemoeid blijven. */
#btn-aangepast {
    --bs-btn-color: var(--vt-primary);
    --bs-btn-border-color: var(--vt-border);
    --bs-btn-hover-color: #fff;
    --bs-btn-hover-bg: var(--vt-primary);
    --bs-btn-hover-border-color: var(--vt-primary);
    --bs-btn-active-color: #fff;
    --bs-btn-active-bg: var(--vt-primary-dark);
    --bs-btn-active-border-color: var(--vt-primary-dark);
}

/* Cijferlabels op de maandgrafiek als ronde badges. DevExtreme negeert
   border.cornerRadius op serielabels, dus ronden we de achtergrond-rect hier af:
   het vlak is al nagenoeg vierkant (±23×24px), dus rx/ry 50% maakt er een net
   cirkeltje van. Alleen deze grafiek (#chart-meldingen) — puur presentatie. */
#chart-meldingen .dxc-labels rect {
    rx: 50%;
    ry: 50%;
}

/* auto-fit i.p.v. auto-fill: lege kolommen klappen in zodat alle 6 tegels op
   één rij passen op brede schermen en netjes 3+3 of 2x3 wrappen op smallere. */
.kpi-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 1rem;
}

.kpi-card {
    background: #fff;
    border: 1px solid var(--vt-border);
    border-radius: 1rem;
    box-shadow: 0 1px 2px rgba(0, 49, 95, .04);
    padding: 1.1rem 1.25rem;
    display: flex;
    flex-direction: column;
    gap: .35rem;
    min-width: 0;
}

.kpi-card-title {
    font-family: "Raleway", sans-serif;
    font-size: .8rem;
    font-weight: 700;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: var(--vt-primary);
    line-height: 1.25;
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: .4rem;
}

/* Info-icoon met uitleg-tooltip op elke KPI-tegel. */
.kpi-info {
    flex: 0 0 auto;
    font-size: .85rem;
    color: var(--vt-primary);
    opacity: .45;
    cursor: help;
    transition: opacity .15s ease;
}

    .kpi-info:hover {
        opacity: 1;
    }

.kpi-card-value {
    font-size: 2rem;
    font-weight: 600;
    line-height: 1.1;
    color: var(--vt-cta);
    font-variant-numeric: lining-nums tabular-nums;
}

.kpi-card-sub {
    font-size: .78rem;
    color: #6c757d;
}

/* Jaar-op-jaar trend onder de KPI-waarde: groen = verbetering, rood =
   verslechtering (richting hangt af van de KPI: minder verzuim is goed,
   meer nulverzuim is goed). */
.kpi-card-delta {
    display: inline-flex;
    align-items: center;
    gap: .3rem;
    font-size: .75rem;
    font-weight: 500;
    font-variant-numeric: lining-nums tabular-nums;
}

.kpi-card-delta--goed {
    color: #1b5e20;
}

.kpi-card-delta--slecht {
    color: #b02a37;
}

.kpi-card-delta--neutraal {
    color: #6c757d;
}

/* ------------------------------------------------------------------
   Home-dashboard: de vier kaarten in een 2x2-grid. Kaarten in dezelfde
   rij worden door het grid even hoog gerekt, zodat 'Komende afspraken'
   en 'Verzuimcijfers' op één lijn beginnen. Op smalle schermen stapelen
   de kaarten in DOM-volgorde onder elkaar.
   ------------------------------------------------------------------ */
.home-grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: 1.5rem;
}

@media (min-width: 992px) {
    .home-grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .home-kaart-taken {
        grid-area: 1 / 1;
    }

    .home-kaart-actueel {
        grid-area: 1 / 2;
    }

    .home-kaart-afspraken {
        grid-area: 2 / 1;
    }

    .home-kaart-verzuim {
        grid-area: 2 / 2;
    }

    /* Home zonder taken-kaart (artsen/behandelaren): afspraken vult de vrijgekomen cel. */
    .home-grid--zonder-taken .home-kaart-afspraken {
        grid-area: 1 / 1;
    }
}

/* Verzuimcijfers-preview op Home: drie kerncijfers boven de mini-grafiek. */
.home-verzuim-stats {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 12px;
    margin-bottom: .75rem;
}

.home-verzuim-stat {
    background: var(--vt-tint);
    border-radius: 12px;
    padding: 10px 14px;
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: 2px;
    min-width: 0;
}

.home-verzuim-label {
    font-size: .78rem;
    color: var(--vt-text-strong);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.home-verzuim-waarde {
    font-size: 1.4rem;
    font-weight: 600;
    line-height: 1.2;
    color: var(--vt-text-strong);
    font-variant-numeric: lining-nums tabular-nums;
}

/* Voetregel onder de duurverdeling-donut: aantal nog lopende meldingen. */
.duur-lopend {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: .5rem;
    margin-top: .75rem;
    padding-top: .75rem;
    border-top: 1px solid #eef0f4;
    font-size: .9rem;
    color: #5a6677;
}

    .duur-lopend i {
        color: var(--vt-cta);
    }

    .duur-lopend strong {
        color: var(--vt-cta);
        font-size: 1.15rem;
        font-variant-numeric: lining-nums tabular-nums;
    }

/* Kwartaalinvoer-tabel: compacte inputs, herkomst-pill per rij. */
.kwartaal-tabel th {
    font-family: "Raleway", sans-serif;
    font-size: .78rem;
    font-weight: 700;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: var(--vt-primary);
}

.kwartaal-tabel td {
    vertical-align: middle;
}

.kwartaal-tabel input.form-control {
    max-width: 140px;
    font-variant-numeric: lining-nums tabular-nums;
}

.kwartaal-herkomst {
    display: inline-flex;
    align-items: center;
    gap: .35rem;
    border-radius: 999px;
    padding: .15rem .65rem;
    font-size: .75rem;
    font-weight: 500;
    white-space: nowrap;
}

.kwartaal-herkomst--ingevuld {
    background: #e3f3ea;
    color: #1b5e20;
}

.kwartaal-herkomst--overgenomen {
    background: var(--vt-tint);
    color: var(--vt-text-strong);
}

.kwartaal-herkomst--standaard {
    background: #f1f3f7;
    color: #5a6677;
}

.kwartaal-herkomst--afas {
    background: var(--vt-tint);
    color: var(--vt-primary);
}

/* Verzuimpercentage-balk: horizontale pill met vulling naar rato,
   gebruikt in de Verzuimverloop-grid op de Status-pagina.
   --edit is de interactieve variant in de toevoeg-rij (hover/klik
   plus typbaar getalveld). */
.vt-pct-bar {
    display: flex;
    align-items: center;
    gap: .5rem;
    min-width: 0;
}

.vt-pct-bar__track {
    flex: 1;
    height: 12px;
    border-radius: 999px;
    background: var(--vt-cta-soft-bg);
    overflow: hidden;
    min-width: 60px;
}

.vt-pct-bar__fill {
    height: 100%;
    background: var(--vt-cta);
    border-radius: 999px;
}

.vt-pct-bar__value {
    flex: 0 0 auto;
    width: 2.6rem;
    text-align: right;
    font-weight: 600;
    color: var(--vt-cta);
    font-variant-numeric: lining-nums tabular-nums;
}

.vt-pct-bar--edit .vt-pct-bar__track {
    height: 16px;
    border: 1px solid var(--vt-cta-soft-border);
    cursor: pointer;
}

.vt-pct-bar__input {
    flex: 0 0 auto;
    width: 4.2rem;
    border: 1px solid var(--vt-cta-soft-border);
    border-radius: 999px;
    padding: .15rem .5rem;
    font-weight: 600;
    color: var(--vt-cta);
    text-align: center;
    font-variant-numeric: lining-nums tabular-nums;
}

    .vt-pct-bar__input:focus {
        outline: none;
        border-color: var(--vt-cta);
    }

/* ------------------------------------------------------------------
   Home-cockpit (admin/superadmin): volle-breedte afsprakenstrook per
   locatie, daaronder twee kolommen (signaleringen | opties) en een
   compacte Actueel-kaart. Hergebruikt de telkaart- en actielijst-
   patronen van het taken-blok.
   ------------------------------------------------------------------ */
.home-cockpit-grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: 1.5rem;
    margin-bottom: 1.5rem;
}

@media (min-width: 992px) {
    .home-cockpit-grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        align-items: start;
    }
}

/* Afsprakenstrook: één kolom per locatie, horizontaal scrollbaar bij veel
   locaties zodat de kaart niet de hele pagina opeist. */
.vt-locatie-strook {
    display: flex;
    gap: 1.25rem;
    overflow-x: auto;
    padding-bottom: 4px;
}

.vt-locatie-kolom {
    flex: 1 0 260px;
    min-width: 260px;
    max-width: 380px;
}

.vt-locatie-kop {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    padding-bottom: 6px;
    margin-bottom: 2px;
    border-bottom: 2px solid var(--vt-tint);
}

.vt-locatie-naam {
    font-weight: 600;
    font-size: .9rem;
    color: var(--vt-primary-dark);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.vt-locatie-aantal {
    background: var(--vt-tint);
    color: var(--vt-text-strong);
    border-radius: 999px;
    padding: 1px 9px;
    font-size: .78rem;
    font-weight: 600;
    flex-shrink: 0;
    font-variant-numeric: lining-nums tabular-nums;
}

/* Smallere tijd-pill dan de standaard datum-pill (alleen tijden). */
.vt-locatie-strook .vt-datum-pill {
    min-width: 100px;
}

/* Behandelaar-subregel en verslag-chips in de admin-strook inspringen tot na de
   tijd-pill (pill 100px + kop-gap 12px); buiten .vt-dagbord geldt de inspringing
   uit het dagbord namelijk niet. */
.vt-locatie-strook .vt-actie-sub,
.vt-locatie-strook .vt-dagbord-chips {
    margin-left: 112px;
}

/* Afgelopen afspraken van vandaag subtiel dimmen, zodat de lopende (highlight)
   en nog komende afspraken eruit springen. */
.vt-afspraak-voorbij {
    opacity: .55;
}

/* Lopende afspraak: zachte CTA-tint met accentrand, plus 'nu'-badge. */
.vt-afspraak-nu {
    background: var(--vt-cta-soft-bg);
    border-radius: 8px;
}

    .vt-afspraak-nu:hover,
    .vt-afspraak-nu:focus-visible {
        background: var(--vt-cta-soft-bg);
    }

    .vt-afspraak-nu .vt-datum-pill {
        background: var(--vt-cta);
        color: #fff;
    }

.vt-nu-badge {
    background: var(--vt-cta);
    color: #fff;
    border-radius: 999px;
    padding: 1px 8px;
    font-size: .7rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: .04em;
    flex-shrink: 0;
}

/* Actielijst-rijen die in hun geheel een link zijn (signaleringen/opties). */
.vt-actie-rij--link {
    color: inherit;
    text-decoration: none;
}

    .vt-actie-rij--link:hover,
    .vt-actie-rij--link:focus-visible {
        color: inherit;
    }

/* Telkaart-kleurfamilies voor de cockpit: signaleringen (kort = urgent,
   lang = rustig) en opties (normaal/medisch/bedrijf). */
.vt-taak-stat--signaal-kort,
.vt-actie-icoon--signaal-kort {
    background: #fde8ec;
    color: #b02a37;
}

.vt-taak-stat--signaal-lang,
.vt-actie-icoon--signaal-lang {
    background: var(--vt-tint);
    color: var(--vt-text-strong);
}

.vt-taak-stat--optie-normaal,
.vt-actie-icoon--optie-normaal {
    background: var(--vt-tint);
    color: var(--vt-text-strong);
}

.vt-taak-stat--optie-medisch,
.vt-actie-icoon--optie-medisch {
    background: #fdf3e3;
    color: #c77700;
}

.vt-taak-stat--optie-bedrijf,
.vt-actie-icoon--optie-bedrijf {
    background: #f1f3f7;
    color: #2c3e50;
}

/* Cockpit-telkaarten: twee (signaleringen) of drie (opties) op één rij,
   in plaats van het 4-koloms grid van het taken-blok. */
.vt-taak-stats--twee {
    grid-template-columns: repeat(2, minmax(0, 1fr));
}

.vt-taak-stats--drie {
    grid-template-columns: repeat(3, minmax(0, 1fr));
}

/* Statuschips: compacte pills voor signaalstatus en dagbord-acties. */
.vt-chip {
    display: inline-flex;
    align-items: center;
    border-radius: 999px;
    padding: 2px 10px;
    font-size: .75rem;
    font-weight: 500;
    white-space: nowrap;
    flex-shrink: 0;
    text-decoration: none;
}

.vt-chip--groen {
    background: #e3f3ea;
    color: #1b5e20;
}

.vt-chip--amber {
    background: #fdf3e3;
    color: #c77700;
}

.vt-chip--rood {
    background: #fde8ec;
    color: #b02a37;
}

.vt-chip--grijs {
    background: #f1f3f7;
    color: #2c3e50;
}

/* Verbetervoorstellen: Gepland (navy-tint) en Afgerond op test (licht groen,
   bewust valer dan --groen: opgelost maar nog niet live). */
.vt-chip--navy {
    background: var(--vt-tint);
    color: var(--vt-primary-dark);
}

.vt-chip--lichtgroen {
    background: #eef7e6;
    color: #4a7c1f;
}

/* Klikbare chips (dagbord): subtiele rand + hover in de eigen kleur. */
.vt-chip--actie {
    box-shadow: inset 0 0 0 1px currentColor;
    opacity: .92;
}

    .vt-chip--actie:hover,
    .vt-chip--actie:focus-visible {
        opacity: 1;
        text-decoration: none;
        color: inherit;
        transform: translateY(-1px);
    }

.vt-chip--groen.vt-chip--actie:hover {
    color: #1b5e20;
}

.vt-chip--amber.vt-chip--actie:hover {
    color: #c77700;
}

.vt-chip--rood.vt-chip--actie:hover {
    color: #b02a37;
}

/* ------------------------------------------------------------------
   Behandelaar-dagbord: drie kolommen (af te ronden | vandaag | volgende
   dag); op smalle schermen stapelen de kaarten onder elkaar.
   ------------------------------------------------------------------ */
.vt-dagbord {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: 1.5rem;
    margin-bottom: 1.5rem;
}

@media (min-width: 992px) {
    .vt-dagbord {
        grid-template-columns: repeat(3, minmax(0, 1fr));
        align-items: start;
    }
}

.vt-dagbord-rij {
    padding: 10px 6px;
    border-top: 1px solid #eef0f4;
}

    .vt-dagbord-rij:first-child {
        border-top: 0;
    }

.vt-dagbord-kop {
    display: flex;
    align-items: center;
    gap: 12px;
    color: inherit;
    text-decoration: none;
}

    .vt-dagbord-kop:hover .vt-dagbord-tekst,
    .vt-dagbord-kop:focus-visible .vt-dagbord-tekst {
        color: var(--vt-primary);
        text-decoration: underline;
    }

.vt-dagbord-tekst {
    flex: 1 1 auto;
    min-width: 0;
    font-weight: 500;
    font-size: .9rem;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* Tijd-pill in het dagbord is smaller dan de standaard datum-pill. */
.vt-dagbord .vt-datum-pill {
    min-width: 72px;
}

.vt-dagbord .vt-actie-sub {
    margin-left: 84px;
}

.vt-dagbord-chips {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin-top: 6px;
    margin-left: 84px;
}

/* Live klok in de kop van de Vandaag-kolom (dagbord). */
.vt-dagbord-klok {
    font-size: .95rem;
    font-weight: 600;
    color: var(--vt-cta);
    font-variant-numeric: lining-nums tabular-nums;
}

/* Nu-lijn: scheidt op het dagbord de afspraken die al geweest zijn van wat nog
   komt, met de huidige tijd als label (zoals in Outlook/Google Agenda). */
.vt-nu-lijn {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 6px 0;
    color: var(--vt-cta);
}

    .vt-nu-lijn::after {
        content: "";
        flex: 1 1 auto;
        height: 2px;
        background: var(--vt-cta);
        border-radius: 1px;
    }

.vt-nu-lijn-label {
    font-size: .72rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: .04em;
    white-space: nowrap;
    font-variant-numeric: lining-nums tabular-nums;
}

    /* Stip aan de start van de lijn, als ankerpunt voor het tijdlabel. */
    .vt-nu-lijn-label::before {
        content: "";
        display: inline-block;
        width: 7px;
        height: 7px;
        border-radius: 50%;
        background: var(--vt-cta);
        margin-right: 6px;
        vertical-align: middle;
    }

/* Compacte Actueel-kaart op de cockpit-homes: omschrijving op twee regels. */
.home-kaart-actueel-compact #actueelCOmschrijving {
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    font-size: .9rem;
}

/* Dieplink-markering: korte puls op de sectie waar het admin-dashboard naartoe
   scrolt (#sectie-opties / #sectie-poortwachter op de status-pagina), zodat
   duidelijk is waar je geland bent. */
.sectie-gemarkeerd {
    animation: sectie-puls 2s ease-out;
}

@keyframes sectie-puls {
    0% {
        box-shadow: 0 0 0 3px var(--vt-cta-soft-border);
        background-color: var(--vt-cta-soft-bg);
    }

    100% {
        box-shadow: 0 0 0 3px transparent;
        background-color: transparent;
    }
}

/* ------------------------------------------------------------------
   Recente-items lijst (status-pagina: "Recente afspraken" / "Recente
   offertes"). Vervangt de oude Swiper-carousel door een schone, scanbare
   lijst. Hergebruikt de huisstijl-tints en de bestaande .vt-chip-statussen.
   ------------------------------------------------------------------ */

/* Kaartkop met titel links + icoon rechts en accent-lijn onder de titel
   (zelfde gradient-patroon als .detail-card > strong). */
.vt-recent-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
}

.vt-recent-header h5 {
    margin: 0;
    padding-bottom: 6px;
    background: linear-gradient(90deg, var(--vt-primary), var(--vt-cta)) left bottom / 48px 2px no-repeat;
}

.vt-recent-header > i {
    color: var(--blue-color);
    font-size: 1.05rem;
}

.vt-recent-list {
    display: flex;
    flex-direction: column;
}

.vt-recent-row {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 10px 8px;
    border-radius: 10px;
    transition: background-color .12s ease;
}

    .vt-recent-row + .vt-recent-row {
        border-top: 1px solid var(--vt-border);
    }

    .vt-recent-row.pointer {
        cursor: pointer;
    }

    .vt-recent-row:hover {
        background: var(--vt-tint);
    }

/* Gestapelde dag/maand-pill (vgl. .vt-datum-pill, maar twee regels). */
.vt-recent-datepill {
    flex-shrink: 0;
    width: 46px;
    text-align: center;
    background: var(--vt-tint);
    color: var(--vt-text-strong);
    border-radius: 8px;
    padding: 5px 0;
    line-height: 1.1;
    font-variant-numeric: lining-nums tabular-nums;
}

    .vt-recent-datepill b {
        display: block;
        font-size: 1.05rem;
        font-weight: 500;
    }

    .vt-recent-datepill span {
        display: block;
        font-size: .68rem;
        text-transform: uppercase;
        letter-spacing: .04em;
        color: var(--vt-chip-link);
    }

.vt-recent-main {
    flex: 1;
    min-width: 0;
}

.vt-recent-titel {
    font-weight: 500;
    color: var(--vt-text-strong);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.vt-recent-meta {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-top: 2px;
    font-size: .8rem;
    color: var(--vt-chip-link);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

    .vt-recent-meta .vt-dot {
        opacity: .6;
    }

/* Kleine tijd-pill rechts in de afspraak-rij. */
.vt-recent-tijd {
    flex-shrink: 0;
    background: var(--vt-tint);
    color: var(--vt-text-strong);
    font-size: .78rem;
    font-weight: 500;
    border-radius: 8px;
    padding: 4px 10px;
    white-space: nowrap;
    font-variant-numeric: lining-nums tabular-nums;
}

/* Korte tekstregel wanneer er geen items zijn. */
.vt-recent-empty {
    padding: 14px 8px;
    color: var(--vt-chip-link);
    font-size: .9rem;
}

/* ── Ziekmeld-popup in Register-stijl ────────────────────────────────
   De ziekmeld-popup (#EditPopup) krijgt dezelfde structuur als de
   registratiepagina: een linker-navigatie met bolletjes + invul-status
   en omkaderde secties met een blauw icoonblokje + titel boven elk kopje.
   Alles gescoped onder .zm-melding zodat het de rest van de app niet raakt.
   Het formulier blijft een DevExtreme dxForm; we stylen hier enkel de
   gegenereerde .dx-form-group(-caption) naar de reg-section-look. */

/* Tweekoloms-layout binnen de popup: vaste nav links, scrollend form rechts.
   De popup-content heeft een vaste hoogte (80vh); deze container vult die. */
.zm-melding .zm-layout {
    display: flex;
    gap: 1.25rem;
    align-items: flex-start;
}

/* Rechterkolom met het formulier. De popup-content host (.dx-popup-content)
   verzorgt zelf het scrollen; deze kolom hoeft dus niet te scrollen. */
.zm-melding .zm-form-wrap {
    flex: 1 1 auto;
    min-width: 0;
    position: relative;
    padding: .25rem 1rem 1rem 0;
}

/* ── Voortgangs-/sectienavigatie links ──────────────────────────────
   Sticky kolom binnen de scrollende popup-content (geen position:fixed zoals
   de standalone registratiepagina, want we zitten in een popup). De nav mag
   NIET uitrekken (geen align-self:stretch), anders is hij even hoog als het
   formulier en heeft sticky geen effect. */
.zm-melding .zm-nav {
    flex: 0 0 190px;
    position: sticky;
    top: 0;
    padding-top: .5rem;
}
.zm-melding .zm-nav ol {
    list-style: none;
    margin: 0;
    padding: 0;
    position: relative;
}
/* verticale verbindingslijn achter de bolletjes */
.zm-melding .zm-nav ol::before {
    content: "";
    position: absolute;
    left: 9px;
    top: .9rem;
    bottom: .9rem;
    width: 2px;
    background: var(--vt-border);
}
.zm-melding .zm-nav li {
    position: relative;
    padding: .4rem 0 .4rem 2rem;
    color: #8a93a0;
    font-size: .85rem;
    line-height: 1.3;
    cursor: pointer;
    transition: color .15s ease;
}
.zm-melding .zm-nav-dot {
    position: absolute;
    left: 3px;
    top: .55rem;
    width: 14px;
    height: 14px;
    border-radius: 50%;
    background: #fff;
    border: 2px solid var(--vt-border);
    transition: all .15s ease;
}
.zm-melding .zm-nav li:hover {
    color: var(--vt-primary);
}
.zm-melding .zm-nav li:hover .zm-nav-dot {
    border-color: var(--vt-primary);
}

/* Invul-status per sectie (omlijning van het bolletje):
   groen = alle verplichte velden ingevuld, oranje = deels ingevuld. */
.zm-melding .zm-nav li.complete .zm-nav-dot {
    border-color: #198754;
    background: #e6f4ec;
}
.zm-melding .zm-nav li.incomplete .zm-nav-dot {
    border-color: #fd7e14;
    background: #fdeede;
}

/* huidige sectie: navy label + accentring rond het bolletje. */
.zm-melding .zm-nav li.active {
    color: var(--vt-primary);
    font-weight: 600;
}
.zm-melding .zm-nav li.active .zm-nav-dot {
    box-shadow: 0 0 0 4px rgba(0, 66, 137, 0.15);
}

/* Bij een smalle popup vervalt de zijnavigatie (gezet via ResizeObserver). */
.zm-melding .zm-layout.zm-narrow .zm-nav {
    display: none;
}

/* ── Secties: dxForm-groepen als omkaderde reg-secties ──────────────── */
.zm-melding .dx-form-group.zm-section {
    border: 1px solid var(--vt-border);
    border-radius: 10px;
    padding: 1.1rem 1.3rem 1.3rem;
    margin-bottom: 1.1rem;
    background: #fff;
    transition: box-shadow .15s ease-in-out;
}
.zm-melding .dx-form-group.zm-section:hover {
    box-shadow: 0 2px 12px rgba(0, 66, 137, 0.08);
}
.zm-melding .dx-form-group.zm-section:last-of-type {
    margin-bottom: 0;
}

/* De groep-caption wordt de titelbalk met icoon + onderstreping.
   De !important is nodig om DevExtreme's eigen caption-defaults te overrulen. */
.zm-melding .dx-form-group .dx-form-group-caption {
    display: flex !important;
    align-items: center;
    gap: .6rem;
    font-weight: 600;
    font-size: 1.02rem;
    color: var(--vt-primary) !important;
    margin-bottom: 1rem;
    padding-bottom: .6rem;
    border-bottom: 2px solid var(--vt-tint) !important;
}
.zm-melding .zm-section-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    border-radius: 8px;
    background: var(--vt-primary);
    color: #fff;
    font-size: .8rem;
    flex-shrink: 0;
}

/* ── Bedrijf-bewerkpopup: hergebruikt .zm-melding hierboven ──────────
   Extra scope .bd-melding (naast .zm-melding) voor wat specifiek is aan
   het bedrijfsformulier. De Adresgegevens-sectie bevat geneste subgroepen
   (Bezoekadres/Factuuradres); hun caption mag niet als volwaardige
   sectie-kop ogen. Daarom lichter: kleinere, donkergrijze tekst met een
   dunne stippellijn i.p.v. de navy icoon-titelbalk. */
.bd-melding .dx-form-group.zm-section .dx-form-group .dx-form-group-caption {
    font-size: .9rem !important;
    color: var(--vt-text-strong) !important;
    border-bottom: 1px dashed var(--vt-border) !important;
    margin-bottom: .75rem;
    padding-bottom: .4rem;
}

/* ------------------------------------------------------------------
   Zwevende verbetervoorstel-widget (alleen interne rollen).
   Fab/panel liggen boven de topbar/sidebar (1050), maar bewust ónder de
   DevExtreme-overlays (~1500): een modale popup dekt de widget dan af. */
.vt-vv-fab {
    position: fixed;
    right: 24px;
    bottom: 24px;
    z-index: 1055;
    width: 52px;
    height: 52px;
    border-radius: 50%;
    border: none;
    background: var(--vt-cta);
    color: #fff;
    font-size: 1.25rem;
    box-shadow: 0 4px 14px rgba(0, 0, 0, .25);
    cursor: pointer;
}

    .vt-vv-fab:hover {
        background: var(--vt-cta-dark);
    }

/* Verbetervoorstel #75: ruimte onder de pagina-inhoud zodat de fab (bottom 24px +
   52px hoog) de paginering van grids onderaan niet meer afdekt. Alleen gezet
   wanneer de widget getoond wordt (_Layout). Beide staan onder zoom 0.8, dus de
   verhouding blijft gelijk (~70px ruimte vs. ~61px knop op scherm). */
@media screen {
    .main-content.vt-vv-ruimte {
        padding-bottom: 88px;
    }
}

.vt-vv-panel {
    position: fixed;
    right: 24px;
    bottom: 88px;
    z-index: 1056;
    width: 400px;
    max-width: calc(100vw - 48px);
    background: #fff;
    border-radius: 12px;
    box-shadow: 0 10px 40px rgba(0, 0, 0, .3);
    padding: 16px;
    display: none;
}

    .vt-vv-panel.vt-vv-open {
        display: block;
    }

.vt-vv-bijlagen {
    list-style: none;
    margin: 8px 0 0;
    padding: 0;
    max-height: 140px;
    overflow-y: auto;
}

    .vt-vv-bijlagen li {
        display: flex;
        justify-content: space-between;
        align-items: center;
        gap: 8px;
        font-size: .8rem;
        padding: 4px 0;
        border-bottom: 1px solid #eee;
    }

        .vt-vv-bijlagen li .vt-vv-naam {
            flex: 1;
            overflow: hidden;
            text-overflow: ellipsis;
            white-space: nowrap;
        }

.vt-vv-thumb-wrap {
    position: relative;
    flex-shrink: 0;
    cursor: pointer;
    line-height: 0;
}

.vt-vv-thumb {
    width: 72px;
    height: 54px;
    object-fit: cover;
    border-radius: 6px;
    border: 1px solid #e0e0e0;
    flex-shrink: 0;
}

/* Potlood-overlay op afbeeldings-thumbnails: hint dat klikken = bewerken. */
.vt-vv-thumb-edit {
    position: absolute;
    right: 3px;
    bottom: 3px;
    font-size: .65rem;
    color: #fff;
    background: rgba(0, 0, 0, .55);
    border-radius: 4px;
    padding: 2px 3px;
    pointer-events: none;
}

.vt-vv-tip {
    font-size: .85rem;
    line-height: 1.35;
}

/* ── Modal: screenshot-editor (canvas + pen/pijl) en video-preview ──────
   Boven het widget-paneel (1056) maar los van de DevExtreme-stacking. */
.vt-vv-modal {
    position: fixed;
    inset: 0;
    z-index: 1300;
    background: rgba(0, 0, 0, .55);
    display: none;
    align-items: center;
    justify-content: center;
}

    .vt-vv-modal.vt-vv-open {
        display: flex;
    }

.vt-vv-modal-inhoud {
    background: #fff;
    border-radius: 12px;
    padding: 16px;
    max-width: calc(100vw - 32px);
    box-shadow: 0 10px 40px rgba(0, 0, 0, .35);
}

#vtVvEditCanvas {
    display: block;
    max-width: 90vw;
    max-height: 80vh;
    cursor: crosshair;
    border: 1px solid #e0e0e0;
    border-radius: 6px;
}

#vtVvVideoPreview {
    display: block;
    max-width: 90vw;
    max-height: 80vh;
    border-radius: 6px;
}

.vt-vv-opname-actief {
    color: #b02a37;
    font-weight: 600;
    font-size: .85rem;
}

/* ===========================================================
   Handleidingen (V2/Handleiding) + topbar-knop
   =========================================================== */

/* Knop in de topbar, naast de versie-switch. Zelfde hoogte en ronding als de
   andere topbar-elementen; op smalle schermen blijft alleen het icoon over. */
.vt-topbar-knop {
    display: inline-flex;
    align-items: center;
    gap: .25rem;
    padding: .35rem .75rem;
    border-radius: 9999px;
    border: 1px solid var(--vt-primary);
    color: var(--vt-primary);
    background: #fff;
    font-size: .85rem;
    font-weight: 600;
    white-space: nowrap;
    text-decoration: none;
    transition: background-color .15s ease, color .15s ease;
}

.vt-topbar-knop:hover,
.vt-topbar-knop:focus {
    background: var(--vt-primary);
    color: #fff;
}

@media (max-width: 991px) {
    .vt-topbar-knop-tekst { display: none; }
    .vt-topbar-knop { padding: .35rem .55rem; }
}

/* Extra regel onderin de handleiding-tegel: voor wie hij bedoeld is, plus een
   PDF-knop. De tegel zelf is al een <a>, dus de PDF opent via JS (geen nested <a>). */
.handleiding-tile-meta {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: .75rem;
    margin-top: .5rem;
    font-size: .8rem;
    font-weight: 600;
    color: var(--vt-secondary);
}

.handleiding-pdf-link {
    display: inline-flex;
    align-items: center;
    gap: .3rem;
    padding: .15rem .55rem;
    border-radius: 9999px;
    background: #eef3fb;
    color: var(--vt-primary);
    font-weight: 600;
    cursor: pointer;
    transition: background-color .15s ease;
}

.handleiding-pdf-link:hover {
    background: #d7e2ff;
}

/* ------------------------------------------------------------------
   Overdrachtslabel op de secties van een voortgangs-/eindrapportage.
   Geeft per blok aan of de tekst automatisch meegaat naar de volgende
   rapportage (Clone kopieert zeven cumulatieve velden) of alleen bij
   deze rapportage hoort. Puur informatief; visueel familie van
   .vt-doc-badge, maar compacter zodat hij naast de sectietitel past.
   ------------------------------------------------------------------ */
.vt-overdracht {
    display: inline-flex;
    align-items: center;
    gap: .3rem;
    padding: 2px 9px;
    border-radius: 999px;
    font-size: 0.75rem;
    font-weight: 600;
    line-height: 1.4;
    letter-spacing: 0.02em;
    border: 1px solid transparent;
    white-space: nowrap;
}

.vt-overdracht--mee {
    background: #e1f3ee;
    color: #0f6e56;
    border-color: #b8e0d3;
}

.vt-overdracht--blijft {
    background: #f3f4f6;
    color: #5b6472;
    border-color: #dcdfe5;
}

/* De sectiekop houdt titel links en status rechts; het label komt daar
   tussenin te staan en mag bij smalle schermen als eerste inkrimpen. */
.section-header .vt-overdracht {
    margin-left: auto;
    margin-right: .6rem;
}

/* === Loopbaandocument: tabel-editors, checklists en gesprek-blokken (spec 06-08) === */
/* Vaste kolomverdeling: de breedtes komen uit de th's, niet uit de celinhoud. Met de
   standaard auto-layout trok één lange waarde de hele tabel scheef — de datumkolom werd
   dan samengedrukt (bevinding Kevin 11-08). Verticaal groeien de cellen wél mee. */
.vt-tabel-editor {
    table-layout: fixed;
}

.vt-tabel-editor th {
    font-size: .8rem;
    font-weight: 600;
    color: var(--vt-navy, #00346f);
    background: #f4f6fa;
}

.vt-tabel-editor td {
    vertical-align: top;
}

/* Lange aaneengesloten tekst zonder spaties mag de kolom niet oprekken. */
.vt-tabel-editor th,
.vt-tabel-editor td {
    overflow-wrap: anywhere;
}

/* Cellen groeien verticaal mee; één regel hoog als basis, handmatig oprekbaar.
   De expliciete width wint van field-sizing op de horizontale as, zodat alleen de
   hoogte de inhoud volgt. */
.vt-tabel-editor .vt-cel {
    resize: vertical;
    width: 100%;
    max-width: 100%;
    min-height: calc(1.5em + .5rem + 2px);
    field-sizing: content; /* moderne browsers: automatisch meegroeien met inhoud */
}

.vt-checklist .form-check {
    margin-bottom: .15rem;
}

.vt-gesprek-blok {
    background: #fafbfd;
}

.vt-gesprek-blok h6[data-gesprek-titel] {
    color: var(--vt-navy, #00346f);
}

/* Loopbaandocument: vaste sjabloontekst zichtbaar in het formulier (Overige zaken) */
.vt-pdf-subkop {
    color: var(--vt-cta, #b60056);
    font-weight: 700;
    margin-bottom: .5rem;
}

.vt-vaste-tekst {
    background: #f7f8fb;
    border-left: 3px solid var(--vt-navy, #00346f);
    border-radius: .25rem;
    padding: .6rem .9rem;
    color: #5a6472;
    font-size: .875rem;
}

.vt-vaste-tekst p {
    margin-bottom: .5rem;
}

.vt-vaste-tekst-label {
    font-size: .72rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: .03em;
    color: #8a93a2;
    margin-bottom: .35rem;
}

/* Loopbaandocument: tekstvelden met opmaakknoppen (vet/cursief/onderstreept + 3 huisstijlkleuren).
   De <textarea> is de bron die het formulier post; zodra loopbaandocument-editor.js een
   HtmlEditor heeft aangehangen verbergen we hem. Laadt het script niet, dan blijft er een
   gewoon tekstveld staan dat er als een normale form-control uitziet. */
.vt-tekst-editor .vt-tekst-editor-bron {
    display: block;
    width: 100%;
    padding: .375rem .75rem;
    font-size: 1rem;
    line-height: 1.5;
    color: #212529;
    background-color: #fff;
    border: 1px solid #ced4da;
    border-radius: .375rem;
}

.vt-tekst-editor .vt-tekst-editor-host {
    display: none;
}

.vt-tekst-editor[data-editor-actief] .vt-tekst-editor-bron {
    display: none;
}

.vt-tekst-editor[data-editor-actief] .vt-tekst-editor-host {
    display: block;
}

/* Kleurknoppen in de toolbar: een gekleurde stip i.p.v. een letter, zodat direct zichtbaar is
   welke kleur je kiest. Drie vaste waarden, geen kleurenkiezer. */
.vt-tekst-editor .vt-kleurstip {
    width: 16px;
    height: 16px;
    border-radius: 50%;
    border: 1px solid rgba(0, 0, 0, .25);
}

.vt-tekst-editor .dx-htmleditor-content p {
    margin-bottom: .5rem;
}

/* Keuzelijst van spreekuurverslagen in het loopbaandocument. Een uitgevinkt verslag blijft
   leesbaar maar dooft zichtbaar, zodat in één oogopslag duidelijk is wat er niet in de
   rapportage komt (verzoek Rianne 08-09). */
.vt-verslagkeuze {
    border-top: 1px solid rgba(0, 0, 0, .08);
    padding: .6rem 0;
}

.vt-verslagkeuze:first-of-type {
    border-top: 0;
}

.vt-verslagkeuze-inhoud {
    padding-left: 1.6rem;
    font-size: .92rem;
}

.vt-verslagkeuze--uit .vt-verslagkeuze-inhoud {
    opacity: .45;
}

/* Reageert direct op het vinkje, zonder script. De klasse hierboven blijft de serverkant en
   dekt browsers zonder :has(). */
.vt-verslagkeuze:has(input[type="checkbox"]:not(:checked)) .vt-verslagkeuze-inhoud {
    opacity: .45;
}

.vt-verslagkeuze:has(input[type="checkbox"]:checked) .vt-verslagkeuze-inhoud {
    opacity: 1;
}

/* Hoofdstuk Resultaat (eindrapportage): dezelfde dimming, maar hier is de bullet-tekst zelf
   het label. Het paginanummer-veld blijft smal. */
.vt-resultaatbullet .form-check-label {
    transition: opacity .15s;
}

.vt-resultaatbullet.vt-verslagkeuze--uit .form-check-label,
.vt-resultaatbullet:has(input[type="checkbox"]:not(:checked)) .form-check-label {
    opacity: .45;
    text-decoration: line-through;
}

.vt-resultaatbullet:has(input[type="checkbox"]:checked) .form-check-label {
    opacity: 1;
    text-decoration: none;
}

.vt-resultaatbullet-blz {
    max-width: 12rem;
}

/* De editor erft de leesbaarheid van de rest van het formulier. De hoogte groeit mee met de
   inhoud — data-hoogte uit de view is nog slechts de ondergrens (verzoek loopbaanadviseurs
   08-09: lange teksten liepen over de rand van het blok). */
.vt-tekst-editor .dx-htmleditor-content {
    font-size: .95rem;
    min-height: var(--vt-editor-min-hoogte, 180px);
    height: auto;
    overflow-y: visible;
}

/* Medische info opvragen: de rijen van het aanvragen-grid openen de aanvraag-popup
   (_AanvraagModal.cshtml); de knoppen rechts blijven hun eigen actie doen. */
#medischeInfoGrid .dx-data-row {
    cursor: pointer;
}

/* Statuspills voor machtigingsaanvragen (Medische info opvragen): kleur = wie is aan
   zet. Amber (--pending) = ligt bij de medewerker, donker amber = ligt bij de externe
   behandelaar, navy-tint (--btw) en groen (--ok) = de consulent is aan zet,
   donkergrijs = afgerond. Toewijzing in md_statusPillKlasse (_MedischeInfo.cshtml). */
.vt-status-pill--pending-dark {
    background: #f6e3c4;
    color: #6e4300;
    border-color: #e6c58e;
}

.vt-status-pill--done {
    background: #e4e6ea;
    color: #3d4551;
    border-color: #c9ced6;
}

/* Procesflow in de aanvraag-popup: zes stappen op een rij; afgerond = groen vinkje met
   datum, actief = kleur van de status, komend = grijs. Op smalle schermen onder elkaar. */
.ma-flow {
    display: flex;
    gap: 0;
    margin: 0 0 1.25rem;
    padding: 0;
    list-style: none;
}

.ma-flow__stap {
    flex: 1 1 0;
    position: relative;
    text-align: center;
    padding: 0 4px;
    font-size: .78rem;
    line-height: 1.25;
    color: #98a0a8;
}

    .ma-flow__stap::before {
        content: "";
        position: absolute;
        top: 13px;
        left: -50%;
        width: 100%;
        height: 2px;
        background: #e2e8f4;
        z-index: 0;
    }

    .ma-flow__stap:first-child::before { display: none; }

.ma-flow__bol {
    position: relative;
    z-index: 1;
    width: 26px;
    height: 26px;
    margin: 0 auto 6px;
    border-radius: 50%;
    border: 2px solid #d8dde6;
    background: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: .75rem;
    color: #98a0a8;
}

.ma-flow__datum {
    display: block;
    white-space: nowrap;
    font-size: .7rem;
    color: #98a0a8;
    margin-top: 2px;
}

.ma-flow__stap.is-af { color: #1b5e20; }
    .ma-flow__stap.is-af::before { background: #7fc79a; }
    .ma-flow__stap.is-af .ma-flow__bol { background: #1b5e20; border-color: #1b5e20; color: #fff; }
    .ma-flow__stap.is-af .ma-flow__datum { color: #1b5e20; }

.ma-flow__stap.is-actief { color: var(--vt-primary, #00346f); font-weight: 600; }
    .ma-flow__stap.is-actief::before { background: #7fc79a; }
    .ma-flow__stap.is-actief .ma-flow__bol { border-color: var(--vt-primary, #00346f); color: var(--vt-primary, #00346f); box-shadow: 0 0 0 3px rgba(0, 52, 111, .12); }

@media (max-width: 575.98px) {
    .ma-flow { flex-direction: column; gap: .4rem; }
    .ma-flow__stap { text-align: left; display: flex; align-items: center; gap: .5rem; }
    .ma-flow__stap::before { display: none; }
    .ma-flow__bol { margin: 0; }
}

/* Tekstvakken in de aanvraag-popup: één regel, groeien mee (md_groeiMee). */
.ma-groei { resize: none; overflow: hidden; min-height: calc(1.5em + .75rem + 2px); }

/* Punt 51: dxResizable-wrapper om de "Vraag werkgever"/"Vraag werknemer"-editors
   (Afspraken/Edit.cshtml) — laat de gebruiker het vak zelf vergroten door te slepen. */
.vt-resizable-editor {
    width: 100%;
}
