:root,[data-theme=dark]{--bg-main:#0f172a;--bg-card:#1e293b;--surface-bg:#0b1325;--bg-card-hover:#334155;--text-primary:#f8fafc;--text-secondary:#94a3b8;--text-muted:#64748b;--accent-primary:#3b82f6;--accent-secondary:#8b5cf6;--border-color:#334155;--danger:#ef4444;--success:#10b981;--gradient-start:#3b82f6;--gradient-end:#8b5cf6;--progress-track:rgba(255,255,255,0.1);--table-row-border:rgba(255,255,255,0.04);--table-header-bg:rgba(255,255,255,0.02);--radius-lg:16px;--radius-md:12px;--radius-sm:8px;--shadow-sm:0 1px 2px 0 rgb(0 0 0/0.05);--shadow-md:0 4px 6px -1px rgb(0 0 0/0.1),0 2px 4px -2px rgb(0 0 0/0.1);--shadow-lg:0 10px 15px -3px rgb(0 0 0/0.1),0 4px 6px -4px rgb(0 0 0/0.1)}[data-theme=light]{--bg-main:#f8fafc;--bg-card:#ffffff;--surface-bg:#f8fafc;--bg-card-hover:#f1f5f9;--text-primary:#0f172a;--text-secondary:#475569;--text-muted:#94a3b8;--accent-primary:#2563eb;--accent-secondary:#7c3aed;--border-color:#e2e8f0;--danger:#dc2626;--success:#059669;--gradient-start:#2563eb;--gradient-end:#7c3aed;--progress-track:rgba(0,0,0,0.08);--table-row-border:rgba(0,0,0,0.06);--table-header-bg:rgba(0,0,0,0.02);--shadow-sm:0 1px 2px 0 rgb(0 0 0/0.04);--shadow-md:0 4px 6px -1px rgb(0 0 0/0.06),0 2px 4px -2px rgb(0 0 0/0.04);--shadow-lg:0 10px 15px -3px rgb(0 0 0/0.06),0 4px 6px -4px rgb(0 0 0/0.04)}[data-theme=soothing]{--bg-main:#1a1a2e;--bg-card:#16213e;--surface-bg:#101a33;--bg-card-hover:#0f3460;--text-primary:#e2e8f0;--text-secondary:#a0aec0;--text-muted:#718096;--accent-primary:#48bb78;--accent-secondary:#38b2ac;--border-color:#2d3748;--danger:#fc8181;--success:#68d391;--gradient-start:#48bb78;--gradient-end:#38b2ac;--progress-track:rgba(255,255,255,0.08);--table-row-border:rgba(255,255,255,0.04);--table-header-bg:rgba(255,255,255,0.02);--shadow-sm:0 1px 2px 0 rgb(0 0 0/0.12);--shadow-md:0 4px 6px -1px rgb(0 0 0/0.15),0 2px 4px -2px rgb(0 0 0/0.1);--shadow-lg:0 10px 15px -3px rgb(0 0 0/0.15),0 4px 6px -4px rgb(0 0 0/0.1)}*{margin:0;padding:0;box-sizing:border-box;font-family:Inter,system-ui,-apple-system,sans-serif}body{background-color:var(--bg-main);color:var(--text-primary);-webkit-font-smoothing:antialiased;min-height:100vh;transition:background-color .3s ease,color .3s ease}.app-container{max-width:1200px;padding:0 2rem}.app-header{padding:2rem 0;border-bottom:1px solid var(--border-color);margin-bottom:3rem}.header-content{justify-content:space-between}.header-content,.logo{display:flex;align-items:center}.logo{gap:1rem}.logo h1{font-size:1.5rem;font-weight:700;background:linear-gradient(to right,var(--gradient-start),var(--gradient-end));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}.user-profile .avatar{width:40px;height:40px;border-radius:50%;background:linear-gradient(135deg,var(--accent-primary),var(--accent-secondary));display:flex;align-items:center;justify-content:center;font-weight:600;font-size:1.2rem;box-shadow:var(--shadow-md)}.dashboard-section{margin-bottom:4rem}.section-header{display:flex;align-items:center;gap:1rem;margin-bottom:2rem}.section-header h2{font-size:1.5rem;font-weight:600;color:var(--text-primary)}.badge{background-color:var(--bg-card);color:var(--text-primary);padding:.25rem .75rem;border-radius:999px;font-size:.875rem;font-weight:500;border:1px solid var(--border-color)}.badge.alert{background-color:rgba(239,68,68,.1);color:var(--danger);border-color:rgba(239,68,68,.2)}.courses-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));grid-gap:1.5rem;gap:1.5rem}.assignments-list{display:flex;flex-direction:column;gap:1rem}.course-card{background:var(--bg-card);border:1px solid var(--border-color);border-radius:var(--radius-lg);padding:1.5rem;transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;overflow:hidden}.course-card:before{content:"";position:absolute;top:0;left:0;width:100%;height:4px;background:linear-gradient(to right,var(--gradient-start),var(--gradient-end));opacity:0;transition:opacity .3s ease}.course-card:hover{transform:translateY(-4px);box-shadow:var(--shadow-lg);border-color:var(--accent-primary);cursor:pointer}.course-card:hover:before{opacity:1}.course-card-header{margin-bottom:1.5rem}.course-name{font-size:1.125rem;font-weight:600;margin-bottom:.5rem;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.course-code{background:rgba(255,255,255,.05);padding:.25rem .5rem;border-radius:var(--radius-sm)}.course-code,.course-term{font-size:.875rem;color:var(--text-secondary)}.course-term{margin-bottom:1rem}.progress-bar{height:6px;background:var(--progress-track);border-radius:999px;overflow:hidden}.progress-fill{height:100%;background:linear-gradient(to right,var(--gradient-start),var(--gradient-end));border-radius:999px;width:0;transition:width 1s ease-out}.assignment-item{background:var(--bg-card);border:1px solid var(--border-color);border-radius:var(--radius-md);padding:1.25rem 1.5rem;display:flex;justify-content:space-between;align-items:center;transition:all .2s ease}.assignment-item:hover{background:var(--bg-card-hover);transform:translateX(4px)}.assignment-info{display:flex;align-items:center;gap:1.25rem}.assignment-icon{width:48px;height:48px;border-radius:var(--radius-sm);background:color-mix(in srgb,var(--accent-primary) 12%,transparent);color:var(--accent-primary);display:flex;align-items:center;justify-content:center}.assignment-title{font-size:1rem;font-weight:500;margin-bottom:.25rem}.assignment-course{font-size:.875rem;color:var(--text-secondary)}.assignment-meta{display:flex;align-items:center;gap:1.5rem}.assignment-due{color:var(--danger)}.assignment-due,.view-btn{font-size:.875rem;font-weight:500}.view-btn{padding:.5rem 1rem;background:transparent;border:1px solid var(--border-color);color:var(--text-primary);border-radius:var(--radius-sm);text-decoration:none;transition:all .2s}.view-btn:hover{background:var(--accent-primary);border-color:var(--accent-primary)}.empty-state{padding:3rem;text-align:center;background:var(--bg-card);border:1px dashed var(--border-color);border-radius:var(--radius-lg);color:var(--text-secondary)}.empty-state svg{margin-bottom:1rem;opacity:.5}.skeleton-card{height:200px;border-radius:var(--radius-lg);border:1px solid var(--border-color)}.skeleton-card,.skeleton-item{background:linear-gradient(90deg,var(--bg-card) 25%,var(--bg-card-hover) 50%,var(--bg-card) 75%);background-size:200% 100%;animation:loading 1.5s infinite}.skeleton-item{height:80px;border-radius:var(--radius-md);border:1px solid var(--border-color)}@keyframes loading{0%{background-position:200% 0}to{background-position:-200% 0}}@media (max-width:768px){.app-container{padding:0 1rem}.assignment-item{flex-direction:column;align-items:flex-start;gap:1rem}.assignment-meta{width:100%;justify-content:flex-end}}.text-sm{font-size:.75rem}.text-secondary{color:var(--text-secondary)}.hidden{display:none!important}.description-box{margin-top:1rem;font-size:.95rem;color:var(--text-primary);overflow-x:auto}.description-box img{max-width:100%;height:auto;border-radius:var(--radius-sm)}.description-box a{color:var(--accent-primary);text-decoration:underline}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.7);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:100;padding:1rem;opacity:1;transition:opacity .3s}.modal-content{background:var(--bg-main);border:1px solid var(--border-color);border-radius:var(--radius-lg);width:100%;max-width:960px;max-height:90vh;display:flex;flex-direction:column;box-shadow:var(--shadow-lg);overflow:hidden}.modal-header{padding:1.5rem;border-bottom:1px solid var(--border-color);display:flex;justify-content:space-between;align-items:center;background:var(--bg-card)}.modal-header h2{font-size:1.25rem;font-weight:600}.close-btn{background:transparent;border:none;color:var(--text-secondary);font-size:1.5rem;cursor:pointer;line-height:1}.close-btn:hover{color:var(--text-primary)}.modal-body{padding:1.5rem;overflow-y:scroll;scrollbar-gutter:stable;flex:1 1}.modal-body h3{margin-bottom:1rem;font-size:1.1rem;color:var(--text-secondary)}.accordion{border:1px solid var(--border-color);border-radius:var(--radius-md);margin-bottom:.75rem;overflow:hidden}.accordion-header{display:flex;align-items:center;justify-content:space-between;padding:.875rem 1.25rem;background:var(--bg-card);cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:background .2s ease}.accordion-header:hover{background:var(--bg-card-hover)}.accordion-header h4{margin:0;font-size:.95rem;font-weight:600;color:var(--text-primary)}.accordion-header .accordion-count{font-size:.75rem;color:var(--text-secondary);margin-left:.5rem}.accordion-chevron{width:20px;height:20px;color:var(--text-secondary);transition:transform .25s ease;flex-shrink:0}.accordion.open .accordion-chevron{transform:rotate(180deg)}.accordion-body{max-height:0;overflow:hidden;transition:max-height .3s ease}.accordion.open .accordion-body{max-height:5000px}.assignment-table{width:100%;border-collapse:collapse;table-layout:fixed}.assignment-table thead th{padding:.5rem .75rem;font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--text-secondary);text-align:left;border-bottom:1px solid var(--border-color);background:var(--table-header-bg);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}.assignment-table tbody tr{transition:background .15s ease;cursor:pointer}.assignment-table tbody tr:hover{background:var(--bg-card-hover)}.assignment-table tbody td{padding:.6rem .75rem;font-size:.8rem;color:var(--text-primary);border-bottom:1px solid var(--table-row-border);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:0}.assignment-table .col-name{width:35%}.assignment-table .col-due{width:20%}.assignment-table .col-created,.assignment-table .col-updated{width:17%}.assignment-table .col-action{width:11%;text-align:center}.assignment-table td.col-due{color:var(--danger);font-weight:500}.assignment-table td.col-due.no-date{color:var(--text-secondary);font-weight:400}.assignment-table td a.view-btn{padding:.25rem .6rem;font-size:.75rem}.assignment-table .state-badge{display:inline-block;font-size:.65rem;padding:.1rem .35rem;border-radius:3px;margin-left:.35rem;vertical-align:middle;font-weight:500}.assignment-table .state-badge.published{background:var(--success);color:#fff}.assignment-table .state-badge.unpublished{background:var(--text-secondary);color:#fff}.assignment-table .state-badge.other{background:var(--accent-primary);color:#fff}.theme-switcher{gap:.25rem;background:var(--bg-card);border:1px solid var(--border-color);border-radius:999px;padding:.2rem;margin-right:1rem}.theme-btn,.theme-switcher{display:flex;align-items:center}.theme-btn{justify-content:center;width:32px;height:32px;border-radius:50%;border:none;background:transparent;color:var(--text-secondary);cursor:pointer;transition:all .2s ease;font-size:1rem}.theme-btn:hover{color:var(--text-primary);background:var(--bg-card-hover)}.theme-btn.active{background:var(--accent-primary);color:#fff;box-shadow:var(--shadow-sm)}.main-assignments-table{width:100%;border-collapse:collapse;table-layout:fixed;background:var(--bg-card);border:1px solid var(--border-color);border-radius:var(--radius-md);overflow:hidden}.main-assignments-table thead th{padding:.65rem 1rem;font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--text-secondary);text-align:left;border-bottom:1px solid var(--border-color);background:var(--table-header-bg);cursor:pointer}.main-assignments-table tbody tr{transition:background .15s ease;cursor:pointer}.main-assignments-table tbody tr:hover{background:var(--bg-card-hover)}.main-assignments-table tbody td{padding:.6rem 1rem;font-size:.8rem;color:var(--text-primary);border-bottom:1px solid var(--table-row-border);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:left;max-width:0}.main-assignments-table .col-name{width:25%}.main-assignments-table .col-course{width:20%}.main-assignments-table .col-due{width:18%}.main-assignments-table .col-created,.main-assignments-table .col-updated{width:15%}.main-assignments-table .col-action{width:7%;text-align:center}.main-assignments-table td.col-due{color:var(--danger);font-weight:500}.main-assignments-table td.col-due.no-date{color:var(--text-secondary);font-weight:400}.assignment-table td .view-btn,.main-assignments-table td .view-btn{padding:.2rem .5rem;font-size:.7rem;cursor:pointer;border-radius:4px;background:transparent;border:1px solid var(--border-color);color:var(--text-primary);transition:all .2s;font-weight:500}.assignment-table td .view-btn:hover,.main-assignments-table td .view-btn:hover{background:var(--accent-primary);border-color:var(--accent-primary);color:white}.main-assignments-table th.sortable{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:color .15s ease}.main-assignments-table th.sortable:hover{color:var(--accent-primary)}.assignment-table th.sortable{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:color .15s ease}.assignment-table th.sortable:hover{color:var(--accent-primary)}.app-container{max-width:1240px;margin:0 auto;padding:0 1.5rem 2rem}.app-header{padding:1.5rem 0;margin-bottom:1.25rem}.main-content{display:grid;grid-gap:1.5rem;gap:1.5rem}.dashboard-intro{display:grid;grid-gap:.35rem;gap:.35rem}.intro-eyebrow{color:var(--text-secondary);font-size:.9rem;font-weight:600}.intro-title{font-size:2rem;line-height:1.15;font-weight:700}.dashboard-section{margin-bottom:0}.week-grid{display:grid;grid-gap:1rem;gap:1rem;grid-template-columns:repeat(1,minmax(0,1fr))}.week-grid:not(.is-expanded){grid-template-columns:repeat(auto-fit,minmax(340px,1fr))}.week-card{border-radius:1rem;border:1px solid var(--border-color);background:var(--bg-card);padding:1.25rem;box-shadow:var(--shadow-sm);min-height:360px}.week-card.is-expanded{min-height:520px}.week-card.is-preview{border-style:dashed;background:var(--bg-main)}.week-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem;margin-bottom:1rem}.week-card-header h2{font-size:1.2rem;margin-bottom:.2rem}.week-card-header p{font-size:.85rem;color:var(--text-secondary)}.week-actions{display:flex;align-items:center;gap:.5rem}.icon-toggle-btn{border:1px solid var(--border-color);border-radius:999px;background:transparent;color:var(--text-primary);width:34px;height:34px;display:grid;place-items:center;cursor:pointer}.icon-toggle-btn:hover{background:var(--bg-card-hover)}.week-preview{border:1px solid var(--border-color);border-radius:.8rem;background:var(--bg-card);padding:1rem}.week-preview-label{font-size:.78rem;font-weight:600;color:var(--text-secondary)}.week-preview h3{margin:.35rem 0;font-size:1rem}.week-preview p{color:var(--text-secondary);font-size:.85rem}.week-assignments{display:grid;grid-gap:.75rem;gap:.75rem;max-height:18rem;overflow-y:auto;padding-right:.25rem}.week-assignments.scroll-expanded{max-height:27rem}.assignment-card{border:1px solid var(--border-color);border-radius:.8rem;padding:.9rem;background:var(--bg-main)}.assignment-card-top{display:flex;align-items:flex-start;justify-content:space-between;gap:.8rem}.assignment-card-top h3{font-size:1rem;margin:.25rem 0}.assignment-course-label{font-size:.8rem;color:var(--text-secondary);font-weight:600}.assignment-due-label{font-size:.82rem;color:var(--text-secondary)}.assignment-card-actions{margin-top:.7rem}.status-pill{padding:.2rem .6rem;border-radius:999px;font-size:.72rem;font-weight:600;text-transform:capitalize;border:1px solid transparent}.status-submitted{color:var(--success);background:color-mix(in srgb,var(--success) 16%,transparent);border-color:color-mix(in srgb,var(--success) 30%,transparent)}.status-pending{color:#f59e0b;background:rgba(245,158,11,.14);border-color:rgba(245,158,11,.24)}.status-late,.status-missing{color:var(--danger);background:color-mix(in srgb,var(--danger) 14%,transparent);border-color:color-mix(in srgb,var(--danger) 24%,transparent)}.status-neutral{color:var(--text-secondary);background:color-mix(in srgb,var(--text-secondary) 14%,transparent);border-color:color-mix(in srgb,var(--text-secondary) 24%,transparent)}.empty-inline{font-size:.88rem;color:var(--text-secondary);border:1px dashed var(--border-color);border-radius:.7rem;padding:.9rem}.courses-summary{border:1px solid var(--border-color);border-radius:1rem;background:var(--bg-card);box-shadow:var(--shadow-sm);padding:1.25rem}.section-header-spread{justify-content:space-between}.section-subtitle{margin-top:.25rem;font-size:.85rem;color:var(--text-secondary)}.table-wrap{overflow-x:scroll;scrollbar-gutter:stable;-webkit-overflow-scrolling:touch}.courses-table{width:100%;border-collapse:collapse;border:1px solid var(--border-color);border-radius:.8rem;overflow:hidden}.courses-table thead th{text-align:left;font-size:.8rem;color:var(--text-secondary);background:var(--table-header-bg);padding:.75rem;border-bottom:1px solid var(--border-color);cursor:pointer}.courses-table tbody td{padding:.75rem;font-size:.88rem;border-top:1px solid var(--table-row-border)}.course-row{cursor:pointer}.course-row:hover{background:var(--bg-card-hover)}.course-cell{font-weight:600}.pending-danger{color:var(--danger);font-weight:600}.pending-ok{color:var(--success);font-weight:600}.table-empty{text-align:center;color:var(--text-secondary)}@media (max-width:768px){.app-container{padding:0 1rem 1.5rem}.intro-title{font-size:1.6rem}.week-card{min-height:unset}}