:root{--font: "Plus Jakarta Sans", system-ui, -apple-system, sans-serif;--bg: #f8fafc;--bg-elevated: #ffffff;--border: #e2e8f0;--border-focus: #94a3b8;--text: #0f172a;--text-muted: #64748b;--primary: #6366f1;--primary-hover: #4f46e5;--primary-light: #e0e7ff;--danger: #ef4444;--danger-hover: #dc2626;--success: #10b981;--warning: #f59e0b;--radius: 12px;--radius-sm: 8px;--shadow: 0 1px 3px rgba(0,0,0,.06);--shadow-hover: 0 10px 40px -10px rgba(0,0,0,.12);--transition: .2s ease;--transition-slow: .35s ease}*{box-sizing:border-box}body{margin:0;font-family:var(--font);background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased}#root{min-height:100vh}.app{max-width:1024px;margin:0 auto;padding:1.5rem;animation:appIn .4s ease}@keyframes appIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:1rem;margin-bottom:1.5rem}.header-right{display:flex;align-items:center;gap:1rem;flex-wrap:wrap}.header-user{display:flex;align-items:center;gap:.75rem}.header-user-name{font-weight:600;color:var(--text-muted);font-size:.9375rem}.header-student-name{font-weight:600;color:var(--text);font-size:.9375rem}.btn-outline-logout{padding:.4rem .75rem;font-size:.875rem;border:1px solid var(--border);background:transparent;color:var(--text-muted);transition:color var(--transition),border-color var(--transition),background var(--transition)}.btn-outline-logout:hover{color:var(--text);border-color:var(--border-focus);background:#f8fafc}.logo{margin:0;font-size:1.5rem;font-weight:700;letter-spacing:-.02em;background:linear-gradient(135deg,var(--primary) 0%,#8b5cf6 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.child-select select{padding:.5rem 1rem;font-size:.9375rem;font-family:var(--font);border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-elevated);color:var(--text);transition:border-color var(--transition),box-shadow var(--transition)}.child-select select:hover{border-color:var(--border-focus)}.child-select select:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-light)}.nav{display:flex;gap:.25rem;margin-bottom:1.5rem;padding:.25rem;background:var(--bg-elevated);border-radius:var(--radius);box-shadow:var(--shadow)}.nav-link{padding:.6rem 1rem;text-decoration:none;color:var(--text-muted);border-radius:var(--radius-sm);font-weight:500;font-size:.9375rem;transition:color var(--transition),background var(--transition),transform var(--transition)}.nav-link:hover{color:var(--text);background:#6366f114}.nav-link.active{background:var(--primary);color:#fff;box-shadow:0 2px 8px #6366f159}.main{background:var(--bg-elevated);border-radius:var(--radius);padding:1.75rem;box-shadow:var(--shadow);border:1px solid var(--border);overflow:hidden}.main-content{animation:contentIn .35s ease}@keyframes contentIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.card{border:1px solid var(--border);border-radius:var(--radius);padding:1.25rem;margin-bottom:1rem;background:var(--bg-elevated);transition:box-shadow var(--transition),transform var(--transition),border-color var(--transition)}.card:hover{box-shadow:var(--shadow-hover);border-color:#cbd5e1}.btn{padding:.5rem 1rem;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-elevated);color:var(--text);cursor:pointer;font-size:.9375rem;font-weight:500;font-family:var(--font);transition:transform var(--transition),background var(--transition),border-color var(--transition),box-shadow var(--transition)}.btn:hover{background:#f1f5f9;transform:translateY(-1px)}.btn:active{transform:translateY(0)}.btn-primary{background:var(--primary);color:#fff;border-color:var(--primary)}.btn-primary:hover{background:var(--primary-hover);border-color:var(--primary-hover);box-shadow:0 4px 14px #6366f166}.btn-danger{background:var(--danger);color:#fff;border-color:var(--danger)}.btn-danger:hover{background:var(--danger-hover);border-color:var(--danger-hover);box-shadow:0 4px 14px #ef44444d}.form-group{margin-bottom:1.25rem}.form-group label{display:block;margin-bottom:.35rem;font-weight:600;font-size:.875rem;color:var(--text)}.form-group input,.form-group select,.form-group textarea{width:100%;max-width:320px;padding:.55rem .75rem;border:1px solid var(--border);border-radius:var(--radius-sm);font-size:.9375rem;font-family:var(--font);background:var(--bg-elevated);color:var(--text);transition:border-color var(--transition),box-shadow var(--transition)}.form-group input:focus,.form-group select:focus,.form-group textarea:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-light)}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:.75rem 1rem;border-bottom:1px solid var(--border);transition:background var(--transition)}th{font-weight:600;font-size:.8125rem;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);background:#f8fafc}tbody tr{animation:rowIn .3s ease backwards}tbody tr:nth-child(1){animation-delay:.02s}tbody tr:nth-child(2){animation-delay:.04s}tbody tr:nth-child(3){animation-delay:.06s}tbody tr:nth-child(4){animation-delay:.08s}tbody tr:nth-child(5){animation-delay:.1s}tbody tr:nth-child(6){animation-delay:.12s}tbody tr:nth-child(7){animation-delay:.14s}tbody tr:nth-child(8){animation-delay:.16s}tbody tr:nth-child(9){animation-delay:.18s}tbody tr:nth-child(10){animation-delay:.2s}tbody tr:hover{background:#f8fafc}@keyframes rowIn{0%{opacity:0;transform:translate(-6px)}to{opacity:1;transform:translate(0)}}.badge{display:inline-block;padding:.25rem .6rem;border-radius:6px;font-size:.8125rem;font-weight:500;transition:transform var(--transition)}.badge:hover{transform:scale(1.02)}.badge-behind{background:#fef2f2;color:#b91c1c}.badge-ahead{background:#ecfdf5;color:#059669}.badge-on-track{background:var(--primary-light);color:var(--primary)}.muted{color:var(--text-muted);font-size:.9375rem;margin-top:.25rem}.lesson-last-submitted-picker{padding:.4rem .5rem;font-size:.9375rem;font-family:var(--font);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-elevated);color:var(--text);min-width:10rem}.lesson-last-submitted-picker:focus{outline:none;border-color:var(--primary)}.lesson-minimum-callout{font-size:.9375rem;color:var(--text);margin:.5rem 0 1rem;padding:.5rem .75rem;background:var(--primary-light);border-radius:var(--radius-sm);border-left:3px solid var(--primary)}.lesson-minimum-callout strong{color:var(--primary)}.lesson-last-submitted-item{font-size:.8125rem;color:var(--text-muted);font-style:italic}.lesson-ordinal-week{display:block;font-size:.75rem;font-weight:600}.lesson-frac-below{color:var(--danger)}.lesson-frac-met{color:var(--primary)}.lesson-frac-above{color:var(--success)}.lesson-completed-items{display:block;font-size:.75rem;color:var(--text-muted);margin-top:.15rem;word-break:break-word}.lesson-days-ok{font-size:.8125rem;color:var(--text-muted)}.lesson-days-warning{font-size:.8125rem;font-weight:600;color:var(--warning)}.lesson-days-overdue{font-size:.8125rem;font-weight:600;color:var(--danger)}.calendar-view-toggle{display:flex;gap:0}.calendar-view-toggle .btn{border-radius:0}.calendar-view-toggle .btn:first-child{border-radius:var(--radius-sm) 0 0 var(--radius-sm)}.calendar-view-toggle .btn:last-child{border-radius:0 var(--radius-sm) var(--radius-sm) 0}.calendar-toolbar{display:flex;align-items:center;gap:1rem;margin-bottom:1rem;flex-wrap:wrap}.calendar-week-label{font-weight:600;min-width:180px;text-align:center;color:var(--text)}.calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:.5rem}.calendar-grid-week{grid-auto-rows:1fr}.calendar-grid-week .calendar-day{height:260px;min-height:260px;min-width:0;display:flex;flex-direction:column;overflow:hidden;border-radius:var(--radius-sm);transition:transform var(--transition),box-shadow var(--transition)}.calendar-grid-week .calendar-day:hover{transform:translateY(-2px);box-shadow:var(--shadow-hover)}.calendar-grid-week .calendar-day-header{flex-shrink:0;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.calendar-grid-week .calendar-day-holidays{flex-shrink:0;min-width:0}.calendar-grid-week .calendar-day-events{flex:1;min-height:0;min-width:0;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch}@media(max-width:700px){.calendar-grid-week{grid-template-columns:1fr}.calendar-grid-week .calendar-day{height:auto;min-height:100px}}.calendar-day{border:1px solid var(--border);border-radius:var(--radius-sm);min-height:100px;box-sizing:border-box;transition:border-color var(--transition),background var(--transition)}.calendar-day:hover{border-color:#cbd5e1}.calendar-day-header{padding:.5rem;background:#f8fafc;font-weight:600;border-radius:var(--radius-sm) var(--radius-sm) 0 0;font-size:.875rem}.calendar-day-events{padding:.5rem;box-sizing:border-box;min-width:0}.calendar-event{position:relative;padding:.4rem 1.5rem .4rem .4rem;background:var(--primary-light);border-radius:6px;margin-bottom:.25rem;font-size:.9rem;min-width:0;overflow:hidden;transition:transform var(--transition),box-shadow var(--transition)}.calendar-event:hover{transform:translate(2px);box-shadow:0 2px 8px #6366f126}.calendar-event>span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.calendar-event small{display:block;color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.8em}.calendar-event-delete{position:absolute;top:2px;right:2px;padding:0 .35rem;font-size:1rem;line-height:1;transition:transform var(--transition)}.calendar-event-delete:hover{transform:scale(1.1)}.calendar-todo{background:#fef3c7;border-left:3px solid #d97706}.calendar-todo-done{text-decoration:line-through;color:var(--text-muted)}.calendar-todo-dba-scheduled{border:2px solid var(--danger)!important;box-shadow:0 0 0 1px #ef44444d;font-weight:600}.calendar-todo-dba-time{font-size:.85em;font-weight:700;color:var(--danger);display:block;margin-top:.1rem}.calendar-event-clickable{cursor:pointer}.calendar-event-clickable:hover{opacity:.95}.calendar-day-detail-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;display:flex;align-items:center;justify-content:center;z-index:1000;padding:1rem;box-sizing:border-box}.calendar-day-detail-modal{max-width:480px;width:100%;max-height:85vh;display:flex;flex-direction:column}.calendar-day-detail-header{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1rem;flex-shrink:0}.calendar-day-detail-header .btn{font-size:1.5rem;line-height:1;padding:.25rem .5rem}.calendar-day-detail-body{overflow-y:auto;min-height:0}.calendar-holiday{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.calendar-month-wrap{margin-top:.5rem}.calendar-month-header{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:2px;margin-bottom:2px;font-size:.75rem;font-weight:600;color:var(--text-muted);text-align:center}.calendar-month-dayhead{padding:.25rem;min-width:0}.calendar-grid-month{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));grid-template-rows:repeat(6,1fr);gap:2px;min-height:420px;height:420px}.calendar-grid-month .calendar-day-month{min-height:0;min-width:0;height:100%;font-size:.85rem;display:flex;flex-direction:column;box-sizing:border-box;overflow:hidden;transition:transform var(--transition),background var(--transition)}.calendar-grid-month .calendar-day-month:hover{transform:scale(1.02);background:#fafafa}.calendar-day-month{font-size:.85rem;box-sizing:border-box}.calendar-day-other-month{background:#f8fafc}.calendar-day-other-month .calendar-day-header-month{color:#94a3b8}.calendar-day-header-month{padding:.25rem;font-size:.9rem;border-radius:4px 4px 0 0}.calendar-holiday-month{font-size:.65rem;padding:.15rem .25rem;margin-bottom:.1rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.calendar-day-events-month{padding:.2rem;box-sizing:border-box;min-width:0;flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch}.calendar-event-month{padding:.2rem .3rem;font-size:.75rem;margin-bottom:.15rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;transition:transform var(--transition)}.calendar-event-month:hover{transform:translate(2px)}.calendar-event-month .calendar-event-delete{display:none}.calendar-more{font-size:.7rem;color:var(--text-muted);padding:.1rem .25rem}.calendar-show-all{display:flex;align-items:center;gap:.5rem;margin-right:1rem;cursor:pointer;font-weight:500}.calendar-show-all input{margin:0;accent-color:var(--primary)}.calendar-event-child{display:block;font-weight:600;color:var(--primary)}.calendar-day-holidays{padding:.25rem .5rem;margin-bottom:.25rem}.calendar-holiday{font-size:.75rem;color:#92400e;background:#fef3c7;padding:.2rem .4rem;border-radius:6px;margin-bottom:.15rem;border-left:3px solid var(--warning);transition:transform var(--transition)}.calendar-holiday:hover{transform:translate(2px)}.calendar-legend{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem;margin-bottom:.75rem;padding:.5rem 0}.calendar-legend-title{font-weight:600;margin-right:.25rem;color:var(--text)}.calendar-legend-item{padding:.2rem;border-radius:6px;font-size:.85rem;font-weight:500;color:var(--text);transition:transform var(--transition);display:inline-flex}.calendar-legend-name{padding:.2rem .5rem;border-radius:4px;display:inline-block}.calendar-legend-item:hover{transform:scale(1.03)}.calendar-holidays-legend{background:#fffbeb;border-radius:var(--radius-sm);padding:.5rem .75rem;border:1px solid #fde68a}.calendar-holiday-legend{font-size:.85rem;color:#92400e}.calendar-holiday-legend:not(:last-child):after{content:", "}.todo-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.5rem}.todo-item{display:flex;align-items:center;gap:.75rem;padding:.65rem 1rem;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-elevated);transition:background var(--transition),border-color var(--transition),box-shadow var(--transition);animation:rowIn .3s ease backwards}.todo-item:nth-child(1){animation-delay:.02s}.todo-item:nth-child(2){animation-delay:.05s}.todo-item:nth-child(3){animation-delay:.08s}.todo-item:nth-child(4){animation-delay:.11s}.todo-item:nth-child(5){animation-delay:.14s}.todo-item:nth-child(6){animation-delay:.17s}.todo-item:nth-child(7){animation-delay:.2s}.todo-item:nth-child(8){animation-delay:.23s}.todo-item:hover{background:#f8fafc;border-color:var(--border-focus);box-shadow:var(--shadow)}.todo-item.todo-item-highlight{background:#d1fae5;border-color:var(--success)}.todo-item.completed .todo-title{text-decoration:line-through;color:var(--text-muted)}.todo-title{flex:1;min-width:0}.todo-due{font-size:.9rem;color:var(--text-muted)}.todo-child{margin-left:.5rem}.todo-delete{margin-left:auto}.todo-type-select{width:auto;max-width:none;padding:.35rem .6rem;font-size:.875rem;min-width:7rem;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-elevated)}.todo-password-input{width:10rem;max-width:140px;padding:.5rem .75rem;font-size:.9375rem;font-family:var(--font);line-height:1.4;min-height:2.5rem;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-elevated);color:var(--text);transition:border-color var(--transition),box-shadow var(--transition);box-sizing:border-box}.todo-password-input::placeholder{color:var(--text-muted)}.todo-password-input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-light)}.todo-table-wrapper{border-radius:var(--radius);border:1px solid var(--border);background:var(--bg-elevated);overflow:hidden}.todo-table{width:100%;border-collapse:collapse}.todo-table th{font-weight:600;font-size:.8125rem;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);background:#f8fafc;padding:.65rem 1rem;text-align:left;border-bottom:1px solid var(--border)}.todo-table td{padding:.65rem 1rem;border-bottom:1px solid var(--border);vertical-align:middle}.todo-table tbody tr{transition:background var(--transition);animation:rowIn .3s ease backwards}.todo-table tbody tr:hover{background:#f8fafc}.todo-table tbody tr.todo-row-completed:hover{filter:brightness(.92)}.todo-table tbody tr.todo-item-highlight{background:#a7f3d0}.todo-table tbody tr.todo-row-dba{border-left:4px solid #7c3aed;box-shadow:inset 0 0 0 1px #7c3aed33}.todo-row-holding{animation:todoHoldPulse .6s ease-in-out infinite}@keyframes todoHoldPulse{0%,to{opacity:1}50%{opacity:.85}}.todo-completed-heading{font-size:.9375rem;font-weight:600;color:var(--text-muted);margin:1.25rem 0 .5rem}.todo-completed-section tbody tr{animation:todoCompletedEnter .4s ease-out}@keyframes todoCompletedEnter{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.todo-table .todo-table-done{width:2.5rem;text-align:center}.todo-table .todo-table-task{min-width:140px}.todo-table .todo-table-type{white-space:nowrap}.todo-table .todo-table-due{color:var(--text-muted);font-size:.9rem;white-space:nowrap}.todo-table .todo-table-password{min-width:10rem}.todo-table .todo-table-child,.todo-table .todo-table-actions{white-space:nowrap}.main h2{margin:0 0 .25rem;font-size:1.375rem;font-weight:700;letter-spacing:-.02em;color:var(--text)}.main h3{margin:0 0 .5rem;font-size:1.0625rem;font-weight:600;color:var(--text)}.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:1.5rem;background:linear-gradient(160deg,#f0f4ff,#e8ecff,#f8fafc)}.login-card{width:100%;max-width:400px;background:var(--bg-elevated);border-radius:var(--radius);box-shadow:var(--shadow-hover);border:1px solid var(--border);padding:2rem;animation:contentIn .4s ease}.login-header{text-align:center;margin-bottom:1.75rem}.login-logo{margin:0 0 .35rem;font-size:1.5rem;font-weight:700;letter-spacing:-.02em;background:linear-gradient(135deg,var(--primary) 0%,#8b5cf6 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.login-subtitle{margin:0;color:var(--text-muted);font-size:.9375rem}.login-admin-only{margin:.5rem 0 0;font-size:.8125rem;color:var(--text-muted);max-width:320px;margin-left:auto;margin-right:auto}.login-form .form-group input{max-width:none}.login-error{padding:.65rem .85rem;background:#fef2f2;border:1px solid #fecaca;border-radius:var(--radius-sm);color:#b91c1c;font-size:.9rem;margin-bottom:1rem;transition:opacity var(--transition)}.login-remember{margin-bottom:1.25rem}.login-checkbox-label{display:inline-flex;align-items:center;gap:.5rem;cursor:pointer;font-weight:500;font-size:.9375rem;color:var(--text);-webkit-user-select:none;user-select:none}.login-checkbox-label input{width:auto;max-width:none;accent-color:var(--primary)}.login-submit{width:100%;padding:.7rem 1rem;font-size:1rem;display:inline-flex;align-items:center;justify-content:center;min-height:44px;transition:transform var(--transition),box-shadow var(--transition)}.login-submit:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 6px 20px #6366f166}.login-submit:disabled{opacity:.85;cursor:not-allowed}.login-spinner{display:inline-block;width:20px;height:20px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#f8fafce6;display:flex;align-items:center;justify-content:center;z-index:9999}.loading-spinner{width:40px;height:40px;border:3px solid var(--border);border-top-color:var(--primary);border-radius:50%;animation:spin .8s linear infinite}.loading-text{position:absolute;margin-top:70px;font-weight:500;color:var(--text-muted)}.manage-accounts-loading{display:flex;flex-direction:column;align-items:center;gap:1rem;padding:2rem}.manage-accounts-actions{display:flex;gap:.5rem}.manage-accounts-actions .btn{transition:transform var(--transition)}.manage-accounts-actions .btn:hover{transform:translateY(-1px)}.username-code{font-size:.875rem;background:#f1f5f9;padding:.2rem .5rem;border-radius:4px;border:1px solid var(--border)}.manage-accounts-edit{margin-top:1.5rem}.manage-accounts-edit h3{margin-top:0}
