.attendance{display:grid;gap:24px;min-width:0}.attendance h1{font-size:clamp(28px,4vw,42px);letter-spacing:-1px}.attendance h2{font-size:20px;margin-top:12px}.attendance h3{margin-top:12px}.attendance p{margin-top:4px}.attendance-head{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:16px}.attendance-tabs{display:flex;flex-wrap:wrap;gap:8px}.attendance-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.attendance-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.attendance-stat{padding:16px;background:var(--paper,#fff);border:1px solid var(--line,#dce1da);border-radius:16px}.attendance-stat strong{display:block;font-size:28px;font-variant-numeric:tabular-nums}.attendance-stat span{font-size:12px;color:var(--muted,#626b60)}.attendance .panel{min-width:0}.attendance-note{padding:16px;border:1px solid #c6d7ad;background:#f2f7e9;border-radius:16px}.attendance-actions{margin-top:12px;gap:8px}.attendance-submit{margin-top:16px;gap:8px}.attendance-form{display:grid;gap:12px}.attendance-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.attendance label{display:grid;gap:8px;font-size:13px}.attendance input,.attendance select,.attendance textarea{min-width:0;width:100%;padding:12px;border:1px solid var(--line,#dce1da);border-radius:8px;background:var(--paper,#fff);color:inherit;font:inherit}.attendance textarea{min-height:96px}.attendance .attendance-check{display:flex;align-items:center;gap:8px}.attendance-check input{width:20px;height:20px}.attendance-table{overflow:auto;margin-top:12px}.attendance-table table{width:100%;border-collapse:collapse;font-size:13px}.attendance-table th,.attendance-table td{padding:12px;text-align:left;border-bottom:1px solid var(--line,#dce1da);vertical-align:top}.attendance-table caption{text-align:left;color:var(--muted,#626b60);padding:8px 0}.attendance-table th{white-space:nowrap}.attendance-table .attendance-actions{margin-top:0}.attendance-empty{padding:24px;text-align:center}.attendance-code{display:block;margin-top:12px;font:700 28px monospace;letter-spacing:2px;overflow-wrap:anywhere}.attendance-pairing{margin-top:16px;padding:16px;border:1px dashed #89a35c;border-radius:12px}.attendance-muted{color:var(--muted,#626b60);font-size:12px}.attendance :focus-visible{outline:2px solid #436a28;outline-offset:4px}.attendance-toolbar{display:flex;align-items:end;flex-wrap:wrap;gap:12px}.attendance-toolbar label{max-width:240px}.attendance .attendance-days{display:flex;flex-wrap:wrap;gap:12px}.attendance-days label{display:flex;align-items:center;gap:4px}.attendance-days input{width:20px;height:20px}.attendance-status{display:inline-flex;align-items:center;padding:4px 8px;border-radius:8px;background:#edf1e9;font-size:12px}.attendance-status[data-state=active],.attendance-status[data-state=approved]{background:#e4f3d2;color:#294b10}.attendance-status[data-state=revoked],.attendance-status[data-state=rejected]{background:#f9e4e1;color:#842d20}
@media(max-width:960px){.attendance-stats{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:680px){.attendance-grid,.attendance-fields{grid-template-columns:minmax(0,1fr)}.attendance-head{align-items:start}.attendance-tabs .btn{flex:1 1 auto}.attendance-stat{padding:12px}.attendance-table th,.attendance-table td{padding:8px}.attendance-head .row{width:100%}}
.attendance-face-dialog{width:min(640px,calc(100% - 32px));max-height:calc(100dvh - 32px);overflow:auto}.attendance-face-dialog p{margin-top:8px}.attendance-face-preview{position:relative;aspect-ratio:4/3;background:#17352d;border-radius:16px;overflow:hidden;margin-top:16px}.attendance-face-preview video{width:100%;height:100%;object-fit:contain;transform:scaleX(-1)}.attendance-face-preview [data-face-placeholder]{position:absolute;inset:0;display:grid;place-items:center;color:#fff;padding:24px;text-align:center}.attendance-face-preview [hidden]{display:none}.attendance-face-check{display:flex;align-items:start;gap:12px;margin-top:16px;font-size:13px}.attendance-face-check input{width:20px;height:20px;flex-shrink:0;margin-top:4px}.attendance-face-dialog .attendance-actions{margin-top:12px}.attendance-face-dialog .attendance-submit{margin-top:16px;gap:8px}

.attendance-face-guide{position:absolute;left:50%;top:50%;width:24%;height:34%;transform:translate(-50%,-50%);border:2px solid #cff185;border-radius:50%;pointer-events:none}.attendance-face-preview:has([data-face-placeholder]:not([hidden])) .attendance-face-guide{display:none}
