:root{--bg: #faf8f5;--surface: #ffffff;--text: #2b2b2b;--muted: #5a6772;--primary: #1565c0;--primary-dark: #0d47a1;--border: #e5e0d5;--danger-bg: #fdecea;--danger-fg: #b3261e;--line-spacing: 1.6;--radius: 10px}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:17px;line-height:var(--line-spacing);letter-spacing:.01em;text-align:left}h1,h2,h3{font-weight:600;line-height:1.3}a{color:var(--primary)}p{margin:0 0 .9em}.btn{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:0 20px;border:none;border-radius:var(--radius);background:var(--primary);color:#fff;font-size:1rem;font-family:inherit;cursor:pointer}.btn:hover{background:var(--primary-dark)}.btn:disabled{opacity:.6;cursor:default}.btn-link{min-height:44px;padding:0 8px;border:none;background:none;color:var(--primary);font:inherit;cursor:pointer;text-decoration:underline}:focus-visible{outline:3px solid var(--primary);outline-offset:2px}input,button{font-family:inherit}.muted{color:var(--muted)}.app-shell{display:flex;flex-direction:column;min-height:100%}.topbar{display:flex;align-items:center;gap:24px;padding:0 24px;min-height:56px;border-bottom:1px solid var(--border);background:var(--surface)}.topbar .brand{font-size:1.1rem;letter-spacing:.04em}.module-roadmap{display:flex;gap:14px;flex-wrap:wrap;flex:1}.module-roadmap .module{font-size:.9rem;color:var(--muted);opacity:.55}.module-roadmap .module.active{color:var(--text);opacity:1;font-weight:600;border-bottom:2px solid var(--primary)}.topbar-user{display:flex;align-items:center;gap:12px}.topbar-user .user-email{color:var(--muted);font-size:.9rem}.content{padding:28px 32px;max-width:900px;width:100%;margin:0 auto}.login-page{max-width:380px;margin:10vh auto;padding:0 20px}.login-form{display:flex;flex-direction:column;gap:16px}.field{display:flex;flex-direction:column;gap:6px}.field label{font-weight:600}.field input{min-height:44px;padding:0 12px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);font-size:1rem}.student-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:12px}.student-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 18px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface)}.student-row-main{display:flex;flex-direction:column;gap:2px}.student-code{font-weight:600;font-size:1.05rem}.student-age{color:var(--muted);font-size:.9rem}.session-code-card{margin-top:20px;padding:20px 24px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);text-align:center}.session-code{font-size:2.4rem;font-weight:700;letter-spacing:.12em;margin:8px 0}.risk-badge{display:inline-block;padding:4px 12px;border-radius:999px;font-size:.9rem;font-weight:600}.error-banner{padding:12px 16px;border-radius:var(--radius);background:var(--danger-bg);color:var(--danger-fg);border:1px solid #f3c6c2}.spinner{display:flex;align-items:center;gap:10px;color:var(--muted);padding:16px 0}.spinner-dot{width:16px;height:16px;border:3px solid var(--border);border-top-color:var(--primary);border-radius:50%;animation:spinner-rotate .8s linear infinite}@keyframes spinner-rotate{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.spinner-dot{animation:none}}.runner{max-width:640px;margin:8vh auto;padding:0 24px;text-align:center}
