:root{--canvas:#f2f2f7;--surface:#fff;--ink:#1c1c1e;--muted:#636366;--line:#e5e5ea;--blue:#007aff;color:var(--ink);background:var(--canvas);font-synthesis:none;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif}*{box-sizing:border-box}body{min-width:320px;min-height:100vh;margin:0}button,input,select,textarea{font:inherit}button{cursor:pointer}.login-shell{background:#fff;grid-template-columns:46% 54%;min-height:100vh;display:grid}.brand-panel{color:#fff;background:#17243b;flex-direction:column;justify-content:space-between;min-height:100vh;padding:58px 64px;display:flex;position:relative;overflow:hidden}.brand-panel:after{content:"";opacity:.12;pointer-events:none;background-image:linear-gradient(#fff 1px,#0000 1px),linear-gradient(90deg,#fff 1px,#0000 1px);background-size:56px 56px;position:absolute;inset:0}.brand-panel>*{z-index:1;position:relative}.eyebrow,.section-index{color:#8798af;letter-spacing:.16em;text-transform:uppercase;margin:0;font-size:12px;font-weight:700}.brand-panel h1{letter-spacing:-.045em;margin:0;font:600 68px/1 STSong,SimSun,serif}.brand-copy{color:#c9d2df;max-width:440px;margin:24px 0 0;font-size:19px;line-height:1.8}.record-mark{align-items:end;gap:16px;display:flex}.record-mark strong{font:500 52px/1 STSong,SimSun,serif}.record-mark span{color:#8798af;letter-spacing:.18em;padding-bottom:5px;font-size:11px}.login-panel{place-items:center;padding:64px;display:grid}form{width:min(390px,100%)}form h2{margin:16px 0 8px;font:600 38px/1.25 STSong,SimSun,serif}.muted{color:#69758a;margin:0;line-height:1.7}label{color:#43506a;gap:9px;margin-top:28px;font-size:14px;font-weight:600;display:grid}input{color:#17243b;background:#fff;border:1px solid #cfd6e1;border-radius:3px;outline:none;width:100%;padding:13px 14px;transition:border-color .15s,box-shadow .15s}input:focus{border-color:#2f5e8e;box-shadow:0 0 0 3px #2f5e8e20}.primary{color:#fff;background:#2f5e8e;border:0;border-radius:3px;width:100%;margin-top:28px;padding:14px;font-weight:700}.primary:disabled{cursor:wait;opacity:.6}.error{color:#a23b3b;margin:18px 0 -10px;font-size:14px}.text-button{color:#2f5e8e;background:0 0;border:0;padding:4px 0}.text-button:hover{text-decoration:underline}.loading{color:#69758a;place-items:center;min-height:100vh;display:grid}.workspace-shell{background:#eef2f5;grid-template-columns:260px minmax(0,1fr);min-height:100vh;display:grid}.workspace-sidebar{color:#dbe4ec;background:#16243a;flex-direction:column;height:100vh;padding:34px 22px 24px;display:flex;position:sticky;top:0}.sidebar-brand{border-bottom:1px solid #ffffff18;padding:0 12px 30px}.sidebar-brand strong,.sidebar-brand span{display:block}.sidebar-brand strong{color:#fff;letter-spacing:-.04em;font-size:24px}.sidebar-brand span{color:#8092a8;letter-spacing:.18em;margin-top:8px;font-size:9px;font-weight:700}.workspace-sidebar nav{flex:1;padding-top:28px}.workspace-sidebar nav>p{color:#71849b;letter-spacing:.14em;margin:0 12px 12px;font-size:10px;font-weight:700}.workspace-sidebar nav button,.nav-pending{color:#aebccc;text-align:left;background:0 0;border:0;border-radius:7px;justify-content:space-between;align-items:center;width:100%;min-height:44px;padding:0 12px;font-size:14px;display:flex}.workspace-sidebar nav button:before,.nav-pending:before{content:"";background:#50647d;border-radius:50%;width:5px;height:5px;margin-right:11px}.workspace-sidebar nav button span,.nav-pending span{flex:1}.workspace-sidebar nav button.active{color:#fff;background:#2d5c80;box-shadow:inset 3px 0 #75b6b0}.nav-pending{opacity:.58;cursor:default}.nav-pending small{color:#95a5b7;background:#ffffff0b;border-radius:999px;padding:2px 6px;font-size:9px}.sidebar-account{border-top:1px solid #ffffff18;grid-template-columns:36px minmax(0,1fr) auto;align-items:center;gap:10px;padding:20px 6px 0;display:grid}.account-avatar{color:#17324b;background:#9bd0ca;border-radius:9px;place-items:center;width:36px;height:36px;font-weight:800;display:grid}.sidebar-account strong,.sidebar-account div span{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.sidebar-account strong{color:#f5f8fb;font-size:13px}.sidebar-account div span{color:#8294a9;margin-top:3px;font-size:11px}.sidebar-account-actions{gap:2px;display:grid}.sidebar-account .text-button{color:#9cafc1;min-height:22px;padding:0 4px;font-size:12px}.account-dialog-backdrop{z-index:10;background:#13243a80;place-items:center;padding:24px;display:grid;position:fixed;inset:0}.account-dialog{background:#fff;border:1px solid #d5dee7;border-radius:12px;width:min(420px,100%);padding:26px;box-shadow:0 24px 80px #12203340}.account-dialog h2{margin:0 0 18px}.account-dialog form{gap:14px;display:grid}.account-dialog label{color:#52667d;gap:6px;font-size:13px;display:grid}.account-dialog .form-actions{margin-top:4px}.account-dialog .secondary{margin-top:0}.workspace-topbar{border-bottom:1px solid #ced8e1;justify-content:space-between;align-items:center;height:112px;display:flex}.workspace-topbar p{color:#7890a7;letter-spacing:.16em;margin:0 0 8px;font-size:10px;font-weight:800}.workspace-topbar h1{color:#17263d;letter-spacing:-.04em;margin:0;font-size:30px;line-height:1.2}.workspace-topbar>span{color:#5d6f84;background:#f8fafc;border:1px solid #d2dce5;border-radius:999px;padding:7px 11px;font-size:12px}.workspace-error{margin:18px 0 0}.module-placeholder{background:#fff;border:1px solid #d5dee7;border-radius:12px;margin-top:28px;padding:32px}.module-placeholder h2{margin:0 0 10px}.module-placeholder p{color:#718096;margin:0}.module-loading{color:#718096;margin-top:32px}.group-submissions{gap:18px;margin-top:28px;display:grid}.group-summary{align-items:center;gap:12px;display:flex}.group-summary>span{color:#245f57;background:#dff0ea;border-radius:6px;padding:7px 10px;font-weight:800}.group-summary p{color:#718096;margin:0;font-size:13px}.group-submission-tabs{border-bottom:1px solid #d5dee7;gap:8px;display:flex}.group-submission-tabs button{color:#718096;font:inherit;cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;padding:9px 4px;font-weight:700}.group-submission-tabs button[aria-selected=true]{color:#244a70;border-color:#2f668f}.group-submission-section{gap:12px;display:grid}.group-submission-section>h2{color:#244a70;margin:6px 0 0;font-size:17px}.group-empty{color:#718096;background:#fff;border:1px dashed #d5dee7;border-radius:12px;margin:0;padding:18px 26px}.group-assignment{background:#fff;border:1px solid #d5dee7;border-radius:12px;overflow:hidden}.group-assignment>header{border-bottom:1px solid #e0e6ec;justify-content:space-between;align-items:center;padding:24px 26px;display:flex}.group-assignment>header span{color:#2f668f;font-size:11px;font-weight:800}.group-assignment>header h3{margin:6px 0 0;font-size:21px}.group-assignment>header strong{color:#52667d;font-size:13px}.group-assignment table{border-collapse:collapse;width:100%}.group-assignment th,.group-assignment td{text-align:left;border-bottom:1px solid #edf1f4;padding:14px 26px}.group-assignment th{color:#7a899a;letter-spacing:.05em;background:#f8fafc;font-size:11px}.group-assignment td{color:#36485f;font-size:13px}.member-state{border-radius:999px;padding:4px 9px;font-size:11px;font-weight:700;display:inline-block}.member-state.done{color:#226153;background:#dff0ea}.member-state.missing{color:#8a5b1c;background:#f6ead6}.submission-status{gap:22px;padding:28px 0 72px;display:grid}.attendance-module{gap:20px;padding:28px 0 72px;display:grid}.attendance-controls{background:#fff;border:1px solid #d5dee7;border-radius:12px;align-items:end;gap:16px;padding:20px 24px;display:flex}.attendance-controls label{color:#52667d;gap:6px;font-size:13px;display:grid}.attendance-controls input,.attendance-controls select{min-width:150px}.attendance-session-state{color:#8a5b1c;background:#f6ead6;border-radius:999px;margin-left:auto;padding:7px 11px;font-size:12px;font-weight:700}.attendance-session-state.completed{color:#226153;background:#dff0ea}.attendance-heading{justify-content:space-between;align-items:end;gap:20px;display:flex}.attendance-heading h2{margin:6px 0 0;font:600 30px STSong,SimSun,serif}.attendance-actions{gap:10px;display:flex}.attendance-actions .secondary,.attendance-actions .primary{margin:0}.attendance-list{background:#fff;border:1px solid #d5dee7;border-radius:12px;overflow:auto}.attendance-list table{border-collapse:collapse;width:100%}.attendance-list th,.attendance-list td{text-align:left;border-bottom:1px solid #edf1f4;padding:13px 20px;font-size:13px}.attendance-list th{color:#7a899a;letter-spacing:.05em;background:#f8fafc;font-size:11px}.attendance-list td{color:#36485f}.attendance-list td small{color:#8a98a8;margin-top:4px;font-size:11px;display:block}.attendance-list td select{width:130px;padding:8px 10px}.attendance-excluded{background:#fafbfc;color:#8a98a8!important}.attendance-exemption{color:#78889b;font-size:12px}.attendance-create-actions{justify-content:center;margin-top:20px}.attendance-checkin-form{text-align:left;background:#fff;border:1px solid #d5dee7;border-radius:12px;gap:16px;margin:20px 0;padding:22px;display:grid}.attendance-checkin-form h3,.attendance-checkin-form p{margin:0}.attendance-checkin-heading{justify-content:space-between;align-items:center;gap:16px;display:flex}.attendance-checkin-heading h3{margin:0 0 5px}.attendance-checkin-heading>span{color:#1759a8;background:#eaf3ff;border-radius:999px;flex:none;padding:7px 11px;font-size:12px;font-weight:700}.attendance-checkin-fields{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;display:grid}.attendance-checkin-fields label{color:#52667d;gap:6px;font-size:13px;display:grid}.attendance-map-card{gap:10px;min-width:0;display:grid}.attendance-map-tools{flex-wrap:wrap;align-items:end;gap:9px;display:flex}.attendance-map-search{color:#52667d;flex:280px;gap:6px;font-size:13px;display:grid}.attendance-map-tools button{white-space:nowrap;margin:0}.attendance-map-canvas{background:#f1f5f9;border:1px solid #dbe4ee;border-radius:10px;width:100%;height:330px;overflow:hidden}.attendance-map-card.read-only .attendance-map-canvas{height:300px}.attendance-map-caption{color:#52667d;justify-content:space-between;align-items:center;gap:12px;font-size:12px;display:flex}.attendance-map-caption strong{color:#1759a8;flex:none}.attendance-map-caption button{flex:none}.attendance-map-location-status{color:#52667d;margin:0;font-size:12px;line-height:1.6}.attendance-map-error{margin:0}.attendance-map-center-marker{color:#fff;white-space:nowrap;background:#1769c2;border:1px solid #fff;border-radius:12px 12px 12px 2px;padding:5px 8px;font-size:11px;font-weight:700;transform:translate(-50%,-100%);box-shadow:0 2px 8px #102a4333}.attendance-map-current-marker{background:#15a66a;border:3px solid #fff;border-radius:50%;width:16px;height:16px;box-shadow:0 1px 8px #102a4355}.attendance-session-details{background:#fff;border:1px solid #d5dee7;border-radius:12px;grid-template-columns:minmax(260px,.8fr) minmax(360px,1.2fr);align-items:start;gap:18px;padding:18px;display:grid}.attendance-session-meta{gap:12px;display:grid}.attendance-session-meta>div{gap:3px;display:grid}.attendance-session-meta span{color:#7a899a;font-size:11px}.attendance-session-meta strong{color:#263b53;font-size:14px}.attendance-session-meta small{color:#8a98a8;font-size:11px}.student-attendance{gap:20px;padding:28px 0 72px;display:grid}.student-checkin-card{background:#fff;border:1px solid #d5dee7;border-radius:12px;justify-items:start;gap:12px;max-width:680px;padding:28px;display:grid}.student-checkin-card h2,.student-checkin-card p{margin:0}.student-checkin-card .primary{margin:8px 0 0}@media (width<=720px){.attendance-checkin-fields,.attendance-session-details{grid-template-columns:1fr}.attendance-checkin-form{padding:16px}.attendance-map-canvas{height:280px}.attendance-checkin-heading{align-items:start}}.student-management{gap:22px;padding:28px 0 72px;display:grid}.student-form-card,.student-list{background:#fff;border:1px solid #d5dee7;border-radius:12px;padding:24px 26px}.student-form-card h2,.student-list h2{margin:5px 0 18px}.student-form{gap:14px;display:grid}.student-form>label,.student-filters label{color:#52667d;gap:6px;font-size:13px;display:grid}.student-check{color:#52667d;align-self:end;align-items:center;gap:7px;font-size:13px;display:flex}.student-filters{gap:12px;margin:0 0 16px;display:flex}.student-filters select{min-width:110px}.student-list{overflow:auto}.student-list table{border-collapse:collapse;width:100%}.student-list th,.student-list td{text-align:left;border-bottom:1px solid #edf1f4;padding:12px 8px;font-size:13px}.student-list th{color:#7a899a;font-size:11px}.student-list small{color:#718096}.student-actions{white-space:nowrap;gap:6px;display:flex}.submission-overview{background:#fff;border:1px solid #d5dee7;border-radius:12px;justify-content:space-between;align-items:end;gap:28px;padding:24px 26px;display:flex}.submission-overview label{width:min(360px,100%);margin:0}.submission-overview div{text-align:right;grid-template-columns:auto auto;align-items:baseline;gap:4px 14px;display:grid}.submission-overview div span,.submission-overview div small{color:#718096;font-size:12px}.submission-overview div strong{color:#183d60;font-size:25px}.submission-overview div small{grid-column:1/-1}.submission-groups{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:18px;display:grid}.assignment-manager{gap:54px;padding:38px 0 80px;display:grid}.assignment-form-card,.assignment-list,.student-tasks section{background:#fff;border:1px solid #d8dee8;padding:34px}.assignment-form-card h2,.assignment-list h2,.student-tasks h3{margin:10px 0 24px;font:600 30px STSong,SimSun,serif}.assignment-form{width:100%}.assignment-title{margin-bottom:22px!important}.form-row{grid-template-columns:1fr 1fr 1.35fr;gap:22px;display:grid}.assignment-form label{margin-top:0}.assignment-note{display:block;margin-top:22px!important}.assignment-note textarea{color:#17243b;resize:vertical;background:#fff;border:1px solid #cfd6e1;border-radius:3px;width:100%;min-height:84px;padding:13px 14px}.assignment-note textarea:focus{border-color:#2f5e8e;outline:0;box-shadow:0 0 0 3px #2f5e8e20}select{color:#17243b;background:#fff;border:1px solid #cfd6e1;border-radius:3px;width:100%;padding:13px 14px}fieldset{border:0;border-top:1px solid #d8dee8;margin:30px 0 0;padding:24px 0 0}legend{padding:0 18px 0 0;font-weight:700}legend span{color:#69758a;margin-left:8px;font-size:12px}.roster-groups{gap:18px;display:grid}.roster-group{border-top:1px solid #e0e5ed;padding-top:14px}.roster-group:first-child{border-top:0;padding-top:0}.roster-group h3{color:#35516f;margin:0 0 10px;font-size:14px}.roster-group h3 span{color:#8792a4;margin-left:6px;font-size:12px;font-weight:400}.roster-grid{grid-template-columns:repeat(4,1fr);gap:10px;display:grid}.student-option{border:1px solid #e0e5ed;grid-template-columns:18px 1fr;align-items:start;gap:10px;padding:12px;font-weight:500}.student-option input{width:16px;margin:2px 0 0}.student-option small{color:#8792a4;margin-top:4px;font-weight:400;display:block}.form-actions{justify-content:flex-end;gap:12px;display:flex}.assignment-save{width:auto;min-width:140px}.secondary{color:#43506a;background:#fff;border:1px solid #cfd6e1;border-radius:3px;margin-top:28px;padding:13px 22px}.success{color:#29705a;font-size:14px}.list-heading{justify-content:space-between;align-items:start;display:flex}.list-heading>span{color:#69758a;font-size:13px}.task-line{border-top:1px solid #d8dee8;justify-content:space-between;align-items:center;gap:24px;padding:20px 0;display:flex}.task-line strong,.task-line span{display:block}.task-line strong{margin-bottom:7px;font:600 20px STSong,SimSun,serif}.task-line span{color:#69758a;font-size:12px}.task-note{color:#43536a;white-space:pre-wrap;grid-column:1/-1;max-width:680px;margin:0;font-size:13px;line-height:1.65}.task-line-main>div{align-items:center;gap:10px;display:flex}.task-line-main .admin-task-state{border-radius:999px;padding:4px 8px;font-size:11px;font-weight:700}.admin-task-state.draft{color:#72561c;background:#fff3cf}.admin-task-state.published{color:#1f654e;background:#dff3ea}.admin-task-state.trashed{color:#69758a;background:#e9edf2}.admin-task-state.closed{color:#7a4650;background:#f4e5e7}.task-meta{text-align:right;align-items:center;gap:22px;display:flex}.task-actions{gap:8px;display:flex}.task-actions button{color:#2f5e8e;background:#fff;border:1px solid #cfd6e1;border-radius:3px;padding:7px 11px}.assignment-tabs{border-bottom:1px solid #d8dee8;gap:24px;display:flex}.assignment-tabs button{color:#708096;background:0 0;border:0;border-bottom:2px solid #0000;padding:12px 2px}.assignment-tabs button[aria-selected=true]{color:#163d63;border-color:#2f668f;font-weight:700}.task-actions .danger,.attendance-actions .danger{color:#9b3f3f;border-color:#e0c3c3}.empty{color:#8792a4}.student-tasks{grid-template-columns:minmax(0,1.5fr) minmax(280px,.85fr);align-items:start;gap:24px;padding:24px 0 60px;display:grid}.student-tasks>section{min-width:0;padding:24px;box-shadow:0 4px 20px #1c1c1e03}.student-section-heading{justify-content:space-between;align-items:start;gap:12px;margin-bottom:24px;display:flex}.student-section-heading h3{letter-spacing:-.5px;margin:6px 0 0;font-size:23px;line-height:1.3}.student-section-heading>span{color:var(--muted);background:var(--canvas);border-radius:8px;flex:none;padding:6px 9px;font-size:12px}.student-task-list{gap:16px;display:grid}.student-task-card{border:1px solid var(--line);background:#fafafd;border-radius:14px;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:16px;min-width:0;padding:20px;display:grid}.student-task-card.is-submitted{background:#fbfdfc}.student-task-head{min-width:0}.student-task-head h4{overflow-wrap:anywhere;letter-spacing:-.3px;margin:10px 0 0;font-size:19px;font-weight:600;line-height:1.45}.task-state{border-radius:7px;padding:5px 9px;font-size:11px;font-weight:600;display:inline-block}.task-state.submitted{color:#24804c;background:#e8f6ed}.task-state.pending{color:#94601b;background:#fff2df}.student-deadline{color:var(--ink);text-align:right;font-variant-numeric:tabular-nums;justify-self:end;margin:0;font-size:12px;line-height:1.7}.student-deadline>span{color:var(--muted);margin-bottom:4px;font-size:11px;display:block}.student-task-card .task-note{color:var(--muted);overflow-wrap:anywhere}.submission-panel{border:1px solid var(--line);background:var(--surface);border-radius:10px;grid-column:1/-1;align-items:center;gap:12px;min-width:0;padding:14px;display:flex}.submission-panel p{color:var(--muted);margin:0;font-size:12px;line-height:1.7}.submission-panel>div{flex:1;min-width:0}.submission-panel strong,.submission-panel span{min-width:0;display:block}.submission-panel strong{color:var(--ink);text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;overflow:hidden}.submission-panel div>span{color:var(--muted);margin-top:5px;font-size:11px;line-height:1.6}.archive-mark{width:34px;height:38px;color:var(--blue);background:#eaf3ff;border:1px solid #007aff14;border-radius:8px;flex:none;place-items:center;font-size:22px;display:grid!important}.upload-button{color:#fff;background:var(--blue);cursor:pointer;border:1px solid #0000;border-radius:10px;grid-column:1/-1;justify-self:stretch;place-items:center;min-height:44px;margin:0;padding:11px 16px;font-size:13px;font-weight:600;transition:background .15s;display:grid}.upload-button:hover{background:#0064d6}.is-submitted .upload-button{border-color:var(--line);color:var(--blue);background:var(--surface)}.is-submitted .upload-button:hover{background:#eaf3ff}.upload-button:focus-within{outline:3px solid var(--blue);outline-offset:3px}.upload-button.disabled{cursor:wait;opacity:.6}.upload-button input{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.upload-error{grid-column:1/-1;font-size:13px;line-height:1.6;color:#c03932!important}.compact .student-task-card{grid-template-columns:1fr;gap:12px;padding:16px}.compact .student-task-head h4{font-size:17px}.compact .student-deadline{text-align:left;justify-self:start}.compact .student-deadline>span{margin-right:8px;display:inline}.student-tasks .empty{text-align:center;color:var(--muted);background:#fafafd;border-radius:12px;margin:0;padding:26px 18px;font-size:13px;line-height:1.8}button:focus-visible,a:focus-visible{outline-offset:3px;outline:3px solid #5f87b1}@media (prefers-reduced-motion:reduce){*{transition:none!important}}.login-shell{background:var(--canvas);grid-template-columns:1fr;place-items:center;padding:80px 24px;display:grid;position:relative}.login-brand{color:var(--ink);letter-spacing:-.5px;align-items:baseline;gap:8px;font-size:19px;font-weight:650;line-height:1;display:flex;position:absolute;top:28px;left:32px}.login-brand strong{font-weight:650}.login-version{color:inherit;letter-spacing:.04em;font-size:10px;font-weight:500;line-height:1}.login-card-stage{perspective:1100px;width:min(580px,100%)}.login-panel{--tilt-x:0deg;--tilt-y:0deg;--shine-x:50%;--shine-y:50%;--shine-angle:120deg;--shine-opacity:0;isolation:isolate;width:100%;transform:rotateX(var(--tilt-x)) rotateY(var(--tilt-y));background:linear-gradient(145deg,#fff,#fcfcff);border:1px solid #fff;border-radius:28px;padding:38px;transition:transform .18s ease-out,box-shadow .3s;position:relative;overflow:hidden;box-shadow:inset 0 2px 3px #fff,inset 0 -1px 1px #dadae680,0 24px 55px -26px #42426b38,0 5px 16px #28284606}.login-panel:before{content:"";z-index:-1;pointer-events:none;border-radius:inherit;background:radial-gradient(ellipse at var(--shine-x) var(--shine-y), #fff 0%, #fff0 65%);position:absolute;inset:0}.login-panel:after{content:"";z-index:-1;pointer-events:none;border-radius:inherit;opacity:var(--shine-opacity);background:linear-gradient(var(--shine-angle), transparent 12%, #94deff50 30%, #c5acff55 42%, #ffa9d645 50%, #ffe2a655 59%, #a9edea45 68%, transparent 85%);-webkit-mask-image:radial-gradient(ellipse at var(--shine-x) var(--shine-y), #000 10%, #0009 55%, transparent 95%);mask-image:radial-gradient(ellipse at var(--shine-x) var(--shine-y), #000 10%, #0009 55%, transparent 95%);transition:opacity .4s;position:absolute;inset:0}.login-panel form{width:100%;position:relative}.login-panel form>label{margin-top:24px;font-size:13px}.login-panel form>label:first-of-type{margin-top:30px}.login-panel input{background:#ffffffb8;border-color:#e5e5ee;border-radius:12px;min-height:48px;box-shadow:inset 0 1px 3px #26264303}.login-panel .primary{border-radius:12px;min-height:48px;box-shadow:0 6px 16px #007aff1c}.login-panel{padding:30px 38px}.login-panel form>label,.login-panel form>label:first-of-type{margin-top:20px}.login-panel .primary{margin-top:24px}.login-card-stage{width:min(360px,100%)}.login-card-stage .login-panel{border-radius:24px;padding:28px 30px}.login-card-stage .login-panel h2{font-size:24px}.login-card-stage .login-panel form>label{margin-top:18px;font-size:12px}.login-card-stage .login-panel input{min-height:40px;padding:10px 12px;font-size:14px}.login-card-stage .login-panel .primary{min-height:42px;margin-top:20px;padding:11px;font-size:14px}.login-curtain{z-index:20;background:var(--canvas);position:fixed;inset:0;overflow:auto}.login-curtain.lifting{pointer-events:none;animation:.7s cubic-bezier(.76,0,.24,1) forwards login-reveal}@keyframes login-reveal{to{transform:translateY(-105%)}}.feedback-backdrop{width:100vw;max-width:none;height:100dvh;max-height:none;color:var(--ink);background:#17172166;border:0;margin:0;padding:24px;position:fixed;inset:0;overflow-y:auto}.feedback-backdrop[open]{place-items:center;display:grid}.feedback-backdrop::backdrop{background:0 0}.feedback-stage{perspective:1100px;width:min(440px,100%)}.feedback-panel{padding:32px}.feedback-panel>h2{margin:0 0 12px;font-size:24px;font-weight:650;position:relative}.feedback-close{z-index:2;color:#636366;background:#ededf4;border:0;border-radius:50%;place-items:center;width:30px;height:30px;font-size:22px;display:grid;position:absolute;top:18px;right:18px}.feedback-panel form label{margin:20px 0 8px}.feedback-panel textarea{resize:vertical;background:#ffffffc0;width:100%;min-height:140px;font-size:14px;line-height:1.7}.feedback-hint{color:#8e8e93;justify-content:flex-end;gap:12px;margin-top:8px;font-size:11px;line-height:1.6;display:flex}.feedback-hint span:last-child{white-space:nowrap}.feedback-panel .error{margin-bottom:10px}@media (prefers-reduced-motion:reduce){.login-curtain.lifting{animation-duration:1ms}}.login-panel h2,form h2{letter-spacing:-.7px;margin-top:0;font-family:inherit;font-size:30px;font-weight:650;line-height:1.3}.login-panel h2{font-size:30px;font-weight:650}.login-panel .muted{font-size:14px}@media (prefers-reduced-motion:reduce),(hover:none),(pointer:coarse){.login-panel{transition:none;transform:none}.login-panel:after{display:none}}label{color:var(--muted);font-weight:500}input,select,textarea{border:1px solid var(--line);min-height:42px;color:var(--ink);background:var(--surface);border-radius:10px;padding:11px 13px}input:focus,select:focus,textarea:focus{border-color:var(--blue);outline:0;box-shadow:0 0 0 3px #007aff15}.primary{background:var(--blue);border-radius:10px;font-weight:600}.primary:hover{background:#0064d6}.secondary{border-color:var(--line);color:var(--blue);border-radius:10px}.secondary:hover{background:#eaf3ff}.text-button{color:var(--blue)}button:disabled{opacity:.5}button:focus-visible,a:focus-visible{outline-color:var(--blue)}.muted,.list-heading>span{color:var(--muted)}.eyebrow,.section-index{color:#8e8e93;letter-spacing:.1em;font-size:11px}.workspace-shell{background:var(--canvas);grid-template-columns:224px minmax(0,1fr)}.workspace-sidebar{color:var(--ink);border-right:1px solid var(--line);background:#fbfbfd;padding:30px 16px 22px}.sidebar-brand{border-color:var(--line);padding:0 14px 28px}.sidebar-brand strong{color:var(--ink);font-size:22px;font-weight:650}.sidebar-brand span,.workspace-sidebar nav>p{color:#8e8e93}.workspace-sidebar nav button,.nav-pending{color:var(--muted);border-radius:10px;min-height:46px;margin-bottom:4px}.workspace-sidebar nav button:before,.nav-pending:before{background:#c7c7cc}.workspace-sidebar nav button:hover{color:var(--ink);background:#f2f2f7}.workspace-sidebar nav button.active{color:var(--blue);box-shadow:none;background:#eaf3ff;font-weight:600}.workspace-sidebar nav button.active:before{background:var(--blue)}.nav-pending small{color:#8e8e93;background:#f2f2f7}.sidebar-account{border-color:var(--line);padding:18px 2px 0}.sidebar-account strong{color:var(--ink)}.sidebar-account div span,.sidebar-account .text-button{color:var(--muted)}.account-avatar{color:var(--blue);background:#eaf3ff}.workspace-content{min-width:0;padding:0 36px}.workspace-topbar{border-color:var(--line);padding:30px 0 22px}.workspace-topbar h1{color:var(--ink);letter-spacing:-.6px;font-family:inherit;font-size:28px;font-weight:650}.workspace-topbar p{color:#8e8e93}.workspace-topbar>span{color:var(--muted);border-color:var(--line);background:#fff}.assignment-manager,.student-management{gap:24px;padding-top:24px}.assignment-form-card,.assignment-list,.student-form-card,.student-list,.student-tasks section,.attendance-controls,.attendance-checkin-form,.attendance-session-details,.module-placeholder,.student-checkin-card{border:1px solid var(--line);background:var(--surface);border-radius:18px}.assignment-form-card,.assignment-list,.student-form-card,.student-list{min-width:0;padding:26px}.assignment-form-card h2,.assignment-list h2,.student-form-card h2,.student-list h2,.attendance-heading h2,.student-tasks h3{color:var(--ink);font-family:inherit;font-size:23px;font-weight:650}.assignment-note textarea{border-color:var(--line);background:#fafafd;border-radius:10px}.form-row{gap:16px}.student-option{border-color:var(--line);background:#fafafd;border-radius:10px}.student-option:has(input:checked){background:#eaf3ff;border-color:#007aff30}.student-option input,.student-check input{min-height:0;accent-color:var(--blue)}.assignment-tabs{background:var(--canvas);border:0;border-radius:10px;gap:4px;margin:20px 0 8px;padding:4px;display:flex}.assignment-tabs button{color:var(--muted);border:0;border-radius:7px;flex:1;padding:9px 16px}.assignment-tabs button[aria-selected=true]{color:var(--ink);background:#fff;box-shadow:0 1px 5px #0000000d}.task-line{border-color:var(--line);flex-wrap:wrap;gap:20px;padding:20px 0}.task-line-main{flex:1;min-width:200px}.task-line strong{font-family:inherit;font-size:18px}.task-actions,.student-actions{flex-wrap:wrap;gap:8px}.task-actions button,.student-actions button{border:1px solid var(--line);min-height:34px;color:var(--blue);background:#fff;border-radius:8px;margin:0;padding:7px 11px}.task-actions .danger,.student-actions .danger,.secondary.danger{color:#d63832}.student-list{overflow-x:auto}.student-list table{min-width:680px}.student-list th,.attendance-list th{color:var(--muted);background:#fafafd}.student-list td,.student-list th,.attendance-list td,.attendance-list th{border-color:var(--line)}.student-filters{flex-wrap:wrap;gap:12px;margin:20px 0;display:flex}.student-filters label{flex:1;min-width:120px;margin:0}.student-form{grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;width:100%}.student-form label{margin-top:0}.student-form .form-row{grid-column:1/-1;grid-template-columns:repeat(auto-fit,minmax(170px,1fr))}.student-form .form-actions,.student-form>.error,.student-form>.success{grid-column:1/-1}.student-check{white-space:nowrap;min-height:42px}.student-check input{flex:none;width:18px;height:18px;padding:0}.attendance-controls{flex-wrap:wrap;padding:18px 22px}.attendance-heading{flex-wrap:wrap;align-items:flex-start}.attendance-actions{flex-wrap:wrap;align-items:center}.attendance-actions button{white-space:nowrap;flex:none;width:auto;margin:0}.attendance-list{border-color:var(--line);border-radius:16px}.attendance-export-controls{border:1px solid var(--line);background:#fff;border-radius:18px;gap:14px;padding:22px;display:grid}.attendance-export-controls .muted{margin-top:5px;font-size:12px}.attendance-export-fields{flex-wrap:wrap;align-items:flex-end;gap:12px;display:flex}.attendance-export-fields label{margin:0;font-size:12px}.attendance-export-fields button{white-space:nowrap;width:auto;margin:0}.completion-ledger{gap:18px;min-width:0;padding:24px 0 60px;display:grid}.ledger-toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;display:flex}.ledger-toolbar h2{margin:5px 0 0;font-size:23px;font-weight:650}.ledger-actions{gap:10px;display:flex}.ledger-actions button{white-space:nowrap;width:auto;margin:0}.ledger-scroll{border:1px solid var(--line);background:#fff;border-radius:16px;max-height:70vh;overflow:auto}.ledger-table{border-spacing:0;border-collapse:separate;width:100%;font-size:13px}.ledger-table caption{text-align:left;color:var(--muted);background:#fff;padding:18px 22px;font-size:12px;line-height:1.7}.ledger-table th,.ledger-table td{text-align:center;white-space:nowrap;border-right:1px solid #f2f2f7;border-bottom:1px solid var(--line);min-width:82px;padding:12px 16px}.ledger-table thead th{z-index:3;color:var(--muted);background:#fafafd;font-weight:600;position:sticky;top:0}.ledger-date{color:var(--ink);background:#f8f9fd;font-weight:600}.ledger-label{color:var(--muted);background:#fff;text-align:left!important}.ledger-table td[data-mark=submitted]{color:#248b55;background:#f3fbf6;font-weight:650}.ledger-table td[data-mark=null]{color:#8e8e93;background:#fafafd}.ledger-table tr:nth-child(3n) td{border-bottom-width:2px}.ledger-settings{border:1px solid var(--line);background:#fff;border-radius:16px;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;width:100%;padding:22px;display:grid}.ledger-settings label{margin:0}.ledger-settings button{align-self:end;width:auto;margin:0}@media (width>=1300px){.assignment-manager{grid-template-columns:minmax(360px,.85fr) minmax(440px,1.15fr);align-items:start}}@media (width<=720px){.student-form{grid-template-columns:1fr}}@media (width<=1000px){.workspace-shell{grid-template-columns:190px minmax(0,1fr)}.workspace-content{padding:0 22px}.form-row,.ledger-settings{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=720px){.workspace-shell{display:block}.workspace-sidebar{border:0;border-bottom:1px solid var(--line);height:auto;padding:18px;position:static}.sidebar-brand{padding:0 0 12px}.sidebar-brand span,.workspace-sidebar nav>p,.nav-pending{display:none}.workspace-sidebar nav{gap:6px;padding:12px 0;display:flex;overflow-x:auto}.workspace-sidebar nav button{flex:none;width:auto;margin:0;padding:0 14px}.workspace-sidebar nav button:before{display:none}.sidebar-account{padding-top:12px}.workspace-content{padding:0 16px}.workspace-topbar{padding:22px 0}.workspace-topbar h1{font-size:25px}.form-row,.attendance-checkin-fields,.ledger-settings,.attendance-session-details,.student-management{grid-template-columns:1fr}.attendance-heading{gap:16px}.assignment-form-card,.assignment-list,.student-form-card,.student-list{padding:20px}.login-panel{padding:28px}.attendance-export-fields label{flex:1;min-width:130px}.attendance-map-caption{flex-wrap:wrap}}.student-attendance{padding-top:24px}.student-checkin-card{gap:16px;width:100%;max-width:720px;padding:28px;box-shadow:0 4px 20px #1c1c1e03}.student-checkin-card h2{letter-spacing:-.5px;font-size:23px;font-weight:650}.student-checkin-card>p:not(.eyebrow){color:var(--muted);font-size:13px;line-height:1.9}.student-checkin-card .primary{width:100%;min-height:46px;margin-top:4px}.student-checkin-card>.success{color:#24804c;background:#e8f6ed;border-radius:10px;width:100%;padding:14px 16px;font-weight:600}.group-submissions{margin-top:24px;padding-bottom:60px}.group-summary{flex-wrap:wrap}.group-summary>span{color:var(--blue);background:#eaf3ff;border-radius:8px;font-size:13px;font-weight:600}.group-summary p{color:var(--muted)}.group-submission-tabs{border:1px solid var(--line);background:#eaeaef;border-radius:10px;gap:4px;width:fit-content;max-width:100%;padding:4px}.group-submission-tabs button{color:var(--muted);border:0;border-radius:7px;padding:9px 14px;font-size:13px;font-weight:500}.group-submission-tabs button[aria-selected=true]{color:var(--ink);background:#fff;box-shadow:0 1px 5px #0000000d}.group-submission-section>h2{color:var(--ink);font-size:18px;font-weight:600}.group-assignment{border-color:var(--line);border-radius:16px}.group-assignment>header{border-color:var(--line);flex-wrap:wrap;gap:12px;padding:22px 24px}.group-assignment>header h3{color:var(--ink);overflow-wrap:anywhere;font-size:19px;font-weight:600}.group-assignment>header span{color:var(--muted);font-weight:500}.group-assignment>header strong{color:var(--blue);background:#eaf3ff;border-radius:8px;padding:6px 10px;font-weight:600}.group-assignment th,.group-assignment td{color:var(--ink);border-color:var(--line)}.group-assignment th{color:var(--muted);background:#fafafd}.group-assignment tbody tr:last-child td{border-bottom:0}.group-empty{border:1px solid var(--line);color:var(--muted);border-radius:16px}@media (width<=1100px){.student-tasks{grid-template-columns:1fr}}@media (width<=720px){.student-tasks>section{padding:20px}.student-task-card{grid-template-columns:1fr;gap:14px;padding:16px}.student-deadline{text-align:left;justify-self:start}.student-deadline>span{margin-right:8px;display:inline}.student-section-heading{flex-wrap:wrap;margin-bottom:18px}.student-checkin-card{padding:22px}.group-submission-tabs{width:100%}.group-submission-tabs button{flex:1;padding:10px 6px;font-size:12px}.group-assignment>header{padding:18px}.group-assignment th,.group-assignment td{padding:12px 10px;font-size:12px}.group-assignment th:last-child,.group-assignment td:last-child{overflow-wrap:anywhere;width:40%}}.workspace-sidebar nav button .nav-status-ring,.workspace-sidebar nav button .nav-task-dot{flex:none;margin-left:auto}.nav-status-ring{width:22px;height:22px;color:var(--blue)}.nav-status-ring svg{width:100%;height:100%;display:block;overflow:visible}.nav-status-ring circle,.nav-status-ring .ring-mark{fill:none;stroke:currentColor;stroke-width:1.8px;stroke-linecap:round;stroke-linejoin:round}.nav-status-ring .ring-track{stroke:#d8d8df}.nav-status-ring .ring-fill{transform-origin:12px 12px;transition:stroke-dashoffset .8s linear;transform:rotate(-90deg)}.nav-status-ring.sent{color:#248b55}.nav-status-ring.failed{color:#d63832}.nav-task-dot{background:#30b366;border-radius:50%;width:7px;height:7px;box-shadow:0 0 0 3px #30b3660c}.feedback-panel .primary:disabled{cursor:default;background:var(--blue);opacity:.4}.feedback-panel .primary:disabled:hover{background:var(--blue)}.feedback-tabs{background:#eeeef4;border-radius:10px;gap:4px;margin-top:20px;padding:4px;display:flex;position:relative}.feedback-tabs button{color:var(--muted);background:0 0;border:0;border-radius:7px;flex:1;padding:9px 12px;font-size:12px}.feedback-tabs button[aria-selected=true]{color:var(--ink);background:#fff;box-shadow:0 1px 5px #0000000d}.feedback-pending-hint{margin-top:12px;font-size:12px}.feedback-history{min-width:0;margin-top:18px;position:relative}.feedback-history>.muted{margin-bottom:12px;font-size:11px}.feedback-history-list{overscroll-behavior:contain;gap:12px;max-height:min(48dvh,400px);display:grid;overflow-y:auto}.feedback-history-empty{color:var(--muted);text-align:center;padding:36px 12px;font-size:13px}.feedback-record{border:1px solid var(--line);background:#ffffffb8;border-radius:12px;padding:14px}.feedback-record header{color:var(--muted);justify-content:space-between;align-items:center;gap:8px;font-size:10px;display:flex}.feedback-record p{color:var(--ink);white-space:pre-wrap;overflow-wrap:anywhere;margin:12px 0 0;font-size:13px;line-height:1.8}.feedback-record small{color:#d63832;margin-top:10px;font-size:11px;line-height:1.7;display:block}.feedback-record .text-button{margin-top:10px;font-size:12px}.feedback-record-state{color:var(--muted);background:var(--canvas);border-radius:6px;flex:none;padding:4px 6px}.feedback-record-state.sent{color:#248b55;background:#e8f6ed}.feedback-record-state.failed{color:#d63832;background:#fff0ef}.feedback-panel{justify-items:stretch}.feedback-panel>h2{text-align:left;font-size:24px}.feedback-tabs,.feedback-history{width:100%}.assignment-form-card,.assignment-form,.assignment-form fieldset,.roster-group{min-width:0}.assignment-form fieldset{box-sizing:border-box;width:100%}.roster-group-heading{align-items:center;gap:12px;margin-bottom:12px;display:flex}.roster-group-select{flex-shrink:0;align-items:center;gap:10px;font-weight:600;display:flex!important}.roster-group-select input{width:16px;margin:0}.roster-group-toggle{min-width:0;color:var(--muted);cursor:pointer;font:inherit;background:0 0;border:0;flex:1;justify-content:space-between;align-items:center;gap:12px;padding:8px;display:flex}.roster-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,155px),1fr))}.roster-grid[hidden]{display:none}.student-option{grid-template-columns:18px minmax(0,1fr);min-width:0}.student-option span{overflow-wrap:anywhere;min-width:0}.attendance-top-row{grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);align-items:stretch;gap:20px;display:grid}.attendance-top-row.has-session{grid-template-columns:1fr}.attendance-top-row .attendance-controls{align-content:center;min-width:0}.attendance-create-card{text-align:left;min-width:0;margin:0;padding:24px}.attendance-create-card h2{margin-top:0;font-size:20px}.attendance-create-card p{margin:10px 0;font-size:14px}.attendance-create-card .attendance-create-actions{justify-content:flex-start;margin-top:16px}@media (width<=900px){.attendance-top-row{grid-template-columns:1fr}}.feedback-panel{transform:none}.feedback-panel:before,.feedback-panel:after{display:none}
