:root{--navy:#102a43;--blue:#1769e0;--teal:#0f9f8f;--ink:#243b53;--muted:#627d98;--line:#d9e2ec;--bg:#f5f7fa;--white:#fff;--danger:#b42318}*{box-sizing:border-box}body,html{background:var(--bg)}body{margin:0;color:var(--ink);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;-webkit-font-smoothing:antialiased}button,input,select{font:inherit}button{cursor:pointer}.app-shell{min-height:100dvh;max-width:720px;margin:0 auto;background:var(--bg);padding-bottom:calc(28px + env(safe-area-inset-bottom))}.app-shell.narrow{max-width:600px}.topbar{background:var(--navy);color:#fff;padding:calc(18px + env(safe-area-inset-top)) 20px 22px;display:flex;justify-content:space-between;align-items:center}.simple-header h1,.topbar h1{font-size:24px;margin:2px 0 0;letter-spacing:-.03em}.eyebrow{margin:0;color:var(--blue);font-size:11px;letter-spacing:.12em;font-weight:800}.eyebrow.light{color:#89c2ff}.user-menu{position:relative}.user-menu summary{list-style:none;width:42px;height:42px;display:grid;place-items:center;border-radius:50%;background:#fff;color:var(--navy);font-weight:800}.user-menu summary::-webkit-details-marker{display:none}.user-menu div{position:absolute;z-index:5;right:0;top:50px;width:210px;padding:14px;border-radius:14px;background:#fff;color:var(--ink);box-shadow:0 14px 40px #0b1f3360;display:grid;gap:7px}.user-menu span{font-size:12px;color:var(--muted)}.user-menu a,.user-menu button{border:0;background:none;padding:10px 0 0;color:var(--blue);text-align:left;text-decoration:none;font-weight:700}.controls{padding:14px 16px 0}.app-header{min-height:94px}.mode-nav{margin:12px 16px 0;padding:4px;display:grid;grid-template-columns:repeat(3,1fr);gap:4px;border:1px solid var(--line);border-radius:13px;background:#fff}.mode-nav a{min-height:44px;display:flex;align-items:center;justify-content:center;gap:6px;border-radius:9px;color:var(--muted);text-decoration:none;font-size:12px;font-weight:800;white-space:nowrap}.mode-nav a span{width:19px;height:19px;display:grid;place-items:center;border-radius:50%;background:#eef2f6;color:#52606d;font-size:10px}.mode-nav a.active{color:#fff;background:var(--blue);box-shadow:0 3px 10px #1769e033}.mode-nav a.active span{color:var(--blue);background:#fff}.step-heading{margin:18px 16px 0}.step-heading h2{margin:4px 0;font-size:21px;letter-spacing:-.02em}.step-heading>p:last-child{margin:0;color:var(--muted);font-size:13px}.selector-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;padding:14px;background:#fff;border:1px solid var(--line);border-radius:16px}.selector-grid label:nth-child(3){grid-column:1/2}label{color:var(--ink);font-size:12px;font-weight:750;display:grid;gap:6px}.optional-label{color:var(--muted);font-size:10px;font-weight:600}input,select{width:100%;min-height:44px;border:1px solid #bcccdc;border-radius:10px;padding:9px 11px;background:#fff;color:var(--ink);font-size:15px}input:focus,select:focus{outline:3px solid #b9dbff;border-color:var(--blue)}.primary-button,.secondary-button{border:0;border-radius:11px;min-height:48px;padding:11px 18px;font-weight:800}.primary-button{color:#fff;background:var(--blue)}.primary-button:disabled{opacity:.55}.secondary-button{color:var(--blue);background:#e8f2ff;align-self:end}.shift-summary{margin:14px 16px 0;padding:20px;border-radius:18px;color:#fff;background:linear-gradient(135deg,#164e7a,var(--navy));display:flex;justify-content:space-between;align-items:center}.shift-summary h2{font-size:26px;margin:3px 0}.shift-summary p:last-child{margin:0;color:#c9d9e8;font-size:13px}.progress-ring{width:74px;height:74px;border:5px solid #38bdf8;border-radius:50%;display:grid;grid-template-columns:auto auto;place-content:center;gap:3px;background:#ffffff0b}.progress-ring strong{font-size:25px;line-height:1}.progress-ring span{font-size:9px;line-height:1.15;color:#c9d9e8}.stats-row{display:grid;grid-template-columns:repeat(3,1fr);margin:12px 16px 0;border:1px solid var(--line);border-radius:14px;background:#fff;overflow:hidden}.stats-row div{display:grid;text-align:center;padding:12px 5px;border-right:1px solid var(--line)}.stats-row div:last-child{border:0}.stats-row strong{font-size:20px}.stats-row span{color:var(--muted);font-size:11px}.people-list{padding:18px 16px 0}.people-list h2{margin:0 0 10px;font-size:16px}.person-row{position:relative;width:100%;display:flex;align-items:center;gap:12px;text-align:left;border:1px solid var(--line);border-radius:14px;padding:13px;background:#fff;color:var(--ink);margin-bottom:9px}.person-row.waiting:active{transform:scale(.99);background:#f0f7ff}.person-row:disabled{cursor:default;opacity:1}.avatar{flex:0 0 auto;width:42px;height:42px;display:grid;place-items:center;border-radius:50%;color:#075985;background:#e0f2fe;font-weight:850;font-size:13px}.avatar.large{width:52px;height:52px;font-size:18px}.person-copy{display:grid;gap:3px;min-width:0;flex:1}.person-copy strong{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.person-copy small{color:var(--muted);font-size:11px}.status-chip{border-radius:999px;padding:5px 8px;text-transform:capitalize;font-size:10px;font-weight:800}.status-chip.waiting{background:#eef2f6;color:#52606d}.status-chip.allocated{background:#e0f2fe;color:#0369a1}.status-chip.returned{background:#dff7ee;color:#087866}.status-chip.absent{background:#fee4e2;color:var(--danger)}.chevron{color:var(--blue);font-size:24px}.error-banner,.offline-banner,.success-banner{margin:12px 16px 0;border-radius:10px;padding:10px 12px;font-size:13px;font-weight:650}.error-banner,.offline-banner{color:#8a1c13;background:#fee4e2}.success-banner{color:#076c5d;background:#dff7ee}.empty-state{margin:20px 16px;padding:30px 20px;background:#fff;border:1px solid var(--line);border-radius:16px;text-align:center}.empty-state.compact{margin:0;padding:20px}.empty-state h2{font-size:18px}.empty-state p{color:var(--muted)}.modal-backdrop{position:fixed;z-index:20;inset:0;background:#061727a8;display:flex;align-items:flex-end;justify-content:center}.scan-sheet{position:relative;width:min(100%,600px);min-height:450px;border-radius:24px 24px 0 0;padding:22px 24px calc(28px + env(safe-area-inset-bottom));background:#fff;text-align:center}.close-button{position:absolute;right:18px;top:14px;border:0;background:#eef2f6;color:var(--ink);border-radius:50%;width:38px;height:38px;font-size:25px}.scan-person{display:flex;align-items:center;gap:12px;padding-right:38px;text-align:left}.scan-person p{margin:0 0 2px;color:var(--muted);font-size:12px}.scan-person h2{margin:0;font-size:20px}.nfc-symbol{margin:48px auto 18px;width:82px;height:82px;display:grid;place-items:center;border-radius:22px;color:var(--blue);background:#e8f2ff;font-size:25px;font-weight:900;letter-spacing:-6px;transform:rotate(-90deg)}.scan-sheet h3{font-size:21px;margin:8px 0}.scan-sheet>p{color:var(--muted);margin:0 auto 20px;max-width:330px;line-height:1.5}.scan-button{width:100%;margin-top:15px}.scan-pulse{margin:42px auto 18px;width:135px;height:135px;display:grid;place-items:center;border-radius:50%;background:#dceeff;animation:pulse 1.5s infinite}.scan-pulse .nfc-symbol{margin:0}.success-mark{margin:50px auto 22px;display:grid;place-items:center;width:85px;height:85px;border-radius:50%;background:#dff7ee;color:var(--teal);font-size:48px;font-weight:800}.stack{display:grid;gap:15px}.login-shell{min-height:100dvh;display:grid;place-items:center;padding:24px;background:linear-gradient(145deg,#e8f2ff,#f5f7fa 60%)}.login-card{width:min(100%,390px);padding:28px;background:#fff;border-radius:22px;box-shadow:0 18px 55px #102a4320}.brand-mark{width:48px;height:48px;display:grid;place-items:center;border-radius:14px;background:var(--navy);color:#fff;font-size:25px;font-weight:900;margin-bottom:18px}.login-card h1{margin:6px 0;font-size:29px;letter-spacing:-.04em}.muted{color:var(--muted)}.login-form{margin-top:24px}.login-form .error-banner,.provision-form .error-banner,.provision-form .success-banner{margin:0}.simple-header{display:flex;align-items:center;gap:14px;padding:calc(18px + env(safe-area-inset-top)) 18px 18px;background:var(--navy);color:#fff}.simple-header a{color:#fff;text-decoration:none;font-size:38px;line-height:1}.explain-card,.provision-form{margin:16px;padding:18px;border:1px solid var(--line);border-radius:16px;background:#fff}.explain-card h2{margin:0 0 7px;font-size:17px}.explain-card p{margin:0;color:var(--muted);font-size:13px;line-height:1.5}.scan-field{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:end}.check-card{margin:16px;min-height:500px;padding:30px 22px;display:flex;flex-direction:column;align-items:center;text-align:center;border:1px solid var(--line);border-radius:18px;background:#fff}.check-card .nfc-symbol{margin-top:38px}.check-card .scan-pulse{margin-top:36px}.check-card h2{margin:6px 0 8px;font-size:24px;letter-spacing:-.025em}.check-card>p:not(.error-banner):not(.result-kicker){max-width:330px;margin:0 0 24px;color:var(--muted);line-height:1.5}.wide-button{width:100%;margin-top:12px}.result-mark{width:84px;height:84px;margin:35px auto 22px;display:grid;place-items:center;border-radius:50%;font-size:42px;font-weight:900}.result-mark.paired{color:#087866;background:#dff7ee}.result-mark.unpaired{color:#52606d;background:#eef2f6}.result-mark.unknown{color:#9a6700;background:#fff1c7}.result-kicker{margin:0!important;color:var(--blue);font-size:12px;font-weight:850;text-transform:uppercase;letter-spacing:.08em}.person-result{font-size:30px!important}.result-details{width:100%;margin:18px 0 12px;border:1px solid var(--line);border-radius:13px;overflow:hidden;text-align:left}.result-details div{padding:11px 13px;display:flex;justify-content:space-between;gap:15px;border-bottom:1px solid var(--line)}.result-details div:last-child{border:0}.result-details dt{color:var(--muted);font-size:12px}.result-details dd{margin:0;font-size:13px;font-weight:750;text-align:right}@keyframes pulse{0%,to{box-shadow:0 0 0 0 #2196f344}50%{box-shadow:0 0 0 22px #2196f300}}@media (min-width:600px){.modal-backdrop{align-items:center;padding:20px}.scan-sheet{border-radius:24px}}