:root{--bg:#f4f6fb;--bg1:#eef2ff;--bg2:#f7f8fc;--card:#fff;--text:#1c2333;--text-soft:#5b6478;--line:#e6e9f2;--accent:#5b6cff;--accent-2:#8a5bff;--accent-soft:#eef0ff;--success:#1f9d6b;--success-bg:#e7f7ef;--warning:#c97a16;--warning-bg:#fdf2e1;--danger:#d6453d;--danger-bg:#fdecec;--xp:#f2a93b;--radius:20px;--radius-sm:13px;--shadow:0 14px 40px -18px rgba(35,45,90,.35);--shadow-sm:0 4px 14px -8px rgba(35,45,90,.4)}*{box-sizing:border-box}body,html{margin:0;padding:0}body{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;background:radial-gradient(1200px 600px at 80% -10%,var(--bg1),transparent),radial-gradient(900px 500px at -10% 110%,var(--bg2),transparent),var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;line-height:1.55;min-height:100vh}a{color:inherit;text-decoration:none}.wrap{max-width:1000px;margin:0 auto;padding:24px 18px 80px}.wrap-narrow{max-width:440px;margin:0 auto;padding:48px 18px}.topbar{position:-webkit-sticky;position:sticky;top:0;z-index:50;-webkit-backdrop-filter:saturate(180%) blur(10px);backdrop-filter:saturate(180%) blur(10px);background:hsla(0,0%,100%,.82);border-bottom:1px solid var(--line)}.topbar-inner{max-width:1000px;margin:0 auto;padding:12px 18px;display:flex;align-items:center;gap:14px}.brand{font-weight:800;gap:9px}.brand,.brand .logo{font-size:16px;display:flex;align-items:center}.brand .logo{width:30px;height:30px;border-radius:9px;background:linear-gradient(135deg,var(--accent),var(--accent-2));justify-content:center;color:#fff}.spacer{flex:1 1}.xp-pill{display:inline-flex;align-items:center;gap:6px;background:linear-gradient(135deg,#fff3df,#ffe6c2);color:#9a6612;font-weight:800;font-size:13px;padding:6px 12px;border-radius:999px;border:1px solid #f3d9ad;white-space:nowrap}.xp-pill .dot{width:8px;height:8px;border-radius:50%;background:var(--xp)}.muted{color:var(--text-soft)}.btn{border:none;cursor:pointer;font-family:inherit;font-weight:800;font-size:15px;color:#fff;background:linear-gradient(135deg,var(--accent),var(--accent-2));padding:12px 20px;border-radius:12px;box-shadow:var(--shadow-sm);transition:.1s;display:inline-flex;align-items:center;gap:8px;justify-content:center}.btn:hover{filter:brightness(1.05)}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-ghost{background:#fff;color:var(--text);border:1.5px solid var(--line);box-shadow:none}.btn-ghost:hover{border-color:#c7cdf0;background:#fbfbff;filter:none}.btn-sm{font-size:13px;padding:8px 14px;border-radius:10px}.btn-block{width:100%}.field{margin-bottom:14px}.field label{display:block;font-weight:700;font-size:14px;margin-bottom:6px}.input{width:100%;border:1.5px solid var(--line);border-radius:12px;padding:12px 14px;font-size:15px;font-family:inherit;color:var(--text);background:#fff;transition:.15s}.input:focus{outline:none;border-color:var(--accent)}.card{padding:26px}.auth-card,.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.auth-card{padding:30px}.auth-card h1{font-size:24px;margin:0 0 6px}.auth-card .sub{margin:0 0 22px}.auth-card .sub,.auth-foot{color:var(--text-soft);font-size:14px}.auth-foot{margin-top:18px;text-align:center}.auth-foot a{color:var(--accent);font-weight:700}.alert{padding:11px 14px;border-radius:11px;font-size:14px;margin-bottom:14px}.alert.err{background:var(--danger-bg);color:#9c2a24;border:1px solid #f3c9c5}.alert.ok{background:var(--success-bg);color:#136b48;border:1px solid #bfe7d4}.hub-head{margin:6px 0 22px}.hub-head h1{font-size:26px;margin:0 0 4px}.block-title{font-size:14px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:var(--accent);margin:26px 0 12px}.course-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));grid-gap:14px;gap:14px}.course-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius-sm);padding:16px 18px;box-shadow:var(--shadow-sm);display:flex;flex-direction:column;gap:8px;transition:.15s;min-height:128px}.course-card.built:hover{border-color:#c7cdf0;transform:translateY(-2px)}.course-card.soon{opacity:.62}.course-card .c-num{font-size:12px;font-weight:800;color:var(--text-soft)}.course-card .c-title{font-weight:800;font-size:15.5px;line-height:1.3}.course-card .c-src{font-size:12.5px;color:var(--text-soft)}.course-card .c-foot{margin-top:auto;display:flex;align-items:center;justify-content:space-between;gap:8px}.tag{font-size:11px;font-weight:800;padding:4px 9px;border-radius:999px}.tag.open{background:var(--accent-soft);color:var(--accent)}.tag.soon{background:#eef0f4;color:#8a93b5}.tag.done{background:var(--success-bg);color:var(--success)}.mini-bar{height:6px;background:#e7eaf5;border-radius:999px;overflow:hidden;flex:1 1}.mini-bar>div{height:100%;background:linear-gradient(90deg,var(--accent),var(--accent-2));border-radius:999px}.c-meta{display:flex;align-items:center;gap:8px;font-size:12px;font-weight:700;color:var(--text-soft)}.table{width:100%;border-collapse:collapse;background:#fff;border:1px solid var(--line);border-radius:var(--radius-sm);overflow:hidden}.table td,.table th{text-align:left;padding:11px 14px;font-size:14px;border-bottom:1px solid var(--line)}.table th{background:#f7f8fc;font-weight:800;font-size:12px;text-transform:uppercase;letter-spacing:.03em;color:var(--text-soft)}.table tr:last-child td{border-bottom:none}.table tr.clickable:hover{background:#fafbff;cursor:pointer}.answer-box{background:#fafbff;border:1px solid #e7eaf7;border-left:4px solid var(--accent);border-radius:11px;padding:12px 14px;margin-bottom:12px}.answer-box .q{font-weight:700;font-size:13.5px;margin-bottom:6px}.answer-box .a{font-size:14.5px;white-space:pre-wrap}.answer-box .meta{font-size:12px;color:var(--text-soft);margin-top:8px;display:flex;gap:12px}.pass{color:var(--success)}.fail,.pass{font-weight:800}.fail{color:var(--warning)}.iframe-course{width:100%;height:calc(100vh - 0px);border:none;display:block}.notice{background:#fff;border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:26px;max-width:680px;margin:40px auto}.notice code{background:#f0f2fa;padding:2px 6px;border-radius:6px;font-size:13px}.notice pre{background:#0f1430;color:#dbe2ff;padding:16px;border-radius:12px;overflow:auto;font-size:12.5px}