:root{--bg:#f8f7f4;--panel:#fff;--border:#e3e0d8;--text:#212529;--muted:#6c757d;--accent:#1864ab;--accent-soft:#e7f1fb;--ok:#2f9e44;--warn:#e67700;--bad:#e03131;--radius:10px;--font:system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--mono:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace}*{box-sizing:border-box}html,body{background:var(--bg);color:var(--text);font-family:var(--font);margin:0;line-height:1.45}code,.mono{font-family:var(--mono);font-size:.92em}a{color:var(--accent)}.wrap{max-width:1240px;margin:0 auto;padding:0 1rem}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.site-header{background:var(--panel);border-bottom:1px solid var(--border);padding:1.25rem 0}.header-row{justify-content:space-between;align-items:flex-start;gap:1rem;display:flex}.site-header h1{letter-spacing:-.01em;margin:0 0 .25rem;font-size:1.5rem}.tagline{color:var(--muted);max-width:60ch;margin:0}.repo-link{white-space:nowrap;border:1px solid var(--border);border-radius:999px;padding:.4rem .9rem;font-weight:600;text-decoration:none}.repo-link:hover{background:var(--accent-soft)}.notice{border-radius:var(--radius);background:#fff8e6;border:1px solid #f3d9a4;margin:1rem 0;padding:.75rem 1rem;font-size:.95rem}.layout{grid-template-columns:minmax(0,2fr) minmax(300px,1fr);grid-template-areas:"stage controls""sweep sweep";align-items:start;gap:1rem;padding-bottom:2rem;display:grid}.stage{grid-area:stage}.controls{grid-area:controls}.sweep{grid-area:sweep}@media (max-width:900px){.layout{grid-template-columns:1fr;grid-template-areas:"stage""controls""sweep"}}.panel{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:1rem}.panel h2{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:0 0 .6rem;font-size:1rem}.panel h2+h2,.state+h2,.rules+h2,form+h2{margin-top:1.25rem}canvas#course{border:1px solid var(--border);background:#f4f1ea;border-radius:6px;width:100%;display:block}.legend{color:var(--muted);flex-wrap:wrap;gap:.4rem 1rem;margin:.6rem 0;font-size:.85rem;display:flex}.swatch{vertical-align:-.05em;border-radius:3px;width:.8em;height:.8em;margin-right:.35em;display:inline-block}.swatch.ring{background:0 0;border:2px solid;border-radius:50%}.transport{gap:.5rem;display:grid}.scrub input[type=range]{width:100%}.transport-buttons{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.clock{font-family:var(--mono);color:var(--muted);margin-left:auto}button,select,input[type=number]{font:inherit;border:1px solid var(--border);color:var(--text);background:#fff;border-radius:7px;padding:.45rem .7rem}button{cursor:pointer}button:hover:not(:disabled){background:var(--accent-soft);border-color:var(--accent)}button:disabled{cursor:not-allowed;opacity:.55}button.primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}button.primary:hover:not(:disabled){background:#145a92}button[aria-pressed=true]{background:var(--accent-soft);border-color:var(--accent)}:focus-visible{outline-offset:2px;outline:3px solid #74c0fc}.form-grid{gap:.6rem;display:grid}.form-grid label,.sweep-form label{color:var(--muted);gap:.25rem;font-size:.9rem;display:grid}.help{color:var(--muted);margin:0;font-size:.85rem}.state{gap:.3rem;margin:0;display:grid}.state>div{border-bottom:1px dashed var(--border);justify-content:space-between;gap:1rem;padding-bottom:.25rem;display:flex}.state dt{color:var(--muted)}.state dd{font-family:var(--mono);text-align:right;overflow-wrap:anywhere;margin:0}.state.compact dd{font-size:.85rem}dd.blocked{color:var(--bad);font-weight:600}dd.caution{color:var(--warn)}dd.ok{color:var(--ok)}.rules{border-collapse:collapse;width:100%;font-size:.85rem}.rules th,.rules td{text-align:left;border-bottom:1px solid var(--border);vertical-align:top;padding:.3rem .4rem}.rules th{color:var(--muted);font-weight:600}.rules tr.active td{background:var(--accent-soft);font-weight:600}.result{margin-top:1.25rem}.sweep-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:1rem;display:flex}.sweep-form{flex-wrap:wrap;align-items:flex-end;gap:.75rem;display:flex}.sweep-form input[type=number]{width:5.5rem}.sweep-form label:has(input[type=checkbox]){align-items:center;gap:.4rem;display:flex}progress{width:100%;margin:.75rem 0 0}.sweep-output{margin-top:.75rem;overflow-x:auto}.sweep-output table{border-collapse:collapse;width:100%;font-size:.9rem}.sweep-output th,.sweep-output td{text-align:left;border-bottom:1px solid var(--border);padding:.4rem .6rem}.sweep-output th{color:var(--muted);font-weight:600}.sweep-output td.num{font-family:var(--mono);text-align:right}.sweep-output .failures{margin:.75rem 0 0;font-size:.9rem}.sweep-output .failures button{margin:.1rem;padding:.15rem .5rem;font-size:.85rem}.site-footer{color:var(--muted);border-top:1px solid var(--border);padding:1rem 1rem 2rem;font-size:.85rem}.site-footer p{margin:.25rem 0}.loading{z-index:10;background:#f8f7f4eb;place-items:center;display:grid;position:fixed;inset:0}body[data-state=ready] .loading{display:none}.loading-card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);text-align:center;max-width:32rem;padding:1.5rem 2rem}.loading-card h2{margin:0 0 .5rem;font-size:1.1rem}.loading-card p{color:var(--muted);margin:0}body[data-state=error] .loading-card{border-color:var(--bad)}
