fractured-light-voronoi-l87f/exploration.html

73 lines
No EOL
36 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Fractured Light Voronoi — exploration</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { background: #0a0a0f; color: #3a3a4a; font-family: ui-monospace, monospace; overflow: hidden; }
#grid { padding: 20px; font-size: 12px; line-height: 1.4; white-space: pre; }
.c { display: inline-block; transition: all 0.3s; }
.c.active { color: #fde68a; text-shadow: 0 0 6px rgba(253,230,138,0.5); }
.c.strong { color: #34d399; text-shadow: 0 0 10px rgba(52,211,153,0.6); font-weight: bold; }
.c.dead { color: #1a1a2a; }
#info { position: fixed; bottom: 10px; left: 20px; color: #3a3a4a; font-size: 11px; }
#controls { position: fixed; top: 10px; right: 20px; color: #666; font-size: 11px; }
#controls span { cursor: pointer; margin-left: 12px; color: #fde68a; }
</style>
</head>
<body>
<div id="grid"></div>
<div id="info">neurameba · physarum exploration</div>
<div id="controls"><span id="play-btn">play</span><span id="reset-btn">reset</span></div>
<script>
const text = "# Plugin Development\n\nmotd is API-first. Every feature is an API endpoint. That means you can build anything on top of it — custom clients, bots, bridges, tools.\n\nPlugins run on your machine, not on the server. There's no plugin registry, no sandboxing, no approval process. You call the API. That's it.\n\n## Authentication\n\n1. Register or log in via the API\n2. Store the returned token\n3. Send it with every request as `Authorization: Bearer <token>`\n\n```bash\n# Get a token\nTOKEN=$(curl -s -X POST http://localhost:3006/api/auth/login \\\n -H \"Content-Type: application/json\" \\\n -d '{\"username\":\"alice\",\"password\":\"hunter2pwd\"}' | jq -r '.data.token')\n\necho $TOKEN\n```\n\nTokens expire after 7 days. Re-authenticate when needed.\n\n## Example: Fetch Your Feed\n\n```bash\n#!/bin/bash\nTOKEN=\"your-token-here\"\n\ncurl -s http://localhost:3006/api/posts/feed \\\n -H \"Authorization: Bearer $TOKEN\" | jq '.data.posts[] | {user: .username, text: .content, id: .id}'\n```\n\nOutput:\n```json\n{ \"user\": \"alice\", \"text\": \"just shipped the wasm compiler [rust] [wasm]\", \"id\": \"a3kf9x\" }\n{ \"user\": \"bob\", \"text\": \"working on a new side project [coding]\", \"id\": \"c9xk4m\" }\n```\n\n## Example: Post From the Command Line\n\n```bash\n#!/bin/bash\nTOKEN=\"your-token-here\"\n\ncurl -s -X POST http://localhost:3006/api/posts \\\n -H \"Authorization: Bearer $TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d \"{\\\"content\\\":\\\"$1\\\"}\" | jq '.data.id'\n```\n\nUsage:\n```bash\n./motd-post.sh \"automated post from my build pipeline [ci]\"\n```\n\n## Example: Upload and Post an Image\n\n```bash\n#!/bin/bash\nTOKEN=\"your-token-here\"\nIMAGE=\"$1\"\nCAPTION=\"$2\"\n\n# Upload the image\nMEDIA_ID=$(curl -s -X POST http://localhost:3006/api/media/upload \\\n -H \"Authorization: Bearer $TOKEN\" \\\n -F \"file=@$IMAGE\" | jq -r '.data.media_id')\n\n# Post with attachment\ncurl -s -X POST http://localhost:3006/api/posts \\\n -H \"Authorization: Bearer $TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d \"{\\\"content\\\":\\\"$CAPTION /attach $MEDIA_ID\\\"}\" | jq '.'\n```\n\nUsage:\n```bash\n./motd-upload.sh screenshot.png \"new feature landed [showcase]\"\n```\n\n## Example: GitHub Bridge (Concept)\n\nSync your GitHub activity to motd. Watch for push events, post summaries.\n\n```bash\n#!/bin/bash\nTOKEN=\"your-token-here\"\n\n# Poll GitHub events (simplified)\nLATEST=$(curl -s https://api.github.com/users/alice/events?per_page=1 | jq -r '.[0]')\nTYPE=$(echo $LATEST | jq -r '.type')\nREPO=$(echo $LATEST | jq -r '.repo.name')\n\nif [ \"$TYPE\" = \"PushEvent\" ]; then\n curl -s -X POST http://localhost:3006/api/posts \\\n -H \"Authorization: Bearer $TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d \"{\\\"content\\\":\\\"pushed to $REPO [coding] [github]\\\"}\"\nfi\n```\n\n## Example: Bookmark Monitor\n\nWatch your bookmarked tags for new posts.\n\n```bash\n#!/bin/bash\nTOKEN=\"your-token-here\"\n\n# Get bookmarked tags\nTAGS=$(curl -s \"http://localhost:3006/api/bookmarks?type=tag\" \\\n -H \"Authorization: Bearer $TOKEN\" | jq -r '.data.bookmarks[].id')\n\nfor TAG in $TAGS; do\n echo \"--- [$TAG] ---\"\n curl -s \"http://localhost:3006/api/posts/search?q=$TAG\" \\\n -H \"Authorization: Bearer $TOKEN\" | jq '.data.posts[:3][] | \"\\(.username): \\(.content)\"'\ndone\n```\n\n## Media Converters\n\nmotd accepts PNG, MP3, and MP4 only. Build converter plugins for other formats:\n\n```bash\n# JPG to PNG before upload\nconvert photo.jpg photo.png && ./motd-upload.sh photo.png \"converted from jpg\"\n\n# WAV to MP3 before upload\nffmpeg -i recording.wav -q:a 2 recording.mp3\n```\n\n## Ideas\n\nBuilding something? Post about it with the [ideas] tag. Found a bug? Use [bugs]. The community is on motd itself.\n\nSee `/read api` for the complete endpoint reference.\n";
const passes = [{"t":0,"r":99,"c":0,"a":"extend","s":0.32695870322846005,"ps":9,"e":70.88596873807937,"pr":1.1},{"t":0,"r":124,"c":0,"a":"died","s":0,"ps":8,"e":100,"pr":1},{"t":0,"r":64,"c":12,"a":"extend","s":0.48929364172381457,"ps":9,"e":71.79504439365336,"pr":1.1},{"t":0,"r":65,"c":10,"a":"extend","s":0.3621490656336644,"ps":9,"e":71.08303476754853,"pr":1.1},{"t":0,"r":101,"c":0,"a":"died","s":0,"ps":8,"e":100,"pr":1},{"t":1,"r":99,"c":0,"a":"extend","s":0.3393516920947804,"ps":8,"e":50.680547592386326,"pr":1.05},{"t":1,"r":64,"c":12,"a":"extend","s":0.47285995292332644,"ps":8,"e":52.064546811927976,"pr":1.05},{"t":1,"r":65,"c":10,"a":"extend","s":0.4117822705965724,"ps":9,"e":51.11910505262477,"pr":1.1},{"t":1,"r":64,"c":11,"a":"extend","s":0.37954324229985253,"ps":5,"e":23.138955474975177,"pr":1.2000000000000002},{"t":1,"r":65,"c":9,"a":"hold","s":0.23422896517890843,"ps":5,"e":31.58798947895206,"pr":1.2000000000000002},{"t":1,"r":66,"c":10,"a":"hold","s":0.15796073842488123,"ps":5,"e":30.977843664919845,"pr":1.2000000000000002},{"t":2,"r":99,"c":0,"a":"hold","s":0.32695870322846005,"ps":7,"e":52.24621721821401,"pr":1},{"t":2,"r":64,"c":12,"a":"extend","s":0.48929364172381457,"ps":7,"e":38.450227162002946,"pr":1},{"t":2,"r":65,"c":10,"a":"extend","s":0.4117822705965724,"ps":8,"e":37.24935425217814,"pr":1.05},{"t":2,"r":64,"c":11,"a":"extend","s":0.43335289629606755,"ps":5,"e":18.099045051740603,"pr":1.2000000000000002},{"t":2,"r":65,"c":9,"a":"hold","s":0.3046767728810015,"ps":5,"e":33.27540366200007,"pr":1.2000000000000002},{"t":2,"r":66,"c":10,"a":"hold","s":0.12714620065449453,"ps":4,"e":31.3950132701558,"pr":1.1500000000000001},{"t":2,"r":98,"c":0,"a":"hold","s":0.1279247385838446,"ps":5,"e":21.993632591122037,"pr":1.1500000000000001},{"t":2,"r":65,"c":12,"a":"hold","s":0.1742081894929825,"ps":5,"e":22.95704272105585,"pr":1.1500000000000001},{"t":2,"r":64,"c":10,"a":"hold","s":0.22491956805904456,"ps":5,"e":22.957544424168688,"pr":1.2000000000000002},{"t":3,"r":99,"c":0,"a":"extend","s":0.3842163772834482,"ps":7,"e":37.98896376553711,"pr":1},{"t":3,"r":64,"c":12,"a":"extend","s":0.49359019077407207,"ps":7,"e":28.94426408173686,"pr":1},{"t":3,"r":65,"c":10,"a":"hold","s":0.3621490656336644,"ps":8,"e":38.94654677724745,"pr":1.05},{"t":3,"r":64,"c":11,"a":"extend","s":0.43335289629606755,"ps":4,"e":30.74638885239448,"pr":1.1500000000000001},{"t":3,"r":65,"c":9,"a":"retracted","s":0.3046767728810015,"ps":4,"e":35.112817845048085,"pr":1.1500000000000001},{"t":3,"r":66,"c":10,"a":"retracted","s":0.15796073842488123,"ps":4,"e":32.05869917755485,"pr":1.1},{"t":3,"r":98,"c":0,"a":"hold","s":0.12037496213574304,"ps":5,"e":22.20663228820798,"pr":1.1500000000000001},{"t":3,"r":65,"c":12,"a":"hold","s":0.17523665602473548,"ps":4,"e":23.758935969253734,"pr":1.1},{"t":3,"r":64,"c":13,"a":"hold","s":0.24336969778385986,"ps":5,"e":17.675626365986428,"pr":1.1},{"t":4,"r":99,"c":0,"a":"hold","s":0.3842163772834482,"ps":6,"e":40.162694783804696,"pr":0.95},{"t":4,"r":64,"c":12,"a":"extend","s":0.49359019077407207,"ps":6,"e":22.395089925550604,"pr":0.95},{"t":4,"r":65,"c":10,"a":"hold","s":0.3621490656336644,"ps":7,"e":40.793739302316766,"pr":1},{"t":4,"r":64,"c":11,"a":"hold","s":0.37954324229985253,"ps":4,"e":33.182734790793305,"pr":1.1500000000000001},{"t":4,"r":98,"c":0,"a":"retracted","s":0.12037496213574304,"ps":4,"e":22.569631985293924,"pr":1.1},{"t":4,"r":65,"c":12,"a":"retracted","s":0.1742081894929825,"ps":4,"e":24.552601485197595,"pr":1.05},{"t":4,"r":64,"c":13,"a":"hold","s":0.3014428659972955,"ps":5,"e":19.33716929396479,"pr":1.1},{"t":4,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":5,"e":13.546131954818263,"pr":1.1},{"t":4,"r":99,"c":1,"a":"hold","s":0.2864801951633048,"ps":5,"e":17.822826032250912,"pr":1.1},{"t":4,"r":65,"c":11,"a":"hold","s":0.23212046034915135,"ps":5,"e":14.28398747667656,"pr":1.2500000000000002},{"t":5,"r":99,"c":0,"a":"hold","s":0.38740145353253613,"ps":6,"e":42.36190641206498,"pr":0.95},{"t":5,"r":64,"c":12,"a":"hold","s":0.2563798045349805,"ps":7,"e":23.39612836183045,"pr":1.05},{"t":5,"r":65,"c":10,"a":"retracted","s":0.3491402493997718,"ps":6,"e":56.970848774191495,"pr":0.95},{"t":5,"r":64,"c":11,"a":"hold","s":0.37954324229985253,"ps":4,"e":35.61908072919213,"pr":1.1},{"t":5,"r":64,"c":13,"a":"retracted","s":0.3014428659972955,"ps":4,"e":21.148712221943157,"pr":1.05},{"t":5,"r":100,"c":0,"a":"extend","s":0.44580318692721366,"ps":4,"e":11.558790215165178,"pr":1.05},{"t":5,"r":99,"c":1,"a":"hold","s":0.3597260466847821,"ps":5,"e":19.95063440572917,"pr":1.1},{"t":6,"r":99,"c":0,"a":"retracted","s":0.38740145353253613,"ps":5,"e":44.711118040325275,"pr":0.8999999999999999},{"t":6,"r":64,"c":12,"a":"hold","s":0.27429313826417984,"ps":7,"e":24.540473467943887,"pr":1.05},{"t":6,"r":64,"c":11,"a":"retracted","s":0.37954324229985253,"ps":4,"e":38.05542666759095,"pr":1.05},{"t":6,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":10.345595975772754,"pr":1},{"t":6,"r":99,"c":1,"a":"retracted","s":0.3597260466847821,"ps":4,"e":22.228442779207427,"pr":1.05},{"t":7,"r":64,"c":12,"a":"retracted","s":0.27429313826417984,"ps":6,"e":25.834818574057326,"pr":1},{"t":7,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":9.496360008198057,"pr":0.95},{"t":7,"r":100,"c":1,"a":"hold","s":0.27821653597618684,"ps":5,"e":5.909559134569246,"pr":1.1},{"t":8,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":8.901894830895769,"pr":0.8999999999999999},{"t":8,"r":100,"c":1,"a":"hold","s":0.24043872369051847,"ps":4,"e":7.233068924093394,"pr":1.05},{"t":9,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":8.485769206784168,"pr":0.8499999999999999},{"t":9,"r":100,"c":1,"a":"retracted","s":0.27821653597618684,"ps":4,"e":8.85880121190289,"pr":1},{"t":10,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":8.194481269906047,"pr":0.7999999999999998},{"t":10,"r":99,"c":0,"a":"hold","s":0.14774209187365225,"ps":5,"e":4.068694966468147,"pr":0.9499999999999998},{"t":15,"r":99,"c":0,"a":"hold","s":0.19897096555463167,"ps":5,"e":4.132338565448817,"pr":0.6999999999999996},{"t":16,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":7.59477213099057,"pr":0.4999999999999996},{"t":16,"r":99,"c":0,"a":"hold","s":0.191367549769452,"ps":4,"e":5.063278963604433,"pr":0.6499999999999996},{"t":17,"r":100,"c":2,"a":"extend","s":0.42167488062011416,"ps":5,"e":3.549414281671128,"pr":0.8499999999999996},{"t":18,"r":99,"c":0,"a":"extend","s":0.29432185320779697,"ps":4,"e":3.379750328057736,"pr":0.9499999999999996},{"t":18,"r":97,"c":1,"a":"hold","s":0.21883117534468843,"ps":5,"e":1.9086434584332483,"pr":0.9999999999999996},{"t":19,"r":98,"c":0,"a":"hold","s":0.2116774131498929,"ps":5,"e":2.3918837315096013,"pr":1.0499999999999996},{"t":20,"r":100,"c":2,"a":"extend","s":0.2777549840818674,"ps":4,"e":4.098952419494167,"pr":0.7499999999999996},{"t":20,"r":98,"c":0,"a":"hold","s":0.19692133740302897,"ps":4,"e":3.367254430733833,"pr":0.9999999999999996},{"t":21,"r":99,"c":1,"a":"extend","s":0.339183430450253,"ps":4,"e":4.734359625946691,"pr":0.5499999999999994},{"t":22,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":7.524216950506302,"pr":0.3},{"t":22,"r":100,"c":1,"a":"hold","s":0.2994015075694893,"ps":4,"e":7.868954825250073,"pr":0.4499999999999995},{"t":22,"r":99,"c":1,"a":"extend","s":0.339183430450253,"ps":4,"e":4.7934789486841005,"pr":0.4999999999999994},{"t":23,"r":100,"c":1,"a":"retracted","s":0.2994015075694893,"ps":4,"e":9.664166885805987,"pr":0.3999999999999995},{"t":23,"r":98,"c":2,"a":"retracted","s":0.25235054266849255,"ps":4,"e":6.494988135881101,"pr":0.7499999999999993},{"t":23,"r":98,"c":1,"a":"hold","s":0.29429631082578345,"ps":5,"e":3.6587186074708824,"pr":0.5999999999999994},{"t":25,"r":99,"c":0,"a":"hold","s":0.321861700960391,"ps":5,"e":5.047501797046788,"pr":0.4},{"t":27,"r":100,"c":1,"a":"retracted","s":0.21922808149008696,"ps":4,"e":6.637976753648369,"pr":0.35000000000000003},{"t":27,"r":99,"c":0,"a":"retracted","s":0.32882973591409087,"ps":4,"e":8.958777571672242,"pr":0.35000000000000003},{"t":31,"r":100,"c":1,"a":"extend","s":0.5050621190524799,"ps":5,"e":5.10392228451306,"pr":0.4},{"t":31,"r":99,"c":1,"a":"extend","s":0.45598404875357873,"ps":5,"e":3.4719468839922736,"pr":0.6},{"t":31,"r":100,"c":2,"a":"extend","s":0.4727921524552519,"ps":5,"e":3.3228822328147705,"pr":0.5},{"t":32,"r":98,"c":1,"a":"hold","s":0.26027961631115104,"ps":5,"e":2.820214166485897,"pr":0.7},{"t":33,"r":99,"c":1,"a":"extend","s":0.43359347554112304,"ps":4,"e":5.041563860307705,"pr":0.5499999999999999},{"t":34,"r":99,"c":1,"a":"extend","s":0.45598404875357873,"ps":4,"e":5.662605375235433,"pr":0.5499999999999999},{"t":34,"r":98,"c":1,"a":"extend","s":0.26027961631115104,"ps":4,"e":3.8827658257633573,"pr":0.5999999999999999},{"t":35,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":7.514900565849763,"pr":0.3},{"t":36,"r":99,"c":0,"a":"extend","s":0.290536120963206,"ps":4,"e":4.540509756899128,"pr":0.45},{"t":36,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.12501170378798,"pr":0.3},{"t":37,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":7.514854080033503,"pr":0.3},{"t":38,"r":98,"c":2,"a":"extend","s":0.2987537080333637,"ps":4,"e":3.2177490800160022,"pr":0.6499999999999998},{"t":39,"r":100,"c":2,"a":"extend","s":0.4727921524552519,"ps":4,"e":7.18893056857968,"pr":0.3},{"t":39,"r":98,"c":3,"a":"extend","s":0.23016852577569746,"ps":4,"e":2.5009733271530283,"pr":0.7499999999999998},{"t":40,"r":99,"c":0,"a":"extend","s":0.2991521249298841,"ps":4,"e":4.269729454336899,"pr":0.3},{"t":40,"r":97,"c":1,"a":"hold","s":0.17233810667204708,"ps":4,"e":2.240345699835042,"pr":0.7999999999999997},{"t":40,"r":97,"c":4,"a":"hold","s":0.1688418574633381,"ps":5,"e":1.2921086605117273,"pr":0.9499999999999997},{"t":42,"r":98,"c":2,"a":"hold","s":0.2987537080333637,"ps":4,"e":5.63783307403357,"pr":0.44999999999999973},{"t":42,"r":98,"c":3,"a":"retracted","s":0.23016852577569746,"ps":4,"e":6.225017945769768,"pr":0.5999999999999996},{"t":42,"r":98,"c":4,"a":"extend","s":0.34402411035066793,"ps":5,"e":3.454330736873438,"pr":0.8999999999999997},{"t":42,"r":98,"c":0,"a":"hold","s":0.09647787096483335,"ps":5,"e":2.291775940173294,"pr":0.4},{"t":43,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":7.514814671729255,"pr":0.3},{"t":43,"r":99,"c":0,"a":"hold","s":0.2991521249298841,"ps":4,"e":7.830496516521325,"pr":0.3},{"t":43,"r":99,"c":1,"a":"extend","s":0.45598404875357873,"ps":4,"e":7.0532259578772845,"pr":0.3},{"t":43,"r":100,"c":2,"a":"extend","s":0.4727921524552519,"ps":4,"e":7.3686643536632355,"pr":0.3},{"t":43,"r":97,"c":3,"a":"hold","s":0.3072442371530488,"ps":4,"e":5.300554648537312,"pr":0.7999999999999997},{"t":44,"r":98,"c":2,"a":"retracted","s":0.2987537080333637,"ps":4,"e":9.21789240256739,"pr":0.34999999999999976},{"t":44,"r":96,"c":3,"a":"retracted","s":0.13647514715179876,"ps":4,"e":2.48199190802329,"pr":0.8499999999999996},{"t":46,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":7.514811219497247,"pr":0.3},{"t":49,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.170043906961494,"pr":0.3},{"t":49,"r":98,"c":0,"a":"retracted","s":0.15135064752628138,"ps":4,"e":3.314813846515136,"pr":0.45},{"t":50,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":7.514809849924297,"pr":0.3},{"t":50,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.170176081354163,"pr":0.3},{"t":51,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":7.514809720104136,"pr":0.3},{"t":53,"r":98,"c":0,"a":"retracted","s":0.13105881939845382,"ps":4,"e":4.133773974917058,"pr":0.30000000000000004},{"t":54,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.170410439769802,"pr":0.3},{"t":54,"r":100,"c":2,"a":"extend","s":0.4727921524552519,"ps":4,"e":7.42433060527327,"pr":0.3},{"t":54,"r":99,"c":0,"a":"extend","s":0.4071615756651253,"ps":4,"e":6.3322775071701685,"pr":0.3},{"t":55,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":7.514809489920011,"pr":0.3},{"t":55,"r":99,"c":0,"a":"extend","s":0.4071615756651253,"ps":4,"e":6.292699078743819,"pr":0.3},{"t":55,"r":98,"c":1,"a":"retracted","s":0.16729242748772705,"ps":4,"e":4.782116322341134,"pr":0.35000000000000003},{"t":56,"r":99,"c":0,"a":"extend","s":0.4071615756651253,"ps":4,"e":6.264994178845375,"pr":0.3},{"t":57,"r":97,"c":0,"a":"hold","s":0.16372888386680504,"ps":5,"e":1.691821120443494,"pr":0.5},{"t":58,"r":99,"c":0,"a":"extend","s":0.4071615756651253,"ps":4,"e":6.232025347966227,"pr":0.3},{"t":59,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":7.514809434652802,"pr":0.3},{"t":59,"r":99,"c":1,"a":"extend","s":0.45598404875357873,"ps":4,"e":7.11150790956646,"pr":0.3},{"t":59,"r":99,"c":0,"a":"extend","s":0.4071615756651253,"ps":4,"e":6.22252256730106,"pr":0.3},{"t":59,"r":98,"c":0,"a":"extend","s":0.23803678651025725,"ps":4,"e":2.8750341187900337,"pr":0.30000000000000004},{"t":59,"r":97,"c":0,"a":"retracted","s":0.16372888386680504,"ps":4,"e":3.008035212893251,"pr":0.4},{"t":60,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.170475776538344,"pr":0.3},{"t":60,"r":99,"c":0,"a":"extend","s":0.4071615756651253,"ps":4,"e":6.215870620835444,"pr":0.3},{"t":60,"r":98,"c":1,"a":"extend","s":0.2559987283025197,"ps":4,"e":3.2017370939396606,"pr":0.30000000000000004},{"t":61,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":7.514809425746992,"pr":0.3},{"t":61,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.170478390057957,"pr":0.3},{"t":61,"r":98,"c":0,"a":"hold","s":0.23803678651025725,"ps":4,"e":4.229824179692523,"pr":0.3},{"t":62,"r":99,"c":0,"a":"extend","s":0.4071615756651253,"ps":4,"e":6.20795480454136,"pr":0.3},{"t":62,"r":98,"c":1,"a":"hold","s":0.2559987283025197,"ps":4,"e":4.7027986706720295,"pr":0.3},{"t":63,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":7.514809421383145,"pr":0.3},{"t":64,"r":99,"c":0,"a":"extend","s":0.4071615756651253,"ps":4,"e":6.204076054557259,"pr":0.3},{"t":65,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.1704830240895845,"pr":0.3},{"t":66,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":7.514809418628531,"pr":0.3},{"t":66,"r":98,"c":0,"a":"hold","s":0.28975257293272016,"ps":4,"e":5.878131710148873,"pr":0.35000000000000003},{"t":67,"r":98,"c":1,"a":"hold","s":0.2040580028618305,"ps":4,"e":4.796707890474005,"pr":0.35000000000000003},{"t":68,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":7.514809417895099,"pr":0.3},{"t":68,"r":99,"c":1,"a":"extend","s":0.45598404875357873,"ps":4,"e":7.111694401328984,"pr":0.3},{"t":68,"r":98,"c":1,"a":"retracted","s":0.18329765950712,"ps":4,"e":5.663089166530965,"pr":0.30000000000000004},{"t":70,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":7.514809417535717,"pr":0.3},{"t":70,"r":99,"c":1,"a":"extend","s":0.45598404875357873,"ps":4,"e":7.111698400785271,"pr":0.3},{"t":71,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.170484316010982,"pr":0.3},{"t":72,"r":99,"c":1,"a":"extend","s":0.45598404875357873,"ps":4,"e":7.111700360518853,"pr":0.3},{"t":72,"r":100,"c":2,"a":"extend","s":0.4727921524552519,"ps":4,"e":7.425451683940641,"pr":0.3},{"t":73,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.17048440386328,"pr":0.3},{"t":73,"r":100,"c":2,"a":"extend","s":0.4727921524552519,"ps":4,"e":7.425452232507858,"pr":0.3},{"t":74,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.170484429185413,"pr":0.3},{"t":74,"r":99,"c":1,"a":"extend","s":0.45598404875357873,"ps":4,"e":7.111701320788306,"pr":0.3},{"t":75,"r":99,"c":0,"a":"extend","s":0.4071615756651253,"ps":4,"e":6.2004231003073516,"pr":0.3},{"t":76,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.17048445931875,"pr":0.3},{"t":77,"r":98,"c":1,"a":"extend","s":0.27831731716347075,"ps":4,"e":3.9830155867292016,"pr":0.30000000000000004},{"t":77,"r":97,"c":1,"a":"hold","s":0.19421568954776575,"ps":5,"e":3.13713651428743,"pr":0.45000000000000007},{"t":79,"r":98,"c":0,"a":"extend","s":0.2248637793425227,"ps":4,"e":3.03174604328289,"pr":0.35000000000000003},{"t":80,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":7.514809417200183,"pr":0.3},{"t":80,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.170484481319101,"pr":0.3},{"t":80,"r":99,"c":0,"a":"extend","s":0.4071615756651253,"ps":4,"e":6.200361797139625,"pr":0.3},{"t":81,"r":99,"c":0,"a":"extend","s":0.4071615756651253,"ps":4,"e":6.20035808172244,"pr":0.3},{"t":81,"r":98,"c":1,"a":"extend","s":0.27831731716347075,"ps":4,"e":3.8403375228740804,"pr":0.3},{"t":82,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.170484484864257,"pr":0.3},{"t":82,"r":100,"c":2,"a":"extend","s":0.4727921524552519,"ps":4,"e":7.425453460845814,"pr":0.3},{"t":82,"r":98,"c":1,"a":"extend","s":0.27831731716347075,"ps":4,"e":3.826813242127292,"pr":0.3},{"t":82,"r":97,"c":1,"a":"retracted","s":0.0748603569458691,"ps":4,"e":1.7277881548521057,"pr":0.35000000000000003},{"t":83,"r":98,"c":2,"a":"extend","s":0.2788540706431381,"ps":4,"e":3.6244869900094945,"pr":0.3},{"t":84,"r":99,"c":1,"a":"extend","s":0.45598404875357873,"ps":4,"e":7.1117022173386335,"pr":0.3},{"t":84,"r":98,"c":2,"a":"hold","s":0.2788540706431381,"ps":4,"e":5.2553195551546,"pr":0.3},{"t":84,"r":97,"c":2,"a":"hold","s":0.18373655313872336,"ps":5,"e":3.485786672381167,"pr":0.40000000000000013},{"t":85,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.170484487102085,"pr":0.3},{"t":85,"r":99,"c":1,"a":"extend","s":0.45598404875357873,"ps":4,"e":7.111702225157083,"pr":0.3},{"t":87,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.17048448769792,"pr":0.3},{"t":88,"r":99,"c":1,"a":"extend","s":0.45598404875357873,"ps":4,"e":7.111702237142767,"pr":0.3},{"t":88,"r":99,"c":0,"a":"extend","s":0.4071615756651253,"ps":4,"e":6.2003501263703615,"pr":0.3},{"t":91,"r":99,"c":0,"a":"extend","s":0.4071615756651253,"ps":4,"e":6.200349657302129,"pr":0.3},{"t":92,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":7.514809417190564,"pr":0.3},{"t":92,"r":98,"c":1,"a":"hold","s":0.23568824590012327,"ps":5,"e":4.183378356309783,"pr":0.4},{"t":94,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.170484488223243,"pr":0.3},{"t":94,"r":100,"c":2,"a":"extend","s":0.4727921524552519,"ps":4,"e":7.4254535117831,"pr":0.3},{"t":94,"r":98,"c":1,"a":"retracted","s":0.26574752184110306,"ps":4,"e":7.085338705767432,"pr":0.35000000000000003},{"t":96,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":7.514809417190462,"pr":0.3},{"t":96,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.170484488247288,"pr":0.3},{"t":96,"r":100,"c":2,"a":"extend","s":0.4727921524552519,"ps":4,"e":7.425453512147717,"pr":0.3},{"t":97,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":7.5148094171904525,"pr":0.3},{"t":97,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.1704844882542185,"pr":0.3},{"t":97,"r":98,"c":0,"a":"retracted","s":0.17001227520473522,"ps":4,"e":4.683446069135259,"pr":0.30000000000000004},{"t":98,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.17048448825907,"pr":0.3},{"t":99,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.170484488262465,"pr":0.3},{"t":99,"r":99,"c":1,"a":"extend","s":0.45598404875357873,"ps":4,"e":7.111702243276406,"pr":0.3},{"t":99,"r":100,"c":2,"a":"extend","s":0.4727921524552519,"ps":4,"e":7.425453512377874,"pr":0.3},{"t":99,"r":98,"c":1,"a":"extend","s":0.22691444438097014,"ps":4,"e":3.179178814116265,"pr":0.35000000000000003},{"t":100,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.170484488264843,"pr":0.3},{"t":101,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":7.514809417190435,"pr":0.3},{"t":101,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.170484488266506,"pr":0.3},{"t":101,"r":99,"c":1,"a":"extend","s":0.45598404875357873,"ps":4,"e":7.111702243339508,"pr":0.3},{"t":104,"r":99,"c":0,"a":"extend","s":0.4071615756651253,"ps":4,"e":6.200349414788352,"pr":0.3},{"t":104,"r":97,"c":2,"a":"retracted","s":0.16515292892736264,"ps":4,"e":2.7204387396390457,"pr":0.5999999999999999},{"t":106,"r":100,"c":2,"a":"extend","s":0.4727921524552519,"ps":4,"e":7.425453512488137,"pr":0.3},{"t":106,"r":98,"c":1,"a":"hold","s":0.268807289002968,"ps":5,"e":5.656304567662529,"pr":0.4},{"t":107,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":7.514809417190431,"pr":0.3},{"t":107,"r":98,"c":0,"a":"retracted","s":0.20701742255602532,"ps":4,"e":5.770627205069066,"pr":0.35000000000000003},{"t":108,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":7.514809417190431,"pr":0.3},{"t":109,"r":98,"c":0,"a":"hold","s":0.15412696612444535,"ps":5,"e":3.1403083345607135,"pr":0.4},{"t":110,"r":98,"c":0,"a":"hold","s":0.14414507614985952,"ps":4,"e":3.69346894375959,"pr":0.35000000000000003},{"t":112,"r":100,"c":2,"a":"extend","s":0.4727921524552519,"ps":4,"e":7.42545351249687,"pr":0.3},{"t":112,"r":99,"c":0,"a":"extend","s":0.4071615756651253,"ps":4,"e":6.200349412552451,"pr":0.3},{"t":113,"r":99,"c":0,"a":"extend","s":0.4071615756651253,"ps":4,"e":6.200349412511416,"pr":0.3},{"t":115,"r":98,"c":1,"a":"hold","s":0.25283673312356175,"ps":5,"e":4.320566255016872,"pr":0.4},{"t":117,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":7.514809417190431,"pr":0.3},{"t":118,"r":98,"c":2,"a":"extend","s":0.24809017789985188,"ps":5,"e":2.1199547935308294,"pr":0.45000000000000007},{"t":119,"r":100,"c":2,"a":"extend","s":0.4727921524552519,"ps":4,"e":7.425453512497938,"pr":0.3},{"t":120,"r":98,"c":1,"a":"extend","s":0.25283673312356175,"ps":4,"e":3.6166159632641572,"pr":0.3},{"t":121,"r":97,"c":2,"a":"extend","s":0.20543217680238957,"ps":4,"e":2.0084316968808045,"pr":0.5},{"t":121,"r":98,"c":0,"a":"hold","s":0.1566151744051417,"ps":5,"e":3.1602140005655146,"pr":0.4},{"t":122,"r":98,"c":2,"a":"extend","s":0.24809017789985188,"ps":4,"e":2.9002550878887448,"pr":0.3500000000000001},{"t":122,"r":97,"c":1,"a":"retracted","s":0.178436089760259,"ps":4,"e":3.7294370184840795,"pr":0.35000000000000003},{"t":122,"r":97,"c":2,"a":"hold","s":0.19796545588555878,"ps":4,"e":2.992155343965275,"pr":0.45},{"t":123,"r":98,"c":1,"a":"extend","s":0.25283673312356175,"ps":4,"e":3.4214889704269664,"pr":0.3},{"t":124,"r":99,"c":0,"a":"extend","s":0.4071615756651253,"ps":4,"e":6.200349412417564,"pr":0.3},{"t":126,"r":99,"c":1,"a":"extend","s":0.45598404875357873,"ps":4,"e":7.111702243400126,"pr":0.3},{"t":126,"r":98,"c":0,"a":"hold","s":0.1654439440164633,"ps":5,"e":3.2308441574532765,"pr":0.4},{"t":127,"r":98,"c":1,"a":"retracted","s":0.25283673312356175,"ps":4,"e":7.6590095797563045,"pr":0.3},{"t":127,"r":97,"c":2,"a":"hold","s":0.29287464336621416,"ps":4,"e":4.3852519477761085,"pr":0.4000000000000001},{"t":128,"r":99,"c":1,"a":"extend","s":0.45598404875357873,"ps":4,"e":7.11170224340013,"pr":0.3},{"t":128,"r":97,"c":2,"a":"retracted","s":0.28089605758104585,"ps":4,"e":6.032420408424475,"pr":0.3500000000000001},{"t":129,"r":98,"c":1,"a":"hold","s":0.21695821715347885,"ps":5,"e":4.033538127256458,"pr":0.4},{"t":130,"r":100,"c":2,"a":"extend","s":0.4727921524552519,"ps":4,"e":7.425453512498032,"pr":0.3},{"t":131,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":7.514809417190431,"pr":0.3},{"t":133,"r":99,"c":0,"a":"extend","s":0.4071615756651253,"ps":4,"e":6.200349412415748,"pr":0.3},{"t":135,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.170484488270387,"pr":0.3},{"t":136,"r":100,"c":2,"a":"extend","s":0.4727921524552519,"ps":4,"e":7.425453512498032,"pr":0.3},{"t":136,"r":99,"c":0,"a":"extend","s":0.4071615756651253,"ps":4,"e":6.200349412415698,"pr":0.3},{"t":136,"r":98,"c":0,"a":"retracted","s":0.15240278556986786,"ps":4,"e":4.250227545035083,"pr":0.35000000000000003},{"t":137,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":7.514809417190431,"pr":0.3},{"t":138,"r":99,"c":1,"a":"extend","s":0.45598404875357873,"ps":4,"e":7.111702243400132,"pr":0.3},{"t":139,"r":99,"c":1,"a":"extend","s":0.45598404875357873,"ps":4,"e":7.111702243400132,"pr":0.3},{"t":139,"r":98,"c":1,"a":"hold","s":0.21399128569135142,"ps":5,"e":4.00980267555944,"pr":0.4},{"t":142,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.170484488270387,"pr":0.3},{"t":142,"r":100,"c":2,"a":"extend","s":0.4727921524552519,"ps":4,"e":7.425453512498032,"pr":0.3},{"t":143,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.170484488270387,"pr":0.3},{"t":143,"r":98,"c":0,"a":"hold","s":0.18543053884381647,"ps":5,"e":2.19673909076503,"pr":0.45000000000000007},{"t":144,"r":99,"c":0,"a":"extend","s":0.4071615756651253,"ps":4,"e":6.200349412415673,"pr":0.3},{"t":145,"r":98,"c":1,"a":"hold","s":0.21399128569135142,"ps":4,"e":5.392259911623538,"pr":0.3},{"t":145,"r":98,"c":0,"a":"retracted","s":0.18543053884381647,"ps":4,"e":3.807459036605149,"pr":0.3500000000000001},{"t":146,"r":100,"c":2,"a":"extend","s":0.4727921524552519,"ps":4,"e":7.425453512498032,"pr":0.3},{"t":146,"r":98,"c":1,"a":"retracted","s":0.21399128569135142,"ps":4,"e":6.504190197154349,"pr":0.3},{"t":150,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.170484488270387,"pr":0.3},{"t":150,"r":99,"c":1,"a":"extend","s":0.45598404875357873,"ps":4,"e":7.111702243400132,"pr":0.3},{"t":150,"r":99,"c":0,"a":"extend","s":0.4071615756651253,"ps":4,"e":6.200349412415673,"pr":0.3},{"t":150,"r":98,"c":1,"a":"hold","s":0.19589172387603726,"ps":5,"e":4.818960215946443,"pr":0.4},{"t":151,"r":99,"c":0,"a":"extend","s":0.4071615756651253,"ps":4,"e":6.200349412415673,"pr":0.3},{"t":153,"r":99,"c":1,"a":"extend","s":0.45598404875357873,"ps":4,"e":7.111702243400132,"pr":0.3},{"t":153,"r":98,"c":1,"a":"hold","s":0.13323519007025156,"ps":5,"e":3.363753910590641,"pr":0.4},{"t":154,"r":99,"c":0,"a":"extend","s":0.4071615756651253,"ps":4,"e":6.200349412415673,"pr":0.3},{"t":155,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.170484488270387,"pr":0.3},{"t":155,"r":98,"c":1,"a":"retracted","s":0.19127069225185314,"ps":4,"e":5.074084986620291,"pr":0.35000000000000003},{"t":155,"r":98,"c":0,"a":"hold","s":0.12644604131802428,"ps":5,"e":2.918860935865197,"pr":0.4},{"t":156,"r":98,"c":0,"a":"hold","s":0.11609536147482274,"ps":6,"e":2.947623827663779,"pr":0.5},{"t":157,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":7.514809417190431,"pr":0.3},{"t":158,"r":99,"c":1,"a":"extend","s":0.45598404875357873,"ps":4,"e":7.111702243400132,"pr":0.3},{"t":160,"r":100,"c":2,"a":"extend","s":0.4727921524552519,"ps":4,"e":7.425453512498032,"pr":0.3},{"t":160,"r":98,"c":1,"a":"retracted","s":0.2155463237955422,"ps":4,"e":6.279893575454189,"pr":0.30000000000000004},{"t":160,"r":98,"c":0,"a":"hold","s":0.19861108230032382,"ps":5,"e":3.867934390282901,"pr":0.4},{"t":161,"r":100,"c":2,"a":"extend","s":0.4727921524552519,"ps":4,"e":7.425453512498032,"pr":0.3},{"t":162,"r":99,"c":0,"a":"extend","s":0.4071615756651253,"ps":4,"e":6.200349412415673,"pr":0.3},{"t":165,"r":98,"c":1,"a":"extend","s":0.2357334543098219,"ps":4,"e":2.728172839987848,"pr":0.4},{"t":165,"r":97,"c":1,"a":"extend","s":0.2661823031478603,"ps":4,"e":2.316426544850058,"pr":0.5499999999999999},{"t":165,"r":97,"c":0,"a":"extend","s":0.2478311158329138,"ps":5,"e":1.644180765249841,"pr":0.55},{"t":165,"r":97,"c":0,"a":"hold","s":0.16208115152392655,"ps":5,"e":1.3093873635518454,"pr":0.7},{"t":166,"r":99,"c":0,"a":"extend","s":0.4071615756651253,"ps":4,"e":6.200349412415673,"pr":0.3},{"t":167,"r":99,"c":1,"a":"extend","s":0.45598404875357873,"ps":4,"e":7.111702243400132,"pr":0.3},{"t":167,"r":97,"c":0,"a":"hold","s":0.16962374075475037,"ps":4,"e":3.008160617325847,"pr":0.5},{"t":168,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":7.514809417190431,"pr":0.3},{"t":168,"r":97,"c":1,"a":"hold","s":0.26891597564183023,"ps":4,"e":5.810083655258573,"pr":0.39999999999999997},{"t":168,"r":97,"c":0,"a":"retracted","s":0.2478311158329138,"ps":4,"e":4.390809543989158,"pr":0.5},{"t":170,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.170484488270387,"pr":0.3},{"t":170,"r":99,"c":0,"a":"extend","s":0.4071615756651253,"ps":4,"e":6.200349412415673,"pr":0.3},{"t":171,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.170484488270387,"pr":0.3},{"t":173,"r":98,"c":1,"a":"hold","s":0.1349465466303685,"ps":5,"e":3.997363328713252,"pr":0.4},{"t":174,"r":100,"c":2,"a":"extend","s":0.4727921524552519,"ps":4,"e":7.425453512498032,"pr":0.3},{"t":174,"r":99,"c":0,"a":"extend","s":0.4071615756651253,"ps":4,"e":6.200349412415673,"pr":0.3},{"t":174,"r":98,"c":1,"a":"retracted","s":0.1349465466303685,"ps":4,"e":4.4769357017562,"pr":0.35000000000000003},{"t":175,"r":100,"c":0,"a":"extend","s":0.477579075920916,"ps":4,"e":7.514809417190431,"pr":0.3},{"t":176,"r":99,"c":1,"a":"extend","s":0.45598404875357873,"ps":4,"e":7.111702243400132,"pr":0.3},{"t":176,"r":99,"c":0,"a":"extend","s":0.4071615756651253,"ps":4,"e":6.200349412415673,"pr":0.3},{"t":179,"r":100,"c":1,"a":"extend","s":0.4055616690144852,"ps":4,"e":6.170484488270387,"pr":0.3},{"t":179,"r":99,"c":1,"a":"extend","s":0.45598404875357873,"ps":4,"e":7.111702243400132,"pr":0.3},{"t":179,"r":100,"c":2,"a":"extend","s":0.4727921524552519,"ps":4,"e":7.425453512498032,"pr":0.3},{"t":180,"r":100,"c":2,"a":"extend","s":0.4727921524552519,"ps":4,"e":7.425453512498032,"pr":0.3}];
const lines = text.split('\n');
const gridEl = document.getElementById('grid');
const charEls = [];
for (let r = 0; r < lines.length; r++) {
const row = [];
for (let c = 0; c < lines[r].length; c++) {
const s = document.createElement('span');
s.className = 'c';
s.textContent = lines[r][c];
row.push(s);
gridEl.appendChild(s);
}
charEls.push(row);
gridEl.appendChild(document.createTextNode('\n'));
}
let tick = -1, playing = false, iv;
function apply(t) {
for (const r of charEls) for (const e of r) e.className = 'c';
const active = new Map();
for (const p of passes) {
if (p.t > t) break;
const k = p.r+','+p.c;
if (p.a === 'died' || p.a === 'retracted') active.set(k, 'dead');
else if (p.ps > 16) active.set(k, 'strong');
else active.set(k, 'active');
}
for (const [k, cls] of active) {
const [r, c] = k.split(',').map(Number);
if (charEls[r]?.[c]) charEls[r][c].className = 'c ' + cls;
}
document.getElementById('info').textContent = 'tick ' + t + ' · ' + [...active.values()].filter(v=>v!=='dead').length + ' alive';
}
function play() {
if (playing) return;
playing = true;
document.getElementById('play-btn').textContent = 'pause';
const max = passes.length > 0 ? passes[passes.length-1].t : 0;
iv = setInterval(() => { tick++; if (tick > max) { pause(); return; } apply(tick); }, 900);
}
function pause() { playing = false; clearInterval(iv); document.getElementById('play-btn').textContent = 'play'; }
function reset() { pause(); tick = -1; for (const r of charEls) for (const e of r) e.className = 'c'; document.getElementById('info').textContent = 'neurameba'; }
document.getElementById('play-btn').addEventListener('click', () => playing ? pause() : play());
document.getElementById('reset-btn').addEventListener('click', reset);
setTimeout(play, 1000);
</script>
</body>
</html>