:root{--bg:#f6f7f4;--surface:#fff;--text:#1c2118;--muted:#5d6657;--border:#d9ddd3;--accent:#2f6b2a;--accent-text:#fff;--error:#a3271f;--required:#c62828;--hover:#0000000d;--sidebar-w:264px}@media (prefers-color-scheme:dark){:root{--bg:#12150f;--surface:#1b1f17;--text:#e8ebe3;--muted:#a3ab9b;--border:#343a2e;--accent:#7fbf6a;--accent-text:#0e140b;--error:#ff8a7f;--required:#ff6b6b;--hover:#ffffff0f}}*{box-sizing:border-box;margin:0}body{background:var(--bg);min-height:100dvh;color:var(--text);font:16px/1.5 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}h1{margin:.5rem 0 1rem;font-size:1.5rem}h2{margin:1.5rem 0 .75rem;font-size:1.1rem}.muted{color:var(--muted)}.brand{letter-spacing:.08em;color:var(--accent);font-weight:700}.auth{place-items:center;min-height:100dvh;padding:16px;display:grid}.card{background:var(--surface);border:1px solid var(--border);border-radius:12px;width:100%;max-width:400px;padding:24px}.stack{gap:16px;display:grid}label{gap:4px;font-weight:600;display:grid}input{font:inherit;border:1px solid var(--border);background:var(--bg);color:var(--text);border-radius:8px;padding:10px 12px}small{font-weight:400}button{font:inherit;background:var(--accent);color:var(--accent-text);cursor:pointer;border:0;border-radius:8px;padding:10px 16px;font-weight:600}button:disabled{opacity:.6;cursor:progress}button.secondary{color:var(--text);border:1px solid var(--border);background:0 0}.error{color:var(--error);min-height:1.5em}.page{max-width:960px;margin:0 auto;padding:16px}.topbar{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:16px;display:flex}ul.chips,ul.grid{padding:0;list-style:none}ul.chips{flex-wrap:wrap;gap:8px;display:flex}ul.chips li{border:1px solid var(--border);background:var(--surface);border-radius:999px;padding:4px 12px}ul.grid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;display:grid}.tile{border:1px solid var(--border);background:var(--surface);border-radius:12px;gap:4px;padding:16px;display:grid}.row{flex-wrap:wrap;gap:8px;display:flex}a{color:var(--accent)}table{border-collapse:collapse;background:var(--surface);width:100%}th,td{text-align:left;border-bottom:1px solid var(--border);vertical-align:middle;padding:8px}.scroll{overflow-x:auto}select{font:inherit;border:1px solid var(--border);background:var(--bg);color:var(--text);border-radius:8px;padding:10px 12px}.filters{flex-wrap:wrap;gap:8px;margin:12px 0;display:flex}.filters input{flex:140px}a.button{background:var(--accent);color:var(--accent-text);border-radius:8px;padding:10px 16px;font-weight:600;text-decoration:none;display:inline-block}a.button.secondary{color:var(--text);border:1px solid var(--border);background:0 0}.ok{color:var(--accent);min-height:1.5em}.row .ok,.row .error{min-height:0}fieldset{border:1px solid var(--border);border-radius:12px;padding:16px}legend{padding:0 4px;font-weight:700}.grid-form{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px;display:grid}label.check{align-items:flex-start;gap:8px;font-weight:400;display:flex}.checks{gap:6px;display:grid}ul.plain,ol.plain{padding:0;list-style:none}.details{grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px;margin:16px 0;display:grid}.details dt{color:var(--muted);font-size:.875rem}.badge{border:1px solid var(--border);border-radius:999px;padding:2px 10px;font-size:.875rem;display:inline-block}.badge.active{border-color:var(--accent);color:var(--accent)}.badge.applied{border-style:dashed}.badge.rejected,.badge.suspended,.badge.exited{color:var(--error);border-color:var(--error)}.actions{margin:12px 0}.shell{min-height:100dvh}.shell-body{min-width:0}@media (min-width:960px){.shell{grid-template-columns:var(--sidebar-w) minmax(0, 1fr);display:grid}}.icon{flex:none;width:20px;height:20px}.sidebar{background:var(--surface);border-right:1px solid var(--border);flex-direction:column;min-height:0;display:flex}@media (min-width:960px){.sidebar{height:100dvh;position:sticky;top:0}}@media (max-width:959px){.sidebar{width:min(var(--sidebar-w), 85vw);z-index:30;transition:transform .2s;position:fixed;inset:0 auto 0 0;transform:translate(-100%);box-shadow:0 0 24px #00000040}.sidebar[data-open]{transform:none}}.scrim{z-index:20;background:#0006;position:fixed;inset:0}.nav-toggle,.nav-close{color:var(--text);border:1px solid var(--border);background:0 0;justify-content:center;align-items:center;padding:8px;display:inline-flex}.nav-toggle{z-index:10;background:var(--surface);position:fixed;top:10px;left:16px}.mobile-brand{z-index:10;background:var(--surface);border-radius:8px;padding:2px 8px;display:flex;position:fixed;top:8px;left:64px}.mobile-brand img{object-fit:contain;width:auto;max-width:110px;height:36px}@media (min-width:960px){.nav-toggle,.nav-close,.mobile-brand{display:none}}.sidebar-brand{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:8px;padding:16px;display:flex}.brand-link{min-width:0;color:var(--text);align-items:center;gap:10px;text-decoration:none;display:flex}.brand-link>span:last-child{min-width:0;display:grid}.brand-logo{object-fit:contain;flex:none;width:auto;max-width:96px;height:48px}.brand-mark{background:var(--accent);width:36px;height:36px;color:var(--accent-text);border-radius:8px;flex:none;place-items:center;font-weight:700;display:grid}.brand-name{text-overflow:ellipsis;white-space:nowrap;font-weight:700;overflow:hidden}.brand-tagline{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;overflow:hidden}.sidebar-nav{flex:1;padding:8px;overflow-y:auto}.sidebar-nav ul{padding:0;list-style:none}.nav-module{width:100%;color:var(--text);text-align:left;background:0 0;border-radius:8px;align-items:center;gap:10px;padding:9px 10px;font-weight:500;text-decoration:none;display:flex}.nav-module:hover,.nav-items a:hover{background:var(--hover)}.nav-module>span{flex:1}.nav-module[aria-current=page],.nav-module[data-active]{color:var(--accent);font-weight:600}.nav-module .chevron{width:16px;height:16px;transition:transform .15s}.nav-module[aria-expanded=true] .chevron{transform:rotate(90deg)}.nav-items{border-left:1px solid var(--border);margin:2px 0 6px 20px;padding-left:10px!important}.nav-items a,.nav-disabled{color:var(--text);border-radius:6px;justify-content:space-between;gap:8px;padding:6px 10px;font-size:.9375rem;text-decoration:none;display:flex}.nav-items a[aria-current=page]{background:var(--accent);color:var(--accent-text);font-weight:600}.nav-disabled{color:var(--muted);cursor:default}.nav-note{border:1px solid var(--border);border-radius:999px;align-self:center;padding:0 6px;font-size:.75rem}.appbar{border-bottom:1px solid var(--border);background:var(--surface);justify-content:space-between;align-items:center;gap:12px;min-height:60px;padding:10px 16px;display:flex}@media (max-width:959px){.appbar{padding-left:72px}}.appbar-org{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.appbar-user{align-items:center;gap:10px;display:flex}.appbar-name{line-height:1.2;display:grid}@media (max-width:599px){.appbar-name{display:none}}.avatar{background:var(--accent);width:34px;height:34px;color:var(--accent-text);border-radius:50%;place-items:center;font-size:.8125rem;font-weight:700;display:grid}button.small{padding:6px 12px;font-size:.875rem}.shell-body .page{max-width:1120px}.page-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:8px;margin-bottom:16px;display:flex}.page-head h1{margin:0}ul.stats{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;margin-bottom:16px;padding:0;list-style:none;display:grid}.stat{border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:12px;gap:2px;padding:16px;text-decoration:none;display:grid}.stat:hover{border-color:var(--accent)}.stat-value{font-variant-numeric:tabular-nums;font-size:1.75rem;font-weight:700}.stat-label{color:var(--muted);font-size:.875rem}.dash-grid{grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px;display:grid}.panel{border:1px solid var(--border);background:var(--surface);border-radius:12px;margin-bottom:12px;padding:16px}.panel h2{margin-top:0}.panel.danger{border-color:var(--error);margin-top:24px}ul.list li{border-bottom:1px solid var(--border);padding:8px 0}ul.list li:last-child{border-bottom:0}.kv{grid-template-columns:auto 1fr;align-items:start;gap:8px 16px;display:grid}.kv dt{color:var(--muted)}.kv dd{overflow-wrap:anywhere;margin:0}.tile .icon{color:var(--accent)}textarea{font:inherit;border:1px solid var(--border);background:var(--bg);color:var(--text);resize:vertical;border-radius:8px;padding:10px 12px}input.colour{height:44px;padding:4px}.logo-row{flex-wrap:wrap;align-items:flex-start;gap:16px;display:flex}.logo-preview{border:1px dashed var(--border);background:var(--bg);border-radius:12px;place-items:center;width:160px;height:120px;display:grid}.logo-preview img{object-fit:contain;max-width:140px;max-height:100px}button.danger{background:var(--error);color:#fff}.auth-brand{gap:4px;margin-bottom:8px;display:grid}.auth-logo{object-fit:contain;max-width:220px;max-height:130px}.kpi{font-size:1.25rem;font-weight:700}.grid.two{grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:16px;display:grid}progress{width:100%;height:10px;accent-color:var(--accent)}details.tile>summary{cursor:pointer}td.num,th.num{text-align:right;font-variant-numeric:tabular-nums}tr.header-row td{background:var(--bg)}td input,td select{width:100%;min-width:90px}.tabs{border-bottom:1px solid var(--border);flex-wrap:wrap;gap:4px;margin:8px 0 12px;display:flex}.tabs a{border-bottom:2px solid #0000;padding:8px 12px;text-decoration:none}.tabs a[aria-current=page]{border-bottom-color:var(--accent);font-weight:600}input.cell{text-align:right;width:7.5em}progress{width:100%}.chart{width:100%;max-width:720px;height:auto;margin:.5rem 0 1rem;display:block}.page.dashboard{max-width:1320px}.dash-hero{color:var(--accent-text);background:linear-gradient(135deg, var(--accent), color-mix(in srgb, var(--accent) 70%, #0b3d2e));border-radius:16px;flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:12px;margin-bottom:20px;padding:20px 24px;display:flex}.dash-hero h1{color:inherit;margin:2px 0 0}.dash-hero p{opacity:.9;margin:0}.dash-role{background:#fff3;border-radius:999px;padding:3px 10px;font-size:.8125rem;font-weight:600;display:inline-block}.dash-hero-side{text-align:right}.dash-period{justify-content:flex-end;gap:6px;margin-top:8px;display:flex}.dash-period a{color:inherit;border:1px solid #ffffff73;border-radius:999px;padding:3px 10px;font-size:.8125rem;text-decoration:none}.dash-period a[aria-current=true]{background:var(--accent-text);color:var(--accent);font-weight:600}.dash-section{margin-bottom:28px}.dash-section>h2{align-items:center;gap:10px;margin:0 0 12px;font-size:1.125rem;display:flex}.dash-section>h2:after{content:"";background:var(--border);flex:1;height:1px}.dash-blocks{grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:14px;display:grid}.dash-stats{grid-column:1/-1;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:14px;display:grid}.dash-stat,.dash-card{border:1px solid var(--border);background:var(--surface);border-radius:14px;box-shadow:0 1px 2px #0000000a}.dash-stat{color:var(--text);gap:6px;padding:16px 18px;text-decoration:none;transition:border-color .15s,transform .15s,box-shadow .15s;display:grid}a.dash-stat:hover{border-color:var(--accent);transform:translateY(-1px);box-shadow:0 4px 12px #00000014}.dash-stat-top{justify-content:space-between;align-items:flex-start;gap:8px;display:flex}.dash-stat-label{color:var(--muted);font-size:.875rem}.dash-icon{width:34px;height:34px;color:var(--accent);background:color-mix(in srgb, var(--accent) 12%, transparent);border-radius:10px;flex:none;padding:7px}.dash-stat-value{font-variant-numeric:tabular-nums;font-size:1.5rem;line-height:1.2}.dash-stat-foot{flex-wrap:wrap;gap:8px;min-height:1.2em;font-size:.8125rem;display:flex}.dash-up{color:#15803d;font-weight:600}.dash-down{color:var(--error);font-weight:600}.dash-card{min-width:0;padding:16px 18px}.dash-card.wide{grid-column:1/-1}.dash-card h3{margin:0 0 10px;font-size:1rem}.dash-chart{width:100%;height:auto;display:block}.dash-empty{text-align:center;padding:28px 0}.dash-legend{flex-wrap:wrap;gap:6px 16px;margin:8px 0 0;padding:0;font-size:.875rem;list-style:none;display:flex}.dash-legend.column{flex-direction:column;flex:1;min-width:140px}.dash-legend li{align-items:center;gap:8px;display:flex}.dash-legend.column li strong{font-variant-numeric:tabular-nums;margin-left:auto}.dash-dot{border-radius:3px;flex:none;width:10px;height:10px}.dash-donut{flex-wrap:wrap;align-items:center;gap:18px;display:flex}.dash-donut svg{flex:none;width:170px;height:170px}.dash-ranking,.dash-list{gap:12px;margin:0;padding:0;list-style:none;display:grid}.dash-rank-label{justify-content:space-between;gap:12px;font-size:.9375rem;display:flex}.dash-rank-label strong{font-variant-numeric:tabular-nums;white-space:nowrap}.dash-track{background:color-mix(in srgb, var(--accent) 12%, transparent);border-radius:999px;height:8px;margin-top:5px;display:block;overflow:hidden}.dash-track span{background:var(--accent);border-radius:999px;height:100%;display:block}.dash-list{gap:8px}.dash-list li{border-left:4px solid var(--border);background:var(--hover);border-radius:10px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:6px 16px;padding:10px 12px;display:flex}.dash-list li.dash-warn{border-left-color:#d97706}.dash-list li.dash-info{border-left-color:#0e7490}.dash-list li.dash-good{border-left-color:#15803d}.dash-action{white-space:nowrap;font-weight:600}.dash-quick{flex-wrap:wrap;gap:8px;margin-bottom:20px;display:flex}.perm-groups{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;margin:8px 0;display:grid}.perm-groups fieldset{margin:0}label:has(>:is(input,select,textarea):required){grid-template-columns:max-content 1fr;column-gap:3px}label:has(>:is(input,select,textarea):required):after{content:"*";color:var(--required);grid-area:1/2;font-weight:700}label:has(>:is(input,select,textarea):required)>*{grid-column:1/-1}label.check:has(>input:required){grid-template-columns:none}label.check:has(>input:required):after{grid-area:auto}label.check:has(>input:required)>*{grid-column:auto}.required-note{color:var(--muted);font-size:.8125rem;display:none}.required-note span{color:var(--required);font-weight:700}form:has(label>:is(input,select,textarea):required)>.required-note{display:block}.toasts{z-index:1000;gap:8px;width:min(380px,100vw - 28px);display:grid;position:fixed;top:14px;right:14px}.toast{border:1px solid var(--border);background:var(--surface);color:var(--text);border-left-width:5px;border-radius:10px;align-items:flex-start;gap:10px;padding:12px 14px;animation:.18s ease-out toast-in;display:flex;box-shadow:0 6px 20px #00000024}.toast span{flex:1}.toast-ok{border-left-color:#15803d}.toast-error{border-left-color:var(--error)}.toast-info{border-left-color:#0e7490}.toast-close{color:var(--muted);cursor:pointer;background:0 0;border:0;padding:0 4px;font-size:1.25rem;line-height:1}@keyframes toast-in{0%{opacity:0;transform:translateY(-6px)}}.nav-progress{z-index:1001;background:var(--accent);opacity:0;width:0;height:3px;transition:opacity .2s;position:fixed;top:0;left:0}.nav-progress.busy{opacity:1;animation:8s cubic-bezier(.1,.7,.2,1) forwards nav-grow}@keyframes nav-grow{0%{width:0}to{width:92%}}dialog.confirm{border:1px solid var(--border);background:var(--surface);max-width:min(460px,100vw - 32px);color:var(--text);border-radius:14px;padding:22px 24px;box-shadow:0 20px 50px #0000004d}dialog.confirm::backdrop{background:#00000073}dialog.confirm h2{margin:0 0 8px;font-size:1.125rem}dialog.confirm p{margin:0 0 18px;line-height:1.5}dialog.confirm .row{justify-content:flex-end}.spinner{vertical-align:-.1em;border:2px solid;border-right-color:#0000;border-radius:50%;width:.9em;height:.9em;margin-right:6px;animation:.7s linear infinite spin;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}form[aria-busy=true]{cursor:progress}.job{border:1px solid var(--border);background:var(--surface);border-radius:12px;gap:8px;padding:14px 16px;display:grid}.job-bar{background:color-mix(in srgb, var(--accent) 14%, transparent);border-radius:999px;height:10px;overflow:hidden}.job-bar span{background:var(--accent);height:100%;transition:width .4s;display:block}.job-bar.indeterminate span{width:35%;animation:1.2s ease-in-out infinite job-slide}@keyframes job-slide{0%{transform:translate(-100%)}to{transform:translate(290%)}}@media (prefers-reduced-motion:reduce){.nav-progress.busy,.spinner,.job-bar.indeterminate span,.toast{animation:none}}
