:root{--bg:#f7f6f2;--surface:#fff;--text:#2c2c2a;--text-muted:#6b6a65;--border:#e3e1d9;--accent:#1d9e75;--accent-text:#fff;--danger-bg:#fcebeb;--danger-text:#791f1f;--success-bg:#e1f5ee;--success-text:#085041;--radius:12px;--radius-sm:8px;font-family:system-ui,-apple-system,Apple SD Gothic Neo,Malgun Gothic,sans-serif;line-height:1.6}*{box-sizing:border-box}body{background:var(--bg);color:var(--text);margin:0}h1,h2{margin:0;font-weight:600}h1{font-size:1.5rem}h2{font-size:1.1rem}p{margin:0}.page{max-width:720px;margin:0 auto;padding:24px 16px 48px}.page--narrow{max-width:440px}.page--wide{max-width:1200px}.stack>*+*{margin-top:20px}.stack-sm>*+*{margin-top:10px}.row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.row>.input{flex:1;min-width:0}.topbar{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:12px;display:flex}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:20px}.muted{color:var(--text-muted)}.help{color:var(--text-muted);font-size:.875rem}.code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.8rem}.link{color:var(--accent);font-size:.9rem}.field label{margin-bottom:4px;font-weight:600;display:block}.field .help{margin-bottom:6px}.input{width:100%;font:inherit;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--text);padding:10px 12px}.input:focus{outline:2px solid var(--accent);outline-offset:-1px}.input--code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.85rem}textarea.input{resize:vertical}.btn{font:inherit;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--text);cursor:pointer;justify-content:center;align-items:center;padding:9px 16px;font-size:.95rem;text-decoration:none;display:inline-flex}.btn:hover{border-color:var(--text-muted)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn--primary{background:var(--accent);border-color:var(--accent);color:var(--accent-text)}.btn--ghost{background:0 0}.steps{border:1px solid var(--border);border-radius:var(--radius-sm);margin:0;padding:0;list-style:none}.step{justify-content:space-between;padding:8px 12px;font-size:.9rem;display:flex}.step+.step{border-top:1px solid var(--border)}.step__status{color:var(--text-muted)}.step[data-status=running] .step__status{color:var(--accent)}.step[data-status=done] .step__status{color:var(--success-text);font-weight:600}.step[data-status=failed] .step__status{color:var(--danger-text);font-weight:600}.alert{border-radius:var(--radius-sm);padding:14px 16px}.alert>*+*{margin-top:6px}.alert--error{background:var(--danger-bg);color:var(--danger-text)}.alert--success{background:var(--success-bg);color:var(--success-text)}.list{margin:0;padding:0;list-style:none}.list__item{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;padding:10px 0;display:flex}.list__item+.list__item{border-top:1px solid var(--border)}.wall{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:16px;display:grid}.qr{border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;width:220px;padding:8px}.qr--large{width:min(100%,80vh);margin-left:auto;margin-right:auto}.qr__canvas{width:100%;height:auto;image-rendering:pixelated;display:block}.field-error{color:var(--danger-text);margin-top:6px;font-size:.875rem}.field-error:empty{display:none}.welcome__teacher{text-align:center;font-size:.9rem}
