:root{--bg: #f6f7fb;--surface: #fff;--ink: #111827;--muted: #6b7280;--border: #e5e7eb;--accent: #4f46e5;--accent-dark: #4338ca;--accent-soft: #eef2ff;--green: #16a34a;--red: #dc2626;--amber: #d97706;--radius: 12px;--shadow: 0 1px 3px rgba(0,0,0,.06), 0 4px 14px rgba(0,0,0,.05);--sans: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--mono: "SF Mono", "JetBrains Mono", Monaco, monospace}*{margin:0;padding:0;box-sizing:border-box}body{font-family:var(--sans);background:var(--bg);color:var(--ink);line-height:1.55;-webkit-font-smoothing:antialiased}a{color:var(--accent-dark);text-decoration:none}button{font-family:inherit;cursor:pointer}input,textarea,select{width:100%;padding:.65rem .85rem;border:1px solid var(--border);border-radius:10px;font:inherit;font-size:.95rem;background:var(--surface)}input:focus,textarea:focus,select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}label{display:block;font-size:.78rem;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;margin-bottom:.35rem}.btn{display:inline-flex;align-items:center;gap:.45rem;background:var(--accent);color:#fff;border:none;padding:.7rem 1.3rem;border-radius:10px;font-size:.92rem;font-weight:600;transition:.15s}.btn:hover{background:var(--accent-dark)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.secondary{background:var(--surface);color:var(--ink);border:1px solid var(--border)}.btn.secondary:hover{border-color:var(--muted)}.btn.danger{background:var(--red)}.btn.small{padding:.4rem .8rem;font-size:.8rem;border-radius:8px}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:1.25rem}.muted{color:var(--muted)}.small{font-size:.82rem}.mono{font-family:var(--mono)}.error-text{color:var(--red);font-size:.85rem;margin-top:.5rem}.ok-text{color:var(--green);font-size:.85rem;margin-top:.5rem}.topbar{background:var(--surface);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:50}.topbar .inner{max-width:1100px;margin:0 auto;padding:0 1.25rem;height:58px;display:flex;align-items:center;gap:1.5rem}.brand{font-weight:800;font-size:1.05rem;display:flex;align-items:center;gap:.45rem;color:var(--ink)}.brand .dot{width:9px;height:9px;border-radius:50%;background:var(--accent)}.nav{display:flex;gap:.25rem}.nav a{padding:.45rem .8rem;border-radius:8px;font-size:.9rem;font-weight:500;color:var(--muted)}.nav a:hover{background:var(--bg);color:var(--ink)}.nav a.router-link-active{background:var(--accent-soft);color:var(--accent-dark);font-weight:600}.spacer{flex:1}.page{max-width:1100px;margin:0 auto;padding:1.75rem 1.25rem 4rem}.page h1{font-size:1.5rem;letter-spacing:-.02em;margin-bottom:.4rem}.page .sub{color:var(--muted);margin-bottom:1.5rem}.login-wrap{min-height:100vh;display:grid;place-items:center;background:linear-gradient(160deg,#eef2ff,#f6f7fb 60%)}.login-card{background:var(--surface);border:1px solid var(--border);border-radius:16px;box-shadow:var(--shadow);padding:2.2rem;width:360px}.login-logo{font-size:2.6rem;text-align:center}.login-card h1{text-align:center;font-size:1.2rem;margin:.5rem 0 .3rem}.login-card p{text-align:center}.login-card .btn{width:100%;margin-top:1rem}.course-row{display:flex;justify-content:space-between;align-items:center;gap:1rem;padding:1rem 0;border-bottom:1px solid var(--border);flex-wrap:wrap}.course-row:last-child{border-bottom:none}.course-row .title{font-weight:600;font-size:1rem}.badge{display:inline-flex;padding:.18rem .55rem;border-radius:999px;font-size:.72rem;font-weight:700;text-transform:uppercase}.badge.done{background:#dcfce7;color:#15803d}.badge.generating{background:#fef3c7;color:#b45309}.badge.error{background:#fee2e2;color:#b91c1c}.course-layout{display:grid;grid-template-columns:300px 1fr;gap:1.25rem;align-items:start}.tree{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1rem;position:sticky;top:74px;max-height:calc(100vh - 90px);overflow-y:auto}.tree h4{font-size:.75rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:.9rem 0 .35rem}.tree h4:first-child{margin-top:0}.tree .l{padding:.35rem .6rem;border-radius:7px;font-size:.88rem;cursor:pointer;color:var(--ink);display:flex;gap:.5rem;align-items:baseline}.tree .l:hover{background:var(--bg)}.tree .l.active{background:var(--accent-soft);color:var(--accent-dark);font-weight:600}.tree .l .n{color:var(--muted);font-size:.72rem;font-family:var(--mono)}.tree .c{padding:.3rem .6rem .3rem 1.4rem;border-radius:7px;font-size:.85rem;cursor:pointer;color:var(--muted)}.tree .c:hover{background:var(--bg);color:var(--ink)}.tree .c.active{background:var(--accent-soft);color:var(--accent-dark);font-weight:600}.content .card h2{font-size:1.15rem;margin-bottom:.25rem}.content .rubric{margin:1rem 0}.content .rubric li{font-size:.9rem;margin:.25rem 0}.prompt-box{background:var(--accent-soft);border:1px solid #c7d2fe;border-radius:10px;padding:.8rem 1rem;margin-top:1rem}.prompt-box .lbl{font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--accent-dark);margin-bottom:.3rem}.prompt-box ul{margin-left:1.1rem}.prompt-box li{font-size:.88rem;margin:.2rem 0}.md{margin-top:1rem;font-size:.95rem}.md h1,.md h2,.md h3{margin:1rem 0 .4rem;letter-spacing:-.01em}.md p{margin:.5rem 0}.md ul,.md ol{margin:.5rem 0 .5rem 1.4rem}.md code{background:#f1f5f9;padding:.12rem .35rem;border-radius:5px;font-family:var(--mono);font-size:.85em}.md pre{background:#0f172a;color:#e2e8f0;padding:1rem;border-radius:10px;overflow-x:auto;margin:.75rem 0}.md pre code{background:none;padding:0;color:inherit}.md blockquote{border-left:3px solid var(--border);padding-left:1rem;color:var(--muted);margin:.75rem 0}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.progress-line{display:flex;align-items:center;gap:.6rem;color:var(--muted);font-size:.9rem;margin-top:1rem}.spinner{width:16px;height:16px;border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media(max-width:800px){.course-layout{grid-template-columns:1fr}.tree{position:static;max-height:none}.form-grid{grid-template-columns:1fr}}
