:root{--bg: #f4f6f8;--panel: #ffffff;--border: #e2e8f0;--text: #1e293b;--muted: #64748b;--primary: #2563eb;--primary-fg: #ffffff;--danger: #dc2626;--ok: #16a34a;--warn: #d97706;--sidebar: #0f172a;--sidebar-fg: #cbd5e1}@media (prefers-color-scheme: dark){:root{--bg: #0b1220;--panel: #111a2e;--border: #1e293b;--text: #e2e8f0;--muted: #94a3b8;--sidebar: #060b16}}*{box-sizing:border-box}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,sans-serif;background:var(--bg);color:var(--text);font-size:14px}a{color:var(--primary);text-decoration:none}.app{display:flex;min-height:100vh}.sidebar{width:248px;flex-shrink:0;display:flex;flex-direction:column;color:#cbd5e1;background:linear-gradient(180deg,#0d1626,#0a101d);border-right:1px solid rgba(255,255,255,.06)}.sidebar .brand{display:flex;align-items:center;gap:10px;padding:18px 16px 14px}.sidebar .brand .logo{width:34px;height:34px;border-radius:9px;display:grid;place-items:center;color:#fff;font-weight:800;font-size:16px;background:linear-gradient(135deg,#3b82f6,#7c3aed);box-shadow:0 4px 12px #3b82f659}.sidebar .brand .name{font-size:14.5px;font-weight:700;color:#fff;line-height:1.2}.sidebar .brand .sub{font-size:10.5px;color:#7c8aa3}.sidebar nav{padding:6px 10px;overflow-y:auto}.sidebar nav .section{margin-bottom:2px}.sidebar nav .section-title{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;padding:9px 12px;margin-top:6px;background:transparent;border:0;font-size:11px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:#8ea2c0;cursor:pointer;text-align:left;border-radius:8px}.sidebar nav .section-title:hover{color:#dbe6f5}.sidebar nav .section-title .chev{font-size:10px;color:#64748b}.sidebar nav a{display:flex;align-items:center;gap:11px;padding:9px 12px;margin:2px 0;border-radius:9px;color:#b7c2d6;font-size:13.5px;font-weight:500;transition:background .12s,color .12s}.sidebar nav a .icon{width:18px;height:18px;flex-shrink:0;opacity:.75}.sidebar nav a:hover{background:#ffffff0d;color:#fff}.sidebar nav a:hover .icon{opacity:1}.sidebar nav a.active{background:linear-gradient(90deg,#3b82f638,#3b82f614);color:#fff;box-shadow:inset 2px 0 #60a5fa}.sidebar nav a.active .icon{opacity:1;color:#7cb0ff}.sidebar .spacer{flex:1}.sidebar .userbox{display:flex;align-items:center;gap:10px;padding:12px 14px;margin:8px;border-radius:10px;background:#ffffff0a;border:1px solid rgba(255,255,255,.07)}.sidebar .userbox .avatar{width:32px;height:32px;border-radius:50%;flex-shrink:0;display:grid;place-items:center;background:linear-gradient(135deg,#334155,#475569);color:#fff;font-weight:700;font-size:13px}.sidebar .userbox .who{min-width:0;flex:1}.sidebar .userbox .who .email{font-size:12px;color:#e2e8f0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar .userbox .who .role{font-size:10.5px;color:#8ea2c0}.sidebar .userbox .logout{flex-shrink:0;width:30px;height:30px;padding:0;display:grid;place-items:center;background:#ffffff0f;color:#cbd5e1;border:1px solid rgba(255,255,255,.12);border-radius:8px}.sidebar .userbox .logout:hover{background:#ef4444e6;color:#fff;border-color:transparent}.sidebar .userbox .logout .icon{width:16px;height:16px}.main{flex:1;padding:24px;overflow:auto}.page-title{margin:0 0 16px;font-size:20px}.card{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:16px;margin-bottom:16px}.card h2{margin:0 0 12px;font-size:15px}.row{display:flex;gap:12px;flex-wrap:wrap;align-items:flex-end}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px}label{display:block;font-size:12px;color:var(--muted);margin-bottom:4px}input,select,button,textarea{font:inherit;padding:8px 10px;border-radius:8px;border:1px solid var(--border);background:var(--panel);color:var(--text)}button{cursor:pointer;background:var(--primary);color:var(--primary-fg);border:0;font-weight:600}button.secondary{background:transparent;color:var(--text);border:1px solid var(--border)}button.danger{background:var(--danger)}button:disabled{opacity:.5;cursor:not-allowed}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:8px 10px;border-bottom:1px solid var(--border);font-size:13px}th{color:var(--muted);font-weight:600}.table-wrap{overflow-x:auto}.badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:600}.badge.ok{background:color-mix(in srgb,var(--ok) 18%,transparent);color:var(--ok)}.badge.off{background:color-mix(in srgb,var(--muted) 22%,transparent);color:var(--muted)}.badge.warn{background:color-mix(in srgb,var(--warn) 18%,transparent);color:var(--warn)}.badge.err{background:color-mix(in srgb,var(--danger) 18%,transparent);color:var(--danger)}.stat{display:flex;gap:16px}.stat .tile{flex:1;text-align:center}.stat .tile .n{font-size:28px;font-weight:700}.stat .tile .l{color:var(--muted);font-size:12px}.error{color:var(--danger);font-size:13px;margin:8px 0}.muted{color:var(--muted)}.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}.cal-head{text-align:center;font-size:11px;font-weight:700;color:var(--muted);padding:4px 0}.cal-cell{min-height:78px;border:1px solid var(--border);border-radius:6px;padding:4px;background:var(--panel);display:flex;flex-direction:column;gap:3px;overflow:hidden}.cal-empty{border:0;background:transparent}.cal-today{outline:2px solid color-mix(in srgb,var(--primary) 55%,transparent);outline-offset:-1px}.cal-date{font-size:12px;font-weight:600;color:var(--muted)}.cal-chip{font-size:11px;line-height:1.3;padding:2px 6px;border-radius:5px;color:#fff;background:linear-gradient(135deg,#3b82f6,#6366f1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.login{max-width:360px;margin:12vh auto}.login .card{padding:24px}.login input{width:100%;margin-bottom:12px}.login button{width:100%}
