:root{--color-primary: #2563eb;--color-primary-hover: #1d4ed8;--color-primary-light: #eff6ff;--color-success: #16a34a;--color-success-light: #f0fdf4;--color-warning: #d97706;--color-warning-light: #fffbeb;--color-danger: #dc2626;--color-danger-light: #fef2f2;--color-info: #0ea5e9;--color-bg: #f8fafc;--color-surface: #ffffff;--color-border: #e2e8f0;--color-border-light: #f1f5f9;--color-text: #0f172a;--color-text-secondary: #64748b;--color-text-muted: #94a3b8;--sidebar-width: 264px;--sidebar-collapsed: 0px;--topbar-height: 64px;--radius: 14px;--radius-sm: 10px;--radius-xs: 8px;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .04);--shadow-md: 0 4px 16px rgba(0, 0, 0, .06);--shadow-lg: 0 8px 32px rgba(0, 0, 0, .08);--transition: .25s cubic-bezier(.4, 0, .2, 1)}*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}html{font-size:16px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;scroll-behavior:smooth}body{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;color:var(--color-text);background:var(--color-bg);line-height:1.6}a{color:inherit;text-decoration:none}button{font-family:inherit;cursor:pointer}img{max-width:100%;display:block}input,textarea,select{font-family:inherit}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:4px}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);box-shadow:var(--shadow-sm)}.btn,.btn-danger,.btn-secondary,.btn-primary{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:10px 22px;border:none;border-radius:var(--radius-sm);font-size:13px;font-weight:600;font-family:inherit;cursor:pointer;text-decoration:none;transition:background var(--transition),box-shadow var(--transition),transform .1s ease;white-space:nowrap}.btn svg,.btn-danger svg,.btn-secondary svg,.btn-primary svg{width:16px;height:16px}.btn:active:not(:disabled),.btn-danger:active:not(:disabled),.btn-secondary:active:not(:disabled),.btn-primary:active:not(:disabled){transform:scale(.97)}.btn:disabled,.btn-danger:disabled,.btn-secondary:disabled,.btn-primary:disabled{opacity:.6;cursor:not-allowed}.btn-primary{background:var(--color-primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--color-primary-hover);box-shadow:0 2px 8px #2563eb4d}.btn-secondary{background:transparent;border:1.5px solid var(--color-border);color:var(--color-text)}.btn-secondary:hover{background:var(--color-bg)}.btn-danger{background:var(--color-danger);color:#fff}.btn-danger:hover:not(:disabled){background:#b91c1c}.btn-sm{padding:7px 16px;font-size:12px}.page-container{padding:24px}@media(min-width:768px){.page-container{padding:32px}}.table-premium{width:100%;border-collapse:collapse}.table-premium th,.table-premium td{text-align:left;padding:12px 16px;font-size:13px;white-space:nowrap}.table-premium th{font-weight:600;color:var(--color-text-secondary);text-transform:uppercase;font-size:11px;letter-spacing:.5px;border-bottom:1.5px solid var(--color-border);background:#fafbfd}.table-premium th:first-child{border-radius:var(--radius) 0 0 0}.table-premium th:last-child{border-radius:0 var(--radius) 0 0}.table-premium td{color:var(--color-text);border-bottom:1px solid var(--color-border-light)}.table-premium tbody tr{transition:background var(--transition)}.table-premium tbody tr:hover{background:#f8fafc}.table-premium tbody tr:last-child td{border-bottom:none}.badge{display:inline-block;padding:3px 10px;border-radius:20px;font-size:11px;font-weight:600;letter-spacing:.2px}.badge--completado{background:var(--color-success-light);color:var(--color-success)}.badge--en-curso{background:var(--color-primary-light);color:var(--color-primary)}.badge--pendiente{background:var(--color-warning-light);color:var(--color-warning)}.spinner{width:28px;height:28px;border:3px solid var(--color-border);border-top-color:var(--color-primary);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
