:root{--bg:#f3f5f8;--panel:#fff;--line:#e5e9f0;--text:#172033;--muted:#738096;--primary:#2563eb;--primary-dark:#1d4ed8;--danger:#dc2626;--success:#16865c;color:var(--text);background:var(--bg);font-synthesis:none;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif}*{box-sizing:border-box}html,body{background:var(--bg);min-height:100%;margin:0}button,input,select{font:inherit}button{cursor:pointer}.btn{white-space:nowrap;border:1px solid #0000;border-radius:7px;justify-content:center;align-items:center;gap:6px;height:36px;padding:0 15px;font-weight:500;transition:all .16s;display:inline-flex}.btn:hover:not(:disabled){transform:translateY(-1px)}.btn:disabled{opacity:.45;cursor:not-allowed;transform:none}.btn-primary{color:#fff;background:var(--primary);border-color:var(--primary);font-weight:600}.btn-primary:hover:not(:disabled){background:var(--primary-dark);border-color:var(--primary-dark)}.btn-secondary{color:#344056;background:#fff;border-color:#d8dee8}.btn-secondary:hover:not(:disabled){background:#f8fafc;border-color:#aeb8c8}.btn-ghost{color:#667085;background:0 0;border-color:#0000}.btn-ghost:hover:not(:disabled){color:var(--primary);background:#f1f5fb}.btn-danger-outline{color:var(--danger);background:#fff;border-color:#f0c7c4}.btn-danger-outline:hover:not(:disabled){background:#fff3f2;border-color:#e6a29d}.btn-sm{height:30px;padding:0 10px;font-size:12px}.btn-icon{color:#8a94a5;background:0 0;border:0;width:30px;height:30px;padding:0;font-size:22px}.btn-icon:hover:not(:disabled){color:#475467;background:#f3f5f8;transform:none}input,select{height:36px;color:var(--text);background:#fff;border:1px solid #d8dee8;border-radius:7px;outline:none;padding:0 11px}input:focus,select:focus{border-color:#79a3f6;box-shadow:0 0 0 3px #2563eb1a}input::placeholder{color:#a2aabd}.topbar{border-bottom:1px solid var(--line);z-index:20;background:#fff;height:64px;position:sticky;top:0}.topbar-inner{align-items:center;max-width:1480px;height:100%;margin:auto;padding:0 28px;display:flex}.brand{color:var(--text);align-items:center;gap:10px;min-width:190px;text-decoration:none;display:flex}.app-icon{object-fit:cover;border-radius:10px;box-shadow:0 4px 12px #1e33522e}.brand strong,.brand small{display:block}.brand strong{font-size:15px;line-height:18px}.brand small{color:#8a95a7;margin-top:1px;font-size:11px}.topnav{flex:1;align-items:center;gap:4px;height:100%;display:flex}.topnav a{color:#586579;white-space:nowrap;border-radius:7px;align-items:center;height:38px;padding:0 14px;font-size:14px;text-decoration:none;display:flex}.topnav a:hover{color:#1f4fac;background:#f4f7fc}.topnav a.active{color:#1749a6;background:#edf4ff;font-weight:600}.account{border-left:1px solid var(--line);align-items:center;gap:8px;padding-left:18px;display:flex}.avatar{color:#2254b7;background:#eaf1ff;border-radius:50%;place-items:center;width:28px;height:28px;font-size:12px;font-weight:700;display:grid}.account-name{font-size:13px;font-weight:600}.content{max-width:1480px;margin:auto;padding:28px}.page-header{justify-content:space-between;align-items:flex-start;min-height:52px;margin-bottom:20px;display:flex}.page-header h1{letter-spacing:-.3px;margin:0;font-size:23px;font-weight:700;line-height:30px}.page-header p,.panel-header p{color:var(--muted);margin:5px 0 0;font-size:13px}.page-actions{gap:8px;display:flex}.panel{border:1px solid var(--line);background:#fff;border-radius:10px;box-shadow:0 1px 2px #0f172a06}.panel-header{border-bottom:1px solid #edf0f4;justify-content:space-between;align-items:center;padding:17px 20px;display:flex}.panel h2{margin:0;font-size:15px}.metric-grid{grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:18px;display:grid}.metric{border:1px solid var(--line);background:#fff;border-radius:10px;min-height:126px;padding:18px 20px;box-shadow:0 1px 2px #0f172a06}.metric>span{color:#667085;font-size:13px}.metric strong{letter-spacing:-1px;margin:8px 0 4px;font-size:31px;line-height:38px;display:block}.metric small{color:#8993a4;font-size:12px}.metric strong.text-value{letter-spacing:0;font-size:22px}.metric strong.time-value{letter-spacing:0;margin-top:15px;font-size:16px}.danger-number{color:var(--danger)}.section-heading{justify-content:space-between;align-items:flex-end;margin:24px 0 12px;display:flex}.section-heading h2{margin:0;font-size:16px}.section-heading p{color:var(--muted);margin:4px 0 0;font-size:12px}.status-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;display:grid}.status-card{border:1px solid var(--line);background:#fff;border-radius:10px;min-height:126px;padding:18px 20px;box-shadow:0 1px 2px #0f172a06}.status-card-head{justify-content:space-between;align-items:center;margin-bottom:20px;display:flex}.status-card-head b{font-size:12px}.status-card>strong,.status-card>small{display:block}.status-card>strong{font-size:14px}.status-card>small{color:var(--muted);margin-top:6px;font-size:12px}.health-dot{background:#9ca3af;border-radius:50%;width:8px;height:8px;box-shadow:0 0 0 4px #f1f3f5}.health-dot.ok{background:#1aa273;box-shadow:0 0 0 4px #e8f8f2}.health-dot.warn{background:#d99012;box-shadow:0 0 0 4px #fff5db}.health-dot.danger{background:#dc2626;box-shadow:0 0 0 4px #feecec}.award-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;display:grid}.award-card{border:1px solid var(--line);background:#fff;border-radius:10px;align-items:center;gap:14px;min-height:112px;padding:18px;display:flex;box-shadow:0 1px 2px #0f172a06}.award-card:first-child .award-icon{background:linear-gradient(145deg,#fff8dc,#ffedb0)}.award-card:nth-child(2) .award-icon{background:linear-gradient(145deg,#f4f0ff,#e4dcff)}.award-card:nth-child(3) .award-icon{background:linear-gradient(145deg,#fff8d8,#ffe7a5)}.award-card:nth-child(4) .award-icon{background:linear-gradient(145deg,#fff0ea,#ffd7cc)}.award-icon{border-radius:13px;flex:none;place-items:center;width:46px;height:46px;padding:7px;display:grid;box-shadow:inset 0 0 0 1px #0f172a0a}.award-icon svg{width:100%;height:100%;display:block}.award-card span,.award-card strong,.award-card small{display:block}.award-card span{color:#788497;font-size:12px}.award-card strong{margin-top:5px;font-size:16px}.award-card small{color:#8a95a5;margin-top:5px;font-size:11px}.analytics-grid{grid-template-columns:minmax(0,2fr) minmax(340px,1fr);gap:14px;margin-top:18px;display:grid}.chart-panel{min-height:310px}.chart-total,.chart-legend{color:#7b8798;font-size:11px}.chart-legend{align-items:center;gap:6px;display:flex}.chart-legend span{border-radius:50%;width:8px;height:8px;margin-left:8px}.chart-legend span.check-in{background:#3478f6}.chart-legend span.check-out{background:#20a675}.line-chart{height:245px;padding:8px 18px 10px}.line-chart svg{width:100%;height:100%;overflow:visible}.line-chart text{fill:#8b96a7;font-size:10px}.chart-axis{stroke:#dfe4eb;stroke-width:1px}.chart-line{fill:none;stroke-width:3px;stroke-linecap:round;stroke-linejoin:round}.check-in-line{stroke:#3478f6}.check-out-line{stroke:#20a675}.chart-point{stroke:#fff;stroke-width:2px}.check-in-point{fill:#3478f6}.check-out-point{fill:#20a675}.time-bars{padding:17px 20px}.time-bars>div{grid-template-columns:68px 1fr 30px;align-items:center;gap:10px;min-height:35px;display:grid}.time-label strong,.time-label small{display:block}.time-label strong{font-size:12px}.time-label small{color:#929bab;margin-top:2px;font-size:10px}.bar-track{background:#edf0f4;border-radius:5px;height:8px;overflow:hidden}.bar-track span{background:linear-gradient(90deg,#4b82ee,#72a2fa);border-radius:5px;height:100%;display:block}.time-bars b{text-align:right;font-size:12px}.toolbar{border-bottom:1px solid #edf0f4;align-items:center;min-height:58px;padding:11px 16px;display:flex}.search-form{align-items:center;gap:8px;display:flex}.search-form input{width:270px}.search-form.wide input{width:320px}.search-form select{min-width:150px}.table-wrap{position:relative;overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:13px}th,td{text-align:left;white-space:nowrap;border-bottom:1px solid #edf0f4;height:46px;padding:0 14px}th{color:#697589;background:#fafbfc;height:42px;font-size:12px;font-weight:600}tbody tr:hover{background:#fafcff}tbody tr:last-child td{border-bottom:0}.right,.row-actions{text-align:right}.row-actions button+button{margin-left:6px}.strong{font-weight:600}.mono{font-family:SFMono-Regular,Consolas,monospace;font-size:12px}.truncate{text-overflow:ellipsis;white-space:nowrap;max-width:210px;display:block;overflow:hidden}.error-cell{color:#a13a36}.badge{color:#596579;background:#eef1f5;border-radius:12px;align-items:center;height:24px;padding:0 8px;font-size:11px;font-weight:600;display:inline-flex}.badge-active,.badge-synced,.badge-online{color:#147250;background:#e8f7f0}.badge-disabled,.badge-inactive,.badge-blocked{color:#b42318;background:#fff0ef}.badge-pending,.badge-unbound{color:#946200;background:#fff5dc}.badge-processing{color:#2458aa;background:#eaf2ff}.badge-offline,.badge-check_in,.badge-check_out{color:#485569;background:#f0f2f6}.face-state{align-items:center;gap:6px;font-size:12px;display:inline-flex}.face-state span{border-radius:50%;width:7px;height:7px}.face-state.yes{color:#147250}.face-state.yes span{background:#20a675}.face-state.no{color:#7e8899}.face-state.no span{background:#a8b0bd}.directory-status{color:#7a8596;border-bottom:1px solid #edf0f4;align-items:center;gap:14px;min-height:48px;padding:0 16px;font-size:12px;display:flex}.directory-status strong{color:#344056;font-size:13px}.directory-status .health-dot{flex:none}.directory-warning,.missing-value{color:#b42318}.directory-filters{width:100%}.person-cell{align-items:center;gap:9px;min-width:150px;display:flex}.person-avatar{color:#2254b7;background:#eaf1ff;border-radius:50%;flex:none;place-items:center;width:32px;height:32px;font-size:12px;font-weight:700;display:grid;overflow:hidden}.person-avatar img{object-fit:cover;width:100%;height:100%}.person-info{min-width:0}.person-info strong,.person-info small{text-overflow:ellipsis;white-space:nowrap;max-width:220px;display:block;overflow:hidden}.person-info strong{font-size:13px}.person-info small{color:#8791a1;margin-top:2px;font-size:11px}.link-state{color:#7e8899;font-size:12px}.link-state.linked{color:#147250}.link-state.error{color:#b42318}.empty{color:#a0a9b7;flex-direction:column;justify-content:center;align-items:center;height:190px;display:flex}.empty span{font-size:28px;font-weight:200}.empty p{margin:6px;font-size:13px}.pagination{color:#7a8596;border-top:1px solid #edf0f4;justify-content:flex-end;align-items:center;gap:9px;height:58px;padding:0 16px;font-size:12px;display:flex}.pagination select{height:31px;font-size:12px}.pagination button{height:31px}.page-number{text-align:center;color:#475467;min-width:48px}.notice{border-radius:8px;margin-bottom:14px;padding:11px 14px;font-size:13px}.notice.error{color:#a52620;background:#fff0ef;border:1px solid #ffd8d5}.notice.success{color:#126a49;background:#eaf8f1;border:1px solid #cceede}.sync-log-panel{margin-top:16px}.modal-backdrop{z-index:50;background:#0f172a57;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.modal{background:#fff;border-radius:12px;width:440px;box-shadow:0 24px 60px #0f172a38}.modal-header{border-bottom:1px solid var(--line);justify-content:space-between;padding:20px 22px 16px;display:flex}.modal-header h2{margin:0;font-size:18px}.modal-header p{color:var(--muted);margin:5px 0 0;font-size:12px}.form-stack{padding:20px 22px}.form-stack label,.login-card label{margin-bottom:15px;font-size:13px;font-weight:600;display:block}.form-stack input,.login-card input{width:100%;margin-top:7px;display:block}.modal-actions{justify-content:flex-end;gap:8px;margin-top:22px;display:flex}.settings-grid{grid-template-columns:repeat(2,minmax(0,560px));gap:16px;display:grid}.setting-card{gap:16px;padding:22px;display:flex}.setting-icon{color:#2458af;background:#edf4ff;border-radius:10px;flex:none;place-items:center;width:42px;height:42px;font-weight:700;display:grid}.setting-icon.feishu{color:#17765c;background:#eaf8f4}.setting-card h2{margin:1px 0 18px;font-size:16px}.setting-card p{color:#8791a1;margin:0 0 5px;font-size:12px}.setting-card>div:last-child{flex:1}.setting-card strong{font-size:14px}.setting-note{color:#6f7b8e;background:#f7f8fa;border-radius:7px;margin-top:18px;padding:11px 12px;font-size:12px;line-height:1.7}.setting-action{margin-top:16px}.green{color:#147250}.amber{color:#946200}.login-page{background:radial-gradient(circle at 50% 20%,#fff 0,#f4f7fb 34%,#edf1f6 100%);place-items:center;min-height:100vh;padding:24px;display:grid}.login-card{background:#fff;border:1px solid #e3e8ef;border-radius:14px;width:400px;padding:34px 36px 28px;box-shadow:0 18px 55px #1e33521a}.login-brand{justify-content:center;margin-bottom:19px;display:flex}.login-icon{border-radius:14px}.login-card h1{text-align:center;margin:0;font-size:22px}.login-card>p{text-align:center;color:#7d899a;margin:8px 0 28px;font-size:13px}.login-card form{margin-bottom:22px}.login-button{width:100%;height:40px;margin-top:4px}.login-error,.login-success{border-radius:6px;margin:-15px 0 18px;padding:9px 10px;font-size:12px}.login-error{color:#b42318;background:#fff0ef}.login-success{color:#126a49;background:#eaf8f1}.login-card>small{text-align:center;color:#a0a8b5;font-size:11px;display:block}@media (max-width:1100px){.topbar-inner{padding:0 16px}.brand{min-width:160px}.topnav{overflow-x:auto}.topnav a{padding:0 10px}.account-name{display:none}.content{padding:22px 18px}.metric-grid,.award-grid{grid-template-columns:repeat(2,1fr)}.status-grid{grid-template-columns:repeat(3,minmax(220px,1fr));overflow-x:auto}.analytics-grid{grid-template-columns:1fr}}@media (max-width:700px){.topbar{height:auto}.topbar-inner{flex-wrap:wrap;height:auto;min-height:58px}.brand{flex:1}.account{border:0}.topnav{order:3;width:100%;height:48px}.content{padding:18px 12px}.page-header{gap:12px}.page-header h1{font-size:20px}.metric-grid{grid-template-columns:1fr 1fr;gap:10px}.metric{min-height:112px;padding:14px}.award-grid{grid-template-columns:1fr}.status-grid{grid-template-columns:1fr;overflow:visible}.analytics-grid{grid-template-columns:1fr}.chart-legend{display:none}.search-form{flex-wrap:wrap;width:100%}.search-form input,.search-form.wide input{flex:1;min-width:180px}.directory-status{flex-wrap:wrap;gap:8px 12px;padding:10px 12px}.settings-grid{grid-template-columns:1fr}.login-card{width:100%;max-width:400px;padding:28px 24px}.modal{width:100%}}
