:root{--bg:#f5f7fa;--fg:#17202a;--muted:#566573;--card:#fff;--line:#cfd8e0;--accent:#1f5fbf;--accent-fg:#fff;--ok:#1e7b46;--warn:#a66200;--bad:#b3261e;--c1:#1f5fbf;--c2:#b3261e;--c3:#1e7b46;--c4:#7b3fa0;--stage:#e9eef3;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark]{--bg:#10161c;--fg:#e6edf3;--muted:#9aa7b4;--card:#18212a;--line:#33414f;--accent:#6aa3ff;--accent-fg:#07111f;--ok:#5fd08b;--warn:#f0b34a;--bad:#ff8a80;--c1:#6aa3ff;--c2:#ff8a80;--c3:#5fd08b;--c4:#c79bff;--stage:#1c2631;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}@media (prefers-color-scheme:dark){:root[data-theme=system]{--bg:#10161c;--fg:#e6edf3;--muted:#9aa7b4;--card:#18212a;--line:#33414f;--accent:#6aa3ff;--accent-fg:#07111f;--ok:#5fd08b;--warn:#f0b34a;--bad:#ff8a80;--c1:#6aa3ff;--c2:#ff8a80;--c3:#5fd08b;--c4:#c79bff;--stage:#1c2631;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}html{font-size:16px}html[data-font=sm]{font-size:14px}html[data-font=lg]{font-size:18px}html[data-font=xl]{font-size:21px}html[data-font=xxl]{font-size:25px}*{box-sizing:border-box}body{background:var(--bg);color:var(--fg);margin:0;font-family:system-ui,-apple-system,Hiragino Sans,Noto Sans JP,sans-serif;line-height:1.55}a{color:var(--accent)}button,select,input{font:inherit;color:inherit}button{background:var(--card);border:1px solid var(--line);cursor:pointer;border-radius:8px;min-height:44px;padding:.45rem .8rem}button:hover:not(:disabled){border-color:var(--accent)}button[aria-pressed=true]{background:var(--accent);color:var(--accent-fg);border-color:var(--accent)}button:disabled{opacity:.5;cursor:not-allowed}button.danger{border-color:var(--bad);color:var(--bad);font-weight:600}button:focus-visible,input:focus-visible,select:focus-visible,a:focus-visible,summary:focus-visible{outline:3px solid var(--accent);outline-offset:2px}input[type=text],input[type=search],input[type=number],select{background:var(--card);border:1px solid var(--line);border-radius:8px;min-height:44px;padding:.4rem .6rem}input[type=search]{width:100%}input[type=range]{width:100%;min-height:32px}.sr-only{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}.skip{position:absolute;left:-999px}.skip:focus{background:var(--card);z-index:10;padding:.5rem;top:8px;left:8px}.topbar{padding:.5rem max(1rem, env(safe-area-inset-left));padding-top:calc(.5rem + env(safe-area-inset-top));border-bottom:1px solid var(--line);background:var(--card);z-index:5;justify-content:space-between;align-items:center;display:flex;position:sticky;top:0}.brand{font-weight:700;text-decoration:none}.page{max-width:1100px;padding:1rem max(1rem, env(safe-area-inset-left)) 3rem max(1rem, env(safe-area-inset-right));margin:0 auto}.hero h1{margin:.2rem 0}.counts strong{font-size:1.2em}.muted{color:var(--muted);font-size:.92em}.bad{color:var(--bad)}.row{align-items:center;gap:.5rem;display:flex}.wrap{flex-wrap:wrap}.filters{gap:.6rem;margin:1rem 0;display:grid}.cards{grid-template-columns:repeat(auto-fill,minmax(min(100%,17rem),1fr));gap:.75rem;margin:0;padding:0;list-style:none;display:grid}.card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:.8rem 1rem}.card.module a{color:inherit;text-decoration:none}.card.module .id{color:var(--muted);font-size:.85em}.card.st-planned{opacity:.8;border-style:dashed}.card p{margin:.3rem 0}.badge{border:1px solid var(--line);background:var(--card);border-radius:999px;padding:.1rem .6rem;font-size:.82em;display:inline-block}.kind-simulation{border-color:var(--c1)}.kind-toy-learning{border-color:var(--c3)}.kind-concept{border-color:var(--c4);border-style:dashed}.kind-trace-replay{border-color:var(--warn);border-width:2px}.status-implemented,.status-tested{border-color:var(--ok)}.status-planned{color:var(--muted);border-style:dashed}.chip{border:1px solid var(--line);background:var(--card);border-radius:999px;padding:.3rem .7rem;text-decoration:none;display:inline-block}.fav{min-height:36px;padding:.1rem .6rem}fieldset{border:1px solid var(--line);border-radius:8px;margin:.6rem 0}.filebtn{border:1px solid var(--line);cursor:pointer;background:var(--card);border-radius:8px;align-items:center;min-height:44px;padding:.45rem .8rem;display:inline-flex}.filebtn input{margin-left:.5rem}.module{padding:0 max(.75rem, env(safe-area-inset-left)) calc(2rem + env(safe-area-inset-bottom)) max(.75rem, env(safe-area-inset-right));max-width:1800px;margin:0 auto;container-type:inline-size}.mhead{padding:.5rem 0}.mhead h1{margin:.2rem 0;font-size:1.25rem}.layout{grid-template-columns:1fr;gap:.75rem;display:grid}.stage-box{background:var(--stage);border:1px solid var(--line);touch-action:none;border-radius:12px;height:min(62vh,520px);min-height:260px;position:relative;overflow:hidden}.stage-box canvas{display:block}.stage-fallback{flex-direction:column;justify-content:center;align-items:flex-start;gap:.5rem;height:100%;padding:1rem;display:flex}.controls{flex-wrap:wrap;align-items:center;gap:.5rem;margin-top:.5rem;display:flex}.state{color:var(--muted);font-variant-numeric:tabular-nums;margin-left:auto}.msg{min-height:1.5em;color:var(--muted);margin:.3rem 0}details{background:var(--card);border:1px solid var(--line);border-radius:12px;margin-bottom:.6rem;padding:.5rem .8rem}summary{cursor:pointer;align-items:center;min-height:32px;font-weight:600;display:flex}@container (width>=46rem){.layout{grid-template-columns:minmax(0,1.5fr) minmax(0,1fr)}.col-stage{grid-area:1/1/span 2}.col-params,.col-info{grid-column:2}}@container (width>=72rem){.layout{grid-template-columns:minmax(16rem,1fr) minmax(0,2.2fr) minmax(18rem,1.2fr)}.col-params{grid-area:1/1}.col-stage{grid-area:1/2}.col-info{grid-area:1/3}.stage-box{height:min(72vh,680px)}}.col-stage{order:-1}.stage-box{height:48vh}@container (width>=46rem){.col-stage{order:0}.stage-box{height:min(62vh,520px)}}@container (width>=72rem){.stage-box{height:min(72vh,680px)}}.params{gap:.6rem;margin:.6rem 0;display:grid}.param{gap:.2rem;display:grid}.param-num{grid-template-columns:1fr 6.5rem;align-items:center;gap:.5rem;display:grid}.presets{gap:.4rem;margin:.5rem 0;display:grid}.presets button{text-align:left}.preset-failure{border-left:4px solid var(--bad)}.preset-baseline{border-left:4px solid var(--ok)}.preset-compare{border-left:4px solid var(--c1)}.metrics{gap:.4rem;margin:0;padding:0;list-style:none;display:grid}.metrics li{border-left:4px solid var(--line);background:var(--bg);border-radius:6px;gap:.1rem;padding:.4rem .6rem;display:grid}.metrics .m-ok{border-left-color:var(--ok)}.metrics .m-warn{border-left-color:var(--warn)}.metrics .m-fail{border-left-color:var(--bad)}.m-label{color:var(--muted);font-size:.88em}.m-value{word-break:break-word;font-weight:600}.m-note{color:var(--muted);font-size:.82em}.prov{grid-template-columns:7rem 1fr;gap:.3rem .6rem;margin:0;font-size:.92em;display:grid}.prov dt{color:var(--muted)}.prov dd{margin:0}.label-overlay{pointer-events:none;position:absolute;inset:0;overflow:hidden}.tag3d{background:var(--card);color:var(--fg);border:1px solid var(--line);white-space:nowrap;border-radius:4px;padding:0 .3rem;font-size:11px;position:absolute;top:0;left:0}.tag3d.region{font-weight:700}.plot{margin:.5rem 0}.plot svg{width:100%;height:auto}.plot-bg{fill:var(--bg);stroke:var(--line)}.plot-grid{stroke:var(--line);stroke-dasharray:2 3}.plot-ref{stroke:var(--muted);stroke-dasharray:4 2}.plot-tick,.plot-label{fill:var(--muted);font-size:10px}.plot-legend{color:var(--muted);flex-wrap:wrap;gap:1rem;font-size:.85em;display:flex}.plot-legend svg{vertical-align:middle;width:28px;margin-right:.3rem}.pipeline{gap:.3rem;padding-left:1.2rem;display:grid}.pipeline li.on{border-left:4px solid var(--accent);padding-left:.4rem;font-weight:700}.tbl{border-collapse:collapse;width:100%;font-size:.88em;display:block;overflow-x:auto}.tbl th,.tbl td{border:1px solid var(--line);text-align:left;padding:.25rem .4rem}.list{gap:.4rem;padding:0;list-style:none;display:grid}.list li{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}@media (prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important;animation:none!important}}:root[data-motion=on] *{transition:none!important;animation:none!important}
