:root{--brand-50:#f3eeff;--brand-100:#e6dcff;--brand-200:#cdbaff;--brand-300:#ae93fb;--brand-400:#8f6df5;--brand-500:#6c4cf1;--brand-600:#573bd1;--brand-700:#442da6;--math-soft:#e7eeff;--math:#4b7bec;--math-deep:#2e56b8;--sci-soft:#dff7ee;--sci:#14b88a;--sci-deep:#0b8564;--sun:#ffb627;--sun-soft:#fff1d6;--melon:#ff6b6b;--melon-soft:#ffe4e4;--bubble:#ff7fb6;--bubble-soft:#ffe6f1;--mint:#2dd4bf;--sky:#38bdf8;--ok:#22c55e;--ok-soft:#dcfce7;--warn:#f59e0b;--warn-soft:#fef3c7;--bad:#ef4444;--bad-soft:#fee2e2;--bg:#faf7ff;--bg-deco-1:#ede4ff;--bg-deco-2:#dff3ff;--surface:#fff;--surface-2:#f7f4fe;--surface-3:#efeafb;--line:#e7e0f7;--line-soft:#f1ecfc;--ink:#241d46;--ink-2:#4b4370;--ink-3:#7b739e;--ink-on:#fff;--r-sm:10px;--r-md:16px;--r-lg:22px;--r-xl:30px;--r-full:999px;--sh-xs:0 1px 2px #3c28780f;--sh-sm:0 2px 8px #3c287812;--sh-md:0 8px 24px #3c28781a;--sh-lg:0 18px 44px #3c287824;--sh-pop:0 4px 0 #3c28782e;--t-fast:.12s cubic-bezier(.4, 0, .2, 1);--t:.2s cubic-bezier(.4, 0, .2, 1);--t-bounce:.42s cubic-bezier(.34, 1.56, .64, 1);--font-display:"Baloo 2", "Segoe UI", system-ui, sans-serif;--font-body:"Nunito", "Segoe UI", system-ui, sans-serif;--shell-pad:28px;--sidebar-w:260px}:root[data-theme=dark]{--brand-50:#241e42;--brand-100:#2e2657;--brand-200:#3d3275;--brand-300:#6e58d6;--brand-400:#8b72f0;--brand-500:#9b85f7;--brand-600:#ae9bff;--brand-700:#c4b6ff;--math-soft:#1e2a4d;--math:#6e9bff;--math-deep:#a5c0ff;--sci-soft:#10332b;--sci:#2fd9a6;--sci-deep:#7df0ce;--sun-soft:#3a2c10;--melon-soft:#3b1e1e;--bubble-soft:#3a1c2c;--ok-soft:#12331f;--warn-soft:#3a2c0d;--bad-soft:#3b1b1b;--bg:#14112a;--bg-deco-1:#1e1940;--bg-deco-2:#152b3a;--surface:#1e1a3c;--surface-2:#262150;--surface-3:#2e2860;--line:#322b60;--line-soft:#2a2452;--ink:#f3f0ff;--ink-2:#c8c0ee;--ink-3:#948bc0;--sh-xs:0 1px 2px #0000004d;--sh-sm:0 2px 8px #00000059;--sh-md:0 8px 24px #0006;--sh-lg:0 18px 44px #00000080;--sh-pop:0 4px 0 #00000073}*,:before,:after{box-sizing:border-box}*{margin:0}html,body,#root{height:100%}body{font-family:var(--font-body);color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;font-size:15px;line-height:1.55}h1,h2,h3,h4,h5{font-family:var(--font-display);letter-spacing:-.01em;color:var(--ink);font-weight:600;line-height:1.2}h1{font-size:clamp(26px,3.4vw,38px)}h2{font-size:clamp(21px,2.4vw,27px)}h3{font-size:18px}h4{font-size:16px}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer;background:0 0;border:none;padding:0}img,svg,video{max-width:100%;display:block}ul,ol{padding:0;list-style:none}:focus-visible{outline:3px solid var(--brand-400);outline-offset:2px;border-radius:6px}::selection{background:var(--brand-200);color:var(--ink)}*{scrollbar-width:thin;scrollbar-color:var(--line) transparent}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--line);border-radius:var(--r-full);background-clip:content-box;border:3px solid #0000}::-webkit-scrollbar-thumb:hover{background:var(--brand-200);background-clip:content-box}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.row{align-items:center;gap:10px;display:flex}.row-t{align-items:flex-start;gap:10px;display:flex}.col{flex-direction:column;gap:10px;display:flex}.wrap{flex-wrap:wrap}.between{justify-content:space-between}.center{justify-content:center;align-items:center}.grow{flex:1;min-width:0}.gap-4{gap:4px}.gap-6{gap:6px}.gap-8{gap:8px}.gap-14{gap:14px}.gap-18{gap:18px}.gap-24{gap:24px}.mt-4{margin-top:4px}.mt-8{margin-top:8px}.mt-14{margin-top:14px}.mt-20{margin-top:20px}.mt-28{margin-top:28px}.mb-8{margin-bottom:8px}.mb-14{margin-bottom:14px}.mb-20{margin-bottom:20px}.tc{text-align:center}.hide{display:none!important}.trunc{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.clamp-2{-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.muted{color:var(--ink-3)}.dim{color:var(--ink-2)}.tiny{font-size:12px}.small{font-size:13px}.big{font-size:17px}.bold{font-weight:700}.semi{font-weight:600}.display{font-family:var(--font-display);font-weight:600}.nums{font-variant-numeric:tabular-nums}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--sh-sm)}.card-p{padding:20px}.card-p-lg{padding:26px}.card-hover{transition:transform var(--t), box-shadow var(--t), border-color var(--t)}.card-hover:hover{box-shadow:var(--sh-md);border-color:var(--brand-200);transform:translateY(-3px)}.card-head{border-bottom:1px solid var(--line-soft);justify-content:space-between;align-items:center;gap:14px;padding:18px 20px;display:flex}.card-head h3{font-size:17px}.card-body{padding:20px}.card-body-tight{padding:14px 20px}.btn{font-family:var(--font-display);border-radius:var(--r-full);white-space:nowrap;transition:transform var(--t-fast), box-shadow var(--t-fast), background var(--t-fast), border-color var(--t-fast), color var(--t-fast);border:1px solid #0000;justify-content:center;align-items:center;gap:8px;padding:11px 20px;font-size:15px;font-weight:600;display:inline-flex}.btn:active:not(:disabled){transform:translateY(2px)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn svg{flex-shrink:0}.btn-primary{background:linear-gradient(180deg, var(--brand-400), var(--brand-500));color:#fff;box-shadow:0 4px 0 var(--brand-600), var(--sh-sm)}.btn-primary:hover:not(:disabled){filter:brightness(1.06)}.btn-primary:active:not(:disabled){box-shadow:0 2px 0 var(--brand-600)}.btn-sun{background:linear-gradient(180deg, #ffc64f, var(--sun));color:#4a3200;box-shadow:0 4px 0 #d98f00, var(--sh-sm)}.btn-sun:hover:not(:disabled){filter:brightness(1.05)}.btn-sun:active:not(:disabled){box-shadow:0 2px #d98f00}.btn-ok{background:linear-gradient(180deg, #45d67a, var(--ok));color:#fff;box-shadow:0 4px 0 #17903f, var(--sh-sm)}.btn-ok:hover:not(:disabled){filter:brightness(1.05)}.btn-ok:active:not(:disabled){box-shadow:0 2px #17903f}.btn-soft{background:var(--surface-2);color:var(--ink-2);border-color:var(--line)}.btn-soft:hover:not(:disabled){background:var(--surface-3);color:var(--ink)}.btn-ghost{color:var(--ink-2);background:0 0}.btn-ghost:hover:not(:disabled){background:var(--surface-2);color:var(--ink)}.btn-danger{background:var(--bad-soft);color:var(--bad);border-color:#0000}.btn-danger:hover:not(:disabled){background:var(--bad);color:#fff}.btn-sm{padding:7px 14px;font-size:13.5px}.btn-lg{padding:15px 30px;font-size:17px}.btn-block{width:100%}.btn-icon{border-radius:var(--r-full);padding:9px}.field{flex-direction:column;gap:7px;display:flex}.field>label{color:var(--ink-2);align-items:center;gap:6px;font-size:13px;font-weight:700;display:flex}.input,.select,.textarea{background:var(--surface);border:2px solid var(--line);border-radius:var(--r-md);width:100%;color:var(--ink);transition:border-color var(--t-fast), box-shadow var(--t-fast), background var(--t-fast);padding:12px 14px}.input::placeholder,.textarea::placeholder{color:var(--ink-3);opacity:.8}.input:focus,.select:focus,.textarea:focus{border-color:var(--brand-400);box-shadow:0 0 0 4px var(--brand-50);outline:none}.textarea{resize:vertical;min-height:96px;line-height:1.55}.select{appearance:none;cursor:pointer;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%237B739E' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");background-position:right 14px center;background-repeat:no-repeat;padding-right:40px}.input-err,.input-err:focus{border-color:var(--bad);box-shadow:0 0 0 4px var(--bad-soft)}.field-hint{color:var(--ink-3);font-size:12px}.field-err{color:var(--bad);font-size:12.5px;font-weight:700}.input-key{letter-spacing:.18em;text-transform:uppercase;text-align:center;font-family:ui-monospace,Cascadia Code,Consolas,monospace;font-size:17px;font-weight:700}.choice-grid{grid-template-columns:repeat(auto-fit,minmax(74px,1fr));gap:10px;display:grid}.choice{border:2px solid var(--line);border-radius:var(--r-md);background:var(--surface);font-family:var(--font-display);color:var(--ink-2);text-align:center;transition:all var(--t-fast);padding:13px 8px;font-weight:600}.choice:hover{border-color:var(--brand-300);color:var(--ink);transform:translateY(-2px)}.choice[aria-pressed=true]{border-color:var(--brand-500);background:var(--brand-50);color:var(--brand-600);box-shadow:0 0 0 3px var(--brand-50)}.choice-num{font-size:22px;line-height:1.1;display:block}.choice-cap{opacity:.75;font-size:11px;font-weight:600;display:block}.opt{border:2px solid var(--line);border-radius:var(--r-md);background:var(--surface);text-align:left;width:100%;transition:all var(--t-fast);align-items:flex-start;gap:12px;padding:14px 16px;display:flex}.opt:hover:not(:disabled){border-color:var(--brand-300);background:var(--surface-2)}.opt[aria-pressed=true]{border-color:var(--brand-500);background:var(--brand-50)}.opt-mark{border-radius:var(--r-full);border:2px solid var(--line);background:var(--surface);width:26px;height:26px;font-family:var(--font-display);color:var(--ink-3);transition:all var(--t-fast);flex-shrink:0;place-items:center;font-size:13px;font-weight:700;display:grid}.opt[aria-pressed=true] .opt-mark{border-color:var(--brand-500);background:var(--brand-500);color:#fff}.opt-ok{border-color:var(--ok)!important;background:var(--ok-soft)!important}.opt-ok .opt-mark{border-color:var(--ok);background:var(--ok);color:#fff}.opt-bad{border-color:var(--bad)!important;background:var(--bad-soft)!important}.opt-bad .opt-mark{border-color:var(--bad);background:var(--bad);color:#fff}.badge{border-radius:var(--r-full);letter-spacing:.01em;background:var(--surface-2);color:var(--ink-2);white-space:nowrap;align-items:center;gap:5px;padding:4px 11px;font-size:12px;font-weight:800;display:inline-flex}.badge-brand{background:var(--brand-50);color:var(--brand-600)}.badge-math{background:var(--math-soft);color:var(--math-deep)}.badge-sci{background:var(--sci-soft);color:var(--sci-deep)}.badge-ok{background:var(--ok-soft);color:#16803c}.badge-warn{background:var(--warn-soft);color:#92610a}.badge-bad{background:var(--bad-soft);color:#b91c1c}.badge-sun{background:var(--sun-soft);color:#92610a}.badge-lg{padding:6px 14px;font-size:13px}:root[data-theme=dark] .badge-ok{color:#6ee7a0}:root[data-theme=dark] .badge-warn{color:#fcd34d}:root[data-theme=dark] .badge-bad{color:#fca5a5}:root[data-theme=dark] .badge-sun{color:#fcd34d}.bar{background:var(--surface-3);border-radius:var(--r-full);height:10px;overflow:hidden}.bar-fill{border-radius:var(--r-full);background:linear-gradient(90deg, var(--brand-400), var(--brand-500));height:100%;transition:width .6s cubic-bezier(.4,0,.2,1)}.bar-sm{height:7px}.bar-lg{height:14px}.bar-fill-ok{background:linear-gradient(90deg, #4ade80, var(--ok))}.bar-fill-sun{background:linear-gradient(90deg, #ffd166, var(--sun))}.bar-fill-math{background:linear-gradient(90deg, #7ea6f5, var(--math))}.bar-fill-sci{background:linear-gradient(90deg, #5eeac0, var(--sci))}.bar-fill-bad{background:linear-gradient(90deg, #fca5a5, var(--bad))}.ring{place-items:center;display:grid;position:relative}.ring svg{transform:rotate(-90deg)}.ring-val{text-align:center;font-family:var(--font-display);font-weight:600;position:absolute}.empty{text-align:center;color:var(--ink-3);flex-direction:column;align-items:center;gap:10px;padding:46px 24px;display:flex}.empty-emoji{filter:saturate(.85);font-size:42px;line-height:1}.empty h4{color:var(--ink-2)}.empty p{max-width:380px;font-size:14px}.modal-back{z-index:90;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);animation:fade var(--t) both;background:#1e143c80;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.modal{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-xl);width:min(560px,100%);max-height:min(86vh,900px);box-shadow:var(--sh-lg);animation:pop var(--t-bounce) both;flex-direction:column;display:flex;overflow:hidden}.modal-wide{width:min(880px,100%)}.modal-head{border-bottom:1px solid var(--line-soft);flex-shrink:0;justify-content:space-between;align-items:center;gap:14px;padding:20px 24px;display:flex}.modal-body{padding:24px;overflow-y:auto}.modal-foot{border-top:1px solid var(--line-soft);background:var(--surface-2);flex-shrink:0;justify-content:flex-end;gap:10px;padding:16px 24px;display:flex}.toast-host{z-index:200;pointer-events:none;flex-direction:column;gap:10px;display:flex;position:fixed;bottom:22px;right:22px}.toast{background:var(--surface);border:1px solid var(--line);border-left:5px solid var(--brand-500);border-radius:var(--r-md);min-width:250px;max-width:380px;box-shadow:var(--sh-lg);animation:slideIn var(--t-bounce) both;pointer-events:auto;align-items:center;gap:11px;padding:13px 18px;font-size:14px;font-weight:600;display:flex}.toast-ok{border-left-color:var(--ok)}.toast-bad{border-left-color:var(--bad)}.toast-warn{border-left-color:var(--warn)}.tabs{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-full);gap:6px;width:fit-content;max-width:100%;padding:5px;display:flex;overflow-x:auto}.tab{border-radius:var(--r-full);font-family:var(--font-display);color:var(--ink-3);white-space:nowrap;transition:all var(--t-fast);padding:9px 18px;font-size:14px;font-weight:600}.tab:hover{color:var(--ink-2)}.tab[aria-selected=true]{background:var(--surface);color:var(--brand-600);box-shadow:var(--sh-xs)}.tbl-wrap{overflow-x:auto}.tbl{border-collapse:collapse;width:100%;font-size:14px}.tbl th{text-align:left;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-3);border-bottom:1px solid var(--line);white-space:nowrap;padding:11px 14px;font-size:11.5px;font-weight:800}.tbl td{border-bottom:1px solid var(--line-soft);vertical-align:middle;padding:13px 14px}.tbl tbody tr{transition:background var(--t-fast)}.tbl tbody tr:hover{background:var(--surface-2)}.tbl tbody tr:last-child td{border-bottom:none}.avatar{border-radius:var(--r-full);width:40px;height:40px;font-family:var(--font-display);color:#fff;box-shadow:var(--sh-xs);-webkit-user-select:none;user-select:none;flex-shrink:0;place-items:center;font-size:15px;font-weight:600;display:grid}.avatar-sm{width:30px;height:30px;font-size:12px}.avatar-lg{width:60px;height:60px;font-size:22px}.avatar-xl{width:84px;height:84px;font-size:30px}@keyframes fade{0%{opacity:0}to{opacity:1}}@keyframes pop{0%{opacity:0;transform:translateY(14px)scale(.96)}to{opacity:1;transform:none}}@keyframes slideIn{0%{opacity:0;transform:translate(30px)}to{opacity:1;transform:none}}@keyframes rise{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-9px)}}@keyframes pulse-soft{0%,to{opacity:1}50%{opacity:.55}}@keyframes drift{0%,to{transform:translate(0)scale(1)}33%{transform:translate(24px,-18px)scale(1.05)}66%{transform:translate(-16px,14px)scale(.97)}}.anim-rise{animation:rise var(--t-bounce) both}.anim-float{animation:4s ease-in-out infinite float}.spinner{border:2.5px solid var(--brand-100);border-top-color:var(--brand-500);border-radius:var(--r-full);width:18px;height:18px;animation:.7s linear infinite spin}.spinner-lg{border-width:4px;width:34px;height:34px}.page-load{place-items:center;gap:16px;min-height:60vh;display:grid}.deco{z-index:0;pointer-events:none;position:fixed;inset:0;overflow:hidden}.deco-blob{filter:blur(80px);opacity:.55;border-radius:50%;animation:26s ease-in-out infinite drift;position:absolute}:root[data-theme=dark] .deco-blob{opacity:.35}.deco-blob-1{background:var(--bg-deco-1);width:480px;height:480px;top:-160px;left:-120px}.deco-blob-2{background:var(--bg-deco-2);width:400px;height:400px;animation-delay:-9s;bottom:-140px;right:-100px}.deco-blob-3{background:var(--bubble-soft);opacity:.35;width:300px;height:300px;animation-delay:-17s;top:40%;right:12%}.deco-grid{background-image:linear-gradient(var(--line-soft) 1px, transparent 1px), linear-gradient(90deg, var(--line-soft) 1px, transparent 1px);opacity:.5;background-size:46px 46px;position:absolute;inset:0;-webkit-mask-image:radial-gradient(80% 60% at 50% 40%,#000 20%,#0000 75%);mask-image:radial-gradient(80% 60% at 50% 40%,#000 20%,#0000 75%)}.gate{z-index:1;flex-direction:column;min-height:100dvh;padding:26px clamp(16px,4vw,40px) 40px;display:flex;position:relative}.gate-top{justify-content:space-between;align-items:center;gap:16px;display:flex}.gate-main{flex:1;place-items:center;padding:30px 0;display:grid}.gate-inner{width:100%;max-width:960px}.gate-contact{border-top:1px solid var(--line);margin-top:4px;padding-top:36px}.gate-contact-inner{flex-direction:column;gap:24px;max-width:960px;margin:0 auto;display:flex}.gate-contact-label{letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3);margin:0;font-size:11px;font-weight:700}.gate-contact-section{flex-direction:column;gap:10px;display:flex}.gate-contact-section-title{color:var(--ink-2);letter-spacing:.04em;font-size:12px;font-weight:600}.gate-contact-cards{flex-wrap:wrap;gap:10px;display:flex}.gate-contact-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);transition:border-color var(--t), transform var(--t), box-shadow var(--t);align-items:center;gap:10px;min-width:0;padding:10px 16px;text-decoration:none;display:flex}.gate-contact-card:hover{border-color:var(--brand-400);box-shadow:var(--sh-sm);transform:translateY(-2px)}.gate-contact-card--dev:hover{border-color:var(--bubble)}.gate-contact-avatar{flex-shrink:0;font-size:20px}.gate-contact-name{color:var(--ink-1);white-space:nowrap;font-size:13px;font-weight:600}.gate-contact-role{color:var(--ink-3);white-space:nowrap;font-size:11px}.gate-contact-role:before{content:"·";color:var(--line);margin-right:5px}.gate-contact-mail{color:var(--brand-500);white-space:nowrap;font-size:11px}.gate-contact-mail:before{content:"·";color:var(--line);margin-right:5px}.gate-contact-card--dev .gate-contact-mail{color:var(--bubble)}@media (width<=600px){.gate-contact-cards{flex-direction:column}.gate-contact-card{flex-wrap:wrap;gap:4px 8px}.gate-contact-name,.gate-contact-role,.gate-contact-mail{white-space:normal}}.logo{align-items:center;gap:11px;display:inline-flex}.logo-mark{background:linear-gradient(140deg, var(--brand-400), var(--brand-600) 60%, var(--bubble));color:#fff;width:42px;height:42px;box-shadow:var(--sh-md);border-radius:13px;flex-shrink:0;place-items:center;display:grid}.logo-mark svg{width:66%;height:auto}.logo-text{flex-direction:column;line-height:1.3;display:flex}.logo-name{font-family:var(--font-display);font-size:19px;font-weight:600}.logo-sub{color:var(--ink-3);letter-spacing:.06em;text-transform:uppercase;font-size:11px;font-weight:700}.logo-lg .logo-mark{border-radius:18px;width:58px;height:58px}.logo-lg .logo-name{font-size:25px}.gate-hero{text-align:center;margin-bottom:38px}.gate-hero h1{margin-bottom:10px}.gate-hero h1 .accent{background:linear-gradient(100deg, var(--brand-500), var(--bubble));-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text}.gate-hero p{color:var(--ink-2);max-width:480px;margin:0 auto;font-size:16px}.role-grid{grid-template-columns:repeat(auto-fit,minmax(238px,1fr));gap:18px;display:grid}.role-card{background:var(--surface);border:2px solid var(--line);border-radius:var(--r-xl);box-shadow:var(--sh-sm);text-align:center;transition:transform var(--t-bounce), box-shadow var(--t), border-color var(--t);flex-direction:column;align-items:center;gap:12px;padding:32px 24px 26px;display:flex;position:relative;overflow:hidden}.role-card:before{content:"";background:var(--role-accent,var(--brand-500));height:6px;transition:height var(--t);position:absolute;inset:0 0 auto}.role-card:hover{box-shadow:var(--sh-lg);border-color:var(--role-accent,var(--brand-500));transform:translateY(-7px)}.role-card:hover:before{height:9px}.role-icon{background:var(--role-soft,var(--brand-50));width:76px;height:76px;transition:transform var(--t-bounce);border-radius:24px;place-items:center;font-size:38px;display:grid}.role-card:hover .role-icon{transform:scale(1.09)rotate(-5deg)}.role-card h3{font-size:20px}.role-card p{color:var(--ink-3);font-size:13.5px;line-height:1.5}.role-go{font-family:var(--font-display);color:var(--role-accent,var(--brand-500));transition:gap var(--t);align-items:center;gap:5px;margin-top:4px;font-size:14px;font-weight:600;display:inline-flex}.role-card:hover .role-go{gap:10px}.auth-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-xl);width:min(520px,100%);box-shadow:var(--sh-lg);animation:pop var(--t-bounce) both;margin:0 auto;overflow:hidden}.auth-top{border-bottom:1px solid var(--line-soft);background:linear-gradient(160deg, var(--role-soft,var(--brand-50)), transparent 130%);text-align:center;padding:26px 30px 22px}.auth-top .role-icon{background:var(--surface);width:60px;height:60px;box-shadow:var(--sh-sm);border-radius:19px;margin:0 auto 12px;font-size:30px}.auth-top h2{font-size:22px}.auth-top p{color:var(--ink-3);margin-top:4px;font-size:13.5px}.auth-body{flex-direction:column;gap:16px;padding:26px 30px;display:flex}.auth-foot{border-top:1px solid var(--line-soft);background:var(--surface-2);text-align:center;color:var(--ink-3);padding:16px 30px;font-size:13.5px}.auth-foot a,.auth-link{color:var(--brand-500);transition:border-color var(--t-fast);border-bottom:2px solid #0000;font-weight:800}.auth-foot a:hover,.auth-link:hover{border-bottom-color:var(--brand-300)}.form-row{grid-template-columns:1fr 1fr;gap:14px;display:grid}@media (width<=520px){.form-row{grid-template-columns:1fr}}.alert{border-radius:var(--r-md);align-items:flex-start;gap:10px;padding:12px 15px;font-size:13.5px;font-weight:600;line-height:1.5;display:flex}.alert-bad{background:var(--bad-soft);color:#b91c1c}.alert-ok{background:var(--ok-soft);color:#15803d}.alert-info{background:var(--brand-50);color:var(--brand-600)}.alert-warn{background:var(--warn-soft);color:#92610a}:root[data-theme=dark] .alert-bad{color:#fca5a5}:root[data-theme=dark] .alert-ok{color:#6ee7a0}:root[data-theme=dark] .alert-warn{color:#fcd34d}.steps{justify-content:center;align-items:center;gap:8px;display:flex}.step-dot{border-radius:var(--r-full);background:var(--line);width:9px;height:9px;transition:all var(--t)}.step-dot-on{background:var(--brand-500);width:26px}.step-dot-done{background:var(--brand-300)}.shell{z-index:1;min-height:100dvh;display:flex;position:relative}.sidebar{width:var(--sidebar-w);background:var(--surface);border-right:1px solid var(--line);z-index:40;flex-direction:column;flex-shrink:0;height:100dvh;display:flex;position:sticky;top:0}.sidebar-top{padding:20px 18px 14px}.sidebar-nav{flex-direction:column;flex:1;gap:3px;padding:6px 12px 12px;display:flex;overflow-y:auto}.sidebar-foot{border-top:1px solid var(--line-soft);padding:12px}.nav-group-label{letter-spacing:.09em;text-transform:uppercase;color:var(--ink-3);padding:16px 12px 7px;font-size:10.5px;font-weight:800}.nav-item{border-radius:var(--r-md);color:var(--ink-2);transition:all var(--t-fast);align-items:center;gap:12px;padding:10px 13px;font-size:14.5px;font-weight:700;display:flex;position:relative}.nav-item:hover{background:var(--surface-2);color:var(--ink)}.nav-item svg{opacity:.75;flex-shrink:0}.nav-item.on{background:var(--brand-50);color:var(--brand-600)}.nav-item.on svg{opacity:1}.nav-item.on:before{content:"";background:var(--brand-500);border-radius:0 4px 4px 0;width:4px;height:20px;position:absolute;top:50%;left:-12px;transform:translateY(-50%)}.nav-badge{border-radius:var(--r-full);background:var(--melon);color:#fff;place-items:center;min-width:21px;height:21px;margin-left:auto;padding:0 6px;font-size:11px;font-weight:800;display:grid}.main{flex-direction:column;flex:1;min-width:0;display:flex}.topbar{z-index:30;padding:13px clamp(16px, 3vw, var(--shell-pad));background:color-mix(in srgb, var(--bg) 82%, transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid var(--line);align-items:center;gap:14px;min-height:64px;display:flex;position:sticky;top:0}.topbar-title{flex-direction:column;min-width:0;line-height:1.25;display:flex}.topbar-title strong{font-family:var(--font-display);font-size:18px;font-weight:600}.topbar-title span{color:var(--ink-3);font-size:12.5px}.content{padding:clamp(18px, 3vw, var(--shell-pad));flex:1;width:100%;max-width:1360px;margin:0 auto}.user-btn{border-radius:var(--r-full);border:1px solid var(--line);background:var(--surface);transition:all var(--t-fast);align-items:center;gap:10px;padding:6px 12px 6px 6px;display:flex}.user-btn:hover{border-color:var(--brand-300);box-shadow:var(--sh-sm)}.user-meta{text-align:left;flex-direction:column;line-height:1.2;display:flex}.user-meta strong{font-size:13.5px;font-weight:800}.user-meta span{color:var(--ink-3);font-size:11px}.menu{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);min-width:214px;box-shadow:var(--sh-lg);z-index:60;animation:pop var(--t) both;padding:6px;position:absolute;top:calc(100% + 8px);right:0}.menu-item{border-radius:var(--r-sm);width:100%;color:var(--ink-2);text-align:left;transition:background var(--t-fast), color var(--t-fast);align-items:center;gap:10px;padding:10px 12px;font-size:14px;font-weight:600;display:flex}.menu-item:hover{background:var(--surface-2);color:var(--ink)}.menu-item-bad:hover{background:var(--bad-soft);color:var(--bad)}.menu-sep{background:var(--line-soft);height:1px;margin:5px 0}.mobile-only,.sidebar-scrim{display:none}@media (width<=940px){.mobile-only{display:inline-flex}.sidebar{transition:transform var(--t);box-shadow:var(--sh-lg);position:fixed;top:0;left:0;transform:translate(-100%)}.sidebar.open{transform:none}.sidebar-scrim{z-index:39;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);animation:fade var(--t) both;background:#1e143c73;display:block;position:fixed;inset:0}.desktop-only{display:none!important}}.page-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:18px;margin-bottom:22px;display:flex}.page-head p{color:var(--ink-3);margin-top:4px;font-size:14.5px}.hero-banner{border-radius:var(--r-xl);background:linear-gradient(120deg, var(--brand-500), var(--brand-400) 45%, var(--bubble) 130%);color:#fff;box-shadow:var(--sh-md);justify-content:space-between;align-items:center;gap:24px;padding:26px 30px;display:flex;position:relative;overflow:hidden}.hero-banner:after{content:"";background:#ffffff1f;border-radius:50%;width:240px;height:240px;position:absolute;top:-60px;right:-60px}.hero-banner:before{content:"";background:#ffffff17;border-radius:50%;width:170px;height:170px;position:absolute;bottom:-90px;right:60px}.hero-txt{z-index:1;position:relative}.hero-txt h2{color:#fff;font-size:clamp(20px,2.6vw,26px)}.hero-txt p{color:#ffffffd9;max-width:46ch;margin-top:5px;font-size:14.5px}.hero-art{z-index:1;flex-shrink:0;font-size:74px;line-height:1;position:relative}@media (width<=700px){.hero-art{display:none}}.stat-grid{grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:16px;display:grid}.stat{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--sh-xs);transition:transform var(--t), box-shadow var(--t);align-items:center;gap:14px;padding:18px;display:flex}.stat:hover{box-shadow:var(--sh-sm);transform:translateY(-2px)}.stat-icon{background:var(--stat-soft,var(--brand-50));border-radius:15px;flex-shrink:0;place-items:center;width:46px;height:46px;font-size:22px;display:grid}.stat-num{font-family:var(--font-display);font-variant-numeric:tabular-nums;font-size:25px;font-weight:600;line-height:1.1}.stat-lbl{color:var(--ink-3);font-size:12.5px;font-weight:700}.split{grid-template-columns:minmax(0,1.65fr) minmax(0,1fr);gap:20px;display:grid}@media (width<=1050px){.split{grid-template-columns:1fr}}.split>*,.card-grid>*,.course-grid>*,.stat-grid>*{min-width:0}.course-grid{grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:20px;display:grid}.card-grid{grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:20px;display:grid}.course-card{border-radius:var(--r-xl);background:var(--surface);border:2px solid var(--line);box-shadow:var(--sh-sm);transition:transform var(--t-bounce), box-shadow var(--t), border-color var(--t);flex-direction:column;padding:26px;display:flex;position:relative;overflow:hidden}.course-card:hover{box-shadow:var(--sh-lg);border-color:var(--c-accent);transform:translateY(-6px)}.course-card:after{content:"";background:var(--c-soft);width:160px;height:160px;transition:transform var(--t-bounce);border-radius:50%;position:absolute;bottom:-46px;right:-46px}.course-card:hover:after{transform:scale(1.22)}.course-inner{z-index:1;flex-direction:column;gap:14px;height:100%;display:flex;position:relative}.course-emoji{background:var(--c-soft);width:62px;height:62px;box-shadow:var(--sh-xs);border-radius:20px;place-items:center;font-size:31px;display:grid}.course-card h3{font-size:21px}.course-meta{color:var(--ink-3);gap:16px;font-size:13px;font-weight:700;display:flex}.topic-list{flex-direction:column;gap:10px;display:flex}.topic-row{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);transition:all var(--t-fast);text-align:left;align-items:center;gap:14px;width:100%;padding:15px 18px;display:flex}.topic-row:hover{border-color:var(--c-accent,var(--brand-300));box-shadow:var(--sh-sm);transform:translate(3px)}.topic-idx{background:var(--c-soft,var(--brand-50));width:36px;height:36px;color:var(--c-accent,var(--brand-600));font-family:var(--font-display);border-radius:12px;flex-shrink:0;place-items:center;font-size:15px;font-weight:600;display:grid}.topic-done .topic-idx{background:var(--ok-soft);color:var(--ok)}.topic-title{font-size:15px;font-weight:700}.topic-sub{color:var(--ink-3);font-size:12.5px}.video-frame{aspect-ratio:16/9;border-radius:var(--r-lg);width:100%;box-shadow:var(--sh-md);background:#0b0a16;position:relative;overflow:hidden}.video-frame iframe{border:0;width:100%;height:100%;display:block}.video-ph{color:#9c93c4;text-align:center;background:repeating-linear-gradient(45deg,#14122b,#14122b 12px,#191636 12px 24px);flex-direction:column;justify-content:center;align-items:center;gap:10px;padding:24px;display:flex;position:absolute;inset:0}.video-list{flex-direction:column;gap:8px;display:flex}.video-item{border-radius:var(--r-md);text-align:left;width:100%;transition:all var(--t-fast);border:1px solid #0000;align-items:center;gap:12px;padding:10px 12px;display:flex}.video-item:hover{background:var(--surface-2)}.video-item.on{background:var(--brand-50);border-color:var(--brand-200)}.video-thumb{background:var(--surface-3);object-fit:cover;width:78px;height:46px;color:var(--ink-3);border-radius:9px;flex-shrink:0;place-items:center;display:grid;position:relative;overflow:hidden}.video-thumb img{object-fit:cover;width:100%;height:100%}.video-name{font-size:13.5px;font-weight:700;line-height:1.35}.pdf-shell{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface-2);box-shadow:var(--sh-sm);overflow:hidden}.pdf-bar{background:var(--surface);border-bottom:1px solid var(--line-soft);align-items:center;gap:10px;padding:10px 14px;display:flex}.pdf-frame{background:#52525b;border:0;width:100%;height:clamp(420px,72vh,900px);display:block}.pdf-fallback{text-align:center;color:var(--ink-3);flex-direction:column;align-items:center;gap:12px;padding:54px 24px;display:flex}.file-drop{border:2px dashed var(--line);border-radius:var(--r-lg);background:var(--surface-2);text-align:center;width:100%;transition:all var(--t-fast);cursor:pointer;flex-direction:column;align-items:center;gap:8px;padding:24px 18px;display:flex}.file-drop:hover,.file-drop-on{border-color:var(--brand-400);background:var(--brand-50)}.file-drop-icon{background:var(--surface);width:44px;height:44px;color:var(--brand-500);box-shadow:var(--sh-xs);border-radius:14px;place-items:center;display:grid}.file-drop strong{font-family:var(--font-display);color:var(--ink-2);font-size:15px;font-weight:600}.file-row{border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);align-items:center;gap:11px;padding:10px 13px;display:flex}.file-badge{background:var(--melon-soft);width:34px;height:34px;color:var(--bad);letter-spacing:.02em;border-radius:10px;flex-shrink:0;place-items:center;font-size:10px;font-weight:800;display:grid}.file-name{font-size:13.5px;font-weight:700;line-height:1.3}.file-meta{color:var(--ink-3);font-size:11.5px}.upload-bar{border-radius:var(--r-full);background:var(--surface-3);height:4px;overflow:hidden}.upload-bar i{background:var(--brand-500);height:100%;animation:1.1s ease-in-out infinite slide-loop;display:block}@keyframes slide-loop{0%{width:15%;margin-left:0}50%{width:45%;margin-left:55%}to{width:15%;margin-left:100%}}.watch-bar{border-radius:var(--r-md);background:var(--surface-2);border:1px solid var(--line);align-items:center;gap:12px;padding:12px 16px;display:flex}.watch-bar-track{border-radius:var(--r-full);background:var(--surface-3);flex:1;height:8px;position:relative;overflow:hidden}.watch-bar-fill{border-radius:var(--r-full);background:linear-gradient(90deg, var(--brand-400), var(--brand-500));height:100%;transition:width .4s linear}.watch-bar-goal{background:var(--ok);opacity:.7;width:2px;position:absolute;top:-3px;bottom:-3px}.watch-done .watch-bar-fill{background:linear-gradient(90deg, #4ade80, var(--ok))}.heat{flex-direction:column;gap:8px;display:flex}.heat-scroll{padding-bottom:4px;overflow-x:auto}.heat-grid{grid-template-rows:repeat(7,1fr);grid-auto-flow:column;gap:3px;width:max-content;display:grid}.heat-cell{background:var(--heat-0);width:13px;height:13px;transition:transform var(--t-fast);border-radius:3.5px}.heat-cell:hover{transform:scale(1.35)}:root{--heat-0:var(--surface-3);--heat-1:#c9f0dc;--heat-2:#7fdcb0;--heat-3:#35bf87;--heat-4:#0e8f60}:root[data-theme=dark]{--heat-0:#262150;--heat-1:#17513c;--heat-2:#1e7a57;--heat-3:#2ca875;--heat-4:#4bdca0}.heat-1{background:var(--heat-1)}.heat-2{background:var(--heat-2)}.heat-3{background:var(--heat-3)}.heat-4{background:var(--heat-4)}.heat-months{width:max-content;color:var(--ink-3);grid-auto-flow:column;gap:3px;margin-bottom:2px;font-size:10.5px;font-weight:700;display:grid}.heat-legend{color:var(--ink-3);align-items:center;gap:5px;font-size:11.5px;display:flex}.heat-legend .heat-cell{width:11px;height:11px}.quiz-shell{max-width:780px;margin:0 auto}.quiz-bar{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--sh-sm);z-index:20;align-items:center;gap:14px;margin-bottom:18px;padding:14px 20px;display:flex;position:sticky;top:74px}.quiz-q{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-xl);box-shadow:var(--sh-sm);animation:rise var(--t-bounce) both;padding:28px}.quiz-q-text{white-space:pre-wrap;margin-bottom:20px;font-size:18px;font-weight:700;line-height:1.5}.quiz-opts{flex-direction:column;gap:11px;display:flex}.quiz-nav{justify-content:space-between;align-items:center;gap:12px;margin-top:22px;display:flex}.quiz-dots{flex-wrap:wrap;justify-content:center;gap:6px;display:flex}.quiz-dot{border:2px solid var(--line);background:var(--surface);width:30px;height:30px;color:var(--ink-3);transition:all var(--t-fast);border-radius:9px;font-size:12px;font-weight:800}.quiz-dot:hover{border-color:var(--brand-300)}.quiz-dot-ans{background:var(--brand-50);border-color:var(--brand-300);color:var(--brand-600)}.quiz-dot-on{border-color:var(--brand-500);background:var(--brand-500);color:#fff}.score-hero{text-align:center;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-xl);box-shadow:var(--sh-md);padding:40px 26px}.score-emoji{animation:pop var(--t-bounce) both;margin-bottom:10px;font-size:66px;line-height:1}.score-num{font-family:var(--font-display);font-variant-numeric:tabular-nums;font-size:58px;font-weight:600;line-height:1}.q-edit{border:2px solid var(--line);border-radius:var(--r-lg);background:var(--surface-2);flex-direction:column;gap:12px;padding:18px;display:flex}.q-edit-opt{align-items:center;gap:10px;display:flex}.q-edit-pick{border-radius:var(--r-full);border:2px solid var(--line);background:var(--surface);width:34px;height:34px;font-family:var(--font-display);color:var(--ink-3);transition:all var(--t-fast);flex-shrink:0;font-size:13px;font-weight:700}.q-edit-pick:hover{border-color:var(--ok)}.q-edit-pick.on{background:var(--ok);border-color:var(--ok);color:#fff}.game-grid{grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:18px;display:grid}.game-card{border-radius:var(--r-xl);border:2px solid var(--line);background:var(--surface);box-shadow:var(--sh-sm);transition:transform var(--t-bounce), box-shadow var(--t);position:relative;overflow:hidden}.game-card:hover{box-shadow:var(--sh-lg);transform:translateY(-6px)rotate(-.6deg)}.game-cover{aspect-ratio:16/10;background:linear-gradient(140deg, var(--g-a,var(--brand-300)), var(--g-b,var(--bubble)));place-items:center;font-size:52px;display:grid;position:relative}.game-soon{border-radius:var(--r-full);color:#4a3200;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#ffffffeb;padding:4px 11px;font-size:11px;font-weight:800;position:absolute;top:12px;right:12px}.game-info{padding:16px 18px}.game-frame{aspect-ratio:16/9;border-radius:var(--r-lg);background:#0b0a16;border:0;width:100%;display:block}.item-row{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);transition:all var(--t-fast);align-items:center;gap:15px;padding:16px 18px;display:flex}.item-row:hover{box-shadow:var(--sh-sm);border-color:var(--brand-200)}.item-icon{background:var(--surface-2);border-radius:14px;flex-shrink:0;place-items:center;width:44px;height:44px;font-size:21px;display:grid}.item-title{font-size:15px;font-weight:700}.item-sub{color:var(--ink-3);font-size:12.5px}.item-late{border-color:var(--bad)}.item-late .item-icon{background:var(--bad-soft)}.key-code{letter-spacing:.1em;border-radius:var(--r-sm);background:var(--surface-2);border:1px dashed var(--line);padding:6px 12px;font-family:ui-monospace,Cascadia Code,Consolas,monospace;font-size:15px;font-weight:700;display:inline-block}.key-used{opacity:.55;text-decoration:line-through}.mini-bar-lbl{justify-content:space-between;margin-bottom:5px;font-size:12px;font-weight:700;display:flex}.confetti{pointer-events:none;z-index:300;position:fixed;inset:0;overflow:hidden}.confetti i{width:9px;height:15px;animation:linear forwards fall;position:absolute;top:-20px}@keyframes fall{to{opacity:.2;transform:translateY(105vh)rotate(680deg)}}
