*{margin:0;padding:0;box-sizing:border-box}:root{--bg: #fafafa;--card: #fff;--border: #e5e5e5;--text: #1a1a1a;--text-secondary: #666;--accent: #a51c30;--accent-light: #fef2f2;--tag-bg: #f3f4f6}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text);line-height:1.5;-webkit-font-smoothing:antialiased}#root{padding:0}.sidebar{position:fixed;top:0;left:0;bottom:0;width:250px;background:var(--card);border-right:1px solid var(--border);z-index:1000;display:flex;flex-direction:column;transform:translate(-100%);transition:transform .2s ease;overflow-y:auto}.sidebar.open{transform:translate(0)}.sidebar-backdrop{position:fixed;inset:0;background:#0000004d;z-index:999;animation:fadeIn .15s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.sidebar-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1rem .75rem;border-bottom:1px solid var(--border)}.sidebar-brand{display:flex;align-items:center;gap:.5rem;text-decoration:none}.sidebar-logo{font-size:.85rem;font-weight:800;color:#fff;background:var(--accent);padding:2px 8px;border-radius:4px;letter-spacing:.5px}.sidebar-title{font-size:1rem;font-weight:700;color:var(--text)}.sidebar-close{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;background:none;color:var(--text-secondary);cursor:pointer;border-radius:6px;transition:all .15s}.sidebar-close:hover{background:var(--bg);color:var(--text)}.sidebar-nav{flex:1;padding:.5rem 0;overflow-y:auto}.sidebar-group{padding:.25rem 0}.sidebar-group+.sidebar-group{border-top:1px solid var(--border);margin-top:.25rem;padding-top:.5rem}.sidebar-group-label{font-size:.65rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--text-secondary);padding:.25rem 1.25rem}.sidebar-link{display:flex;align-items:center;gap:.75rem;padding:.45rem 1.25rem;font-size:.85rem;font-weight:500;color:var(--text-secondary);text-decoration:none;transition:all .12s}.sidebar-link:hover{color:var(--text);background:var(--bg)}.sidebar-link.active{color:var(--accent);background:var(--accent-light);font-weight:600}.sidebar-link svg{flex-shrink:0;opacity:.7}.sidebar-link.active svg{opacity:1}.sidebar-toggle{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:1px solid var(--border);border-radius:8px;background:var(--card);cursor:pointer;color:var(--text-secondary);transition:all .15s;flex-shrink:0}.sidebar-toggle:hover{border-color:var(--accent);color:var(--accent)}@media(min-width:1100px){.sidebar{transform:translate(0)}.sidebar-backdrop,.sidebar-close,.sidebar-toggle{display:none}}.layout{display:flex;min-height:100vh}.layout-main{flex:1;max-width:900px;margin:0 auto;padding:1rem;min-width:0}.layout-main>.sidebar-toggle{position:fixed;top:12px;left:12px;z-index:100}@media(min-width:1100px){.layout-main{margin-left:250px}.layout-main>.sidebar-toggle{display:none}}@media(max-width:1099px){.layout-main{padding-top:3.5rem}}.card{background:var(--card);border:1px solid var(--border);border-left:3px solid;border-radius:8px;overflow:hidden;transition:box-shadow .15s}.card:hover{box-shadow:0 1px 4px #0000000f}.card-checked{opacity:.5}.card-checked .card-title{text-decoration:line-through}.card-header{display:flex;align-items:center;justify-content:space-between;padding:.75rem 1rem;cursor:pointer;gap:1rem;-webkit-user-select:none;user-select:none}.card-left{display:flex;align-items:center;gap:.6rem;min-width:0}.check-btn{width:18px;height:18px;border:2px solid var(--border);border-radius:4px;background:none;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;padding:0;transition:all .15s}.check-btn:hover{border-color:var(--accent)}.check-btn.checked{background:var(--accent);border-color:var(--accent);color:#fff}.type-icon{display:flex;align-items:center;flex-shrink:0;opacity:.7}.course-tag{font-size:.7rem;font-weight:600;padding:2px 8px;border-radius:4px;white-space:nowrap;flex-shrink:0}.card-title{font-size:.9rem;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.card-right{display:flex;align-items:center;gap:.5rem;flex-shrink:0}.card-time{font-size:.8rem;color:var(--text-secondary);white-space:nowrap}.chevron{font-size:.75rem;color:var(--text-secondary);transition:transform .2s;display:inline-block}.card-details{padding:0 1rem 1rem;border-top:1px solid var(--border);animation:slideDown .15s ease-out}.detail-section{margin-top:.75rem;padding-top:.5rem}.detail-section+.detail-section{border-top:1px solid var(--border)}.detail-section h4{font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--text-secondary);margin-bottom:.4rem}.detail-section p{font-size:.85rem;line-height:1.6}.case-summary{color:var(--text)}.materials-list{list-style:none;padding:0;display:flex;flex-direction:column;gap:2px}.materials-list li{padding:.3rem .5rem;border-radius:4px;transition:background .1s}.materials-list li:hover{background:var(--bg)}.materials-list a{color:var(--accent);text-decoration:none;font-size:.82rem;font-weight:500;display:flex;align-items:center;gap:.4rem}.materials-list a:before{content:"";display:inline-block;width:4px;height:4px;border-radius:50%;background:currentColor;opacity:.5;flex-shrink:0}.materials-list a:hover{text-decoration:underline}.questions-list{padding-left:1.2rem}.questions-list li{font-size:.85rem;padding:.2rem 0;line-height:1.5}.type-label{font-size:.65rem;font-weight:500;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.03em;flex-shrink:0}.points-badge{font-size:.65rem;font-weight:600;padding:1px 6px;border-radius:3px;white-space:nowrap;background:#f3f4f6;color:#6b7280}.status-badge{font-size:.65rem;font-weight:600;padding:1px 6px;border-radius:3px;white-space:nowrap}.status-badge.submitted{background:#dbeafe;color:#1d4ed8}.status-badge.graded{background:#dcfce7;color:#15803d}.status-badge.excused{background:#f3f4f6;color:#6b7280}.skeleton{padding:.75rem 0 .25rem;display:flex;flex-direction:column;gap:.5rem}.skeleton-line{height:.75rem;border-radius:4px;background:linear-gradient(90deg,var(--border) 25%,transparent 50%,var(--border) 75%);background-size:200% 100%;animation:shimmer 1.5s infinite}.skeleton-line.short{width:30%}.detail-error{font-size:.85rem;color:#dc2626;padding:.5rem 0}.plain-text{color:var(--text-secondary)}.raw-description{font-size:.85rem;line-height:1.6}.raw-description a{color:var(--accent)}.raw-description ol,.raw-description ul{padding-left:1.2rem}.raw-description img{max-width:100%;height:auto}.card-deadline{border-left-width:4px}.card-deadline-urgent{background:#fef2f2;border-left-color:#dc2626;animation:urgentPulse 2s ease-in-out infinite}.card-deadline-soon{background:#fff7ed;border-left-color:#ea580c}.card-deadline-past{background:#fef2f2;border-left-color:#991b1b}@keyframes urgentPulse{0%,to{box-shadow:0 0 #dc262600}50%{box-shadow:0 0 0 3px #dc262626}}.due-badge{font-size:.6rem;font-weight:700;padding:1px 6px;border-radius:3px;white-space:nowrap;flex-shrink:0;letter-spacing:.04em}.due-badge-urgent{background:#dc2626;color:#fff}.due-badge-soon{background:#ea580c;color:#fff}.due-badge-past{background:#991b1b;color:#fff}.due-badge-normal{background:#f59e0b;color:#fff}.summary-link{display:inline-block;color:var(--accent);text-decoration:none;font-size:.8rem;font-weight:600;padding:.35rem .75rem;border:1px solid var(--accent);border-radius:6px;transition:all .15s}.summary-link:hover{background:var(--accent);color:#fff}.schedule{display:flex;flex-direction:column;gap:1.5rem;padding:1rem 0}.day-group.today .day-header{color:var(--accent)}.day-header{font-size:.85rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em;color:var(--text-secondary);margin-bottom:.5rem;padding-bottom:.25rem}.day-items{display:flex;flex-direction:column;gap:.5rem}.empty{text-align:center;padding:3rem;color:var(--text-secondary)}.deadlines-banner{background:var(--card);border:1px solid var(--border);border-radius:8px;padding:.6rem .75rem;margin-bottom:.75rem;display:flex;align-items:flex-start;gap:.75rem}.deadlines-label{display:flex;align-items:center;gap:.35rem;font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--text-secondary);white-space:nowrap;padding-top:.25rem;flex-shrink:0}.deadlines-list{display:flex;flex-wrap:wrap;gap:.4rem;flex:1;min-width:0}.deadline-item{display:flex;align-items:center;gap:.4rem;padding:.25rem .6rem;border:1px solid var(--border);border-radius:6px;background:var(--bg);cursor:pointer;transition:all .15s;max-width:100%;min-width:0;font-family:inherit;font-size:inherit;color:inherit}.deadline-item:hover{border-color:var(--accent);box-shadow:0 1px 3px #0000000f}.deadline-item.urgent{border-color:#fca5a5;background:#fef2f2}.deadline-item.past{border-color:#fca5a5;background:#fef2f2;opacity:.7}.deadline-item.soon{border-color:#fed7aa;background:#fff7ed}.deadline-course{font-size:.65rem;font-weight:700;flex-shrink:0}.deadline-title{font-size:.75rem;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:180px;color:var(--text)}.deadline-time{font-size:.65rem;font-weight:600;white-space:nowrap;flex-shrink:0;color:var(--text-secondary)}.deadline-time.urgent{color:#dc2626}.deadline-time.past{color:#991b1b}.deadline-time.soon{color:#ea580c}@keyframes highlightFlash{0%{box-shadow:0 0 0 3px #a51c304d}to{box-shadow:0 0 #a51c3000}}.highlight-flash{animation:highlightFlash 1.5s ease-out}.app-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 0;margin-bottom:.5rem;border-bottom:1px solid var(--border)}.header-left{display:flex;align-items:center;gap:1rem}.app-header h1{font-size:1.5rem;font-weight:700;color:var(--accent)}.header-controls{display:flex;align-items:center;gap:.75rem}.week-toggle{display:flex;gap:4px}.week-toggle button{padding:4px 12px;border:1px solid var(--border);border-radius:6px;background:var(--card);cursor:pointer;font-size:.8rem;font-weight:500;color:var(--text-secondary);transition:all .15s}.week-toggle button:hover{border-color:var(--accent);color:var(--accent)}.week-toggle button.active{background:var(--accent);color:#fff;border-color:var(--accent)}.last-updated{font-size:.7rem;color:var(--text-secondary);white-space:nowrap}.refresh-btn{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:1px solid var(--border);border-radius:6px;background:var(--card);cursor:pointer;color:var(--text-secondary);transition:all .15s}.refresh-btn:hover{border-color:var(--accent);color:var(--accent)}.refresh-btn:active svg{transform:rotate(180deg);transition:transform .3s}.settings-btn{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:1px solid var(--border);border-radius:6px;background:var(--card);cursor:pointer;color:var(--text-secondary);transition:all .15s}.settings-btn:hover{border-color:var(--accent);color:var(--accent)}.settings-btn.has-key{color:var(--accent);border-color:var(--accent);background:var(--accent-light)}.settings-panel{padding:.75rem 1rem;background:var(--card);border:1px solid var(--border);border-radius:8px;margin-bottom:.75rem;animation:slideDown .15s ease-out}.settings-panel label{font-size:.8rem;font-weight:600;color:var(--text)}.settings-hint{font-size:.75rem;color:var(--text-secondary);margin:.25rem 0 .5rem}.settings-row{display:flex;gap:.5rem}.settings-row input{flex:1;padding:6px 10px;border:1px solid var(--border);border-radius:6px;font-size:.8rem;font-family:monospace;background:var(--bg);color:var(--text)}.settings-row input:focus{outline:none;border-color:var(--accent)}.save-btn,.clear-btn{padding:6px 14px;border:1px solid var(--border);border-radius:6px;font-size:.8rem;font-weight:500;cursor:pointer;transition:all .15s}.save-btn{background:var(--accent);color:#fff;border-color:var(--accent)}.save-btn:hover{opacity:.9}.clear-btn{background:var(--card);color:var(--text-secondary)}.clear-btn:hover{border-color:var(--accent);color:var(--accent)}.info-banner{font-size:.82rem;color:var(--text-secondary);background:#fffbeb;border:1px solid #fde68a;border-radius:8px;padding:.6rem 1rem;margin-bottom:.75rem}.info-banner button{background:none;border:none;color:var(--accent);font-weight:600;font-size:inherit;cursor:pointer;padding:0;text-decoration:underline}.course-filters{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:.75rem}.filter-chip{font-size:.75rem;font-weight:600;padding:4px 12px;border:1px solid var(--border);border-radius:16px;background:var(--card);color:var(--text-secondary);cursor:pointer;transition:all .15s;white-space:nowrap}.filter-chip:hover{border-color:var(--accent)}.filter-chip.active{border-color:currentColor}.filter-chip:not(.active){opacity:.5}.filter-chip-all{font-weight:700}.loading{text-align:center;padding:3rem;color:var(--text-secondary)}.error{text-align:center;padding:2rem;color:#dc2626;background:#fef2f2;border-radius:8px;margin:1rem 0}.courses-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 0;margin-bottom:.5rem;border-bottom:1px solid var(--border)}.courses-header-left{display:flex;align-items:center;gap:1rem}.courses-header h1{font-size:1.5rem;font-weight:700;color:var(--accent)}.back-link{display:flex;align-items:center;gap:4px;font-size:.8rem;color:var(--text-secondary);text-decoration:none;padding:4px 8px;border-radius:6px;transition:all .15s}.back-link:hover{color:var(--accent);background:var(--accent-light)}.courses-summary{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:.75rem}.summary-pill{display:inline-flex;align-items:center;gap:6px;font-size:.78rem;font-weight:600;padding:6px 14px;border-radius:20px;border:none;cursor:default}button.summary-pill{cursor:pointer}.todo-pill{background:#fff7ed;color:#c2410c;border:1px solid #fed7aa}.todo-pill.active{background:#c2410c;color:#fff;border-color:#c2410c}.missing-pill{background:#fef2f2;color:#dc2626;border:1px solid #fecaca}.filter-tabs{display:flex;gap:4px;margin-bottom:1rem;padding:3px;background:var(--tag-bg);border-radius:8px;width:fit-content}.filter-tabs button{display:flex;align-items:center;gap:6px;padding:6px 16px;border:none;border-radius:6px;background:transparent;font-size:.8rem;font-weight:500;color:var(--text-secondary);cursor:pointer;transition:all .15s}.filter-tabs button:hover{color:var(--text)}.filter-tabs button.active{background:var(--card);color:var(--text);box-shadow:0 1px 3px #00000014}.tab-badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:#c2410c;color:#fff;font-size:.65rem;font-weight:700}.course-list{display:flex;flex-direction:column;gap:8px}.course-card{border:1px solid var(--border);border-left:3px solid;border-radius:8px;background:var(--card);transition:box-shadow .15s;overflow:hidden}.course-card:hover{box-shadow:0 2px 8px #0000000f}.course-card.expanded{box-shadow:0 2px 12px #00000014}.course-card-header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:12px 14px;border:none;background:none;cursor:default;text-align:left;font:inherit;color:inherit}.course-badge-link{text-decoration:none;transition:opacity .15s}.course-badge-link:hover{opacity:.8;text-decoration:underline}.chevron-btn{font-size:.7rem;color:var(--text-secondary);transition:transform .15s;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border:1px solid var(--border);border-radius:6px;background:none;cursor:pointer}.chevron-btn:hover{border-color:var(--accent);color:var(--accent)}.chevron-btn.open{transform:rotate(180deg)}.course-card-left{display:flex;align-items:center;gap:10px;min-width:0}.course-badge{font-size:.72rem;font-weight:700;padding:3px 10px;border-radius:4px;white-space:nowrap;letter-spacing:.02em}.course-full-name{font-size:.88rem;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.course-card-right{display:flex;align-items:center;gap:8px;flex-shrink:0}.course-todo-badge{font-size:.7rem;font-weight:600;padding:2px 8px;border-radius:10px;background:#fff7ed;color:#c2410c}.course-missing-badge{font-size:.7rem;font-weight:600;padding:2px 8px;border-radius:10px;background:#fef2f2;color:#dc2626}.chevron{font-size:.7rem;color:var(--text-secondary);transition:transform .15s;display:inline-block}.course-assignments{border-top:1px solid var(--border);animation:slideDown .15s ease-out}.assignments-loading{padding:16px}.no-assignments{padding:20px 16px;text-align:center;font-size:.82rem;color:var(--text-secondary)}.assignment-row{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid #f5f5f5;transition:background .1s}.assignment-row:last-child{border-bottom:none}.assignment-row:hover{background:#fafafa}.assignment-row.past{opacity:.55}.assignment-row.missing{background:#fff5f5}.assignment-row.missing:hover{background:#fef2f2}.assignment-row-left{display:flex;align-items:flex-start;gap:10px;min-width:0;flex:1}.assignment-type-icon{flex-shrink:0;margin-top:2px}.assignment-info{display:flex;flex-direction:column;gap:2px;min-width:0}.assignment-name{font-size:.82rem;font-weight:500;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.assignment-meta{font-size:.72rem;color:var(--text-secondary)}.assignment-points{color:var(--text-secondary)}.assignment-row-right{display:flex;align-items:center;gap:6px;flex-shrink:0;margin-left:8px}.assignment-missing-badge{font-size:.68rem;font-weight:600;padding:2px 8px;border-radius:10px;background:#dc2626;color:#fff}.assignment-status{font-size:.68rem;font-weight:600;padding:2px 8px;border-radius:10px}.assignment-status.submitted{background:#dbeafe;color:#1d4ed8}.assignment-status.graded{background:#dcfce7;color:#15803d}.assignment-status.excused{background:var(--tag-bg);color:var(--text-secondary)}.courses-page .loading{text-align:center;padding:3rem;color:var(--text-secondary)}.courses-page .error{text-align:center;padding:2rem;color:#dc2626;background:#fef2f2;border-radius:8px;margin:1rem 0}@media(max-width:600px){.course-full-name{display:none}.course-badge{font-size:.78rem}.assignment-name{max-width:200px}.filter-tabs{width:100%}.filter-tabs button{flex:1;justify-content:center}}.activity-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 0;margin-bottom:.5rem;border-bottom:1px solid var(--border)}.activity-header-left{display:flex;align-items:center;gap:1rem}.activity-header h1{font-size:1.5rem;font-weight:700;color:var(--accent)}.unread-badge{font-size:.7rem;font-weight:700;padding:3px 10px;border-radius:12px;background:var(--accent);color:#fff}.activity-controls{display:flex;flex-direction:column;gap:.75rem;margin-bottom:1rem}.activity-page .filter-tabs{display:flex;gap:4px;padding:3px;background:var(--tag-bg);border-radius:8px;width:fit-content}.activity-page .filter-tabs button{display:flex;align-items:center;gap:6px;padding:6px 16px;border:none;border-radius:6px;background:transparent;font-size:.8rem;font-weight:500;color:var(--text-secondary);cursor:pointer;transition:all .15s}.activity-page .filter-tabs button:hover{color:var(--text)}.activity-page .filter-tabs button.active{background:var(--card);color:var(--text);box-shadow:0 1px 3px #00000014}.activity-page .tab-badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:var(--accent);color:#fff;font-size:.65rem;font-weight:700}.course-filter-chips{display:flex;flex-wrap:wrap;gap:6px}.course-chip{font-size:.75rem;font-weight:600;padding:4px 12px;border:1px solid var(--border);border-radius:16px;background:var(--card);color:var(--text-secondary);cursor:pointer;transition:all .15s;white-space:nowrap}.course-chip:hover{border-color:var(--accent)}.course-chip.active{border-color:currentColor}.course-chip:not(.active){opacity:.55}.activity-group{margin-bottom:1.25rem}.activity-date-header{font-size:.75rem;font-weight:700;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em;padding:0 2px;margin-bottom:.5rem}.activity-list{display:flex;flex-direction:column;gap:6px}.activity-item{display:flex;flex-direction:column;width:100%;padding:12px 14px;border:1px solid var(--border);border-radius:8px;background:var(--card);cursor:pointer;text-align:left;font:inherit;color:inherit;transition:all .15s}.activity-item:hover{box-shadow:0 2px 8px #0000000f}.activity-item.unread{border-left:3px solid var(--accent);background:#fefefe}.activity-item.expanded{box-shadow:0 2px 12px #00000014}.activity-item-top{display:flex;align-items:center;justify-content:space-between;gap:8px}.activity-item-left{display:flex;align-items:center;gap:8px;min-width:0;flex:1}.unread-dot{width:7px;height:7px;border-radius:50%;background:var(--accent);flex-shrink:0}.activity-course-tag{font-size:.68rem;font-weight:700;padding:2px 8px;border-radius:4px;white-space:nowrap;letter-spacing:.02em;flex-shrink:0}.activity-type-icon{flex-shrink:0;display:flex;align-items:center}.activity-title{font-size:.84rem;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.activity-item.unread .activity-title{font-weight:600}.activity-item-right{display:flex;align-items:center;gap:8px;flex-shrink:0}.activity-time{font-size:.7rem;color:var(--text-secondary);white-space:nowrap}.activity-chevron{font-size:.65rem;color:var(--text-secondary);transition:transform .15s;display:inline-block}.activity-chevron.open{transform:rotate(180deg)}.activity-preview{font-size:.76rem;color:var(--text-secondary);margin-top:6px;padding-left:0;line-height:1.4}.activity-detail{margin-top:10px;padding-top:10px;border-top:1px solid var(--border);animation:slideDown .15s ease-out}.activity-message{font-size:.82rem;line-height:1.6;color:var(--text);word-break:break-word}.activity-message p{margin-bottom:.5em}.activity-message a{color:var(--accent);text-decoration:underline}.activity-message img{max-width:100%;height:auto;border-radius:4px}.activity-message ul,.activity-message ol{padding-left:1.5em;margin-bottom:.5em}.activity-canvas-link{display:inline-flex;align-items:center;gap:4px;font-size:.78rem;font-weight:500;color:var(--accent);text-decoration:none;padding:6px 12px;border-radius:6px;border:1px solid var(--accent);background:var(--accent-light);margin-top:10px;transition:all .15s}.activity-canvas-link:hover{background:var(--accent);color:#fff}.empty-state{display:flex;flex-direction:column;align-items:center;gap:12px;padding:3rem;color:var(--text-secondary);text-align:center}.empty-state svg{opacity:.3}.empty-state p{font-size:.88rem}.activity-page .loading{text-align:center;padding:3rem;color:var(--text-secondary)}.activity-page .error{text-align:center;padding:2rem;color:#dc2626;background:#fef2f2;border-radius:8px;margin:1rem 0}@media(max-width:600px){.activity-item-left{flex-wrap:wrap;gap:4px}.activity-title{width:100%;margin-top:2px}.activity-page .filter-tabs{width:100%}.activity-page .filter-tabs button{flex:1;justify-content:center}.activity-preview{display:none}}.grades-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 0;margin-bottom:.5rem;border-bottom:1px solid var(--border)}.grades-header-left{display:flex;align-items:center;gap:1rem}.grades-header h1{font-size:1.5rem;font-weight:700;color:var(--accent)}.grades-overview{display:flex;gap:12px;margin-bottom:1.25rem}.overview-card{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:16px 12px;background:var(--card);border:1px solid var(--border);border-radius:10px}.overview-label{font-size:.7rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.overview-score{font-size:1.6rem;font-weight:700;line-height:1.2}.overview-count{color:var(--text)}.overview-grade{font-size:.85rem;font-weight:700}.grades-list{display:flex;flex-direction:column;gap:8px}.grade-card{border:1px solid var(--border);border-left:3px solid;border-radius:8px;background:var(--card);transition:box-shadow .15s;overflow:hidden}.grade-card:hover{box-shadow:0 2px 8px #0000000f}.grade-card.expanded{box-shadow:0 2px 12px #00000014}.grade-card-header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:12px 14px;border:none;background:none;cursor:pointer;text-align:left;font:inherit;color:inherit}.grade-card-left{display:flex;align-items:center;gap:10px;min-width:0}.grade-course-badge{font-size:.72rem;font-weight:700;padding:3px 10px;border-radius:4px;white-space:nowrap;letter-spacing:.02em}.grade-course-info{display:flex;flex-direction:column;gap:1px;min-width:0}.grade-course-name{font-size:.88rem;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.grade-final-note{font-size:.7rem;color:var(--text-secondary)}.grade-card-right{display:flex;align-items:center;gap:12px;flex-shrink:0}.grade-score-group{display:flex;flex-direction:column;align-items:flex-end;gap:0}.grade-score{font-size:1.1rem;font-weight:700;line-height:1.2}.grade-letter{font-size:.7rem;font-weight:700;text-transform:uppercase}.grade-bar-container{width:60px;height:6px;background:#f0f0f0;border-radius:3px;overflow:hidden}.grade-bar{height:100%;border-radius:3px;transition:width .5s ease-out}.grade-no-score{font-size:.78rem;color:var(--text-secondary);font-style:italic}.grade-card .chevron{font-size:.7rem;color:var(--text-secondary);transition:transform .15s;display:inline-block}.grade-card .chevron.open{transform:rotate(180deg)}.grade-assignments{border-top:1px solid var(--border);animation:gradeSlideDown .15s ease-out}@keyframes gradeSlideDown{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.grade-assignments .assignments-loading{padding:16px}.grade-assignments .skeleton-line{height:12px;border-radius:4px;background:linear-gradient(90deg,#f0f0f0 25%,#e0e0e0,#f0f0f0 75%);background-size:200% 100%;animation:gradeShimmer 1.5s infinite;margin-bottom:10px}.grade-assignments .skeleton-line.full{width:100%}.grade-assignments .skeleton-line.medium{width:60%}@keyframes gradeShimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.grade-assignments .no-assignments{padding:20px 16px;text-align:center;font-size:.82rem;color:var(--text-secondary)}.assignments-table{width:100%;border-collapse:collapse;font-size:.8rem}.assignments-table thead{background:#fafafa;border-bottom:1px solid var(--border)}.assignments-table th{padding:8px 12px;text-align:left;font-size:.68rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--text-secondary)}.assignments-table td{padding:8px 12px;border-bottom:1px solid #f5f5f5;vertical-align:middle}.assignments-table tbody tr:last-child td{border-bottom:none}.assignments-table tbody tr:hover{background:#fafafa}.at-name{min-width:0;max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500;color:var(--text)}.at-date{white-space:nowrap;color:var(--text-secondary);font-size:.75rem}.at-score{white-space:nowrap}.at-score .score-total{color:var(--text-secondary);font-size:.72rem}.at-pct{white-space:nowrap;text-align:right;font-size:.78rem}.at-status{text-align:right}.score-excused{font-size:.72rem;font-weight:600;color:var(--text-secondary)}.score-pending{color:var(--text-secondary)}.grade-assignments .assignment-status{font-size:.65rem;font-weight:600;padding:2px 7px;border-radius:10px}.grade-assignments .assignment-status.submitted{background:#dbeafe;color:#1d4ed8}.grade-assignments .assignment-status.graded{background:#dcfce7;color:#15803d}.grade-assignments .assignment-status.excused{background:var(--tag-bg);color:var(--text-secondary)}.grade-assignments .assignment-status.pending{background:#fef3c7;color:#92400e}.grades-page .empty-state{display:flex;flex-direction:column;align-items:center;gap:12px;padding:4rem 2rem;color:var(--text-secondary);text-align:center}.grades-page .empty-state p{font-size:.9rem}.grades-page .loading{text-align:center;padding:3rem;color:var(--text-secondary)}.grades-page .error{text-align:center;padding:2rem;color:#dc2626;background:#fef2f2;border-radius:8px;margin:1rem 0}@media(max-width:600px){.grades-overview{gap:8px}.overview-card{padding:12px 8px}.overview-score{font-size:1.3rem}.grade-course-name{display:none}.grade-course-badge{font-size:.78rem}.grade-bar-container,.assignments-table th.at-date,.assignments-table td.at-date{display:none}.at-name{max-width:150px}}.case-page{padding:1rem 0}.case-nav{margin-bottom:1.5rem}.back-link{display:inline-flex;align-items:center;gap:.4rem;color:var(--accent);text-decoration:none;font-size:.85rem;font-weight:500}.back-link:hover{text-decoration:underline}.case-loading{padding:2rem 0}.case-loading .skeleton{gap:.75rem}.case-error{text-align:center;padding:3rem 1rem}.case-error h2{font-size:1.2rem;margin-bottom:.5rem}.case-error p{font-size:.9rem;color:var(--text-secondary)}.case-error-hint{margin-top:.75rem;font-size:.8rem!important;color:var(--text-secondary)}.case-header{border-left:4px solid;padding-left:1rem;margin-bottom:2rem}.case-course-tag{display:inline-block;font-size:.7rem;font-weight:600;padding:2px 8px;border-radius:4px;margin-bottom:.5rem}.case-title{font-size:1.4rem;font-weight:700;line-height:1.3;margin-bottom:.25rem}.case-subtitle{font-size:.95rem;color:var(--text-secondary);margin-bottom:.25rem}.case-meta{font-size:.75rem;color:var(--text-secondary);margin-top:.5rem}.case-section{background:var(--card);border:1px solid var(--border);border-radius:8px;padding:1.25rem;margin-bottom:1rem}.case-section h2{font-size:.8rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text-secondary);margin-bottom:1rem}.summary-block{margin-bottom:1rem}.summary-block:last-child{margin-bottom:0}.summary-block h3{font-size:.95rem;font-weight:600;margin-bottom:.3rem}.summary-block p{font-size:.9rem;line-height:1.7;color:var(--text)}.questions-list{display:flex;flex-direction:column;gap:.75rem}.question-card{display:flex;gap:.75rem;align-items:flex-start}.question-number{width:24px;height:24px;border-radius:50%;background:var(--accent);color:#fff;font-size:.7rem;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px}.question-content{flex:1;min-width:0}.question-text{font-size:.9rem;line-height:1.6}.question-guidance{margin-top:.4rem}.question-guidance summary{font-size:.8rem;color:var(--accent);cursor:pointer;font-weight:500}.question-guidance p{font-size:.85rem;line-height:1.6;color:var(--text-secondary);margin-top:.3rem;padding-left:.5rem;border-left:2px solid var(--border)}.takeaways-list{list-style:none;padding:0;display:flex;flex-direction:column;gap:.5rem}.takeaways-list li{font-size:.9rem;line-height:1.6;padding-left:1.25rem;position:relative}.takeaways-list li:before{content:"";position:absolute;left:0;top:.55em;width:6px;height:6px;border-radius:50%;background:var(--accent)}.case-section .materials-list{list-style:none;padding:0}.case-section .materials-list li{padding:.25rem 0}.case-section .materials-list a{color:var(--accent);text-decoration:none;font-size:.85rem;font-weight:500}.case-section .materials-list a:hover{text-decoration:underline}.files-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 0;margin-bottom:.5rem;border-bottom:1px solid var(--border)}.files-header-left{display:flex;align-items:center;gap:1rem}.files-header h1{font-size:1.5rem;font-weight:700;color:var(--accent)}.files-count-badge{font-size:.72rem;font-weight:600;padding:3px 10px;border-radius:10px;background:var(--tag-bg);color:var(--text-secondary)}.files-search{position:relative;margin-bottom:1rem}.search-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--text-secondary);pointer-events:none}.search-input{width:100%;padding:10px 36px 10px 38px;border:1px solid var(--border);border-radius:8px;font-size:.85rem;background:var(--card);color:var(--text);transition:border-color .15s}.search-input:focus{outline:none;border-color:var(--accent)}.search-input::placeholder{color:#aaa}.search-clear{position:absolute;right:8px;top:50%;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:6px;background:transparent;color:var(--text-secondary);cursor:pointer;transition:all .15s}.search-clear:hover{background:var(--tag-bg);color:var(--text)}.files-course-list{display:flex;flex-direction:column;gap:8px}.files-course-card{border:1px solid var(--border);border-left:3px solid;border-radius:8px;background:var(--card);transition:box-shadow .15s;overflow:hidden}.files-course-card:hover{box-shadow:0 2px 8px #0000000f}.files-course-card.expanded{box-shadow:0 2px 12px #00000014}.files-course-header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:12px 14px;border:none;background:none;cursor:pointer;text-align:left;font:inherit;color:inherit}.files-course-left{display:flex;align-items:center;gap:10px;min-width:0}.files-course-right{display:flex;align-items:center;gap:8px;flex-shrink:0}.file-count-pill{font-size:.7rem;font-weight:600;padding:2px 8px;border-radius:10px;background:var(--tag-bg);color:var(--text-secondary)}.files-course-body{border-top:1px solid var(--border);animation:slideDown .15s ease-out}.no-files{padding:20px 16px;text-align:center;font-size:.82rem;color:var(--text-secondary)}.folder-group{border-bottom:1px solid #f5f5f5}.folder-group:last-child{border-bottom:none}.folder-header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:8px 14px;border:none;background:#fafafa;cursor:pointer;font:inherit;color:inherit;transition:background .1s}.folder-header:hover{background:#f5f5f5}.folder-left{display:flex;align-items:center;gap:6px}.folder-chevron{font-size:.6rem;color:var(--text-secondary);transition:transform .15s;display:inline-block;width:12px}.folder-chevron.open{transform:rotate(180deg)}.folder-icon{color:#d97706}.folder-name{font-size:.8rem;font-weight:600;color:var(--text)}.folder-count{font-size:.7rem;color:var(--text-secondary)}.folder-contents{animation:slideDown .15s ease-out}.file-row{display:flex;align-items:center;justify-content:space-between;padding:8px 14px 8px 32px;border-bottom:1px solid #f9f9f9;text-decoration:none;color:inherit;transition:background .1s}.file-row:last-child{border-bottom:none}.file-row:hover{background:#f8f9ff}.file-row-left{display:flex;align-items:center;gap:10px;min-width:0;flex:1}.file-type-icon{flex-shrink:0}.file-info{display:flex;flex-direction:column;gap:1px;min-width:0}.file-name{font-size:.82rem;font-weight:500;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-meta{font-size:.7rem;color:var(--text-secondary)}.file-row-right{display:flex;align-items:center;gap:8px;flex-shrink:0;margin-left:8px}.file-ext-badge{font-size:.6rem;font-weight:700;padding:2px 6px;border-radius:4px;letter-spacing:.03em}.ext-pdf{background:#fef2f2;color:#dc2626}.ext-slides{background:#fff7ed;color:#ea580c}.ext-spreadsheet{background:#ecfdf5;color:#059669}.ext-doc{background:#eff6ff;color:#2563eb}.ext-image{background:#faf5ff;color:#7c3aed}.ext-video{background:#fdf4ff;color:#c026d3}.ext-archive{background:#f5f5f4;color:#78716c}.ext-other{background:var(--tag-bg);color:var(--text-secondary)}.download-icon{color:var(--text-secondary);opacity:0;transition:opacity .15s}.file-row:hover .download-icon{opacity:1}.files-page .back-link{display:flex;align-items:center;gap:4px;font-size:.8rem;color:var(--text-secondary);text-decoration:none;padding:4px 8px;border-radius:6px;transition:all .15s}.files-page .back-link:hover{color:var(--accent);background:var(--accent-light)}.files-page .course-badge{font-size:.72rem;font-weight:700;padding:3px 10px;border-radius:4px;white-space:nowrap;letter-spacing:.02em}.files-page .course-full-name{font-size:.88rem;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.files-page .chevron{font-size:.7rem;color:var(--text-secondary);transition:transform .15s;display:inline-block}.files-page .chevron.open{transform:rotate(180deg)}.files-page .loading{text-align:center;padding:3rem;color:var(--text-secondary)}.files-page .error{text-align:center;padding:2rem;color:#dc2626;background:#fef2f2;border-radius:8px;margin:1rem 0}.files-page .assignments-loading{padding:16px}.files-page .skeleton-line{height:12px;border-radius:4px;background:linear-gradient(90deg,#f0f0f0 25%,#e0e0e0,#f0f0f0 75%);background-size:200% 100%;animation:shimmer 1.5s infinite;margin-bottom:10px}.files-page .skeleton-line.full{width:100%}.files-page .skeleton-line.medium{width:60%}@media(max-width:600px){.files-page .course-full-name{display:none}.file-name{max-width:200px}.file-row{padding-left:20px}.file-ext-badge{display:none}}.pages-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 0;margin-bottom:.5rem;border-bottom:1px solid var(--border)}.pages-header-left{display:flex;align-items:center;gap:1rem}.pages-header h1{font-size:1.5rem;font-weight:700;color:var(--accent)}.pages-search{position:relative;margin-bottom:.75rem}.pages-search .search-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--text-secondary);pointer-events:none}.pages-search .search-input{width:100%;padding:10px 36px 10px 38px;border:1px solid var(--border);border-radius:8px;font-size:.85rem;font-family:inherit;background:var(--card);color:var(--text);outline:none;transition:border-color .15s}.pages-search .search-input:focus{border-color:var(--accent)}.pages-search .search-input::placeholder{color:var(--text-secondary)}.pages-search .search-clear{position:absolute;right:8px;top:50%;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;width:24px;height:24px;border:none;background:none;cursor:pointer;color:var(--text-secondary);border-radius:4px}.pages-search .search-clear:hover{color:var(--text);background:var(--tag-bg)}.pages-summary{margin-bottom:.75rem}.summary-stat{font-size:.78rem;color:var(--text-secondary)}.pages-course-list{display:flex;flex-direction:column;gap:8px}.pages-course-card{border:1px solid var(--border);border-left:3px solid;border-radius:8px;background:var(--card);transition:box-shadow .15s;overflow:hidden}.pages-course-card:hover{box-shadow:0 2px 8px #0000000f}.pages-course-card.expanded{box-shadow:0 2px 12px #00000014}.pages-course-header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:12px 14px;border:none;background:none;cursor:pointer;text-align:left;font:inherit;color:inherit}.pages-course-left{display:flex;align-items:center;gap:10px;min-width:0}.pages-course-badge{font-size:.72rem;font-weight:700;padding:3px 10px;border-radius:4px;white-space:nowrap;letter-spacing:.02em}.pages-course-name{font-size:.88rem;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pages-course-right{display:flex;align-items:center;gap:8px;flex-shrink:0}.pages-count-badge{font-size:.7rem;font-weight:600;padding:2px 8px;border-radius:10px;background:var(--tag-bg);color:var(--text-secondary)}.pages-course-card .chevron{font-size:.7rem;color:var(--text-secondary);transition:transform .15s;display:inline-block}.pages-course-card .chevron.open{transform:rotate(180deg)}.pages-list{border-top:1px solid var(--border);animation:pagesSlideDown .15s ease-out}@keyframes pagesSlideDown{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.pages-loading{padding:16px}.pages-loading .skeleton-line{height:12px;border-radius:4px;background:linear-gradient(90deg,#f0f0f0 25%,#e0e0e0,#f0f0f0 75%);background-size:200% 100%;animation:pagesShimmer 1.5s infinite;margin-bottom:10px}.pages-loading .skeleton-line.full{width:100%}.pages-loading .skeleton-line.medium{width:60%}@keyframes pagesShimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.no-pages{padding:20px 16px;text-align:center;font-size:.82rem;color:var(--text-secondary)}.page-item{border-bottom:1px solid #f5f5f5}.page-item:last-child{border-bottom:none}.page-item-header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:10px 14px;border:none;background:none;cursor:pointer;text-align:left;font:inherit;color:inherit;transition:background .1s}.page-item-header:hover,.page-item.expanded .page-item-header{background:#fafafa}.page-item-left{display:flex;align-items:flex-start;gap:10px;min-width:0;flex:1}.page-icon{flex-shrink:0;margin-top:1px}.page-item-info{display:flex;flex-direction:column;gap:2px;min-width:0}.page-title{font-size:.84rem;font-weight:500;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.page-meta{font-size:.7rem;color:var(--text-secondary)}.page-chevron{font-size:.65rem;color:var(--text-secondary);transition:transform .15s;display:inline-block;flex-shrink:0;margin-left:8px}.page-chevron.open{transform:rotate(180deg)}.page-body{padding:16px 20px 20px 40px;border-top:1px solid #f0f0f0;animation:pageBodyFadeIn .15s ease-out}@keyframes pageBodyFadeIn{0%{opacity:0}to{opacity:1}}.page-content{font-size:.85rem;line-height:1.65;color:var(--text);word-wrap:break-word;overflow-wrap:break-word}.page-content h1,.page-content h2,.page-content h3,.page-content h4{margin-top:1em;margin-bottom:.5em;font-weight:600;line-height:1.3}.page-content h1{font-size:1.2rem}.page-content h2{font-size:1.1rem}.page-content h3{font-size:1rem}.page-content h4{font-size:.9rem}.page-content p{margin-bottom:.75em}.page-content a{color:var(--accent);text-decoration:none}.page-content a:hover{text-decoration:underline}.page-content ul,.page-content ol{padding-left:1.5em;margin-bottom:.75em}.page-content li{margin-bottom:.3em}.page-content table{border-collapse:collapse;width:100%;margin-bottom:1em;font-size:.82rem}.page-content table th,.page-content table td{border:1px solid var(--border);padding:6px 10px;text-align:left}.page-content table th{background:var(--tag-bg);font-weight:600}.page-content img{max-width:100%;height:auto;border-radius:4px}.page-content blockquote{border-left:3px solid var(--border);padding-left:12px;margin:.75em 0;color:var(--text-secondary)}.page-content pre,.page-content code{background:var(--tag-bg);border-radius:4px;font-size:.82rem}.page-content pre{padding:10px 14px;overflow-x:auto;margin-bottom:.75em}.page-content code{padding:1px 5px}.page-empty{font-size:.82rem;color:var(--text-secondary);font-style:italic}.pages-page .loading{text-align:center;padding:3rem;color:var(--text-secondary)}.pages-page .error{text-align:center;padding:2rem;color:#dc2626;background:#fef2f2;border-radius:8px;margin:1rem 0}@media(max-width:600px){.pages-course-name{display:none}.pages-course-badge{font-size:.78rem}.page-title{max-width:220px}.page-body{padding-left:16px}}.modules-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 0;margin-bottom:.5rem;border-bottom:1px solid var(--border)}.modules-header-left{display:flex;align-items:center;gap:1rem}.modules-header h1{font-size:1.5rem;font-weight:700;color:var(--accent)}.modules-course-list{display:flex;flex-direction:column;gap:8px}.modules-course-card{border:1px solid var(--border);border-left:3px solid;border-radius:8px;background:var(--card);transition:box-shadow .15s;overflow:hidden}.modules-course-card:hover{box-shadow:0 2px 8px #0000000f}.modules-course-card.expanded{box-shadow:0 2px 12px #00000014}.modules-course-header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:12px 14px;border:none;background:none;cursor:pointer;text-align:left;font:inherit;color:inherit}.modules-course-left{display:flex;align-items:center;gap:10px;min-width:0}.modules-course-right{display:flex;align-items:center;gap:8px;flex-shrink:0}.module-count{font-size:.72rem;color:var(--text-secondary)}.modules-content{border-top:1px solid var(--border);padding:8px;display:flex;flex-direction:column;gap:6px;animation:slideDown .15s ease-out}.modules-loading{padding:16px 8px}.no-modules{padding:20px 16px;text-align:center;font-size:.82rem;color:var(--text-secondary)}.module-card{border:1px solid var(--border);border-radius:6px;background:var(--bg);overflow:hidden}.module-card.expanded{background:var(--card)}.module-card.locked{opacity:.6}.module-header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:10px 12px;border:none;background:none;cursor:pointer;text-align:left;font:inherit;color:inherit;gap:8px}.module-header:disabled{cursor:default}.module-header-left{display:flex;align-items:center;gap:8px;min-width:0;flex:1}.module-chevron{font-size:.65rem;color:var(--text-secondary);transition:transform .15s;display:inline-block;flex-shrink:0}.module-chevron.open{transform:rotate(180deg)}.module-title-group{display:flex;align-items:center;gap:8px;min-width:0}.module-name{font-size:.84rem;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.module-state{font-size:.65rem;font-weight:600;padding:2px 8px;border-radius:10px;white-space:nowrap;flex-shrink:0}.module-state.state-completed{background:#dcfce7;color:#15803d}.module-state.state-locked{background:var(--tag-bg);color:var(--text-secondary)}.module-state.state-started{background:#dbeafe;color:#1d4ed8}.module-header-right{display:flex;align-items:center;gap:10px;flex-shrink:0}.module-progress{display:flex;align-items:center;gap:6px}.module-progress-bar{width:48px;height:4px;background:var(--border);border-radius:2px;overflow:hidden}.module-progress-fill{height:100%;border-radius:2px;transition:width .3s ease}.module-progress-text{font-size:.68rem;color:var(--text-secondary);font-weight:500;white-space:nowrap}.module-item-count{font-size:.68rem;color:var(--text-secondary);white-space:nowrap}.module-items{border-top:1px solid var(--border);animation:slideDown .15s ease-out}.module-item{display:flex;align-items:center;justify-content:space-between;padding:8px 12px 8px 20px;border-bottom:1px solid #f5f5f5;transition:background .1s;text-decoration:none;color:inherit}.module-item:last-child{border-bottom:none}a.module-item:hover{background:#fafafa}.module-item.locked{opacity:.5}.module-item-left{display:flex;align-items:center;gap:8px;min-width:0;flex:1}.module-item-type-icon{flex-shrink:0;display:flex;align-items:center}.module-item-info{display:flex;flex-direction:column;gap:1px;min-width:0}.module-item-title{font-size:.8rem;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}a.module-item:hover .module-item-title{color:var(--accent)}.module-item-meta{display:flex;align-items:center;gap:8px;font-size:.68rem;color:var(--text-secondary)}.module-item-type-label{font-weight:500}.module-item-due{color:#d97706;font-weight:500}.module-item-points{color:var(--text-secondary)}.module-item-locked{flex-shrink:0;color:var(--text-secondary);display:flex;align-items:center}.module-subheader{font-size:.74rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--text-secondary);padding:10px 12px 4px 20px;border-bottom:1px solid #f5f5f5}.completion-icon{flex-shrink:0}.completion-req{display:inline-flex;align-items:center}.skeleton-line{height:12px;border-radius:4px;background:linear-gradient(90deg,#f0f0f0 25%,#e0e0e0,#f0f0f0 75%);background-size:200% 100%;animation:shimmer 1.5s infinite;margin-bottom:10px}.skeleton-line.full{width:100%}.skeleton-line.medium{width:60%}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.modules-page .loading{text-align:center;padding:3rem;color:var(--text-secondary)}.modules-page .error{text-align:center;padding:2rem;color:#dc2626;background:#fef2f2;border-radius:8px;margin:1rem 0}@media(max-width:600px){.course-full-name{display:none}.module-name{font-size:.78rem}.module-progress-bar{width:32px}.module-item-title{max-width:200px}.module-title-group{flex-wrap:wrap}}.inbox-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 0;margin-bottom:.5rem;border-bottom:1px solid var(--border)}.inbox-header-left{display:flex;align-items:center;gap:1rem}.inbox-header h1{font-size:1.5rem;font-weight:700;color:var(--accent)}.inbox-header-right{display:flex;align-items:center;gap:.5rem}.inbox-unread-badge{font-size:.72rem;font-weight:700;padding:3px 10px;border-radius:12px;background:var(--accent);color:#fff}.compose-btn{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border:none;border-radius:8px;background:var(--accent);color:#fff;font-size:.82rem;font-weight:600;cursor:pointer;transition:all .15s}.compose-btn:hover{filter:brightness(1.1);transform:translateY(-1px)}.compose-btn-empty{padding:10px 24px;border:1px solid var(--accent);border-radius:8px;background:transparent;color:var(--accent);font-size:.85rem;font-weight:600;cursor:pointer;transition:all .15s}.compose-btn-empty:hover{background:var(--accent);color:#fff}.inbox-controls{margin-bottom:1rem}.inbox-tabs{display:flex;gap:4px;margin-bottom:.75rem;padding:3px;background:var(--tag-bg);border-radius:8px;width:fit-content}.inbox-tabs button{display:flex;align-items:center;gap:6px;padding:6px 14px;border:none;border-radius:6px;background:transparent;font-size:.8rem;font-weight:500;color:var(--text-secondary);cursor:pointer;transition:all .15s}.inbox-tabs button:hover{color:var(--text)}.inbox-tabs button.active{background:var(--card);color:var(--text);box-shadow:0 1px 3px #00000014}.inbox-tabs .tab-badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:var(--accent);color:#fff;font-size:.65rem;font-weight:700}.inbox-search-bar{position:relative}.inbox-search-bar .search-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--text-secondary);pointer-events:none}.inbox-search-input{width:100%;padding:9px 36px;border:1px solid var(--border);border-radius:8px;font-size:.84rem;background:var(--card);color:var(--text);transition:border-color .15s}.inbox-search-input:focus{outline:none;border-color:var(--accent)}.inbox-search-input::placeholder{color:#aaa}.inbox-search-bar .search-clear{position:absolute;right:8px;top:50%;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;width:24px;height:24px;border:none;border-radius:4px;background:transparent;color:var(--text-secondary);cursor:pointer}.inbox-search-bar .search-clear:hover{background:var(--tag-bg);color:var(--text)}.inbox-empty{display:flex;flex-direction:column;align-items:center;gap:12px;padding:4rem 2rem;color:var(--text-secondary);text-align:center}.inbox-empty p{font-size:.9rem}.inbox-list{display:flex;flex-direction:column}.inbox-item{border-bottom:1px solid var(--border);transition:background .1s}.inbox-item:last-child{border-bottom:none}.inbox-item.unread{background:#fef8f8}.inbox-item:hover{background:#fafafa}.inbox-item.unread:hover{background:#fef2f2}.inbox-item.expanded{background:var(--card);box-shadow:0 1px 8px #0000000f;border-radius:8px;margin:4px 0;border-bottom:none;border:1px solid var(--border)}.inbox-item-header{display:flex;align-items:flex-start;gap:12px;width:100%;padding:12px 8px;border:none;background:none;cursor:pointer;text-align:left;font:inherit;color:inherit}.inbox-item-avatar{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;overflow:hidden}.avatar-img{width:100%;height:100%;object-fit:cover;border-radius:50%}.avatar-initials{font-size:.75rem;font-weight:700}.inbox-item-content{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.inbox-item-top-row{display:flex;align-items:center;justify-content:space-between;gap:8px}.inbox-item-left-group{display:flex;align-items:center;gap:6px;min-width:0}.unread-dot{width:8px;height:8px;border-radius:50%;background:var(--accent);flex-shrink:0}.inbox-participants{font-size:.82rem;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.inbox-participants.bold{font-weight:600}.inbox-msg-count{font-size:.7rem;color:var(--text-secondary);flex-shrink:0}.inbox-time{font-size:.7rem;color:var(--text-secondary);white-space:nowrap;flex-shrink:0}.inbox-subject-row{display:flex;align-items:center;gap:4px}.inbox-star{color:#d97706;font-size:.82rem;flex-shrink:0}.inbox-subject{font-size:.8rem;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.inbox-subject.bold{font-weight:600}.inbox-preview{font-size:.75rem;color:var(--text-secondary);line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.inbox-context{display:inline-block;font-size:.68rem;color:var(--text-secondary);background:var(--tag-bg);padding:1px 8px;border-radius:4px;margin-top:2px;width:fit-content}.inbox-chevron{font-size:.7rem;color:var(--text-secondary);transition:transform .15s;display:inline-block;flex-shrink:0;margin-top:4px}.inbox-chevron.open{transform:rotate(180deg)}.inbox-detail{border-top:1px solid var(--border);animation:inboxSlideDown .15s ease-out}@keyframes inboxSlideDown{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.inbox-detail-loading{padding:16px}.inbox-detail-loading .skeleton-line{height:12px;border-radius:4px;background:linear-gradient(90deg,#f0f0f0 25%,#e0e0e0,#f0f0f0 75%);background-size:200% 100%;animation:inboxShimmer 1.5s infinite;margin-bottom:10px}.inbox-detail-loading .skeleton-line.full{width:100%}.inbox-detail-loading .skeleton-line.medium{width:60%}@keyframes inboxShimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.inbox-detail-error{padding:16px;font-size:.82rem;color:#dc2626;text-align:center}.inbox-messages{display:flex;flex-direction:column}.inbox-message{padding:14px 16px;border-bottom:1px solid #f3f3f3}.inbox-message:last-child{border-bottom:none}.message-header{display:flex;align-items:center;gap:10px;margin-bottom:8px}.message-avatar-small{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:.6rem;font-weight:700}.message-meta{display:flex;flex-direction:column;gap:0}.message-author{font-size:.8rem;font-weight:600;color:var(--text)}.message-time{font-size:.68rem;color:var(--text-secondary)}.message-body{font-size:.82rem;color:var(--text);line-height:1.6;padding-left:38px;word-break:break-word}.message-body p{margin:0 0 .5em}.message-body a{color:var(--accent);text-decoration:underline}.message-body img{max-width:100%;height:auto;border-radius:4px}.message-attachments{display:flex;flex-wrap:wrap;gap:6px;padding-left:38px;margin-top:8px}.attachment-link{display:inline-flex;align-items:center;gap:4px;font-size:.75rem;font-weight:500;color:var(--accent);text-decoration:none;padding:4px 10px;border-radius:6px;border:1px solid var(--border);background:var(--card);transition:all .15s}.attachment-link:hover{border-color:var(--accent);background:var(--accent-light)}.reply-box{padding:12px 16px 16px;border-top:1px solid var(--border);background:#fafafa;border-radius:0 0 8px 8px}.reply-textarea{width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:8px;font-size:.82rem;font-family:inherit;background:var(--card);color:var(--text);resize:vertical;min-height:60px;transition:border-color .15s;box-sizing:border-box}.reply-textarea:focus{outline:none;border-color:var(--accent)}.reply-textarea::placeholder{color:#aaa}.reply-error{font-size:.75rem;color:#dc2626;margin-top:6px}.reply-actions{display:flex;justify-content:flex-end;margin-top:8px}.reply-send{display:inline-flex;align-items:center;gap:5px;padding:7px 16px;border:none;border-radius:6px;background:var(--accent);color:#fff;font-size:.78rem;font-weight:600;cursor:pointer;transition:all .15s}.reply-send:hover:not(:disabled){filter:brightness(1.1)}.reply-send:disabled{opacity:.5;cursor:not-allowed}.compose-overlay{position:fixed;inset:0;background:#0006;display:flex;align-items:center;justify-content:center;z-index:1000;animation:composeOverlayIn .15s ease-out;padding:1rem}@keyframes composeOverlayIn{0%{opacity:0}to{opacity:1}}.compose-modal{background:var(--card);border-radius:12px;width:100%;max-width:560px;max-height:90vh;overflow-y:auto;box-shadow:0 20px 60px #0003;animation:composeModalIn .2s ease-out}@keyframes composeModalIn{0%{opacity:0;transform:translateY(20px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}.compose-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border)}.compose-header h2{font-size:1.1rem;font-weight:700;color:var(--text);margin:0}.compose-close{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;border-radius:6px;background:transparent;color:var(--text-secondary);cursor:pointer;transition:all .15s}.compose-close:hover{background:var(--tag-bg);color:var(--text)}.compose-form{padding:16px 20px 20px;display:flex;flex-direction:column;gap:14px}.compose-field label{display:block;font-size:.72rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.04em;margin-bottom:6px}.compose-select{width:100%;padding:8px 12px;border:1px solid var(--border);border-radius:8px;font-size:.82rem;background:var(--card);color:var(--text);cursor:pointer}.compose-select:focus{outline:none;border-color:var(--accent)}.compose-subject-input{width:100%;padding:9px 12px;border:1px solid var(--border);border-radius:8px;font-size:.84rem;background:var(--card);color:var(--text);box-sizing:border-box}.compose-subject-input:focus{outline:none;border-color:var(--accent)}.compose-subject-input::placeholder{color:#aaa}.compose-field-body{flex:1}.compose-body-input{width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:8px;font-size:.82rem;font-family:inherit;background:var(--card);color:var(--text);resize:vertical;min-height:120px;box-sizing:border-box}.compose-body-input:focus{outline:none;border-color:var(--accent)}.compose-body-input::placeholder{color:#aaa}.compose-error{font-size:.78rem;color:#dc2626;background:#fef2f2;padding:8px 12px;border-radius:6px}.compose-actions{display:flex;justify-content:flex-end;gap:8px;padding-top:4px}.compose-cancel{padding:8px 18px;border:1px solid var(--border);border-radius:8px;background:var(--card);color:var(--text-secondary);font-size:.82rem;font-weight:500;cursor:pointer;transition:all .15s}.compose-cancel:hover{border-color:var(--text-secondary);color:var(--text)}.compose-send{display:inline-flex;align-items:center;gap:6px;padding:8px 20px;border:none;border-radius:8px;background:var(--accent);color:#fff;font-size:.82rem;font-weight:600;cursor:pointer;transition:all .15s}.compose-send:hover:not(:disabled){filter:brightness(1.1)}.compose-send:disabled{opacity:.5;cursor:not-allowed}.sending-indicator{display:inline-flex;align-items:center;gap:6px}.sending-dot{width:6px;height:6px;border-radius:50%;background:#fff;animation:sendingPulse 1s infinite}@keyframes sendingPulse{0%,to{opacity:.4}50%{opacity:1}}.recipient-search{position:relative}.recipient-chips{display:flex;flex-wrap:wrap;gap:4px;padding:6px 8px;border:1px solid var(--border);border-radius:8px;min-height:38px;align-items:center;cursor:text;transition:border-color .15s}.recipient-chips:focus-within{border-color:var(--accent)}.recipient-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 8px;background:var(--accent);color:#fff;border-radius:14px;font-size:.75rem;font-weight:500;white-space:nowrap}.chip-remove{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border:none;border-radius:50%;background:#ffffff40;color:#fff;font-size:.75rem;cursor:pointer;padding:0;line-height:1}.chip-remove:hover{background:#fff6}.recipient-input{flex:1;min-width:100px;border:none;background:transparent;font-size:.82rem;color:var(--text);outline:none;padding:2px 4px}.recipient-input::placeholder{color:#aaa}.recipient-dropdown{position:absolute;top:100%;left:0;right:0;background:var(--card);border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 24px #0000001f;z-index:10;margin-top:4px;max-height:200px;overflow-y:auto;animation:dropdownIn .1s ease-out}@keyframes dropdownIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.recipient-searching{padding:10px 14px;font-size:.78rem;color:var(--text-secondary)}.recipient-option{display:flex;align-items:center;gap:10px;width:100%;padding:8px 14px;border:none;background:transparent;cursor:pointer;text-align:left;font:inherit;color:inherit;transition:background .1s}.recipient-option:hover{background:var(--tag-bg)}.recipient-option-avatar{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:.6rem;font-weight:700}.recipient-option-info{display:flex;flex-direction:column;min-width:0}.recipient-option-name{font-size:.82rem;font-weight:500;color:var(--text)}.recipient-option-role{font-size:.7rem;color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.inbox-page .loading{text-align:center;padding:3rem;color:var(--text-secondary)}.inbox-page .error{text-align:center;padding:2rem;color:#dc2626;background:#fef2f2;border-radius:8px;margin:1rem 0}@media(max-width:600px){.inbox-header{flex-direction:column;align-items:flex-start;gap:.75rem}.inbox-header-right{width:100%}.compose-btn{width:100%;justify-content:center}.inbox-tabs{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.inbox-tabs button{padding:6px 10px;font-size:.75rem;white-space:nowrap}.inbox-item-avatar{width:34px;height:34px}.inbox-participants{max-width:140px}.message-body,.message-attachments{padding-left:0}.compose-modal{max-width:100%;max-height:100vh;border-radius:12px 12px 0 0;margin-top:auto}.compose-overlay{align-items:flex-end;padding:0}}.todo-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 0;margin-bottom:.5rem;border-bottom:1px solid var(--border)}.todo-header-left{display:flex;align-items:center;gap:1rem}.todo-header h1{font-size:1.5rem;font-weight:700;color:var(--accent)}.todo-header-right{display:flex;align-items:center}.add-note-btn{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border:none;border-radius:8px;background:var(--accent);color:#fff;font-size:.82rem;font-weight:600;cursor:pointer;transition:all .15s}.add-note-btn:hover{filter:brightness(1.1);transform:translateY(-1px)}.add-note-form{background:var(--card);border:1px solid var(--accent);border-radius:10px;padding:16px;margin-bottom:1rem;animation:noteFormIn .15s ease-out}@keyframes noteFormIn{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.note-form-row{margin-bottom:10px}.note-title-input{width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:8px;font-size:.9rem;font-weight:500;background:var(--card);color:var(--text);box-sizing:border-box}.note-title-input:focus{outline:none;border-color:var(--accent)}.note-title-input::placeholder{color:#aaa}.note-details-input{width:100%;padding:8px 12px;border:1px solid var(--border);border-radius:8px;font-size:.82rem;font-family:inherit;background:var(--card);color:var(--text);resize:vertical;min-height:40px;box-sizing:border-box}.note-details-input:focus{outline:none;border-color:var(--accent)}.note-details-input::placeholder{color:#aaa}.note-form-meta{display:flex;gap:12px}.note-meta-field{flex:1}.note-meta-field label{display:block;font-size:.7rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.04em;margin-bottom:4px}.note-date-input,.note-course-select{width:100%;padding:7px 10px;border:1px solid var(--border);border-radius:6px;font-size:.8rem;background:var(--card);color:var(--text);box-sizing:border-box}.note-date-input:focus,.note-course-select:focus{outline:none;border-color:var(--accent)}.note-form-error{font-size:.78rem;color:#dc2626;background:#fef2f2;padding:6px 10px;border-radius:6px;margin-bottom:10px}.note-form-actions{display:flex;justify-content:flex-end;gap:8px}.note-cancel-btn{padding:7px 16px;border:1px solid var(--border);border-radius:6px;background:var(--card);color:var(--text-secondary);font-size:.8rem;font-weight:500;cursor:pointer;transition:all .15s}.note-cancel-btn:hover{border-color:var(--text-secondary);color:var(--text)}.note-save-btn{padding:7px 18px;border:none;border-radius:6px;background:var(--accent);color:#fff;font-size:.8rem;font-weight:600;cursor:pointer;transition:all .15s}.note-save-btn:hover:not(:disabled){filter:brightness(1.1)}.note-save-btn:disabled{opacity:.5;cursor:not-allowed}.todo-overview{display:flex;gap:12px;margin-bottom:1rem}.todo-page .overview-card{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:16px 12px;background:var(--card);border:1px solid var(--border);border-radius:10px}.todo-page .overview-label{font-size:.7rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.todo-page .overview-score{font-size:1.6rem;font-weight:700;line-height:1.2}.todo-page .overview-count{color:var(--text)}.todo-page .overdue-count{color:#dc2626}.todo-page .notes-count{color:#8b5cf6}.todo-tabs{display:flex;gap:4px;margin-bottom:1rem;border-bottom:1px solid var(--border);padding-bottom:0}.todo-tab{display:flex;align-items:center;gap:6px;padding:8px 16px;border:none;background:none;cursor:pointer;font-size:.82rem;font-weight:500;color:var(--text-secondary);border-bottom:2px solid transparent;transition:all .15s;margin-bottom:-1px}.todo-tab:hover{color:var(--text)}.todo-tab.active{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}.tab-count{font-size:.68rem;font-weight:700;padding:1px 6px;border-radius:10px;background:var(--tag-bg);color:var(--text-secondary)}.tab-count-alert{background:#fef2f2;color:#dc2626}.tab-count-notes{background:#f3f0ff;color:#8b5cf6}.todo-list{display:flex;flex-direction:column;gap:6px}.todo-card{display:flex;align-items:center;padding:12px 14px;border:1px solid var(--border);border-radius:8px;background:var(--card);color:inherit;transition:box-shadow .15s,border-color .15s;gap:10px}.todo-card:hover{box-shadow:0 2px 8px #0000000f;border-color:#d0d0d0}.todo-card.overdue{border-left:3px solid #dc2626;background:#fef2f2}.todo-card.urgent{border-left:3px solid #f59e0b}.todo-card.soon{border-left:3px solid #3b82f6}.todo-card.note-card{border-left:3px solid #8b5cf6}.todo-card.completed{opacity:.55}.todo-checkbox{width:22px;height:22px;border-radius:50%;border:2px solid var(--border);background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;padding:0;transition:all .15s}.todo-checkbox:hover{border-color:var(--accent);background:var(--accent-light, #f0f4ff)}.todo-checkbox.checked{border-color:#059669;background:#059669;color:#fff}.todo-checkbox.completing{opacity:.5;pointer-events:none}.todo-card-main{flex:1;min-width:0}.todo-card-link{text-decoration:none;color:inherit;display:block}.todo-card-info{display:flex;flex-direction:column;gap:4px;min-width:0}.todo-card-top{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.todo-course-badge{font-size:.68rem;font-weight:700;padding:2px 8px;border-radius:4px;white-space:nowrap;letter-spacing:.02em}.todo-note-badge{font-size:.68rem;font-weight:700;padding:2px 8px;border-radius:4px;background:#f3f0ff;color:#8b5cf6;white-space:nowrap;letter-spacing:.02em}.todo-section-badge{font-size:.62rem;font-weight:700;padding:2px 6px;border-radius:10px;text-transform:uppercase;letter-spacing:.03em}.todo-section-badge.overdue{background:#fef2f2;color:#dc2626;border:1px solid #fecaca}.todo-section-badge.note{background:#f3f0ff;color:#8b5cf6;border:1px solid #ddd6fe}.todo-points{font-size:.68rem;color:var(--text-secondary);font-weight:500}.todo-title{font-size:.88rem;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.todo-title.strikethrough{text-decoration:line-through;color:var(--text-secondary)}.todo-details{font-size:.75rem;color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.todo-card-right{display:flex;align-items:center;gap:10px;flex-shrink:0}.todo-due{display:flex;flex-direction:column;align-items:flex-end;gap:1px}.todo-relative{font-size:.78rem;font-weight:600;color:var(--text)}.todo-relative.overdue{color:#dc2626}.todo-relative.urgent{color:#d97706}.todo-relative.soon{color:#2563eb}.todo-date{font-size:.68rem;color:var(--text-secondary)}.todo-external{color:var(--text-secondary);opacity:0;transition:opacity .15s;flex-shrink:0}.todo-card:hover .todo-external{opacity:.6}.todo-delete-btn{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:6px;background:transparent;color:var(--text-secondary);cursor:pointer;opacity:0;transition:all .15s;flex-shrink:0;padding:0}.todo-card:hover .todo-delete-btn{opacity:.6}.todo-delete-btn:hover{background:#fef2f2;color:#dc2626;opacity:1!important}.todo-page .empty-state{display:flex;flex-direction:column;align-items:center;gap:12px;padding:4rem 2rem;color:var(--text-secondary);text-align:center}.todo-page .empty-state svg{color:#059669}.todo-page .empty-state p{font-size:.9rem}.empty-add-btn{padding:10px 24px;border:1px solid var(--accent);border-radius:8px;background:transparent;color:var(--accent);font-size:.85rem;font-weight:600;cursor:pointer;transition:all .15s}.empty-add-btn:hover{background:var(--accent);color:#fff}.todo-page .loading{text-align:center;padding:3rem;color:var(--text-secondary)}.todo-page .error{text-align:center;padding:2rem;color:#dc2626;background:#fef2f2;border-radius:8px;margin:1rem 0}@media(max-width:600px){.todo-header{flex-direction:column;align-items:flex-start;gap:.75rem}.todo-header-right{width:100%}.add-note-btn{width:100%;justify-content:center}.todo-overview{gap:8px;flex-wrap:wrap}.todo-page .overview-card{padding:12px 8px;min-width:calc(50% - 8px)}.todo-page .overview-score{font-size:1.3rem}.todo-tabs{gap:2px;overflow-x:auto;-webkit-overflow-scrolling:touch}.todo-tab{padding:8px 10px;font-size:.78rem;white-space:nowrap}.todo-title{max-width:180px}.todo-date{display:none}.note-form-meta{flex-direction:column;gap:8px}.todo-delete-btn{opacity:.6}}.calendar-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 0;margin-bottom:.5rem;border-bottom:1px solid var(--border)}.calendar-header-left{display:flex;align-items:center;gap:1rem}.calendar-header h1{font-size:1.5rem;font-weight:700;color:var(--accent)}.calendar-nav{display:flex;align-items:center;gap:8px}.cal-nav-btn{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:1px solid var(--border);border-radius:6px;background:var(--card);cursor:pointer;color:var(--text-secondary);transition:all .15s}.cal-nav-btn:hover{border-color:var(--accent);color:var(--accent)}.cal-month-label{font-size:.95rem;font-weight:600;color:var(--text);min-width:160px;text-align:center}.cal-today-btn{padding:5px 14px;border:1px solid var(--border);border-radius:6px;background:var(--card);cursor:pointer;font-size:.8rem;font-weight:500;color:var(--text-secondary);transition:all .15s}.cal-today-btn:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-light)}.calendar-layout{display:flex;flex-direction:column;gap:1rem;margin-top:.5rem}.calendar-weekdays{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;margin-bottom:2px}.weekday-label{text-align:center;font-size:.72rem;font-weight:600;color:var(--text-secondary);padding:6px 0;text-transform:uppercase;letter-spacing:.05em}.calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;border:1px solid var(--border);border-radius:8px;overflow:hidden;background:var(--border)}.calendar-day{display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;min-height:72px;background:var(--card);border:2px solid transparent;cursor:pointer;transition:all .12s;position:relative;font:inherit;color:inherit}.calendar-day:hover{background:#f8f8f8}.calendar-day.outside{opacity:.35}.calendar-day.today .day-number{background:var(--accent);color:#fff;border-radius:50%;width:26px;height:26px;display:flex;align-items:center;justify-content:center}.calendar-day.selected{border-color:var(--accent);background:var(--accent-light)}.day-number{font-size:.82rem;font-weight:500;color:var(--text);display:flex;align-items:center;justify-content:center;width:26px;height:26px}.calendar-day.outside .day-number{color:var(--text-secondary)}.day-dots{display:flex;gap:3px;flex-wrap:wrap;justify-content:center;max-width:100%}.day-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}.day-dot-more{font-size:.55rem;font-weight:700;color:var(--text-secondary);line-height:6px}.day-count{font-size:.62rem;font-weight:600;color:var(--text-secondary);background:var(--tag-bg);padding:1px 5px;border-radius:8px}.calendar-detail{background:var(--card);border:1px solid var(--border);border-radius:8px;padding:16px;animation:slideDown .15s ease-out}.detail-header{display:flex;align-items:center;gap:10px;margin-bottom:12px;padding-bottom:10px;border-bottom:1px solid var(--border)}.detail-header h2{font-size:1rem;font-weight:600;color:var(--text)}.today-badge{font-size:.68rem;font-weight:700;padding:2px 8px;border-radius:10px;background:var(--accent);color:#fff}.detail-empty{text-align:center;padding:24px;font-size:.85rem;color:var(--text-secondary)}.detail-items{display:flex;flex-direction:column;gap:8px}.detail-item{border:1px solid var(--border);border-left:3px solid;border-radius:6px;padding:10px 12px;transition:box-shadow .12s}.detail-item:hover{box-shadow:0 2px 8px #0000000f}.detail-item-top{display:flex;align-items:center;gap:8px;margin-bottom:4px;flex-wrap:wrap}.detail-course{font-size:.68rem;font-weight:700;padding:2px 8px;border-radius:4px;letter-spacing:.02em}.detail-type{font-size:.68rem;font-weight:500;color:var(--text-secondary);background:var(--tag-bg);padding:2px 8px;border-radius:10px}.detail-time{font-size:.72rem;color:var(--text-secondary);margin-left:auto}.detail-item-title{font-size:.85rem;font-weight:500;color:var(--text);line-height:1.4}.detail-points{display:inline-block;font-size:.68rem;color:var(--text-secondary);margin-top:4px}.detail-status{display:inline-block;font-size:.65rem;font-weight:600;padding:2px 8px;border-radius:10px;margin-top:4px;margin-left:8px}.detail-status-submitted{background:#dbeafe;color:#1d4ed8}.detail-status-graded{background:#dcfce7;color:#15803d}.detail-status-missing{background:#fef2f2;color:#dc2626}.detail-status-excused{background:var(--tag-bg);color:var(--text-secondary)}.calendar-legend{display:flex;flex-wrap:wrap;gap:12px;padding:10px 14px;background:var(--card);border:1px solid var(--border);border-radius:8px}.legend-item{display:flex;align-items:center;gap:6px}.legend-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.legend-name{font-size:.75rem;font-weight:500;color:var(--text-secondary)}.calendar-page .loading{text-align:center;padding:3rem;color:var(--text-secondary)}.calendar-page .error{text-align:center;padding:2rem;color:#dc2626;background:#fef2f2;border-radius:8px;margin:1rem 0}@media(max-width:600px){.calendar-header{flex-direction:column;align-items:flex-start;gap:10px}.cal-month-label{min-width:120px;font-size:.85rem}.calendar-day{min-height:56px;padding:6px 2px}.day-number{font-size:.75rem;width:22px;height:22px}.calendar-day.today .day-number{width:22px;height:22px}.day-count{font-size:.55rem}.day-dot{width:5px;height:5px}}.people-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 0;margin-bottom:.5rem;border-bottom:1px solid var(--border)}.people-header-left{display:flex;align-items:center;gap:1rem}.people-header h1{font-size:1.5rem;font-weight:700;color:var(--accent)}.people-toolbar{display:flex;flex-direction:column;gap:.5rem;margin-bottom:.75rem}.people-search{position:relative}.people-search .search-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--text-secondary);pointer-events:none}.people-search .search-input{width:100%;padding:10px 36px 10px 38px;border:1px solid var(--border);border-radius:8px;font-size:.85rem;font-family:inherit;background:var(--card);color:var(--text);outline:none;transition:border-color .15s}.people-search .search-input:focus{border-color:var(--accent)}.people-search .search-input::placeholder{color:var(--text-secondary)}.people-search .search-clear{position:absolute;right:8px;top:50%;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;width:24px;height:24px;border:none;background:none;cursor:pointer;color:var(--text-secondary);border-radius:4px}.people-search .search-clear:hover{color:var(--text);background:var(--tag-bg)}.people-filters{display:flex;gap:6px}.people-filters .filter-btn{padding:5px 14px;border:1px solid var(--border);border-radius:16px;background:var(--card);font-size:.75rem;font-family:inherit;font-weight:500;color:var(--text-secondary);cursor:pointer;transition:all .15s}.people-filters .filter-btn:hover{border-color:var(--accent);color:var(--text)}.people-filters .filter-btn.active{background:var(--accent);border-color:var(--accent);color:#fff}.people-summary{margin-bottom:.75rem}.people-summary .summary-stat{font-size:.78rem;color:var(--text-secondary)}.people-course-list{display:flex;flex-direction:column;gap:8px}.people-course-card{border:1px solid var(--border);border-left:3px solid;border-radius:8px;background:var(--card);transition:box-shadow .15s;overflow:hidden}.people-course-card:hover{box-shadow:0 2px 8px #0000000f}.people-course-card.expanded{box-shadow:0 2px 12px #00000014}.people-course-header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:12px 14px;border:none;background:none;cursor:pointer;text-align:left;font:inherit;color:inherit}.people-course-left{display:flex;align-items:center;gap:10px;min-width:0}.people-course-badge{font-size:.72rem;font-weight:700;padding:3px 10px;border-radius:4px;white-space:nowrap;letter-spacing:.02em}.people-course-name{font-size:.88rem;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.people-course-right{display:flex;align-items:center;gap:8px;flex-shrink:0}.people-count-badge{font-size:.7rem;font-weight:600;padding:2px 8px;border-radius:10px;background:var(--tag-bg);color:var(--text-secondary)}.people-course-card .chevron{font-size:.7rem;color:var(--text-secondary);transition:transform .15s;display:inline-block}.people-course-card .chevron.open{transform:rotate(180deg)}.people-list{border-top:1px solid var(--border);animation:peopleSlideDown .15s ease-out}@keyframes peopleSlideDown{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.people-role-summary{display:flex;gap:12px;padding:8px 14px;border-bottom:1px solid var(--border);background:var(--tag-bg)}.role-count{font-size:.72rem;font-weight:600;color:var(--text-secondary)}.role-count.faculty{color:#7c3aed}.role-count.ta{color:#0891b2}.role-count.student{color:#059669}.people-loading{padding:16px}.people-skeleton-row{display:flex;align-items:center;gap:12px;margin-bottom:14px}.skeleton-avatar{width:40px;height:40px;border-radius:50%;background:linear-gradient(90deg,#f0f0f0 25%,#e0e0e0,#f0f0f0 75%);background-size:200% 100%;animation:peopleShimmer 1.5s infinite;flex-shrink:0}.skeleton-lines{flex:1}.people-loading .skeleton-line{height:10px;border-radius:4px;background:linear-gradient(90deg,#f0f0f0 25%,#e0e0e0,#f0f0f0 75%);background-size:200% 100%;animation:peopleShimmer 1.5s infinite;margin-bottom:6px}.people-loading .skeleton-line.medium{width:60%}.people-loading .skeleton-line.short{width:35%}@keyframes peopleShimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.no-people{padding:20px 16px;text-align:center;font-size:.82rem;color:var(--text-secondary)}.people-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:1px;background:var(--border)}.person-card{display:flex;align-items:center;gap:12px;padding:12px 14px;background:var(--card);transition:background .1s}.person-card:hover{background:#fafafa}.person-card.staff{background:#faf5ff08}.person-card.staff:hover{background:#faf5ff18}.person-avatar-wrap{position:relative;flex-shrink:0}.person-avatar{width:40px;height:40px;border-radius:50%;object-fit:cover;display:block}.person-avatar-fallback{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.78rem;font-weight:700;letter-spacing:.02em}.staff-indicator{position:absolute;bottom:0;right:0;width:12px;height:12px;border-radius:50%;border:2px solid var(--card)}.person-info{display:flex;flex-direction:column;gap:1px;min-width:0}.person-name{font-size:.84rem;font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.person-role{font-size:.7rem;color:var(--text-secondary)}.person-section{color:var(--text-secondary);opacity:.8}.person-bio{font-size:.72rem;color:var(--text-secondary);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:200px}.people-page .loading{text-align:center;padding:3rem;color:var(--text-secondary)}.people-page .error{text-align:center;padding:2rem;color:#dc2626;background:#fef2f2;border-radius:8px;margin:1rem 0}@media(max-width:600px){.people-course-name{display:none}.people-course-badge{font-size:.78rem}.people-grid{grid-template-columns:1fr}.person-bio{max-width:160px}}.groups-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 0;margin-bottom:.5rem;border-bottom:1px solid var(--border)}.groups-header-left{display:flex;align-items:center;gap:1rem}.groups-header h1{font-size:1.5rem;font-weight:700;color:var(--accent)}.groups-toolbar{margin-bottom:.75rem}.groups-search{position:relative}.groups-search .search-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--text-secondary);pointer-events:none}.groups-search .search-input{width:100%;padding:10px 36px 10px 38px;border:1px solid var(--border);border-radius:8px;font-size:.85rem;font-family:inherit;background:var(--card);color:var(--text);outline:none;transition:border-color .15s}.groups-search .search-input:focus{border-color:var(--accent)}.groups-search .search-input::placeholder{color:var(--text-secondary)}.groups-search .search-clear{position:absolute;right:8px;top:50%;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;width:24px;height:24px;border:none;background:none;cursor:pointer;color:var(--text-secondary);border-radius:4px}.groups-search .search-clear:hover{color:var(--text);background:var(--tag-bg)}.groups-summary{margin-bottom:.75rem}.groups-summary .summary-stat{font-size:.78rem;color:var(--text-secondary)}.groups-empty{text-align:center;padding:3rem 1rem;color:var(--text-secondary);font-size:.9rem}.groups-course-sections{display:flex;flex-direction:column;gap:1.25rem}.groups-course-section{display:flex;flex-direction:column;gap:8px}.groups-course-label{display:flex;align-items:center;gap:10px;padding:0 2px}.groups-course-badge{font-size:.72rem;font-weight:700;padding:3px 10px;border-radius:4px;white-space:nowrap;letter-spacing:.02em}.groups-course-name{font-size:.82rem;font-weight:500;color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.groups-list{display:flex;flex-direction:column;gap:6px}.group-card{border:1px solid var(--border);border-left:3px solid;border-radius:8px;background:var(--card);transition:box-shadow .15s;overflow:hidden}.group-card:hover{box-shadow:0 2px 8px #0000000f}.group-card.expanded{box-shadow:0 2px 12px #00000014}.group-header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:12px 14px;border:none;background:none;cursor:pointer;text-align:left;font:inherit;color:inherit}.group-header-left{display:flex;align-items:center;gap:10px;min-width:0}.group-icon{flex-shrink:0}.group-title-area{display:flex;flex-direction:column;gap:2px;min-width:0}.group-name{font-size:.88rem;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.group-meta{font-size:.72rem;color:var(--text-secondary)}.group-date{color:var(--text-secondary);opacity:.8}.group-header-right{display:flex;align-items:center;gap:8px;flex-shrink:0}.group-capacity{font-size:.7rem;font-weight:600;padding:2px 8px;border-radius:10px;background:var(--tag-bg);color:var(--text-secondary)}.group-card .chevron{font-size:.7rem;color:var(--text-secondary);transition:transform .15s;display:inline-block}.group-card .chevron.open{transform:rotate(180deg)}.group-members{border-top:1px solid var(--border);animation:groupsSlideDown .15s ease-out}@keyframes groupsSlideDown{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.members-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:1px;background:var(--border)}.member-card{display:flex;align-items:center;gap:10px;padding:10px 14px;background:var(--card);transition:background .1s}.member-card:hover{background:#fafafa}.member-avatar-wrap{flex-shrink:0}.member-avatar{width:36px;height:36px;border-radius:50%;object-fit:cover;display:block}.member-avatar-fallback{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.74rem;font-weight:700;letter-spacing:.02em}.member-name{font-size:.82rem;font-weight:500;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.group-members-loading{padding:12px 14px}.member-skeleton{display:flex;align-items:center;gap:10px;margin-bottom:10px}.member-skeleton .skeleton-avatar{width:36px;height:36px;border-radius:50%;background:linear-gradient(90deg,#f0f0f0 25%,#e0e0e0,#f0f0f0 75%);background-size:200% 100%;animation:groupsShimmer 1.5s infinite;flex-shrink:0}.member-skeleton .skeleton-lines{flex:1}.member-skeleton .skeleton-line{height:10px;border-radius:4px;background:linear-gradient(90deg,#f0f0f0 25%,#e0e0e0,#f0f0f0 75%);background-size:200% 100%;animation:groupsShimmer 1.5s infinite}.member-skeleton .skeleton-line.medium{width:55%}@keyframes groupsShimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.no-members{padding:16px;text-align:center;font-size:.82rem;color:var(--text-secondary)}.groups-page .loading{text-align:center;padding:3rem;color:var(--text-secondary)}.groups-page .error{text-align:center;padding:2rem;color:#dc2626;background:#fef2f2;border-radius:8px;margin:1rem 0}@media(max-width:600px){.groups-course-name{display:none}.groups-course-badge{font-size:.78rem}.members-grid{grid-template-columns:1fr}.group-name{font-size:.82rem}}.dash-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 0;margin-bottom:.5rem;border-bottom:1px solid var(--border)}.dash-header-left{display:flex;align-items:center;gap:1rem}.dash-header h1{font-size:1.5rem;font-weight:700;color:var(--accent)}.back-link{display:flex;align-items:center;gap:4px;font-size:.82rem;font-weight:500;color:var(--text-secondary);text-decoration:none;padding:4px 10px;border-radius:6px;border:1px solid var(--border);transition:all .15s}.back-link:hover{color:var(--accent);border-color:var(--accent);background:var(--accent-light)}.dash-greeting{margin-bottom:1.25rem}.dash-greeting h2{font-size:1.5rem;font-weight:700;color:var(--text);line-height:1.3}.dash-date{font-size:.85rem;color:var(--text-secondary);margin-top:2px}.dash-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:1.5rem}.stat-card{display:flex;flex-direction:column;align-items:center;gap:4px;padding:16px 12px;background:var(--card);border:1px solid var(--border);border-radius:12px;text-decoration:none;transition:all .2s;position:relative;overflow:hidden}.stat-card:before{content:"";position:absolute;top:0;left:0;right:0;height:3px}.stat-inbox:before{background:#3b82f6}.stat-todo:before{background:#f59e0b}.stat-missing:before{background:#ef4444}.stat-grade:before{background:#10b981}.stat-card:hover{border-color:var(--accent);transform:translateY(-2px);box-shadow:0 4px 12px #00000014}.stat-icon{color:var(--text-secondary);display:flex;margin-bottom:2px}.stat-inbox .stat-icon{color:#3b82f6}.stat-todo .stat-icon{color:#f59e0b}.stat-missing .stat-icon{color:#ef4444}.stat-grade .stat-icon{color:#10b981}.stat-number{font-size:1.75rem;font-weight:800;color:var(--text);line-height:1}.stat-inbox .stat-number{color:#3b82f6}.stat-todo .stat-number{color:#f59e0b}.stat-missing .stat-number{color:#ef4444}.stat-grade .stat-number{color:#10b981}.stat-label{font-size:.7rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.dash-content{display:grid;grid-template-columns:1fr 320px;gap:1.5rem;align-items:start}.dash-section{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:1rem 1.25rem;margin-bottom:1rem}.dash-section-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.75rem}.dash-section h3{font-size:.9rem;font-weight:700;color:var(--text);text-transform:uppercase;letter-spacing:.04em}.dash-section-link{font-size:.75rem;color:var(--accent);text-decoration:none;font-weight:500}.dash-section-link:hover{text-decoration:underline}.dash-empty{font-size:.85rem;color:var(--text-secondary);text-align:center;padding:1.5rem 0}.dash-day-group{margin-bottom:.75rem}.dash-day-group:last-child{margin-bottom:0}.dash-day-label{font-size:.75rem;font-weight:700;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.04em;padding:4px 0;margin-bottom:6px;display:flex;align-items:center;gap:8px}.dash-day-label.today{color:var(--accent)}.dash-day-label.tomorrow{color:#d97706}.dash-day-count{font-size:.65rem;font-weight:500;color:var(--text-secondary);text-transform:none;letter-spacing:normal}.dash-due-list{display:flex;flex-direction:column;gap:4px}.dash-due-item{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:8px;background:var(--bg);transition:background .15s}.dash-due-item:hover{background:var(--accent-light)}.dash-due-item.submitted{opacity:.6}.dash-due-left{display:flex;align-items:center;gap:6px;flex-shrink:0}.dash-course-tag{font-size:.68rem;font-weight:700;padding:2px 8px;border-radius:4px;white-space:nowrap}.dash-type-label{font-size:.62rem;color:var(--text-secondary);text-transform:uppercase;font-weight:500}.dash-due-center{flex:1;min-width:0}.dash-item-title{font-size:.82rem;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}.dash-due-right{display:flex;align-items:center;gap:8px;flex-shrink:0}.dash-status{font-size:.62rem;font-weight:700;padding:2px 6px;border-radius:4px;text-transform:uppercase}.dash-status.submitted{background:#dbeafe;color:#1d4ed8}.dash-status.graded{background:#dcfce7;color:#15803d}.dash-item-time{font-size:.75rem;color:var(--text-secondary);white-space:nowrap;font-variant-numeric:tabular-nums}.dash-activity-list{display:flex;flex-direction:column}.dash-activity-item{display:flex;align-items:flex-start;gap:10px;padding:8px 0;border-bottom:1px solid var(--border)}.dash-activity-item:last-child{border-bottom:none}.dash-activity-icon{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;background:var(--tag-bg);color:var(--text-secondary)}.dash-activity-icon.megaphone{background:#fef3c7;color:#d97706}.dash-activity-icon.check{background:#dcfce7;color:#15803d}.dash-activity-icon.star{background:#fce7f3;color:#be185d}.dash-activity-icon.mail{background:#dbeafe;color:#2563eb}.dash-activity-icon.chat{background:#e0e7ff;color:#4f46e5}.dash-activity-content{flex:1;min-width:0}.dash-activity-title{font-size:.8rem;font-weight:500;color:var(--text);display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dash-activity-preview{font-size:.72rem;color:var(--text-secondary);display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:1px}.dash-activity-time{font-size:.68rem;color:var(--text-secondary);white-space:nowrap;flex-shrink:0;margin-top:2px}.dash-grades{display:flex;flex-direction:column;gap:10px}.dash-grade-row{display:flex;flex-direction:column;gap:4px}.dash-grade-info{display:flex;justify-content:space-between;align-items:center}.dash-grade-course{font-size:.78rem;font-weight:700}.dash-grade-score{font-size:.75rem;font-weight:600;color:var(--text)}.dash-grade-bar-track{width:100%;height:6px;border-radius:3px;background:var(--bg);overflow:hidden}.dash-grade-bar-fill{height:100%;border-radius:3px;transition:width .6s ease}.dash-grade-avg{font-size:.75rem;color:var(--text-secondary);text-align:center;padding-top:6px;border-top:1px solid var(--border);margin-top:4px}.dash-course-grid{display:flex;flex-direction:column;gap:6px}.dash-course-chip{padding:8px 12px;border-left:3px solid;border-radius:6px;background:var(--bg);transition:background .15s;text-decoration:none;color:inherit}.dash-course-chip:hover{background:var(--accent-light)}.dash-course-short{font-size:.78rem;font-weight:700;display:block}.dash-course-full{font-size:.68rem;color:var(--text-secondary);display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dash-quick-links{display:flex;flex-wrap:wrap;gap:6px}.dash-qlink{font-size:.72rem;font-weight:500;padding:4px 12px;border:1px solid var(--border);border-radius:16px;color:var(--text-secondary);text-decoration:none;transition:all .15s}.dash-qlink:hover{color:var(--accent);border-color:var(--accent);background:var(--accent-light)}.dash-loading-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:1.5rem}.dash-skeleton-card{height:100px;border-radius:12px;background:var(--card);border:1px solid var(--border);animation:shimmer 1.5s infinite}.dash-skeleton-section{height:200px;border-radius:12px;background:var(--card);border:1px solid var(--border);margin-bottom:1rem;animation:shimmer 1.5s infinite}@keyframes shimmer{0%,to{opacity:1}50%{opacity:.5}}@media(max-width:768px){.dash-content{grid-template-columns:1fr}.dash-stats{grid-template-columns:repeat(2,1fr)}.dash-greeting h2{font-size:1.25rem}}@media(max-width:480px){.dash-stats{grid-template-columns:repeat(2,1fr);gap:8px}.stat-card{padding:12px 8px}.stat-number{font-size:1.4rem}.dash-due-item{flex-wrap:wrap}.dash-due-center{order:3;flex-basis:100%;margin-left:0}.dash-loading-grid{grid-template-columns:repeat(2,1fr)}}.assignments-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 0;margin-bottom:.5rem;border-bottom:1px solid var(--border)}.assignments-header-left{display:flex;align-items:center;gap:1rem}.assignments-header h1{font-size:1.5rem;font-weight:700;color:var(--accent)}.assignments-overview{display:flex;gap:12px;margin-bottom:1rem}.assignments-page .overview-card{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:14px 10px;background:var(--card);border:1px solid var(--border);border-radius:10px}.assignments-page .overview-label{font-size:.65rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.assignments-page .overview-score{font-size:1.4rem;font-weight:700;line-height:1.2}.assignments-page .overview-count{color:var(--text)}.assignments-tabs{display:flex;gap:4px;margin-bottom:1rem;overflow-x:auto;-webkit-overflow-scrolling:touch}.tab-btn{display:flex;align-items:center;gap:6px;padding:8px 14px;border:1px solid var(--border);border-radius:20px;background:var(--card);font-size:.8rem;font-weight:500;color:var(--text-secondary);cursor:pointer;white-space:nowrap;transition:all .15s}.tab-btn:hover{border-color:var(--accent);color:var(--accent)}.tab-btn.active{background:var(--accent);border-color:var(--accent);color:#fff}.tab-count{font-size:.7rem;font-weight:700;opacity:.8}.assignments-controls{display:flex;gap:8px;margin-bottom:1rem}.assignments-search{flex:1;padding:8px 12px;border:1px solid var(--border);border-radius:8px;font-size:.85rem;background:var(--card);color:var(--text);outline:none;transition:border-color .15s}.assignments-search:focus{border-color:var(--accent)}.assignments-sort,.assignments-course-filter{padding:8px 12px;border:1px solid var(--border);border-radius:8px;font-size:.8rem;background:var(--card);color:var(--text);cursor:pointer;outline:none}.assignments-sort:focus,.assignments-course-filter:focus{border-color:var(--accent)}.assignments-list{display:flex;flex-direction:column;gap:8px}.assignment-card{border:1px solid var(--border);border-left:3px solid;border-radius:8px;background:var(--card);transition:box-shadow .15s;overflow:hidden}.assignment-card:hover{box-shadow:0 2px 8px #0000000f}.assignment-card-header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:12px 14px;border:none;background:none;cursor:pointer;text-align:left;gap:12px}.assignment-card-left{display:flex;align-items:flex-start;gap:10px;flex:1;min-width:0}.assignment-course-badge{flex-shrink:0;padding:3px 8px;border-radius:4px;font-size:.7rem;font-weight:700;letter-spacing:.02em}.assignment-info{display:flex;flex-direction:column;gap:3px;min-width:0}.assignment-name{font-size:.88rem;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.assignment-meta{display:flex;align-items:center;gap:8px;font-size:.75rem;color:var(--text-secondary)}.assignment-due{font-weight:500}.assignment-points{padding:1px 6px;background:var(--tag-bg);border-radius:4px;font-weight:600}.assignment-type{opacity:.7}.assignment-card-right{display:flex;align-items:center;gap:8px;flex-shrink:0}.assignment-status{padding:3px 10px;border-radius:12px;font-size:.7rem;font-weight:600}.assignment-status.graded{background:#dcfce7;color:#166534}.assignment-status.submitted{background:#dbeafe;color:#1e40af}.assignment-status.pending{background:#fef3c7;color:#92400e}.assignment-status.excused{background:#f3e8ff;color:#6b21a8}.assignment-status.not-submitted{background:var(--tag-bg);color:var(--text-secondary)}.assignment-status.overdue{background:#fef2f2;color:#991b1b}.chevron{transition:transform .2s;color:var(--text-secondary)}.chevron.open{transform:rotate(180deg)}.assignment-details{padding:12px 14px 14px;border-top:1px solid var(--border);margin-top:0}.assignment-detail-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px;margin-bottom:12px}.detail-item{display:flex;flex-direction:column;gap:2px}.detail-label{font-size:.7rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.03em}.detail-value{font-size:.85rem;color:var(--text);font-weight:500}.assignment-description{margin-top:10px;padding:12px;background:var(--bg);border-radius:8px;border:1px solid var(--border);max-height:300px;overflow-y:auto}.description-content{font-size:.82rem;line-height:1.6;color:var(--text)}.description-content h1,.description-content h2,.description-content h3,.description-content h4{margin:.5em 0 .3em;font-size:.9rem;font-weight:700}.description-content p{margin:.4em 0}.description-content ul,.description-content ol{margin:.4em 0;padding-left:1.5em}.description-content a{color:var(--accent);text-decoration:none}.description-content a:hover{text-decoration:underline}.assignment-canvas-link{display:inline-flex;align-items:center;gap:6px;margin-top:10px;padding:8px 14px;background:var(--accent);color:#fff;border-radius:6px;font-size:.8rem;font-weight:600;text-decoration:none;transition:opacity .15s}.assignment-canvas-link:hover{opacity:.9}.assignments-page .empty-state{display:flex;flex-direction:column;align-items:center;gap:12px;padding:3rem 1rem;color:var(--text-secondary)}.assignments-page .loading,.assignments-page .error{padding:2rem;text-align:center;color:var(--text-secondary)}.assignments-page .error{color:#dc2626}@media(max-width:640px){.assignments-overview{flex-wrap:wrap}.assignments-page .overview-card{min-width:calc(33% - 8px)}.assignments-controls{flex-direction:column}.assignment-card-header{flex-direction:column;align-items:flex-start;gap:8px}.assignment-card-right{align-self:flex-end}.assignment-detail-grid{grid-template-columns:1fr}}.feedback-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 0;margin-bottom:.5rem;border-bottom:1px solid var(--border)}.feedback-header-left{display:flex;align-items:center;gap:1rem}.feedback-header h1{font-size:1.5rem;font-weight:700;color:var(--accent)}.feedback-overview{display:flex;gap:12px;margin-bottom:1.25rem}.feedback-overview .overview-card{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:16px 12px;background:var(--card);border:1px solid var(--border);border-radius:10px}.feedback-overview .overview-label{font-size:.7rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.feedback-overview .overview-score{font-size:1.6rem;font-weight:700;line-height:1.2}.feedback-overview .overview-count{color:var(--text)}.feedback-controls{display:flex;flex-direction:column;gap:10px;margin-bottom:1rem}.feedback-tabs{display:flex;gap:4px;background:var(--tag-bg);padding:3px;border-radius:8px;width:fit-content}.feedback-tab{padding:6px 14px;border:none;background:none;font:inherit;font-size:.78rem;font-weight:500;color:var(--text-secondary);border-radius:6px;cursor:pointer;transition:all .15s}.feedback-tab:hover{color:var(--text)}.feedback-tab.active{background:var(--card);color:var(--text);box-shadow:0 1px 3px #00000014;font-weight:600}.feedback-filters{display:flex;gap:8px}.feedback-search{flex:1;padding:7px 12px;border:1px solid var(--border);border-radius:6px;font:inherit;font-size:.82rem;background:var(--card);color:var(--text);outline:none;transition:border-color .15s}.feedback-search:focus{border-color:var(--accent)}.feedback-search::placeholder{color:#aaa}.feedback-course-select{padding:7px 10px;border:1px solid var(--border);border-radius:6px;font:inherit;font-size:.82rem;background:var(--card);color:var(--text);cursor:pointer;outline:none}.feedback-count{font-size:.75rem;color:var(--text-secondary);margin-bottom:.75rem}.feedback-list{display:flex;flex-direction:column;gap:8px}.feedback-card{border:1px solid var(--border);border-left:3px solid;border-radius:8px;background:var(--card);transition:box-shadow .15s;overflow:hidden}.feedback-card:hover{box-shadow:0 2px 8px #0000000f}.feedback-card.expanded{box-shadow:0 2px 12px #00000014}.feedback-card-header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:12px 14px;border:none;background:none;cursor:pointer;text-align:left;font:inherit;color:inherit;gap:12px}.feedback-card-left{display:flex;align-items:center;gap:10px;min-width:0;flex:1}.feedback-course-badge{font-size:.72rem;font-weight:700;padding:3px 10px;border-radius:4px;white-space:nowrap;letter-spacing:.02em;flex-shrink:0}.feedback-card-info{display:flex;flex-direction:column;gap:3px;min-width:0}.feedback-assignment-name{font-size:.88rem;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.feedback-meta{display:flex;align-items:center;gap:8px}.feedback-date{font-size:.72rem;color:var(--text-secondary)}.feedback-badge{display:inline-flex;align-items:center;gap:3px;font-size:.65rem;font-weight:600;padding:2px 7px;border-radius:10px}.comment-badge{background:#dbeafe;color:#1d4ed8}.rubric-badge{background:#f3e8ff;color:#7c3aed}.feedback-card-right{display:flex;align-items:center;gap:10px;flex-shrink:0}.feedback-score{font-size:.88rem;font-weight:700;white-space:nowrap}.feedback-card .chevron{font-size:.7rem;color:var(--text-secondary);transition:transform .15s;display:inline-block}.feedback-card .chevron.open{transform:rotate(180deg)}.feedback-detail{border-top:1px solid var(--border);padding:16px;animation:feedbackSlideDown .15s ease-out}@keyframes feedbackSlideDown{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.feedback-section-title{font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--text-secondary);margin-bottom:10px}.feedback-comments-section{margin-bottom:16px}.comments-thread{display:flex;flex-direction:column;gap:10px}.comment-bubble{background:#f9fafb;border:1px solid #f0f0f0;border-radius:8px;padding:10px 12px}.comment-header{display:flex;align-items:center;gap:8px;margin-bottom:6px}.comment-avatar{width:24px;height:24px;border-radius:50%;object-fit:cover}.comment-author{font-size:.8rem;font-weight:600;color:var(--text)}.comment-time{font-size:.68rem;color:var(--text-secondary);margin-left:auto}.comment-body{font-size:.82rem;color:var(--text);line-height:1.5;white-space:pre-wrap;word-break:break-word}.feedback-rubric-section{margin-bottom:16px}.rubric-grid{display:flex;flex-direction:column;gap:8px}.rubric-criterion{background:#f9fafb;border:1px solid #f0f0f0;border-radius:8px;padding:10px 12px}.rubric-criterion-header{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:4px}.rubric-criterion-label{font-size:.82rem;font-weight:600;color:var(--text)}.rubric-criterion-score{font-size:.82rem;font-weight:700;white-space:nowrap}.rubric-rating{display:inline-block;font-size:.72rem;font-weight:500;color:#7c3aed;background:#f3e8ff;padding:2px 8px;border-radius:10px;margin-bottom:4px}.rubric-comment{font-size:.78rem;color:var(--text-secondary);line-height:1.4;margin:4px 0 0}.feedback-grade-section{display:flex;align-items:center;gap:8px;padding:10px 0;margin-bottom:12px}.feedback-grade-label{font-size:.78rem;font-weight:600;color:var(--text-secondary)}.feedback-grade-value{font-size:.88rem;font-weight:700;color:var(--text)}.feedback-graded-at{font-size:.7rem;color:var(--text-secondary);margin-left:auto}.feedback-canvas-link{display:inline-flex;align-items:center;gap:5px;font-size:.78rem;font-weight:500;color:var(--accent);text-decoration:none;padding:6px 0}.feedback-canvas-link:hover{text-decoration:underline}.feedback-page .empty-state{display:flex;flex-direction:column;align-items:center;gap:12px;padding:4rem 2rem;color:var(--text-secondary);text-align:center}.feedback-page .empty-state p{font-size:.9rem}.feedback-page .empty-hint{font-size:.78rem;color:#aaa}.feedback-page .loading{text-align:center;padding:3rem;color:var(--text-secondary);display:flex;flex-direction:column;align-items:center;gap:12px}.loading-spinner{width:24px;height:24px;border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}.feedback-page .error{text-align:center;padding:2rem;color:#dc2626;background:#fef2f2;border-radius:8px;margin:1rem 0}@media(max-width:600px){.feedback-overview{display:grid;grid-template-columns:1fr 1fr;gap:8px}.feedback-overview .overview-card{padding:12px 8px}.feedback-overview .overview-score{font-size:1.3rem}.feedback-filters{flex-direction:column}.feedback-assignment-name{max-width:180px}.feedback-tabs{overflow-x:auto;width:100%}}.announcements-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 0;margin-bottom:.5rem;border-bottom:1px solid var(--border)}.announcements-header-left{display:flex;align-items:center;gap:1rem}.announcements-header h1{font-size:1.5rem;font-weight:700;color:var(--accent)}.announcements-count-badge{font-size:.7rem;font-weight:700;padding:3px 10px;border-radius:12px;background:var(--accent);color:#fff}.announcements-overview{display:flex;gap:12px;margin-bottom:1.25rem}.announcements-overview .overview-card{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:16px 12px;background:var(--card);border:1px solid var(--border);border-radius:10px}.announcements-overview .overview-label{font-size:.7rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.announcements-overview .overview-score{font-size:1.6rem;font-weight:700;line-height:1.2}.announcements-overview .overview-count{color:var(--text)}.announcements-controls{display:flex;flex-direction:column;gap:10px;margin-bottom:1rem}.announcements-tabs{display:flex;gap:4px;background:var(--tag-bg);padding:3px;border-radius:8px;width:fit-content}.announcements-tab{display:flex;align-items:center;gap:6px;padding:6px 14px;border:none;background:none;font:inherit;font-size:.78rem;font-weight:500;color:var(--text-secondary);border-radius:6px;cursor:pointer;transition:all .15s}.announcements-tab:hover{color:var(--text)}.announcements-tab.active{background:var(--card);color:var(--text);box-shadow:0 1px 3px #00000014;font-weight:600}.announcements-tab .tab-badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:var(--accent);color:#fff;font-size:.65rem;font-weight:700}.announcements-filters{display:flex;gap:8px}.announcements-search{flex:1;padding:7px 12px;border:1px solid var(--border);border-radius:6px;font:inherit;font-size:.82rem;background:var(--card);color:var(--text);outline:none;transition:border-color .15s}.announcements-search:focus{border-color:var(--accent)}.announcements-search::placeholder{color:#aaa}.announcements-course-select{padding:7px 10px;border:1px solid var(--border);border-radius:6px;font:inherit;font-size:.82rem;background:var(--card);color:var(--text);cursor:pointer;outline:none}.announcements-result-count{font-size:.75rem;color:var(--text-secondary);margin-bottom:.75rem}.announcements-group{margin-bottom:1.25rem}.announcements-date-header{font-size:.75rem;font-weight:700;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em;padding:0 2px;margin-bottom:.5rem}.announcements-list{display:flex;flex-direction:column;gap:8px}.announcement-card{border:1px solid var(--border);border-left:3px solid;border-radius:8px;background:var(--card);transition:box-shadow .15s;overflow:hidden}.announcement-card:hover{box-shadow:0 2px 8px #0000000f}.announcement-card.expanded{box-shadow:0 2px 12px #00000014}.announcement-card-header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:12px 14px;border:none;background:none;cursor:pointer;text-align:left;font:inherit;color:inherit;gap:12px}.announcement-card-left{display:flex;align-items:center;gap:10px;min-width:0;flex:1}.announcement-course-badge{font-size:.72rem;font-weight:700;padding:3px 10px;border-radius:4px;white-space:nowrap;letter-spacing:.02em;flex-shrink:0}.announcement-card-info{display:flex;flex-direction:column;gap:3px;min-width:0}.announcement-title{font-size:.88rem;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.announcement-meta{display:flex;align-items:center;gap:6px}.announcement-author-avatar{width:18px;height:18px;border-radius:50%;object-fit:cover;flex-shrink:0}.announcement-author{font-size:.72rem;font-weight:500;color:var(--text-secondary)}.announcement-time{font-size:.68rem;color:var(--text-secondary)}.announcement-time:before{content:"·";margin-right:6px}.announcement-card-right{display:flex;align-items:center;gap:10px;flex-shrink:0}.announcement-card .chevron{font-size:.7rem;color:var(--text-secondary);transition:transform .15s;display:inline-block}.announcement-card .chevron.open{transform:rotate(180deg)}.announcement-preview{font-size:.76rem;color:var(--text-secondary);padding:0 14px 12px;line-height:1.4}.announcement-detail{border-top:1px solid var(--border);padding:16px;animation:announcementSlideDown .15s ease-out}@keyframes announcementSlideDown{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.announcement-detail-header{display:flex;align-items:center;gap:10px;margin-bottom:14px;padding-bottom:12px;border-bottom:1px solid var(--border)}.announcement-detail-avatar{width:36px;height:36px;border-radius:50%;object-fit:cover;flex-shrink:0}.announcement-detail-author-info{display:flex;flex-direction:column;gap:2px}.announcement-detail-author{font-size:.85rem;font-weight:600;color:var(--text)}.announcement-detail-date{font-size:.72rem;color:var(--text-secondary)}.announcement-body{font-size:.85rem;line-height:1.7;color:var(--text);word-break:break-word}.announcement-body p{margin-bottom:.75em}.announcement-body a{color:var(--accent);text-decoration:underline}.announcement-body img{max-width:100%;height:auto;border-radius:4px;margin:.5em 0}.announcement-body ul,.announcement-body ol{padding-left:1.5em;margin-bottom:.75em}.announcement-body li{margin-bottom:.25em}.announcement-body h2,.announcement-body h3,.announcement-body h4{margin:1em 0 .5em;font-weight:600}.announcement-body h2{font-size:1.1rem}.announcement-body h3{font-size:1rem}.announcement-body table{width:100%;border-collapse:collapse;margin:.75em 0;font-size:.82rem}.announcement-body th,.announcement-body td{border:1px solid var(--border);padding:6px 10px;text-align:left}.announcement-body th{background:var(--tag-bg);font-weight:600}.announcement-body blockquote{border-left:3px solid var(--border);padding-left:12px;margin:.75em 0;color:var(--text-secondary)}.announcement-canvas-link{display:inline-flex;align-items:center;gap:5px;font-size:.78rem;font-weight:500;color:var(--accent);text-decoration:none;padding:6px 12px;border-radius:6px;border:1px solid var(--accent);background:var(--accent-light);margin-top:12px;transition:all .15s}.announcement-canvas-link:hover{background:var(--accent);color:#fff}.announcements-page .empty-state{display:flex;flex-direction:column;align-items:center;gap:12px;padding:4rem 2rem;color:var(--text-secondary);text-align:center}.announcements-page .empty-state svg{opacity:.3}.announcements-page .empty-state p{font-size:.9rem}.announcements-page .loading{text-align:center;padding:3rem;color:var(--text-secondary);display:flex;flex-direction:column;align-items:center;gap:12px}.announcements-page .loading .loading-spinner{width:24px;height:24px;border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.announcements-page .error{text-align:center;padding:2rem;color:#dc2626;background:#fef2f2;border-radius:8px;margin:1rem 0}@media(max-width:600px){.announcements-overview{gap:8px}.announcements-overview .overview-card{padding:12px 8px}.announcements-overview .overview-score{font-size:1.3rem}.announcements-filters{flex-direction:column}.announcement-card-left{flex-direction:column;align-items:flex-start;gap:4px}.announcement-title{white-space:normal}.announcements-tabs{width:100%}.announcements-tab{flex:1;justify-content:center}.announcement-preview{display:none}}.discussions-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 0;margin-bottom:.5rem;border-bottom:1px solid var(--border)}.discussions-header-left{display:flex;align-items:center;gap:1rem}.discussions-header h1{font-size:1.5rem;font-weight:700;color:var(--accent)}.discussions-count-badge{font-size:.7rem;font-weight:700;padding:3px 10px;border-radius:12px;background:var(--accent);color:#fff}.discussions-overview{display:flex;gap:12px;margin-bottom:1.25rem}.discussions-overview .overview-card{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:16px 12px;background:var(--card);border:1px solid var(--border);border-radius:10px}.discussions-overview .overview-label{font-size:.7rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.discussions-overview .overview-score{font-size:1.6rem;font-weight:700;line-height:1.2;color:var(--text)}.discussions-controls{display:flex;flex-direction:column;gap:10px;margin-bottom:1rem}.discussions-tabs{display:flex;gap:4px;background:var(--tag-bg);padding:3px;border-radius:8px;width:fit-content}.discussions-tab{display:flex;align-items:center;gap:6px;padding:6px 14px;border:none;background:none;font:inherit;font-size:.78rem;font-weight:500;color:var(--text-secondary);border-radius:6px;cursor:pointer;transition:all .15s}.discussions-tab:hover{color:var(--text)}.discussions-tab.active{background:var(--card);color:var(--text);box-shadow:0 1px 3px #00000014;font-weight:600}.discussions-tab .tab-badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:var(--accent);color:#fff;font-size:.65rem;font-weight:700}.discussions-filters{display:flex;gap:8px}.discussions-search{flex:1;padding:7px 12px;border:1px solid var(--border);border-radius:6px;font:inherit;font-size:.82rem;background:var(--card);color:var(--text);outline:none;transition:border-color .15s}.discussions-search:focus{border-color:var(--accent)}.discussions-search::placeholder{color:#aaa}.discussions-course-select{padding:7px 10px;border:1px solid var(--border);border-radius:6px;font:inherit;font-size:.82rem;background:var(--card);color:var(--text);cursor:pointer;outline:none}.discussions-result-count{font-size:.75rem;color:var(--text-secondary);margin-bottom:.75rem}.discussions-list{display:flex;flex-direction:column;gap:8px}.discussion-card{border:1px solid var(--border);border-left:3px solid;border-radius:8px;background:var(--card);transition:box-shadow .15s;overflow:hidden}.discussion-card:hover{box-shadow:0 2px 8px #0000000f}.discussion-card.expanded{box-shadow:0 2px 12px #00000014}.discussion-card-header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:12px 14px;border:none;background:none;cursor:pointer;text-align:left;font:inherit;color:inherit;gap:12px}.discussion-card-left{display:flex;align-items:center;gap:10px;min-width:0;flex:1}.discussion-course-badge{font-size:.72rem;font-weight:700;padding:3px 10px;border-radius:4px;white-space:nowrap;letter-spacing:.02em;flex-shrink:0}.discussion-card-info{display:flex;flex-direction:column;gap:3px;min-width:0}.discussion-title{font-size:.88rem;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.discussion-meta{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.discussion-author-avatar{width:18px;height:18px;border-radius:50%;object-fit:cover;flex-shrink:0}.discussion-author{font-size:.72rem;font-weight:500;color:var(--text-secondary)}.discussion-time{font-size:.68rem;color:var(--text-secondary)}.discussion-time:before{content:"·";margin-right:6px}.discussion-reply-count{display:inline-flex;align-items:center;gap:3px;font-size:.68rem;color:var(--text-secondary);padding:1px 6px;background:var(--tag-bg);border-radius:10px}.discussion-unread-badge{font-size:.62rem;font-weight:700;padding:2px 7px;border-radius:10px;background:var(--accent);color:#fff}.discussion-card-right{display:flex;align-items:center;gap:10px;flex-shrink:0}.discussion-card .chevron{font-size:.7rem;color:var(--text-secondary);transition:transform .15s;display:inline-block}.discussion-card .chevron.open{transform:rotate(180deg)}.discussion-preview{font-size:.76rem;color:var(--text-secondary);padding:0 14px 12px;line-height:1.4}.discussion-detail{border-top:1px solid var(--border);padding:16px;animation:discussionSlideDown .15s ease-out}@keyframes discussionSlideDown{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.discussion-detail-header{display:flex;align-items:center;gap:10px;margin-bottom:14px;padding-bottom:12px;border-bottom:1px solid var(--border)}.discussion-detail-avatar{width:36px;height:36px;border-radius:50%;object-fit:cover;flex-shrink:0}.discussion-detail-author-info{display:flex;flex-direction:column;gap:2px}.discussion-detail-author{font-size:.85rem;font-weight:600;color:var(--text)}.discussion-detail-date{font-size:.72rem;color:var(--text-secondary)}.discussion-body{font-size:.85rem;line-height:1.7;color:var(--text);word-break:break-word;margin-bottom:16px}.discussion-body p{margin-bottom:.75em}.discussion-body a{color:var(--accent);text-decoration:underline}.discussion-body img{max-width:100%;height:auto;border-radius:4px;margin:.5em 0}.discussion-body ul,.discussion-body ol{padding-left:1.5em;margin-bottom:.75em}.discussion-body li{margin-bottom:.25em}.discussion-body h2,.discussion-body h3,.discussion-body h4{margin:1em 0 .5em;font-weight:600}.discussion-body h2{font-size:1.1rem}.discussion-body h3{font-size:1rem}.discussion-body table{width:100%;border-collapse:collapse;margin:.75em 0;font-size:.82rem}.discussion-body th,.discussion-body td{border:1px solid var(--border);padding:6px 10px;text-align:left}.discussion-body th{background:var(--tag-bg);font-weight:600}.discussion-body blockquote{border-left:3px solid var(--border);padding-left:12px;margin:.75em 0;color:var(--text-secondary)}.discussion-thread{border-top:1px solid var(--border);padding-top:14px;margin-top:4px}.thread-header{display:flex;align-items:center;gap:6px;font-size:.78rem;font-weight:600;color:var(--text-secondary);margin-bottom:12px}.thread-loading{display:flex;align-items:center;gap:8px;font-size:.78rem;color:var(--text-secondary);padding:12px 0}.thread-empty{font-size:.78rem;color:var(--text-secondary);padding:8px 0;font-style:italic}.discussion-entry{padding:10px 12px;border-left:2px solid var(--border);margin-bottom:8px;background:var(--bg);border-radius:0 6px 6px 0}.entry-header{display:flex;align-items:center;gap:8px;margin-bottom:6px}.entry-avatar{width:22px;height:22px;border-radius:50%;object-fit:cover;flex-shrink:0}.entry-author{font-size:.78rem;font-weight:600;color:var(--text)}.entry-time{font-size:.68rem;color:var(--text-secondary)}.entry-body{font-size:.82rem;line-height:1.6;color:var(--text);word-break:break-word}.entry-body p{margin-bottom:.5em}.entry-body a{color:var(--accent);text-decoration:underline}.entry-body img{max-width:100%;height:auto;border-radius:4px}.entry-deleted{font-size:.78rem;color:var(--text-secondary);font-style:italic}.entry-replies{margin-top:8px}.discussion-canvas-link{display:inline-flex;align-items:center;gap:5px;font-size:.78rem;font-weight:500;color:var(--accent);text-decoration:none;padding:6px 12px;border-radius:6px;border:1px solid var(--accent);background:var(--accent-light);margin-top:12px;transition:all .15s}.discussion-canvas-link:hover{background:var(--accent);color:#fff}.discussions-page .empty-state{display:flex;flex-direction:column;align-items:center;gap:12px;padding:4rem 2rem;color:var(--text-secondary);text-align:center}.discussions-page .empty-state svg{opacity:.3}.discussions-page .empty-state p{font-size:.9rem}.discussions-page .loading{text-align:center;padding:3rem;color:var(--text-secondary);display:flex;flex-direction:column;align-items:center;gap:12px}.discussions-page .loading .loading-spinner{width:24px;height:24px;border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}.discussions-page .error{text-align:center;padding:2rem;color:#dc2626;background:#fef2f2;border-radius:8px;margin:1rem 0}@media(max-width:600px){.discussions-overview{gap:8px;flex-wrap:wrap}.discussions-overview .overview-card{padding:12px 8px;min-width:calc(50% - 6px)}.discussions-overview .overview-score{font-size:1.3rem}.discussions-filters{flex-direction:column}.discussion-card-left{flex-direction:column;align-items:flex-start;gap:4px}.discussion-title{white-space:normal}.discussions-tabs{width:100%}.discussions-tab{flex:1;justify-content:center}.discussion-preview{display:none}.discussion-entry{margin-left:0!important}}.quizzes-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 0;margin-bottom:.5rem;border-bottom:1px solid var(--border)}.quizzes-header-left{display:flex;align-items:center;gap:1rem}.quizzes-header h1{font-size:1.5rem;font-weight:700;color:var(--accent)}.quizzes-overview{display:flex;gap:12px;margin-bottom:1rem}.quizzes-page .overview-card{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:14px 10px;background:var(--card);border:1px solid var(--border);border-radius:10px}.quizzes-page .overview-label{font-size:.65rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.quizzes-page .overview-score{font-size:1.4rem;font-weight:700;line-height:1.2}.quizzes-page .overview-count{color:var(--text)}.quizzes-tabs{display:flex;gap:4px;margin-bottom:1rem;overflow-x:auto;-webkit-overflow-scrolling:touch}.quizzes-controls{display:flex;gap:8px;margin-bottom:1rem}.quizzes-search{flex:1;padding:8px 12px;border:1px solid var(--border);border-radius:8px;font-size:.85rem;background:var(--card);color:var(--text);outline:none;transition:border-color .15s}.quizzes-search:focus{border-color:var(--accent)}.quizzes-sort,.quizzes-course-filter{padding:8px 12px;border:1px solid var(--border);border-radius:8px;font-size:.8rem;background:var(--card);color:var(--text);cursor:pointer;outline:none}.quizzes-sort:focus,.quizzes-course-filter:focus{border-color:var(--accent)}.quizzes-list{display:flex;flex-direction:column;gap:8px}.quiz-card{border:1px solid var(--border);border-left:3px solid;border-radius:8px;background:var(--card);transition:box-shadow .15s;overflow:hidden}.quiz-card:hover{box-shadow:0 2px 8px #0000000f}.quiz-card-header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:12px 14px;border:none;background:none;cursor:pointer;text-align:left;gap:12px}.quiz-card-left{display:flex;align-items:flex-start;gap:10px;flex:1;min-width:0}.quiz-course-badge{flex-shrink:0;padding:3px 8px;border-radius:4px;font-size:.7rem;font-weight:700;letter-spacing:.02em}.quiz-info{display:flex;flex-direction:column;gap:3px;min-width:0}.quiz-title{font-size:.88rem;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.quiz-meta{display:flex;align-items:center;gap:8px;font-size:.75rem;color:var(--text-secondary);flex-wrap:wrap}.quiz-due{font-weight:500}.quiz-questions,.quiz-points{padding:1px 6px;background:var(--tag-bg);border-radius:4px;font-weight:600}.quiz-duration{padding:1px 6px;background:#dbeafe;color:#1e40af;border-radius:4px;font-weight:600}.quiz-type{opacity:.7;font-style:italic}.quiz-card-right{display:flex;align-items:center;gap:8px;flex-shrink:0}.quiz-status{padding:3px 10px;border-radius:12px;font-size:.7rem;font-weight:600}.quiz-status.available{background:#dbeafe;color:#1e40af}.quiz-status.submitted,.quiz-status.completed{background:#dcfce7;color:#166534}.quiz-status.past-due{background:#fef2f2;color:#991b1b}.quiz-status.closed{background:var(--tag-bg);color:var(--text-secondary)}.quiz-status.locked{background:#fef3c7;color:#92400e}.quiz-status.not-yet{background:#f3e8ff;color:#6b21a8}.quiz-details{padding:12px 14px 14px;border-top:1px solid var(--border);margin-top:0;animation:quizSlideDown .15s ease-out}@keyframes quizSlideDown{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.quiz-detail-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px;margin-bottom:12px}.quiz-details .detail-item{display:flex;flex-direction:column;gap:2px}.quiz-details .detail-item.score-item{grid-column:span 2}.quiz-details .detail-label{font-size:.7rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.03em}.quiz-details .detail-value{font-size:.85rem;color:var(--text);font-weight:500}.quiz-details .score-value{font-size:1.1rem;font-weight:700;color:var(--accent)}.score-pct{font-size:.85rem;font-weight:600;opacity:.8}.quiz-description{margin-top:10px;padding:12px;background:var(--bg);border-radius:8px;border:1px solid var(--border);max-height:300px;overflow-y:auto}.quiz-description .description-content{font-size:.82rem;line-height:1.6;color:var(--text)}.quiz-description .description-content h1,.quiz-description .description-content h2,.quiz-description .description-content h3,.quiz-description .description-content h4{margin:.5em 0 .3em;font-size:.9rem;font-weight:700}.quiz-description .description-content p{margin:.4em 0}.quiz-description .description-content ul,.quiz-description .description-content ol{margin:.4em 0;padding-left:1.5em}.quiz-description .description-content a{color:var(--accent);text-decoration:none}.quiz-description .description-content a:hover{text-decoration:underline}.quiz-canvas-link{display:inline-flex;align-items:center;gap:6px;margin-top:10px;padding:8px 14px;background:var(--accent);color:#fff;border-radius:6px;font-size:.8rem;font-weight:600;text-decoration:none;transition:opacity .15s}.quiz-canvas-link:hover{opacity:.9}.quiz-detail-error{padding:1rem;text-align:center;color:var(--text-secondary);font-size:.85rem}.quiz-details-loading{display:flex;flex-direction:column;gap:8px}.detail-skeleton{height:20px;width:80%;background:var(--border);border-radius:4px;animation:skeletonPulse 1.2s ease-in-out infinite}.detail-skeleton.short{width:50%}@keyframes skeletonPulse{0%,to{opacity:.4}50%{opacity:.8}}.quizzes-page .empty-state{display:flex;flex-direction:column;align-items:center;gap:12px;padding:3rem 1rem;color:var(--text-secondary)}.quizzes-page .loading,.quizzes-page .error{padding:2rem;text-align:center;color:var(--text-secondary)}.quizzes-page .error{color:#dc2626}@media(max-width:640px){.quizzes-overview{flex-wrap:wrap}.quizzes-page .overview-card{min-width:calc(50% - 8px)}.quizzes-controls{flex-direction:column}.quiz-card-header{flex-direction:column;align-items:flex-start;gap:8px}.quiz-card-right{align-self:flex-end}.quiz-detail-grid{grid-template-columns:1fr}.quiz-details .detail-item.score-item{grid-column:span 1}}.syllabus-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 0;margin-bottom:.5rem;border-bottom:1px solid var(--border)}.syllabus-header-left{display:flex;align-items:center;gap:1rem}.syllabus-header h1{font-size:1.5rem;font-weight:700;color:var(--accent)}.syllabus-search{position:relative;margin-bottom:.75rem}.syllabus-search .search-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--text-secondary);pointer-events:none}.syllabus-search .search-input{width:100%;padding:10px 36px 10px 38px;border:1px solid var(--border);border-radius:8px;font-size:.85rem;font-family:inherit;background:var(--card);color:var(--text);outline:none;transition:border-color .15s}.syllabus-search .search-input:focus{border-color:var(--accent)}.syllabus-search .search-input::placeholder{color:var(--text-secondary)}.syllabus-search .search-clear{position:absolute;right:8px;top:50%;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;width:24px;height:24px;border:none;background:none;cursor:pointer;color:var(--text-secondary);border-radius:4px}.syllabus-search .search-clear:hover{color:var(--text);background:var(--tag-bg)}.syllabus-summary{margin-bottom:.75rem}.syllabus-summary .summary-stat{font-size:.78rem;color:var(--text-secondary)}.syllabus-list{display:flex;flex-direction:column;gap:8px}.syllabus-card{border:1px solid var(--border);border-left:3px solid;border-radius:8px;background:var(--card);transition:box-shadow .15s;overflow:hidden}.syllabus-card:hover{box-shadow:0 2px 8px #0000000f}.syllabus-card.expanded{box-shadow:0 2px 12px #00000014}.syllabus-card-header{display:flex;align-items:flex-start;justify-content:space-between;width:100%;padding:14px;border:none;background:none;cursor:pointer;text-align:left;font:inherit;color:inherit}.syllabus-card-left{display:flex;align-items:flex-start;gap:10px;min-width:0;flex:1}.syllabus-badge{font-size:.72rem;font-weight:700;padding:3px 10px;border-radius:4px;white-space:nowrap;letter-spacing:.02em;flex-shrink:0;margin-top:1px}.syllabus-card-info{display:flex;flex-direction:column;gap:4px;min-width:0}.syllabus-course-name{font-size:.88rem;font-weight:500;color:var(--text)}.syllabus-preview{font-size:.76rem;color:var(--text-secondary);line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.syllabus-card-right{display:flex;align-items:center;gap:8px;flex-shrink:0;margin-top:2px}.canvas-link{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;color:var(--text-secondary);transition:all .15s}.canvas-link:hover{color:var(--accent);background:var(--accent-light)}.syllabus-card .chevron{font-size:.7rem;color:var(--text-secondary);transition:transform .15s;display:inline-block}.syllabus-card .chevron.open{transform:rotate(180deg)}.syllabus-body{border-top:1px solid var(--border);padding:20px;animation:syllabusSlideDown .15s ease-out}@keyframes syllabusSlideDown{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.syllabus-content{font-size:.85rem;line-height:1.65;color:var(--text);word-wrap:break-word;overflow-wrap:break-word}.syllabus-content h1,.syllabus-content h2,.syllabus-content h3,.syllabus-content h4{margin-top:1em;margin-bottom:.5em;font-weight:600;line-height:1.3}.syllabus-content h1{font-size:1.2rem}.syllabus-content h2{font-size:1.1rem}.syllabus-content h3{font-size:1rem}.syllabus-content h4{font-size:.9rem}.syllabus-content p{margin-bottom:.75em}.syllabus-content a{color:var(--accent);text-decoration:none}.syllabus-content a:hover{text-decoration:underline}.syllabus-content ul,.syllabus-content ol{padding-left:1.5em;margin-bottom:.75em}.syllabus-content li{margin-bottom:.3em}.syllabus-content table{border-collapse:collapse;width:100%;margin-bottom:1em;font-size:.82rem}.syllabus-content table th,.syllabus-content table td{border:1px solid var(--border);padding:6px 10px;text-align:left}.syllabus-content table th{background:var(--tag-bg);font-weight:600}.syllabus-content img{max-width:100%;height:auto;border-radius:4px}.syllabus-content blockquote{border-left:3px solid var(--border);padding-left:12px;margin:.75em 0;color:var(--text-secondary)}.syllabus-content pre,.syllabus-content code{background:var(--tag-bg);border-radius:4px;font-size:.82rem}.syllabus-content pre{padding:10px 14px;overflow-x:auto;margin-bottom:.75em}.syllabus-content code{padding:1px 5px}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:4rem 2rem;text-align:center;color:var(--text-secondary)}.empty-icon{margin-bottom:1rem;opacity:.4}.empty-state p{font-size:.9rem}.syllabus-page .loading{text-align:center;padding:3rem;color:var(--text-secondary)}.syllabus-page .error{text-align:center;padding:2rem;color:#dc2626;background:#fef2f2;border-radius:8px;margin:1rem 0}@media(max-width:600px){.syllabus-course-name{font-size:.82rem}.syllabus-preview{-webkit-line-clamp:1}.syllabus-body{padding:16px 12px}.syllabus-badge{font-size:.78rem}}.cd-page{max-width:100%}.cd-header{display:flex;align-items:center;padding:1rem 0;margin-bottom:.5rem;border-bottom:1px solid var(--border)}.cd-header .back-link{display:flex;align-items:center;gap:4px;font-size:.8rem;color:var(--text-secondary);text-decoration:none;padding:4px 8px;border-radius:6px;transition:all .15s}.cd-header .back-link:hover{color:var(--accent);background:var(--accent-light)}.cd-hero{border:1px solid var(--border);border-left:4px solid;border-radius:10px;background:var(--card);padding:1.25rem 1.5rem;margin-bottom:1rem}.cd-hero-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:.5rem}.cd-hero-badge{font-size:.78rem;font-weight:700;padding:4px 14px;border-radius:6px;letter-spacing:.03em}.cd-canvas-link{display:inline-flex;align-items:center;gap:4px;font-size:.75rem;color:var(--text-secondary);text-decoration:none;padding:4px 10px;border:1px solid var(--border);border-radius:6px;transition:all .15s}.cd-canvas-link:hover{color:var(--accent);border-color:var(--accent)}.cd-hero-title{font-size:1.4rem;font-weight:700;color:var(--text);line-height:1.3}.cd-hero-code{font-size:.75rem;color:var(--text-secondary);margin-top:.25rem;display:block}.cd-tabs{display:flex;gap:2px;padding:3px;background:var(--tag-bg);border-radius:8px;margin-bottom:1rem;overflow-x:auto;-webkit-overflow-scrolling:touch}.cd-tab{display:flex;align-items:center;gap:6px;padding:7px 16px;border:none;border-radius:6px;background:transparent;font-size:.8rem;font-weight:500;color:var(--text-secondary);cursor:pointer;transition:all .15s;white-space:nowrap}.cd-tab:hover{color:var(--text)}.cd-tab.active{background:var(--card);color:var(--text);box-shadow:0 1px 3px #00000014}.cd-tab-badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:#dc2626;color:#fff;font-size:.65rem;font-weight:700}.cd-stats-row{display:flex;gap:12px;margin-bottom:1.25rem}.cd-stat-card{flex:1;padding:1rem 1.25rem;background:var(--card);border:1px solid var(--border);border-radius:10px;text-align:center}.cd-stat-card.cd-stat-alert{border-color:#fecaca;background:#fff5f5}.cd-stat-value{font-size:1.75rem;font-weight:700;line-height:1.2}.cd-stat-value.cd-stat-overdue{color:#dc2626}.cd-stat-label{font-size:.82rem;font-weight:600;color:var(--text);margin-top:.15rem}.cd-stat-sub{font-size:.7rem;color:var(--text-secondary);margin-top:.15rem}.cd-section{background:var(--card);border:1px solid var(--border);border-radius:10px;margin-bottom:1rem;overflow:hidden}.cd-section-header{display:flex;align-items:center;justify-content:space-between;padding:.75rem 1rem;border-bottom:1px solid var(--border)}.cd-section-header h3{font-size:.9rem;font-weight:600}.cd-section-link{font-size:.75rem;color:var(--accent);text-decoration:none;background:none;border:none;cursor:pointer;font-weight:500}.cd-section-link:hover{text-decoration:underline}.cd-assign-list{display:flex;flex-direction:column}.cd-assign-row{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid #f5f5f5;transition:background .1s}.cd-assign-row:last-child{border-bottom:none}.cd-assign-row:hover{background:#fafafa}.cd-assign-row.cd-assign-overdue{background:#fff5f5}.cd-assign-row.cd-assign-overdue:hover{background:#fef2f2}.cd-assign-left{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.cd-assign-name{font-size:.82rem;font-weight:500;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cd-assign-meta{font-size:.72rem;color:var(--text-secondary)}.cd-assign-right{display:flex;align-items:center;gap:6px;flex-shrink:0;margin-left:8px}.cd-assign-status{font-size:.68rem;font-weight:600;padding:2px 8px;border-radius:10px}.cd-assign-status.submitted{background:#dbeafe;color:#1d4ed8}.cd-assign-status.graded{background:#dcfce7;color:#15803d}.cd-assign-status.excused{background:var(--tag-bg);color:var(--text-secondary)}.cd-overdue-badge{font-size:.68rem;font-weight:600;padding:2px 8px;border-radius:10px;background:#dc2626;color:#fff}.cd-syllabus-preview{padding:1rem;font-size:.82rem;line-height:1.6;max-height:400px;overflow-y:auto;color:var(--text)}.cd-syllabus-preview table{width:100%;border-collapse:collapse;font-size:.78rem}.cd-syllabus-preview th,.cd-syllabus-preview td{padding:6px 10px;border:1px solid var(--border);text-align:left}.cd-syllabus-preview th{background:var(--tag-bg);font-weight:600}.cd-syllabus-preview a{color:var(--accent)}.cd-syllabus-preview img{max-width:100%;height:auto}.cd-syllabus-preview ul,.cd-syllabus-preview ol{padding-left:1.5rem}.cd-syllabus-preview p{margin-bottom:.5rem}.cd-module-card{border:1px solid var(--border);border-radius:8px;background:var(--card);margin-bottom:8px;overflow:hidden}.cd-module-header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:12px 14px;border:none;background:none;cursor:pointer;text-align:left;font:inherit;color:inherit}.cd-module-left{display:flex;flex-direction:column;gap:6px;flex:1;min-width:0}.cd-module-name{font-size:.85rem;font-weight:600;color:var(--text)}.cd-module-progress{display:flex;align-items:center;gap:8px}.cd-module-bar-track{flex:1;height:4px;background:var(--tag-bg);border-radius:2px;max-width:120px}.cd-module-bar-fill{height:100%;border-radius:2px;transition:width .3s}.cd-module-progress-text{font-size:.68rem;color:var(--text-secondary)}.cd-module-items{border-top:1px solid var(--border);animation:cdSlideDown .15s ease-out}@keyframes cdSlideDown{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.cd-module-item{display:flex;align-items:center;gap:8px;padding:8px 14px 8px 24px;border-bottom:1px solid #f5f5f5;font-size:.8rem}.cd-module-item:last-child{border-bottom:none}.cd-module-item-type{font-size:.65rem;font-weight:600;text-transform:uppercase;color:var(--text-secondary);min-width:60px;letter-spacing:.03em}.cd-module-item-title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cd-module-item-title a{color:var(--text);text-decoration:none}.cd-module-item-title a:hover{color:var(--accent)}.cd-module-check{flex-shrink:0}.cd-announcement-card{border:1px solid var(--border);border-radius:8px;background:var(--card);margin-bottom:8px;overflow:hidden}.cd-announcement-header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:12px 14px;border:none;background:none;cursor:pointer;text-align:left;font:inherit;color:inherit}.cd-announcement-left{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.cd-announcement-title{font-size:.85rem;font-weight:500;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cd-announcement-meta{font-size:.72rem;color:var(--text-secondary)}.cd-announcement-body{padding:12px 14px 14px;font-size:.82rem;line-height:1.6;border-top:1px solid #f5f5f5;animation:cdSlideDown .15s ease-out}.cd-announcement-body a{color:var(--accent)}.cd-announcement-body img{max-width:100%;height:auto}.cd-discussion-card{border:1px solid var(--border);border-radius:8px;background:var(--card);margin-bottom:8px;overflow:hidden}.cd-discussion-header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:12px 14px;border:none;background:none;cursor:pointer;text-align:left;font:inherit;color:inherit}.cd-discussion-left{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.cd-discussion-title{font-size:.85rem;font-weight:500;color:var(--text)}.cd-discussion-meta{font-size:.72rem;color:var(--text-secondary)}.cd-discussion-right{display:flex;align-items:center;gap:8px;flex-shrink:0}.cd-unread-badge{font-size:.65rem;font-weight:700;padding:2px 7px;border-radius:9px;color:#fff;min-width:20px;text-align:center}.cd-discussion-body{padding:12px 14px 14px;font-size:.82rem;line-height:1.6;border-top:1px solid #f5f5f5;animation:cdSlideDown .15s ease-out}.cd-discussion-body a{color:var(--accent)}.cd-files-list{display:flex;flex-direction:column}.cd-file-row{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border:1px solid var(--border);border-radius:8px;background:var(--card);margin-bottom:6px;text-decoration:none;color:inherit;transition:all .15s}.cd-file-row:hover{border-color:var(--accent);box-shadow:0 1px 4px #0000000f}.cd-file-row svg{color:var(--text-secondary);flex-shrink:0}.cd-file-left{display:flex;align-items:center;gap:10px;min-width:0;flex:1}.cd-file-icon{font-size:.6rem;font-weight:700;padding:4px 8px;border-radius:4px;background:var(--tag-bg);color:var(--text-secondary);min-width:40px;text-align:center;letter-spacing:.02em}.cd-file-pdf{background:#fef2f2;color:#dc2626}.cd-file-doc{background:#eff6ff;color:#2563eb}.cd-file-ppt{background:#fff7ed;color:#ea580c}.cd-file-xls{background:#ecfdf5;color:#059669}.cd-file-img{background:#faf5ff;color:#7c3aed}.cd-file-vid{background:#fdf4ff;color:#c026d3}.cd-file-zip{background:#f0fdf4;color:#16a34a}.cd-file-info{display:flex;flex-direction:column;gap:1px;min-width:0}.cd-file-name{font-size:.82rem;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cd-file-meta{font-size:.7rem;color:var(--text-secondary)}.cd-people-summary{display:flex;gap:12px;margin-bottom:1rem}.cd-people-count{font-size:.78rem;font-weight:600;color:var(--text-secondary);padding:4px 12px;background:var(--tag-bg);border-radius:16px}.cd-people-section{margin-bottom:1.5rem}.cd-people-section-title{font-size:.82rem;font-weight:600;color:var(--text-secondary);margin-bottom:.75rem;text-transform:uppercase;letter-spacing:.04em}.cd-people-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px}.cd-person-card{display:flex;align-items:center;gap:10px;padding:10px 12px;background:var(--card);border:1px solid var(--border);border-radius:8px}.cd-person-avatar{width:36px;height:36px;border-radius:50%;object-fit:cover;flex-shrink:0}.cd-person-avatar-placeholder{display:flex;align-items:center;justify-content:center;background:var(--tag-bg);color:var(--text-secondary);font-weight:600;font-size:.85rem}.cd-person-info{display:flex;flex-direction:column;min-width:0}.cd-person-name{font-size:.8rem;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cd-person-bio{font-size:.68rem;color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cd-loading{padding:2rem 0}.cd-skeleton-hero{height:100px;border-radius:10px;background:linear-gradient(90deg,#f0f0f0 25%,#e0e0e0,#f0f0f0 75%);background-size:200% 100%;animation:cdShimmer 1.5s infinite;margin-bottom:1rem}.cd-skeleton-grid{display:flex;gap:12px;margin-bottom:1rem}.cd-skeleton-card{flex:1;height:80px;border-radius:10px;background:linear-gradient(90deg,#f0f0f0 25%,#e0e0e0,#f0f0f0 75%);background-size:200% 100%;animation:cdShimmer 1.5s infinite}.cd-tab-skeleton{padding:1rem}.cd-skel-line{height:12px;border-radius:4px;background:linear-gradient(90deg,#f0f0f0 25%,#e0e0e0,#f0f0f0 75%);background-size:200% 100%;animation:cdShimmer 1.5s infinite;margin-bottom:10px}.cd-skel-line.full{width:100%}.cd-skel-line.med{width:65%}.cd-skel-line.short{width:40%}@keyframes cdShimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.cd-empty{text-align:center;padding:2.5rem 1rem;font-size:.85rem;color:var(--text-secondary)}.cd-error{text-align:center;padding:2rem;color:#dc2626;background:#fef2f2;border-radius:8px;margin:1rem 0}.cd-page .chevron{font-size:.7rem;color:var(--text-secondary);transition:transform .15s;display:inline-block;flex-shrink:0}.cd-page .chevron.open{transform:rotate(180deg)}@media(max-width:600px){.cd-hero{padding:1rem}.cd-hero-title{font-size:1.15rem}.cd-stats-row{flex-direction:column}.cd-tabs{gap:1px}.cd-tab{padding:6px 10px;font-size:.72rem}.cd-assign-name{max-width:200px}.cd-people-grid{grid-template-columns:1fr}.cd-file-name{max-width:180px}}.bookmarks-page{max-width:700px}.bk-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 0;margin-bottom:.5rem;border-bottom:1px solid var(--border)}.bk-header-left{display:flex;align-items:center;gap:1rem}.bk-header h1{font-size:1.5rem;font-weight:700;color:var(--text)}.bk-header .back-link{display:flex;align-items:center;gap:4px;font-size:.8rem;color:var(--text-secondary);text-decoration:none}.bk-header .back-link:hover{color:var(--accent)}.bk-add-btn{display:flex;align-items:center;gap:6px;padding:6px 14px;border:1px solid var(--accent);border-radius:8px;background:var(--accent);color:#fff;font-size:.82rem;font-weight:600;cursor:pointer;transition:all .15s}.bk-add-btn:hover{opacity:.9}.bk-add-form{display:flex;gap:.5rem;padding:.75rem;background:var(--card);border:1px solid var(--border);border-radius:10px;margin-bottom:1rem;animation:slideDown .15s ease-out}@keyframes slideDown{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.bk-add-form input{flex:1;padding:8px 12px;border:1px solid var(--border);border-radius:6px;font-size:.85rem;background:var(--bg);color:var(--text);min-width:0}.bk-add-form input:focus{outline:none;border-color:var(--accent)}.bk-add-form button{padding:8px 16px;background:var(--accent);color:#fff;border:none;border-radius:6px;font-size:.82rem;font-weight:600;cursor:pointer;white-space:nowrap;transition:opacity .15s}.bk-add-form button:disabled{opacity:.5;cursor:not-allowed}.bk-overview{display:flex;gap:.75rem;margin-bottom:1rem}.bk-overview-card{flex:1;padding:1rem;background:var(--card);border:1px solid var(--border);border-radius:10px;text-align:center}.bk-overview-number{font-size:1.5rem;font-weight:700;color:var(--text)}.bk-overview-label{font-size:.75rem;color:var(--text-secondary);margin-top:2px}.bk-search-bar{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;background:var(--card);border:1px solid var(--border);border-radius:8px;margin-bottom:1rem}.bk-search-bar svg{color:var(--text-secondary);flex-shrink:0}.bk-search-bar input{flex:1;border:none;background:none;font-size:.85rem;color:var(--text);outline:none}.bk-loading{text-align:center;padding:3rem;color:var(--text-secondary)}.bk-error{text-align:center;padding:1rem;color:#dc2626;background:#fef2f2;border-radius:8px;margin:1rem 0;font-size:.85rem}.bk-empty{text-align:center;padding:3rem 1rem;color:var(--text-secondary)}.bk-empty-icon{margin-bottom:1rem;opacity:.3}.bk-empty p{font-size:.95rem}.bk-empty-hint{font-size:.82rem;margin-top:.25rem}.bk-empty-add{margin-top:1rem;padding:8px 20px;background:var(--accent);color:#fff;border:none;border-radius:8px;font-size:.85rem;font-weight:600;cursor:pointer}.bk-list{display:flex;flex-direction:column;gap:.5rem}.bk-card{display:flex;align-items:center;gap:.75rem;padding:.75rem 1rem;background:var(--card);border:1px solid var(--border);border-radius:10px;transition:border-color .15s}.bk-card:hover{border-color:#ccc}.bk-card-icon{flex-shrink:0;width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:var(--bg);border-radius:8px;color:var(--text-secondary)}.bk-card-icon img{border-radius:4px}.bk-card-content{flex:1;min-width:0}.bk-card-name{font-size:.9rem;font-weight:600;color:var(--text);text-decoration:none;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bk-card-name:hover{color:var(--accent)}.bk-card-meta{display:flex;align-items:center;gap:.5rem;margin-top:2px}.bk-card-domain{font-size:.75rem;color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bk-tag{font-size:.65rem;font-weight:700;padding:1px 6px;border-radius:4px;text-transform:uppercase;letter-spacing:.03em;white-space:nowrap}.canvas-tag{background:#fef2f2;color:var(--accent)}.bk-card-delete{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;background:none;color:var(--text-secondary);cursor:pointer;border-radius:6px;opacity:0;transition:all .15s}.bk-card:hover .bk-card-delete{opacity:1}.bk-card-delete:hover{background:#fef2f2;color:#dc2626}.bk-card-delete:disabled{opacity:.3;cursor:not-allowed}@media(max-width:600px){.bk-add-form{flex-direction:column}.bk-card-delete{opacity:1}}.calc-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 0;margin-bottom:.5rem;border-bottom:1px solid var(--border)}.calc-header-left{display:flex;align-items:center;gap:1rem}.calc-header h1{font-size:1.5rem;font-weight:700;color:var(--accent)}.calc-overview{display:flex;gap:12px;margin-bottom:1rem}.calc-overview .overview-card{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:16px 12px;background:var(--card);border:1px solid var(--border);border-radius:10px}.calc-overview .overview-card-projected{border-color:#c7d2fe;background:#f5f3ff}.calc-overview .overview-label{font-size:.7rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.calc-overview .overview-score{font-size:1.6rem;font-weight:700;line-height:1.2}.calc-overview .overview-count{color:var(--text)}.calc-overview .overview-grade{font-size:.85rem;font-weight:700}.overview-diff{font-size:.8rem;font-weight:700;border-radius:4px;padding:1px 6px}.overview-diff.up{color:#059669;background:#ecfdf5}.overview-diff.down{color:#dc2626;background:#fef2f2}.calc-hint{font-size:.8rem;color:var(--text-secondary);margin-bottom:1rem;line-height:1.4}.calc-courses{display:flex;flex-direction:column;gap:8px}.calc-card{border:1px solid var(--border);border-left:3px solid;border-radius:8px;background:var(--card);transition:box-shadow .15s;overflow:hidden}.calc-card:hover{box-shadow:0 2px 8px #0000000f}.calc-card.expanded{box-shadow:0 2px 12px #00000014}.calc-card-header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:12px 14px;border:none;background:none;cursor:pointer;text-align:left;font:inherit;color:inherit}.calc-card-left{display:flex;align-items:center;gap:10px;min-width:0}.calc-badge{font-size:.72rem;font-weight:700;padding:3px 10px;border-radius:4px;white-space:nowrap;letter-spacing:.02em}.calc-card-info{display:flex;flex-direction:column;gap:1px;min-width:0}.calc-card-name{font-size:.88rem;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.calc-card-meta{font-size:.68rem;color:var(--text-secondary)}.calc-card-right{display:flex;align-items:center;gap:12px;flex-shrink:0}.calc-card-grades{display:flex;align-items:center;gap:6px}.calc-current-score{font-size:1.05rem;font-weight:700}.calc-diff{font-size:.72rem;font-weight:700;padding:1px 5px;border-radius:4px}.calc-diff.up{color:#059669;background:#ecfdf5}.calc-diff.down{color:#dc2626;background:#fef2f2}.calc-no-grade{font-size:.78rem;color:var(--text-secondary);font-style:italic}.calc-card .chevron{font-size:.7rem;color:var(--text-secondary);transition:transform .15s;display:inline-block}.calc-card .chevron.open{transform:rotate(180deg)}.calc-details{border-top:1px solid var(--border);animation:calcSlideDown .15s ease-out}@keyframes calcSlideDown{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.calc-loading{padding:16px}.calc-loading .skeleton-line{height:12px;border-radius:4px;background:linear-gradient(90deg,#f0f0f0 25%,#e0e0e0,#f0f0f0 75%);background-size:200% 100%;animation:calcShimmer 1.5s infinite;margin-bottom:10px}.calc-loading .skeleton-line.full{width:100%}.calc-loading .skeleton-line.medium{width:60%}@keyframes calcShimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.calc-empty{padding:20px 16px;text-align:center;font-size:.82rem;color:var(--text-secondary)}.calc-tools{display:flex;gap:16px;padding:14px 16px;background:#f9fafb;border-bottom:1px solid var(--border);flex-wrap:wrap}.calc-tool-group{display:flex;flex-direction:column;gap:4px}.calc-tool-label{font-size:.68rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.04em}.calc-tool-input-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.calc-tool-input{width:72px;padding:5px 8px;border:1px solid var(--border);border-radius:6px;font-size:.82rem;font-family:inherit;background:var(--card);color:var(--text);outline:none;transition:border-color .15s}.calc-tool-input:focus{border-color:var(--accent);box-shadow:0 0 0 2px #2563eb1a}.calc-tool-unit{font-size:.78rem;color:var(--text-secondary);font-weight:600}.calc-needed{font-size:.75rem;font-weight:600;padding:3px 8px;border-radius:4px;background:#f0fdf4;color:#15803d}.calc-needed.impossible{background:#fef2f2;color:#dc2626}.calc-btn{padding:5px 12px;border:1px solid var(--border);border-radius:6px;font-size:.75rem;font-weight:600;cursor:pointer;font-family:inherit;transition:all .12s}.calc-btn:disabled{opacity:.4;cursor:not-allowed}.calc-btn-fill{background:var(--accent);color:#fff;border-color:var(--accent)}.calc-btn-fill:hover:not(:disabled){opacity:.9}.calc-btn-reset{background:var(--card);color:var(--text-secondary)}.calc-btn-reset:hover{background:#f3f4f6;color:var(--text)}.calc-summary-bar{display:flex;align-items:center;gap:12px;padding:12px 16px;background:linear-gradient(135deg,#f0f4ff,#faf5ff);border-bottom:1px solid var(--border);flex-wrap:wrap}.calc-summary-item{display:flex;flex-direction:column;gap:1px}.calc-summary-label{font-size:.62rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.04em}.calc-summary-value{font-size:.92rem;font-weight:700}.calc-summary-arrow{color:var(--text-secondary);flex-shrink:0}.calc-summary-diff{font-size:.82rem;font-weight:700;padding:2px 8px;border-radius:6px;margin-left:auto}.calc-summary-diff.up{color:#059669;background:#0596691a}.calc-summary-diff.down{color:#dc2626;background:#dc26261a}.calc-group{border-bottom:1px solid var(--border)}.calc-group:last-child{border-bottom:none}.calc-group-header{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;background:#fafafa;border-bottom:1px solid #f0f0f0}.calc-group-name{font-size:.8rem;font-weight:700;color:var(--text);display:flex;align-items:center;gap:6px}.calc-group-weight{font-size:.65rem;font-weight:700;padding:1px 6px;border-radius:3px;background:#e0e7ff;color:#4338ca}.calc-group-scores{display:flex;align-items:center;gap:6px}.calc-group-pct{font-size:.82rem;font-weight:700}.calc-group-projected{font-size:.75rem;font-weight:600}.calc-table{width:100%;border-collapse:collapse;font-size:.8rem}.calc-table thead{display:none}.calc-table th{padding:6px 12px;text-align:left;font-size:.65rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--text-secondary)}.calc-table td{padding:7px 12px;border-bottom:1px solid #f5f5f5;vertical-align:middle}.calc-table tbody tr:last-child td{border-bottom:none}.calc-table tbody tr:hover{background:#fafafa}.calc-row-editable{background:#fffbeb}.calc-row-editable:hover{background:#fef3c7!important}.ct-name{min-width:0;max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500;color:var(--text)}.ct-due{white-space:nowrap;color:var(--text-secondary);font-size:.72rem}.ct-possible{white-space:nowrap;color:var(--text-secondary);font-size:.75rem;text-align:right}.ct-score{white-space:nowrap;text-align:right;width:72px}.ct-pct{white-space:nowrap;text-align:right;width:48px;font-size:.78rem}.calc-actual-score{font-weight:600;color:var(--text)}.calc-excused{font-size:.72rem;font-weight:600;color:var(--text-secondary)}.calc-score-input{width:56px;padding:3px 6px;border:1.5px solid #e5e7eb;border-radius:5px;font-size:.8rem;font-family:inherit;text-align:right;background:#fff;color:var(--text);outline:none;transition:all .15s}.calc-score-input::placeholder{color:#d1d5db}.calc-score-input:focus{border-color:var(--accent);box-shadow:0 0 0 2px #2563eb1f}.calc-score-input:not(:placeholder-shown){border-color:#a78bfa;background:#faf5ff}.calc-page .empty-state{display:flex;flex-direction:column;align-items:center;gap:12px;padding:4rem 2rem;color:var(--text-secondary);text-align:center}.calc-page .empty-state p{font-size:.9rem}.calc-page .loading{text-align:center;padding:3rem;color:var(--text-secondary)}.calc-page .error{text-align:center;padding:2rem;color:#dc2626;background:#fef2f2;border-radius:8px;margin:1rem 0}@media(max-width:600px){.calc-overview{gap:8px}.calc-overview .overview-card{padding:12px 8px}.calc-overview .overview-score{font-size:1.3rem}.calc-card-name{display:none}.calc-badge{font-size:.78rem}.calc-tools{flex-direction:column;gap:10px;padding:12px}.calc-summary-bar{flex-direction:column;gap:8px;align-items:flex-start}.calc-summary-arrow{transform:rotate(90deg);align-self:center}.calc-summary-diff{margin-left:0}.ct-due{display:none}.ct-name{max-width:140px}.calc-group-header{padding:8px 12px}.calc-table td{padding:6px 8px}}.insights-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 0;margin-bottom:.5rem;border-bottom:1px solid var(--border)}.insights-header-left{display:flex;align-items:center;gap:1rem}.insights-header h1{font-size:1.5rem;font-weight:700;color:var(--accent)}.insights-filter{padding:6px 12px;border:1px solid var(--border);border-radius:6px;background:var(--card);font-size:.8rem;color:var(--text);cursor:pointer}.insights-skeleton{padding:1rem 0}.skeleton-cards{display:flex;gap:12px;margin-bottom:1.5rem}.skeleton-card{flex:1;padding:20px 16px;background:var(--card);border:1px solid var(--border);border-radius:10px;display:flex;flex-direction:column;gap:8px}.skeleton-line{border-radius:4px;background:linear-gradient(90deg,#f0f0f0 25%,#e0e0e0,#f0f0f0 75%);background-size:200% 100%;animation:insightsShimmer 1.5s infinite}.skeleton-line.short{width:60%;height:10px}.skeleton-line.tall{width:40%;height:24px}.skeleton-chart{height:160px;border-radius:10px;margin-bottom:1rem;background:linear-gradient(90deg,#f0f0f0 25%,#e0e0e0,#f0f0f0 75%);background-size:200% 100%;animation:insightsShimmer 1.5s infinite}@keyframes insightsShimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.insights-stats{display:flex;gap:12px;margin-bottom:1rem}.stat-card{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:16px 12px;background:var(--card);border:1px solid var(--border);border-radius:10px}.stat-label{font-size:.68rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.stat-value{font-size:1.5rem;font-weight:700;line-height:1.2;display:flex;align-items:center;gap:4px}.stat-neutral{color:var(--text)}.stat-sub{font-size:.8rem;font-weight:500;color:var(--text-secondary)}.stat-streak,.streak-icon{color:#ea580c}.insights-points-bar{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:14px 16px;margin-bottom:1.25rem}.points-bar-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.points-bar-label{font-size:.78rem;font-weight:600;color:var(--text-secondary)}.points-bar-value{font-size:.82rem;font-weight:600;color:var(--text)}.points-bar-track{height:8px;background:#f0f0f0;border-radius:4px;overflow:hidden}.points-bar-fill{height:100%;background:var(--accent);border-radius:4px;transition:width .6s ease-out}.insights-section{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:20px;margin-bottom:1rem}.section-title{font-size:.95rem;font-weight:700;color:var(--text);margin-bottom:2px}.section-subtitle{font-size:.72rem;color:var(--text-secondary);margin-bottom:16px}.trend-chart{display:flex;gap:8px;height:160px}.trend-y-axis{display:flex;flex-direction:column;justify-content:space-between;font-size:.65rem;color:var(--text-secondary);padding:4px 0 20px;min-width:36px;text-align:right}.trend-area{flex:1;position:relative;overflow:hidden}.trend-svg{width:100%;height:calc(100% - 16px)}.trend-dots{position:absolute;inset:0 0 16px}.trend-tooltip-zone{position:absolute;top:0;bottom:0;width:40px;transform:translate(-50%);cursor:pointer}.trend-tooltip{display:none;position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%);background:var(--text);color:#fff;padding:8px 10px;border-radius:6px;font-size:.7rem;white-space:nowrap;flex-direction:column;gap:2px;z-index:10;box-shadow:0 2px 8px #00000026}.trend-tooltip-zone:hover .trend-tooltip{display:flex}.trend-tooltip strong{font-size:.82rem}.trend-tooltip-course{color:#aaa}.trend-tooltip-score{color:#ccc;font-size:.65rem}.distribution-chart{display:flex;align-items:flex-end;gap:6px;height:120px;padding-top:20px}.dist-bar-wrapper{flex:1;display:flex;flex-direction:column;align-items:center;height:100%;justify-content:flex-end;gap:4px}.dist-count{font-size:.65rem;font-weight:600;color:var(--text-secondary);min-height:14px}.dist-bar{width:100%;border-radius:4px 4px 0 0;min-height:2px;transition:height .4s ease-out}.dist-label{font-size:.58rem;color:var(--text-secondary);white-space:nowrap}.submission-breakdown{display:flex;flex-direction:column;gap:12px}.breakdown-bar{display:flex;height:24px;border-radius:6px;overflow:hidden;gap:2px}.breakdown-segment{transition:flex .4s ease-out;min-width:4px}.breakdown-segment.on-time{background:#059669}.breakdown-segment.late{background:#f59e0b}.breakdown-segment.missing{background:#ef4444}.breakdown-legend{display:flex;gap:16px;flex-wrap:wrap}.legend-item{display:flex;align-items:center;gap:6px;font-size:.75rem;color:var(--text-secondary)}.legend-dot{width:8px;height:8px;border-radius:50%}.legend-dot.on-time{background:#059669}.legend-dot.late{background:#f59e0b}.legend-dot.missing{background:#ef4444}.workload-chart{display:flex;align-items:flex-end;gap:6px;height:140px;padding-top:20px}.workload-bar-wrapper{flex:1;display:flex;flex-direction:column;align-items:center;height:100%;justify-content:flex-end;gap:4px;position:relative}.workload-bar-wrapper.current .workload-bar{background:var(--accent)}.workload-count{font-size:.65rem;font-weight:600;color:var(--text-secondary)}.workload-bar{width:100%;background:#e0e0e0;border-radius:4px 4px 0 0;min-height:2px;transition:height .4s ease-out;position:relative;overflow:hidden}.workload-bar-courses{position:absolute;bottom:2px;left:0;right:0;text-align:center;font-size:.5rem;color:var(--text-secondary);white-space:nowrap;overflow:hidden}.workload-label{font-size:.58rem;color:var(--text-secondary);white-space:nowrap}.workload-now{font-size:.6rem;font-weight:700;color:var(--accent)}.course-comparison{display:flex;flex-direction:column;gap:12px}.comparison-row{display:flex;align-items:center;gap:14px}.comparison-label{min-width:140px;display:flex;flex-direction:column;gap:2px}.comparison-badge{font-size:.72rem;font-weight:700;padding:2px 8px;border-radius:4px;display:inline-block;width:fit-content;letter-spacing:.02em}.comparison-meta{display:flex;gap:8px;font-size:.65rem;color:var(--text-secondary)}.comparison-late{color:#d97706}.comparison-missing{color:#ef4444}.comparison-bar-area{flex:1;display:flex;align-items:center;gap:10px}.comparison-bar-track{flex:1;height:10px;background:#f0f0f0;border-radius:5px;overflow:hidden}.comparison-bar-fill{height:100%;border-radius:5px;transition:width .5s ease-out}.comparison-score{font-size:.82rem;font-weight:700;min-width:50px;text-align:right}.insights-page .error{text-align:center;padding:2rem;color:#dc2626;background:#fef2f2;border-radius:8px;margin:1rem 0}@media(max-width:600px){.insights-stats{display:grid;grid-template-columns:1fr 1fr;gap:8px}.stat-card{padding:12px 8px}.stat-value{font-size:1.2rem}.insights-section{padding:14px}.comparison-label{min-width:80px}.comparison-meta{display:none}.trend-chart{height:130px}.trend-y-axis{min-width:28px;font-size:.58rem}.distribution-chart{height:90px}.workload-chart{height:100px}.workload-bar-courses{display:none}}.rubrics-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 0;margin-bottom:.5rem;border-bottom:1px solid var(--border)}.rubrics-header-left{display:flex;align-items:center;gap:1rem}.rubrics-header h1{font-size:1.5rem;font-weight:700;color:var(--accent)}.rubrics-overview{display:flex;gap:12px;margin-bottom:1.25rem}.rubrics-overview .overview-card{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:16px 12px;background:var(--card);border:1px solid var(--border);border-radius:10px}.rubrics-overview .overview-label{font-size:.7rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.rubrics-overview .overview-score{font-size:1.6rem;font-weight:700;line-height:1.2}.rubrics-overview .overview-count{color:var(--text)}.rubrics-controls{display:flex;flex-direction:column;gap:10px;margin-bottom:1rem}.rubrics-filters{display:flex;gap:8px}.rubrics-search{flex:1;padding:7px 12px;border:1px solid var(--border);border-radius:6px;font:inherit;font-size:.82rem;background:var(--card);color:var(--text);outline:none;transition:border-color .15s}.rubrics-search:focus{border-color:var(--accent)}.rubrics-search::placeholder{color:#aaa}.rubrics-course-select{padding:7px 10px;border:1px solid var(--border);border-radius:6px;font:inherit;font-size:.82rem;background:var(--card);color:var(--text);cursor:pointer;outline:none}.rubrics-count{font-size:.75rem;color:var(--text-secondary);margin-bottom:.75rem}.rubrics-list{display:flex;flex-direction:column;gap:8px}.rubric-card{border:1px solid var(--border);border-left:3px solid;border-radius:8px;background:var(--card);transition:box-shadow .15s;overflow:hidden}.rubric-card:hover{box-shadow:0 2px 8px #0000000f}.rubric-card.expanded{box-shadow:0 2px 12px #00000014}.rubric-card-header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:12px 14px;border:none;background:none;cursor:pointer;text-align:left;font:inherit;color:inherit;gap:12px}.rubric-card-left{display:flex;align-items:center;gap:10px;min-width:0;flex:1}.rubric-course-badge{font-size:.72rem;font-weight:700;padding:3px 10px;border-radius:4px;white-space:nowrap;letter-spacing:.02em;flex-shrink:0}.rubric-card-info{display:flex;flex-direction:column;gap:3px;min-width:0}.rubric-title{font-size:.88rem;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rubric-meta{display:flex;align-items:center;gap:8px}.rubric-points-badge{font-size:.72rem;font-weight:600;color:#059669;background:#ecfdf5;padding:1px 7px;border-radius:10px}.rubric-criteria-count{font-size:.72rem;color:var(--text-secondary)}.rubric-card-right{display:flex;align-items:center;gap:10px;flex-shrink:0}.rubric-card .chevron{font-size:.7rem;color:var(--text-secondary);transition:transform .15s;display:inline-block}.rubric-card .chevron.open{transform:rotate(180deg)}.rubric-detail{border-top:1px solid var(--border);padding:16px;animation:rubricSlideDown .15s ease-out}@keyframes rubricSlideDown{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.rubric-detail-loading{display:flex;justify-content:center;padding:1rem}.rubric-criteria-list{display:flex;flex-direction:column;gap:12px}.rubric-criterion-card{background:#f9fafb;border:1px solid #f0f0f0;border-radius:10px;padding:14px;transition:box-shadow .15s}.rubric-criterion-card:hover{box-shadow:0 1px 4px #0000000a}.rubric-criterion-top{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:10px}.rubric-criterion-desc{display:flex;align-items:flex-start;gap:10px;flex:1;min-width:0}.rubric-criterion-number{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;background:var(--accent);color:#fff;font-size:.7rem;font-weight:700;flex-shrink:0;margin-top:1px}.rubric-criterion-text{min-width:0}.rubric-criterion-title{font-size:.85rem;font-weight:600;color:var(--text);display:block}.rubric-criterion-long-desc{font-size:.78rem;color:var(--text-secondary);line-height:1.5;margin:4px 0 0}.rubric-criterion-points{font-size:.85rem;font-weight:700;color:#059669;background:#ecfdf5;padding:3px 10px;border-radius:8px;white-space:nowrap;flex-shrink:0}.rubric-ratings-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px}.rubric-rating-chip{position:relative;background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:10px;overflow:hidden;display:flex;flex-direction:column;gap:3px}.rubric-rating-bar{position:absolute;top:0;left:0;height:3px;border-radius:3px 3px 0 0;min-width:4px}.rubric-rating-pts{font-size:.75rem;font-weight:700;color:var(--text)}.rubric-rating-desc{font-size:.75rem;font-weight:500;color:var(--text);line-height:1.3}.rubric-rating-long-desc{font-size:.68rem;color:var(--text-secondary);line-height:1.4}.rubric-no-criteria{font-size:.82rem;color:var(--text-secondary);text-align:center;padding:1.5rem}.rubrics-page .empty-state{display:flex;flex-direction:column;align-items:center;gap:12px;padding:4rem 2rem;color:var(--text-secondary);text-align:center}.rubrics-page .empty-state p{font-size:.9rem}.rubrics-page .empty-hint{font-size:.78rem;color:#aaa}.rubrics-page .loading{text-align:center;padding:3rem;color:var(--text-secondary);display:flex;flex-direction:column;align-items:center;gap:12px}.rubrics-page .error{text-align:center;padding:2rem;color:#dc2626;background:#fef2f2;border-radius:8px;margin:1rem 0}@media(max-width:600px){.rubrics-overview{display:grid;grid-template-columns:1fr 1fr;gap:8px}.rubrics-overview .overview-card{padding:12px 8px}.rubrics-overview .overview-score{font-size:1.3rem}.rubrics-filters{flex-direction:column}.rubric-title{max-width:180px}.rubric-ratings-row{grid-template-columns:1fr}.rubric-criterion-top{flex-direction:column;gap:6px}.rubric-criterion-points{align-self:flex-start}}.search-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 0;margin-bottom:.5rem;border-bottom:1px solid var(--border)}.search-header-left{display:flex;align-items:center;gap:1rem}.search-header h1{font-size:1.5rem;font-weight:700;color:var(--accent)}.search-bar-container{margin-bottom:1.25rem}.search-bar{display:flex;align-items:center;gap:10px;padding:12px 16px;background:var(--card);border:2px solid var(--border);border-radius:12px;transition:border-color .2s,box-shadow .2s}.search-bar:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px #6366f11a}.search-bar-icon{color:var(--text-secondary);flex-shrink:0}.search-bar:focus-within .search-bar-icon{color:var(--accent)}.search-bar-input{flex:1;border:none;background:none;font:inherit;font-size:1rem;color:var(--text);outline:none}.search-bar-input::placeholder{color:#aaa}.search-bar-clear{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;background:var(--tag-bg);border-radius:50%;cursor:pointer;color:var(--text-secondary);transition:all .15s;flex-shrink:0}.search-bar-clear:hover{background:var(--border);color:var(--text)}.search-hint{font-size:.75rem;color:var(--text-secondary);margin-top:6px;padding-left:4px}.search-type-tabs{display:flex;gap:4px;padding:3px;background:var(--tag-bg);border-radius:8px;margin-bottom:1rem;overflow-x:auto;-webkit-overflow-scrolling:touch}.search-type-tab{display:flex;align-items:center;gap:5px;padding:6px 12px;border:none;background:none;font:inherit;font-size:.76rem;font-weight:500;color:var(--text-secondary);border-radius:6px;cursor:pointer;transition:all .15s;white-space:nowrap}.search-type-tab:hover{color:var(--text)}.search-type-tab.active{background:var(--card);color:var(--text);box-shadow:0 1px 3px #00000014;font-weight:600}.search-type-count{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:var(--accent);color:#fff;font-size:.63rem;font-weight:700}.search-loading{text-align:center;padding:3rem;color:var(--text-secondary);display:flex;flex-direction:column;align-items:center;gap:12px}.search-loading .loading-spinner{width:28px;height:28px;border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:searchSpin .8s linear infinite}@keyframes searchSpin{to{transform:rotate(360deg)}}.search-error{text-align:center;padding:2rem;color:#dc2626;background:#fef2f2;border-radius:8px;margin:1rem 0}.search-empty{display:flex;flex-direction:column;align-items:center;gap:8px;padding:4rem 2rem;color:var(--text-secondary);text-align:center}.search-empty svg{opacity:.25}.search-empty p{font-size:.95rem;font-weight:500;color:var(--text)}.search-empty span{font-size:.82rem}.search-empty-state{display:flex;flex-direction:column;align-items:center;gap:12px;padding:4rem 2rem 3rem;text-align:center}.search-empty-state svg{color:var(--text-secondary);opacity:.2}.search-empty-state h2{font-size:1.3rem;font-weight:700;color:var(--text);margin:0}.search-empty-state p{font-size:.88rem;color:var(--text-secondary);max-width:420px;line-height:1.5;margin:0}.search-suggestions{margin-top:1.5rem;display:flex;flex-direction:column;align-items:center;gap:10px}.search-suggestion-label{font-size:.75rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.search-suggestion-chips{display:flex;flex-wrap:wrap;gap:6px;justify-content:center}.search-suggestion-chip{padding:6px 14px;border:1px solid var(--border);border-radius:20px;background:var(--card);font:inherit;font-size:.8rem;color:var(--text-secondary);cursor:pointer;transition:all .15s}.search-suggestion-chip:hover{border-color:var(--accent);color:var(--accent);background:#6366f10d}.search-result-count{font-size:.75rem;color:var(--text-secondary);margin-bottom:.75rem}.search-section{margin-bottom:1.5rem}.search-section-header{display:flex;align-items:center;gap:8px;font-size:.78rem;font-weight:700;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em;margin-bottom:.5rem;padding:0 2px}.search-section-count{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:18px;padding:0 6px;border-radius:9px;background:var(--tag-bg);font-size:.65rem;font-weight:700;color:var(--text-secondary)}.search-section-items{display:flex;flex-direction:column;gap:6px}.search-result-card{display:block;text-decoration:none;color:inherit;border:1px solid var(--border);border-left:3px solid;border-radius:8px;background:var(--card);padding:10px 14px;transition:box-shadow .15s,transform .1s}.search-result-card:hover{box-shadow:0 2px 8px #0000000f;transform:translateY(-1px)}.search-result-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.search-result-course-badge{font-size:.68rem;font-weight:700;padding:2px 8px;border-radius:4px;white-space:nowrap;letter-spacing:.02em}.search-result-type-label{font-size:.65rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.04em}.search-result-main{display:flex;align-items:flex-start;gap:10px}.search-result-icon{flex-shrink:0;color:var(--text-secondary);margin-top:1px}.search-result-avatar{width:28px;height:28px;border-radius:50%;object-fit:cover}.search-result-info{min-width:0;flex:1}.search-result-title{font-size:.88rem;font-weight:500;color:var(--text);display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-result-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:3px;font-size:.72rem;color:var(--text-secondary)}.search-result-meta span+span:before{content:""}.search-result-due{color:var(--text-secondary)}.search-result-points{font-weight:600}.search-result-submitted{color:#059669;font-weight:600}.search-result-score{font-weight:600;color:var(--accent)}.search-result-ext-badge{font-size:.65rem;font-weight:700;padding:1px 6px;border-radius:3px}.search-result-role{font-weight:600;font-size:.7rem;padding:1px 8px;border-radius:4px}.search-result-role-faculty{color:#7c3aed;background:#7c3aed1a}.search-result-role-ta{color:#0891b2;background:#0891b21a}.search-result-role-student{color:var(--text-secondary);background:var(--tag-bg)}.search-result-preview{font-size:.76rem;color:var(--text-secondary);line-height:1.4;margin:4px 0 0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}@media(max-width:600px){.search-bar{padding:10px 12px}.search-bar-input{font-size:.92rem}.search-type-tabs{gap:2px;padding:2px}.search-type-tab{padding:5px 8px;font-size:.72rem}.search-type-tab svg{display:none}.search-result-title{white-space:normal}.search-result-preview{display:none}.search-suggestion-chips{gap:4px}.search-suggestion-chip{padding:5px 10px;font-size:.75rem}.search-empty-state{padding:3rem 1.5rem 2rem}}
