:root{--font: Rubik, sans-serif;--text: #0a0a0a;--muted: #737373;--placeholder: #9ca3af;--bg: #ffffff;--bg-soft: #f5f5f5;--primary: #2563eb;--primary-dark: #1d4ed8;--primary-soft: #eff6ff;--border: #e5e5e5;--border-strong: #d1d5db;--danger: #dc2626;--danger-soft: #fef2f2;--success: #16a34a;--success-soft: #f0fdf4;--warning: #d97706;--warning-soft: #fffbeb;--radius: 8px;--radius-sm: 6px;--shadow: rgba(0, 0, 0, .1) 0px 10px 15px -3px, rgba(0, 0, 0, .05) 0px 4px 6px -2px;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .05);--s1: 4px;--s2: 8px;--s3: 12px;--s4: 16px;--s5: 20px;--s6: 24px;--s10: 40px;--form-width: 374px;--sidebar: 248px}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;padding:0}body{font-family:var(--font);font-size:14px;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;overflow-x:hidden}button,input,select,textarea{font:inherit;color:inherit}a{color:var(--primary)}h1,h2,h3,h4{margin:0;font-weight:500}img{max-width:100%}.login{position:fixed;inset:0;z-index:50;background:#fff;display:flex;flex-direction:column}.login-art{display:none;flex:1;position:relative;overflow:hidden;background:#f5f5f5;padding:var(--s10)}.login-art .art{position:absolute;inset:0;background:radial-gradient(ellipse 60px 34px at 84% 37%,#d4883c 0 98%,transparent 100%),radial-gradient(circle at 60% 70%,#e8a87c 0 70px,transparent 71px),radial-gradient(ellipse 140px 60px at 64% 84%,#c99a42 0 98%,transparent 100%),repeating-linear-gradient(90deg,#ffffff52 0 72px,#786e642e 72px 80px),linear-gradient(180deg,#dcd7d0,#cfc8be 30%,#b3a797 58%,#8e7e6c 80%,#5f564a);background-size:auto,auto,auto,100% 62%,auto;background-repeat:no-repeat;background-position:0 0,0 0,0 0,0 14%,0 0}.login-art .art:before{content:"";position:absolute;left:6%;bottom:0;width:42%;height:46%;border-radius:48% 48% 0 0;background:linear-gradient(180deg,#ddd5c7,#b8ad9c);opacity:.9}.login-art .art:after{content:"";position:absolute;left:46%;bottom:0;width:36%;height:58%;border-radius:44% 44% 0 0;background:linear-gradient(180deg,#7f8a76,#4a4237);opacity:.92}.login-art .logo{position:absolute;top:40px;left:40px;z-index:10;height:32px;display:flex;align-items:center;gap:8px;color:#fff;font-size:32px;font-weight:500;letter-spacing:-.5px}.login-main{flex:1;background:#fff;display:flex;flex-direction:column;gap:var(--s4);padding:var(--s6);min-width:0;overflow-y:auto}.login-mobile-logo{display:flex;align-items:center;gap:8px;height:32px;margin-bottom:var(--s4);flex-shrink:0;color:#1e3a8a;font-size:28px;font-weight:500}.login-center{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:var(--s6);width:100%;min-height:0}.login-box{width:100%;max-width:var(--form-width)}.login-head{display:flex;flex-direction:column;align-items:center}.login-head h1{font-size:30px;font-weight:700;line-height:36px;text-align:center;color:var(--text)}.login-head p{margin:0 0 var(--s6);font-size:20px;line-height:28px;color:var(--muted);text-align:center}.login-form{display:flex;flex-direction:column;gap:var(--s6);align-items:center;width:100%}.login-fields{display:flex;flex-direction:column;gap:var(--s3);width:100%}.login-field{display:flex;flex-direction:column;gap:var(--s2);width:100%}.login-field label{font-size:14px;line-height:1}.login-input{width:100%;height:36px;padding:4px 12px;border:1px solid var(--border);border-radius:var(--radius);background:#fff;font-size:14px;color:var(--text);outline:none}.login-input::placeholder{color:var(--placeholder)}.login-input:focus{border-color:var(--primary);box-shadow:0 0 0 3px #2563eb26}.login-hint{font-size:14px;color:var(--muted);margin:0 0 var(--s5);line-height:21px;min-height:58px}.login-button{width:100%;height:36px;border:0;border-radius:var(--radius-sm);background:var(--primary);color:#fff;font-size:14px;cursor:pointer;display:flex;align-items:center;justify-content:center}.login-button:disabled{opacity:.5;cursor:not-allowed}.login-or{position:relative;width:100%;padding:2px 0}.login-or:before{content:"";position:absolute;left:0;right:0;top:50%;border-top:1px solid var(--border)}.login-or span{position:relative;display:block;width:max-content;margin:0 auto;padding:0 8px;background:#fff;color:var(--muted);font-size:14px}.login-social{display:flex;flex-direction:column;gap:var(--s4);width:100%}.login-social button{width:100%;height:36px;display:flex;align-items:center;justify-content:center;gap:8px;background:#fff;border:1px solid var(--border-strong);border-radius:4px;color:var(--text);font-size:14px;cursor:pointer;transition:background .2s}.login-social button:hover{background:#f9fafb}.login-foot{font-size:14px;text-align:center;margin:0}.login-foot a{color:var(--text)}.login-error{width:100%;padding:10px 12px;border-radius:var(--radius-sm);background:var(--danger-soft);color:var(--danger);font-size:14px}@media(min-width:768px){.login{flex-direction:row;box-shadow:var(--shadow)}.login-art{display:flex}.login-main{padding:var(--s10)}.login-mobile-logo{display:none}.login-center{justify-content:center}.login-head{align-items:flex-start}.login-head h1,.login-head p{text-align:left}}.shell{min-height:100vh;display:flex;background:var(--bg-soft)}.sidebar{position:fixed;inset:0 auto 0 0;width:var(--sidebar);background:#fff;border-right:1px solid var(--border);display:flex;flex-direction:column;z-index:40;transform:translate(-100%);transition:transform .2s}.sidebar.open{transform:none;box-shadow:var(--shadow)}.sidebar-head{height:60px;display:flex;align-items:center;gap:8px;padding:0 var(--s5);font-size:20px;font-weight:500;color:#1e3a8a;border-bottom:1px solid var(--border)}.nav{flex:1;overflow-y:auto;padding:var(--s3)}.nav-group{margin:var(--s4) var(--s3) var(--s1);font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}.nav a{display:flex;align-items:center;gap:10px;padding:8px 12px;border-radius:var(--radius-sm);color:var(--text);text-decoration:none;font-size:14px}.nav a:hover{background:var(--bg-soft)}.nav a.active{background:var(--primary-soft);color:var(--primary);font-weight:500}.nav a .count{margin-left:auto;min-width:20px;height:20px;padding:0 6px;border-radius:10px;background:var(--primary);color:#fff;font-size:11px;display:inline-flex;align-items:center;justify-content:center}.nav svg{width:18px;height:18px;flex-shrink:0}.scrim{position:fixed;inset:0;background:#0000004d;z-index:30}.main{flex:1;min-width:0;display:flex;flex-direction:column}.topbar{position:sticky;top:0;z-index:20;height:60px;background:#fff;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:var(--s3);padding:0 var(--s4)}.topbar .burger{display:inline-flex}.topbar .spacer{flex:1}.topbar select{max-width:180px}.content{padding:var(--s4);max-width:1320px;width:100%;margin:0 auto}@media(min-width:1024px){.sidebar{transform:none}.main{margin-left:var(--sidebar)}.topbar .burger,.scrim{display:none}.content{padding:var(--s6)}}.page-head{display:flex;align-items:center;justify-content:space-between;gap:var(--s3);flex-wrap:wrap;margin-bottom:var(--s5)}.page-head h1{font-size:24px;font-weight:500}.page-head p{margin:4px 0 0;color:var(--muted)}.card{background:#fff;border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm)}.card-pad{padding:var(--s5)}.card h2{font-size:16px;font-weight:500;margin-bottom:var(--s3)}.card-head{display:flex;align-items:center;justify-content:space-between;gap:var(--s2);padding:var(--s4) var(--s5);border-bottom:1px solid var(--border)}.card-head h2{margin:0}.grid{display:grid;gap:var(--s4)}.grid-2,.grid-3,.grid-4{display:grid;gap:var(--s4);grid-template-columns:1fr}@media(min-width:768px){.grid-2,.grid-3,.grid-4{grid-template-columns:1fr 1fr}}@media(min-width:1280px){.grid-3{grid-template-columns:1fr 1fr 1fr}.grid-4{grid-template-columns:repeat(4,1fr)}}.stack{display:flex;flex-direction:column;gap:var(--s4)}.row{display:flex;align-items:center;gap:var(--s2);flex-wrap:wrap}.muted{color:var(--muted)}.small{font-size:12px}.right{margin-left:auto}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:36px;padding:0 14px;border-radius:var(--radius-sm);border:1px solid var(--border-strong);background:#fff;color:var(--text);cursor:pointer;text-decoration:none;font-size:14px;white-space:nowrap}.btn:hover{background:#f9fafb}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--primary);border-color:var(--primary);color:#fff}.btn-primary:hover{background:var(--primary-dark)}.btn-danger{color:var(--danger);border-color:#fecaca}.btn-danger:hover{background:var(--danger-soft)}.btn-sm{height:30px;padding:0 10px;font-size:13px}.btn-ghost{border-color:transparent;background:transparent}.icon-btn{width:36px;padding:0}.input,select.input,textarea.input{width:100%;min-height:36px;padding:6px 12px;border:1px solid var(--border);border-radius:var(--radius);background:#fff;font-size:14px;outline:none}textarea.input{min-height:80px;resize:vertical}.input:focus{border-color:var(--primary);box-shadow:0 0 0 3px #2563eb26}.input::placeholder{color:var(--placeholder)}.field{display:flex;flex-direction:column;gap:6px}.field>label{font-size:13px;font-weight:500}.field .help{font-size:12px;color:var(--muted)}.field.check{flex-direction:row;align-items:center;gap:8px}.form-grid{display:grid;grid-template-columns:1fr;gap:var(--s4)}@media(min-width:640px){.form-grid{grid-template-columns:1fr 1fr}.form-grid .wide{grid-column:1 / -1}}.form-actions{display:flex;justify-content:flex-end;gap:var(--s2);margin-top:var(--s5)}.error{padding:10px 12px;border-radius:var(--radius-sm);background:var(--danger-soft);color:var(--danger)}.notice{padding:10px 12px;border-radius:var(--radius-sm);background:var(--primary-soft);color:#1e40af}.badge{display:inline-flex;align-items:center;height:22px;padding:0 8px;border-radius:11px;font-size:12px;background:var(--bg-soft);color:#404040;white-space:nowrap}.badge.green{background:var(--success-soft);color:#15803d}.badge.red{background:var(--danger-soft);color:#b91c1c}.badge.amber{background:var(--warning-soft);color:#b45309}.badge.blue{background:var(--primary-soft);color:#1d4ed8}.table-wrap{overflow-x:auto}table.table{width:100%;border-collapse:collapse}.table th,.table td{text-align:left;padding:10px 14px;border-bottom:1px solid var(--border);vertical-align:middle}.table th{font-size:12px;font-weight:500;color:var(--muted);background:#fafafa;white-space:nowrap}.table tr.click{cursor:pointer}.table tr.click:hover td{background:#fafafa}.toolbar{display:flex;gap:var(--s2);flex-wrap:wrap;align-items:center;padding:var(--s3) var(--s4);border-bottom:1px solid var(--border)}.toolbar .input{width:auto;min-width:160px;flex:1;max-width:320px}.pager{display:flex;align-items:center;justify-content:space-between;padding:var(--s3) var(--s4);color:var(--muted)}.tabs{display:flex;gap:2px;border-bottom:1px solid var(--border);margin-bottom:var(--s4);overflow-x:auto}.tabs a,.tabs button{padding:10px 14px;border:0;background:none;border-bottom:2px solid transparent;color:var(--muted);text-decoration:none;white-space:nowrap;cursor:pointer}.tabs .active{color:var(--primary);border-bottom-color:var(--primary);font-weight:500}.avatar{width:36px;height:36px;border-radius:50%;background:#dbeafe;color:#1e40af;display:inline-flex;align-items:center;justify-content:center;font-weight:500;font-size:13px;overflow:hidden;flex-shrink:0}.avatar img{width:100%;height:100%;object-fit:cover}.avatar.lg{width:72px;height:72px;font-size:24px}.avatar.sm{width:28px;height:28px;font-size:11px}.person{display:flex;align-items:center;gap:10px;min-width:0}.person .who{min-width:0}.person .who div{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.list{list-style:none;margin:0;padding:0}.list li{display:flex;align-items:center;gap:var(--s3);padding:10px 0;border-bottom:1px solid var(--border)}.list li:last-child{border-bottom:0}.empty{padding:var(--s6);text-align:center;color:var(--muted)}.stat{font-size:32px;font-weight:500;line-height:1.1}.stat-label{color:var(--muted);font-size:13px}.kv{display:grid;grid-template-columns:1fr;gap:2px 16px}.kv dt{color:var(--muted);font-size:12px;margin-top:10px}.kv dd{margin:0;overflow-wrap:anywhere}@media(min-width:640px){.kv{grid-template-columns:1fr 1fr}}.modal-back{position:fixed;inset:0;background:#00000059;z-index:60;display:flex;align-items:flex-start;justify-content:center;padding:5vh 12px;overflow-y:auto}.modal{width:100%;max-width:720px;background:#fff;border-radius:var(--radius);box-shadow:var(--shadow)}.modal.narrow{max-width:460px}.modal-head{display:flex;align-items:center;justify-content:space-between;padding:var(--s4) var(--s5);border-bottom:1px solid var(--border)}.modal-head h2{font-size:18px}.modal-body{padding:var(--s5)}.flash{position:fixed;left:50%;bottom:20px;transform:translate(-50%);z-index:70;background:#111827;color:#fff;padding:10px 16px;border-radius:var(--radius-sm);box-shadow:var(--shadow);max-width:90vw}.flash.bad{background:var(--danger)}.progress{height:8px;border-radius:4px;background:var(--bg-soft);overflow:hidden}.progress>div{height:100%;background:var(--primary)}.cal{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));border-top:1px solid var(--border);border-left:1px solid var(--border)}.cal .dow{padding:6px 8px;font-size:12px;color:var(--muted);background:#fafafa;border-right:1px solid var(--border);border-bottom:1px solid var(--border)}.cal .day{min-height:96px;padding:4px;border-right:1px solid var(--border);border-bottom:1px solid var(--border);background:#fff;min-width:0}.cal .day.other{background:#fafafa;color:#a3a3a3}.cal .day.weekend{background:#fcfcfc}.cal .day.today .num{background:var(--primary);color:#fff;border-radius:10px;padding:0 6px}.cal .num{font-size:12px;display:inline-block;margin-bottom:2px}.chip{display:block;font-size:11px;line-height:18px;padding:0 6px;border-radius:4px;margin-top:2px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;background:#dbeafe;color:#1e40af}.chip.other{background:#ede9fe;color:#5b21b6}.chip.sickness{background:#fee2e2;color:#991b1b}.chip.event{background:#dcfce7;color:#166534}.chip.bank_holiday{background:#fef3c7;color:#92400e}.chip.pending{background:repeating-linear-gradient(45deg,#eff6ff,#eff6ff 4px,#dbeafe 4px 8px)}.legend{display:flex;gap:var(--s3);flex-wrap:wrap;font-size:12px}.legend .chip{display:inline-block;margin:0}.timeline{overflow-x:auto}.timeline table{border-collapse:collapse;font-size:12px}.timeline td,.timeline th{border:1px solid var(--border);min-width:28px;height:30px;text-align:center;padding:0}.timeline th.name,.timeline td.name{min-width:180px;text-align:left;padding:0 8px;white-space:nowrap;position:sticky;left:0;background:#fff;z-index:1}.timeline td.we{background:#fafafa}.timeline .cell{width:100%;height:100%;display:block}.timeline .cell.holiday{background:#93c5fd}.timeline .cell.other{background:#c4b5fd}.timeline .cell.sickness{background:#fca5a5}.timeline .cell.bank_holiday{background:#fde68a}.timeline .cell.pending{background:repeating-linear-gradient(45deg,#dbeafe,#dbeafe 3px,#93c5fd 3px 6px)}.hide-sm{display:none}@media(min-width:768px){.hide-sm{display:revert}}.loading{padding:var(--s10);text-align:center;color:var(--muted)}.people-grid{display:grid;gap:var(--s3);grid-template-columns:1fr}@media(min-width:640px){.people-grid{grid-template-columns:1fr 1fr}}@media(min-width:1024px){.people-grid{grid-template-columns:repeat(3,1fr)}}@media(min-width:1280px){.people-grid{grid-template-columns:repeat(4,1fr)}}.person-card{display:flex;gap:12px;align-items:center;padding:var(--s4);text-decoration:none;color:inherit}.person-card:hover{border-color:#bfdbfe}.profile-head{display:flex;gap:var(--s4);align-items:center;flex-wrap:wrap}.profile-head h1{font-size:24px}.settings-grid{display:grid;gap:16px;grid-template-columns:minmax(0,1fr)}.settings-nav{padding:0;display:flex;flex-wrap:wrap;gap:2px}@media(min-width:1024px){.settings-grid{grid-template-columns:220px minmax(0,1fr);align-items:start}.settings-nav{flex-direction:column;flex-wrap:nowrap}}
