:root{--bg:#f1f1f1;--bg-accent:#e6e6e6;--surface:#fff;--surface-soft:#f7f7f7;--text:#151515;--text-muted:#5b5b5b;--border:#d7d7d7;--shadow-soft:0 8px 20px #00000014;--shadow-strong:0 20px 46px #0000002e;--brand:#8e092c;--brand-strong:#6b0721}body{color:var(--text);background:radial-gradient(circle at 14% 8%,#fff 0%,#f1f1f1 35%,#0000 62%),radial-gradient(circle at 92% 4%,#e2e2e2 0%,#0000 45%),linear-gradient(#f7f7f7 0%,#eee 100%);margin:0;font-family:Segoe UI,Aptos,Helvetica Neue,sans-serif}a{color:inherit}:root{--brand:#3f7d54;--brand-dark:#2c5a3c;--brand-050:#eaf3ec;--sidebar-bg:#1f2a24;--sidebar-fg:#cdd8d0;--sidebar-active:#33463a;--bg:#f4f6f4;--card:#fff;--line:#e4e8e5;--text:#1d2621;--muted:#6b7770;--shadow:0 1px 3px #0000000f, 0 1px 2px #0000000a;--ok:#2e7d46;--ok-bg:#e7f4ea;--warn:#b7791f;--warn-bg:#fbf1dc;--info:#2563a8;--info-bg:#e5eef8;--idle:#5b6b62;--idle-bg:#eceeed;--danger:#c0392b;--danger-bg:#fbe9e7}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;font-family:-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif}.app{height:100vh;display:flex;overflow:hidden}.sidebar{background:var(--sidebar-bg);width:232px;color:var(--sidebar-fg);flex-direction:column;flex:0 0 232px;gap:4px;padding:18px 12px;display:flex}.sidebar .brand{align-items:center;gap:10px;padding:6px 10px 18px;display:flex}.sidebar .brand .logo{background:var(--brand);color:#fff;border-radius:8px;place-items:center;width:30px;height:30px;font-weight:800;display:grid}.sidebar .brand b{color:#fff;letter-spacing:.2px;font-size:15px}.nav-item{color:var(--sidebar-fg);cursor:pointer;text-align:left;background:0 0;border:none;border-radius:8px;align-items:center;gap:10px;width:100%;padding:10px 12px;font-size:14px;display:flex}.nav-item:hover{background:#ffffff0f}.nav-item.active{background:var(--sidebar-active);color:#fff;font-weight:600}.sidebar .spacer{flex:1}.sidebar .foot{color:#7d8b82;padding:8px 10px;font-size:11px}.main{flex-direction:column;flex:1;display:flex;overflow-y:auto}.topbar{border-bottom:1px solid var(--line);background:var(--card);align-items:center;gap:16px;padding:18px 28px;display:flex}.topbar h1{margin:0;font-size:20px;font-weight:700}.topbar .search{margin-left:auto}.search input{border:1px solid var(--line);background:#fbfcfb;border-radius:8px;width:320px;max-width:40vw;padding:9px 14px;font-size:14px}.content{padding:22px 28px}.kpis{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px;margin-bottom:20px;display:grid}.kpi{background:var(--card);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:12px;padding:16px 18px}.kpi .val{font-size:30px;font-weight:800;line-height:1}.kpi .lbl{color:var(--muted);margin-top:8px;font-size:13px}.kpi .val.brand{color:var(--brand)}.toolbar{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:14px;display:flex}.toolbar select{border:1px solid var(--line);background:var(--card);color:var(--text);border-radius:8px;padding:8px 10px;font-size:13px}.seg{background:#e9ede9;border-radius:9px;margin-left:auto;padding:3px;display:inline-flex}.seg button{cursor:pointer;color:var(--muted);background:0 0;border:none;border-radius:7px;padding:7px 16px;font-size:13px;font-weight:600}.seg button.active{background:var(--card);color:var(--brand-dark);box-shadow:var(--shadow)}.count-badge{background:var(--brand-050);color:var(--brand-dark);border-radius:20px;padding:3px 10px;font-size:12px;font-weight:700}.card-surface{background:var(--card);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:12px;overflow:hidden}table.grid{border-collapse:collapse;width:100%;font-size:13.5px}table.grid th{text-align:left;color:var(--muted);text-transform:uppercase;letter-spacing:.4px;border-bottom:1px solid var(--line);background:#fafbfa;padding:12px 16px;font-size:11.5px}table.grid th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}table.grid th.sortable:hover{color:var(--brand-dark)}table.grid td{border-bottom:1px solid var(--line);vertical-align:middle;padding:12px 16px}table.grid tr:last-child td{border-bottom:none}table.grid tbody tr{cursor:pointer}table.grid tbody tr:hover{background:#f7faf8}table.grid.compact{font-size:13px}table.grid.compact th{padding:8px 12px}table.grid.compact td{white-space:nowrap;padding:7px 12px}.uren-scroll{max-height:calc(100vh - 300px);overflow:auto}table.grid.sticky thead th{z-index:3;position:sticky;top:0}.kpis.kpis-sm{grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px;margin-bottom:16px}.kpis.kpis-sm .kpi{padding:12px 14px}.kpis.kpis-sm .kpi .val{font-size:22px}.kpis.kpis-sm .kpi .lbl{margin-top:5px;font-size:12px}.colbar{justify-content:flex-end;margin-bottom:8px;display:flex;position:relative}.colpanel{background:var(--card);border:1px solid var(--line);box-shadow:var(--shadow);z-index:10;border-radius:10px;gap:7px;padding:10px 12px;display:grid;position:absolute;top:32px;right:0}.colpanel label{white-space:nowrap;cursor:pointer;align-items:center;gap:7px;font-size:13px;display:flex}.proj-name{font-weight:700}.proj-sub{color:var(--muted);font-size:12px}.pill{white-space:nowrap;border-radius:20px;padding:3px 10px;font-size:12px;font-weight:600;display:inline-block}.pill.ok{background:var(--ok-bg);color:var(--ok)}.pill.warn{background:var(--warn-bg);color:var(--warn)}.pill.info{background:var(--info-bg);color:var(--info)}.pill.idle{background:var(--idle-bg);color:var(--idle)}.pill.danger{background:var(--danger-bg);color:var(--danger)}.budget{min-width:150px}.budget .bar{background:#eaeee9;border-radius:6px;height:8px;overflow:hidden}.budget .bar>span{background:var(--brand);height:100%;display:block}.budget .bar>span.over{background:var(--danger)}.budget .meta{color:var(--muted);margin-top:5px;font-size:11.5px}.avatar{background:var(--brand);color:#fff;border-radius:50%;flex:none;place-items:center;width:28px;height:28px;font-size:11px;font-weight:700;display:inline-grid}.respcell{align-items:center;gap:8px;display:inline-flex}.respname{white-space:nowrap;font-size:12.5px}.linkcell{gap:6px;display:inline-flex}.linkbtn{white-space:nowrap;border:1px solid #0000;border-radius:7px;padding:3px 10px;font-size:12px;font-weight:600;text-decoration:none;display:inline-block}.linkbtn.teams{color:#4b45b8;background:#eae8fb}.linkbtn.teams:hover{background:#ded9f8}.linkbtn.site{background:var(--brand-050);color:var(--brand-dark)}.linkbtn.site:hover{background:#d9eadd}.linkbtn.map{color:#a4632a;background:#fbeee0}.linkbtn.map:hover{background:#f6e2cc}.linkbtn.taken{color:#2f6fb0;cursor:pointer;background:#e7f0f8;border:none;font-family:inherit}.linkbtn.taken:hover{background:#d8e7f4}.kanban{align-items:flex-start;gap:14px;padding-bottom:8px;display:flex;overflow-x:auto}.kan-col{background:#eef1ee;border-radius:12px;flex:0 0 268px;padding:10px}.kan-col h3{text-transform:uppercase;letter-spacing:.4px;color:var(--muted);justify-content:space-between;margin:4px 6px 10px;font-size:12.5px;display:flex}.kan-card{background:var(--card);border:1px solid var(--line);box-shadow:var(--shadow);cursor:pointer;border-radius:10px;margin-bottom:10px;padding:12px}.kan-card:hover{border-color:var(--brand)}.kan-card .kn{font-size:13.5px;font-weight:700}.kan-card .kc{color:var(--muted);margin:2px 0 8px;font-size:12px}.drawer-backdrop{z-index:40;background:#141c1859;justify-content:flex-end;display:flex;position:fixed;inset:0}.drawer{background:var(--card);width:460px;max-width:92vw;height:100%;animation:.18s slide;overflow-y:auto;box-shadow:-4px 0 24px #0000002e}@keyframes slide{0%{opacity:.6;transform:translate(30px)}to{opacity:1;transform:none}}.drawer .dh,.modal .dh{border-bottom:1px solid var(--line);background:var(--card);z-index:1;padding:20px 24px;position:sticky;top:0}.drawer .dh h2,.modal .dh h2{margin:0 0 4px;padding-right:34px;font-size:18px}.drawer .db,.modal .db{padding:20px 24px}.drawer .close,.modal .close{cursor:pointer;width:30px;height:30px;color:var(--text);background:#eef1ee;border:none;border-radius:8px;place-items:center;font-size:16px;display:grid;position:absolute;top:18px;right:20px}.drawer .close:hover,.modal .close:hover{background:#e2e6e2}.field-row{border-bottom:1px dashed var(--line);justify-content:space-between;padding:9px 0;font-size:14px;display:flex}.field-row .k{color:var(--muted)}.field-row .v{text-align:right;font-weight:600}.budget-box{background:var(--brand-050);border:1px solid #d3e6d8;border-radius:12px;margin-top:16px;padding:16px}.budget-box h4{text-transform:uppercase;letter-spacing:.3px;color:var(--brand-dark);margin:0 0 12px;font-size:13px}.budget-box .big{font-size:26px;font-weight:800}.budget-box .big.over{color:var(--danger)}.budget-box .bar{background:#d7e5da;border-radius:6px;height:10px;margin:12px 0 6px;overflow:hidden}.budget-box .bar>span{background:var(--brand);height:100%;display:block}.budget-box .bar>span.over{background:var(--danger)}.state{text-align:center;color:var(--muted);padding:60px 20px}.link{color:var(--brand-dark);font-weight:600;text-decoration:none}.link:hover{text-decoration:underline}.muted{color:var(--muted)}.app-shell{padding:40px}.admin-grid{grid-template-columns:repeat(auto-fit,minmax(360px,1fr));align-items:start;gap:22px;display:grid}.admin-card{overflow:hidden}.admin-h{border-bottom:1px solid var(--line);padding:16px 18px;font-size:15px;font-weight:700}.admin-h .muted{font-size:12px;font-weight:400}.admin-body{padding:12px 18px 18px}.cfg-row{align-items:center;gap:8px;padding:4px 0;display:flex}.cfg-row input,.cfg-add input{border:1px solid var(--line);min-width:0;color:var(--text);background:#fbfcfb;border-radius:8px;flex:auto;padding:8px 10px;font-size:14px}.cfg-row input.vol,.cfg-add input.vol{text-align:center;flex:0 0 58px}.cfg-row>span{overflow-wrap:anywhere;min-width:0;font-size:12.5px;line-height:1.3}.cfg-row select,.cfg-add select,.cfg-row button,.cfg-add button,.cfg-row>div{flex-shrink:0}.cfg-row .linkbtn.danger{cursor:pointer;border:none;padding:4px 10px}.cfg-add{border-top:1px dashed var(--line);align-items:center;gap:8px;margin-top:12px;padding-top:14px;display:flex}.with-facets{align-items:flex-start;gap:22px;padding:22px 28px;display:flex}.facets{background:var(--card);border:1px solid var(--line);width:232px;box-shadow:var(--shadow);border-radius:12px;flex:0 0 232px;padding:16px 16px 6px;position:sticky;top:22px}.facet-content{flex:1;min-width:0}.facets-head{justify-content:space-between;align-items:center;margin-bottom:14px;display:flex}.facets-head b{font-size:14px}.facets .clearbtn{color:var(--brand-dark);cursor:pointer;background:0 0;border:none;padding:0;font-size:12.5px;font-weight:600}.facet{margin-bottom:14px}.facet .hdr{text-transform:uppercase;letter-spacing:.4px;color:var(--muted);margin-bottom:6px;font-size:11px;font-weight:700;display:block}.facet .hdr.hdr-row{justify-content:space-between;align-items:center;display:flex}.facet .hdr .clearbtn{text-transform:none;letter-spacing:0}.facet select,.facet input{border:1px solid var(--line);width:100%;color:var(--text);background:#fbfcfb;border-radius:8px;padding:8px 10px;font-size:13px}.modal{background:var(--card);border-radius:14px;width:460px;max-width:92vw;max-height:90vh;margin:auto;animation:.18s slide;overflow-y:auto;box-shadow:0 20px 60px #00000040}.modal-wide{width:780px}.klant-form{grid-template-columns:1fr 1fr;gap:0 18px;display:grid}@media (width<=680px){.klant-form{grid-template-columns:1fr}}.tabbar{border-bottom:1px solid var(--line);flex-wrap:wrap;gap:2px;margin-bottom:20px;display:flex}.tabbar button{color:var(--muted);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-1px;padding:10px 18px;font-family:inherit;font-size:14px;font-weight:600}.tabbar button:hover{color:var(--text)}.tabbar button.active{color:var(--brand-dark);border-bottom-color:var(--brand)}.site-row{border-bottom:1px solid var(--line);grid-template-columns:160px 1fr 1fr auto;align-items:end;gap:10px;padding:10px 0;display:grid}.site-row:last-child{border-bottom:0}.site-naam{align-self:center;font-size:14px;font-weight:600}.site-fld{flex-direction:column;gap:3px;min-width:0;display:flex}.site-fld>span{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;font-size:11px}.site-fld input{border:1px solid var(--line);color:var(--text);background:#fbfcfb;border-radius:7px;min-width:0;padding:7px 9px;font-family:inherit;font-size:12.5px}.btn-primary.sm{padding:7px 12px;font-size:12.5px}@media (width<=720px){.site-row{grid-template-columns:1fr;align-items:stretch}}.status-sel{border:1px solid var(--line);cursor:pointer;color:var(--text);background:#f4f6f4;border-radius:6px;padding:3px 7px;font-family:inherit;font-size:12.5px;font-weight:600}.status-sel.idle{color:#55605a;background:#eef1ee}.status-sel.info{color:#2f6fb0;background:#e7f0f8;border-color:#c2d8ec}.status-sel.warn{color:#a25a00;background:#fff4e0;border-color:#f0d9a8}.status-sel.danger{background:var(--danger-bg);color:var(--danger);border-color:#f0c9c3}.status-sel.ok{color:#1f7a3d;background:#e6f4ea;border-color:#b8e0c4}.grid-total td{border-top:2px solid var(--line);color:var(--text);background:#f6f8f6;font-weight:700}.checklist{border:1px solid var(--line);background:#fbfcfb;border-radius:8px;flex-direction:column;gap:6px;padding:8px;display:flex}.cl-item{align-items:center;gap:8px;display:flex}.cl-item input[type=checkbox]{cursor:pointer;flex:none;width:16px;height:16px}.cl-text{min-width:0;color:var(--text);background:0 0;border:1px solid #0000;border-radius:6px;flex:1;padding:6px 8px;font-family:inherit;font-size:13.5px}.cl-text:hover,.cl-text:focus{border-color:var(--line);background:var(--card);outline:none}.cl-add{gap:6px;margin-top:2px;display:flex}.cl-add input{border:1px dashed var(--line);background:0 0;border-radius:6px;flex:1;min-width:0;padding:7px 9px;font-family:inherit;font-size:13.5px}.cl-badge{color:var(--muted);vertical-align:middle;background:#eef1ee;border-radius:20px;margin-left:8px;padding:1px 7px;font-size:11px;font-weight:600;display:inline-block}.jaar-chart{align-items:flex-end;gap:16px;padding-top:6px;display:flex;overflow-x:auto}.jaar-col{flex-direction:column;flex:1 1 0;align-items:center;gap:5px;min-width:56px;display:flex}.jaar-val{color:var(--text);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:12px;font-weight:700}.jaar-bar-wrap{align-items:flex-end;width:46px;height:160px;display:flex}.jaar-stack{background:#eef0ee;border-radius:7px 7px 0 0;flex-direction:column;justify-content:flex-end;width:100%;height:100%;display:flex;overflow:hidden}.jaar-label{color:var(--text);font-size:12.5px;font-weight:700}.kb-col{background:#f1f4f1;border-radius:12px;flex:0 0 264px;min-height:120px;padding:8px}.kb-col.over{outline:2px dashed var(--brand);outline-offset:-2px;background:#e3ece4}.kb-head{color:var(--text);align-items:center;gap:7px;padding:4px 6px 10px;font-size:13px;font-weight:700;display:flex}.kb-dot{border-radius:50%;flex:none;width:9px;height:9px;display:inline-block}.kb-count{background:var(--card);color:var(--muted);border-radius:20px;margin-left:auto;padding:1px 9px;font-size:12px;font-weight:600}.kb-body{flex-direction:column;gap:8px;display:flex}.kb-card{background:var(--card);border:1px solid var(--line);border-left:3px solid var(--line);cursor:pointer;box-shadow:var(--shadow);border-radius:8px;padding:9px 10px}.kb-card:hover{border-color:var(--brand)}.kb-card:active{cursor:grabbing}.kb-title{color:var(--text);font-size:13.5px;font-weight:600}.kb-meta{color:var(--muted);margin-top:2px;font-size:12px}.kb-foot{justify-content:space-between;align-items:center;gap:6px;margin-top:8px;font-size:11.5px;display:flex}.kb-late{color:var(--danger);font-weight:600}.kb-wie{color:#55605a;white-space:nowrap;background:#eef1ee;border-radius:20px;padding:1px 8px}.kb-empty{text-align:center;color:var(--muted);padding:14px 0;font-size:12px}.fld{flex-direction:column;gap:5px;margin-bottom:14px;display:flex}.fld>span{color:var(--text);font-size:13px;font-weight:600}.fld select,.fld input,.fld textarea{border:1px solid var(--line);color:var(--text);background:#fbfcfb;border-radius:8px;padding:9px 11px;font-family:inherit;font-size:14px}.fld textarea{resize:vertical}.fld select:disabled{color:var(--muted);background:#f0f2f0}.fld-row{gap:12px;display:flex}.fld-row .fld{flex:1}.fld-check{cursor:pointer;align-items:center;gap:8px;margin-bottom:14px;font-size:14px;display:flex}.form-error{background:var(--danger-bg);color:var(--danger);border-radius:8px;margin-bottom:12px;padding:9px 12px;font-size:13px}.form-actions{justify-content:flex-end;gap:10px;margin-top:6px;display:flex}.btn-primary{background:var(--brand);color:#fff;cursor:pointer;border:none;border-radius:8px;padding:10px 18px;font-size:14px;font-weight:600}.btn-primary:hover{background:var(--brand-dark)}.btn-primary:disabled{opacity:.6;cursor:default}.btn-ghost{color:var(--text);cursor:pointer;background:#eef1ee;border:none;border-radius:8px;padding:10px 18px;font-size:14px;font-weight:600}.btn-ghost:disabled{opacity:.5;cursor:default}.btn-ghost.sm{padding:6px 12px;font-size:12.5px}.navrow{justify-content:space-between;align-items:center;gap:8px;margin-bottom:12px;padding-right:34px;display:flex}.mini{color:var(--muted);align-items:center;gap:5px;font-size:12px;display:inline-flex}.mini input{border:1px solid var(--line);border-radius:7px;padding:6px 8px;font-size:12px}.omschr{text-overflow:ellipsis;white-space:nowrap;max-width:320px;color:var(--muted);font-size:12.5px;overflow:hidden}.acties{white-space:nowrap}.acties .linkbtn{cursor:pointer;border:none;margin-left:4px}.acties .btn-ghost+.btn-ghost{margin-left:8px}.linkbtn.danger{background:var(--danger-bg);color:var(--danger)}.linkbtn.danger:hover{background:#f6d9d4}.selbar{background:var(--brand-050);border:1px solid #d3e6d8;border-radius:10px;align-items:center;gap:12px;margin-bottom:14px;padding:10px 14px;font-size:14px;display:flex}.selbar .btn-ghost{margin-left:auto}.export-msg{color:var(--brand-dark);background:#eef6f0;border:1px solid #d3e6d8;border-radius:8px;margin-bottom:14px;padding:10px 14px;font-size:13.5px}table.grid tr.row-sel{background:var(--brand-050)}.toasts{z-index:1000;flex-direction:column;gap:10px;max-width:340px;display:flex;position:fixed;bottom:18px;right:18px}.toast{background:var(--card);border:1px solid var(--line);border-left:4px solid var(--brand);border-radius:10px;padding:12px 34px 12px 14px;animation:.18s slide;position:relative;box-shadow:0 8px 28px #00000029}.toast.done{border-left-color:var(--brand-dark)}.toast.error{border-left-color:var(--danger)}.toast-title{font-size:13px;font-weight:700}.toast-label{color:var(--text);word-break:break-word;margin-top:3px;font-size:12.5px}.toast-step{color:var(--muted);margin-top:5px;font-size:12px}.toast.error .toast-step{color:var(--danger)}.toast-x{color:var(--muted);cursor:pointer;background:0 0;border:none;font-size:17px;line-height:1;position:absolute;top:6px;right:8px}
