*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--radius:20px;--radius-sm:12px;--radius-xs:8px;--radius-full:999px;--shadow-sm:0 1px 3px #00000014, 0 1px 2px #0000000f;--shadow:0 4px 16px #0000001a, 0 1px 4px #00000014;--shadow-md:0 8px 32px #00000024, 0 2px 8px #00000014;--shadow-lg:0 20px 60px #0000002e, 0 4px 16px #0000001a;--tab-height:74px;--header-height:60px;--page-px:18px;--transition:.22s cubic-bezier(.4, 0, .2, 1);--transition-spring:.35s cubic-bezier(.34, 1.56, .64, 1);--transition-fast:.14s cubic-bezier(.4, 0, .2, 1)}[data-theme=light],:root{--bg:#f5f5f7;--bg-card:#fff;--bg-input:#efefef;--bg-elevated:#fff;--bg-glass:#ffffffe0;--text:#111118;--text-secondary:#44444f;--text-tertiary:#99a;--border:#e2e2ea;--border-light:#ebebf0;--primary:#e8005a;--primary-fg:#fff;--primary-hover:#c40049;--primary-subtle:#fde8f0;--primary-subtle-text:#b8004a;--primary-gradient:linear-gradient(135deg, #e8005a 0%, #ff4d8d 100%);--danger:#d32f2f;--danger-subtle:#fdeaea;--success:#2e7d32;--success-subtle:#e8f5e9;--warning:#e67e22;--warning-subtle:#fef6ec;--header-bg:#111118;--header-fg:#f0f0f5;--tabbar-bg:#fffffff0;--tabbar-border:#e2e2eae6;--tabbar-active:#e8005a;--tabbar-inactive:#aaaabc;--section-bg:#efefef;--overlay:#0a0a1285}[data-theme=dark]{--bg:#0d0d12;--bg-card:#18181f;--bg-input:#202028;--bg-elevated:#1e1e26;--bg-glass:#18181feb;--text:#ededf2;--text-secondary:#9898aa;--text-tertiary:#55556a;--border:#2a2a38;--border-light:#222230;--primary:#ff2570;--primary-fg:#fff;--primary-hover:#ff4d8d;--primary-subtle:#2a0f18;--primary-subtle-text:#f69;--primary-gradient:linear-gradient(135deg, #e8005a 0%, #ff4d8d 100%);--danger:#ef5350;--danger-subtle:#2a1212;--success:#66bb6a;--success-subtle:#0d1f0e;--warning:#ffa726;--warning-subtle:#221608;--header-bg:#0d0d12;--header-fg:#ededf2;--tabbar-bg:#121219f5;--tabbar-border:#2a2a38f2;--tabbar-active:#ff2570;--tabbar-inactive:#44445a;--section-bg:#202028;--overlay:#000000b8}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;height:-webkit-fill-available;font-size:16px}body{background:var(--bg);color:var(--text);min-height:100dvh;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;touch-action:pan-x pan-y;overscroll-behavior:none;min-height:-webkit-fill-available;font-family:-apple-system,BlinkMacSystemFont,SF Pro Display,Segoe UI,Roboto,sans-serif;line-height:1.5;overflow-x:hidden}#root{flex-direction:column;min-height:100dvh;display:flex}a{color:var(--primary);text-decoration:none}::-webkit-scrollbar{width:3px;height:3px}::-webkit-scrollbar-thumb{background:var(--border);border-radius:99px}::-webkit-scrollbar-track{background:0 0}@keyframes fadeUp{0%{opacity:0;transform:translateY(18px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes scaleIn{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes slideInRight{0%{opacity:0;transform:translate(24px)}to{opacity:1;transform:translate(0)}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes tabPop{0%{transform:scale(1)}40%{transform:scale(1.22)translateY(-3px)}to{transform:scale(1)}}.page{padding:var(--page-px);padding-bottom:calc(var(--tab-height) + 24px);width:100%;max-width:540px;animation:fadeUp .32s var(--transition) both;margin:0 auto}.page>*{animation:fadeUp .3s var(--transition) both}.page>:first-child{animation-delay:40ms}.page>:nth-child(2){animation-delay:80ms}.page>:nth-child(3){animation-delay:.12s}.page>:nth-child(4){animation-delay:.16s}.page>:nth-child(5){animation-delay:.2s}.page>:nth-child(6){animation-delay:.24s}.topbar{background:var(--header-bg);color:var(--header-fg);z-index:100;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid #ffffff0f;justify-content:space-between;align-items:center;height:56px;padding:0 20px;display:flex;position:sticky;top:0}.topbar-nav{align-items:center;gap:2px;display:flex}.topbar-nav a{color:#ffffffa6;border-radius:var(--radius-sm);transition:all var(--transition-fast);padding:6px 13px;font-size:14px;font-weight:500;text-decoration:none;position:relative}.topbar-nav a:after{content:"";height:2px;transition:left var(--transition), right var(--transition);background:#00b4d8;border-radius:99px;position:absolute;bottom:2px;left:50%;right:50%}.topbar-nav a:hover{color:#fff;background:#ffffff14}.topbar-nav a.active{color:#fff;background:#ffffff1a}.topbar-nav a.active:after{left:13px;right:13px}.topbar-user{align-items:center;gap:10px;display:flex}.topbar-user span{color:#ffffffbf;font-size:13px}.logout-btn{color:var(--header-fg)!important;border-radius:var(--radius-sm)!important;transition:all var(--transition-fast)!important;background:#ffffff1a!important;border:1px solid #ffffff1f!important;padding:6px 14px!important;font-size:13px!important;font-weight:500!important}.logout-btn:hover{background:#ffffff2e!important}.tabbar{height:var(--tab-height);background:var(--tabbar-bg);border-top:1px solid var(--tabbar-border);z-index:100;padding-bottom:env(safe-area-inset-bottom);-webkit-backdrop-filter:blur(20px)saturate(180%);justify-content:space-around;align-items:center;display:flex;position:fixed;bottom:0;left:0;right:0}.tabbar-item{cursor:pointer;color:var(--tabbar-inactive);-webkit-tap-highlight-color:transparent;transition:color var(--transition-fast);letter-spacing:.01em;background:0 0;border:none;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:4px;min-width:0;padding:8px 4px;font-size:10px;font-weight:600;text-decoration:none;display:flex;position:relative}.tabbar-item span{text-overflow:ellipsis;white-space:nowrap;max-width:100%;transition:transform var(--transition-fast);overflow:hidden}.tabbar-item svg{transition:transform var(--transition-spring), color var(--transition-fast)}.tabbar-item.active{color:var(--tabbar-active)}.tabbar-item.active svg{animation:tabPop .35s var(--transition-spring) both}.tabbar-item.active:before{content:"";background:var(--tabbar-active);border-radius:0 0 4px 4px;height:2.5px;animation:.2s both fadeIn;position:absolute;top:0;left:20%;right:20%}.card{background:var(--bg-card);border-radius:var(--radius);border:1px solid var(--border);box-shadow:var(--shadow-sm);transition:box-shadow var(--transition), transform var(--transition), border-color var(--transition);padding:18px}.card-hover:hover{box-shadow:var(--shadow);border-color:color-mix(in srgb, var(--primary) 25%, var(--border));transform:translateY(-1px)}.card:has(button:hover){box-shadow:var(--shadow);border-color:color-mix(in srgb, var(--primary) 25%, var(--border));transform:translateY(-1px)}.card-inset{background:var(--bg-input);border-radius:var(--radius);border:1px solid var(--border-light);padding:16px}.section-label{letter-spacing:.1em;text-transform:uppercase;color:var(--text-tertiary);margin-bottom:10px;padding:0 2px;font-size:11px;font-weight:700}.section{margin-bottom:24px}button,.btn{border-radius:var(--radius-sm);cursor:pointer;transition:background var(--transition-fast), transform var(--transition-spring), box-shadow var(--transition-fast), opacity var(--transition-fast);background:var(--primary);color:var(--primary-fg);white-space:nowrap;-webkit-tap-highlight-color:transparent;border:none;flex-shrink:0;justify-content:center;align-items:center;gap:6px;padding:11px 20px;font-family:inherit;font-size:14px;font-weight:600;display:inline-flex;position:relative;overflow:hidden}button:after{content:"";transition:background var(--transition-fast);border-radius:inherit;background:#fff0;position:absolute;inset:0}button:hover:after{background:#ffffff14}button:hover{background:var(--primary-hover);box-shadow:0 4px 14px color-mix(in srgb, var(--primary) 35%, transparent)}button:active{box-shadow:none;transform:scale(.96)}button:disabled{opacity:.4;cursor:not-allowed;box-shadow:none;transform:none}.btn-sm{border-radius:var(--radius-xs);padding:7px 16px;font-size:13px}.btn-xs{border-radius:8px;padding:5px 11px;font-size:12px}.btn-full{border-radius:var(--radius);letter-spacing:.01em;width:100%;padding:16px;font-size:16px;font-weight:700}.btn-ghost{color:var(--text);border:1.5px solid var(--border);box-shadow:none;background:0 0;font-weight:500}.btn-ghost:hover{background:var(--bg-input);box-shadow:none;border-color:var(--text-secondary)}.btn-subtle{background:var(--primary-subtle);color:var(--primary-subtle-text);box-shadow:none}.btn-subtle:hover{filter:brightness(.96);background:var(--primary-subtle);box-shadow:none}.btn-danger{background:var(--danger);color:#fff}.btn-danger:hover{filter:brightness(.92);background:var(--danger);box-shadow:0 4px 14px #c0392b4d}.btn-success{background:var(--success);color:#fff}.btn-success:hover{filter:brightness(.92);background:var(--success);box-shadow:0 4px 14px #2e7d324d}.btn-icon{background:var(--bg-input);width:36px;height:36px;color:var(--text-secondary);box-shadow:none;border-radius:50%;padding:0}.btn-icon:hover{background:var(--border);box-shadow:none}input,select,textarea{border:1.5px solid var(--border);border-radius:var(--radius-sm);width:100%;color:var(--text);background:var(--bg-input);transition:border-color var(--transition-fast), box-shadow var(--transition-fast), background var(--transition-fast);appearance:none;padding:13px 16px;font-family:inherit;font-size:15px}input:focus,select:focus,textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3.5px color-mix(in srgb, var(--primary) 16%, transparent);background:var(--bg-card);outline:none}textarea{resize:vertical;min-height:90px}label{letter-spacing:.08em;text-transform:uppercase;color:var(--text-tertiary);margin-bottom:6px;font-size:11px;font-weight:700;display:block}.form-group{flex-direction:column;gap:4px;margin-bottom:16px;display:flex}.form-row{flex-wrap:wrap;gap:12px;display:flex}.form-row .form-group{flex:1;min-width:130px}.alert{border-radius:var(--radius-sm);align-items:center;gap:8px;margin-bottom:12px;padding:12px 16px;font-size:14px;animation:.2s both fadeUp;display:flex}.alert-error{background:var(--danger-subtle);color:var(--danger);border:1px solid color-mix(in srgb, var(--danger) 20%, transparent)}.alert-success{background:var(--success-subtle);color:var(--success);border:1px solid color-mix(in srgb, var(--success) 20%, transparent)}.badge{border-radius:var(--radius-full);white-space:nowrap;transition:transform var(--transition-fast);align-items:center;gap:4px;padding:3px 10px;font-size:11.5px;font-weight:600;display:inline-flex}.badge-green{background:var(--success-subtle);color:var(--success)}.badge-red{background:var(--danger-subtle);color:var(--danger)}.badge-yellow{background:var(--warning-subtle);color:var(--warning)}.badge-blue{background:var(--primary-subtle);color:var(--primary-subtle-text)}.badge-gray{background:var(--bg-input);color:var(--text-secondary)}[data-theme=dark] .badge-green{background:var(--success-subtle);color:var(--success)}.stat-grid{grid-template-columns:repeat(2,1fr);gap:12px;margin-bottom:24px;display:grid}.stat-card{background:var(--bg-card);border-radius:var(--radius);text-align:center;border:1px solid var(--border);box-shadow:var(--shadow-sm);transition:transform var(--transition-spring), box-shadow var(--transition);animation:scaleIn .3s var(--transition) both;padding:16px 14px}.stat-card:hover{box-shadow:var(--shadow);transform:translateY(-2px)scale(1.01)}.stat-value{color:var(--primary);font-size:30px;font-weight:800;line-height:1.1}.stat-label{color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.06em;margin-top:5px;font-size:10px;font-weight:700}.segmented{background:var(--bg-input);border-radius:var(--radius-sm);border:1px solid var(--border-light);gap:2px;padding:3px;display:flex}.segmented-item{cursor:pointer;color:var(--text-secondary);transition:all var(--transition);background:0 0;border:none;border-radius:10px;flex:1;padding:8px 10px;font-family:inherit;font-size:13px;font-weight:500}.segmented-item.active{background:var(--bg-card);color:var(--text);box-shadow:0 1px 6px #0000001a, 0 0 0 1px var(--border);font-weight:700}.list-row{border-bottom:1px solid var(--border);transition:background var(--transition-fast);align-items:center;gap:12px;padding:13px 16px;display:flex}.list-row:last-child{border-bottom:none}.list-row:hover{background:var(--bg-input)}.presence-btn{border-radius:var(--radius-full);border:1.5px solid var(--border);color:var(--text-secondary);cursor:pointer;transition:all var(--transition-fast);-webkit-tap-highlight-color:transparent;background:0 0;padding:7px 14px;font-family:inherit;font-size:13px;font-weight:600}.presence-btn:hover{border-color:var(--text-secondary);background:var(--bg-input)}.presence-btn.sel-present{background:var(--success-subtle);color:var(--success);border-color:var(--success);box-shadow:0 0 0 3px color-mix(in srgb, var(--success) 14%, transparent)}.presence-btn.sel-falta{background:var(--danger-subtle);color:var(--danger);border-color:var(--danger);box-shadow:0 0 0 3px color-mix(in srgb, var(--danger) 14%, transparent)}.presence-btn.sel-just{background:var(--warning-subtle);color:var(--warning);border-color:var(--warning);box-shadow:0 0 0 3px color-mix(in srgb, var(--warning) 14%, transparent)}.session-card{background:var(--bg-card);border-radius:var(--radius);border:1px solid var(--border);border-left:3px solid var(--primary);box-shadow:var(--shadow-sm);transition:transform var(--transition), box-shadow var(--transition);margin-bottom:12px;padding:16px 18px;animation:.25s both fadeUp}.session-card:hover{box-shadow:var(--shadow);transform:translateY(-2px)}.session-tpc{background:var(--warning-subtle);color:var(--warning);border-radius:var(--radius-xs);border:1px solid color-mix(in srgb, var(--warning) 20%, transparent);align-items:center;gap:6px;margin-top:10px;padding:8px 12px;font-size:13px;font-weight:500;display:flex}.aviso-card{background:var(--bg-card);border-radius:var(--radius);border:1px solid var(--border);border-left:3px solid var(--primary);box-shadow:var(--shadow-sm);transition:transform var(--transition), box-shadow var(--transition);margin-bottom:12px;padding:16px 18px}.aviso-card:hover{box-shadow:var(--shadow);transform:translateY(-1px)}.aviso-card.read{border-left-color:var(--border);opacity:.72}.modal-overlay{background:var(--overlay);z-index:200;-webkit-backdrop-filter:blur(6px);justify-content:center;align-items:flex-end;animation:.18s both fadeIn;display:flex;position:fixed;inset:0}@media (width>=600px){.modal-overlay{align-items:center;padding:24px}}.modal{background:var(--bg-elevated);border-radius:var(--radius) var(--radius) 0 0;border:1px solid var(--border);width:100%;max-height:92dvh;box-shadow:var(--shadow-lg);border-bottom:none;padding:20px 20px 36px;animation:.28s cubic-bezier(.34,1.4,.64,1) both slideUpModal;overflow-y:auto}@media (width>=600px){.modal{border-radius:var(--radius);border-bottom:1px solid var(--border);max-width:480px;padding:26px;animation:.24s cubic-bezier(.34,1.4,.64,1) both scaleIn}}@keyframes slideUpModal{0%{opacity:0;transform:translateY(40px)}to{opacity:1;transform:translateY(0)}}.modal-handle{background:var(--border);border-radius:99px;width:40px;height:4px;margin:0 auto 20px}.modal-header{justify-content:space-between;align-items:center;margin-bottom:20px;display:flex}.modal-title{letter-spacing:-.2px;font-size:17px;font-weight:800}.modal-close{background:var(--bg-input);width:32px;height:32px;color:var(--text-secondary);cursor:pointer;transition:all var(--transition-fast);box-shadow:none;border:none;border-radius:50%;justify-content:center;align-items:center;font-size:16px;display:flex}.modal-close:hover{background:var(--border);color:var(--text)}.modal-footer{border-top:1px solid var(--border-light);justify-content:flex-end;gap:8px;margin-top:22px;padding-top:16px;display:flex}.spinner{justify-content:center;align-items:center;min-height:200px;display:flex}.spinner:after{content:"";border:2.5px solid var(--border);border-top-color:var(--primary);border-radius:50%;width:32px;height:32px;animation:.7s cubic-bezier(.4,0,.6,1) infinite spin}.empty{text-align:center;color:var(--text-tertiary);padding:56px 16px;animation:.4s both fadeIn}.empty-icon{opacity:.7;margin-bottom:14px}.empty-text{font-size:15px;line-height:1.6}.dot{border-radius:50%;flex-shrink:0;width:8px;height:8px;display:inline-block}.dot-green{background:var(--success)}.dot-red{background:var(--danger)}.dot-yellow{background:var(--warning)}.dot-gray{background:var(--text-tertiary)}.dot-online{background:var(--success);box-shadow:0 0 0 2px var(--bg-card)}table{border-collapse:collapse;background:var(--bg-card);border-radius:var(--radius);border:1px solid var(--border);width:100%;box-shadow:var(--shadow-sm);overflow:hidden}thead{background:var(--bg-input)}th{text-align:left;color:var(--text-tertiary);border-bottom:1px solid var(--border);text-transform:uppercase;letter-spacing:.07em;padding:11px 16px;font-size:11px;font-weight:700}td{border-bottom:1px solid var(--border);color:var(--text);padding:13px 16px;font-size:14px}tr:last-child td{border-bottom:none}tbody tr{transition:background var(--transition-fast)}tbody tr:hover{background:var(--bg-input)}.login-page{background:var(--bg);flex-direction:column;justify-content:center;align-items:center;min-height:100dvh;padding:24px;display:flex;position:relative;overflow:hidden}.login-page:before{content:"";background:var(--primary-gradient);opacity:.08;pointer-events:none;border-radius:0 0 60% 60%;height:60%;position:absolute;top:-30%;left:-20%;right:-20%}.login-card{background:var(--bg-card);border:1px solid var(--border);width:100%;max-width:400px;box-shadow:var(--shadow-lg);border-radius:28px;padding:32px 28px;animation:.35s cubic-bezier(.34,1.35,.64,1) both scaleIn}.avatar{background:var(--primary);width:38px;height:38px;color:var(--primary-fg);cursor:pointer;transition:transform var(--transition-spring);border:2px solid #ffffff40;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:14px;font-weight:700;display:flex}.avatar:hover{transform:scale(1.06)}.lightbox-overlay{z-index:300;cursor:zoom-out;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#000000e0;justify-content:center;align-items:center;animation:.18s both fadeIn;display:flex;position:fixed;inset:0}.lightbox-overlay img{border-radius:16px;max-width:92vw;max-height:86vh;animation:.22s cubic-bezier(.34,1.4,.64,1) both scaleIn;box-shadow:0 24px 80px #00000080}@media (width>=768px){.page{max-width:1100px;padding:28px 24px 40px}.tabbar{display:none}.stat-grid{grid-template-columns:repeat(4,1fr)}}@media (width<=767px){.topbar-nav,.topbar-user span{display:none}}.card>div[style*=border-bottom]{transition:background var(--transition-fast)}:focus-visible{outline:2px solid var(--primary);outline-offset:2px;border-radius:4px}::selection{background:color-mix(in srgb, var(--primary) 25%, transparent);color:var(--text)}
