*,:after,:before{box-sizing:border-box;margin:0;padding:0}:root{--h-primary:#0d9488;--h-primary-light:#14b8a6;--h-primary-dark:#0f766e;--h-primary-50:#f0fdfa;--h-primary-100:#ccfbf1;--h-primary-900:#134e4a;--h-accent:#f59e0b;--h-accent-light:#fbbf24;--h-accent-dark:#d97706;--h-success:#10b981;--h-success-light:#d1fae5;--h-warning:#f59e0b;--h-warning-light:#fef3c7;--h-danger:#ef4444;--h-danger-light:#fee2e2;--h-info:#3b82f6;--h-info-light:#dbeafe;--h-gray-50:#f8fafc;--h-gray-100:#f1f5f9;--h-gray-200:#e2e8f0;--h-gray-300:#cbd5e1;--h-gray-400:#94a3b8;--h-gray-500:#64748b;--h-gray-600:#475569;--h-gray-700:#334155;--h-gray-800:#1e293b;--h-gray-900:#0f172a;--h-gray-950:#020617;--h-bg:#f8fafc;--h-bg-alt:#f1f5f9;--h-surface:#ffffff;--h-surface-raised:#ffffff;--h-surface-overlay:rgba(255,255,255,0.85);--h-text:#0f172a;--h-text-secondary:#475569;--h-text-muted:#94a3b8;--h-text-inverse:#ffffff;--h-border:#e2e8f0;--h-border-light:#f1f5f9;--h-border-focus:var(--h-primary);--h-sidebar-bg:#0f172a;--h-sidebar-text:#cbd5e1;--h-sidebar-text-active:#ffffff;--h-sidebar-hover:rgba(255,255,255,0.06);--h-sidebar-active:rgba(13,148,136,0.25);--h-sidebar-active-border:var(--h-primary);--h-sidebar-width:260px;--h-sidebar-collapsed-width:64px;--h-header-height:56px;--h-header-bg:#ffffff;--h-header-border:#e2e8f0;--h-font:"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",system-ui,sans-serif;--h-font-mono:"JetBrains Mono","Fira Code","Consolas",monospace;--h-text-xs:0.75rem;--h-text-sm:0.8125rem;--h-text-base:0.875rem;--h-text-md:1rem;--h-text-lg:1.125rem;--h-text-xl:1.25rem;--h-text-2xl:1.5rem;--h-text-3xl:1.875rem;--h-space-1:0.25rem;--h-space-2:0.5rem;--h-space-3:0.75rem;--h-space-4:1rem;--h-space-5:1.25rem;--h-space-6:1.5rem;--h-space-8:2rem;--h-space-10:2.5rem;--h-space-12:3rem;--h-radius-sm:6px;--h-radius:8px;--h-radius-md:10px;--h-radius-lg:12px;--h-radius-xl:16px;--h-radius-full:9999px;--h-shadow-xs:0 1px 2px rgba(0,0,0,0.05);--h-shadow-sm:0 1px 3px rgba(0,0,0,0.08),0 1px 2px rgba(0,0,0,0.04);--h-shadow:0 4px 6px -1px rgba(0,0,0,0.07),0 2px 4px -2px rgba(0,0,0,0.05);--h-shadow-md:0 10px 15px -3px rgba(0,0,0,0.08),0 4px 6px -4px rgba(0,0,0,0.04);--h-shadow-lg:0 20px 25px -5px rgba(0,0,0,0.1),0 8px 10px -6px rgba(0,0,0,0.04);--h-shadow-glow:0 0 20px rgba(13,148,136,0.15);--h-transition-fast:150ms cubic-bezier(0.4,0,0.2,1);--h-transition:200ms cubic-bezier(0.4,0,0.2,1);--h-transition-slow:300ms cubic-bezier(0.4,0,0.2,1);color-scheme:light}[data-theme=dark]{--h-bg:#0b1120;--h-bg-alt:#111827;--h-surface:#1e293b;--h-surface-raised:#253347;--h-surface-overlay:rgba(30,41,59,0.9);--h-text:#f1f5f9;--h-text-secondary:#94a3b8;--h-text-muted:#64748b;--h-border:#334155;--h-border-light:#1e293b;--h-sidebar-bg:#030712;--h-header-bg:#0f172a;--h-header-border:#1e293b;--h-shadow-xs:0 1px 2px rgba(0,0,0,0.3);--h-shadow-sm:0 1px 3px rgba(0,0,0,0.4);--h-shadow:0 4px 6px rgba(0,0,0,0.3);--h-shadow-md:0 10px 15px rgba(0,0,0,0.35);--h-shadow-lg:0 20px 25px rgba(0,0,0,0.4);color-scheme:dark}html{font-size:16px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{font-family:var(--h-font);font-size:var(--h-text-base);line-height:1.6;color:var(--h-text);background:var(--h-bg)}.app-layout,.sidebar{display:flex;height:100vh;overflow:hidden}.sidebar{width:var(--h-sidebar-width);min-width:var(--h-sidebar-width);background:var(--h-sidebar-bg);flex-direction:column;transition:width var(--h-transition-slow),min-width var(--h-transition-slow);z-index:50}.sidebar.collapsed{width:var(--h-sidebar-collapsed-width);min-width:var(--h-sidebar-collapsed-width)}.sidebar-brand{height:var(--h-header-height);padding:0 var(--h-space-5);gap:var(--h-space-3);border-bottom:1px solid rgba(255,255,255,.06)}.sidebar-brand,.sidebar-brand-logo{display:flex;align-items:center;flex-shrink:0}.sidebar-brand-logo{width:32px;height:32px;border-radius:var(--h-radius);background:linear-gradient(135deg,var(--h-primary),var(--h-primary-light));justify-content:center;color:white}.sidebar-brand-logo,.sidebar-brand-text{font-weight:700;font-size:var(--h-text-md)}.sidebar-brand-text{color:var(--h-text-inverse);letter-spacing:.5px;white-space:nowrap;overflow:hidden}.sidebar-nav{flex:1 1;overflow-y:auto;overflow-x:hidden;padding:var(--h-space-3) 0;scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.1) transparent}.sidebar-nav::-webkit-scrollbar{width:4px}.sidebar-nav::-webkit-scrollbar-track{background:transparent}.sidebar-nav::-webkit-scrollbar-thumb{background:rgba(255,255,255,.1);border-radius:4px}.sidebar-section{margin-bottom:var(--h-space-2)}.sidebar-section-title{padding:var(--h-space-2) var(--h-space-5) var(--h-space-1);font-size:var(--h-text-xs);font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--h-gray-500);white-space:nowrap;overflow:hidden}.sidebar-item{display:flex;align-items:center;padding:var(--h-space-2) var(--h-space-5);gap:var(--h-space-3);color:var(--h-sidebar-text);text-decoration:none;font-size:var(--h-text-sm);font-weight:450;transition:all var(--h-transition-fast);border-left:3px solid transparent;cursor:pointer;white-space:nowrap;overflow:hidden}.sidebar-item:hover{background:var(--h-sidebar-hover);color:var(--h-sidebar-text-active)}.sidebar-item.active{background:var(--h-sidebar-active);color:var(--h-sidebar-text-active);border-left-color:var(--h-sidebar-active-border);font-weight:550}.sidebar-item-icon{width:20px;height:20px;flex-shrink:0;opacity:.7}.sidebar-item.active .sidebar-item-icon{opacity:1}.sidebar-item-badge{margin-left:auto;background:var(--h-danger);color:white;font-size:10px;font-weight:600;min-width:18px;height:18px;border-radius:var(--h-radius-full);display:flex;align-items:center;justify-content:center;padding:0 5px;flex-shrink:0}.sidebar-footer{border-top:1px solid rgba(255,255,255,.06);padding:var(--h-space-3) var(--h-space-4);flex-shrink:0}.sidebar-user{display:flex;align-items:center;gap:var(--h-space-3);padding:var(--h-space-2);border-radius:var(--h-radius);cursor:pointer;transition:background var(--h-transition-fast)}.sidebar-user:hover{background:var(--h-sidebar-hover)}.sidebar-user-avatar{width:34px;height:34px;border-radius:var(--h-radius-full);background:linear-gradient(135deg,var(--h-primary),var(--h-accent));display:flex;align-items:center;justify-content:center;font-weight:600;font-size:var(--h-text-sm);color:white;flex-shrink:0}.sidebar-user-info{overflow:hidden}.sidebar-user-name{font-size:var(--h-text-sm);font-weight:500;color:var(--h-text-inverse)}.sidebar-user-name,.sidebar-user-role{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar-user-role{font-size:var(--h-text-xs);color:var(--h-gray-500)}.main-area{flex:1 1;display:flex;flex-direction:column;overflow:hidden;min-width:0}.header{height:var(--h-header-height);background:var(--h-header-bg);border-bottom:1px solid var(--h-header-border);padding:0 var(--h-space-6);gap:var(--h-space-4);flex-shrink:0;z-index:40}.header,.header-breadcrumb{display:flex;align-items:center}.header-breadcrumb{font-size:var(--h-text-sm);color:var(--h-text-muted);gap:var(--h-space-2)}.header-breadcrumb-current{color:var(--h-text);font-weight:600}.header-spacer{flex:1 1}.header-actions{display:flex;align-items:center;gap:var(--h-space-1)}.header-action-btn{width:36px;height:36px;border-radius:var(--h-radius);border:none;background:transparent;color:var(--h-text-secondary);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all var(--h-transition-fast);position:relative}.header-action-btn:hover{background:var(--h-gray-100);color:var(--h-text)}[data-theme=dark] .header-action-btn:hover{background:var(--h-gray-700)}.header-action-btn .notif-dot{position:absolute;top:6px;right:6px;width:8px;height:8px;border-radius:50%;background:var(--h-danger);border:2px solid var(--h-header-bg)}.content{flex:1 1;overflow-y:auto;overflow-x:hidden;padding:var(--h-space-6) var(--h-space-8);background:var(--h-bg)}.page-header{margin-bottom:var(--h-space-6)}.page-title{font-size:var(--h-text-2xl);font-weight:700;color:var(--h-text);line-height:1.2}.page-subtitle{font-size:var(--h-text-sm);color:var(--h-text-secondary);margin-top:var(--h-space-1)}.card{background:var(--h-surface);border:1px solid var(--h-border);border-radius:var(--h-radius-lg);padding:var(--h-space-6);transition:all var(--h-transition)}.card:hover{box-shadow:var(--h-shadow)}.card-glass{background:var(--h-surface-overlay);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);padding:var(--h-space-6)}.card-glass,.kpi-card{border:1px solid var(--h-border);border-radius:var(--h-radius-lg)}.kpi-card{background:var(--h-surface);padding:var(--h-space-5);transition:all var(--h-transition);position:relative;overflow:hidden}.kpi-card:before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:linear-gradient(90deg,var(--h-primary),var(--h-primary-light));opacity:0;transition:opacity var(--h-transition)}.kpi-card:hover{box-shadow:var(--h-shadow);border-color:var(--h-primary-100)}.kpi-card:hover:before{opacity:1}.kpi-label{font-size:var(--h-text-xs);font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--h-text-muted)}.kpi-label,.kpi-value{margin-bottom:var(--h-space-2)}.kpi-value{font-size:var(--h-text-3xl);font-weight:700;color:var(--h-text);line-height:1}.kpi-value .kpi-unit{font-size:var(--h-text-md);font-weight:400;color:var(--h-text-secondary)}.kpi-trend{font-size:var(--h-text-xs);display:flex;align-items:center;gap:var(--h-space-1)}.kpi-trend.up{color:var(--h-success)}.kpi-trend.down{color:var(--h-danger)}.kpi-trend.neutral{color:var(--h-text-muted)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--h-space-2);padding:var(--h-space-2) var(--h-space-4);font-family:var(--h-font);font-size:var(--h-text-sm);font-weight:500;line-height:1;border:1px solid transparent;border-radius:var(--h-radius);cursor:pointer;transition:all var(--h-transition-fast);white-space:nowrap;text-decoration:none;height:36px}.btn:focus-visible{outline:2px solid var(--h-primary);outline-offset:2px}.btn-primary{background:var(--h-primary);color:white}.btn-primary:hover{background:var(--h-primary-dark);box-shadow:var(--h-shadow-sm)}.btn-secondary{background:var(--h-surface);color:var(--h-text);border-color:var(--h-border)}.btn-secondary:hover{background:var(--h-gray-50);border-color:var(--h-gray-300)}.btn-ghost{background:transparent;color:var(--h-text-secondary)}.btn-ghost:hover{background:var(--h-gray-100);color:var(--h-text)}.btn-danger{background:var(--h-danger);color:white}.btn-danger:hover{background:#dc2626}.btn-sm{height:30px;padding:var(--h-space-1) var(--h-space-3);font-size:var(--h-text-xs)}.btn-icon{width:36px;padding:0}.btn-icon.btn-sm{width:30px}.tag{display:inline-flex;align-items:center;padding:2px 8px;border-radius:var(--h-radius-full);font-size:11px;font-weight:600;letter-spacing:.02em}.tag-success{background:var(--h-success-light);color:#065f46}.tag-warning{background:var(--h-warning-light);color:#92400e}.tag-danger{background:var(--h-danger-light);color:#991b1b}.tag-info{background:var(--h-info-light);color:#1e40af}.tag-neutral{background:var(--h-gray-100);color:var(--h-gray-600)}.tag-primary{background:var(--h-primary-100);color:var(--h-primary-900)}.data-table{width:100%;border-collapse:separate;border-spacing:0;font-size:var(--h-text-sm)}.data-table thead th{text-align:left;padding:var(--h-space-3) var(--h-space-4);font-size:var(--h-text-xs);font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--h-text-muted);background:var(--h-bg-alt);border-bottom:1px solid var(--h-border);white-space:nowrap}.data-table thead th:first-child{border-radius:var(--h-radius) 0 0 0}.data-table thead th:last-child{border-radius:0 var(--h-radius) 0 0}.data-table tbody td{padding:var(--h-space-3) var(--h-space-4);border-bottom:1px solid var(--h-border-light);color:var(--h-text)}.data-table tbody tr{transition:background var(--h-transition-fast)}.data-table tbody tr:hover{background:var(--h-gray-50)}[data-theme=dark] .data-table tbody tr:hover{background:var(--h-gray-800)}.input{width:100%;height:38px;padding:0 var(--h-space-3);font-family:var(--h-font);font-size:var(--h-text-sm);color:var(--h-text);background:var(--h-surface);border:1px solid var(--h-border);border-radius:var(--h-radius);transition:all var(--h-transition-fast)}.input:focus{outline:none;border-color:var(--h-primary);box-shadow:0 0 0 3px rgba(13,148,136,.1)}.input::placeholder{color:var(--h-text-muted)}.input-label{display:block;font-size:var(--h-text-xs);font-weight:600;color:var(--h-text-secondary);margin-bottom:var(--h-space-1)}.select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;padding-right:32px}.progress{height:6px;background:var(--h-gray-200);overflow:hidden}.progress,.progress-bar{border-radius:var(--h-radius-full)}.progress-bar{height:100%;transition:width var(--h-transition-slow);background:linear-gradient(90deg,var(--h-primary),var(--h-primary-light))}.progress-bar.danger{background:linear-gradient(90deg,var(--h-danger),#f87171)}.progress-bar.warning{background:linear-gradient(90deg,var(--h-warning),var(--h-accent-light))}.progress-bar.success{background:linear-gradient(90deg,var(--h-success),#34d399)}.status-pill{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:var(--h-radius-full);font-size:12px;font-weight:500}.status-present{background:#d1fae5;color:#065f46}.status-absent{background:#fef3c7;color:#92400e}.status-refus{background:#fee2e2;color:#991b1b}.status-planned{background:var(--h-info-light);color:#1e40af}.status-active{background:var(--h-primary-100);color:var(--h-primary-900)}.status-completed{background:var(--h-success-light);color:#065f46}.status-dot{width:6px;height:6px;border-radius:50%;background:currentColor;flex-shrink:0}.grid{display:grid;gap:var(--h-space-6)}.grid-2{grid-template-columns:repeat(2,1fr)}.grid-3{grid-template-columns:repeat(3,1fr)}.grid-4{grid-template-columns:repeat(4,1fr)}@media (max-width:1024px){.grid-3,.grid-4{grid-template-columns:repeat(2,1fr)}}@media (max-width:640px){.grid-2,.grid-3,.grid-4{grid-template-columns:1fr}}@media (max-width:768px){.sidebar{position:fixed;left:0;top:0;transform:translateX(-100%);transition:transform var(--h-transition-slow);box-shadow:var(--h-shadow-lg)}.sidebar.open{transform:translateX(0)}.sidebar-overlay{position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:49;opacity:0;pointer-events:none;transition:opacity var(--h-transition-slow)}.sidebar.open+.sidebar-overlay{opacity:1;pointer-events:auto}.content{padding:var(--h-space-4)}}@supports (padding:env(safe-area-inset-bottom)){.sidebar{padding-bottom:env(safe-area-inset-bottom)}.content{padding-bottom:calc(var(--h-space-6) + env(safe-area-inset-bottom))}}.content::-webkit-scrollbar{width:6px}.content::-webkit-scrollbar-track{background:transparent}.content::-webkit-scrollbar-thumb{background:var(--h-gray-300);border-radius:3px}.content::-webkit-scrollbar-thumb:hover{background:var(--h-gray-400)}@keyframes fadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes slideInLeft{0%{opacity:0;transform:translateX(-8px)}to{opacity:1;transform:translateX(0)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.animate-fade-in{animation:fadeIn var(--h-transition-slow) ease-out}.animate-slide-in{animation:slideInLeft var(--h-transition-slow) ease-out}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.skeleton{background:linear-gradient(90deg,var(--h-gray-200) 25%,var(--h-gray-100) 50%,var(--h-gray-200) 75%);background-size:200% 100%;animation:skeleton-shimmer 1.5s ease-in-out infinite;border-radius:var(--h-radius-sm)}@keyframes skeleton-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.leaflet-container{height:100%;width:100%;border-radius:var(--h-radius-lg);z-index:1}.photo-thumb{width:72px;height:72px;object-fit:cover;border-radius:var(--h-radius);border:1px solid var(--h-border);cursor:pointer;transition:all var(--h-transition-fast)}.photo-thumb:hover{border-color:var(--h-primary);box-shadow:var(--h-shadow-sm)}.signature-canvas{border:1px solid var(--h-border);border-radius:var(--h-radius);background:var(--h-surface);touch-action:none;width:100%;max-width:100%;height:160px}.empty-state{text-align:center;padding:var(--h-space-12) var(--h-space-6);color:var(--h-text-muted)}.empty-state-icon{font-size:48px;margin-bottom:var(--h-space-4);opacity:.4}.empty-state-title{font-size:var(--h-text-lg);font-weight:600;color:var(--h-text-secondary);margin-bottom:var(--h-space-2)}.dropdown{position:absolute;top:100%;right:0;min-width:200px;background:var(--h-surface);border:1px solid var(--h-border);border-radius:var(--h-radius-md);box-shadow:var(--h-shadow-lg);padding:var(--h-space-1) 0;z-index:100;animation:fadeIn var(--h-transition-fast) ease-out}.dropdown-item{display:flex;align-items:center;gap:var(--h-space-3);padding:var(--h-space-2) var(--h-space-4);font-size:var(--h-text-sm);color:var(--h-text);cursor:pointer;transition:background var(--h-transition-fast)}.dropdown-item:hover{background:var(--h-gray-50)}.dropdown-divider{height:1px;background:var(--h-border);margin:var(--h-space-1) 0}.field-card{background:var(--h-surface);border:1px solid var(--h-border);border-radius:var(--h-radius-lg);padding:var(--h-space-5);box-shadow:var(--h-shadow-sm)}.field-card,.nav-tabs{margin-bottom:var(--h-space-4)}.nav-tabs{display:flex;overflow-x:auto;border-bottom:1px solid var(--h-border)}.nav-tabs button{flex:1 1;padding:var(--h-space-3);background:none;font-weight:600;color:var(--h-text-muted);border:none;border-bottom:2px solid transparent}.nav-tabs button[data-selected=true]{color:var(--h-primary);border-bottom-color:var(--h-primary)}.mobile-app-container{max-width:600px;margin:0 auto;padding:var(--h-space-4);padding-bottom:100px}.bottom-action-bar{position:fixed;bottom:0;left:0;right:0;background:var(--h-surface);padding:var(--h-space-4);box-shadow:0 -4px 10px rgba(0,0,0,.05);display:flex;gap:var(--h-space-3);z-index:100;border-top:1px solid var(--h-border);justify-content:center}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}