:root{--bg: #f4f6f9;--surface: #ffffff;--border: #e2e8f0;--text: #1a202c;--text-muted: #64748b;--primary: #1e3a8a;--primary-hover: #1e40af;--primary-light: #dbeafe;--success: #16a34a;--success-light: #dcfce7;--warning: #d97706;--warning-light: #fef3c7;--danger: #dc2626;--danger-light: #fee2e2;--info: #0284c7;--info-light: #e0f2fe;--shadow-sm: 0 1px 2px rgba(0,0,0,.05);--shadow: 0 1px 3px rgba(0,0,0,.08), 0 1px 2px rgba(0,0,0,.04);--radius: 6px}*{box-sizing:border-box}html,body,#root{margin:0;padding:0;height:100%}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:14px;background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased}a{color:var(--primary);text-decoration:none}a:hover{text-decoration:underline}button{font-family:inherit;font-size:14px;cursor:pointer;border:1px solid var(--border);background:var(--surface);padding:8px 14px;border-radius:var(--radius);transition:all .15s}button:hover:not(:disabled){border-color:var(--primary)}button:disabled{opacity:.5;cursor:not-allowed}button.primary{background:var(--primary);color:#fff;border-color:var(--primary)}button.primary:hover:not(:disabled){background:var(--primary-hover);border-color:var(--primary-hover)}button.danger{background:var(--danger);color:#fff;border-color:var(--danger)}button.danger:hover:not(:disabled){opacity:.9}input,select,textarea{font-family:inherit;font-size:14px;padding:8px 10px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--text);width:100%}input:focus,select:focus,textarea:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-light)}label{display:block;font-weight:500;margin-bottom:4px}.field{margin-bottom:14px}.field .hint{font-size:12px;color:var(--text-muted);margin-top:4px}.field-error{color:var(--danger);font-size:12px;margin-top:4px}.app-shell{display:flex;min-height:100vh}.sidebar{width:230px;background:#0f172a;color:#e2e8f0;padding:20px 0;flex-shrink:0}.sidebar h1{font-size:16px;margin:0 20px 24px;font-weight:600;letter-spacing:.3px}.sidebar h1 .accent{color:#60a5fa}.sidebar nav a{display:block;padding:10px 20px;color:#cbd5e1;font-size:14px;border-left:3px solid transparent}.sidebar nav a:hover{background:#ffffff0a;text-decoration:none}.sidebar nav a.active{background:#60a5fa1a;border-left-color:#60a5fa;color:#fff}.main{flex:1;display:flex;flex-direction:column;min-width:0}.topbar{background:var(--surface);border-bottom:1px solid var(--border);padding:12px 24px;display:flex;justify-content:space-between;align-items:center}.topbar .user-info{display:flex;align-items:center;gap:12px;font-size:13px}.topbar .role-badge{background:var(--primary-light);color:var(--primary);padding:2px 8px;border-radius:12px;font-size:11px;font-weight:600;text-transform:uppercase}.content{flex:1;padding:24px;overflow-y:auto}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:20px;box-shadow:var(--shadow-sm);margin-bottom:16px}.card h2{margin:0 0 16px;font-size:16px}.card .toolbar{display:flex;gap:8px;align-items:center;margin-bottom:16px;flex-wrap:wrap}table{width:100%;border-collapse:collapse;font-size:13px}table th,table td{padding:10px 12px;text-align:left;border-bottom:1px solid var(--border)}table th{background:#f8fafc;font-weight:600;color:var(--text-muted);text-transform:uppercase;font-size:11px;letter-spacing:.5px}table tr:hover td{background:#fafbfc}.badge{display:inline-block;padding:3px 8px;border-radius:12px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.3px}.badge.green{background:var(--success-light);color:var(--success)}.badge.yellow{background:var(--warning-light);color:var(--warning)}.badge.red{background:var(--danger-light);color:var(--danger)}.badge.blue{background:var(--info-light);color:var(--info)}.badge.gray{background:#f1f5f9;color:var(--text-muted)}.stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;margin-bottom:20px}.stat-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px}.stat-card .label{font-size:12px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}.stat-card .value{font-size:28px;font-weight:600;margin-top:4px}.stat-card .value.danger{color:var(--danger)}.stat-card .value.warning{color:var(--warning)}.stat-card .value.success{color:var(--success)}.calendar-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:1px;background:var(--border);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.calendar-day-header{background:#f8fafc;padding:8px;font-size:11px;font-weight:600;color:var(--text-muted);text-align:center;text-transform:uppercase}.calendar-day{background:var(--surface);min-height:110px;padding:6px;font-size:12px}.calendar-day.other-month{background:#fafbfc;color:var(--text-muted)}.calendar-day.today .day-number{color:var(--primary);font-weight:700}.calendar-day .day-number{font-weight:600;margin-bottom:4px}.calendar-event{font-size:10px;padding:2px 4px;border-radius:3px;margin-bottom:2px;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.calendar-event.green{background:var(--success-light);color:var(--success)}.calendar-event.yellow{background:var(--warning-light);color:var(--warning)}.calendar-event.red{background:var(--danger-light);color:var(--danger)}.calendar-event.blue{background:var(--info-light);color:var(--info)}.calendar-event.gray{background:#e2e8f0;color:var(--text-muted)}.login-shell{height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#1e3a8a,#0f172a)}.login-card{background:#fff;width:380px;padding:32px;border-radius:8px;box-shadow:0 10px 25px #00000026}.login-card h1{margin:0 0 4px;font-size:20px;color:var(--primary)}.login-card .subtitle{color:var(--text-muted);margin-bottom:24px;font-size:13px}.login-card .demo{margin-top:18px;padding:10px;background:#f8fafc;border-radius:var(--radius);font-size:11px;color:var(--text-muted);line-height:1.6}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a80;display:flex;align-items:center;justify-content:center;z-index:1000}.modal{background:#fff;border-radius:8px;width:90%;max-width:600px;max-height:90vh;overflow-y:auto;box-shadow:0 20px 40px #0003}.modal-header{padding:16px 20px;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center}.modal-header h3{margin:0;font-size:16px}.modal-body{padding:20px}.modal-footer{padding:12px 20px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:8px}.alert{padding:10px 14px;border-radius:var(--radius);margin-bottom:12px;font-size:13px;border-left:4px solid}.alert.error{background:var(--danger-light);border-color:var(--danger);color:#7f1d1d}.alert.warning{background:var(--warning-light);border-color:var(--warning);color:#78350f}.alert.info{background:var(--info-light);border-color:var(--info);color:#075985}.alert.success{background:var(--success-light);border-color:var(--success);color:#14532d}.alert ul{margin:6px 0 0 18px;padding:0}.toast-stack{position:fixed;top:16px;right:16px;display:flex;flex-direction:column;gap:8px;z-index:2000;max-width:380px}.toast{background:var(--surface);border:1px solid var(--border);border-left-width:4px;border-radius:var(--radius);padding:10px 14px;font-size:13px;box-shadow:var(--shadow);display:flex;justify-content:space-between;gap:10px;align-items:flex-start}.toast.error{border-left-color:var(--danger)}.toast.warning{border-left-color:var(--warning)}.toast.success{border-left-color:var(--success)}.toast.info{border-left-color:var(--info)}.toast .close-btn{background:none;border:none;padding:0;color:var(--text-muted);cursor:pointer;font-size:16px;line-height:1}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}.empty{text-align:center;padding:40px 20px;color:var(--text-muted)}.flex{display:flex}.gap-8{gap:8px}.gap-12{gap:12px}.between{justify-content:space-between}.items-center{align-items:center}.right{text-align:right}.muted{color:var(--text-muted)}.pagination{display:flex;gap:8px;justify-content:center;align-items:center;margin-top:16px}.pagination .info{color:var(--text-muted);font-size:12px}.error-boundary{padding:40px;text-align:center;max-width:600px;margin:80px auto}.error-boundary h2{color:var(--danger)}.error-boundary pre{text-align:left;background:#f8fafc;padding:12px;border-radius:var(--radius);font-size:11px;overflow-x:auto}
