:root{--lemon: #fff851;--violet: #a400ff;--purple: #6922bf;--magenta: #f400ff;--coral: #ff8562;--lilac: #faf0ff;--lilac-2: #efd9ff;--ink: #0d0b10;--ink-2: #2b2731;--muted: #4b4553;--paper: #fdfcff;--rule: rgb(13 11 16 / .16);--error: #c2003a;--ease: cubic-bezier(.23, 1, .32, 1);--safe-bottom: env(safe-area-inset-bottom, 0px);--role: var(--violet);--on-role: #fff;--on-role-k: var(--lemon)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0;border-radius:0}html{-webkit-text-size-adjust:100%;height:100%}body{height:100%;font-family:Geologica,system-ui,sans-serif;font-size:15px;line-height:1.4;color:var(--ink);background:var(--lilac);-webkit-font-smoothing:antialiased;text-rendering:geometricPrecision;overscroll-behavior:none;-webkit-tap-highlight-color:transparent}#root{height:100%}button,input,textarea,select{font:inherit;color:inherit}button{background:none;border:0;cursor:pointer;text-align:inherit}a{color:inherit;text-decoration:none}ul,ol{list-style:none}svg{display:block}:focus-visible{outline:3px solid var(--violet);outline-offset:2px}.vh{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.i{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;flex:none}.i.s{width:16px;height:16px}.i.l{width:24px;height:24px}.kicker{font-size:12px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--purple)}.k-sm{font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--purple)}.muted{color:var(--muted)}.small{font-size:13px}.link{color:var(--purple);font-weight:600;text-decoration:underline;text-underline-offset:2px}.r-student{--role: var(--violet);--on-role: #fff;--on-role-k: var(--lemon)}.r-teacher{--role: var(--lemon);--on-role: var(--ink);--on-role-k: var(--ink)}.r-curator{--role: var(--ink);--on-role: #fff;--on-role-k: var(--lemon)}.r-admin{--role: var(--coral);--on-role: var(--ink);--on-role-k: var(--ink)}.app{height:100vh;height:100dvh;max-width:480px;margin:0 auto;display:flex;flex-direction:column;background:var(--paper);position:relative;overflow:hidden}@media (min-width: 481px){.app{border-left:2px solid var(--ink);border-right:2px solid var(--ink)}}.scroll{flex:1;min-height:0;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;padding-bottom:28px}.pad{padding-left:16px;padding-right:16px}.stack{display:grid;gap:10px}.row{display:flex;gap:10px;align-items:center}.row>.grow{flex:1;min-width:0}.topbar{min-height:56px;flex:none;display:flex;align-items:center;gap:4px;padding:0 12px 0 16px;background:var(--role);color:var(--on-role);border-bottom:2px solid var(--ink)}.topbar.has-back{padding-left:4px}.topbar .back{width:44px;height:44px;display:flex;align-items:center;justify-content:center;flex:none;color:inherit}.topbar .tt{flex:1;min-width:0;line-height:1.2}.topbar .tt small{display:block;font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--on-role-k)}.topbar .tt b{display:block;font-size:16px;font-weight:700;letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.topbar .tr{flex:none;font-size:13px;font-weight:600;display:flex;gap:6px;align-items:center}.nav{flex:none;display:grid;grid-auto-flow:column;grid-auto-columns:1fr;border-top:2px solid var(--ink);background:#fff;padding-bottom:var(--safe-bottom)}.nav a{height:60px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;font-size:11px;font-weight:600;color:var(--muted);border-left:1px solid var(--rule);min-width:0}.nav a:first-child{border-left:0}.nav a.on{background:var(--lemon);color:var(--ink);font-weight:700}.btn{min-height:52px;border:2px solid var(--ink);display:flex;align-items:center;justify-content:center;gap:8px;font-size:16px;font-weight:600;line-height:1.15;padding:6px 16px;background:transparent;color:var(--ink);text-align:center;transition:transform .2s var(--ease);width:100%}.btn:active:not(:disabled){transform:translate(2px,2px)}.btn.ink{background:var(--ink);color:#fff}.btn.lemon{background:var(--lemon)}.btn.line{background:#fff}.btn.danger{background:var(--coral)}.btn.sm{min-height:44px;font-size:15px;padding:4px 12px}.btn.auto{width:auto}.btn:disabled{background:#fff;color:var(--muted);border-color:var(--rule);cursor:default}.btn .busy{width:14px;height:14px;border:2.5px solid currentColor;border-right-color:transparent;border-radius:50%;animation:spin .7s linear infinite;flex:none}.icon-btn{width:44px;height:44px;display:flex;align-items:center;justify-content:center;flex:none;color:var(--ink)}.icon-btn:disabled{color:var(--rule)}@keyframes spin{to{transform:rotate(360deg)}}.sheet{background:#fff;border:2px solid var(--ink);box-shadow:5px 5px 0 var(--ink);padding:14px;margin-right:5px}.sheet h2,.sheet h3{font-size:22px;line-height:1.08;font-weight:800;letter-spacing:-.03em}.sheet.accent{box-shadow:5px 5px 0 var(--role)}.sheet.violet{background:var(--violet);color:#fff}.chip{display:inline-flex;align-items:center;gap:5px;height:24px;padding:0 7px;border:2px solid var(--ink);font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;white-space:nowrap;background:#fff;color:var(--ink);flex:none}.chip.sm{height:20px;font-size:10px;padding:0 5px}.chip.c-lemon{background:var(--lemon)}.chip.c-lilac{background:var(--lilac-2)}.chip.c-coral{background:var(--coral)}.chip.c-ink{background:var(--ink);color:#fff}.chip.c-violet{background:var(--violet);color:#fff}.chip .i{width:12px;height:12px;stroke-width:2.5}.chips{display:flex;flex-wrap:wrap;align-items:center;gap:4px}.chips .chips{display:contents}.ava{width:44px;height:44px;border:2px solid var(--ink);display:flex;align-items:center;justify-content:center;font-weight:800;font-size:15px;letter-spacing:-.02em;flex:none;background:var(--lilac-2);text-transform:uppercase}.ava.lg{width:52px;height:52px;font-size:18px;background:#fff;color:var(--ink)}.sec{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin:18px 16px 8px}.sec .cnt{font-size:13px;color:var(--muted);font-weight:500;text-align:right}.hero{background:var(--role);color:var(--on-role);padding:14px 16px 16px;position:relative;overflow:hidden;border-bottom:2px solid var(--ink)}.hero .kicker{color:var(--on-role-k);position:relative;z-index:1;padding-right:72px}.hero h1{font-size:30px;line-height:1;font-weight:800;letter-spacing:-.03em;margin:6px 0 5px;position:relative;z-index:1;padding-right:72px;overflow-wrap:anywhere}.hero p{font-size:13px;font-weight:500;position:relative;z-index:1;padding-right:72px}.hero .logo{position:absolute;right:16px;top:14px;width:56px;height:56px;z-index:1;border-radius:50%;border:2px solid var(--ink)}.r-curator .hero .logo{border-color:#fff}.hero .deco{position:absolute;right:-92px;top:-52px;width:220px;height:200px;pointer-events:none}.prof{background:var(--role);color:var(--on-role);border-bottom:2px solid var(--ink);padding:12px 16px;display:grid;grid-template-columns:52px 1fr;gap:12px;align-items:center}.prof b{display:block;font-size:20px;font-weight:800;letter-spacing:-.02em;line-height:1.1;overflow-wrap:anywhere}.prof small{font-size:12px;font-weight:500}.roles{display:grid;grid-template-columns:1fr 1fr;gap:6px;padding:0 20px 4px 16px}.roles button{min-height:46px;border:2px solid var(--ink);display:grid;grid-template-columns:14px 1fr auto;align-items:center;gap:8px;padding:4px 10px;font-size:14px;font-weight:600;background:#fff;min-width:0}@media (max-width: 379px){.roles button{font-size:13px;padding:4px 8px;gap:6px}}.roles button>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.roles button i{width:14px;height:14px;border:2px solid var(--ink)}.roles button.on{background:var(--ink);color:#fff;font-weight:700;box-shadow:4px 4px 0 var(--role)}.r-curator .roles button.on{box-shadow:4px 4px 0 var(--violet)}.roles button.on i{border-color:#fff}.roles button.on .i{stroke:var(--lemon);stroke-width:3;width:16px;height:16px}.dot-student{background:var(--violet)}.dot-curator{background:var(--ink)}.dot-teacher{background:var(--lemon)}.dot-admin{background:var(--coral)}.hw{display:grid;grid-template-columns:1fr auto;gap:10px;align-items:center;border:2px solid var(--ink);background:#fff;padding:6px 12px;min-height:52px;margin:0 16px;width:calc(100% - 32px)}.hw+.hw{margin-top:-2px}.hw b{display:block;font-size:15px;font-weight:700;letter-spacing:-.01em;line-height:1.2;overflow-wrap:anywhere}.hw small{display:block;font-size:12px;color:var(--muted);margin-top:2px;overflow-wrap:anywhere}.hw .tail{display:flex;align-items:center;gap:6px;color:var(--muted)}.qi{display:grid;grid-template-columns:44px 1fr auto;gap:12px;align-items:center;padding:10px 16px;border-bottom:1px solid var(--rule);min-height:70px;width:100%}.qi .who{min-width:0}.qi .who b{display:block;font-size:15px;font-weight:700;letter-spacing:-.01em;line-height:1.2;overflow-wrap:anywhere}.qi .who small{display:block;font-size:12px;color:var(--muted);margin-top:2px;line-height:1.3;overflow-wrap:anywhere}.qi .who .chips{margin-top:5px}.qi .go{color:var(--muted)}.qi.is-off .ava{background:#fff;color:var(--muted)}.filt{display:flex;gap:6px;padding:10px 16px;border-bottom:2px solid var(--ink);background:#fff;overflow-x:auto;scrollbar-width:none}.filt::-webkit-scrollbar{display:none}.filt button{height:44px;padding:0 12px;border:2px solid var(--ink);display:flex;align-items:center;gap:6px;font-size:14px;font-weight:600;background:#fff;white-space:nowrap;flex:none}.filt button.on{background:var(--lemon);font-weight:700}.searchbar{padding:12px 16px 0;background:#fff}.field{display:block;border:2px solid var(--ink);background:#fff;padding:6px 10px 7px;min-width:0;min-height:52px;position:relative}.field:focus-within{outline:3px solid var(--violet);outline-offset:2px}.field>label{display:block;font-size:10px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--purple)}.field input,.field select,.field textarea{display:block;width:100%;border:0;background:transparent;outline:none;font-size:16px;font-weight:600;line-height:1.3;min-height:24px;padding:0;appearance:none;-webkit-appearance:none}.field textarea{resize:none;font-weight:500}.field input::placeholder,.field textarea::placeholder{color:var(--muted);font-weight:400;opacity:.8}.field.has-icon{padding-right:36px}.field .f-icon{position:absolute;right:10px;bottom:10px;pointer-events:none}.field.invalid{border-color:var(--error)}.field-err{font-size:12px;font-weight:600;color:var(--error);margin-top:4px}.lab{font-size:10px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--purple);margin-bottom:5px}.pick{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;border:2px solid var(--ink);min-height:44px}.pick button{display:flex;align-items:center;justify-content:center;gap:5px;font-size:13px;font-weight:600;border-left:2px solid var(--ink);padding:0 4px;min-width:0;background:#fff}.pick button:first-child{border-left:0}.pick button.on{background:var(--lemon);font-weight:700}.pick button .i{width:13px;height:13px;stroke-width:3}.pm{display:flex;width:100%;max-width:180px;border:2px solid var(--ink);height:48px;background:#fff}.pm button{flex:none;width:44px;display:flex;align-items:center;justify-content:center}.pm button:disabled{color:var(--rule)}.pm input{flex:1;min-width:0;width:0;border:0;border-left:2px solid var(--ink);border-right:2px solid var(--ink);text-align:center;font-weight:800;font-size:17px;background:#fff;outline-offset:-3px;appearance:textfield;-moz-appearance:textfield}.pm input::-webkit-outer-spin-button,.pm input::-webkit-inner-spin-button{-webkit-appearance:none}.g2{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:8px}.stack>*{min-width:0}.check{display:grid;grid-template-columns:24px 1fr auto;gap:12px;align-items:center;min-height:52px;padding:6px 12px;border:2px solid var(--ink);background:#fff;cursor:pointer}.check+.check{margin-top:-2px}.check input{position:absolute;opacity:0;width:1px;height:1px}.check .box{width:24px;height:24px;border:2px solid var(--ink);display:flex;align-items:center;justify-content:center;background:#fff}.check .box .i{width:14px;height:14px;stroke-width:3;visibility:hidden}.check input:checked+.box{background:var(--ink);color:var(--lemon)}.check input:checked+.box .i{visibility:visible}.check input:focus-visible+.box{outline:3px solid var(--violet);outline-offset:2px}.check b{font-size:15px;font-weight:700}.check small{display:block;font-size:12px;color:var(--muted);font-weight:400}.toggle-line{display:flex;align-items:center;gap:10px;min-height:44px;font-size:13px;font-weight:600;color:var(--ink-2);cursor:pointer}.toggle-line input{position:absolute;opacity:0;width:1px;height:1px}.toggle-line .box{width:20px;height:20px;border:2px solid var(--ink);background:#fff;display:flex;align-items:center;justify-content:center;flex:none}.toggle-line .box .i{width:12px;height:12px;stroke-width:3;visibility:hidden}.toggle-line input:checked+.box{background:var(--ink);color:var(--lemon)}.toggle-line input:checked+.box .i{visibility:visible}.toggle-line input:focus-visible+.box{outline:3px solid var(--violet);outline-offset:2px}.notice{display:flex;gap:10px;align-items:flex-start;background:var(--lemon);border:2px solid var(--ink);padding:10px 12px;font-size:13px;line-height:1.35;font-weight:500}.notice b{font-weight:700;display:block;font-size:14px}.notice.err{background:var(--coral)}.notice.plain{background:var(--lilac)}.notice .i{margin-top:1px}.notice .link{color:var(--ink);display:inline-flex;align-items:center;min-height:44px}.state{margin:16px 21px 0 16px}.state p{font-size:14px;line-height:1.4;color:var(--ink-2);margin-top:6px}.state .btn{margin-top:12px}.sk{display:block;background:var(--lilac-2);height:14px;position:relative;overflow:hidden}.sk:after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,rgb(255 255 255 / .7),transparent);transform:translate(-100%);animation:sweep 1.3s ease-in-out infinite}.sk.on-role{background:#ffffff59}@keyframes sweep{to{transform:translate(100%)}}.sk-row{display:grid;grid-template-columns:44px 1fr;gap:12px;align-items:center;padding:10px 16px;border-bottom:1px solid var(--rule);min-height:70px}.sk-row .sk-ava{width:44px;height:44px}.sk-card{border:2px solid var(--rule);background:#fff;padding:14px;margin:0 16px 10px;display:grid;gap:10px}.lnk-box{border:2px dashed var(--ink);background:var(--lilac);padding:10px 12px;font-size:14px;font-weight:600;line-height:1.35;overflow-wrap:anywhere;word-break:break-all;user-select:all;-webkit-user-select:all}.lnk-box span{color:var(--purple)}.inv-row{border:2px solid var(--ink);background:#fff;padding:10px 6px 10px 12px;margin:0 16px;display:grid;grid-template-columns:1fr 44px;gap:4px;align-items:start}.inv-row+.inv-row{margin-top:-2px}.inv-row.is-off{background:var(--paper);color:var(--muted)}.inv-row .meta{font-size:12.5px;color:var(--muted);margin-top:6px;line-height:1.35;overflow-wrap:anywhere}.inv-row .meta b{color:var(--ink);font-weight:700}.bar{height:10px;border:2px solid var(--ink);background:#fff;margin-top:8px;position:relative}.bar i{position:absolute;left:0;top:0;bottom:0;background:var(--lemon);border-right:2px solid var(--ink)}.bar i.full{background:var(--coral);border-right:0}.bar i.zero{border-right:0}li+li>.hw{margin-top:-2px}a.hw,a.qi,button.qi{text-align:left}button.qi:disabled{opacity:.6}.stream-card{padding:0}.card-head{display:grid;grid-template-columns:1fr auto auto;gap:8px;align-items:center;padding:12px 10px 4px 14px;min-height:56px}.card-head h3{margin-top:2px;overflow-wrap:anywhere}.stream-card>p{padding:0 14px 12px}.sub-row{display:grid;grid-template-columns:1fr auto auto;gap:8px;align-items:center;min-height:52px;padding:6px 10px 6px 14px;border-top:1px solid var(--rule)}p.sub-row{display:block;padding:14px;min-height:0}.sub-row b{display:block;font-size:15px;font-weight:700;line-height:1.2}.sub-row small{display:block;font-size:12px;color:var(--muted);margin-top:2px;overflow-wrap:anywhere}.audit{padding:10px 16px;border-bottom:1px solid var(--rule)}.audit .head{display:flex;justify-content:space-between;gap:10px;align-items:baseline}.audit .head b{font-size:14px;font-weight:700;overflow-wrap:anywhere}.audit .head time{font-size:12px;color:var(--muted);white-space:nowrap;flex:none}.audit .what{font-size:13px;margin-top:3px;overflow-wrap:anywhere}.audit .what code{font-family:inherit;font-weight:700;background:var(--lilac-2);padding:0 4px}.audit .meta{font-size:12px;color:var(--muted);margin-top:3px;overflow-wrap:anywhere}.modal-back{position:fixed;inset:0;z-index:50;background:#0d0b1099;display:flex;align-items:flex-end;justify-content:center;animation:fade .18s ease-out}.modal{width:100%;max-width:480px;max-height:88vh;max-height:88dvh;display:flex;flex-direction:column;background:#fff;border:2px solid var(--ink);border-bottom:0;animation:rise .28s var(--ease)}.modal-head{flex:none;display:flex;align-items:center;gap:8px;padding:6px 4px 6px 16px;border-bottom:2px solid var(--ink);background:var(--lemon)}.modal-head h2{flex:1;min-width:0;font-size:17px;font-weight:800;letter-spacing:-.02em;line-height:1.15}.modal-body{flex:1;min-height:0;overflow-y:auto;padding:14px 16px calc(16px + var(--safe-bottom))}.modal-body.flush{padding-left:0;padding-right:0;padding-top:0}.modal-body>p{font-size:15px;line-height:1.4}.modal-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:14px}@keyframes fade{0%{opacity:0}}@keyframes rise{0%{transform:translateY(24px);opacity:0}}.gate{background:var(--violet);color:#fff;justify-content:center;padding:24px 16px calc(24px + var(--safe-bottom))}.gate .deco{position:absolute;right:-120px;top:-40px;width:420px;height:320px;pointer-events:none}.gate-in{position:relative;z-index:1}.gate .logo{width:88px;height:88px;border-radius:50%;border:3px solid var(--ink)}.gate .kicker{color:var(--lemon);margin-top:18px}.gate h1{font-size:40px;line-height:.98;font-weight:800;letter-spacing:-.03em;margin:8px 0 12px}.gate p{font-size:16px;line-height:1.4;max-width:34ch}.gate .btn{margin-top:22px}.gate .btn:disabled{background:var(--lemon);color:var(--ink);border-color:var(--ink);opacity:.75}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
