:root{--primary: #3b82f6;--primary-dark: #2563eb;--primary-light: #eff6ff;--primary-border: #bfdbfe;--success: #10b981;--success-light: #ecfdf5;--warning: #f59e0b;--warning-light: #fffbeb;--danger: #ef4444;--danger-light: #fef2f2;--text: #1e293b;--text-muted: #64748b;--text-subtle: #94a3b8;--bg: #f1f5f9;--surface: #ffffff;--border: #e2e8f0;--border-strong: #cbd5e1;--radius-sm: 6px;--radius: 10px;--radius-lg: 14px;--shadow-sm: 0 1px 3px rgba(0,0,0,.06), 0 1px 2px rgba(0,0,0,.04);--shadow: 0 4px 6px -1px rgba(0,0,0,.07), 0 2px 4px -1px rgba(0,0,0,.04);--shadow-lg: 0 10px 15px -3px rgba(0,0,0,.08), 0 4px 6px -2px rgba(0,0,0,.04);--font: "Segoe UI", system-ui, -apple-system, sans-serif}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--font);background:var(--bg);color:var(--text);min-height:100vh;line-height:1.5;-webkit-font-smoothing:antialiased}.navbar{display:flex;align-items:center;justify-content:space-between;height:62px;padding:0 2rem;background:var(--surface);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:100;box-shadow:var(--shadow-sm)}.navbar-brand{font-size:1rem;font-weight:700;color:var(--primary);letter-spacing:-.01em;display:flex;align-items:center;gap:.5rem}.navbar-brand:before{content:"";display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--primary);box-shadow:0 0 0 3px var(--primary-light)}.navbar-links{display:flex;align-items:center;gap:.25rem}.navbar-links a{text-decoration:none;color:var(--text-muted);font-size:.875rem;font-weight:500;padding:.4rem .75rem;border-radius:var(--radius-sm);transition:background .15s,color .15s}.navbar-links a:hover{background:var(--bg);color:var(--text)}.navbar-links a.active{color:var(--primary);background:var(--primary-light)}.nav-login{margin-left:.5rem;padding:.4rem 1rem!important;background:var(--primary)!important;color:var(--surface)!important;border-radius:var(--radius-sm)!important;font-weight:600!important}.nav-login:hover,.nav-login.active{background:var(--primary-dark)!important}.page{max-width:1000px;margin:0 auto;padding:2rem 1.5rem 3rem}.page-header{margin-bottom:1.75rem;display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;flex-wrap:wrap}.page-header-text h1{font-size:1.5rem;font-weight:700;letter-spacing:-.02em;color:var(--text);margin-bottom:.2rem}.page-header-text p{color:var(--text-muted);font-size:.875rem}.card{background:var(--surface);border-radius:var(--radius-lg);border:1px solid var(--border);box-shadow:var(--shadow-sm)}.card-padded{padding:1.5rem}.section-label{font-size:.7rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--text-subtle);margin-bottom:1rem}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.form-group{display:flex;flex-direction:column;gap:.35rem}.form-group.full{grid-column:1 / -1}.form-group label{font-size:.8rem;font-weight:600;color:var(--text)}.form-group .helper{font-size:.72rem;color:var(--text-subtle);margin-top:-.15rem}.form-group input{padding:.55rem .75rem;border:1px solid var(--border-strong);border-radius:var(--radius-sm);font-size:.875rem;font-family:var(--font);color:var(--text);background:var(--surface);transition:border-color .15s,box-shadow .15s;outline:none}.form-group input:focus{border-color:var(--primary);box-shadow:0 0 0 3px #3b82f626}.form-group input::placeholder{color:var(--text-subtle)}.form-actions{display:flex;align-items:center;justify-content:flex-end;gap:.75rem;margin-top:.5rem;padding-top:1rem;border-top:1px solid var(--border)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem 1.25rem;border:none;border-radius:var(--radius-sm);font-size:.875rem;font-weight:600;font-family:var(--font);cursor:pointer;transition:background .15s,opacity .15s,transform .1s;white-space:nowrap}.btn:disabled{opacity:.45;cursor:not-allowed}.btn:not(:disabled):active{transform:scale(.98)}.btn-primary{background:var(--primary);color:#fff}.btn-primary:not(:disabled):hover{background:var(--primary-dark)}.btn-ghost{background:transparent;color:var(--text-muted);border:1px solid var(--border-strong)}.btn-ghost:not(:disabled):hover{background:var(--bg);color:var(--text)}.btn-icon{padding:.4rem;border-radius:var(--radius-sm);background:transparent;border:none;color:var(--text-subtle);cursor:pointer;font-size:1rem;line-height:1;transition:background .15s,color .15s}.btn-icon:hover{background:var(--bg);color:var(--text)}.btn-icon.danger:hover{background:var(--danger-light);color:var(--danger)}.login-page{display:flex;align-items:center;justify-content:center;min-height:calc(100vh - 62px);padding:2rem 1rem}.login-card{width:100%;max-width:420px;text-align:center;padding:3rem 2.5rem 2.5rem}.login-logo{width:52px;height:52px;border-radius:14px;background:var(--primary-light);border:1px solid var(--primary-border);display:flex;align-items:center;justify-content:center;margin:0 auto 1.5rem;font-size:1.4rem}.login-card h1{font-size:1.6rem;font-weight:700;letter-spacing:-.02em;margin-bottom:.5rem}.login-card .subtitle{color:var(--text-muted);font-size:.9rem;margin-bottom:2rem;line-height:1.6}.btn-google{display:inline-flex;align-items:center;gap:.6rem;padding:.7rem 1.5rem;background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-sm);font-size:.9rem;font-weight:500;font-family:var(--font);color:var(--text);cursor:not-allowed;opacity:.5;box-shadow:var(--shadow-sm);width:100%;justify-content:center}.google-icon{font-weight:700;font-size:1rem;color:#4285f4}.login-note{margin-top:1.25rem;font-size:.78rem;color:var(--text-subtle)}.login-note span{display:inline-block;margin-top:.75rem;padding:.4rem .75rem;background:var(--warning-light);color:var(--warning);border-radius:20px;font-weight:600;font-size:.72rem}.courses-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:1rem;margin-top:1rem}.course-card{padding:0;overflow:hidden;transition:box-shadow .15s,transform .15s}.course-card:hover{box-shadow:var(--shadow);transform:translateY(-1px)}.course-card-accent{height:4px;border-radius:var(--radius-lg) var(--radius-lg) 0 0}.course-card-body{padding:1.25rem}.course-card-header{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:.75rem}.course-card-header h3{font-size:.975rem;font-weight:700;color:var(--text);line-height:1.3;flex:1;margin-right:.5rem}.card-actions{display:flex;gap:.15rem;flex-shrink:0}.badge{display:inline-flex;align-items:center;padding:.2rem .55rem;border-radius:20px;font-size:.7rem;font-weight:700;white-space:nowrap}.badge-urgent{background:var(--danger-light);color:var(--danger)}.badge-warning{background:var(--warning-light);color:var(--warning)}.badge-ok{background:var(--success-light);color:var(--success)}.course-meta{display:flex;align-items:center;gap:.5rem;margin-bottom:1rem;font-size:.8rem;color:var(--text-muted)}.course-meta .dot{width:3px;height:3px;border-radius:50%;background:var(--border-strong);flex-shrink:0}.course-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:.5rem;margin-bottom:1rem;padding:.75rem;background:var(--bg);border-radius:var(--radius-sm)}.stat-item{text-align:center}.stat-value{font-size:1.05rem;font-weight:700;color:var(--text);line-height:1;margin-bottom:.2rem}.stat-label{font-size:.65rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--text-subtle)}.progress-wrap{display:flex;flex-direction:column;gap:.35rem}.progress-meta{display:flex;justify-content:space-between;font-size:.75rem;color:var(--text-muted)}.progress-pct{font-weight:700;color:var(--text)}.progress-bar{height:6px;background:var(--border);border-radius:99px;overflow:hidden}.progress-fill{height:100%;border-radius:99px;transition:width .4s ease}.empty-state{text-align:center;padding:3rem 2rem;border:2px dashed var(--border);border-radius:var(--radius-lg);color:var(--text-muted);margin-top:1rem}.empty-icon{font-size:2rem;margin-bottom:.75rem;opacity:.4}.empty-state h3{font-size:.95rem;font-weight:600;margin-bottom:.35rem;color:var(--text)}.empty-state p{font-size:.825rem}.plan-table{width:100%;border-collapse:collapse}.plan-table th{padding:.6rem 1rem;text-align:left;font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--text-subtle);background:var(--bg);border-bottom:1px solid var(--border)}.plan-table th:first-child{border-radius:var(--radius) 0 0 0}.plan-table th:last-child{border-radius:0 var(--radius) 0 0}.plan-table td{padding:.75rem 1rem;font-size:.875rem;color:var(--text);border-bottom:1px solid var(--border);vertical-align:middle}.plan-table tbody tr:last-child td{border-bottom:none}.plan-table tbody tr:hover td{background:var(--bg)}.course-dot{display:inline-flex;align-items:center;gap:.5rem}.course-dot:before{content:"";display:inline-block;width:8px;height:8px;border-radius:50%;flex-shrink:0}.hours-chip{display:inline-block;padding:.2rem .55rem;background:var(--primary-light);color:var(--primary);border-radius:20px;font-size:.75rem;font-weight:700}.plan-summary{display:flex;align-items:center;justify-content:flex-end;gap:1.5rem;padding:.85rem 1rem;background:var(--bg);border-top:2px solid var(--border);font-size:.825rem;border-radius:0 0 var(--radius-lg) var(--radius-lg)}.plan-summary strong{color:var(--text)}.plan-summary span{color:var(--text-muted)}.calendar-header-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:1.25rem}.calendar-month-label{font-size:1rem;font-weight:700;color:var(--text)}.cal-legend{display:flex;flex-wrap:wrap;gap:.75rem;font-size:.75rem;color:var(--text-muted)}.cal-legend-item{display:flex;align-items:center;gap:.35rem;font-weight:500}.cal-legend-dot{width:10px;height:10px;border-radius:3px;flex-shrink:0}.calendar-day-names{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-bottom:4px}.day-name{text-align:center;font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--text-subtle);padding:.4rem 0}.calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}.cal-day{min-height:80px;display:flex;flex-direction:column;padding:6px 7px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--surface);transition:border-color .15s}.cal-day.empty{border:none;background:transparent;min-height:80px}.cal-day-num{font-size:.78rem;font-weight:600;color:var(--text-muted);line-height:1;margin-bottom:4px}.cal-day.today .cal-day-num{display:flex;align-items:center;justify-content:center;width:20px;height:20px;background:var(--primary);color:#fff;border-radius:50%;font-weight:700}.cal-event{display:flex;flex-direction:column;padding:3px 5px;border-radius:4px;font-size:.65rem;font-weight:600;line-height:1.3;flex:1;min-height:0;overflow:hidden}.cal-event-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cal-event-hours{opacity:.75;font-weight:500;margin-top:1px}@media (max-width: 680px){.navbar{padding:0 1rem}.navbar-brand:before{display:none}.navbar-links a{padding:.35rem .5rem;font-size:.8rem}.nav-login{padding:.35rem .75rem!important}.page{padding:1.25rem 1rem 2rem}.form-grid{grid-template-columns:1fr}.form-group.full{grid-column:1}.courses-grid{grid-template-columns:1fr}.cal-day{min-height:52px;padding:4px}.cal-event{display:none}.cal-day.has-session{border-width:2px}.plan-summary{flex-direction:column;align-items:flex-start;gap:.35rem}}@media (max-width: 420px){.navbar-links a:not(.nav-login){display:none}}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a73;display:flex;align-items:center;justify-content:center;z-index:200;padding:1rem;animation:fadeIn .15s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.modal{background:var(--surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);width:100%;max-width:560px;max-height:90vh;display:flex;flex-direction:column;overflow:hidden;animation:slideUp .18s ease}@keyframes slideUp{0%{transform:translateY(10px);opacity:0}to{transform:none;opacity:1}}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:1.25rem 1.5rem;border-bottom:1px solid var(--border);flex-shrink:0}.modal-header h2{font-size:1rem;font-weight:700;color:var(--text)}.modal-body{padding:1.25rem 1.5rem;overflow-y:auto;display:flex;flex-direction:column;gap:1rem;flex:1}.modal-footer{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.5rem;border-top:1px solid var(--border);flex-shrink:0;gap:.5rem}.modal-footer-right{display:flex;align-items:center;gap:.5rem;margin-left:auto}.form-group select,.form-group textarea{padding:.55rem .75rem;border:1px solid var(--border-strong);border-radius:var(--radius-sm);font-size:.875rem;font-family:var(--font);color:var(--text);background:var(--surface);outline:none;transition:border-color .15s,box-shadow .15s;resize:vertical}.form-group select:focus,.form-group textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px #3b82f626}.form-error{font-size:.75rem;color:var(--danger);margin-top:.1rem}.optional{font-weight:400;color:var(--text-subtle);font-size:.75rem}.day-picker{display:flex;flex-wrap:wrap;gap:.4rem}.day-chip{padding:.3rem .65rem;border:1.5px solid var(--border-strong);border-radius:20px;font-size:.78rem;font-weight:600;font-family:var(--font);background:var(--surface);color:var(--text-muted);cursor:pointer;transition:background .15s,border-color .15s,color .15s}.day-chip.active{background:var(--primary-light);border-color:var(--primary);color:var(--primary)}.toggle-row{display:flex;align-items:center;justify-content:space-between;padding:.75rem .9rem;background:var(--bg);border-radius:var(--radius-sm);border:1px solid var(--border);gap:1rem}.toggle-label{font-size:.875rem;font-weight:600;color:var(--text)}.toggle-sublabel{font-size:.75rem;color:var(--text-subtle);margin-top:.15rem}.toggle-btn{position:relative;width:40px;height:22px;border-radius:11px;border:none;background:var(--border-strong);cursor:not-allowed;flex-shrink:0;transition:background .2s}.toggle-btn.on{background:var(--primary)}.toggle-knob{position:absolute;top:3px;left:3px;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:0 1px 3px #0003;transition:left .2s}.toggle-btn.on .toggle-knob{left:21px}.btn-sm{padding:.35rem .85rem;font-size:.8rem}.btn-danger{background:var(--danger-light);color:var(--danger)}.btn-danger:not(:disabled):hover{background:var(--danger);color:#fff}.badge-pending{background:#f1f5f9;color:var(--text-muted)}.overall-progress{display:flex;align-items:center;gap:1.5rem;flex-wrap:wrap;margin-bottom:.5rem}.overall-left{display:flex;align-items:center;gap:.75rem}.overall-pct{font-size:2.25rem;font-weight:800;color:var(--primary);letter-spacing:-.04em;line-height:1}.overall-label{font-size:.75rem;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;line-height:1.4}.overall-right{flex:1;min-width:180px;display:flex;flex-direction:column;gap:.4rem}.overall-sub{font-size:.75rem;color:var(--text-subtle)}.task-checkbox{width:16px;height:16px;cursor:pointer;accent-color:var(--primary)}.course-dot-row{display:inline-flex;align-items:center;gap:.45rem}.row-done td{opacity:.6}.text-muted{color:var(--text-muted)}.strike{text-decoration:line-through}.status-toggle-row{display:flex;align-items:center;justify-content:space-between;padding:.5rem 0;font-size:.875rem;color:var(--text-muted)}.week-nav{display:flex;align-items:center;justify-content:space-between;padding:.85rem 1.25rem;border-bottom:1px solid var(--border)}.week-label{font-size:.9rem;font-weight:700;color:var(--text)}.week-scroll{overflow-x:auto}.week-header{display:grid;grid-template-columns:52px repeat(7,1fr);border-bottom:1px solid var(--border);min-width:600px}.week-day-header{display:flex;flex-direction:column;align-items:center;padding:.6rem .25rem;gap:.2rem;border-left:1px solid var(--border)}.week-day-header.today{background:var(--primary-light)}.day-abbr{font-size:.65rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--text-subtle)}.day-num{font-size:.9rem;font-weight:700;color:var(--text-muted);width:26px;height:26px;display:flex;align-items:center;justify-content:center;border-radius:50%}.day-num.today-circle{background:var(--primary);color:#fff}.week-body{display:grid;grid-template-columns:52px repeat(7,1fr);min-width:600px}.time-gutter{width:52px;flex-shrink:0;border-right:1px solid var(--border)}.time-labels{position:relative}.time-cell{display:flex;align-items:flex-start;justify-content:flex-end;padding-right:8px;padding-top:2px;font-size:.65rem;font-weight:600;color:var(--text-subtle);border-bottom:1px solid var(--border);box-sizing:border-box}.week-day-col{position:relative;border-left:1px solid var(--border);overflow:hidden}.hour-line{position:absolute;left:0;right:0;height:1px;background:var(--border)}.task-block{position:absolute;left:3px;right:3px;border-radius:5px;padding:4px 6px;overflow:hidden;cursor:pointer;transition:filter .1s,transform .1s;font-size:.72rem;display:flex;flex-direction:column;gap:1px}.task-block:hover{filter:brightness(.95);transform:scale(1.01)}.task-block.done{opacity:.7}.task-name{font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.task-time{font-size:.67rem;opacity:.85;white-space:nowrap}.task-duration{font-size:.67rem;font-weight:600;opacity:.75}.task-check{margin-top:auto;align-self:flex-end;background:none;border:none;cursor:pointer;font-size:.85rem;padding:0;color:inherit;opacity:.7;transition:opacity .15s}.task-check:hover{opacity:1}.task-check.checked{opacity:1;color:var(--success)}
