:root{color-scheme:light dark;--bg: #f6f7fb;--surface: #ffffff;--surface-2: #eef1f7;--ink: #1f2430;--ink-soft: #5c6577;--line: #e3e7ef;--brand: #3b6fd4;--brand-soft: #e4ecfb;--brand-ink: #ffffff;--accent: #2f9e6b;--accent-soft: #e2f4ea;--warn: #a9772a;--warn-soft: #fff3da;--warn-ink: #7a5a16;--danger: #d24b45;--danger-soft: #fbe3e1;--danger-ink: #a1332c;--rail-bg: #1f3550;--rail-ink: rgba(255, 255, 255, .82);--tint: 1a;--text-xs: .72rem;--text-sm: .8rem;--text-base: .9rem;--text-md: 1rem;--text-lg: 1.12rem;--text-xl: 1.45rem;--space-1: .25rem;--space-2: .5rem;--space-3: .75rem;--space-4: 1rem;--space-5: 1.5rem;--space-6: 2rem;--radius: 14px;--radius-sm: 10px;--shadow: 0 1px 2px rgba(31, 36, 48, .05), 0 8px 24px rgba(31, 36, 48, .06);--font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--tap: 44px}@media (prefers-color-scheme: dark){:root:not([data-theme=light]){--bg: #12151c;--surface: #1a1f29;--surface-2: #232936;--ink: #e8ecf4;--ink-soft: #a3adc0;--line: #2d3542;--brand: #7ba5ee;--brand-soft: #22304a;--brand-ink: #10141c;--accent: #57c295;--accent-soft: #16352a;--warn: #d9a441;--warn-soft: #33280f;--warn-ink: #e7c88a;--danger: #e97b74;--danger-soft: #3a1f1e;--danger-ink: #f0a9a4;--tint: 33;--shadow: 0 1px 2px rgba(0, 0, 0, .4), 0 8px 24px rgba(0, 0, 0, .35)}}:root[data-theme=dark]{--bg: #12151c;--surface: #1a1f29;--surface-2: #232936;--ink: #e8ecf4;--ink-soft: #a3adc0;--line: #2d3542;--brand: #7ba5ee;--brand-soft: #22304a;--brand-ink: #10141c;--accent: #57c295;--accent-soft: #16352a;--warn: #d9a441;--warn-soft: #33280f;--warn-ink: #e7c88a;--danger: #e97b74;--danger-soft: #3a1f1e;--danger-ink: #f0a9a4;--tint: 33;--shadow: 0 1px 2px rgba(0, 0, 0, .4), 0 8px 24px rgba(0, 0, 0, .35)}*{box-sizing:border-box}body{margin:0;font-family:var(--font);background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased}a{color:var(--brand);text-decoration:none}a:hover{text-decoration:underline}button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}:where(a,button,input,select,textarea,[tabindex]):focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:6px}.section-title{margin:0;font-size:var(--text-lg)}.meta{font-size:var(--text-sm);color:var(--ink-soft);margin:0}.app-shell{min-height:100vh;display:flex;flex-direction:column}.topbar{position:sticky;top:0;z-index:10;display:flex;align-items:center;gap:var(--space-4);flex-wrap:wrap;padding:var(--space-3) var(--space-5);background:var(--surface);border-bottom:1px solid var(--line)}.brand{display:flex;align-items:center;gap:var(--space-2);min-width:0;flex-wrap:wrap}.brand .name{font-weight:700;letter-spacing:.01em}.topbar-spacer{flex:1}.user-switcher{display:flex;align-items:center;gap:var(--space-2);min-width:0}.user-switcher label{font-size:var(--text-sm);color:var(--ink-soft);white-space:nowrap}.user-switcher select,.select{font-family:inherit;font-size:var(--text-base);padding:var(--space-2) .6rem;border-radius:var(--radius-sm);border:1px solid var(--line);background:var(--surface);color:var(--ink);max-width:100%;min-width:0}.content{flex:1;padding:1.75rem var(--space-5) 4rem;max-width:1080px;margin:0 auto;width:100%}.page-head{margin-bottom:1.25rem}.page-head h1{margin:0 0 var(--space-1);font-size:var(--text-xl)}.page-head p{margin:0;color:var(--ink-soft)}.banner{display:flex;align-items:center;gap:.6rem;padding:.6rem .9rem;border-radius:var(--radius-sm);font-size:var(--text-sm);margin-bottom:1.25rem}.banner.demo{background:var(--warn-soft);color:var(--warn-ink)}.banner.demo .dot{background:var(--warn)}.banner.error{background:var(--danger-soft);color:var(--danger-ink)}.banner.error .dot{background:var(--danger)}.banner .dot{width:8px;height:8px;border-radius:50%;flex:0 0 auto}.banner code{background:#7f7f7f2e;padding:0 var(--space-1);border-radius:4px}.toolbar{display:flex;justify-content:space-between;align-items:center;gap:var(--space-4);flex-wrap:wrap;margin-bottom:1.25rem}.grid{display:grid;gap:var(--space-4)}.grid.cols-2{grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:1.1rem 1.2rem}.card.subtle{box-shadow:none;background:var(--surface-2)}.card h3{font-size:var(--text-md)}.card .sub{color:var(--ink-soft);font-size:var(--text-sm);margin:0}.class-card.selected{outline:2px solid var(--brand);outline-offset:-2px}.assignment h3{font-size:var(--text-md)}.due{font-size:var(--text-xs);font-weight:600;color:var(--ink-soft);white-space:nowrap}.due.overdue{color:var(--danger)}.chip{display:inline-block;font-size:var(--text-xs);padding:.12rem var(--space-2);border-radius:99px;background:var(--surface-2);color:var(--ink-soft);border:1px solid var(--line)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .95rem;border-radius:var(--radius-sm);font-size:.88rem;font-weight:600;background:var(--brand);color:var(--brand-ink);transition:filter .15s ease}.btn:hover{filter:brightness(1.06);text-decoration:none}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.secondary{background:var(--surface);color:var(--ink);border:1px solid var(--line)}.btn.ghost{background:transparent;color:var(--brand);padding:.4rem var(--space-2)}.btn.danger{background:var(--danger);color:#fff}.btn.small{padding:.35rem .65rem;font-size:var(--text-sm)}.toggle-group{display:flex;flex-wrap:wrap;gap:.4rem}.toggle{font-size:.82rem;padding:.4rem var(--space-3);border-radius:99px;border:1px solid var(--line);background:var(--surface);color:var(--ink-soft)}.toggle:hover{color:var(--ink)}.toggle.on{background:var(--brand);color:var(--brand-ink);border-color:var(--brand)}.field{margin-bottom:.85rem}.field label{display:block;font-size:var(--text-sm);font-weight:600;margin-bottom:.3rem}.field .hint{font-weight:400;color:var(--ink-soft)}.field input,.field select,.field textarea{width:100%;font-family:inherit;font-size:var(--text-base);padding:var(--space-2) .65rem;border-radius:var(--radius-sm);border:1px solid var(--line);background:var(--surface);color:var(--ink)}.field textarea{min-height:64px;resize:vertical}.stack{display:flex;flex-direction:column;gap:1.25rem}.feed-group-head{display:flex;align-items:baseline;gap:var(--space-2);margin-bottom:.6rem}.feed-group-head .muted{font-size:.82rem}.feed-date-dot{width:9px;height:9px;border-radius:50%;align-self:center;flex:0 0 auto}.calendar-head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);flex-wrap:wrap;margin-bottom:var(--space-3)}.calendar-head h2{margin:0;font-size:var(--text-lg)}.calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}.calendar-weekday{background:var(--surface-2);color:var(--ink-soft);font-size:var(--text-xs);font-weight:600;text-transform:uppercase;letter-spacing:.04em;padding:var(--space-2);text-align:center}.calendar-cell{background:var(--surface);min-height:92px;padding:.35rem;display:flex;flex-direction:column;gap:var(--space-1)}.calendar-cell.muted-cell{background:color-mix(in srgb,var(--surface) 70%,var(--bg))}.calendar-cell.muted-cell .calendar-date{opacity:.55}.calendar-cell.today{background:var(--brand-soft)}.calendar-date{font-size:var(--text-xs);font-weight:600;color:var(--ink-soft)}.calendar-cell.today .calendar-date{color:var(--brand)}.calendar-cell-head{display:flex;align-items:center;justify-content:space-between}.calendar-items{display:flex;flex-direction:column;gap:.2rem}.calendar-item{display:flex;align-items:center;gap:.25rem;font-size:var(--text-xs);text-align:left;padding:.25rem .35rem;border-radius:6px;border:1px solid transparent;color:var(--ink);min-height:26px;width:100%;overflow:hidden}.calendar-item:hover{filter:brightness(.97)}.calendar-item-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.calendar-item-dot{width:7px;height:7px;border-radius:50%;flex:0 0 auto}.calendar-item.is-event{background:var(--surface);border-style:dashed}.calendar-more{font-size:var(--text-xs);color:var(--ink-soft);padding:.2rem;text-align:left;text-decoration:underline;min-height:24px}.calendar-more:hover{color:var(--brand)}.calendar-caption{margin-top:var(--space-2)}.calendar-add{width:22px;height:22px;line-height:1;border-radius:6px;font-size:var(--text-base);color:var(--ink-soft);background:transparent;opacity:0;transition:opacity .12s ease}.calendar-cell:hover .calendar-add,.calendar-add:focus-visible{opacity:1}.calendar-add:hover{background:var(--brand-soft);color:var(--brand)}@media (hover: none){.calendar-add{opacity:.55}}.cal-legend{display:flex;flex-wrap:wrap;gap:.4rem;margin-bottom:.9rem}.legend-chip{display:inline-flex;align-items:center;gap:.35rem;font-size:var(--text-sm);padding:.3rem .65rem;border-radius:99px;border:1px solid var(--line);background:var(--surface);color:var(--ink-soft)}.legend-chip:hover{color:var(--ink)}.legend-chip.on{background:var(--brand);border-color:var(--brand);color:var(--brand-ink)}.legend-dot{width:9px;height:9px;border-radius:50%;display:inline-block}.muted{color:var(--ink-soft)}.divider{height:1px;background:var(--line);margin:.9rem 0}.row-between{display:flex;justify-content:space-between;align-items:center;gap:var(--space-4);flex-wrap:wrap}.inline{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap}.section{margin-bottom:var(--space-6)}.section>h2{font-size:var(--text-lg);margin:0 0 var(--space-3)}.empty{text-align:center;padding:var(--space-6) var(--space-4);color:var(--ink-soft);border:1px dashed var(--line);border-radius:var(--radius);background:var(--surface)}.center-screen{display:grid;place-items:center;min-height:60vh;color:var(--ink-soft)}.rail-layout{flex-direction:row}.global-rail{width:84px;flex-shrink:0;background:var(--rail-bg);color:#fff;display:flex;flex-direction:column;align-items:stretch;position:sticky;top:0;height:100vh;z-index:20}.rail-brand{font-size:1.6rem;text-align:center;padding:.9rem 0 .7rem;border-bottom:1px solid rgba(255,255,255,.12)}.rail-item{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:.7rem var(--space-1);color:var(--rail-ink);font-size:.66rem;font-weight:600;text-align:center;border-left:3px solid transparent;min-height:var(--tap)}.rail-item:hover{background:#ffffff14;color:#fff;text-decoration:none}.rail-item.active{background:var(--surface);color:var(--ink);border-left-color:var(--brand)}.rail-glyph{font-size:1.15rem}.rail-main{flex:1;min-width:0;display:flex;flex-direction:column}.dashboard-layout{display:grid;grid-template-columns:1fr 260px;gap:var(--space-5);align-items:start}.course-card-grid{display:grid;gap:var(--space-4);grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}.course-card{display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow);color:var(--ink);transition:transform .12s ease}.course-card:hover{text-decoration:none;transform:translateY(-2px)}.course-card-hero{height:84px}.course-card-body{padding:var(--space-3) var(--space-4) .4rem}.course-card-body h3{margin:0 0 .2rem;font-size:var(--text-md)}.course-card-body .sub{margin:0;font-size:var(--text-sm);color:var(--ink-soft)}.course-card-icons{display:flex;gap:.9rem;padding:.55rem var(--space-4) .7rem;margin-top:auto;font-size:.95rem;opacity:.75}.todo-panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:var(--space-4) 1.1rem;position:sticky;top:4.5rem}.todo-panel h2{margin:0 0 .7rem;font-size:var(--text-md)}.todo-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.55rem}.todo-list a{display:flex;align-items:center;gap:.45rem;color:var(--ink);flex-wrap:wrap}.todo-list a:hover{text-decoration:none}.todo-list a:hover .todo-title{text-decoration:underline;color:var(--brand)}.todo-title{font-size:.84rem;font-weight:600;flex:1 1 100%}.todo-meta{font-size:var(--text-xs);color:var(--ink-soft);margin-left:var(--space-4)}.announcement-row{color:var(--ink);padding:var(--space-3) var(--space-4)}.announcement-row:hover{text-decoration:none;border-color:var(--brand)}.course-header{border-left:5px solid var(--brand);padding:var(--space-1) 0 var(--space-1) var(--space-4);margin-bottom:1.25rem;display:flex;justify-content:space-between;align-items:center;gap:var(--space-4);flex-wrap:wrap}.course-header h1{margin:0 0 .2rem;font-size:var(--text-xl)}.course-header .sub{margin:0;color:var(--ink-soft);font-size:var(--text-sm)}.course-body{display:grid;grid-template-columns:168px 1fr;gap:var(--space-5);align-items:start}.course-nav{display:flex;flex-direction:column;position:sticky;top:4.5rem;border-right:1px solid var(--line);padding-right:var(--space-1)}.course-nav a{padding:.45rem .7rem;font-size:.88rem;color:var(--brand);border-radius:8px;white-space:nowrap}.course-nav a:hover{background:var(--surface-2);text-decoration:none}.course-nav a.active{font-weight:700;color:var(--ink);background:var(--surface-2)}.course-content{min-width:0}.plain-list{list-style:none;margin:0;padding:0}.plain-list.boxed{border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--surface)}.list-row{display:flex;justify-content:space-between;align-items:center;gap:var(--space-4);padding:.65rem .9rem;border-bottom:1px solid var(--line)}.plain-list:not(.boxed) .list-row{padding-left:0;padding-right:0}.list-row:last-child{border-bottom:none}.group-label{font-size:var(--text-sm);text-transform:uppercase;letter-spacing:.05em;color:var(--ink-soft);margin:0 0 var(--space-2)}.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}.data-table{width:100%;border-collapse:collapse;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);font-size:.88rem}.data-table th{text-align:left;font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.04em;color:var(--ink-soft);background:var(--surface-2);padding:.55rem var(--space-2)}.data-table td{padding:.6rem var(--space-2);border-top:1px solid var(--line);vertical-align:top}.avatar{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:50%;background:var(--brand-soft);color:var(--brand);font-size:var(--text-sm);font-weight:700;margin-right:4px;flex:0 0 auto}.quiz-card-grid{display:grid;gap:var(--space-4);grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}.quiz-card{display:flex;flex-direction:column;justify-content:space-between}.builder-choice{flex:1 1 44%;margin-bottom:var(--space-2)}.quiz-choices{display:flex;flex-direction:column;gap:.4rem}.quiz-choice{display:flex;align-items:center;gap:.55rem;padding:var(--space-2) .7rem;border:1px solid var(--line);border-radius:var(--radius-sm);font-size:var(--text-base);cursor:pointer;min-height:var(--tap)}.quiz-choice:hover{border-color:var(--brand)}.quiz-choice.selected{border-color:var(--brand);background:var(--brand-soft);font-weight:600}.quiz-choice.correct{border-color:var(--accent);background:var(--accent-soft);font-weight:600}.quiz-choice.incorrect{border-color:var(--danger);background:var(--danger-soft)}.quiz-choice input{accent-color:var(--brand)}.quiz-choice input:disabled{cursor:default}.quiz-choice .mark{margin-left:auto;font-weight:700}.quiz-choice.correct .mark{color:var(--accent)}.quiz-choice.incorrect .mark{color:var(--danger)}.quiz-question-row{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-3);padding:.4rem 0}.practice-scoreboard{display:flex;align-items:center;gap:var(--space-4);flex-wrap:wrap;border-left:4px solid var(--brand);margin-bottom:var(--space-4)}.disc-toolbar{display:flex;gap:.6rem;align-items:center;flex-wrap:wrap;margin-bottom:1.1rem}.disc-toolbar .select{flex:0 0 auto}.search-wrap{position:relative;flex:1 1 240px;display:flex;align-items:center}.search-icon{position:absolute;left:.6rem;font-size:var(--text-sm);opacity:.6;pointer-events:none}.search-input{width:100%;font-family:inherit;font-size:var(--text-base);padding:var(--space-2) 2rem var(--space-2) 2rem;border-radius:var(--radius-sm);border:1px solid var(--line);background:var(--surface);color:var(--ink)}.search-clear{position:absolute;right:.35rem;font-size:var(--text-sm);color:var(--ink-soft);width:24px;height:24px;border-radius:50%}.search-clear:hover{background:var(--surface-2);color:var(--ink)}.disc-row-main{display:flex;flex-direction:column;gap:3px;text-align:left;flex:1;color:var(--ink)}.disc-row-main:hover .disc-title{color:var(--brand);text-decoration:underline}.disc-title{font-weight:600}.disc-meta{font-size:var(--text-sm);color:var(--ink-soft)}.discussion-post{border-left:3px solid var(--line)}.gc-connect{display:flex;align-items:center;gap:var(--space-4);flex-wrap:wrap}.gc-logo{width:52px;height:52px;border-radius:12px;display:grid;place-items:center;font-size:1.6rem;background:var(--brand-soft);flex:0 0 auto}.gc-course{display:flex;gap:.7rem;align-items:flex-start;cursor:pointer}.gc-course input{margin-top:.2rem;width:auto;accent-color:var(--brand)}.gc-course.picked{outline:2px solid var(--brand);outline-offset:-2px}.gc-course input:disabled{opacity:.5}.callout{display:flex;gap:.7rem;align-items:flex-start;background:var(--brand-soft);border:1px solid var(--line);border-left:4px solid var(--brand);border-radius:12px;padding:.85rem var(--space-4);margin-bottom:1.25rem;font-size:var(--text-base)}.callout .callout-icon{font-size:1.1rem;line-height:1.4}.callout p{color:var(--ink-soft);font-size:.86rem}.subtle-callout{background:var(--surface-2);border-left-color:var(--accent)}@media (max-width: 900px){.dashboard-layout{display:flex;flex-direction:column-reverse}.todo-panel{position:static;top:auto}.todo-list a{padding:.35rem 0;min-height:var(--tap)}.todo-title{flex:1 1 auto}.todo-meta{margin-left:auto}}@media (max-width: 800px){.course-body{grid-template-columns:1fr}.course-nav{flex-direction:row;overflow-x:auto;border-right:none;border-bottom:1px solid var(--line);position:static}.course-nav a{min-height:var(--tap);display:flex;align-items:center}}@media (max-width: 640px){.content{padding:1.1rem .9rem 3rem}.page-head h1{font-size:1.3rem}.topbar{padding:.6rem .9rem;gap:var(--space-2)}.user-switcher{flex:1 1 100%}.user-switcher select{flex:1}.toolbar{flex-direction:column;align-items:stretch}.toolbar .toggle-group{flex-wrap:nowrap;overflow-x:auto;padding-bottom:4px;-webkit-overflow-scrolling:touch}.toolbar .toggle{flex:0 0 auto;min-height:var(--tap)}.toolbar .select{width:100%}.disc-toolbar{flex-direction:column;align-items:stretch}.disc-toolbar .select,.disc-toolbar .btn{width:100%}.search-wrap{flex:1 1 auto}.grid.cols-2{grid-template-columns:1fr}.btn.small,.legend-chip,.toggle{min-height:var(--tap);padding-block:.6rem}.calendar-item{min-height:30px;padding:.35rem}.calendar-add{width:28px;height:28px}.rail-layout{flex-direction:column}.global-rail{order:2;flex-direction:row;width:100%;height:auto;position:fixed;bottom:0;left:0;top:auto;z-index:30;border-top:1px solid rgba(255,255,255,.15);justify-content:space-around;padding-bottom:env(safe-area-inset-bottom,0)}.rail-brand{display:none}.rail-item{flex:1;border-left:none;border-top:3px solid transparent;padding:var(--space-2) .15rem;min-height:52px}.rail-item.active{border-left:none;border-top-color:var(--brand)}.rail-glyph{font-size:1.25rem}.rail-label{font-size:.6rem}.rail-main{order:1;padding-bottom:4.5rem}}.subject-chip{display:inline-flex;align-items:center;gap:.35rem;font-size:var(--text-xs);padding:.12rem var(--space-2);border-radius:99px;background:var(--surface-2);color:var(--ink);border:1px solid var(--line)}.subject-chip .legend-dot{width:7px;height:7px}
