
:root{
  --purple:#5b2382; --purple2:#35104f; --purple3:#7328a7; --purple4:#8b38c4;
  --blue:#087bbd; --blue2:#28a7e8; --cyan:#35b9ef; --pink:#d93491; --orange:#ff9f1c;
  --red:#ef3b4d; --green:#15a66a; --text:#111b3f; --muted:#66718f;
  --soft:#f5f7fb; --card:#fff; --line:#e5ebf4; --line2:#d7e0ed;
  --shadow:0 16px 35px rgba(29,38,75,.08); --shadow-soft:0 8px 18px rgba(29,38,75,.06);
  --radius:16px;
}
*{box-sizing:border-box} html,body{margin:0;min-height:100%;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Arial,sans-serif;background:var(--soft);color:var(--text)}
body{overflow-x:auto}.app-shell{display:grid;grid-template-columns:232px 1fr;min-height:100vh;min-width:1420px;background:linear-gradient(180deg,#fff 0%,#f7f9fc 36%,#f2f5fa 100%)}
.sidebar{position:relative;background:linear-gradient(180deg,#32114e 0%,#4b166f 48%,#35104f 100%);color:#fff;box-shadow:10px 0 30px rgba(43,18,70,.12);overflow:hidden}
.logo-wrap{height:94px;background:#fff;display:flex;align-items:center;padding:9px 18px;border-right:1px solid var(--line);border-bottom:4px solid var(--cyan)}.logo-wrap .portal-home-link{display:block;line-height:0;border-radius:8px;cursor:pointer}.logo-wrap .portal-home-link:focus-visible{outline:2px solid var(--cyan);outline-offset:4px}.logo-wrap img{width:190px;height:auto;display:block;object-fit:contain}
.sidebar-nav{padding:16px 10px 170px;position:relative;z-index:2}.nav-item{height:51px;margin-bottom:8px;border-radius:8px;display:flex;align-items:center;gap:15px;padding:0 15px;color:#fff;text-decoration:none;font-weight:800;font-size:14px;cursor:pointer;transition:.16s ease;border:1px solid transparent}.nav-item:hover{background:rgba(255,255,255,.08)}.nav-item.active{background:linear-gradient(90deg,#148ee1 0%,#35aceb 100%);box-shadow:0 10px 22px rgba(0,112,190,.32)}.nav-icon{width:23px;height:23px;display:inline-flex;align-items:center;justify-content:center}.nav-icon svg{width:23px;height:23px;stroke:#fff;stroke-width:2.2;fill:none;stroke-linecap:round;stroke-linejoin:round}
.sidebar-deco{position:absolute;left:51px;bottom:45px;width:181px;height:220px;opacity:.96;z-index:1}.sidebar-deco svg{width:100%;height:100%;overflow:visible}.collapse{position:absolute;left:22px;bottom:31px;display:flex;align-items:center;gap:10px;font-weight:800;font-size:12px;color:#fff;z-index:2}.collapse .circle{width:27px;height:27px;border:1px solid rgba(255,255,255,.45);border-radius:50%;display:grid;place-items:center;font-size:18px;line-height:1}
.main{padding:20px 30px 28px}.topbar{display:grid;grid-template-columns:1fr auto auto auto;align-items:start;gap:24px;margin-bottom:20px}.title-block h1{margin:0 0 5px;font-size:26px;line-height:1.05;letter-spacing:-.035em;color:#0a1637}.title-block p{margin:0;color:#65708d;font-size:14px}.selector{height:58px;background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow-soft);padding:10px 15px;min-width:252px;display:flex;align-items:center;justify-content:space-between;gap:14px}.selector.small{min-width:209px}.selector .label{font-size:11px;color:#727c95;font-weight:700;margin-bottom:3px}.selector .value{font-size:14px;font-weight:900;color:#101a40;white-space:nowrap}.selector .left{display:flex;align-items:center;gap:12px}.selector svg{width:20px;height:20px;stroke:#35405d;stroke-width:2;fill:none}.top-icons{height:58px;display:flex;align-items:center;gap:18px}.icon-btn{position:relative;width:28px;height:28px;border:0;background:transparent;color:#4d5875;display:grid;place-items:center;cursor:pointer}.icon-btn svg{width:23px;height:23px;stroke:#4d5875;stroke-width:2;fill:none}.badge-count{position:absolute;right:-2px;top:-5px;background:var(--purple3);color:#fff;width:18px;height:18px;border-radius:50%;font-size:11px;display:grid;place-items:center;font-weight:900}.user-pill{height:58px;display:flex;align-items:center;gap:12px}.avatar{width:36px;height:36px;border-radius:50%;display:grid;place-items:center;background:var(--purple3);color:#fff;font-size:13px;font-weight:900}.user-text{font-size:13px;line-height:1.15;font-weight:900}.user-text span{display:block;font-size:11px;color:#65708d;font-weight:700;margin-top:2px}
#app{display:block}.dashboard-grid{display:grid;grid-template-columns:repeat(12,1fr);gap:14px;align-items:stretch}.card,.panel{background:#fff;border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}.card{padding:22px 22px}.panel{padding:18px}.kpi-card{grid-column:span 3;height:104px;display:grid;grid-template-columns:66px 1fr;align-items:center;gap:18px}.kpi-icon{width:58px;height:58px;border-radius:50%;display:grid;place-items:center;color:#fff;box-shadow:inset 0 -10px 18px rgba(0,0,0,.12)}.kpi-icon svg{width:31px;height:31px;stroke:#fff;stroke-width:2;fill:none}.kpi-icon.purple{background:linear-gradient(145deg,var(--purple4),var(--purple))}.kpi-icon.blue{background:linear-gradient(145deg,var(--blue2),var(--blue))}.kpi-icon.pink{background:linear-gradient(145deg,#df4ca7,#b92487)}.kpi-title{font-size:14px;color:#2c3654;font-weight:700}.kpi-number{font-size:31px;line-height:1.05;font-weight:900;color:#071239;letter-spacing:-.03em}.kpi-sub{font-size:13px;color:#071239;font-weight:800;margin-top:4px}.kpi-sub.pink{color:var(--pink)}.mini-progress{height:5px;border-radius:999px;background:#dce3ee;margin-top:10px;overflow:hidden}.mini-progress span{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,var(--purple),var(--purple4))}.mini-progress.blue span{background:linear-gradient(90deg,var(--blue),var(--blue2))}
.progress-card{grid-column:span 4;height:142px;padding:20px}.progress-card h3,.map-card h3,.table-card h3,.small-card h3,.panel h2,.panel h3{margin:0;color:#111b3f;letter-spacing:-.025em}.progress-card h3,.map-card h3,.small-card h3{font-size:16px}.progress-title{display:flex;justify-content:space-between;align-items:center;margin-bottom:21px}.total-label{font-size:12px;color:#111b3f;font-weight:700}.step-summary{display:grid;grid-template-columns:repeat(5,1fr);position:relative;gap:8px}.step-summary:before{content:"";position:absolute;top:9px;left:8%;right:8%;height:2px;background:#d9e1ec}.step-mini{text-align:center;position:relative;z-index:1}.step-dot{width:16px;height:16px;border-radius:50%;display:inline-block;background:#d8dee9;border:2px solid #d8dee9}.step-dot.inv.active{background:var(--purple3);border-color:var(--purple3);box-shadow:0 0 0 4px rgba(115,40,167,.08)}.step-dot.insp.active{background:var(--blue);border-color:var(--blue);box-shadow:0 0 0 4px rgba(8,123,189,.08)}.step-mini small{display:block;margin-top:15px;color:#26304c;font-size:12px;white-space:nowrap}.step-mini b{display:block;margin-top:8px;font-size:16px;color:#071239}.small-card{grid-column:span 4;min-height:214px}.small-card.wide{grid-column:span 6}.map-card{grid-column:span 4;grid-row:span 2;padding:14px;min-height:432px;display:flex;flex-direction:column}.map-card .map-head{display:flex;align-items:center;justify-content:space-between;padding:4px 4px 12px}.map{width:100%;min-height:260px;border-radius:12px;border:1px solid var(--line);overflow:hidden;background:#eef4f8}.map.dashboard{flex:1;min-height:353px}.map.full{height:610px}.map.detail{height:330px}.leaflet-container{font-family:inherit}.marker-dot{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;color:#fff;font-weight:900;font-size:12px;background:var(--purple3);border:2px solid #fff;box-shadow:0 4px 12px rgba(42,13,64,.28)}.marker-blue{background:var(--blue)}.marker-red{background:var(--red)}.marker-green{background:var(--green)}.popup-title{font-weight:900;color:#111b3f;margin-bottom:3px}.popup-line{color:#53607c;font-size:12px;margin:2px 0}.popup-btn{display:inline-block;margin-top:6px;padding:6px 9px;border-radius:8px;background:var(--purple3);color:#fff;text-decoration:none;font-size:12px;font-weight:800}
.inspector-table,.report-table,.data-table{width:100%;border-collapse:collapse}.inspector-table th,.data-table th,.report-table th{font-size:12px;color:#30405f;text-align:left;padding:9px 0;border-bottom:1px solid var(--line);font-weight:800}.inspector-table td,.data-table td,.report-table td{font-size:13px;padding:9px 0;border-bottom:1px solid var(--line);vertical-align:middle;color:#23314f}.person-cell{display:flex;align-items:center;gap:8px}.mini-avatar{width:22px;height:22px;border-radius:50%;display:grid;place-items:center;background:#3e58c8;color:#fff;font-size:10px;font-weight:900}.bar{height:5px;background:#dbe3ee;border-radius:999px;overflow:hidden;margin-top:3px;width:98px}.bar span{display:block;height:100%;border-radius:999px;background:var(--purple3)}.bar.blue span{background:var(--blue)}.attention-list{display:grid;gap:0}.attention-item{display:grid;grid-template-columns:28px 1fr auto;gap:10px;align-items:center;padding:10px 0;border-bottom:1px solid var(--line)}.alert-ico{width:16px;height:16px;color:var(--orange)}.alert-ico.red{color:var(--red)}.attention-item b{font-size:12px}.attention-item small{display:block;color:#56617d;font-size:12px;margin-top:2px}.tag{display:inline-flex;align-items:center;justify-content:center;height:24px;padding:0 10px;border-radius:999px;font-size:12px;font-weight:900}.tag.pink{background:#fff0f7;color:var(--pink)}.tag.red{background:#fff0f1;color:var(--red)}.tag.orange{background:#fff7e9;color:#b96700}.tag.green{background:#eefbf5;color:var(--green)}.tag.blue{background:#eef8ff;color:var(--blue)}.tag.grey{background:#f1f4f8;color:#66718f}.card-link{display:flex;align-items:center;justify-content:space-between;color:#0b65c8;font-size:13px;font-weight:800;margin-top:10px;text-decoration:none}.table-card{grid-column:span 12;padding:17px 18px 8px}.table-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.table-actions{display:flex;align-items:center;gap:10px}.search{height:36px;border:1px solid var(--line);border-radius:9px;display:flex;align-items:center;gap:9px;padding:0 12px;min-width:280px;background:#fff}.search input{border:0;outline:0;width:100%;font:inherit;font-size:13px;color:#111b3f}.btn{height:36px;border:1px solid var(--line);background:#fff;border-radius:9px;padding:0 13px;font-weight:850;color:#1a2550;display:inline-flex;gap:8px;align-items:center;justify-content:center;cursor:pointer;text-decoration:none}.btn svg{width:17px;height:17px;stroke:currentColor;stroke-width:2;fill:none}.btn.primary{background:linear-gradient(90deg,var(--purple),var(--purple3));color:#fff;border:0;box-shadow:0 8px 16px rgba(91,35,130,.2)}.btn.blue{background:linear-gradient(90deg,var(--blue),var(--blue2));color:#fff;border:0}.btn.danger{color:#fff;background:var(--red);border:0}.btn.ghost{background:#f7f9fc}.btn.small{height:30px;padding:0 9px;border-radius:8px;font-size:12px}.dots-row{display:flex;gap:10px;align-items:center}.dot{width:9px;height:9px;border-radius:50%;border:1.5px solid #b8c4d4;background:#fff}.dot.filled.inv{border-color:var(--purple3);background:var(--purple3)}.dot.filled.insp{border-color:var(--blue);background:var(--blue)}.dot.current{box-shadow:0 0 0 4px rgba(8,123,189,.08)}.dot.onhold{border-color:var(--orange);background:var(--orange)}.row-menu{font-weight:900;color:#25406a;text-align:center;cursor:pointer}.page-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.page-grid.wide-left{grid-template-columns:1.25fr .75fr}.toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 14px}.toolbar.sticky{position:sticky;top:0;z-index:3;background:rgba(245,247,251,.94);padding:10px 0;backdrop-filter:blur(10px)}select,input,textarea{font:inherit;border:1px solid var(--line2);border-radius:9px;background:#fff;color:#101a40;padding:8px 10px;outline:0}textarea{min-height:120px}.input{width:100%}.helper{color:#66718f;font-size:13px;line-height:1.45}.form-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.form-grid label{font-size:12px;color:#56617d;font-weight:800}.form-grid label span{display:block;margin-bottom:6px}.detail-layout{display:grid;grid-template-columns:1fr 410px;gap:16px}.detail-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}.status-pill{display:inline-flex;align-items:center;gap:7px;padding:6px 10px;border-radius:999px;background:#f3f6fb;color:#384664;font-weight:850;font-size:12px}.status-pill:before{content:"";width:8px;height:8px;border-radius:50%;background:var(--green)}.status-pill.onhold:before{background:var(--orange)}.status-step{display:flex;align-items:center;gap:7px;margin:7px 0 4px}.status-step .connector{height:2px;width:18px;background:#d7e0ed}.status-block{padding:12px;border:1px solid var(--line);border-radius:12px;background:#fbfcfe}.address-list{max-height:230px;overflow:auto;border:1px solid var(--line);border-radius:12px}.address-list table{width:100%;border-collapse:collapse}.address-list th,.address-list td{padding:8px 10px;border-bottom:1px solid var(--line);font-size:12px;text-align:left}.bulkbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:#fff;border:1px solid var(--line);border-radius:12px;padding:11px 12px;margin-bottom:12px;box-shadow:var(--shadow-soft)}.bulkbar strong{font-size:13px;margin-right:4px}.checkbox{width:16px;height:16px}.import-drop{border:2px dashed #cbd6e6;background:#fbfcff;border-radius:14px;padding:20px;text-align:center}.warn-list{display:grid;gap:7px;margin:12px 0}.warn{border:1px solid #ffd9a0;background:#fff8ed;color:#865200;border-radius:10px;padding:9px 10px;font-size:13px}.warn.red{border-color:#ffccd1;background:#fff3f4;color:#9a1725}.preview-box{max-height:360px;overflow:auto;border:1px solid var(--line);border-radius:12px}.muted{color:#66718f}.right{text-align:right}.hide{display:none!important}.map-warning{padding:12px;border-radius:10px;background:#fff8ed;color:#7c4d00;border:1px solid #ffd9a0;font-size:13px;margin-bottom:10px}.route-list{display:grid;gap:9px;margin-top:12px}.route-item{display:flex;justify-content:space-between;gap:10px;padding:10px;border:1px solid var(--line);border-radius:10px;background:#fff}.route-number{width:24px;height:24px;border-radius:50%;display:grid;place-items:center;background:var(--purple3);color:#fff;font-weight:900;font-size:12px}.leaflet-popup-content{margin:10px 12px!important}.leaflet-control-attribution{font-size:10px!important}
@media(max-width:1200px){.app-shell{min-width:1180px}.kpi-card{grid-column:span 6}.progress-card{grid-column:span 6}.map-card{grid-column:span 12;min-height:360px}.small-card,.small-card.wide{grid-column:span 6}.detail-layout{grid-template-columns:1fr}}

/* React baseline fixes */
ul,ol{list-style:none;margin:0;padding:0} .leaflet-pane{z-index:1}.leaflet-top,.leaflet-bottom{z-index:2}
/* v6 topbar/project/notification/account additions */
.topbar{grid-template-columns:1fr 300px auto;position:relative;padding-bottom:16px;border-bottom:4px solid var(--cyan);margin-bottom:18px}
.project-select-wrap{position:relative;z-index:10}.project-selector{width:300px;text-align:left;cursor:pointer}.selector-sub{font-size:11px;color:#65708d;font-weight:700;margin-top:2px}.dropdown-panel{position:absolute;right:0;top:66px;background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:0 22px 45px rgba(29,38,75,.18);padding:10px;z-index:80;min-width:320px}.project-dropdown{left:0;right:auto;top:64px}.dropdown-title{font-size:12px;font-weight:900;color:#66718f;text-transform:uppercase;letter-spacing:.06em;padding:6px 8px 10px}.dropdown-row,.notification-row{width:100%;border:0;background:#fff;text-align:left;border-radius:10px;padding:10px;display:block;cursor:pointer;color:var(--text);font:inherit}.dropdown-row:hover,.notification-row:hover{background:#f5f7fb}.dropdown-row.active{background:#eef8ff;box-shadow:inset 3px 0 0 var(--blue)}.dropdown-row b,.notification-row b{display:block;font-size:13px}.dropdown-row small,.notification-row small{display:block;font-size:12px;color:#66718f;margin-top:3px}.create-project-btn{width:100%;margin-top:10px}.notification-panel{right:78px;min-width:380px;max-width:420px}.notification-row{border-bottom:1px solid var(--line)}.notification-row.read{opacity:.62}.notification-row .tag{margin-bottom:6px}.dropdown-empty{padding:14px;color:#66718f;font-size:13px}.user-pill{cursor:pointer;border-radius:12px;padding:6px 8px}.user-pill:hover{background:#f5f7fb}

/* v7: lichtblauwe lijn onder de topbar zoals in het Helix-portaalvoorbeeld */
.topbar{box-shadow:0 4px 0 rgba(53,185,239,.10)}
.logo-wrap{box-shadow:0 4px 0 rgba(53,185,239,.10)}

/* v8 functies: kaartlegenda, nacalculatie, wijziging-terugzetten */
.marker-empty{background:#8b95a8!important}.marker-planned{background:#ff9f1c!important}.marker-inv{background:#28a7e8!important}.marker-insp{background:#7328a7!important}.marker-delivered{background:#15a66a!important}.marker-address{background:#087bbd!important}
.map-legend{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:10px;padding:10px 12px;border:1px solid var(--line);border-radius:12px;background:#fbfcfe;font-size:12px;color:#33405e}.map-legend b{margin-right:4px}.map-legend span{display:inline-flex;align-items:center;gap:5px}.legend-dot{width:12px;height:12px;border-radius:50%;display:inline-block;vertical-align:middle;margin-right:5px;border:2px solid #fff;box-shadow:0 0 0 1px rgba(0,0,0,.12)}
.change-list{margin:8px 0 0 18px!important;padding:0!important;list-style:disc!important;color:#56617d;font-size:13px;line-height:1.55}.change-list li{list-style:disc!important;margin-bottom:3px}.muted-row{opacity:.6}.btn[disabled]{opacity:.45;cursor:not-allowed}.data-table th,.data-table td{padding-left:6px;padding-right:6px}.report-table th,.report-table td{padding-left:8px;padding-right:8px}.route-item .btn.small{white-space:nowrap}

/* v10 fixes: zoekicoon, consistente markerkleuren, scroll-zoom kaarten, routelegenda */
.search svg{width:17px;height:17px;stroke:#8795ad;stroke-width:2;fill:none;flex:0 0 auto;display:block}
.marker-none{background:#8b95a8!important}
.marker-planned{background:#ff9f1c!important}
.marker-inventoried{background:#28a7e8!important}
.marker-inspected{background:#7328a7!important}
.marker-delivered{background:#15a66a!important}
.marker-address{background:#087bbd!important}
.legend-dot.marker-none{background:#8b95a8!important}
.legend-dot.marker-planned{background:#ff9f1c!important}
.legend-dot.marker-inventoried{background:#28a7e8!important}
.legend-dot.marker-inspected{background:#7328a7!important}
.legend-dot.marker-delivered{background:#15a66a!important}
.legend-line{display:inline-block;width:26px;height:0;border-top:4px solid #7328a7;border-radius:999px;margin-right:5px;box-shadow:0 0 0 1px rgba(0,0,0,.04)}
.route-summary{border:1px solid var(--line);background:#fbfcfe;border-radius:12px;padding:10px 12px;margin-bottom:10px;font-size:13px;color:#33405e}.route-summary b{display:block;color:#111b3f;margin-bottom:3px}.route-summary span{display:block;color:#66718f;line-height:1.4}

.marker-start{background:#111b3f!important}
.marker-end{background:#d93491!important}
.route-start{background:#111b3f!important}
.route-end{background:#d93491!important}
.legend-dot.marker-start{background:#111b3f!important}
.legend-dot.marker-end{background:#d93491!important}
.route-item.endpoint{background:#fbfcfe}
.geocode-summary{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12px}
.address-list td:last-child,.address-list th:last-child{white-space:nowrap}

/* v14: Simplicate projectmodal, authenticatie en nacalculatie */
.source-badge{display:inline-flex;align-items:center;height:17px;padding:0 6px;border-radius:999px;background:#eef8ff;color:var(--blue);font-size:9px;font-weight:900;text-transform:uppercase;letter-spacing:.04em;margin-right:6px;vertical-align:1px}
.avatar.online{box-shadow:0 0 0 3px rgba(21,166,106,.14);position:relative}.avatar.online:after{content:"";position:absolute;right:-1px;bottom:-1px;width:9px;height:9px;border-radius:50%;background:var(--green);border:2px solid #fff}
.modal-backdrop{position:fixed;inset:0;z-index:2000;background:rgba(13,20,49,.5);backdrop-filter:blur(5px);display:flex;align-items:center;justify-content:center;padding:28px}
.project-modal{width:min(1460px,calc(100vw - 56px));height:min(880px,calc(100vh - 56px));background:#fff;border:1px solid rgba(255,255,255,.45);border-radius:22px;box-shadow:0 30px 90px rgba(20,18,54,.32);display:flex;flex-direction:column;overflow:hidden}
.modal-head{padding:22px 24px 15px;border-bottom:1px solid var(--line);display:flex;align-items:flex-start;justify-content:space-between;gap:20px}.modal-head h2{margin:0;color:#111b3f;font-size:23px;letter-spacing:-.025em}.modal-head p{margin:6px 0 0;color:#66718f;font-size:13px}.modal-close{border:0;background:#f3f6fb;color:#44506d;border-radius:50%;width:36px;height:36px;font-size:25px;line-height:1;cursor:pointer}.modal-close:hover{background:#e8eef7;color:#111b3f}
.modal-toolbar{padding:14px 24px;display:flex;align-items:center;gap:10px;border-bottom:1px solid var(--line);background:#fbfcfe}.project-search{height:40px;flex:1;min-width:0}.project-search input{font-size:14px}.modal-toolbar .btn{height:40px;white-space:nowrap}
.project-modal>.warn{margin:12px 24px 0}.modal-meta{padding:10px 24px;display:flex;justify-content:space-between;align-items:center;color:#697590;font-size:12px;font-weight:750}.project-list{flex:1;overflow:auto;padding:0 24px 22px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));grid-auto-rows:max-content;gap:14px;align-content:start;background:#fbfcfe}
.project-card{position:relative;min-width:0;border:1px solid #dbe4ef;border-radius:16px;background:#fff;overflow:hidden;box-shadow:0 3px 10px rgba(29,38,75,.035);transition:border-color .15s ease,box-shadow .15s ease,transform .15s ease}.project-card:hover{border-color:#9cc8e9;box-shadow:0 12px 28px rgba(29,38,75,.10);transform:translateY(-2px)}.project-card.selected{border-color:var(--blue);box-shadow:inset 0 4px 0 var(--blue),0 12px 28px rgba(8,123,189,.10)}
.project-card-favorite{position:absolute;z-index:2;top:12px;right:12px;width:34px;height:34px;border:1px solid #e1e7f0;border-radius:10px;background:#fff;color:#a3aec0;font-size:22px;line-height:1;display:grid;place-items:center;cursor:pointer;box-shadow:0 3px 10px rgba(20,28,55,.06)}.project-card-favorite:hover,.project-card-favorite.active{color:#ffb000;background:#fff9e8;border-color:#f4d47b}.project-card-main{width:100%;height:100%;min-height:250px;border:0;background:transparent;text-align:left;padding:16px 16px 14px;cursor:pointer;font:inherit;color:inherit;display:flex;flex-direction:column}.project-card-topline{display:flex;align-items:center;gap:7px;min-height:24px;padding-right:42px}.project-number{font-size:11px;font-weight:900;color:#52607a;background:#f2f5f9;border-radius:7px;padding:4px 7px;max-width:170px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.project-card-title{margin:10px 42px 9px 0;color:#111b3f;font-size:16px;line-height:1.28;letter-spacing:-.01em;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:41px}.project-card-client{display:grid;gap:2px;padding-bottom:11px;border-bottom:1px solid #edf1f6}.project-card-client span,.project-card-label{font-size:9px;font-weight:900;text-transform:uppercase;letter-spacing:.06em;color:#8a95aa}.project-card-client b{font-size:12px;color:#53617b;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.project-card-section{margin-top:11px}.project-services{display:flex;flex-wrap:wrap;gap:5px;margin-top:6px;margin-bottom:0;min-height:24px}.project-services span{display:inline-flex;align-items:center;max-width:100%;padding:4px 7px;background:#f2f6fb;color:#53627e;border-radius:999px;font-size:9px;font-weight:800;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.project-services .more-chip{background:#eef8ff;color:var(--blue);flex:0 0 auto}.project-card-members{font-size:11px;color:#697590;line-height:1.35}.project-card-members>div{margin-top:5px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:30px}.project-card-members b{color:var(--blue)}.project-card-action{margin-top:auto;padding-top:12px;display:flex;align-items:center;justify-content:space-between;border-top:1px solid #edf1f6;color:var(--blue);font-size:11px;font-weight:900}.project-card-action b{font-size:18px;line-height:1}.project-card-main:focus-visible,.project-card-favorite:focus-visible{outline:3px solid rgba(47,169,224,.25);outline-offset:-3px}
.modal-empty{grid-column:1/-1;min-height:180px;display:grid;place-items:center;align-content:center;gap:6px;text-align:center;color:#66718f;border:2px dashed #d7e0ed;border-radius:14px;background:#fff}.modal-empty b{color:#111b3f}.modal-foot{padding:10px 24px;border-top:1px solid var(--line);background:#fbfcfe;color:#7a849d;font-size:10px;line-height:1.5}
.login-shell{min-height:620px;display:grid;place-items:center}.login-card{width:min(520px,100%);padding:32px}.login-logo{display:block;width:220px;max-height:82px;object-fit:contain;margin:0 auto 22px}.login-card h2{text-align:center;font-size:25px;margin-bottom:8px}.login-card>.helper{text-align:center}
.data-source{display:block;color:var(--blue);font-size:9px;font-weight:900;text-transform:uppercase;letter-spacing:.04em;margin-top:2px}.card-foot-note{margin-top:10px;color:#66718f;font-size:11px;text-align:right}.sync-meta{padding:9px 12px;border:1px solid var(--line);border-radius:10px;background:#fbfcfe;color:#66718f;font-size:11px;margin:12px 0 16px}.calc-kpis{margin:16px 0}.calc-layout{align-items:start}.calc-side{display:grid;gap:14px}.calc-side-card{border:1px solid var(--line);border-radius:14px;padding:15px;background:#fbfcfe}.calc-side-card h3{margin:0 0 6px}.member-list{display:grid;gap:8px;margin-top:12px}.member-list>div{display:flex;align-items:center;gap:9px;padding:8px;border-radius:9px;background:#fff;border:1px solid var(--line)}.member-list b,.member-list small{display:block}.member-list small{color:#66718f;font-size:10px;margin-top:2px}.negative{color:var(--red);font-weight:900}
code{background:#f0f3f8;padding:2px 5px;border-radius:5px;color:#4e2a72}
@media(max-width:1180px){.project-list{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:1050px){.project-modal{width:calc(100vw - 28px);height:calc(100vh - 28px)}.modal-toolbar{flex-wrap:wrap}.project-search{flex-basis:100%}}
@media(max-width:720px){.modal-backdrop{padding:10px}.project-modal{width:calc(100vw - 20px);height:calc(100vh - 20px);border-radius:16px}.modal-head,.modal-toolbar{padding-left:16px;padding-right:16px}.modal-meta{padding-left:16px;padding-right:16px;gap:12px;align-items:flex-start}.project-list{grid-template-columns:1fr;padding:0 16px 18px}.modal-foot{padding-left:16px;padding-right:16px}.project-card-main{min-height:230px}}
/* v14 integration settings */
.integration-status-list{display:grid;gap:0;margin-top:12px;border:1px solid var(--line);border-radius:12px;overflow:hidden;background:#fff}.integration-status-list>div{display:grid;grid-template-columns:145px 1fr;gap:12px;padding:10px 12px;border-bottom:1px solid var(--line);font-size:12px}.integration-status-list>div:last-child{border-bottom:0}.integration-status-list span{color:#66718f;font-weight:750}.integration-status-list b{color:#111b3f;overflow-wrap:anywhere}.settings-chip-list{display:flex;flex-wrap:wrap;gap:7px;margin-top:10px}.tag.purple-tag{background:#f5effb;color:var(--purple3)}.admin-role-panel{margin-top:16px}
.no-project-panel{max-width:620px;margin:90px auto;text-align:center;padding:42px}.no-project-panel .kpi-icon{margin:0 auto 16px}.no-project-panel h2{font-size:23px;margin-bottom:8px}

/* v16: authenticatie, Microsoft Entra en gebruikersbeheer */
.oauth-divider{display:flex;align-items:center;gap:12px;margin:15px 0;color:#8792a8;font-size:12px;font-weight:800}.oauth-divider:before,.oauth-divider:after{content:"";height:1px;background:var(--line);flex:1}.microsoft-btn{width:100%;height:42px;gap:10px;background:#fff;border-color:#cfd8e6}.microsoft-btn:hover{background:#f8fafc;border-color:#aebdd1}.microsoft-mark{width:18px;height:18px;display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;gap:2px;flex:0 0 auto}.microsoft-mark i{display:block;background:#626e86}.microsoft-mark i:nth-child(2),.microsoft-mark i:nth-child(3){background:#168bd2}.employee-link-select{min-width:260px;max-width:360px}.admin-role-panel .report-table td{vertical-align:middle}.auth-note{border:1px solid #cfe5f6;background:#f5fbff;color:#31536d;border-radius:11px;padding:10px 12px;font-size:12px;line-height:1.45}

/* v17 tijdelijke diagnostiek */
.diagnostic-layout{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(360px,.75fr);gap:16px;align-items:start}.diagnostic-wide{grid-column:1/-1}.diagnostic-summary,.diagnostic-endpoints{display:grid;gap:9px;margin-top:14px}.diagnostic-row{display:grid;grid-template-columns:14px minmax(0,1fr) auto;gap:10px;align-items:center;padding:11px 12px;border:1px solid var(--line);border-radius:11px;background:#fbfcfe}.diagnostic-dot{width:11px;height:11px;border-radius:50%;box-shadow:0 0 0 4px rgba(102,113,143,.08)}.diagnostic-dot.diag-ok{background:var(--green)}.diagnostic-dot.diag-warn{background:var(--orange)}.diagnostic-dot.diag-error{background:var(--red)}.diagnostic-dot.diag-loading{background:var(--blue);animation:diagPulse 1.1s infinite alternate}.diagnostic-copy{display:flex;flex-direction:column;gap:3px}.diagnostic-copy b{font-size:13px;color:#111b3f}.diagnostic-copy span{font-size:12px;color:var(--muted);line-height:1.35}.diagnostic-status{font-size:10px;font-weight:950;letter-spacing:.05em;padding:5px 8px;border-radius:999px}.diagnostic-status.diag-ok{background:#eefbf5;color:var(--green)}.diagnostic-status.diag-warn{background:#fff7e9;color:#a86400}.diagnostic-status.diag-error{background:#fff0f1;color:var(--red)}.diagnostic-status.diag-loading{background:#eef8ff;color:var(--blue)}.diagnostic-help-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:14px}.diagnostic-help-grid>div{border:1px solid var(--line);background:#fbfcfe;border-radius:11px;padding:12px}.diagnostic-help-grid b{display:block;font-size:12px;margin-bottom:5px}.diagnostic-help-grid span{display:block;font-size:12px;color:var(--muted);line-height:1.4}@keyframes diagPulse{from{opacity:.4}to{opacity:1}}@media(max-width:1200px){.diagnostic-layout{grid-template-columns:1fr}.diagnostic-wide{grid-column:auto}.diagnostic-help-grid{grid-template-columns:1fr 1fr}}
.diagnostic-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.diagnostic-dot.diag-idle{background:#b9c3d3}.diagnostic-status.diag-idle{background:#f1f4f8;color:#6c778d}.warn.green{background:#eefbf5;border-color:#cbeedd;color:#167a55}

/* v106 flexibele importwizard */
.import-steps{display:flex;gap:8px;flex-wrap:wrap;margin:14px 0 4px}.import-steps span{font-size:12px;font-weight:800;color:#66718f;background:#f3f6fb;border:1px solid #e0e6ef;border-radius:999px;padding:6px 10px}.import-steps span.active{color:#5b2382;background:#f6effa;border-color:#ddc8ec}.import-source-controls{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;margin:14px 0;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:#fbfcfe}.import-control-grid{grid-template-columns:minmax(170px,240px) minmax(220px,1fr);min-width:min(100%,520px)}.import-inline-label{display:inline-flex;align-items:center;gap:8px;font-size:12px;font-weight:800;color:#56617d}.import-paste{margin-top:12px;border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:#fbfcfe}.import-paste summary{cursor:pointer;font-weight:800;color:#384664}.import-paste textarea{margin-top:10px;min-height:120px}.import-map-head{align-items:flex-start;gap:16px}.import-mapping-table-wrap{overflow:auto;max-height:560px;border:1px solid var(--line);border-radius:12px;margin-top:10px}.import-mapping-table{min-width:860px}.import-mapping-table thead th{position:sticky;top:0;z-index:2;background:#f7f9fc;padding-top:10px;padding-bottom:10px}.import-mapping-table td{vertical-align:top;padding-top:10px;padding-bottom:10px}.import-mapping-table th:nth-child(1),.import-mapping-table td:nth-child(1){width:25%}.import-mapping-table th:nth-child(2),.import-mapping-table td:nth-child(2){width:35%}.import-mapping-table th:nth-child(3),.import-mapping-table td:nth-child(3){width:40%}.import-mapping-table tr.mapped-row{background:#fbf8fd}.import-sample{display:block;font-size:12px;line-height:1.35;color:#384664;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:360px;margin-bottom:2px}.import-map-select{min-width:285px}.import-map-error{color:#b42333;font-size:11px;font-weight:700;margin-top:4px}.import-default-grid{grid-template-columns:repeat(5,minmax(150px,1fr))}@media(max-width:1100px){.import-source-controls{align-items:stretch;flex-direction:column}.import-control-grid{min-width:0;width:100%;grid-template-columns:1fr 1fr}.import-default-grid{grid-template-columns:1fr 1fr}.import-map-head{display:block}.import-map-head .table-actions{margin-top:10px;flex-wrap:wrap}}@media(max-width:680px){.import-control-grid,.import-default-grid{grid-template-columns:1fr}.import-mapping-table-wrap{max-height:none}}

/* v141: voortgangslijst verwijderen */
.row-actions{display:flex;align-items:center;gap:6px;white-space:nowrap}

/* v142: gecombineerde import, stabiele kolomkeuze en vaste versiepanelen */
.import-mapping-section + .import-mapping-section{margin-top:24px;padding-top:22px;border-top:1px solid var(--line)}
.import-final-action{margin-top:16px;position:sticky;bottom:10px;z-index:3;padding:10px 0;background:linear-gradient(to bottom,rgba(255,255,255,0),#fff 28%)}
.combined-import-source-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:14px 0}
.combined-source-card{display:grid;gap:9px;padding:14px;border:1px solid var(--line);border-radius:12px;background:#fbfcfe}
.combined-source-card>b{font-size:14px;color:#111b3f}
.combined-source-card label{display:grid;gap:5px}
.combined-source-card label>span{font-size:11px;font-weight:850;color:#56617d}
.import-duplicate-notice:empty{display:none}
.import-map-error:empty{display:none}
.versions-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;align-items:stretch;height:calc(100vh - 154px);min-height:520px;overflow:hidden}
.version-panel{display:flex;flex-direction:column;min-height:0;overflow:hidden}
.version-panel-head{flex:0 0 auto;padding-bottom:10px;border-bottom:1px solid var(--line)}
.version-panel-head h2{margin-bottom:4px}
.version-scroll{flex:1 1 auto;min-height:0;overflow:auto;padding-right:6px;padding-top:12px;overscroll-behavior:contain}
.version-section-title{margin-top:22px}
.version-scroll .route-list{margin-top:10px}
.version-scroll .route-item{align-items:flex-start}
@media(max-width:1050px){.combined-import-source-grid{grid-template-columns:1fr}.versions-layout{grid-template-columns:1fr;height:auto;overflow:visible}.version-panel{height:min(62vh,620px)}}

/* v144: persoonlijke kolomkiezer voortgangslijst */
.progress-table-head{align-items:flex-start;gap:16px;position:relative}
.progress-table-head>div:first-child{min-width:0}
.progress-column-chooser-wrap{position:relative;margin-left:auto;flex:0 0 auto}
.progress-column-chooser{position:absolute;right:0;top:calc(100% + 7px);z-index:35;width:330px;max-height:min(620px,72vh);overflow:auto;padding:12px;background:#fff;border:1px solid var(--line);border-radius:13px;box-shadow:0 14px 38px rgba(17,27,63,.16)}
.progress-column-chooser-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:5px}
.progress-column-chooser-head b{font-size:14px;color:#111b3f}
.progress-column-list{display:grid;gap:5px;margin-top:11px}
.progress-column-item{display:block;min-height:36px;padding:5px 8px;border:1px solid #e6ebf2;border-radius:9px;background:#fbfcfe}
.progress-column-item:hover{border-color:#cbd7e5;background:#fff}
.progress-column-item label{display:flex;align-items:center;gap:8px;min-height:24px;cursor:pointer;font-size:12px;font-weight:800;color:#384664}
.progress-column-item input{margin:0}
.text-button{border:0;background:transparent;color:var(--blue);font-size:11px;font-weight:850;cursor:pointer;padding:4px}
.text-button:hover{text-decoration:underline}
.progress-table-scroll{width:100%;overflow:auto}
.progress-data-table{min-width:max-content;width:100%}
.progress-data-table th,.progress-data-table td{white-space:nowrap}
.progress-data-table td[data-progress-column="complex"],.progress-data-table td[data-progress-column="address"]{white-space:normal;min-width:180px}
.progress-fixed-select{width:38px;min-width:38px}
.progress-fixed-actions{min-width:118px;white-space:nowrap}
@media(max-width:700px){.progress-table-head{display:flex}.progress-column-chooser{position:fixed;left:12px;right:12px;top:88px;width:auto;max-height:calc(100vh - 110px)}}

/* v145: kolomvolgorde rechtstreeks via de tabelkop */
.progress-data-table th.progress-column-draggable{position:relative;cursor:grab;user-select:none;padding-right:24px;transition:background .12s ease,box-shadow .12s ease,opacity .12s ease}
.progress-data-table th.progress-column-draggable:active{cursor:grabbing}
.progress-data-table th.progress-column-draggable.dragging{opacity:.48}
.progress-data-table th.progress-column-draggable.drag-over{background:#edf5fb;box-shadow:inset 3px 0 0 var(--blue)}
.progress-header-label{display:inline-block}
.progress-header-drag{position:absolute;right:7px;top:50%;transform:translateY(-50%);font-size:11px;letter-spacing:-3px;color:#8b95a8;opacity:.72;pointer-events:none}
.progress-data-table th.progress-column-draggable:hover .progress-header-drag{opacity:1;color:#536784}

/* v9.147 - routeplanning met voortgangsfilters, kaartselectie en OpenRouteService */
.route-page-layout{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(360px,.65fr);gap:16px;align-items:start}
.route-map-panel{min-width:0}
.route-control-panel{min-width:0;position:sticky;top:82px;max-height:calc(100vh - 104px);overflow:auto}
.route-main-map{height:clamp(560px,72vh,820px)!important;min-height:560px!important}
.route-filter-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-bottom:12px}
.route-filter-grid label,.route-endpoint-grid label{font-size:12px;color:#56617d;font-weight:800}
.route-filter-grid label span,.route-endpoint-grid label span{display:block;margin-bottom:5px}
.route-endpoint-grid{display:grid;grid-template-columns:1fr;gap:10px;margin-top:12px;padding-top:12px;border-top:1px solid var(--line)}
.route-selection-summary{display:flex;justify-content:space-between;gap:10px;align-items:flex-start;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:#fbfcfe;font-size:12px}
.route-selection-summary b{color:#111b3f}.route-selection-summary span{color:#66718f;text-align:right}
.route-manual-box{border:1px solid var(--line);border-radius:12px;background:#fbfcfe;padding:12px}
.route-manual-box>b{display:block;color:#111b3f;margin-bottom:4px}
.route-manual-actions{display:flex;align-items:center;gap:8px;margin-top:10px;flex-wrap:wrap}
.route-selected-chips{display:flex;gap:6px;flex-wrap:wrap;margin-top:9px;max-height:92px;overflow:auto}
.route-selected-chips span{font-size:11px;font-weight:800;color:#384664;background:#fff;border:1px solid var(--line);border-radius:999px;padding:4px 8px}
.route-actionbar{position:sticky;bottom:-1px;z-index:2;padding:10px 0;background:linear-gradient(180deg,rgba(255,255,255,.2),#fff 28%)}
.route-status{margin:0 0 10px;padding:9px 11px;border-radius:10px;font-size:12px;font-weight:750;border:1px solid var(--line);background:#f7f9fc;color:#384664}
.route-status.loading{border-color:#b9def1;background:#f1f9fd;color:#076a9e}
.route-status.success{border-color:#b8e7d1;background:#f1fbf6;color:#087446}
.route-status.warning{border-color:#ffd9a0;background:#fff8ed;color:#865200}
.route-status.error{border-color:#ffccd1;background:#fff3f4;color:#9a1725}
.route-empty{padding:12px;border:1px dashed var(--line2);border-radius:10px;color:#66718f;font-size:12px;background:#fbfcfe}
.route-summary{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}
.route-summary>div{min-width:0}.route-summary small{display:block;margin-top:4px;color:#66718f;line-height:1.35}
.route-summary.live{border-color:#b8e7d1;background:#f4fbf7}.route-summary.fallback{border-color:#ffd9a0;background:#fff9ef}
.route-leg-meta{margin-top:4px;font-size:11px;color:#53607c}.route-leg-meta b{color:#111b3f}.route-delay{color:#b44f00;font-weight:800}
.route-item-actions{display:flex;gap:6px;align-items:center;flex:0 0 auto}
.marker-dot.route-selected-marker{outline:4px solid rgba(17,27,63,.92);outline-offset:2px;transform:scale(1.06);z-index:5}
.marker-dot.route-candidate-marker{box-shadow:0 0 0 4px rgba(40,167,232,.3),0 4px 12px rgba(42,13,64,.28)}
.legend-ring{width:12px;height:12px;border-radius:50%;display:inline-block;border:3px solid #111b3f;background:#fff}
.legend-line{width:25px;height:0;border-top:5px solid #7328a7;border-radius:999px;display:inline-block}
.legend-line.traffic-normal{border-color:#20a36a}.legend-line.traffic-slow{border-color:#f0a11b}.legend-line.traffic-jam{border-color:#d53a48}
.leaflet-overlay-pane path.traffic-normal{stroke:#20a36a!important}.leaflet-overlay-pane path.traffic-slow{stroke:#f0a11b!important}.leaflet-overlay-pane path.traffic-jam{stroke:#d53a48!important}
.route-popup-selection{margin-top:5px;padding-top:5px;border-top:1px solid #e5eaf1;color:#5b2382}
@media(max-width:1300px){.route-page-layout{grid-template-columns:minmax(0,1.35fr) minmax(340px,.65fr)}.route-filter-grid{grid-template-columns:1fr}}

.legend-line.route-ors{border-color:#7328a7}
.leaflet-overlay-pane path.route-ors{stroke:#7328a7!important}

/* v9.149 - voortgang alleen bij gekoppelde rol + schermbrede responsive layout */
html,body{max-width:100%;overflow-x:hidden}
.app-shell{width:100%;min-width:0;grid-template-columns:232px minmax(0,1fr)}
.main{width:100%;min-width:0;max-width:100%;overflow-x:hidden}
#app{width:100%;min-width:0;max-width:100%}
.card,.panel,.dashboard-grid,.page-grid,.detail-layout,.route-page-layout,.diagnostic-layout,.versions-layout{min-width:0;max-width:100%}
.dashboard-grid>*,.page-grid>*,.detail-layout>*,.route-page-layout>*{min-width:0}
.progress-page-panel{width:100%;min-width:0;max-width:100%;overflow:hidden}
.progress-controls-scroll{width:100%;max-width:100%;overflow-x:auto;overscroll-behavior-x:contain;padding:0 0 5px;margin-bottom:8px;scrollbar-gutter:stable}
.progress-controls-scroll .toolbar,.progress-controls-scroll .bulkbar{width:max-content;min-width:100%;max-width:none;flex-wrap:nowrap}
.progress-controls-scroll .toolbar{margin-bottom:10px}
.progress-controls-scroll .toolbar.sticky{position:static;padding:4px 0;background:transparent;backdrop-filter:none}
.progress-controls-scroll .search{flex:0 0 280px}
.progress-controls-scroll select,.progress-controls-scroll .btn,.progress-controls-scroll input{flex:0 0 auto}
.progress-table-scroll{width:100%;max-width:100%;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-gutter:stable}
.progress-not-applicable{display:inline-block;min-width:54px;text-align:center;color:#9aa4b5;font-weight:800}
.progress-assignment-empty{margin:9px 0 10px;padding:9px 10px;border:1px dashed #d8e0ea;border-radius:9px;background:#f7f9fc;color:#7b8599;font-size:12px;font-weight:750}
.hours-not-applicable{opacity:.58}.hours-not-applicable input:disabled{background:#f3f5f8;color:#8993a6;cursor:not-allowed}
@media(max-width:1200px){
  .app-shell{min-width:0;grid-template-columns:210px minmax(0,1fr)}
  .main{padding:18px 18px 24px}
  .topbar{grid-template-columns:minmax(0,1fr) auto;gap:14px}
  .topbar .top-icons{justify-self:end}
  .project-select-wrap{min-width:0}
  .selector,.selector.small{min-width:0;max-width:min(360px,100%)}
}
@media(max-width:900px){
  .app-shell{grid-template-columns:184px minmax(0,1fr)}
  .main{padding:14px 12px 22px}
  .topbar{grid-template-columns:1fr;gap:10px}
  .top-icons{justify-self:start!important}
  .dashboard-grid{gap:10px}
  .kpi-card,.progress-card,.small-card,.small-card.wide,.map-card{grid-column:span 12}
}


/* v9.151 - filters stabiel + bulkacties in exact twee rijen */
.progress-controls-scroll .bulkbar{
  width:100%;
  min-width:0;
  max-width:100%;
  display:grid;
  grid-template-rows:auto auto;
  gap:8px;
  overflow:visible;
  flex-wrap:unset;
}
.bulkbar-row{
  width:100%;
  min-width:0;
  display:grid;
  align-items:center;
  gap:8px;
}
.bulkbar-row:first-child{
  grid-template-columns:auto auto auto minmax(120px,1fr) auto minmax(120px,1fr) auto;
}
.bulkbar-row:last-child{
  grid-template-columns:minmax(125px,.8fr) auto minmax(115px,1fr) auto minmax(115px,1fr) auto auto auto auto;
}
.bulkbar-row>*{min-width:0;max-width:100%}
.bulkbar-row select,.bulkbar-row input{width:100%}
.bulkbar-row .btn{white-space:nowrap}
.progress-filterbar select{min-width:150px}
@media(max-width:1100px){
  .bulkbar-row:first-child{grid-template-columns:auto auto auto minmax(115px,1fr) auto minmax(115px,1fr) auto}
  .bulkbar-row:last-child{grid-template-columns:minmax(120px,.8fr) auto minmax(110px,1fr) auto minmax(110px,1fr) auto auto auto auto}
  .bulkbar-row .btn{padding-left:8px;padding-right:8px}
}
@media(max-width:820px){
  .progress-controls-scroll .bulkbar{display:flex;flex-direction:column;align-items:stretch}
  .bulkbar-row{display:flex;flex-wrap:wrap}
  .bulkbar-row select,.bulkbar-row input{width:auto;min-width:135px;flex:1 1 135px}
}

/* v9.152 - kolomfilters, urenvoortgang en compacte filterkop */
.progress-column-filter-row th{padding:6px 8px;background:#f8fafc;border-top:1px solid #e7ebf1;vertical-align:middle}
.progress-column-filter-row .progress-fixed-select,.progress-column-filter-row .progress-fixed-actions{background:#f8fafc}
.progress-column-filter{width:100%;min-width:92px;max-width:210px;height:30px;padding:4px 7px;border:1px solid #dce3ec;border-radius:7px;background:#fff;color:#34415e;font-size:11px;font-weight:650;outline:none}
.progress-column-filter:focus{border-color:#63b9e5;box-shadow:0 0 0 2px rgba(40,167,232,.12)}
.progress-column-filter-row th[data-progress-column="complex"] .progress-column-filter,
.progress-column-filter-row th[data-progress-column="address"] .progress-column-filter{min-width:170px}
.hours-progress-cell{display:grid;gap:2px;min-width:150px;line-height:1.2}
.hours-progress-cell>b{font-size:12px;color:#17213f}
.hours-progress-cell>small{font-size:10px;color:#6c7891;font-weight:650}
.hours-progress-cell>span{font-size:10px;font-weight:850}
.hours-progress-cell .hours-over{color:#bd2837}.hours-progress-cell .hours-ok{color:#177451}

/* v9.153 - zichtbare centrale opslagstatus */
.planning-save-status{display:inline-flex;align-items:center;justify-content:center;min-width:78px;height:30px;padding:0 10px;border-radius:999px;font-size:11px;font-weight:700;white-space:nowrap;border:1px solid #d7dde2;background:#f6f8f9;color:#53606a}
.planning-save-status.saving{background:#fff7df;border-color:#ecd793;color:#755b00}
.planning-save-status.saved{background:#eef8f2;border-color:#b9ddc5;color:#28633b}
.planning-save-status.error{background:#fff0f0;border-color:#e9b9b9;color:#a12525}

/* v9.154 - cache-first laadstatus */
.planning-save-status.cached{background:#eef4ff;border-color:#bfd0ef;color:#315b91}

/* v9.158 - persoonlijke kolombreedtes, stabiele kolomfilters en geocodecontrole */
.progress-data-table{table-layout:fixed;width:max-content;min-width:100%}
.progress-data-table th[data-progress-column],.progress-data-table td[data-progress-column]{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis}
.progress-data-table td[data-progress-column="complex"],.progress-data-table td[data-progress-column="address"],.progress-data-table td[data-progress-column="hours"]{white-space:normal}
.progress-data-table th.progress-column-draggable{padding-right:28px}
.progress-column-resizer{position:absolute;top:0;right:-3px;width:9px;height:100%;cursor:col-resize;z-index:6;touch-action:none}
.progress-column-resizer::after{content:"";position:absolute;top:20%;bottom:20%;left:4px;width:1px;background:transparent;transition:background .12s ease}
.progress-data-table th.progress-column-draggable:hover .progress-column-resizer::after,.progress-column-resizing .progress-column-resizer::after{background:#9db4ca}
.progress-column-resizing,.progress-column-resizing *{cursor:col-resize!important;user-select:none!important}
.geocode-status-panel{display:grid;gap:8px}
.geocode-issue-details{border:1px solid #e1e7ee;border-radius:9px;background:#fff;overflow:hidden}
.geocode-issue-details summary{cursor:pointer;padding:8px 10px;font-size:12px;font-weight:800;color:#384664;background:#f8fafc}
.geocode-issue-list{max-height:260px;overflow:auto;padding:6px;display:grid;gap:5px}
.geocode-issue-row{width:100%;display:grid;gap:2px;text-align:left;border:1px solid #e8edf3;background:#fff;border-radius:8px;padding:8px 9px;cursor:pointer;color:#34415e}
.geocode-issue-row:hover{border-color:#9fc9e2;background:#f8fcff}
.geocode-issue-row b{font-size:12px}.geocode-issue-row span{font-size:11px}.geocode-issue-row small{font-size:10px;color:#718096}

/* v9.159 - werkende kolomfilters en onafhankelijke resizegreep */
.progress-data-table th.progress-column-draggable{position:relative}
.progress-column-resizer{right:0;width:12px;z-index:20;background:transparent}
.progress-column-resizer:hover::after,.progress-column-resizing .progress-column-resizer::after{background:#4b9bc6!important;width:2px}
.progress-column-resizing .progress-data-table th.progress-column-draggable{cursor:col-resize!important}
.progress-column-resizing .progress-header-drag{pointer-events:none!important}

/* v9.161 realtime samenwerking */
.planning-realtime-status{display:inline-flex;align-items:center;justify-content:center;min-width:48px;height:30px;padding:0 9px;border-radius:999px;font-size:11px;font-weight:800;white-space:nowrap;border:1px solid #c5dfcb;background:#eef8f2;color:#28633b}
.planning-realtime-status.connecting{background:#eef4ff;border-color:#bfd0ef;color:#315b91}
.planning-realtime-status.error{background:#fff0f0;border-color:#e9b9b9;color:#a12525}
.planning-realtime-status.hide{display:none}
