@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;450;500;550;600;650;700&family=Manrope:wght@400;500;600;650;700;750;800&display=swap');
:root{--ink:#192e2c;--muted:#7a8785;--green:#176b53;--mint:#e7f2ec;--bg:#f5f7f6;--line:#e5ebe8;--nav:#142f2c;--red:#b74e49;--amber:#a97825;--radius:16px}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:'DM Sans',system-ui,sans-serif;font-size:14px}button,input,select,textarea{font:inherit}button,a,input,select,textarea{outline-offset:4px}button{cursor:pointer}a{color:inherit;text-decoration:none}svg:not(.leaflet-container svg){width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}h1,h2,h3,h4,p{margin:0}h1,h2,h3,.brand{font-family:'Manrope',system-ui,sans-serif}h1{font-size:29px;letter-spacing:-1.1px;line-height:1.3}h2{font-size:17px;letter-spacing:-.4px}h3{font-size:15px}small{font-size:12px}.muted{color:var(--muted)}.eyebrow{font-size:11px;font-weight:700;letter-spacing:1.5px;text-transform:uppercase}.sidebar{position:fixed;inset:0 auto 0 0;width:238px;background:var(--nav);color:#b9ccca;display:flex;flex-direction:column;padding:30px 19px;z-index:20}.brand{display:flex;align-items:center;gap:11px;color:white;font-weight:800;font-size:25px;letter-spacing:-.7px;padding:0 14px 34px}.brand-icon{background:#a4dcc1;color:#173d32;width:37px;height:41px;border-radius:12px;display:grid;place-items:center}.brand-icon svg{width:24px;height:24px}.brand small{display:block;color:#88aaa3;font:10px 'DM Sans',sans-serif;letter-spacing:1.7px;margin-top:3px}.nav-label{color:#688b82;padding:0 15px;font-size:10px;letter-spacing:1.8px;margin:16px 0 12px}.nav-item{display:flex;align-items:center;gap:13px;padding:12px 15px;margin:3px 0;border-radius:9px;font-size:13px;transition:.2s}.nav-item:hover{background:#21413a;color:#fff}.nav-item.active{background:#d9ece1;color:#173f32;font-weight:650}.nav-item svg{width:18px;height:18px}.nav-item .count{margin-left:auto;background:#ffffff17;border-radius:5px;font-size:11px;padding:1px 5px}.sidebar-bottom{margin-top:auto}.office-card{border:1px solid #34514a;padding:16px;border-radius:12px;margin:28px 8px 16px;font-size:12px;line-height:1.7}.office-card strong{display:block;color:#d5e5dd}.office-card .dot{margin-right:6px}.sidebar-footer{padding:12px 14px;border-top:1px solid #34514a;color:#86a39a;font-size:11px}.main{margin-left:238px}.topbar{height:82px;background:#fff;border-bottom:1px solid var(--line);padding:0 38px;display:flex;align-items:center;justify-content:space-between;gap:15px}.breadcrumb{color:#8b9591;font-size:12px;display:flex;gap:10px;align-items:center}.breadcrumb strong{color:#314d44;font-weight:500}.top-actions{display:flex;align-items:center;gap:17px}.role-select{background:#f6f8f6;border:1px solid var(--line);padding:8px 10px;border-radius:8px;color:#4e625b;font-size:12px;max-width:160px}.icon-btn{border:0;background:transparent;color:#61746b;position:relative;padding:8px;border-radius:8px;display:grid;place-items:center}.icon-btn:hover{background:#edf2ef}.notification-dot{position:absolute;top:6px;right:7px;width:7px;height:7px;background:#cc6b50;border:2px solid #fff;border-radius:50%}.profile{display:flex;align-items:center;gap:10px;border-left:1px solid var(--line);padding-left:18px;font-size:12px}.avatar{width:36px;height:36px;border-radius:50%;background:#e9efdc;color:#687b39;display:grid;place-items:center;font-size:12px;font-weight:700}.profile strong{display:block;font-size:12px}.profile small{color:var(--muted);font-size:10px}.content{max-width:1540px;margin:auto;padding:34px 38px 24px}.page-heading{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:25px}.page-heading p{color:var(--muted);margin-top:8px;font-size:13px}.heading-actions{display:flex;gap:9px;align-items:center}.btn{border:1px solid #dfe7e2;padding:10px 15px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;gap:8px;background:white;color:#354e43;font-weight:550;font-size:12px;min-height:39px}.btn svg{width:16px;height:16px}.btn:hover{background:#f1f6f2}.btn.primary{background:var(--green);border-color:var(--green);color:#fff}.btn.primary:hover{background:#125740}.btn.danger{color:var(--red);background:#fff4f1;border-color:#f1d8d3}.btn:disabled{opacity:.45;cursor:not-allowed}.hero{padding:25px 29px;border-radius:var(--radius);background:linear-gradient(110deg,#e6efdf,#edf4e9);display:flex;justify-content:space-between;gap:24px;margin-bottom:24px;overflow:hidden;position:relative}.hero:after{content:'';position:absolute;right:140px;top:-75px;width:270px;height:270px;border:1px solid #c8dcc759;border-radius:50%;box-shadow:0 0 0 35px #c8dcc720,0 0 0 70px #c8dcc712;pointer-events:none}.hero .eyebrow{color:#76886b;margin-bottom:12px}.hero h2{font-size:23px;color:#284630;letter-spacing:-.7px}.hero p{font-size:12px;color:#6d8166;line-height:1.7;margin-top:9px;max-width:540px}.hero-side{display:flex;align-items:center;gap:14px;z-index:1;text-align:left;min-width:190px}.hero-shield{width:54px;height:54px;border:1px solid #b9cfb4;background:#ffffff5c;display:grid;place-items:center;border-radius:50%;color:#5c8555}.hero-shield svg{width:29px;height:29px}.hero-side strong{display:block;font-size:14px;margin-bottom:5px}.hero-side small{color:#78906c}.dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:#4b9f6c}.stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:17px;margin-bottom:24px}.stat{background:white;border:1px solid var(--line);border-radius:var(--radius);padding:20px}.stat-top{display:flex;justify-content:space-between;align-items:center;color:#7b8981;font-size:12px}.stat-icon{background:#eff5ef;color:#658767;width:33px;height:33px;display:grid;place-items:center;border-radius:9px}.stat-icon svg{width:17px;height:17px}.stat-value{font-family:Manrope,sans-serif;font-weight:750;font-size:31px;letter-spacing:-1px;margin:12px 0 8px}.stat-value span{font-size:13px;color:#8a9690;font-weight:400;letter-spacing:0}.stat-note{font-size:11px;color:#86948b}.stat-note.green{color:#548367}.stat-note.amber{color:var(--amber)}.grid-main{display:grid;grid-template-columns:minmax(0,1.9fr) minmax(290px,1fr);gap:23px;margin-bottom:23px}.panel{background:#fff;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}.panel-pad{padding:23px}.panel-heading{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:20px}.panel-heading p{font-size:11px;color:var(--muted);margin-top:6px}.text-link{border:0;background:none;padding:0;color:#3b745c;font-size:11px;font-weight:600;display:flex;gap:5px;align-items:center}.text-link svg{width:13px;height:13px}.filters{display:flex;gap:10px;flex-wrap:wrap;align-items:end;margin-bottom:18px}.filters label{font-size:11px;color:#78867e;display:grid;gap:5px}.filters input,.filters select{background:#f8faf8;border:1px solid var(--line);border-radius:7px;padding:8px 10px;color:#456051;font-size:12px;min-height:35px}.table-wrap{overflow:auto}table{width:100%;border-collapse:collapse;text-align:left;white-space:nowrap;font-size:12px}th{color:#8a978f;font-size:10px;text-transform:uppercase;letter-spacing:.7px;font-weight:500;background:#f8faf8;padding:12px 13px;border-bottom:1px solid var(--line)}td{padding:17px 13px;border-bottom:1px solid #eef1ee}tr:last-child td{border-bottom:0}.person-cell{display:flex;gap:10px;align-items:center}.person-cell .avatar{width:32px;height:32px;font-size:10px}.person-cell small{display:block;margin-top:4px;font-size:10px;color:var(--muted)}.badge{font-size:10px;font-weight:550;display:inline-flex;gap:5px;align-items:center;padding:5px 8px;border-radius:5px;white-space:nowrap;background:#f0f2f0;color:#78857d}.badge.green{background:#e8f3ec;color:#4b8060}.badge.amber{background:#fbf1df;color:#a6813d}.badge.red{background:#fbece8;color:#b66553}.badge.blue{background:#eaf0f6;color:#637d9c}.badge .dot{width:5px;height:5px;background:currentColor}.table-foot{display:flex;justify-content:space-between;border-top:1px solid var(--line);padding:14px 3px 0;margin-top:6px;font-size:10px;color:#92a096}.shift-tag{font-size:11px;color:#6c8172}.round-card{border:1px solid var(--line);border-radius:11px;padding:15px;margin-bottom:11px}.round-top{display:flex;justify-content:space-between;align-items:center;gap:8px}.round-card h3{font-size:12px}.round-card small{font-size:10px;color:#8b988d;display:block;margin:5px 0}.progress{height:5px;border-radius:5px;background:#edf1ec;overflow:hidden;margin:13px 0 8px}.progress div{height:100%;background:#6d9a79;border-radius:5px}.round-bottom{display:flex;justify-content:space-between;font-size:10px;color:#88968b}.round-bottom strong{color:#5c7962;font-weight:500}.panel-footer-note{font-size:10px;color:#8c998f;display:flex;align-items:center;gap:7px;margin-top:15px}.panel-footer-note svg{width:13px;height:13px}.event{display:flex;gap:13px;margin-bottom:20px}.event-icon{width:32px;height:32px;border-radius:9px;flex-shrink:0;background:#fbefdf;color:#b68847;display:grid;place-items:center}.event-icon svg{width:16px;height:16px}.event-icon.green{background:#edf4ec;color:#729673}.event-icon.red{background:#fbeee9;color:#bb7764}.event h3{font-size:12px;font-weight:550;line-height:1.5}.event p{font-size:11px;color:#8c998e;margin:5px 0 8px;line-height:1.6}.event small{color:#9aa498;font-size:10px}.timeline{border-left:1px solid #e1e9e0;margin-left:13px;padding-left:23px}.timeline-item{position:relative;padding-bottom:21px}.timeline-item:before{content:'';position:absolute;left:-28px;top:3px;background:#91b39a;width:8px;height:8px;border:2px solid white;border-radius:50%}.timeline-item h3{font-size:11px;font-weight:500}.timeline-item p{font-size:10px;color:#8d9a90;margin-top:5px}.timeline-time{float:right;color:#8b978e;font-size:10px}.chart{height:130px;display:flex;align-items:end;gap:12px;margin:22px 0 7px;padding:0 8px;border-bottom:1px solid #e6ece7}.chart-column{flex:1;display:flex;flex-direction:column;align-items:center;height:100%;justify-content:end;position:relative}.chart-bar{width:65%;max-width:35px;background:#b6cbb9;border-radius:4px 4px 0 0;min-height:3px}.chart-column.current .chart-bar{background:#377b5d}.chart-label{font-size:10px;color:#8b998f;position:absolute;bottom:-21px}.chart-value{font-size:9px;color:#7c8c7d;margin-bottom:5px}.chart-legend{font-size:10px;color:#8b998f;margin-top:32px;display:flex;gap:6px;align-items:center}.footer{display:flex;justify-content:space-between;color:#96a096;font-size:10px;padding:8px 0}.demo-pill{display:flex;gap:6px;align-items:center}.demo-pill .dot{background:#bd9f6a}.mobile-toggle{display:none}.two-col{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:23px;margin-bottom:23px}.three-col{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px;margin-bottom:23px}.point-card{padding:21px;border:1px solid var(--line);border-radius:13px;background:white}.point-code{font-size:10px;color:#9aab9d;letter-spacing:1px;margin-bottom:10px}.point-card h3{margin-bottom:8px}.point-card .btn{margin-top:16px}.point-card .point-actions{display:flex;justify-content:space-between;align-items:center}.big-icon{width:48px;height:48px;border-radius:13px;background:#eef5ed;display:grid;place-items:center;color:#5f8863;margin-bottom:17px}.empty{padding:38px 20px;color:#889a8b;text-align:center;font-size:13px;line-height:1.8}.schedule-card{padding:20px;background:#fff;border:1px solid var(--line);border-radius:14px}.schedule-card h3{margin:13px 0 6px}.schedule-card .person-cell{margin:21px 0}.detail-list{display:grid;gap:12px;font-size:12px}.detail-list>div{display:flex;justify-content:space-between;gap:12px}.detail-list span{color:#8b998e}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.field{display:grid;gap:7px;margin-bottom:16px;color:#61786a;font-size:12px}.field input,.field select,.field textarea{width:100%;border:1px solid #dfe7e0;border-radius:8px;padding:11px 12px;background:#fbfcfb;color:var(--ink)}.field textarea{resize:vertical;min-height:95px}.field input[type=file]{font-size:11px}.full{grid-column:1/-1}.help{font-size:11px;color:#8a978e;line-height:1.7}.notice{padding:13px 15px;border-radius:9px;font-size:12px;line-height:1.7;background:#f4f1e5;color:#988047;margin-bottom:20px}.notice.green{background:#ecf5ed;color:#58785e}.actions{display:flex;gap:9px;flex-wrap:wrap;margin-top:20px}.attendance-time{font-size:40px;letter-spacing:-1.5px;font-family:Manrope,sans-serif;font-weight:750;margin:12px 0 7px}.attendance-clock{font-size:12px;color:#8d9a8f}.attendance-status{display:flex;gap:25px;margin:25px 0}.attendance-status>div{flex:1;border:1px solid var(--line);border-radius:10px;padding:15px}.attendance-status small{display:block;color:#89968c;margin-bottom:10px}.attendance-status strong{font-size:20px}.camera{width:100%;max-height:300px;background:#142f2c;border-radius:10px;object-fit:cover}.photo-preview{width:100%;max-height:260px;object-fit:contain;background:#eff3ed;border-radius:10px;margin-top:10px}.photo-thumb{width:48px;height:38px;border-radius:5px;object-fit:cover}.signature{width:100%;height:140px;border:1px dashed #bccfbd;border-radius:9px;touch-action:none;background:#fafcf9}.signature-label{font-size:10px;text-align:center;color:#9baa9b;margin-top:6px}.settings-shift{border:1px solid var(--line);border-radius:12px;padding:20px;margin-bottom:18px}.settings-shift h3{margin-bottom:17px}.range-row{display:grid;grid-template-columns:1fr 1fr 1fr;align-items:center;gap:14px;margin-bottom:12px}.range-row span{font-size:12px;color:#7d8e80}.range-row .field{margin:0}.login-wrap{min-height:100vh;display:grid;grid-template-columns:1fr 1fr}.login-story{background:var(--nav);color:#c5dacc;padding:70px;display:flex;flex-direction:column;justify-content:center}.login-story .brand{padding:0;margin-bottom:90px}.login-story h1{font-size:47px;max-width:420px;color:#f3f6ef;line-height:1.3}.login-story p{margin-top:24px;line-height:1.9;max-width:400px;color:#92b2a1}.login-form{display:flex;align-items:center;justify-content:center;padding:40px}.login-form>div{width:350px}.login-form h1{margin-bottom:10px}.login-form p{margin-bottom:30px;line-height:1.7}.login-form .btn{width:100%}dialog{border:0;border-radius:16px;max-width:580px;width:calc(100% - 30px);padding:27px;color:var(--ink);box-shadow:0 25px 100px #0f241e33;max-height:90vh;overflow:auto}dialog::backdrop{background:#142c2266;backdrop-filter:blur(3px)}.modal-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:22px}.modal-head h2{font-size:20px}#toast{position:fixed;bottom:26px;left:calc(50% + 119px);transform:translateX(-50%);background:#173f32;color:white;border-radius:10px;padding:14px 20px;z-index:100;box-shadow:0 5px 25px #102c2029;font-size:12px;opacity:0;pointer-events:none;transition:.2s;max-width:90vw}#toast.show{opacity:1}.qr-placeholder{width:190px;height:190px;border:2px dashed #c2d3c0;margin:20px auto;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;color:#81947e;background:#f5f9f2}.qr-placeholder svg{width:65px;height:65px}.qr-placeholder small{font-size:10px}.check-row{display:flex;gap:9px;align-items:center;font-size:12px;margin:15px 0}.filter-summary{font-size:11px;color:#8a988e;margin-bottom:14px}.mini-tabs{display:flex;background:#f1f5f0;padding:4px;border-radius:8px;gap:3px}.mini-tabs button{border:0;background:transparent;padding:7px 12px;font-size:11px;color:#8b998e;border-radius:6px}.mini-tabs button.active{background:white;color:#3e6f4c;box-shadow:0 2px 5px #234b2610}.mobile-bottom{display:none}.pending-panel{margin-bottom:23px}.status-list{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:16px 0}.status-list>div{background:#f8faf7;border-radius:9px;padding:13px}.status-list small{display:block;font-size:10px;color:#8b9b8a;margin-bottom:6px}.audit{font-family:monospace;font-size:11px;color:#728474}.weekly{display:flex;gap:7px;flex-wrap:wrap;margin-top:12px}.weekly span{padding:9px 12px;background:#eef4ec;border-radius:7px;color:#6c8568;font-size:11px}
@media(min-width:1500px){.content{padding-top:40px}.stats{gap:23px}.grid-main{grid-template-columns:2fr 1fr}.panel-pad{padding:27px}.stat{padding:24px}.hero{padding:30px}}
@media(max-width:1150px){.sidebar{width:205px;padding:25px 12px}.main{margin-left:205px}.content{padding:25px}.topbar{padding:0 25px}.grid-main{grid-template-columns:minmax(0,1.5fr) minmax(270px,1fr);gap:17px}.panel-pad{padding:18px}.stats{gap:12px}.stat{padding:16px}.hero-side{min-width:150px}.profile>div:last-child{display:none}.three-col{grid-template-columns:repeat(2,1fr)}#toast{left:calc(50% + 102px)}}
@media(max-width:900px){.grid-main{grid-template-columns:1fr}.hero-side{display:none}.stats{grid-template-columns:repeat(2,1fr)}.two-col{grid-template-columns:1fr}.heading-actions{flex-wrap:wrap}.page-heading{align-items:start}.profile{display:none}}
@media(max-width:680px){.sidebar{visibility:hidden;transform:translateX(-100%);width:235px;box-shadow:5px 0 50px #142f2c33;transition:.2s}.sidebar.open{visibility:visible;transform:translateX(0)}.main{margin-left:0}.topbar{height:64px;padding:0 16px}.breadcrumb{display:none}.mobile-toggle{display:grid}.top-actions{gap:7px}.role-select{max-width:145px;padding:7px;font-size:11px}.content{padding:23px 16px 90px}.page-heading{display:block;margin-bottom:20px}.page-heading h1{font-size:25px}.heading-actions{margin-top:15px}.hero{padding:22px;margin-bottom:18px}.hero h2{font-size:21px}.hero p{font-size:11px}.hero .eyebrow{font-size:10px}.stats{gap:11px;margin-bottom:18px}.stat{padding:15px}.stat-top{font-size:10px;gap:5px}.stat-icon{width:28px;height:28px}.stat-value{font-size:27px}.stat-note{font-size:10px}.grid-main,.two-col,.three-col{gap:16px;margin-bottom:16px}.three-col{grid-template-columns:1fr}.panel-pad{padding:18px}.panel-heading{gap:10px}.panel-heading h2{font-size:15px}.footer{font-size:9px;gap:10px}.form-grid{grid-template-columns:1fr}.full{grid-column:auto}.range-row{grid-template-columns:80px 1fr 1fr;gap:8px}.range-row input{padding:9px 6px}.mobile-bottom{position:fixed;bottom:0;left:0;right:0;background:#fff;border-top:1px solid var(--line);display:flex;justify-content:space-around;padding:9px 3px max(9px,env(safe-area-inset-bottom));z-index:15}.mobile-bottom a{display:flex;flex-direction:column;align-items:center;gap:4px;font-size:9px;color:#8b988c;padding:2px 12px}.mobile-bottom a.active{color:#267653}.mobile-bottom svg{width:20px;height:20px}#toast{left:50%;bottom:78px}.login-wrap{grid-template-columns:1fr}.login-story{padding:30px}.login-story .brand{margin-bottom:30px}.login-story h1{font-size:28px}.login-story p{display:none}.login-form{padding:30px 23px}.status-list{grid-template-columns:1fr}.filters{gap:8px}.filters label{flex:1}.filters input,.filters select{width:100%}}
@media print{.sidebar,.topbar,.heading-actions,.mobile-bottom,.footer,.filters,.btn,#toast{display:none!important}.main{margin:0}.content{padding:0}.panel{break-inside:avoid}body{background:white}.stats{grid-template-columns:repeat(4,1fr)}}

/* PWA and mobile interaction refinements. */
[hidden]{display:none!important}
html{scroll-padding-bottom:100px}
body{min-height:100dvh}
.drawer-scrim,.drawer-close,.guard-quick-actions{display:none}
.install-card{display:flex;align-items:center;gap:18px;background:#fff;border:1px solid var(--line);border-radius:16px;padding:22px;margin-bottom:24px}
.install-card .big-icon{margin:0;flex-shrink:0}
.install-card p{font-size:13px;color:#61756b;margin-top:5px;line-height:1.6}
.install-card .btn{margin-left:auto;flex-shrink:0}
.install-steps{padding-left:22px;line-height:1.8;color:#425e4f;font-size:15px}
.install-steps li{padding:7px 0}
.connection-status{position:fixed;inset:0 0 auto;background:#fff1dd;color:#6e4e21;border-bottom:1px solid #e7ce9f;padding:12px 20px;padding-top:max(12px,env(safe-area-inset-top));font-size:13px;text-align:center;z-index:30}
.is-offline .main{padding-top:60px}
.pwa-update{position:fixed;bottom:20px;right:20px;background:#173f32;color:#fff;display:flex;align-items:center;gap:15px;padding:12px 16px;border-radius:12px;box-shadow:0 8px 30px #142f2c26;z-index:25;font-size:13px}
:focus-visible{outline:3px solid #75ac8c;outline-offset:3px}
@media(max-width:680px){
 :root{--muted:#62756b}
 body{font-size:15px}
 .sidebar{width:min(290px,88vw);height:100dvh;overflow-y:auto;padding-top:max(16px,env(safe-area-inset-top));padding-bottom:max(20px,env(safe-area-inset-bottom));z-index:40}
 .sidebar .brand{padding-bottom:20px}
 .drawer-close{display:grid;align-self:flex-end;color:#c4ddce;margin-bottom:4px}
 .drawer-scrim{display:block;position:fixed;inset:0;border:0;background:#102c226b;z-index:35;visibility:hidden;opacity:0;transition:opacity .2s}
 .drawer-open{overflow:hidden}
 .drawer-open .drawer-scrim{visibility:visible;opacity:1}
 .topbar{padding-left:max(12px,env(safe-area-inset-left));padding-right:max(12px,env(safe-area-inset-right));height:auto;min-height:66px;padding-top:env(safe-area-inset-top)}
 .top-actions{gap:4px;min-width:0}
 .role-select{font-size:13px;min-height:44px;max-width:145px;min-width:0}
 .icon-btn{min-width:44px;min-height:44px}
 .content{padding-left:max(16px,env(safe-area-inset-left));padding-right:max(16px,env(safe-area-inset-right));padding-bottom:calc(100px + env(safe-area-inset-bottom))}
 .content>*,.two-col>*,.three-col>*,.panel,.field,.cell-value{min-width:0}
 .page-heading p{font-size:14px;line-height:1.6}
 .page-heading h1{overflow-wrap:anywhere}
 .hero p,.help,.notice{font-size:13px}
 .hero h2{font-size:22px;line-height:1.45}
 .btn{min-height:48px;font-size:14px;padding:12px 15px;touch-action:manipulation}
 .text-link{min-height:44px;font-size:12px}
 .nav-item{min-height:48px;font-size:14px}
 .badge{font-size:12px;padding:6px 9px;white-space:normal;line-height:1.4}
 .field{font-size:14px}
 .field input,.field select,.field textarea,.filters input,.filters select{font-size:16px;min-height:48px;min-width:0;max-width:100%}
 .field input[type=checkbox],.check-row input{min-height:24px;width:24px;height:24px;flex-shrink:0}
 .check-row{font-size:14px;align-items:flex-start;line-height:1.6;gap:12px}
 .filters{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:end;gap:12px}
 .filters label{font-size:13px;min-width:0}
 .filters .mini-tabs{grid-column:1/-1}
 .mini-tabs{width:100%;gap:2px}
 .mini-tabs button{min-height:48px;font-size:13px;flex:1;padding:8px 5px}
 .guard-quick-actions{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:20px}
 .round-card h3{font-size:14px}.round-card small,.round-bottom{font-size:12px}
 .round-top{flex-wrap:wrap;gap:10px}
 .panel-heading{align-items:flex-start}
 .panel-heading h2{font-size:17px;line-height:1.4}
 .panel-heading p{font-size:12px;line-height:1.6}
 .point-card h3{font-size:17px}
 .point-card small{font-size:12px}
 .point-card .point-actions{gap:12px;flex-wrap:wrap}
 .attendance-status{gap:12px}
 .attendance-status>div{padding:14px;min-width:0}
 .attendance-status small{font-size:12px}
 .attendance-status strong{font-size:23px}
 .actions .btn{flex:1;min-width:130px}
 .attendance-clock{font-size:13px}
 .notice svg{vertical-align:middle}
 .footer{flex-direction:column;gap:8px;font-size:11px;line-height:1.6}
 .mobile-bottom{padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right);padding-bottom:max(10px,env(safe-area-inset-bottom));gap:0}
 .mobile-bottom a{flex:1;min-width:0;min-height:48px;font-size:11px;padding:4px 2px}
 .mobile-bottom svg{width:23px;height:23px}
 dialog{padding:20px;width:calc(100% - 24px);max-height:calc(100dvh - 24px - env(safe-area-inset-top) - env(safe-area-inset-bottom));overscroll-behavior:contain;scroll-padding:20px}
 .modal-head{position:sticky;top:-20px;background:white;padding:12px 0;z-index:2;margin-top:-12px;gap:10px}
 .modal-head h2{font-size:20px}
 .modal-head .icon-btn{flex-shrink:0}
 dialog form>button[type=submit],dialog form>.actions{width:100%}
 .camera{max-height:35dvh;min-height:150px}
 .signature{height:170px}
 .signature-label{font-size:12px}
 .install-card{flex-wrap:wrap;padding:20px;gap:13px}
 .install-card>div:nth-child(2){flex:1;min-width:150px}
 .install-card .btn{width:100%;margin:0}
 .pwa-update{bottom:calc(80px + env(safe-area-inset-bottom));left:12px;right:12px;padding:12px;gap:10px}
 .pwa-update .btn{min-height:44px}
 #toast{bottom:calc(85px + env(safe-area-inset-bottom));width:max-content;max-width:calc(100vw - 24px);font-size:13px;line-height:1.6}
 .table-wrap{overflow:visible}
 table,tbody,tr,td{display:block;width:100%;white-space:normal}
 thead{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
 tbody tr{border:1px solid var(--line);border-radius:12px;margin-bottom:13px;padding:7px 13px}
 td{display:grid;grid-template-columns:minmax(80px,.8fr) minmax(0,1.2fr);gap:12px;align-items:start;padding:12px 0;font-size:13px;border-bottom:1px solid #eef1ee;overflow-wrap:anywhere}
 td::before{content:attr(data-label);color:#61766a;font-size:12px;line-height:1.7}
 td .cell-value{line-height:1.7;text-align:right}
 td .cell-value .person-cell{justify-content:flex-end;text-align:left;gap:8px}
 td small{font-size:12px}
 td[data-label=""]{display:block;text-align:right}
 td[data-label=""]::before{display:none}
 td.empty-cell{display:block;text-align:center}
 td.empty-cell::before{display:none}
 .table-foot{font-size:12px;gap:12px}
 .range-row{grid-template-columns:1fr 1fr;gap:8px}
 .range-row>span{grid-column:1/-1;font-size:13px}
 .range-row input{padding:10px}
 .login-form>div{width:100%;min-width:0}
}
@media(max-width:359px){.content{padding-left:12px;padding-right:12px}.role-select{max-width:125px}.panel-pad{padding:15px}.guard-quick-actions .btn{padding:12px 8px;font-size:13px}.filters{grid-template-columns:1fr}.hero{padding:19px}.stats{gap:8px}.stat{padding:12px}.stat-top{font-size:11px;flex-wrap:wrap}.stat-value{font-size:25px}.round-top .badge{font-size:11px}.install-card>div:nth-child(2){min-width:0}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;transition:none!important}}
@media print{.drawer-scrim,.install-card,.install-header,.connection-status,.pwa-update{display:none!important}}
@media(max-width:680px){.role-select{font-size:16px}.help,.round-card small,.round-bottom,.panel-footer-note,.event p,.attendance-clock{color:#5f7568}.stat-note{font-size:12px;color:#5f7568}.stat-top{font-size:12px;color:#5f7568}.signature-label{color:#657c6a}.install-card p{color:#5f7568}}
.logout-btn{width:100%;background:transparent;border:0;color:inherit;text-align:left}
@media print{body:has(dialog[open]) #app,body:has(dialog[open]) #toast{display:none!important}dialog[open]{position:static;width:100%;max-width:none;max-height:none;box-shadow:none;padding:0}dialog .modal-head button,dialog .actions{display:none!important}}
.hero.hero-alert{background:linear-gradient(110deg,#fff0e6,#fff6ed)}
.hero-alert h2{color:#784a31}.hero-alert p,.hero-alert .eyebrow,.hero-alert .hero-side small{color:#875f45}.hero-alert .hero-shield{color:#a26842;border-color:#e9cdb7}
.sidebar{overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#3f6155 transparent}
.sidebar>.brand,.sidebar nav,.sidebar-bottom{flex-shrink:0}

.user-actions{display:flex;flex-wrap:wrap;gap:8px}.user-table td small{display:block;margin-top:7px;color:#61766a}.user-roles{border:1px solid var(--line);border-radius:10px;padding:8px 16px;margin:20px 0}.user-roles legend{font-size:13px;padding:0 6px}.user-table td{white-space:normal;overflow-wrap:anywhere}
@media(max-width:680px){.user-actions{justify-content:flex-end}.user-actions .btn{width:100%;justify-content:center}.user-roles legend{font-size:14px}}

.qr-print-sheet{text-align:center}.qr-print-sheet #qr-image{width:240px;height:240px;max-width:100%;margin:20px auto;object-fit:contain}.qr-print-sheet #qr-image:not([hidden]){display:block}.qr-print-sheet .actions{justify-content:center}
@media print{dialog[open]:has(.qr-print-sheet){inset:auto;margin:0;overflow:visible;max-height:none}.qr-print-sheet{break-inside:avoid;color:#000}.qr-print-sheet #qr-image{width:65mm;height:65mm;max-width:none}.qr-print-sheet #qr-status{display:none}}

/* Admin settings */
.settings-page{display:grid;gap:24px;min-width:0}.settings-page form{min-width:0}.settings-shortcuts{display:flex;flex-wrap:wrap;gap:10px}.settings-shortcuts a{display:flex;align-items:center;gap:9px;padding:12px 16px;min-height:44px;background:white;border:1px solid var(--line);border-radius:10px;color:#416c56;text-decoration:none;font-size:13px;font-weight:600}.settings-shortcuts svg,.settings-note svg,.settings-retention>svg{width:20px;height:20px;flex-shrink:0}.settings-shortcuts a:hover{background:#eef5ed;border-color:#8faf99}.settings-section{margin-bottom:24px;scroll-margin-top:24px}.settings-page> .settings-section{margin-bottom:0}.settings-section-head{display:flex;gap:14px;align-items:center;margin-bottom:26px}.settings-section-head h2{font-size:18px;line-height:1.4}.settings-section-head p{font-size:13px;color:#63796b;line-height:1.7;margin-top:5px}.settings-section-icon{width:44px;height:44px;border-radius:12px;display:grid;place-items:center;background:#edf4ee;color:#427653;flex-shrink:0}.settings-section-icon svg{width:23px;height:23px}.settings-shifts-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.shift-editor{min-width:0;margin:0;border:1px solid var(--line);border-radius:12px;padding:18px;background:#fbfdfb}.shift-editor legend{display:flex;align-items:center;gap:7px;font-size:15px;font-weight:650;padding:0 8px}.shift-editor legend svg:not(.leaflet-container svg){width:18px;height:18px;color:#6c8a72}.shift-editor .form-grid{gap:10px}.settings-page .field{font-size:13px;line-height:1.5}.settings-page input{min-width:0;min-height:44px;font-size:15px}.shift-round-label{font-size:10px;letter-spacing:1px;color:#6b8274;font-weight:600;margin:4px 0 12px}.shift-round{border-top:1px solid var(--line);padding-top:12px}.shift-round>span{display:block;font-size:12px;font-weight:600;color:#476655;margin-bottom:10px}.shift-round .field>span{font-size:11px;color:#657c6b}.settings-note{display:flex;align-items:flex-start;gap:9px;font-size:12px;color:#61766a;line-height:1.7;margin:20px 0 0}.settings-location-grid{display:grid;grid-template-columns:1fr 1fr;gap:32px}.settings-group-title{font-size:14px;margin:0 0 15px}.input-unit{display:flex;align-items:center;background:#fbfcfb;border:1px solid #dfe7e0;border-radius:8px;overflow:hidden}.settings-page .input-unit input{border:0;background:transparent;border-radius:0;flex:1;width:100%}.input-unit>span{font-size:12px;color:#61766a;padding:0 13px}.settings-page .field small{font-weight:400;font-size:12px;line-height:1.6}.settings-coordinates{border-top:1px solid var(--line);padding-top:22px;margin-top:8px;display:grid;grid-template-columns:1fr 1fr;gap:32px}.settings-coordinates .field{margin:0}.settings-coordinates .settings-group-title{margin-bottom:7px}.settings-save{display:flex;align-items:center;justify-content:space-between;gap:22px;margin-top:24px;padding-top:20px;border-top:1px solid var(--line)}.settings-save p{font-size:12px;line-height:1.7;color:#61766a;max-width:580px}.settings-save strong{display:block;font-size:13px;margin-bottom:4px}.settings-save .btn{flex-shrink:0;min-height:46px}.settings-main-save{margin:0;padding:18px 22px;border:1px solid #dce8dc;background:#edf5ee;border-radius:12px}.weight-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}.weight-field{background:#f9fbf8;border:1px solid var(--line);border-radius:12px;padding:17px;margin:0;align-content:start;gap:12px}.weight-number{color:#819582;font-size:11px;letter-spacing:1px}.weight-total{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;padding:14px 18px;background:#edf5ee;border-radius:9px;color:#3e6a4b;margin-top:18px;font-size:12px}.weight-total strong{font-size:14px}.weight-total.invalid{background:#fff0e6;color:#9c512b}.settings-details{margin-top:18px;font-size:12px;color:#61766a;line-height:1.8}.settings-details summary{cursor:pointer;min-height:44px;display:list-item;padding:10px 0;font-weight:600;color:#416c56}.settings-details p{margin:8px 0}.settings-retention{display:flex;gap:12px;padding:0 5px;color:#61766a;font-size:12px;line-height:1.7}.settings-retention strong{color:#416c56}.settings-page a:focus-visible,.settings-page input:focus-visible,.settings-details summary:focus-visible{outline:3px solid #98bda5;outline-offset:3px}
@media(max-width:1100px){.settings-shifts-grid{grid-template-columns:1fr}.shift-editor .form-grid{grid-template-columns:1fr 1fr}.weight-grid{grid-template-columns:1fr 1fr}}
@media(max-width:680px){.settings-page{gap:18px}.settings-shortcuts{display:grid;grid-template-columns:1fr;gap:8px}.settings-shortcuts a{font-size:14px}.settings-section-head{align-items:flex-start;gap:11px}.settings-section-head h2{font-size:17px}.settings-section-head p{font-size:13px}.settings-location-grid,.settings-coordinates{grid-template-columns:1fr;gap:18px}.settings-coordinates .form-grid{grid-template-columns:1fr}.settings-coordinates .field{margin-bottom:10px}.settings-page input{font-size:16px;width:100%;max-width:100%}.settings-save{align-items:stretch;flex-direction:column;gap:14px}.settings-save .btn{width:100%;justify-content:center}.settings-main-save{padding:16px}.weight-grid{grid-template-columns:1fr}.weight-field{gap:8px;padding:15px}.weight-total{align-items:flex-start;flex-direction:column}.shift-editor{padding:15px}.settings-section{scroll-margin-top:15px}.settings-page .form-grid{min-width:0}.settings-page .form-grid .field{min-width:0}}
.office-map-editor{border-top:1px solid var(--line);margin-top:16px;padding-top:24px}.office-map-heading .settings-group-title{margin-bottom:7px}.office-map-tools{display:flex;gap:8px;flex-wrap:wrap;margin:16px 0}.office-map{height:420px;width:100%;border:1px solid var(--line);border-radius:12px;z-index:0;background:#e9eee8}.office-map[data-drawing=true]{cursor:crosshair}.office-map-handle{background:transparent!important;border:0!important}.office-map-handle span{display:grid;place-items:center;width:32px;height:32px;border-radius:50%;border:3px solid white;background:#287456;color:white;box-shadow:0 1px 8px #142f2c55;font-size:13px;font-weight:700}.office-map-status{padding:12px 15px;background:#edf5ee;border-radius:9px;font-size:13px;line-height:1.7;color:#416c56;margin:12px 0}.office-map .leaflet-control-attribution{font-size:11px}.office-map .leaflet-control-zoom a{width:36px;height:36px;line-height:36px}.office-map .leaflet-control-attribution a{color:#267653}.office-map-tools .btn{min-height:44px}@media(max-width:680px){.office-map{height:340px}.office-map-tools{display:grid;grid-template-columns:1fr}.office-map-tools .btn{width:100%;justify-content:center}.office-map-status{font-size:13px}}
.office-search{padding:16px;border:1px solid var(--line);border-radius:12px;background:#f9fbf8;margin-top:16px}.office-search .field{margin-bottom:12px}.office-search-actions{display:flex;gap:9px;flex-wrap:wrap;margin-bottom:12px}.office-search-results{display:grid;gap:8px;margin:10px 0}.office-search-result{display:block;width:100%;text-align:left;line-height:1.6;font-size:13px;background:white;border:1px solid var(--line);border-radius:9px;padding:12px 14px;color:#355c48;min-height:44px;overflow-wrap:anywhere}.office-search-result:hover,.office-search-result[aria-pressed=true]{background:#edf5ee;border-color:#6c997d}.office-search-result:focus-visible{outline:3px solid #98bda5;outline-offset:2px}.office-location-marker{background:transparent;border:0}.office-location-marker span{display:grid;place-items:center;width:36px;height:36px;border:3px solid white;border-radius:50%;background:#467fa5;color:white;box-shadow:0 1px 8px #142f2c55;font-size:24px}@media(max-width:680px){.office-search-actions{display:grid;grid-template-columns:1fr}.office-search-actions .btn{width:100%;justify-content:center}}
.office-boundary-save{display:flex;align-items:center;justify-content:space-between;gap:16px;margin:14px 0;padding:16px;background:#edf5ee;border:1px solid #dce8dc;border-radius:10px}.office-boundary-save strong{font-size:14px;color:#365c46}.office-boundary-save p{margin-top:6px;font-size:13px;line-height:1.7}.office-boundary-save .btn{flex-shrink:0;min-height:46px}.office-boundary-save [data-dirty=true]{color:#8b5223}@media(max-width:680px){.office-boundary-save{flex-direction:column;align-items:stretch}.office-boundary-save .btn{width:100%;justify-content:center}}

.login-institution{font-family:Manrope,system-ui,sans-serif;font-size:22px;font-weight:700;line-height:1.45;color:#f3f6ef;margin-bottom:15px}.login-copyright{border-top:1px solid var(--line);margin-top:28px;padding-top:18px;color:#61766a;font-size:12px;line-height:1.8;text-align:center}@media(max-width:680px){.login-institution{font-size:20px;margin-bottom:12px}.login-copyright{margin-top:22px;font-size:12px}}

/* Keep the navigation toggle reachable when the desktop sidebar is hidden. */
.sidebar-toggle{display:grid;flex-shrink:0}.topbar .breadcrumb{margin-right:auto}.top-actions{margin-left:auto}
@media(min-width:681px){body.sidebar-hidden .sidebar{visibility:hidden;transform:translateX(-100%)}body.sidebar-hidden .main{margin-left:0}body.sidebar-hidden #toast{left:50%}}
@media(max-width:680px){.sidebar{transition:transform .2s}}

.schedule-calendar{margin-bottom:24px}.calendar-toolbar{display:flex;align-items:end;justify-content:space-between;gap:12px;margin-bottom:12px}.calendar-month-form{display:flex;align-items:end;gap:10px;min-width:0}.calendar-month-form .field{margin:0;min-width:0}.calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px;margin-top:18px}.calendar-weekday{text-align:center;color:var(--muted);font-size:12px;padding:8px}.calendar-day{min-width:0;border:1px solid var(--line);border-radius:10px;padding:10px;display:flex;flex-direction:column;gap:9px}.calendar-day.today{border-color:var(--green)}.calendar-day.selected{background:#edf5ee}.calendar-date{font-size:12px;font-weight:700;overflow-wrap:anywhere}.calendar-shift{display:grid;gap:3px;font-size:11px;overflow-wrap:anywhere}.calendar-shift strong{color:var(--green)}.calendar-shift span{color:#61746b}.calendar-edit{margin-top:auto;padding:7px 4px;font-size:11px;width:100%}
@media(max-width:1100px){.calendar-grid{gap:4px}.calendar-day{padding:7px}}
@media(max-width:680px){.calendar-grid{grid-template-columns:1fr;gap:12px}.calendar-weekday,.calendar-spacer{display:none}.calendar-day{padding:15px;gap:12px}.calendar-shift{grid-template-columns:65px minmax(0,1fr);font-size:14px}.calendar-date{font-size:14px}.calendar-edit{font-size:14px;min-height:44px}.calendar-month-form{flex-wrap:wrap;gap:8px}.calendar-month-form input{width:100%;font-size:16px;min-height:44px}.calendar-toolbar{align-items:center;gap:8px}.calendar-toolbar>.btn{padding:10px}.calendar-month-form .field{flex:1 1 120px}.calendar-month-form .btn{width:100%}}
@media(min-width:681px) and (max-width:1100px){.calendar-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.calendar-weekday,.calendar-spacer{display:none}.calendar-day{padding:14px}.calendar-shift{font-size:13px}.calendar-date{font-size:14px}}
@media(max-width:680px){.calendar-toolbar{flex-wrap:wrap}.calendar-month-form{order:-1;flex:1 0 100%}}
