@import"https://fonts.googleapis.com/css2?family=Be+Vietnam+Pro:wght@400;500;600;700&display=swap";:root{--bg:#f8fafd;--surface:#fff;--surface-2:#f0f4f9;--surface-3:#e9eef6;--hover:#e8ebee;--ink:#1f1f1f;--ink-2:#444746;--muted:#5f6368;--faint:#80868b;--line:#e1e3e1;--line-2:#c4c7c5;--brand:#0b57d0;--brand-2:#0842a0;--brand-soft:#d3e3fd;--nav-on:#c2e7ff;--nav-on-ink:#001d35;--green:#146c2e;--green-soft:#c4eed0;--amber:#8a5300;--red:#b3261e;--red-soft:#f9dedc;--blue-soft:#d3e3fd;--violet:#6a3fb5;--violet-soft:#eaddff;--tint:#f6f9fe;--select:#e8f0fe;--ok-bg:#e6f4ea;--ok-ink:#0d5323;--warn-bg:#fff4d6;--warn-soft:#ffefc9;--warn-ink:#5b3b00;--bad-ink:#601410;--pdf-soft:#fce8e6;--pdf-ink:#c5221f;--blue-ink:#04409f;--red-line:#f2b8b5;--green-2:#0f5223;--on-brand:#fff;--on-green:#fff;--on-red:#fff;--toast-bg:#303030;--toast-ink:#f2f2f2;--radius:16px;--radius-sm:12px;--pill:999px;--shadow-1:0 1px 2px #0000001f,0 1px 3px 1px #00000014;--shadow-2:0 2px 6px 2px #00000026,0 1px 2px #0000004d;font-family:Be Vietnam Pro,system-ui,-apple-system,Segoe UI,Arial,sans-serif;font-size:14px;color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased}*{box-sizing:border-box}body{margin:0;background:var(--bg)}h1,h2,h3,p{margin:0}h1{font-size:24px;font-weight:600;letter-spacing:-.01em}h2{font-size:16px;font-weight:600}h3{font-size:12.5px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin:20px 0 8px}p{color:var(--muted);line-height:1.55}a{color:inherit;text-decoration:none}small{display:block;font-size:12px;color:var(--muted);line-height:1.4}code{font-family:ui-monospace,Consolas,monospace;background:var(--surface-2);padding:1px 6px;border-radius:6px;font-size:13px;color:var(--ink)}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer;background:none;border:0;padding:0}button:disabled{cursor:not-allowed;opacity:.45}:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.icon{flex-shrink:0;display:block}.flip{transform:rotate(180deg)}.primary,.secondary,.danger{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:40px;padding:0 20px;border-radius:var(--pill);font-weight:600;font-size:14px;white-space:nowrap;transition:background .15s,box-shadow .15s,border-color .15s}.primary{background:var(--brand);color:var(--on-brand)}.primary:hover:not(:disabled){background:var(--brand-2);box-shadow:var(--shadow-1)}.secondary{border:1px solid var(--line-2);color:var(--brand);background:var(--surface)}.secondary:hover:not(:disabled){background:var(--tint);border-color:var(--brand)}.danger{border:1px solid var(--red-line);color:var(--red);background:var(--surface)}.danger:hover:not(:disabled){background:var(--red-soft)}.text-btn,.text-button{display:inline-flex;align-items:center;gap:6px;height:36px;padding:0 12px;border-radius:var(--pill);color:var(--brand);font-weight:600}.text-btn:hover:not(:disabled),.text-button:hover:not(:disabled){background:var(--select)}.link{color:var(--brand);font-weight:600;font-size:13px}.link:hover{text-decoration:underline}.danger-text,.danger-link{color:var(--red)!important}.icon-btn,.icon-button{display:inline-grid;place-items:center;width:40px;height:40px;border-radius:50%;color:var(--ink-2);transition:background .15s;position:relative;flex-shrink:0}.icon-btn:hover:not(:disabled),.icon-button:hover:not(:disabled){background:var(--hover)}.chip{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 14px;border:1px solid var(--line-2);border-radius:8px;font-size:13px;font-weight:500;color:var(--ink-2);background:var(--surface);transition:.15s}.chip:hover{background:var(--surface-2)}.chip.on{background:var(--brand-soft);border-color:var(--brand-soft);color:var(--nav-on-ink)}.chips{display:flex;flex-wrap:wrap;gap:8px}input,select,textarea{width:100%;height:44px;border:1px solid var(--line-2);border-radius:8px;background:var(--surface);padding:0 14px;outline:0;transition:border-color .15s,box-shadow .15s}textarea{height:auto;padding:12px 14px;resize:vertical;line-height:1.5}input[type=checkbox],input[type=radio]{width:18px;height:18px;accent-color:var(--brand);margin:0;flex-shrink:0}input:hover,select:hover,textarea:hover{border-color:var(--ink-2)}input:focus,select:focus,textarea:focus{border-color:var(--brand);box-shadow:0 0 0 1px var(--brand)}input:disabled,select:disabled{background:var(--surface-2);color:var(--muted)}input.invalid{border-color:var(--red);box-shadow:0 0 0 1px var(--red)}select{appearance:none;padding-right:36px;background:var(--surface) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='%23444746'%3E%3Cpath d='M7 10l5 5 5-5z'/%3E%3C/svg%3E") no-repeat right 10px center}label{font-size:13px;font-weight:500;color:var(--ink-2)}.field{display:grid;gap:6px;margin-bottom:18px}.field>span{font-weight:600;color:var(--ink)}.field-row{display:grid;grid-template-columns:1fr 1fr;gap:14px}.with-btn{display:flex;gap:8px;align-items:center}.with-btn .chip{height:44px;flex-shrink:0}.hint{font-size:12.5px;color:var(--muted);margin:2px 0}.hint.bad{color:var(--red)}.muted{color:var(--muted);font-size:13px}.ok{color:var(--green);font-weight:600}.warn-text{color:var(--amber);font-style:normal;font-size:12.5px}.req{color:var(--red)}.wide{grid-column:1/-1}.status{display:inline-flex;align-items:center;height:24px;padding:0 10px;border-radius:6px;font-size:12px;font-weight:600;background:var(--surface-2);color:var(--ink-2);white-space:nowrap}.status.big{height:32px;padding:0 14px;font-size:13px;border-radius:8px}.status.draft{background:var(--surface-3);color:var(--muted)}.status.submitted,.status.under_review{background:var(--blue-soft);color:var(--blue-ink)}.status.needs_supplement{background:var(--warn-soft);color:var(--amber)}.status.approved{background:var(--green-soft);color:var(--green)}.status.rejected{background:var(--red-soft);color:var(--red)}.pts{font-weight:700;color:var(--green);white-space:nowrap}.pts.big{font-size:18px}.pts.dim{color:var(--faint)}.pts small{display:inline;font-weight:500;color:var(--muted)}.role{display:inline-flex;height:22px;align-items:center;padding:0 8px;border-radius:6px;font-size:11.5px;font-weight:600;margin-right:4px}.role.student{background:var(--blue-soft);color:var(--blue-ink)}.role.teacher{background:var(--green-soft);color:var(--green)}.role.admin{background:var(--violet-soft);color:var(--violet)}.tag-row{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}.avatar{display:grid;place-items:center;width:32px;height:32px;border-radius:50%;background:var(--brand);color:var(--on-brand);font-weight:600;font-size:13px;flex-shrink:0}.avatar.xs{width:22px;height:22px;font-size:11px}.avatar.big{width:48px;height:48px;font-size:18px}.avatar.huge{width:72px;height:72px;font-size:28px}.brandmark{display:block;width:40px;height:40px;object-fit:contain;flex-shrink:0}.toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%);z-index:90;display:flex;align-items:center;gap:12px;min-width:320px;max-width:min(640px,calc(100vw - 32px));padding:10px 8px 10px 20px;border-radius:8px;background:var(--toast-bg);color:var(--toast-ink);box-shadow:var(--shadow-2);animation:toast .2s ease}.toast.error{background:var(--red)}.toast span{flex:1;line-height:1.45}.toast button{color:inherit;width:36px;height:36px;display:grid;place-items:center;border-radius:50%}.toast button:hover{background:#fff2}.toast+.toast{bottom:84px}@keyframes toast{0%{opacity:0;transform:translate(-50%,10px)}}.progress{position:fixed;inset:0 0 auto;height:3px;z-index:95;background:linear-gradient(90deg,transparent,var(--brand),transparent) 0 0/40% 100% no-repeat;animation:progress 1s linear infinite}@keyframes progress{0%{background-position:-40% 0}to{background-position:140% 0}}.splash{min-height:100vh;display:grid;place-items:center}.splash .brandmark{width:88px;height:88px;animation:pulse .8s ease-in-out infinite alternate}@keyframes pulse{to{opacity:.4}}.banner{display:flex;align-items:center;gap:14px;padding:14px 18px;border-radius:var(--radius-sm);background:var(--surface-2);color:var(--ink-2);margin-bottom:12px;transition:filter .15s}.banner>span{flex:1;display:grid;gap:2px;line-height:1.45}.banner strong{color:inherit}.banner.warn{background:var(--warn-bg);color:var(--warn-ink)}.banner.bad{background:var(--red-soft);color:var(--bad-ink)}.banner.ok{background:var(--ok-bg);color:var(--ok-ink)}.banner.small{font-size:13px;padding:10px 14px}a.banner:hover{filter:brightness(.97)}.empty-state{display:grid;justify-items:center;gap:12px;text-align:center;padding:56px 16px;color:var(--faint)}.empty-state.small{padding:28px 16px}.cover{position:fixed;inset:0;z-index:100;display:flex;flex-direction:column;align-items:center;justify-content:space-between;padding:clamp(28px,5vh,56px) 24px clamp(28px,6vh,60px);overflow:hidden;cursor:pointer;color:#e9edf3;outline:0;--silver:linear-gradient(180deg,#ffffff 0%,#e4e8ee 42%,#a9b2bf 70%,#eef1f5 100%);background:radial-gradient(120% 80% at 50% 0%,#1d417d,#0d2550 42%,#071633 72%,#040c1f)}.cover-bg{position:absolute;inset:0;pointer-events:none}.cover-glow{position:absolute;left:50%;top:38%;width:min(900px,140vw);aspect-ratio:1;transform:translate(-50%,-50%);border-radius:50%;background:radial-gradient(circle,#4f7cc955 0%,#2a4f9022 35%,transparent 65%)}.cover-lines{position:absolute;inset:0;background:repeating-linear-gradient(115deg,transparent 0 46px,#ffffff06 46px 47px);mask-image:radial-gradient(ellipse at center,#000 30%,transparent 75%);-webkit-mask-image:radial-gradient(ellipse at center,#000 30%,transparent 75%)}.cover-sweep{position:absolute;top:-20%;bottom:-20%;width:30%;left:-40%;background:linear-gradient(100deg,transparent,#ffffff14 45%,#ffffff26 50%,#ffffff14 55%,transparent);transform:skew(-14deg);animation:cover-sweep 7s ease-in-out 1.2s infinite}@keyframes cover-sweep{0%{left:-40%}55%,to{left:130%}}.cover-defs{position:absolute;width:0;height:0;overflow:hidden}.cover-frame{position:absolute;inset:clamp(12px,2vw,24px);border:1px solid #c9d1dc2e;pointer-events:none}.cover-frame:before{content:"";position:absolute;inset:7px;border:1px solid #c9d1dc17}.cover-corner{position:absolute;width:clamp(72px,9vw,128px);height:clamp(72px,9vw,128px);overflow:visible;filter:drop-shadow(0 0 6px #9fb8e04d);animation:cover-corner 1.1s cubic-bezier(.2,.8,.2,1) .25s both}.cover-corner.corner-1{top:-3px;left:-3px;--from:translate(-10px,-10px)}.cover-corner.corner-2{top:-3px;right:-3px;transform:scaleX(-1);--from:translate(10px,-10px) scaleX(-1)}.cover-corner.corner-3{bottom:-3px;left:-3px;transform:scaleY(-1);--from:translate(-10px,10px) scaleY(-1)}.cover-corner.corner-4{bottom:-3px;right:-3px;transform:scale(-1);--from:translate(10px,10px) scale(-1,-1)}@keyframes cover-corner{0%{opacity:0;transform:var(--from)}}.cover-top,.cover-body,.cover-cta{position:relative;z-index:1}.cover-top{display:flex;align-items:center;gap:14px;font-size:clamp(11px,1.2vw,13px);font-weight:600;letter-spacing:.32em;color:#c3cbd6;animation:cover-in .9s ease .1s both}.cover-rule-sm{width:clamp(24px,5vw,56px);height:1px;background:linear-gradient(90deg,transparent,#c9d1dc)}.cover-rule-sm:last-child{background:linear-gradient(90deg,#c9d1dc,transparent)}.cover-body{display:flex;flex-direction:column;align-items:center;text-align:center;max-width:1040px}.cover-emblem{position:relative;width:clamp(110px,15vh,150px);aspect-ratio:1;margin-bottom:clamp(18px,3vh,30px);animation:cover-emblem 1.1s cubic-bezier(.2,.8,.2,1) .2s both}.cover-emblem img{position:relative;width:100%;height:100%;object-fit:contain;filter:drop-shadow(0 10px 30px #0008)}.cover-halo{position:absolute;inset:-14%;border-radius:50%;border:1px solid #dfe4eb55;box-shadow:0 0 0 10px #ffffff08,0 0 60px 10px #8fb0e633;animation:cover-halo 3.2s ease-in-out infinite}@keyframes cover-halo{50%{box-shadow:0 0 0 16px #ffffff05,0 0 80px 18px #8fb0e644}}.cover-kicker{display:flex;align-items:center;gap:14px;margin:0 0 clamp(12px,2vh,20px);font-size:clamp(13px,1.4vw,16px);font-weight:700;letter-spacing:.5em;padding-left:.5em;color:#dfe4eb;animation:cover-in .9s ease .45s both}.cover-kicker span{width:40px;height:1px;background:#c9d1dc99}.cover-title{margin:0;padding:.3em 0 .1em;font-size:clamp(20px,3.1vw,40px);line-height:1.4;font-weight:800;letter-spacing:.015em;background:var(--silver) 0 .3em/100% 1.4em repeat-y;-webkit-background-clip:text;background-clip:text;color:transparent;text-wrap:balance;filter:drop-shadow(0 2px 12px #00000059);animation:cover-in 1s ease .6s both}.cover-divider{display:flex;align-items:center;gap:12px;margin:clamp(18px,3vh,30px) 0 clamp(10px,1.6vh,16px);color:#c9d1dc;font-size:10px;animation:cover-in .9s ease .8s both}.cover-divider span{width:clamp(60px,12vw,140px);height:1px;background:linear-gradient(90deg,transparent,#c9d1dc)}.cover-divider span:last-child{background:linear-gradient(90deg,#c9d1dc,transparent)}.cover-product{margin:0;font-size:clamp(13px,1.4vw,16px);font-weight:700;letter-spacing:.42em;padding-left:.42em;color:#aeb8c6;animation:cover-in .9s ease .95s both}.cover-cta{display:grid;justify-items:center;gap:10px;animation:cover-in .9s ease 1.15s both}.cover-btn{display:inline-flex;align-items:center;gap:8px;height:48px;padding:0 18px 0 26px;border-radius:999px;border:1px solid #dfe4eb88;background:linear-gradient(180deg,#ffffff1f,#ffffff08);color:#f3f5f8;font-weight:600;font-size:15px;letter-spacing:.02em;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);box-shadow:0 8px 30px #0006,inset 0 1px #fff3;transition:background .2s,transform .2s}.cover:hover .cover-btn,.cover:focus-visible .cover-btn{background:linear-gradient(180deg,#fff3,#ffffff12);transform:translateY(-2px)}.cover-btn .icon{animation:cover-nudge 1.6s ease-in-out infinite}@keyframes cover-nudge{50%{transform:translate(4px)}}@keyframes cover-in{0%{opacity:0;transform:translateY(16px)}}@keyframes cover-emblem{0%{opacity:0;transform:scale(.7) translateY(10px)}}.cover-leave-active{transition:opacity .7s ease,transform .7s ease,filter .7s ease}.cover-leave-to{opacity:0;transform:scale(1.08);filter:blur(8px)}.login .login-card{transition:opacity .6s ease .25s,transform .6s cubic-bezier(.2,.8,.2,1) .25s}.login.behind-cover .login-card{opacity:0;transform:translateY(28px) scale(.97)}@media(max-width:640px){.cover-top{letter-spacing:.18em}.cover-kicker{letter-spacing:.35em}.cover-product{letter-spacing:.3em}.cover-title{line-height:1.38}}:root[data-theme=dark]{color-scheme:dark;--bg:#0d1422;--surface:#141c2d;--surface-2:#1b2538;--surface-3:#232f47;--hover:#2a3754;--ink:#e6e9ef;--ink-2:#c4cbd7;--muted:#9aa4b7;--faint:#7c879c;--line:#27324a;--line-2:#3a4762;--brand:#8ab4f8;--brand-2:#aecbfa;--brand-soft:#21406f;--nav-on:#25467e;--nav-on-ink:#dce8ff;--green:#81c995;--green-2:#a8dab5;--green-soft:#173524;--amber:#f6c26b;--red:#f28b82;--red-soft:#3c1d1f;--blue-soft:#1f3a66;--violet:#c9a8ff;--violet-soft:#30265a;--tint:#17223a;--select:#1e3356;--ok-bg:#15301f;--ok-ink:#a8dab5;--warn-bg:#382c12;--warn-soft:#3d3014;--warn-ink:#f7d68f;--bad-ink:#f6b8b2;--pdf-soft:#3b1f22;--pdf-ink:#f28b82;--blue-ink:#aecbfa;--red-line:#6a2c2e;--on-brand:#0a1a36;--on-green:#0b2414;--on-red:#3b0907;--toast-bg:#e3e7ee;--toast-ink:#141922;--shadow-1:0 1px 2px #0009,0 1px 3px 1px #0006;--shadow-2:0 2px 6px 2px #000a,0 1px 2px #000c }:root[data-theme=dark] select{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='%23c4cbd7'%3E%3Cpath d='M7 10l5 5 5-5z'/%3E%3C/svg%3E")}:root[data-theme=dark] .thumb,:root[data-theme=dark] .viewer-content{background:var(--surface-3)}:root[data-theme=dark] .modal-backdrop,:root[data-theme=dark] .viewer-backdrop,:root[data-theme=dark] .scrim.dim{background:#000000a6}:root[data-theme=dark] .brandmark{filter:drop-shadow(0 0 1px #fff6)}html{transition:background-color .25s ease}body,.rail,.top,.content,.block,.panel,.tile,.card-stat,.stat,.list-row,.menu,.modal,.dialog,.login-card,.drawer{transition:background-color .25s ease,border-color .25s ease,color .25s ease}.theme-btn .icon{transition:transform .35s ease}.theme-btn:hover .icon{transform:rotate(-20deg)}.login-theme{position:fixed;top:16px;right:16px;z-index:5}.login{min-height:100vh;display:grid;place-items:center;padding:24px}.login-card{width:min(440px,100%);background:var(--surface);border-radius:28px;padding:40px;display:grid;gap:4px;box-shadow:var(--shadow-1)}.login-brand{display:flex;align-items:center;gap:14px;margin-bottom:6px}.login-card .brandmark{width:64px;height:64px}.login-card h1{font-size:26px;font-weight:700;letter-spacing:.02em}.login-card>p{margin-bottom:20px}.login-card label{display:grid;gap:6px;margin-bottom:14px}.wide-btn{width:100%;height:48px;margin-top:6px}.demo{margin-top:22px;padding-top:18px;border-top:1px solid var(--line);display:grid;gap:10px;justify-items:center}.demo span{font-size:12.5px;color:var(--muted)}.demo div{display:flex;gap:8px;flex-wrap:wrap;justify-content:center}.app{display:flex;min-height:100vh}.rail{width:256px;flex-shrink:0;position:sticky;top:0;height:100vh;display:flex;flex-direction:column;padding:8px 12px 12px;background:var(--bg);z-index:30}.brand{display:flex;align-items:center;gap:12px;height:56px;padding:0 8px;margin-bottom:8px}.brand strong{display:block;font-size:17px;font-weight:700;color:var(--ink);letter-spacing:.01em}.brand small{font-size:11px}.new-wrap{position:relative;margin:0 0 16px}.new-btn{display:inline-flex;align-items:center;gap:12px;height:56px;padding:0 24px 0 18px;border-radius:16px;background:var(--surface);color:var(--ink);font-weight:600;box-shadow:var(--shadow-1);transition:box-shadow .15s,background .15s}.new-btn:hover,.new-btn.on{box-shadow:var(--shadow-2);background:var(--tint)}.menu{position:absolute;z-index:60;background:var(--surface);border-radius:8px;box-shadow:var(--shadow-2);padding:8px 0;min-width:240px;animation:menu .12s ease-out}@keyframes menu{0%{opacity:0;transform:translateY(-4px)}}.new-menu{top:0;left:0}.menu-item{display:flex;align-items:center;gap:14px;width:100%;height:44px;padding:0 18px;color:var(--ink);text-align:left;cursor:pointer;font-weight:400;font-size:14px}.menu-item:hover{background:var(--hover)}.menu-item .icon{color:var(--ink-2)}.menu-item span{display:grid;min-width:0}.menu-item span strong{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-menu .menu-item{height:56px}.menu-empty{padding:12px 18px;font-size:13px}nav{display:grid;gap:2px}.nav-item{display:flex;align-items:center;gap:16px;height:36px;padding:0 12px 0 16px;border-radius:var(--pill);color:var(--ink-2);font-weight:500;transition:background .12s}.nav-item:hover{background:var(--hover)}.nav-item.active{background:var(--nav-on);color:var(--nav-on-ink);font-weight:600}.nav-item span{flex:1}.nav-item em{font-style:normal;font-size:12px;font-weight:700;min-width:22px;height:20px;padding:0 6px;border-radius:var(--pill);background:var(--brand);color:var(--on-brand);display:grid;place-items:center}.rail-foot{margin-top:auto;padding:12px 8px 0}.role-pill{display:inline-flex;height:28px;align-items:center;padding:0 12px;border-radius:var(--pill);background:var(--surface-3);font-size:12px;font-weight:600;color:var(--ink-2)}.scrim{position:fixed;inset:0;z-index:25}.scrim.dim{background:#0006;z-index:28}.main{flex:1;min-width:0;display:flex;flex-direction:column}.top{position:sticky;top:0;z-index:27;display:flex;align-items:center;gap:8px;height:64px;padding:8px 16px 8px 0;background:var(--bg)}.menu-btn{display:none}.search{position:relative;flex:1;max-width:720px;display:flex;align-items:center;gap:12px;height:48px;padding:0 16px;border-radius:var(--pill);background:var(--surface-3);color:var(--ink-2);transition:background .15s,box-shadow .15s}.search.on{background:var(--surface);box-shadow:var(--shadow-1)}.search input{height:100%;border:0;background:none;padding:0;box-shadow:none;font-size:15px}.search input:focus{box-shadow:none}.search-menu{top:52px;left:0;right:0}.top .theme-btn{margin-left:auto}.bell em{position:absolute;top:4px;right:2px;min-width:18px;height:18px;padding:0 4px;border-radius:var(--pill);background:var(--red);color:var(--on-red);font-size:10.5px;font-weight:700;font-style:normal;display:grid;place-items:center;border:2px solid var(--bg)}.user-wrap{position:relative}.avatar-btn{width:36px;height:36px;margin:0 6px;border-radius:50%;background:var(--brand);color:var(--on-brand);font-weight:600;box-shadow:0 0 0 4px transparent;transition:box-shadow .15s}.avatar-btn:hover{box-shadow:0 0 0 4px var(--hover)}.user-menu{right:0;top:46px;width:300px;border-radius:24px;padding:8px}.user-menu .menu-item{border-radius:var(--pill)}.user-card{display:grid;justify-items:center;gap:4px;padding:16px 12px 18px;margin-bottom:6px;background:var(--surface-2);border-radius:18px;text-align:center}.user-card .avatar{margin-bottom:6px}.content{flex:1;background:var(--surface);border-radius:var(--radius);margin:0 16px 16px 0;padding:24px 28px 40px;min-width:0}.page-enter-active,.page-leave-active{transition:opacity .14s ease,transform .14s ease}.page-enter-from{opacity:0;transform:translateY(6px)}.page-leave-to{opacity:0}.page{max-width:1280px;margin:0 auto}.page.narrow{max-width:720px}.hello{margin-bottom:20px}.hello h1{font-size:28px;font-weight:500}.hello p{margin-top:4px}.page-top,.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:20px;flex-wrap:wrap}.page-top p,.page-head p{margin-top:4px;max-width:720px}.page-head.embedded{margin-bottom:12px}.back-btn{display:inline-flex;align-items:center;gap:8px;height:36px;padding:0 14px 0 10px;margin:-6px 0 10px -10px;border-radius:var(--pill);color:var(--ink-2);font-weight:500}.back-btn:hover{background:var(--hover)}.cards{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:18px}.cards.four{grid-template-columns:repeat(4,1fr)}.card-stat{display:grid;gap:2px;padding:18px 20px;border-radius:var(--radius);background:var(--surface-2);transition:background .15s;color:var(--ink)}a.card-stat:hover{background:var(--surface-3)}.card-stat .icon{color:var(--brand);margin-bottom:8px}.card-stat strong{font-size:30px;font-weight:600;line-height:1.2;font-variant-numeric:tabular-nums}.card-stat span{font-size:12.5px;color:var(--muted)}.card-stat.accent{background:var(--ok-bg)}.card-stat.accent .icon,.card-stat.accent strong{color:var(--green)}.block{border:1px solid var(--line);border-radius:var(--radius);padding:18px 20px;margin-bottom:16px;background:var(--surface)}.block.flush{padding:6px}.block-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px}.two{display:grid;grid-template-columns:1fr 1fr;gap:16px}.row{display:flex;align-items:center;gap:14px;width:100%;min-height:56px;padding:8px 10px;border-radius:var(--radius-sm);text-align:left;transition:background .12s;color:var(--ink)}.row:hover{background:var(--surface-2)}.row.static:hover{background:none}.row-ic{display:grid;place-items:center;width:36px;height:36px;border-radius:10px;background:var(--surface-2);color:var(--brand);flex-shrink:0}.row-main{flex:1;min-width:0;display:grid;gap:2px}.row-main strong{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.row.note.unread{background:var(--tint)}.row.note.unread strong{font-weight:700}.meter{height:6px;border-radius:6px;background:var(--surface-3);overflow:hidden;margin:4px 0 10px}.meter span{display:block;height:100%;background:var(--green);border-radius:6px;transition:width .4s}.step-no{display:grid;place-items:center;width:30px;height:30px;border-radius:50%;background:var(--surface-3);color:var(--ink-2);font-weight:700;font-size:13px;flex-shrink:0}.row.step.done .step-no{background:var(--green);color:var(--on-green)}.row.step.done strong{color:var(--muted)}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:14px;overflow-x:auto;scrollbar-width:none}.tabs button{display:inline-flex;align-items:center;gap:8px;height:44px;padding:0 16px;font-weight:600;color:var(--muted);border-bottom:3px solid transparent;border-radius:4px 4px 0 0;white-space:nowrap}.tabs button:hover{background:var(--surface-2);color:var(--ink)}.tabs button.on{color:var(--brand);border-bottom-color:var(--brand)}.tabs em{font-style:normal;font-size:11.5px;min-width:22px;height:20px;padding:0 6px;border-radius:var(--pill);background:var(--surface-3);display:grid;place-items:center;color:var(--ink-2)}.tabs button.on em{background:var(--brand-soft);color:var(--nav-on-ink)}.tabs.big button{height:48px;font-size:15px}.toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:14px}.toolbar select{width:auto;min-width:160px;height:40px}.field-search{flex:1;min-width:240px;display:flex;align-items:center;gap:10px;height:40px;padding:0 14px;border-radius:var(--pill);background:var(--surface-3);color:var(--ink-2)}.field-search input{height:100%;border:0;background:none;padding:0}.field-search input:focus{box-shadow:none}.list{display:grid}.list-head,.list-row{display:grid;grid-template-columns:minmax(220px,2.2fr) 1.4fr 70px 110px 120px;align-items:center;gap:14px;padding:0 12px}.list-row.teacher,.list-head.teacher{grid-template-columns:minmax(200px,2fr) 1.2fr 1.2fr 70px 100px 120px}.list-head{height:44px;border-bottom:1px solid var(--line);font-size:13px;font-weight:600;color:var(--muted)}.list-row{min-height:56px;border-bottom:1px solid var(--line);color:var(--ink);text-align:left;width:100%;transition:background .1s}.list-row:hover{background:var(--surface-2)}.list-row.static:hover{background:none}.list-row.sel{background:var(--select)}.list-row.locked{opacity:.6}.list-head.students,.list-row.students{grid-template-columns:minmax(220px,2.2fr) 70px 90px 90px 100px 1.6fr}.list-head.users,.list-row.users{grid-template-columns:minmax(220px,2fr) 1fr 1.2fr 110px 120px}.list-head.periods,.list-row.periods{grid-template-columns:minmax(220px,2fr) 1.2fr 1fr 140px}.cell{min-width:0;display:grid;gap:2px}.cell-main{display:flex;align-items:center;gap:12px;min-width:0}.cell-main strong{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cell-main>span:last-child{min-width:0;display:grid}.cell strong{font-weight:500}.num{text-align:right;justify-items:end}.end{display:flex;justify-content:flex-end}.list-row.students .cell:last-child{display:flex;flex-wrap:wrap;gap:4px}.steps{list-style:none;display:flex;gap:8px;padding:0;margin:0 0 16px}.steps li{flex:1;display:flex;align-items:center;gap:10px;height:44px;padding:0 14px;border-radius:var(--radius-sm);background:var(--surface-2);color:var(--muted);font-weight:500}.steps li span{display:grid;place-items:center;width:24px;height:24px;border-radius:50%;background:var(--surface);font-size:12px;font-weight:700}.steps li.done{color:var(--green)}.steps li.done span{background:var(--green);color:var(--on-green)}.steps li.on{background:var(--brand-soft);color:var(--nav-on-ink)}.steps li.on span{background:var(--brand);color:var(--on-brand)}.detail-grid{display:grid;grid-template-columns:1.25fr 1fr;gap:16px;align-items:start}.pick-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:10px}.pick,.level{display:grid;gap:4px;text-align:left;padding:14px;border-radius:var(--radius-sm);border:1px solid var(--line-2);background:var(--surface);transition:border-color .12s,background .12s,box-shadow .12s}.pick .icon{color:var(--brand)}.pick:hover,.level:hover{background:var(--surface-2)}.pick.on,.level.on{border-color:var(--brand);background:var(--select);box-shadow:0 0 0 1px var(--brand)}.level-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}.level{grid-template-columns:1fr auto;align-items:center}.level b{color:var(--green);font-size:15px}.facts{display:grid;grid-template-columns:1fr 1fr;gap:16px 20px;margin:0}.facts div{display:grid;gap:4px}.facts dt{font-size:12.5px;color:var(--muted)}.facts dd{margin:0;font-weight:600}.drop{display:grid;justify-items:center;gap:4px;padding:22px;border:2px dashed var(--line-2);border-radius:var(--radius-sm);color:var(--brand);cursor:pointer;text-align:center;transition:.15s;margin-bottom:10px}.drop strong{font-weight:600}.drop:hover,.drop.on{border-color:var(--brand);background:var(--tint)}.files{display:grid;gap:6px}.file{display:flex;align-items:center;gap:12px;padding:6px 6px 6px 12px;border-radius:var(--radius-sm);border:1px solid var(--line);cursor:pointer;font-weight:400;transition:.12s}.file:hover{background:var(--surface-2)}.file.on{border-color:var(--brand);background:var(--tint)}.file .icon-btn{width:34px;height:34px}.ftype,.mini-icon{display:inline-grid;place-items:center;min-width:34px;height:28px;padding:0 4px;border-radius:6px;font-size:10px;font-weight:700;background:var(--select);color:var(--brand)}.ftype.pdf,.mini-icon.pdf{background:var(--pdf-soft);color:var(--pdf-ink)}.action-bar{position:sticky;bottom:12px;z-index:5;display:flex;align-items:center;gap:10px;padding:12px 14px 12px 20px;margin:4px 0 16px;border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow-2)}.action-info{flex:1;display:flex;align-items:center;gap:14px;flex-wrap:wrap;min-width:0}.decide textarea{margin-bottom:10px}.decide .chips{margin-bottom:14px}.decide .chip{height:auto;min-height:32px;padding:6px 12px;text-align:left}.decide-row{display:flex;gap:10px;flex-wrap:wrap}.ok-btn{background:var(--green)}.ok-btn:hover:not(:disabled){background:var(--green-2)}.timeline{list-style:none;margin:0;padding:0 0 0 14px;border-left:2px solid var(--line)}.timeline li{position:relative;padding:6px 0 10px 16px}.timeline li:before{content:"";position:absolute;left:-21px;top:11px;width:12px;height:12px;border-radius:50%;background:var(--brand);box-shadow:0 0 0 3px var(--surface)}.timeline li.act:before{background:var(--green)}.timeline strong{font-weight:600}.drawer{position:fixed;top:0;right:0;bottom:0;z-index:40;width:min(440px,100vw);background:var(--surface);box-shadow:var(--shadow-2);padding:20px 22px;overflow-y:auto}.drawer-head{display:flex;align-items:center;gap:14px;margin-bottom:16px}.drawer-head>div{flex:1;min-width:0}.drawer-head strong{font-size:18px;font-weight:600}.mini-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.mini-stats div{padding:10px;border-radius:var(--radius-sm);background:var(--surface-2)}.mini-stats strong{font-size:18px;font-weight:600}.drawer-enter-active,.drawer-leave-active{transition:transform .2s ease}.drawer-enter-from,.drawer-leave-to{transform:translate(100%)}.modal-backdrop,.viewer-backdrop{position:fixed;inset:0;z-index:70;background:#0000007a;display:grid;place-items:center;padding:20px;animation:fade .15s ease}@keyframes fade{0%{opacity:0}}.modal,.dialog{width:min(560px,100%);max-height:calc(100vh - 40px);overflow-y:auto;background:var(--surface);border-radius:28px;padding:24px;box-shadow:var(--shadow-2);animation:pop .18s ease}.modal.small{width:min(440px,100%)}@keyframes pop{0%{opacity:0;transform:scale(.97)}}.modal-head{display:flex;align-items:center;justify-content:space-between;margin:-4px -8px 16px 0}.modal-head h2{font-size:22px;font-weight:500}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:8px}.level-edit{display:grid;grid-template-columns:1fr 110px 40px;gap:8px;align-items:center}.level-edit.no-points{grid-template-columns:1fr 40px}.tile-head>div{flex:1;min-width:0}.segmented{display:flex;border:1px solid var(--line-2);border-radius:var(--pill);overflow:hidden;margin-bottom:18px}.segmented button{flex:1;height:40px;font-weight:600;color:var(--ink-2);border-right:1px solid var(--line-2)}.segmented button:last-child{border-right:0}.segmented button.on{background:var(--brand-soft);color:var(--nav-on-ink)}.tile-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:14px}.tile{display:grid;gap:14px;align-content:start;padding:18px;border-radius:var(--radius);border:1px solid var(--line);background:var(--surface);transition:box-shadow .15s}.tile:hover{box-shadow:var(--shadow-1)}.tile-head{display:flex;gap:12px;align-items:center}.tile-head strong{font-size:15px;font-weight:600}.level-chips{display:flex;flex-wrap:wrap;gap:6px}.level-chips span{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 10px;border-radius:8px;background:var(--surface-2);font-size:13px}.level-chips b{color:var(--green)}.tile-actions{display:flex;gap:4px;margin:-6px -8px -8px}.staff{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.staff .label{width:100%;font-size:12.5px;color:var(--muted)}.person-chip{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 4px;border-radius:var(--pill);background:var(--surface-2);font-size:13px;font-weight:500}.person-chip button{display:grid;place-items:center;width:24px;height:24px;border-radius:50%;color:var(--muted)}.person-chip button:hover{background:var(--hover);color:var(--red)}.assign{display:flex;gap:8px}.assign select{height:40px}.profile{display:flex;align-items:center;gap:18px}.profile strong{font-size:20px;font-weight:600}.button-row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.filterbar{display:flex;gap:10px;flex-wrap:wrap;align-items:end;margin-bottom:14px}.filterbar label{display:grid;gap:4px;font-size:12px;color:var(--muted)}.filterbar select{height:40px;width:auto;min-width:140px}.filterbar .search{flex:1;min-width:200px;height:auto;padding:0;background:none;border-radius:0;display:grid;max-width:none}.filterbar .search input{height:40px;border:1px solid var(--line-2);padding:0 14px;font-size:14px}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:14px}.stat{display:grid;gap:2px;padding:16px 18px;border-radius:var(--radius);background:var(--surface-2)}.stat small{font-size:11.5px;font-weight:600;letter-spacing:.04em}.stat strong{font-size:26px;font-weight:600;font-variant-numeric:tabular-nums}.stat span{font-size:12.5px;color:var(--muted)}.stat.accent{background:var(--ok-bg)}.stat.accent strong{color:var(--green)}.calc-note{margin:-6px 0 12px}.panel{border:1px solid var(--line);border-radius:var(--radius);padding:18px 20px;margin-bottom:14px;background:var(--surface)}.panel.empty{text-align:center;color:var(--muted);padding:40px;display:grid;justify-items:center;gap:12px}.panel-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:14px}.panel-head p{font-size:13px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.form-grid label{display:grid;gap:6px}.grade-grid{grid-template-columns:repeat(3,1fr)}.form-actions{grid-column:1/-1;display:flex;gap:8px;flex-wrap:wrap;align-items:center}.table-panel{padding:0;overflow:hidden}.table-title{display:flex;justify-content:space-between;align-items:baseline;gap:12px;flex-wrap:wrap;padding:14px 20px 10px}.table-title span{font-size:12.5px;color:var(--muted)}.table-title b{color:var(--ink)}table{width:100%;border-collapse:collapse}th{height:40px;padding:0 14px;text-align:left;font-size:12.5px;font-weight:600;color:var(--muted);border-bottom:1px solid var(--line);white-space:nowrap}td{padding:10px 14px;border-bottom:1px solid var(--line);vertical-align:middle}tr:last-child td{border-bottom:0}tbody tr{cursor:pointer;transition:background .1s}tbody tr:hover{background:var(--surface-2)}tbody tr.static{cursor:default}td small{margin-top:2px}.empty{text-align:center;color:var(--muted);padding:32px!important}.badge{display:inline-flex;align-items:center;height:24px;padding:0 10px;border-radius:6px;font-size:12px;font-weight:600;background:var(--surface-2);white-space:nowrap}.badge.approved{background:var(--green-soft);color:var(--green)}.badge.needs_supplement{background:var(--warn-soft);color:var(--amber)}.student-strip{display:flex;align-items:center;gap:12px;padding:12px 16px;border-radius:var(--radius);background:var(--surface-2);margin-bottom:14px}.student-strip>div:nth-child(2){flex:1}.term-block table{table-layout:fixed}.term-block th:nth-child(1){width:96px}.term-block th:nth-child(3),.term-block th:nth-child(4){width:76px}.term-block th:nth-child(5){width:100px}.term-block th:nth-child(6),.term-block th:nth-child(7){width:140px}.term-block th:nth-child(8){width:170px}.mono{font-family:ui-monospace,Consolas,monospace;font-size:12.5px;color:var(--muted)}strong.fail{color:var(--red)}.result{display:inline-flex;align-items:center;height:24px;padding:0 10px;border-radius:6px;font-size:12px;font-weight:600;background:var(--green-soft);color:var(--green)}.result.fail{background:var(--red-soft);color:var(--red)}.mini-stats .rank{font-size:14px}.origin-tag{font-size:12px;color:var(--muted)}.origin-tag.student{color:var(--amber)}.origin-tag.teacher{color:var(--green)}.row-actions{text-align:right;white-space:nowrap}.lock{opacity:.5}.upload-button{cursor:pointer}.upload-button input{display:none}.drive-tabs{display:flex;align-items:center;gap:4px;border-bottom:1px solid var(--line);margin-bottom:14px}.drive-tabs button{height:44px;padding:0 16px;font-weight:600;color:var(--muted);border-bottom:3px solid transparent}.drive-tabs button:hover{background:var(--surface-2)}.drive-tabs button.active{color:var(--brand);border-bottom-color:var(--brand)}.drive-tabs em{font-style:normal;font-size:11.5px;margin-left:6px;padding:1px 7px;border-radius:var(--pill);background:var(--surface-3)}.drive-usage{margin-left:auto;font-size:12.5px;color:var(--muted)}.drive-toolbar{display:flex;gap:10px;align-items:center;margin-bottom:12px;flex-wrap:wrap}.drive-toolbar input{flex:1;min-width:220px;height:40px;border-radius:var(--pill);background:var(--surface-3);border-color:transparent}.drive-toolbar select{width:auto;height:40px}.view-toggle{display:flex;border:1px solid var(--line-2);border-radius:var(--pill);overflow:hidden}.view-toggle button{width:44px;height:38px;color:var(--ink-2)}.view-toggle button.active{background:var(--brand-soft);color:var(--nav-on-ink)}.drop-strip{border:2px dashed var(--line);border-radius:var(--radius-sm);padding:12px;text-align:center;font-size:13px;color:var(--muted);margin-bottom:16px;transition:.15s}.drop-strip.dragging{border-color:var(--brand);background:var(--tint);color:var(--brand)}.drive-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:14px}.drive-card{display:flex;flex-direction:column;border-radius:var(--radius-sm);background:var(--surface-2);padding:8px;transition:background .15s}.drive-card:hover{background:var(--surface-3)}.thumb{height:130px;border-radius:8px;background:var(--surface);display:grid;place-items:center;overflow:hidden;font-weight:700;font-size:18px;color:var(--brand)}.thumb.pdf{color:var(--pdf-ink)}.thumb img{width:100%;height:100%;object-fit:cover}.drive-meta{padding:10px 6px 2px;min-width:0}.drive-meta strong{display:block;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drive-meta small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drive-tags{display:flex;gap:4px;flex-wrap:wrap;margin-top:6px;min-height:20px}.tag{font-size:11px;font-weight:600;border-radius:6px;padding:2px 7px;background:var(--surface);color:var(--muted)}.tag.share{color:var(--brand)}.tag.used{color:var(--green)}.tag.warn{color:var(--amber)}.drive-actions{display:flex;gap:2px;margin-top:4px}.drive-actions button{width:36px;height:36px;border-radius:50%;color:var(--ink-2);font-size:15px}.drive-actions button:hover:not(:disabled){background:var(--hover)}.drive-actions button.del:hover{color:var(--red)}.file-name{display:inline-flex;align-items:center;gap:10px;font-weight:500;text-align:left}.file-name:hover{color:var(--brand)}.dialog h2{margin-bottom:12px}.dialog input{margin-bottom:8px}.share-row{display:flex;align-items:center;gap:12px;width:100%;padding:8px;border-radius:var(--radius-sm);text-align:left}.share-row>div{flex:1;min-width:0}.share-row.pick:hover{background:var(--surface-2)}.share-row em{font-style:normal;font-weight:600;color:var(--brand);font-size:13px}.share-options{max-height:280px;overflow:auto}.viewer-dialog{width:min(1100px,100%);height:min(90vh,860px);background:var(--surface);border-radius:var(--radius);display:flex;flex-direction:column;overflow:hidden;box-shadow:var(--shadow-2)}.viewer-toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 14px;border-bottom:1px solid var(--line)}.viewer-toolbar strong{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.viewer-toolbar>div{display:flex;align-items:center;gap:4px}.viewer-toolbar button{height:34px;min-width:34px;padding:0 10px;border-radius:var(--pill);color:var(--ink-2)}.viewer-toolbar button:hover{background:var(--hover)}.viewer-toolbar span{font-size:12.5px;color:var(--muted);min-width:42px;text-align:center}.viewer-content{flex:1;overflow:auto;background:var(--surface-3);display:flex;align-items:center;justify-content:center}.viewer-content iframe{border:0;background:#fff;flex-shrink:0}.viewer-content img{max-width:90%;max-height:90%;object-fit:contain;transition:transform .15s}@media(max-width:1100px){.cards.four,.stats{grid-template-columns:repeat(2,1fr)}.detail-grid,.two{grid-template-columns:1fr}.list-head.students,.list-row.students{grid-template-columns:minmax(200px,2fr) 70px 90px 1.4fr}.list-head.students span:nth-child(4),.list-head.students span:nth-child(5),.list-row.students .cell:nth-child(4),.list-row.students .cell:nth-child(5){display:none}}@media(max-width:900px){.rail{position:fixed;left:0;top:0;bottom:0;transform:translate(-100%);transition:transform .2s ease;background:var(--surface);box-shadow:var(--shadow-2)}.rail.open{transform:none}.menu-btn{display:inline-grid}.top{padding:8px 8px 8px 4px}.content{margin:0;border-radius:var(--radius) var(--radius) 0 0;padding:18px 16px 32px}.list-head{display:none}.list-row,.list-row.teacher,.list-row.students,.list-row.users,.list-row.periods{grid-template-columns:1fr auto;padding:10px 4px;gap:4px 12px}.list-row .cell-main{grid-column:1/-1}.list-row>.cell{display:none}.list-row>.cell:last-child,.list-row>.cell.num:nth-last-child(3){display:flex}}@media(max-width:640px){h1{font-size:21px}.hello h1{font-size:24px}.cards,.cards.four,.stats{grid-template-columns:1fr 1fr;gap:10px}.card-stat{padding:14px}.card-stat strong{font-size:24px}.search{height:44px}.field-row,.form-grid,.grade-grid,.facts{grid-template-columns:1fr}.steps li{font-size:0;justify-content:center;padding:0}.steps li.on{font-size:13px}.mini-stats{grid-template-columns:1fr 1fr}.action-bar{flex-wrap:wrap;bottom:8px}.action-info{flex-basis:100%}.toolbar select{flex:1;min-width:0}.modal,.dialog{border-radius:20px;padding:20px}.login-card{padding:28px 22px}.toast{min-width:0;width:calc(100vw - 24px)}.table-panel{overflow-x:auto}.term-block table{min-width:760px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}
