:root{--acc:#7c3aed;--acc-d:#5b21b6;--acc-l:#ede9fe;--acc2:#2563eb;--cyan:#06b6d4;--ring:#22d3ee;--navy:#0b0b1f;--navy2:#16153a;--side:#0b0b1f;--side2:#16153a;--bg:#f5f4ff;--bd:#e4e2f5;--tx:#141327;--mu:#55546b;--grad:linear-gradient(110deg,#7c3aed 0%,#4f46e5 45%,#2563eb 75%,#0891b2 100%);--hf:"Space Grotesk",system-ui,sans-serif;--red:#b42318;--green:#047857;--sh:0 1px 2px #1018280f,0 1px 3px #10182814}*{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--bg);color:var(--tx);-webkit-font-smoothing:antialiased;margin:0;font-family:Plus Jakarta Sans,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:13.5px}a{color:var(--acc);cursor:pointer;text-decoration:none}a:hover{text-decoration:underline}button{font:inherit;cursor:pointer}.app{height:100%;display:flex}.side{background:var(--side);color:#c9d1e0;flex-direction:column;flex-shrink:0;width:216px;transition:width .2s;display:flex}.brand{color:#fff;border-bottom:1px solid #ffffff12;align-items:center;gap:10px;padding:16px 18px;font-size:15px;font-weight:700;display:flex}.brand .logo{background:var(--acc);border-radius:8px;place-items:center;width:30px;height:30px;display:grid}.side nav{flex-direction:column;gap:2px;padding:10px 8px;display:flex}.side nav button{color:inherit;text-align:left;background:0 0;border:0;border-radius:8px;align-items:center;gap:12px;padding:9px 12px;font-size:13.5px;display:flex}.side nav button:hover{background:var(--side2);color:#fff}.side nav button.on{background:var(--acc);color:#fff}.mainwrap{flex-direction:column;flex:1;min-width:0;display:flex}.top{border-bottom:1px solid var(--bd);z-index:20;background:#fff;align-items:center;gap:12px;height:56px;padding:0 20px;display:flex;position:sticky;top:0}.search{flex:1;max-width:520px;position:relative}.search input{background:var(--bg);border-color:#0000;padding-left:34px}.search input:focus{background:#fff}.search svg.i{color:var(--mu);position:absolute;top:9px;left:10px}.dropdown{border:1px solid var(--bd);z-index:30;background:#fff;border-radius:10px;max-height:420px;padding:6px;position:absolute;top:calc(100% + 6px);left:0;right:0;overflow:auto;box-shadow:0 10px 30px #0000001f}.dropdown .grp{color:var(--mu);text-transform:uppercase;letter-spacing:.04em;padding:8px 10px 4px;font-size:12px;font-weight:600}.dropdown .it{cursor:pointer;border-radius:6px;align-items:center;gap:8px;padding:8px 10px;display:flex}.dropdown .it:hover{background:var(--acc-l)}.menu{border:1px solid var(--bd);z-index:30;background:#fff;border-radius:10px;min-width:200px;padding:6px;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 10px 30px #0000001f}.menu button{text-align:left;background:0 0;border:0;border-radius:6px;align-items:center;gap:10px;width:100%;padding:8px 10px;display:flex}.menu button:hover{background:var(--acc-l)}.avatar{background:var(--acc);color:#fff;border:0;border-radius:50%;place-items:center;width:32px;height:32px;font-weight:600;display:grid}.content{flex:1;padding:20px;overflow:auto}.ph{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:16px;display:flex}.ph h1{margin:0;font-size:20px;font-weight:600}.ph .sp{flex:1}.btn{background:var(--acc);color:#fff;border:1px solid var(--acc);white-space:nowrap;border-radius:6px;align-items:center;gap:6px;padding:7px 14px;font-weight:500;display:inline-flex}.btn:hover{background:var(--acc-d)}.btn:disabled{opacity:.5;cursor:default}.btn.ghost{color:var(--tx);border-color:var(--bd);background:#fff}.btn.ghost:hover{background:#f8f9fb}.btn.danger{color:var(--red);background:#fff;border-color:#f3c7c3}.btn.sm{padding:4px 10px;font-size:12.5px}.card{border:1px solid var(--bd);box-shadow:var(--sh);background:#fff;border-radius:10px}.pad{padding:16px}input,select,textarea{font:inherit;width:100%;color:var(--tx);background:#fff;border:1px solid #d5dae3;border-radius:6px;padding:8px 10px}textarea{resize:vertical;min-height:80px}input[type=checkbox]{width:15px;height:15px;accent-color:var(--acc);padding:0}.toolbar{border-bottom:1px solid var(--bd);flex-wrap:wrap;align-items:center;gap:8px;padding:12px 14px;display:flex}.toolbar input,.toolbar select{width:auto;min-width:160px}.chips{border-bottom:1px solid var(--bd);flex-wrap:wrap;align-items:center;gap:6px;padding:8px 14px;display:flex}.chip{background:var(--acc-l);color:var(--acc-d);border-radius:14px;align-items:center;gap:6px;padding:3px 6px 3px 10px;font-size:12px;font-weight:500;display:inline-flex}.chip button{color:inherit;background:0 0;border:0;padding:0;display:flex}.tbl{overflow:auto}table{border-collapse:collapse;width:100%}th{text-align:left;color:#4b5563;border-bottom:1px solid var(--bd);white-space:nowrap;-webkit-user-select:none;user-select:none;background:#f8f9fb;padding:10px 12px;font-size:12px;font-weight:600;position:sticky;top:0}th.s{cursor:pointer}th.s:hover{color:var(--acc)}td{vertical-align:top;border-bottom:1px solid #eef1f5;padding:9px 12px}tr.click{cursor:pointer}td.clip{text-overflow:ellipsis;white-space:nowrap;max-width:280px;overflow:hidden}.foot{color:var(--mu);align-items:center;gap:8px;padding:10px 14px;font-size:12.5px;display:flex}.foot .sp{flex:1}.badge{color:#374151;background:#eef1f5;border-radius:10px;padding:2px 8px;font-size:12px;font-weight:500;display:inline-block}.badge.blue{background:var(--acc-l);color:var(--acc-d)}.badge.green{color:var(--green);background:#e6f4ea}.badge.red{color:var(--red);background:#fce8e6}.badge.amber{color:#b06000;background:#fef7e0}.badge.violet{color:#6d28d9;background:#f1e8fd}.muted{color:var(--mu)}.small{font-size:12px}.kpis{grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:14px;margin-bottom:16px;display:grid}.kpi{align-items:center;gap:14px;padding:16px;display:flex}.kpi .ic{background:var(--acc-l);width:42px;height:42px;color:var(--acc);border-radius:10px;place-items:center;display:grid}.kpi .v{font-size:22px;font-weight:700}.kpi .l{color:var(--mu);font-size:12px}.charts{grid-template-columns:repeat(auto-fit,minmax(380px,1fr));gap:14px;display:grid}.charts .card h3,.sect h3{border-bottom:1px solid var(--bd);margin:0;padding:14px 16px;font-size:14px;font-weight:600}.kanban{align-items:flex-start;gap:12px;padding-bottom:10px;display:flex;overflow-x:auto}.col{background:#eef1f6;border-radius:10px;flex-shrink:0;width:250px;min-width:250px}.col .ch{border-top:3px solid var(--acc);background:#fff;border-radius:10px 10px 0 0;padding:10px 12px}.col .ch b{font-size:13px}.col .ch .t{color:var(--mu);margin-top:2px;font-size:12px}.col .cb{min-height:120px;padding:8px}.col.over{outline:2px dashed var(--acc)}.dcard{box-shadow:var(--sh);cursor:grab;border:1px solid var(--bd);background:#fff;border-radius:8px;margin-bottom:8px;padding:10px}.dcard:hover{border-color:var(--acc)}.rec-h{flex-wrap:wrap;align-items:center;gap:16px;padding:18px 20px;display:flex}.rec-h .big{background:var(--acc);color:#fff;border-radius:12px;place-items:center;width:52px;height:52px;font-size:22px;font-weight:700;display:grid}.rec-h h1{margin:0;font-size:20px}.keys{flex-wrap:wrap;gap:28px;padding:0 20px 16px;display:flex}.keys div span{color:var(--mu);font-size:12px;display:block}.tabs{border-bottom:1px solid var(--bd);gap:4px;padding:0 14px;display:flex;overflow-x:auto}.tabs button{color:var(--mu);white-space:nowrap;background:0 0;border:0;border-bottom:2px solid #0000;padding:12px 14px;font-weight:500}.tabs button.on{color:var(--acc);border-color:var(--acc)}.fields{grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:0 32px;padding:8px 20px 16px;display:grid}.f{border-bottom:1px dashed #edf0f4;align-items:flex-start;gap:12px;min-height:40px;padding:9px 0;display:flex}.f .k{width:130px;color:var(--mu);flex-shrink:0;padding-top:2px;font-size:12.5px}.f .vv{word-break:break-word;white-space:pre-wrap;cursor:text;border-radius:4px;flex:1;min-height:20px;margin:-2px -4px;padding:2px 4px}.f .vv:hover{outline:1px solid var(--bd);background:#f3f6fb}.modal{z-index:50;background:#0f172a73;justify-content:center;align-items:flex-start;padding:6vh 12px;display:flex;position:fixed;inset:0;overflow:auto}.modal .card{width:100%;max-width:560px}.modal .mh{border-bottom:1px solid var(--bd);justify-content:space-between;padding:14px 18px;font-size:15px;font-weight:600;display:flex}.modal .mb{padding:14px 18px}.modal .mf{border-top:1px solid var(--bd);background:#f8f9fb;border-radius:0 0 10px 10px;justify-content:flex-end;gap:8px;padding:12px 18px;display:flex}label{color:#4b5563;margin:10px 0 4px;font-size:12px;font-weight:500;display:block}.toasts{z-index:100;flex-direction:column;gap:8px;display:flex;position:fixed;bottom:20px;right:20px}.toast{color:#fff;background:#202124;border-radius:8px;align-items:center;gap:8px;padding:10px 16px;animation:.2s in;display:flex;box-shadow:0 6px 20px #0003}.toast.err{background:var(--red)}@keyframes in{0%{opacity:0;transform:translateY(10px)}}.sk{background:linear-gradient(90deg,#eef1f5 25%,#e2e6ec 37%,#eef1f5 63%) 0 0/400% 100%;border-radius:4px;height:14px;animation:1.4s infinite sk}@keyframes sk{0%{background-position:100%}to{background-position:0}}.empty{text-align:center;color:var(--mu);padding:48px 20px}.empty .eic{background:var(--acc-l);width:56px;height:56px;color:var(--acc);border-radius:50%;place-items:center;margin:0 auto 12px;display:grid}.empty b{color:var(--tx);margin-bottom:4px;font-size:15px;display:block}.login{background:linear-gradient(135deg,#1f2633,#1a73e8);place-items:center;min-height:100%;display:grid}.login .card{width:380px;max-width:92vw;padding:28px}.err{color:var(--red)}.act{border-bottom:1px solid #eef1f5;align-items:flex-start;gap:12px;padding:12px 16px;display:flex}.act .aic{background:var(--acc-l);width:32px;height:32px;color:var(--acc);border-radius:50%;flex-shrink:0;place-items:center;display:grid}.act.done .note{color:var(--mu);text-decoration:line-through}.seg{border:1px solid var(--bd);border-radius:6px;display:inline-flex;overflow:hidden}.seg button{border:0;border-right:1px solid var(--bd);background:#fff;padding:6px 12px}.seg button:last-child{border:0}.seg button.on{background:var(--acc-l);color:var(--acc-d);font-weight:600}.hamb{background:0 0;border:0;padding:4px;display:none}@media (width<=900px){.side{z-index:40;transition:transform .2s;position:fixed;top:0;bottom:0;left:0;transform:translate(-100%)}.side.open{transform:none}.hamb{display:block}.content{padding:12px}.hm{display:none}.charts{grid-template-columns:1fr}.top{padding:0 10px}.top .ctxt{display:none}}h1,h2,h3,.brand,.kpi .v,.modal .mh,.lbrand{font-family:var(--hf);letter-spacing:-.02em}.side{background:linear-gradient(180deg,var(--navy) 0%,var(--navy2) 100%);color:#c7c5e6}.brand{border-bottom:1px solid #ffffff14;font-size:15px}.brand span{flex-direction:column;line-height:1.15;display:flex}.brand small{color:#c4b5fd;letter-spacing:.12em;font-family:Plus Jakarta Sans;font-size:12px;font-weight:600}.side nav button{border-radius:10px}.side nav button:hover{background:#ffffff0f}.side nav button.on{background:var(--grad);font-weight:600;box-shadow:0 6px 22px -8px #7c3aeda6}.top{-webkit-backdrop-filter:blur(14px);color:#fff;background:#0b0b1fd1;border-bottom:1px solid #ffffff14}.top .hamb{color:#fff}.search input{color:#fff;background:#ffffff14;border-color:#ffffff1f}.search input::placeholder{color:#a9a7cc}.search input:focus{color:var(--tx);background:#fff}.avatar{background:var(--grad)}.btn{background:var(--grad);border:0;border-radius:12px;padding:8px 16px;font-weight:600;transition:transform .15s,box-shadow .15s;box-shadow:0 6px 22px -8px #7c3aeda6}.btn:hover{background:var(--grad);transform:translateY(-1px);box-shadow:0 10px 26px -8px #7c3aedbf}.btn:disabled{transform:none}.btn.ghost{color:var(--tx);border:1px solid var(--bd);box-shadow:none;background:#fff}.btn.ghost:hover{border-color:var(--acc);color:var(--acc);background:#fff}.btn.danger{box-shadow:none;background:#fff;border:1px solid #f3c7c3}.btn.sm{border-radius:10px;padding:5px 10px}.card{border-color:var(--bd);border-radius:14px;transition:box-shadow .2s;box-shadow:0 1px 2px #1413270a}.card:hover{box-shadow:0 14px 34px -18px #4c1d9559}input,select,textarea{border-color:var(--bd);border-radius:8px}input:focus,select:focus,textarea:focus{border-color:var(--ring);box-shadow:0 0 0 3px #22d3ee40}th{color:var(--mu);background:#f8f7ff}tbody tr:hover{background:#f5f3ff}td{border-bottom-color:#eeedf8}.kpi{position:relative;overflow:hidden}.kpi:before{content:"";background:var(--grad);height:3px;position:absolute;top:0;left:0;right:0}.kpi .ic{border-radius:12px}.col{background:#eceafb;border-radius:14px}.col .ch{border-radius:14px 14px 0 0}.dcard{border-radius:10px}.dcard:hover{border-color:var(--acc);box-shadow:0 8px 20px -12px #7c3aed80}.rec-h .big{background:var(--grad);border-radius:14px}.tabs button.on{color:var(--acc)}.toast{background:var(--navy2)}.modal{background:#0b0b1f8c}.login{color:#fff;background:radial-gradient(800px 400px at 15% 10%,#7c3aed59,#0000 60%),radial-gradient(700px 400px at 90% 90%,#0891b247,#0000 60%),linear-gradient(#0b0b1f,#16153a);grid-template-columns:1.1fr 1fr;align-items:center;gap:40px;padding:40px 6vw;display:grid}.login .hero{max-width:560px}.lbrand{align-items:center;gap:12px;margin-bottom:40px;font-size:20px;font-weight:700;display:flex}.eyebrow{color:#c4b5fd;letter-spacing:.16em;margin-bottom:12px;font-size:12px;font-weight:700}.login h1{font-family:var(--hf);letter-spacing:-.02em;margin:0 0 16px;font-size:44px;line-height:1.08}.gt{background:var(--grad);color:#0000;-webkit-background-clip:text;background-clip:text}.login .hero p{color:#c7c5e6;font-size:16px}.login .card{color:var(--tx);justify-self:center;box-shadow:0 30px 80px -30px #7c3aed99}@media (width<=900px){.login{grid-template-columns:1fr;padding:24px}.login h1{font-size:30px}.lbrand{margin-bottom:20px}}.navbadge{color:#fff;text-align:center;background:#a855f7;border-radius:10px;min-width:20px;margin-left:auto;padding:1px 7px;font-size:12px;font-weight:600}.side nav button.on .navbadge{color:var(--acc);background:#fff}:root{--navy:#040732;--navy2:#040732;--side:#040732;--side2:#0d1150;--focus:#5a3fd9}.side{color:#fff;background:#040732!important}.side nav button{color:#fff}.side nav button:hover{color:#fff;background:#ffffff14}.top{color:#fff;border-bottom:1px solid #ffffff1f;background:#040732!important}.top .hamb,.top .ctxt,.top a{color:#fff}:focus:not(:focus-visible){outline:none}a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,[role=button]:focus-visible,[tabindex]:focus-visible,.side nav button:focus-visible,summary:focus-visible{outline-offset:2px;outline:2px solid var(--focus)!important}.side :focus-visible,.top :focus-visible{outline-color:#0fbfcc!important}:root{--acc:#5a3fd9;--acc-d:#4a31b8;--red:#b42318;--green:#047857;--amber:#b45309;--hf:"Space Grotesk",system-ui,sans-serif;--bf:"Plus Jakarta Sans",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif}body,input,select,textarea,button{font-family:var(--bf)}h1,h2,h3,h4,.brand,.lbrand,.modal .mh{font-family:var(--hf)}.btn{border-radius:10px;min-height:44px}.btn:not(.ghost):not(.danger){color:#fff;box-shadow:none;border:1px solid #5a3fd9;background:#5a3fd9!important}.btn:not(.ghost):not(.danger):hover{background:#4a31b8!important}.side nav button.on{box-shadow:none;background:#5a3fd9!important}.side nav button,.top button,.hamb,a.btn{min-height:44px}.hamb{min-width:44px}input,select{min-height:44px}.brand{align-items:center;gap:8px;display:flex}.brand .brandtag{color:#c4b5fd;letter-spacing:.08em;font-size:12px;font-weight:600}.toplogo{display:none}@media (width<=900px){.toplogo{display:block}}.side :focus-visible,.side nav button:focus-visible,.side a:focus-visible,.top :focus-visible,.top button:focus-visible,.top a:focus-visible,.top input:focus-visible{outline-color:#0fbfcc!important}.modal{align-items:center;padding:16px;overflow:hidden;background:#0b0b1f99!important}.modal .card{flex-direction:column;max-width:600px;max-height:calc(100dvh - 32px);display:flex;overflow:hidden}.modal .card.wide{max-width:820px}.modal .mh{flex:none;align-items:center;gap:12px;padding:14px 20px}.modal .mh .btn{justify-content:center;min-width:44px;min-height:44px}.modal .mb{overscroll-behavior:contain;flex:auto;padding:20px;overflow-y:auto}.modal .mf{flex-wrap:wrap;flex:none;align-items:center;padding:12px 20px}.modal .mf .btn{min-height:44px}.fsec{border:0;min-width:0;margin:0 0 24px;padding:0}.fsec:last-child{margin-bottom:0}.fsec>legend{color:var(--tx);text-transform:none;margin:0 0 4px;padding:0;font-size:13px;font-weight:700}.fld{margin-top:12px}.fld>label{color:#374151;margin:0 0 6px;font-size:13px}.req{color:#b91c1c;font-weight:700}.sr{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.help{color:#4b5563;margin-top:4px;font-size:12px;line-height:1.4}.ferr{color:#b91c1c;margin-top:4px;font-size:13px;font-weight:500;line-height:1.4}.ferr.box{background:#fef2f2;border:1px solid #fca5a5;border-radius:8px;margin:0 0 16px;padding:10px 12px}input.invalid,select.invalid,textarea.invalid,.bad input:not([type=checkbox]):not([type=radio]),.bad select,.bad textarea{box-shadow:0 0 0 3px #dc262626;border-color:#dc2626!important}select{appearance:none;cursor:pointer;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2355546B' stroke-width='2.5'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") right 12px center no-repeat;min-height:44px;padding-right:34px}select.ph{color:#6b7280}select option{color:var(--tx)}.modal input,.modal select,.modal textarea{min-height:44px;font-size:15px}.modal textarea{min-height:88px}input::placeholder,textarea::placeholder{color:#6b7280;opacity:1}.affix{border:1px solid var(--bd);background:#fff;border-radius:8px;align-items:stretch;display:flex;overflow:hidden}.affix:focus-within{border-color:var(--ring);box-shadow:0 0 0 3px #22d3ee40}.affix input{border-radius:0;flex:1;min-width:0;box-shadow:none!important;border:0!important}.affix .pre,.affix .suf{color:#374151;background:#f3f4f6;align-items:center;padding:0 12px;font-size:14px;font-weight:600;display:flex}.bad .affix{border-color:#dc2626}.clist{flex-direction:column;gap:4px;display:flex}.clhead{border-bottom:1px solid var(--bd);align-items:center;gap:12px;margin-bottom:4px;padding-bottom:4px;display:flex}.clhead .crow{flex:1}.crow{border:1px solid var(--bd);cursor:pointer;background:#fff;border-radius:8px;align-items:center;gap:12px;width:100%;min-height:44px;padding:8px 12px;color:var(--tx)!important;margin:0!important;font-size:14px!important;font-weight:400!important;display:flex!important}.crow:hover{background:#f8f9fb}.crow:has(input:checked){border-color:var(--acc);background:#eef2ff}.crow input{flex:none;margin:0;width:18px!important;height:18px!important;min-height:0!important}.adv{border:1px solid var(--bd);border-radius:8px;margin-top:24px}.adv>summary{cursor:pointer;color:#374151;align-items:center;min-height:44px;padding:12px 14px;font-size:13px;font-weight:600;display:flex}.adv .advb,.adv>pre{padding:0 14px 14px}.btn.danger.solid{color:#fff;background:#dc2626;border-color:#dc2626}.btn.danger.solid:disabled{color:#fff;cursor:not-allowed;background:#fca5a5;border-color:#fca5a5}@media (width<=480px){.modal{align-items:stretch;padding:0}.modal .card{border-radius:0;max-width:none;height:100%;max-height:100dvh}.modal .mf .btn{flex:1}.modal .mf>.small{flex-basis:100%}}.course-grid{grid-template-columns:1fr 1fr;gap:0 16px;display:grid}@media (width<=720px){.course-grid{grid-template-columns:1fr}}.course-form .rep{border:1px solid var(--bd);background:#fff;border-radius:10px;margin-top:12px;padding:12px}.course-form .help{color:#4b5563;margin:0 0 8px;font-size:13px}.cover-preview{object-fit:cover;border:1px solid var(--bd);background:#f3f4f6;border-radius:10px;width:220px;height:132px}.lesson-line{flex-wrap:wrap;align-items:center;gap:8px;margin:8px 0;display:flex}.lesson-line input{flex:1;min-width:180px}.lesson-body{flex-basis:100%}
