.topbar{background:var(--accent);color:#fff}.topbar-inner{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;max-width:960px;margin:0 auto;padding:8px 16px;display:flex}.brand{color:#fff;font-size:1.25rem;font-weight:700;text-decoration:none}.who{align-items:center;gap:14px;font-size:.95rem;display:flex}.who a{color:#fff}.who .btn-quiet{color:#fff;border-color:#ffffff8c;min-height:36px;padding:0 12px}.login-wrap{place-items:center;min-height:100vh;padding:16px;display:grid}.login-card{background:var(--surface);border:1px solid var(--line);border-top:4px solid var(--accent);border-radius:4px;width:100%;max-width:380px;padding:28px 24px}.login-card h1{color:var(--accent)}.login-card .muted{margin:4px 0 22px}.login-btn{width:100%}.login-hint{margin:16px 0 0;font-size:.88rem}.narrow{max-width:420px}.course{background:var(--surface);border:1px solid var(--line);border-left:6px solid var(--line);border-radius:4px;margin-bottom:20px;padding:16px 18px}.course-good{border-left-color:var(--ok)}.course-near{border-left-color:var(--warn)}.course-low{border-left-color:var(--bad)}.course header{flex-wrap:wrap;justify-content:space-between;gap:8px;margin-bottom:12px;display:flex}.att-line{flex-wrap:wrap;align-items:baseline;gap:12px;display:flex}.att-percent{font-variant-numeric:tabular-nums;font-size:1.8rem}.course-low .att-percent{color:var(--bad)}.bar{background:#e6ebef;border-radius:4px;height:8px;margin:8px 0;overflow:hidden}.bar div{background:var(--ok);height:100%}.course-near .bar div{background:var(--warn)}.course-low .bar div{background:var(--bad)}.warning{color:var(--bad);margin:6px 0 0;font-weight:600}.marks{margin-top:18px}.marks h3{margin-bottom:8px}.marks .total td{background:#f6f8f9;font-weight:700}.badge{white-space:nowrap;border:1px solid;border-radius:10px;padding:1px 9px;font-size:.8rem;font-weight:600}.badge-todo{background:var(--warn-tint);border-color:var(--warn);color:var(--warn)}.badge-overdue{background:var(--bad-tint);border-color:var(--bad);color:var(--bad)}.badge-submitted{background:var(--ok-tint);border-color:var(--ok);color:var(--ok)}.badge-graded{border-color:var(--accent);color:var(--accent);background:#e4edf1}.badge-info{border-color:var(--line);color:var(--muted);background:#eef1f4}.tasks{margin-top:4px}.task{border-bottom:1px solid var(--line)}.task:last-child{border-bottom:0}.task summary{cursor:pointer;flex-wrap:wrap;align-items:center;gap:10px;padding:12px 0;display:flex}.task-title{flex:1;min-width:140px;font-weight:600}.task-due{color:var(--muted);font-size:.9rem}.task-body{padding:0 0 14px 4px}.task p{margin:6px 0}.task-text{white-space:pre-wrap;max-width:70ch}.due{color:var(--muted)}.overdue{color:var(--bad);font-weight:600}.submit-box{border:1px solid var(--line);background:#f6f8f9;border-radius:4px;margin-top:10px;padding:12px}.submit-row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.submit-row input[type=file]{flex:1;min-width:200px}.task .link{color:var(--accent);cursor:pointer;text-align:left;font:inherit;background:0 0;border:0;padding:0;text-decoration:underline}.course-grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px;display:grid}.course-card{color:inherit;background:var(--surface);border:1px solid var(--line);border-left:6px solid var(--line);border-radius:6px;flex-direction:column;gap:4px;min-height:44px;padding:16px 18px;text-decoration:none;display:flex}.course-card:hover{border-color:var(--accent);box-shadow:0 2px 8px #0e5c731f}.course-card.course-good{border-left-color:var(--ok)}.course-card.course-near{border-left-color:var(--warn)}.course-card.course-low{border-left-color:var(--bad)}.cc-top{justify-content:space-between;align-items:baseline;gap:8px;display:flex}.cc-title{color:var(--muted);margin:0 0 8px}.chips{flex-wrap:wrap;gap:6px;min-height:4px;margin-top:8px;display:flex}.cc-open{color:var(--accent);margin-top:auto;padding-top:10px;font-weight:600}.back{margin:0 0 8px}.back a{padding:8px 0;display:inline-block}.course-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:14px;display:flex}.stats{grid-template-columns:repeat(3,1fr);gap:10px;display:grid}.stat{background:var(--surface);border:1px solid var(--line);border-radius:6px;flex-direction:column;padding:12px 14px;display:flex}.stat-num{font-variant-numeric:tabular-nums;font-size:1.6rem;font-weight:700;line-height:1.1}.stat-label{color:var(--muted);font-size:.85rem}.stat-good .stat-num{color:var(--ok)}.stat-near .stat-num{color:var(--warn)}.stat-low .stat-num{color:var(--bad)}.jump{z-index:5;background:var(--bg);border-bottom:1px solid var(--line);scrollbar-width:none;gap:8px;margin:16px -16px 0;padding:10px 16px;display:flex;position:sticky;top:0;overflow-x:auto}.jump::-webkit-scrollbar{display:none}.jump button{border:1px solid var(--line);background:var(--surface);min-height:44px;color:var(--muted);cursor:pointer;white-space:nowrap;border-radius:22px;flex:none;align-items:center;gap:8px;padding:0 16px;font-weight:600;display:inline-flex}.jump button.on{background:var(--accent);border-color:var(--accent);color:#fff}.jump button.on .count{color:#fff;background:#ffffff40}.block{margin-top:22px;scroll-margin-top:70px}.block>h2{border-bottom:2px solid var(--line);margin-bottom:8px;padding-bottom:6px}.block .tasks{background:var(--surface);border:1px solid var(--line);border-radius:6px;padding:0 14px}@media (width<=560px){.stats{gap:8px}.stat{padding:10px}.stat-num{font-size:1.3rem}.stat-label{font-size:.78rem}.submit-row{flex-direction:column;align-items:stretch}.submit-row .btn{width:100%;min-height:44px}.task summary{padding:14px 0}}.badge-closed{border-color:var(--bad);color:var(--bad);background:#eef1f4}.materials{gap:12px;display:grid}.mat-group{border:1px solid var(--line);background:var(--surface);border-radius:6px}.mat-group summary{cursor:pointer;align-items:center;gap:8px;min-height:48px;padding:12px 14px;font-weight:700;list-style-position:inside;display:flex}.count{color:var(--accent);background:#e4edf1;border-radius:10px;padding:0 8px;font-size:.8rem;font-weight:600}.mat-group ul{margin:0;padding:0 14px 6px;list-style:none}.mat-group li{border-top:1px solid var(--line);grid-template-columns:auto 1fr auto;align-items:center;gap:12px;padding:10px 0;display:grid}.ext{width:44px;height:44px;color:var(--accent);background:#e4edf1;border-radius:6px;place-items:center;font-size:.72rem;font-weight:700;display:grid}.mat-name{flex-direction:column;min-width:0;display:flex}.mat-name strong,.mat-name .muted{overflow-wrap:anywhere}.mat-actions{flex-wrap:wrap;justify-content:flex-end;gap:6px;display:flex}.danger{color:var(--bad);border-color:var(--bad)}.small{font-size:.85rem}@media (width<=560px){.mat-group li{grid-template-columns:auto 1fr}.mat-actions{grid-column:1/-1;justify-content:stretch}.mat-actions .btn{flex:1;min-height:44px}}.upload-form .row{align-items:end}.upload-form input[type=text],.upload-form select{width:100%}.progress{background:#e6ebef;border-radius:5px;height:10px;margin:12px 0 4px;overflow:hidden}.progress div{background:var(--accent);height:100%;transition:width .15s}.stat-link{color:inherit;text-decoration:none}.stat-link:hover{border-color:var(--accent)}.stat-more{color:var(--accent);margin-top:4px;font-size:.8rem;font-weight:600}.att-summary{grid-template-columns:repeat(4,1fr);gap:10px;margin-top:16px;display:grid}.att-summary .stat:first-child .stat-label{font-size:.8rem}.att-controls{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin:16px 0 10px;display:flex}.filters{flex-wrap:wrap;gap:6px;display:flex}.filters button{border:1px solid var(--line);background:var(--surface);min-height:38px;color:var(--muted);cursor:pointer;border-radius:22px;padding:0 14px;font-weight:600}.filters button.on{background:var(--accent);border-color:var(--accent);color:#fff}.filters .count{opacity:.8;font-variant-numeric:tabular-nums;margin-left:4px}tr.row-absent td{background:var(--bad-tint)}@media (width<=560px){.att-summary{grid-template-columns:repeat(2,1fr)}}.seg-nav{z-index:5;background:var(--bg);margin-top:14px;padding:8px 0;position:sticky;top:0}.seg{grid-template-columns:repeat(var(--cols,3), minmax(0, 1fr));border:1px solid var(--line);background:#e6ecf0;border-radius:12px;gap:4px;padding:4px;display:grid}.seg button{min-width:0;min-height:46px;color:var(--muted);font:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;border:0;border-radius:9px;justify-content:center;align-items:center;gap:6px;padding:0 6px;font-size:.95rem;font-weight:600;display:flex;position:relative}.seg button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.seg button.on{background:var(--surface);color:var(--accent);box-shadow:0 1px 3px #0000002e}.seg-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.seg-count{min-width:20px;height:20px;color:var(--accent);background:#d5dfe5;border-radius:10px;flex:none;place-items:center;padding:0 6px;font-size:.75rem;font-weight:700;line-height:1;display:inline-grid}.seg-count-warn{background:var(--warn);color:#fff}@media (width<=420px){.seg button{padding:0 2px;font-size:.86rem}.seg-count{min-width:18px;height:18px;padding:0 4px;font-size:.68rem;position:absolute;top:3px;right:3px}}@media (width<=340px){.seg button{font-size:.8rem}}.screen{margin-top:6px}.screen h2{border-bottom:2px solid var(--line);margin:6px 0 10px;padding-bottom:6px}.screen .tasks{background:var(--surface);border:1px solid var(--line);border-radius:6px;padding:0 14px}.sections{margin:0;padding:0;list-style:none}.sections li{background:var(--surface);border:1px solid var(--line);border-radius:4px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:10px;padding:14px 16px;display:flex}.sections .actions{flex-wrap:wrap;gap:8px;display:flex}.att-tools{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px;display:flex}.att-list{background:var(--surface);border:1px solid var(--line);border-radius:4px;margin:0 0 16px;padding:0;list-style:none}.att-list li{border-bottom:1px solid var(--line);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;padding:10px 14px;display:flex}.att-list li:last-child{border-bottom:0}.att-student{text-align:left;flex-direction:column;align-items:flex-start;display:flex}.seg{border:1px solid var(--line);border-radius:4px;display:inline-flex;overflow:hidden}.seg-btn{border:0;border-right:1px solid var(--line);min-height:40px;color:var(--ink);cursor:pointer;background:#fff;padding:0 14px}.seg-btn:last-child{border-right:0}.seg-P.on{background:var(--ok);color:#fff}.seg-A.on{background:var(--bad);color:#fff}.seg-L.on{background:var(--warn);color:#fff}.summary-head{justify-content:space-between;align-items:center;margin:32px 0 10px;display:flex}tr.low td{background:var(--bad-tint)}.assign-details summary{cursor:pointer;font-weight:700}.assign-details form{margin-top:14px}textarea{border:1px solid var(--line);width:100%;color:inherit;resize:vertical;font:inherit;background:#fff;border-radius:4px;padding:8px 10px}.check{align-items:center;gap:8px;min-height:42px;font-weight:400;display:flex}.check input{width:auto;min-height:0}.attach{border-top:1px solid var(--line);margin-top:18px;padding-top:14px}.attached{flex-wrap:wrap;align-items:center;gap:10px;margin:6px 0 10px;display:flex}.link{color:var(--accent);cursor:pointer;text-align:left;background:0 0;border:0;padding:0;text-decoration:underline}.submissions{margin-top:32px}.submissions h2{margin-bottom:4px}.late{color:var(--bad);font-weight:600}.pick{max-width:420px}.pct{align-items:center;gap:6px;display:flex}.pct span{font-weight:600}.hint{margin:12px 0 0;font-size:.9rem}.mark-input{text-align:right;width:90px}.lock{cursor:pointer;white-space:nowrap;border:1px solid var(--ok);background:var(--ok-tint);min-height:36px;color:var(--ok);border-radius:4px;padding:0 12px;font-weight:600}.lock-on{border-color:var(--bad);background:var(--bad-tint);color:var(--bad)}.lock-bar{background:var(--surface);border:1px solid var(--line);border-radius:4px;margin:6px 0 16px;padding:12px}.lock-bar p{max-width:70ch;margin:0 0 8px}.lock-actions{flex-wrap:wrap;gap:8px;display:flex}@media (width<=560px){.lock-actions .btn{flex:1;min-height:44px}.lock{min-height:44px}}.tabs{border-bottom:2px solid var(--line);flex-wrap:wrap;gap:4px;margin-bottom:16px;display:flex}.tabs button{min-height:42px;color:var(--muted);cursor:pointer;background:0 0;border:0;border-bottom:3px solid #0000;margin-bottom:-2px;padding:0 18px;font-weight:600}.tabs button.on{color:var(--accent);border-bottom-color:var(--accent)}.panel h2{margin-bottom:6px}.panel .muted{margin:0 0 14px}code{background:#eef1f4;border-radius:3px;padding:1px 5px}:root{--bg:#eef1f4;--surface:#fff;--ink:#17212b;--muted:#5b6875;--line:#d3dae1;--accent:#0e5c73;--ok:#1e7b4f;--ok-tint:#e3f3ea;--warn:#8a5a00;--warn-tint:#fbf0d6;--bad:#b42318;--bad-tint:#fbe4e1;--font:"Segoe UI", system-ui, -apple-system, Roboto, "Helvetica Neue", Arial, sans-serif}*{box-sizing:border-box}body{background:var(--bg);color:var(--ink);font:16px/1.5 var(--font);margin:0}h1,h2,h3{margin:0;line-height:1.2}h1{font-size:1.6rem}h2{font-size:1.2rem}h3{font-size:1.05rem}a{color:var(--accent)}button,input,select{font:inherit}.page{max-width:960px;margin:0 auto;padding:24px 16px 64px}.page-head{margin-bottom:20px}.page-head p{color:var(--muted);margin:4px 0 0}label{margin-bottom:4px;font-size:.92rem;font-weight:600;display:block}input,select{border:1px solid var(--line);width:100%;min-height:42px;color:inherit;background:#fff;border-radius:4px;padding:8px 10px}.field{margin-bottom:14px}.btn{border:1px solid var(--accent);background:var(--accent);color:#fff;cursor:pointer;border-radius:4px;justify-content:center;align-items:center;min-height:42px;padding:0 16px;font-weight:600;text-decoration:none;display:inline-flex}.btn:hover{filter:brightness(1.12)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-quiet{color:var(--accent);background:0 0}:focus-visible{outline-offset:2px;outline:3px solid #7fb3c4}.msg{border:1px solid;border-radius:4px;margin:12px 0;padding:10px 12px}.msg-ok{background:var(--ok-tint);border-color:var(--ok);color:#124d31}.msg-error{background:var(--bad-tint);border-color:var(--bad);color:#7a1810}.table-wrap{background:var(--surface);border:1px solid var(--line);border-radius:4px;overflow-x:auto}table{border-collapse:collapse;width:100%}th,td{text-align:left;border-bottom:1px solid var(--line);padding:9px 12px}tr:last-child td{border-bottom:0}th{background:#f6f8f9;font-weight:600}.num{text-align:right;font-variant-numeric:tabular-nums}.muted{color:var(--muted)}.empty{background:var(--surface);border:1px dashed var(--line);color:var(--muted);border-radius:4px;padding:24px}.panel{background:var(--surface);border:1px solid var(--line);border-radius:4px;margin-bottom:20px;padding:16px}.row{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));align-items:end;gap:12px;display:grid}
