:root{--bg: #f4f6fa;--surface: #ffffff;--border: #dde3ee;--text: #1a2333;--muted: #64748b;--primary: #2f6fed;--primary-dark: #1e56c8;--danger: #dc2626;--ok: #16a34a;--warn: #d97706;--purple: #8b5cf6;--radius: 8px;font-size:15px}*{box-sizing:border-box}body{margin:0;font-family:Segoe UI,system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--text)}#root{min-height:100vh}a{color:var(--primary);text-decoration:none}h1{font-size:1.4rem;margin:0 0 16px}h2{font-size:1.1rem;margin:24px 0 8px}.layout{display:flex;min-height:100vh}.sidebar{width:220px;flex-shrink:0;background:#14203a;color:#cdd8ef;display:flex;flex-direction:column;padding:16px 0;position:sticky;top:0;height:100vh}.sidebar .brand{font-weight:700;font-size:1.1rem;color:#fff;padding:0 20px 16px}.sidebar a{color:#cdd8ef;padding:9px 20px;display:block;border-left:3px solid transparent}.sidebar a:hover{background:#1d2c4f}.sidebar a.active{background:#1d2c4f;border-left-color:var(--primary);color:#fff}.sidebar .spacer{flex:1}.sidebar .userbox{padding:12px 20px;border-top:1px solid #24345c;font-size:.85rem}.main{flex:1;padding:24px 28px;min-width:0}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px;margin-bottom:16px}.grid{display:grid;gap:16px}.grid.cols-3{grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px;margin-bottom:16px}.kpi{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:14px;cursor:pointer}.kpi:hover{border-color:var(--primary)}.kpi .num{font-size:1.6rem;font-weight:700}.kpi .label{color:var(--muted);font-size:.85rem}.kpi.warn .num{color:var(--warn)}.kpi.danger .num{color:var(--danger)}table{width:100%;border-collapse:collapse;background:var(--surface)}th,td{text-align:left;padding:8px 10px;border-bottom:1px solid var(--border);font-size:.9rem}th{color:var(--muted);font-weight:600;background:#f8fafd;position:sticky;top:0}tr.clickable:hover{background:#f2f6ff;cursor:pointer}button,.btn{font:inherit;border:1px solid var(--border);background:var(--surface);color:var(--text);padding:7px 14px;border-radius:6px;cursor:pointer}button:hover{border-color:var(--primary)}button.primary{background:var(--primary);border-color:var(--primary);color:#fff}button.primary:hover{background:var(--primary-dark)}button.danger{background:var(--danger);border-color:var(--danger);color:#fff}button:disabled{opacity:.5;cursor:not-allowed}input,select,textarea{font:inherit;padding:7px 10px;border:1px solid var(--border);border-radius:6px;background:#fff;color:var(--text);width:100%}input:focus,select:focus,textarea:focus{outline:2px solid #bfd3f9;border-color:var(--primary)}label{display:block;font-size:.82rem;color:var(--muted);margin:10px 0 4px}.formrow{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:0 14px}.toolbar{display:flex;gap:10px;align-items:center;margin-bottom:14px;flex-wrap:wrap}.toolbar input[type=search]{max-width:280px}.toolbar .right{margin-left:auto;display:flex;gap:8px}.badge{display:inline-block;padding:2px 8px;border-radius:99px;font-size:.75rem;font-weight:600}.badge.PLANNED{background:#dbeafe;color:#1e40af}.badge.CONFIRMED{background:#ccfbf1;color:#0f766e}.badge.IN_PROGRESS{background:#fef3c7;color:#b45309}.badge.COMPLETED{background:#dcfce7;color:#166534}.badge.CANCELLED{background:#e2e8f0;color:#475569;text-decoration:line-through}.badge.NEEDS_REASSIGNMENT{background:#fee2e2;color:#b91c1c}.badge.SUBMITTED,.badge.UNDER_REVIEW{background:#ede9fe;color:#6d28d9}.badge.APPROVED{background:#dcfce7;color:#166534}.badge.REJECTED{background:#fee2e2;color:#b91c1c}.badge.PENDING{background:#fef3c7;color:#b45309}.error{background:#fee2e2;color:#991b1b;border:1px solid #fecaca;padding:10px 12px;border-radius:6px;margin:10px 0;font-size:.9rem}.notice{background:#fef9c3;color:#854d0e;border:1px solid #fde68a;padding:10px 12px;border-radius:6px;margin:10px 0;font-size:.9rem}.success{background:#dcfce7;color:#166534;border:1px solid #bbf7d0;padding:10px 12px;border-radius:6px;margin:10px 0;font-size:.9rem}.muted{color:var(--muted);font-size:.85rem}.planning{overflow-x:auto;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius)}.plan-grid{display:grid;min-width:900px}.plan-head,.plan-row{display:grid;grid-template-columns:180px repeat(var(--cols),1fr);border-bottom:1px solid var(--border)}.plan-head{background:#f8fafd;font-weight:600;font-size:.85rem;position:sticky;top:0;z-index:2}.plan-head>div,.plan-emp{padding:8px 10px;border-right:1px solid var(--border)}.plan-emp{font-size:.87rem;display:flex;flex-direction:column;justify-content:center}.plan-emp .muted{font-size:.75rem}.plan-cell{position:relative;border-right:1px solid var(--border);min-height:64px;padding:3px}.plan-cell.droptarget{background:#eef4ff}.plan-cell:hover{background:#f7faff}.appt{border-radius:6px;padding:4px 6px;font-size:.76rem;margin-bottom:3px;cursor:grab;border-left:4px solid var(--primary);background:#eaf1ff;overflow:hidden}.appt .time{font-weight:700}.appt.CONFIRMED{border-left-color:#0d9488;background:#ecfdf8}.appt.IN_PROGRESS{border-left-color:var(--warn);background:#fffaeb}.appt.COMPLETED{border-left-color:var(--ok);background:#f0fdf4}.appt.CANCELLED{border-left-color:#94a3b8;background:#f1f5f9;text-decoration:line-through;opacity:.7}.appt.NEEDS_REASSIGNMENT{border-left-color:var(--danger);background:#fef2f2}.appt.leave{border-left-color:var(--purple);background:#f5f3ff;cursor:default}.appt .eff{color:var(--muted);font-size:.7rem}.modal-backdrop{position:fixed;inset:0;background:#0f172a73;display:flex;align-items:center;justify-content:center;z-index:50}.modal{background:var(--surface);border-radius:10px;padding:20px;width:min(560px,92vw);max-height:88vh;overflow-y:auto}.modal h3{margin:0 0 12px}.modal .actions{display:flex;gap:10px;justify-content:flex-end;margin-top:16px}.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center}.login-card{width:360px}.login-card .brand{font-size:1.5rem;font-weight:700;text-align:center;margin-bottom:6px}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--border);margin-bottom:14px}.tabs button{border:none;background:none;padding:8px 14px;border-bottom:2px solid transparent;border-radius:0}.tabs button.active{border-bottom-color:var(--primary);color:var(--primary);font-weight:600}.factor{display:flex;justify-content:space-between;font-size:.85rem;padding:2px 0}.scorebar{height:6px;background:#e2e8f0;border-radius:3px;overflow:hidden;margin-top:4px}.scorebar>div{height:100%;background:var(--primary)}
