summaryrefslogtreecommitdiff
path: root/docs/site
diff options
context:
space:
mode:
Diffstat (limited to 'docs/site')
-rw-r--r--docs/site/README4
-rw-r--r--docs/site/casts/casts.toml27
-rw-r--r--docs/site/casts/live-text.cast44
-rw-r--r--docs/site/casts/petscii.cast39
-rw-r--r--docs/site/casts/terminals.cast59
-rw-r--r--docs/site/media/captions.txt17
-rw-r--r--docs/site/media/chords.mp4bin0 -> 150705 bytes
-rw-r--r--docs/site/media/chords.pngbin0 -> 33061 bytes
-rw-r--r--docs/site/media/chords.webmbin0 -> 139047 bytes
-rw-r--r--docs/site/media/clips.toml60
-rw-r--r--docs/site/media/columns.mp4bin0 -> 294124 bytes
-rw-r--r--docs/site/media/columns.pngbin0 -> 157329 bytes
-rw-r--r--docs/site/media/columns.webmbin0 -> 416479 bytes
-rw-r--r--docs/site/media/diff-review.mp4bin139657 -> 133945 bytes
-rw-r--r--docs/site/media/diff-review.pngbin84748 -> 92094 bytes
-rw-r--r--docs/site/media/diff-review.webmbin217009 -> 231829 bytes
-rw-r--r--docs/site/media/edit-via-ctl.mp4bin0 -> 140021 bytes
-rw-r--r--docs/site/media/edit-via-ctl.pngbin0 -> 59240 bytes
-rw-r--r--docs/site/media/edit-via-ctl.webmbin0 -> 134014 bytes
-rw-r--r--docs/site/media/image-pane.mp4bin0 -> 294819 bytes
-rw-r--r--docs/site/media/image-pane.pngbin0 -> 199517 bytes
-rw-r--r--docs/site/media/image-pane.webmbin0 -> 433434 bytes
-rw-r--r--docs/site/media/pdf-navigation.mp4bin0 -> 732978 bytes
-rw-r--r--docs/site/media/pdf-navigation.pngbin0 -> 161942 bytes
-rw-r--r--docs/site/media/pdf-navigation.webmbin0 -> 809445 bytes
-rw-r--r--docs/site/media/pdf-tint-fit.mp4bin0 -> 672000 bytes
-rw-r--r--docs/site/media/pdf-tint-fit.pngbin0 -> 154718 bytes
-rw-r--r--docs/site/media/pdf-tint-fit.webmbin0 -> 687970 bytes
-rw-r--r--docs/site/media/scripting-over-9p.webmbin230045 -> 230045 bytes
-rw-r--r--docs/site/media/search.mp4bin0 -> 280626 bytes
-rw-r--r--docs/site/media/search.pngbin0 -> 89899 bytes
-rw-r--r--docs/site/media/search.webmbin0 -> 343657 bytes
-rw-r--r--docs/site/media/terminals-are-panes.webmbin132696 -> 132696 bytes
-rw-r--r--docs/site/media/text-is-the-interface.mp4bin244272 -> 275812 bytes
-rw-r--r--docs/site/media/text-is-the-interface.pngbin84804 -> 84504 bytes
-rw-r--r--docs/site/media/text-is-the-interface.webmbin330331 -> 351601 bytes
-rw-r--r--docs/site/media/themes/acme.pngbin0 -> 56068 bytes
-rw-r--r--docs/site/media/themes/alucard.pngbin0 -> 56543 bytes
-rw-r--r--docs/site/media/themes/atelier.pngbin0 -> 54117 bytes
-rw-r--r--docs/site/media/themes/ayu_dark.pngbin0 -> 53936 bytes
-rw-r--r--docs/site/media/themes/ayu_light.pngbin0 -> 51539 bytes
-rw-r--r--docs/site/media/themes/ayu_mirage.pngbin0 -> 53282 bytes
-rw-r--r--docs/site/media/themes/catppuccin_frappe.pngbin0 -> 54195 bytes
-rw-r--r--docs/site/media/themes/catppuccin_latte.pngbin0 -> 53833 bytes
-rw-r--r--docs/site/media/themes/catppuccin_macchiato.pngbin0 -> 54572 bytes
-rw-r--r--docs/site/media/themes/catppuccin_mocha.pngbin0 -> 55309 bytes
-rw-r--r--docs/site/media/themes/clay.pngbin0 -> 54402 bytes
-rw-r--r--docs/site/media/themes/dark.pngbin0 -> 51087 bytes
-rw-r--r--docs/site/media/themes/dark_plus.pngbin0 -> 53097 bytes
-rw-r--r--docs/site/media/themes/daybreak.pngbin0 -> 50612 bytes
-rw-r--r--docs/site/media/themes/doom_one.pngbin0 -> 53266 bytes
-rw-r--r--docs/site/media/themes/doom_one_light.pngbin0 -> 53006 bytes
-rw-r--r--docs/site/media/themes/dracula.pngbin0 -> 54472 bytes
-rw-r--r--docs/site/media/themes/dracula_soft.pngbin0 -> 54126 bytes
-rw-r--r--docs/site/media/themes/duckbones.pngbin0 -> 55159 bytes
-rw-r--r--docs/site/media/themes/dusk.pngbin0 -> 53826 bytes
-rw-r--r--docs/site/media/themes/forestbones_dark.pngbin0 -> 55144 bytes
-rw-r--r--docs/site/media/themes/forestbones_light.pngbin0 -> 53618 bytes
-rw-r--r--docs/site/media/themes/forge.pngbin0 -> 53735 bytes
-rw-r--r--docs/site/media/themes/forge_black.pngbin0 -> 49798 bytes
-rw-r--r--docs/site/media/themes/forge_soft.pngbin0 -> 53106 bytes
-rw-r--r--docs/site/media/themes/harvest.pngbin0 -> 55290 bytes
-rw-r--r--docs/site/media/themes/helix.pngbin0 -> 52253 bytes
-rw-r--r--docs/site/media/themes/ink.pngbin0 -> 50438 bytes
-rw-r--r--docs/site/media/themes/kanagawabones.pngbin0 -> 55944 bytes
-rw-r--r--docs/site/media/themes/lagoon.pngbin0 -> 51345 bytes
-rw-r--r--docs/site/media/themes/lapis.pngbin0 -> 58311 bytes
-rw-r--r--docs/site/media/themes/lapis_plain.pngbin0 -> 54111 bytes
-rw-r--r--docs/site/media/themes/monokai.pngbin0 -> 55500 bytes
-rw-r--r--docs/site/media/themes/monokai_pro.pngbin0 -> 52437 bytes
-rw-r--r--docs/site/media/themes/monokai_pro_classic.pngbin0 -> 52583 bytes
-rw-r--r--docs/site/media/themes/monokai_pro_light.pngbin0 -> 54494 bytes
-rw-r--r--docs/site/media/themes/monokai_pro_light_sun.pngbin0 -> 55294 bytes
-rw-r--r--docs/site/media/themes/monokai_pro_machine.pngbin0 -> 53048 bytes
-rw-r--r--docs/site/media/themes/monokai_pro_octagon.pngbin0 -> 53951 bytes
-rw-r--r--docs/site/media/themes/monokai_pro_ristretto.pngbin0 -> 52794 bytes
-rw-r--r--docs/site/media/themes/monokai_pro_spectrum.pngbin0 -> 53833 bytes
-rw-r--r--docs/site/media/themes/neobones_dark.pngbin0 -> 54808 bytes
-rw-r--r--docs/site/media/themes/neobones_light.pngbin0 -> 54854 bytes
-rw-r--r--docs/site/media/themes/nord.pngbin0 -> 53617 bytes
-rw-r--r--docs/site/media/themes/nordbones.pngbin0 -> 55741 bytes
-rw-r--r--docs/site/media/themes/orchard.pngbin0 -> 54859 bytes
-rw-r--r--docs/site/media/themes/orchard_black.pngbin0 -> 50762 bytes
-rw-r--r--docs/site/media/themes/paper.pngbin0 -> 55203 bytes
-rw-r--r--docs/site/media/themes/rose_pine.pngbin0 -> 55110 bytes
-rw-r--r--docs/site/media/themes/rose_pine_dawn.pngbin0 -> 56381 bytes
-rw-r--r--docs/site/media/themes/rose_pine_moon.pngbin0 -> 53748 bytes
-rw-r--r--docs/site/media/themes/rosebones_dark.pngbin0 -> 55441 bytes
-rw-r--r--docs/site/media/themes/rosebones_light.pngbin0 -> 53670 bytes
-rw-r--r--docs/site/media/themes/seoul256_dark_233.pngbin0 -> 54107 bytes
-rw-r--r--docs/site/media/themes/seoul256_dark_234.pngbin0 -> 53423 bytes
-rw-r--r--docs/site/media/themes/seoul256_dark_235.pngbin0 -> 53351 bytes
-rw-r--r--docs/site/media/themes/seoul256_dark_236.pngbin0 -> 52348 bytes
-rw-r--r--docs/site/media/themes/seoul256_dark_237.pngbin0 -> 51101 bytes
-rw-r--r--docs/site/media/themes/seoul256_dark_238.pngbin0 -> 51346 bytes
-rw-r--r--docs/site/media/themes/seoul256_dark_239.pngbin0 -> 50757 bytes
-rw-r--r--docs/site/media/themes/seoul256_light_252.pngbin0 -> 49932 bytes
-rw-r--r--docs/site/media/themes/seoul256_light_253.pngbin0 -> 50861 bytes
-rw-r--r--docs/site/media/themes/seoul256_light_254.pngbin0 -> 51138 bytes
-rw-r--r--docs/site/media/themes/seoul256_light_255.pngbin0 -> 51590 bytes
-rw-r--r--docs/site/media/themes/seoul256_light_256.pngbin0 -> 48496 bytes
-rw-r--r--docs/site/media/themes/seoulbones_dark.pngbin0 -> 53482 bytes
-rw-r--r--docs/site/media/themes/seoulbones_light.pngbin0 -> 53299 bytes
-rw-r--r--docs/site/media/themes/solarium.pngbin0 -> 53372 bytes
-rw-r--r--docs/site/media/themes/solarized_dark.pngbin0 -> 52667 bytes
-rw-r--r--docs/site/media/themes/solarized_light.pngbin0 -> 53850 bytes
-rw-r--r--docs/site/media/themes/spectrum.pngbin0 -> 53539 bytes
-rw-r--r--docs/site/media/themes/themes.toml347
-rw-r--r--docs/site/media/themes/tokyobones_dark.pngbin0 -> 56620 bytes
-rw-r--r--docs/site/media/themes/tokyobones_light.pngbin0 -> 55257 bytes
-rw-r--r--docs/site/media/themes/tokyonight_day.pngbin0 -> 51489 bytes
-rw-r--r--docs/site/media/themes/tokyonight_moon.pngbin0 -> 53770 bytes
-rw-r--r--docs/site/media/themes/tokyonight_night.pngbin0 -> 54672 bytes
-rw-r--r--docs/site/media/themes/tokyonight_storm.pngbin0 -> 53382 bytes
-rw-r--r--docs/site/media/themes/vimbones.pngbin0 -> 55104 bytes
-rw-r--r--docs/site/media/themes/zenbones_dark.pngbin0 -> 56055 bytes
-rw-r--r--docs/site/media/themes/zenbones_light.pngbin0 -> 54982 bytes
-rw-r--r--docs/site/media/themes/zenburned.pngbin0 -> 55739 bytes
-rw-r--r--docs/site/media/themes/zenwritten_dark.pngbin0 -> 54856 bytes
-rw-r--r--docs/site/media/themes/zenwritten_light.pngbin0 -> 55139 bytes
-rw-r--r--docs/site/media/wait-editor.mp4bin0 -> 165106 bytes
-rw-r--r--docs/site/media/wait-editor.pngbin0 -> 70946 bytes
-rw-r--r--docs/site/media/wait-editor.webmbin0 -> 165519 bytes
-rw-r--r--docs/site/media/where-commands-run.mp4bin0 -> 199240 bytes
-rw-r--r--docs/site/media/where-commands-run.pngbin0 -> 64070 bytes
-rw-r--r--docs/site/media/where-commands-run.webmbin0 -> 239871 bytes
-rw-r--r--docs/site/site.css79
-rw-r--r--docs/site/site.typ115
128 files changed, 749 insertions, 42 deletions
diff --git a/docs/site/README b/docs/site/README
index 76c2973f..41804163 100644
--- a/docs/site/README
+++ b/docs/site/README
@@ -13,6 +13,10 @@ docs/site: the pardes website, built from docs/typ
ready. For a clip named N the site ships media/N.webm,
media/N.mp4 and media/N.png (the poster); until `ready`
is true it shows placeholder.svg instead.
+ casts/casts.toml the terminal recordings (asciicast v2), in order: name,
+ title, caption, cols, rows, ready; casts/N.cast each.
+ test/record_casts.py records them from a tty pardes
+ and writes this file.
Build (from the repo root):
diff --git a/docs/site/casts/casts.toml b/docs/site/casts/casts.toml
index e639e7b4..9cf8afb6 100644
--- a/docs/site/casts/casts.toml
+++ b/docs/site/casts/casts.toml
@@ -1,20 +1,33 @@
# The landing page's terminal recordings (asciicast v2), in the order
-# shown: casts/<name>.cast for each. The first plays by itself; all loop
+# shown: casts/<name>.cast for each. Each plays by itself while on screen; all loop
# and fit the page's width. While `ready` is false the cast shows
# placeholder.svg, so the site builds before a recording exists.
+# `poster_at` is the second whose frame stands for the cast before it plays.
+# test/record_casts.py writes the casts and this file.
[[cast]]
-name = "editing"
-title = "Editing in a terminal"
-caption = "Recording to come."
+name = "live-text"
+title = "Live text"
+caption = "Rename a variable with helix keys, middle-click make, right-click the error."
cols = 100
rows = 30
-ready = false
+ready = true
+poster_at = 14
[[cast]]
name = "terminals"
title = "Terminals as panes"
-caption = "Recording to come."
+caption = "A shell beside a file: Ctrl-b, copy a line, page git log."
cols = 100
rows = 30
-ready = false
+ready = true
+poster_at = 11
+
+[[cast]]
+name = "petscii"
+title = "Images and PDFs in a plain terminal"
+caption = "No kitty graphics: a Mandelbrot in PETSCII, then the Intel manual searched."
+cols = 100
+rows = 30
+ready = true
+poster_at = 3
diff --git a/docs/site/casts/live-text.cast b/docs/site/casts/live-text.cast
new file mode 100644
index 00000000..66240f6b
--- /dev/null
+++ b/docs/site/casts/live-text.cast
@@ -0,0 +1,44 @@
+{"version": 2, "width": 100, "height": 30, "title": "Live text", "env": {"TERM": "xterm-256color", "SHELL": "/bin/sh"}}
+[0.0, "o", "\u001b[?25l\u001b[0m\u001b[2J\u001b[1;1H\u001b[0;38;2;178;195;184;48;2;29;40;36mNewcol Joincol Find Grep Help Changelog Tutor Dump Themes Config Debug Exit\u001b[0;39;48;2;29;40;36m \u001b[2;1H\u001b[0;38;2;255;255;255;48;2;136;116;85m \u001b[0;39;48;2;49;71;56m \u001b[0;38;2;190;207;196;48;2;49;71;56mNew Tty Find Grep Joincol Delcol\u001b[0;39;48;2;49;71;56m \u001b[3;1H\u001b[0;38;2;0;0;0;48;2;173;211;138m \u001b[0;39;48;2;49;71;56m \u001b[0;38;2;190;207;196;48;2;49;71;56m/tmp/cast/hello/\u001b[0;38;2;223;188;229;48;2;49;71;56mmain.c\u001b[0;38;2;190;207;196;48;2;49;71;56m Save Tty Collapse Del TreeContext\u001b[0;39;48;2;49;71;56m \u001b[4;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;97;111;100;48;2;13;20;16;1m 1 \u001b[0;38;2;201;167;237;48;2;13;20;16m#include\u001b[0;38;2;229;238;229;48;2;13;20;16m \u001b[0;38;2;184;216;138;48;2;13;20;16m<stdio.h>\u001b[0;39;48;2;13;20;16m \u001b[5;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m 2 \u001b[0;39;48;2;13;20;16m \u001b[6;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m 3 \u001b[0;38;2;201;167;237;48;2;13;20;16mstatic\u001b[0;38;2;229;238;229;48;2;13;20;16m int square(int n)\u001b[0;39;48;2;13;20;16m \u001b[7;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m 4 \u001b[0;38;2;229;238;229;48;2;13;20;16m{\u001b[0;39;48;2;13;20;16m \u001b[8;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m 5 \u001b[0;38;2;229;238;229;48;2;13;20;16m \u001b[0;38;2;201;167;237;48;2;13;20;16mreturn\u001b[0;38;2;229;238;229;48;2;13;20;16m n * n;\u001b[0;39;48;2;13;20;16m \u001b[9;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m 6 \u001b[0;38;2;229;238;229;48;2;13;20;16m}\u001b[0;39;48;2;13;20;16m \u001b[10;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m 7 \u001b[0;39;48;2;13;20;16m \u001b[11;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m 8 \u001b[0;38;2;229;238;229;48;2;13;20;16mint main(void)\u001b[0;39;48;2;13;20;16m \u001b[12;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m 9 \u001b[0;38;2;229;238;229;48;2;13;20;16m{\u001b[0;39;48;2;13;20;16m \u001b[13;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m 10 \u001b[0;38;2;229;238;229;48;2;13;20;16m int sum = \u001b[0;38;2;248;192;130;48;2;13;20;16m0\u001b[0;38;2;229;238;229;48;2;13;20;16m; \u001b[0;38;2;185;244;128;48;2;13;20;16m/* 1 + 4 + 9 + 16 */\u001b[0;39;48;2;13;20;16m \u001b[14;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m 11 \u001b[0;38;2;229;238;229;48;2;13;20;16m \u001b[0;38;2;201;167;237;48;2;13;20;16mfor\u001b[0;38;2;229;238;229;48;2;13;20;16m (int i = \u001b[0;38;2;248;192;130;48;2;13;20;16m1\u001b[0;38;2;229;238;229;48;2;13;20;16m; i <= \u001b[0;38;2;248;192;130;48;2;13;20;16m4\u001b[0;38;2;229;238;229;48;2;13;20;16m; i++)\u001b[0;39;48;2;13;20;16m \u001b[15;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m 12 \u001b[0;38;2;229;238;229;48;2;13;20;16m sum += square(i);\u001b[0;39;48;2;13;20;16m \u001b[16;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m 13 \u001b[0;38;2;229;238;229;48;2;13;20;16m printf(\u001b[0;38;2;184;216;138;48;2;13;20;16m\"squares: %d\\n\"\u001b[0;38;2;229;238;229;48;2;13;20;16m, sum);\u001b[0;39;48;2;13;20;16m \u001b[17;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m 14 \u001b[0;38;2;229;238;229;48;2;13;20;16m \u001b[0;38;2;201;167;237;48;2;13;20;16mreturn\u001b[0;38;2;229;238;229;48;2;13;20;16m \u001b[0;38;2;248;192;130;48;2;13;20;16m0\u001b[0;38;2;229;238;229;48;2;13;20;16m;\u001b[0;39;48;2;13;20;16m \u001b[18;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m 15 \u001b[0;38;2;229;238;229;48;2;13;20;16m}\u001b[0;39;48;2;13;20;16m \u001b[19;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m 16 \u001b[0;39;48;2;13;20;16m \u001b[20;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[21;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[22;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[23;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[24;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[25;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[26;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[27;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[28;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[29;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[30;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[0m\u001b[4;8H\u001b[?25h"]
+[1.6, "o", "\u001b[4;3H\u001b[0;38;2;89;103;92;48;2;13;20;16m 1 \u001b[5;3H\u001b[0;38;2;97;111;100;48;2;13;20;16;1m 2 \u001b[0m\u001b[5;8H\u001b[?25h"]
+[1.73, "o", "\u001b[5;3H\u001b[0;38;2;89;103;92;48;2;13;20;16m 2 \u001b[6;3H\u001b[0;38;2;97;111;100;48;2;13;20;16;1m 3 \u001b[0m\u001b[6;8H\u001b[?25h"]
+[1.86, "o", "\u001b[6;3H\u001b[0;38;2;89;103;92;48;2;13;20;16m 3 \u001b[7;3H\u001b[0;38;2;97;111;100;48;2;13;20;16;1m 4 \u001b[0m\u001b[7;8H\u001b[?25h"]
+[1.99, "o", "\u001b[7;3H\u001b[0;38;2;89;103;92;48;2;13;20;16m 4 \u001b[8;3H\u001b[0;38;2;97;111;100;48;2;13;20;16;1m 5 \u001b[0m\u001b[8;8H\u001b[?25h"]
+[2.12, "o", "\u001b[8;3H\u001b[0;38;2;89;103;92;48;2;13;20;16m 5 \u001b[9;3H\u001b[0;38;2;97;111;100;48;2;13;20;16;1m 6 \u001b[0m\u001b[9;8H\u001b[?25h"]
+[2.25, "o", "\u001b[9;3H\u001b[0;38;2;89;103;92;48;2;13;20;16m 6 \u001b[10;3H\u001b[0;38;2;97;111;100;48;2;13;20;16;1m 7 \u001b[0m\u001b[10;8H\u001b[?25h"]
+[2.38, "o", "\u001b[10;3H\u001b[0;38;2;89;103;92;48;2;13;20;16m 7 \u001b[11;3H\u001b[0;38;2;97;111;100;48;2;13;20;16;1m 8 \u001b[0m\u001b[11;8H\u001b[?25h"]
+[2.51, "o", "\u001b[11;3H\u001b[0;38;2;89;103;92;48;2;13;20;16m 8 \u001b[12;3H\u001b[0;38;2;97;111;100;48;2;13;20;16;1m 9 \u001b[0m\u001b[12;8H\u001b[?25h"]
+[2.64, "o", "\u001b[12;3H\u001b[0;38;2;89;103;92;48;2;13;20;16m 9 \u001b[13;3H\u001b[0;38;2;97;111;100;48;2;13;20;16;1m 10 \u001b[0m\u001b[13;8H\u001b[?25h"]
+[3.07, "o", "\u001b[13;8H\u001b[0;38;2;245;247;238;48;2;60;97;74m \u001b[0m\u001b[13;11H\u001b[?25h"]
+[3.29, "o", "\u001b[13;8H\u001b[0;38;2;229;238;229;48;2;13;20;16m \u001b[0;38;2;245;247;238;48;2;60;97;74mint \u001b[0m\u001b[13;15H\u001b[?25h"]
+[3.51, "o", "\u001b[13;12H\u001b[0;38;2;229;238;229;48;2;13;20;16mint\u001b[13;16H\u001b[0;38;2;245;247;238;48;2;60;97;74msum\u001b[0m\u001b[13;18H\u001b[?25h"]
+[4.3, "o", "\u001b[13;15H\u001b[0;38;2;229;238;229;48;2;13;20;16m \u001b[0m\u001b[13;18H\u001b[?25h"]
+[5.0, "o", "\u001b[3;1H\u001b[0;38;2;0;0;0;48;2;173;211;138m^\u001b[0;38;2;0;0;0;48;2;249;203;112;1m*\u001b[13;16H\u001b[0;38;2;229;238;229;48;2;13;20;16m = \u001b[0;38;2;248;192;130;48;2;13;20;16m0\u001b[0;38;2;229;238;229;48;2;13;20;16m;\u001b[13;22H\u001b[0;38;2;185;244;128;48;2;13;20;16m/*\u001b[13;25H1 + 4 + 9 + 16\u001b[13;40H*/\u001b[13;43H\u001b[0;39;48;2;13;20;16m \u001b[0m\u001b[13;16H\u001b[?25h"]
+[5.3, "o", "\u001b[13;16H\u001b[0;38;2;229;238;229;48;2;13;20;16mt = \u001b[0;38;2;248;192;130;48;2;13;20;16m0\u001b[0;38;2;229;238;229;48;2;13;20;16m; \u001b[0;38;2;185;244;128;48;2;13;20;16m/* 1 + 4 + 9 + 16 */\u001b[0m\u001b[13;17H\u001b[?25h"]
+[5.39, "o", "\u001b[13;17H\u001b[0;38;2;229;238;229;48;2;13;20;16mo = \u001b[0;38;2;248;192;130;48;2;13;20;16m0\u001b[0;38;2;229;238;229;48;2;13;20;16m; \u001b[0;38;2;185;244;128;48;2;13;20;16m/* 1 + 4 + 9 + 16 */\u001b[0m\u001b[13;18H\u001b[?25h"]
+[5.48, "o", "\u001b[13;18H\u001b[0;38;2;229;238;229;48;2;13;20;16mt = \u001b[0;38;2;248;192;130;48;2;13;20;16m0\u001b[0;38;2;229;238;229;48;2;13;20;16m; \u001b[0;38;2;185;244;128;48;2;13;20;16m/* 1 + 4 + 9 + 16 */\u001b[0m\u001b[13;19H\u001b[?25h"]
+[5.57, "o", "\u001b[13;19H\u001b[0;38;2;229;238;229;48;2;13;20;16ma = \u001b[0;38;2;248;192;130;48;2;13;20;16m0\u001b[0;38;2;229;238;229;48;2;13;20;16m; \u001b[0;38;2;185;244;128;48;2;13;20;16m/* 1 + 4 + 9 + 16 */\u001b[0m\u001b[13;20H\u001b[?25h"]
+[5.66, "o", "\u001b[13;20H\u001b[0;38;2;229;238;229;48;2;13;20;16ml = \u001b[0;38;2;248;192;130;48;2;13;20;16m0\u001b[0;38;2;229;238;229;48;2;13;20;16m; \u001b[0;38;2;185;244;128;48;2;13;20;16m/* 1 + 4 + 9 + 16 */\u001b[0m\u001b[13;21H\u001b[?25h"]
+[5.96, "o", "\u001b[3;1H\u001b[0;38;2;0;0;0;48;2;173;211;138m \u001b[0m\u001b[13;21H\u001b[?25h"]
+[6.56, "o", "\u001b[4;96H\u001b[0;39;48;2;29;40;36m \u001b[0;38;2;178;195;184;48;2;29;40;36mSPC\u001b[0;39;48;2;29;40;36m \u001b[0m\u001b[13;21H\u001b[?25h"]
+[6.78, "o", "\u001b[4;94H\u001b[0;39;48;2;29;40;36m \u001b[0;38;2;178;195;184;48;2;29;40;36mSPC f\u001b[0m\u001b[13;21H\u001b[?25h"]
+[7.0, "o", "\u001b[3;2H\u001b[0;38;2;0;0;0;48;2;173;211;138m \u001b[4;61H\u001b[0;39;48;2;29;40;36m \u001b[0;38;2;178;195;184;48;2;29;40;36m--:--:-- saved /tmp/cast/hello/main.c\u001b[0m\u001b[13;21H\u001b[?25h"]
+[8.1, "o", "\u001b[4;61H\u001b[0;39;48;2;13;20;16m \u001b[13;3H\u001b[0;38;2;89;103;92;48;2;13;20;16m 10 \u001b[0m\u001b[3;60H\u001b[?25h"]
+[8.4, "o", "\u001b[0m\u001b[3;61H\u001b[?25h"]
+[8.49, "o", "\u001b[3;61H\u001b[0;38;2;190;207;196;48;2;49;71;56mm\u001b[0m\u001b[3;62H\u001b[?25h"]
+[8.58, "o", "\u001b[3;62H\u001b[0;38;2;190;207;196;48;2;49;71;56ma\u001b[0m\u001b[3;63H\u001b[?25h"]
+[8.67, "o", "\u001b[3;63H\u001b[0;38;2;190;207;196;48;2;49;71;56mk\u001b[0m\u001b[3;64H\u001b[?25h"]
+[8.76, "o", "\u001b[3;64H\u001b[0;38;2;190;207;196;48;2;49;71;56me\u001b[0m\u001b[3;65H\u001b[?25h"]
+[9.46, "o", "\u001b[3;61H\u001b[0;38;2;245;247;238;48;2;91;126;90mmake \u001b[0m\u001b[3;65H\u001b[?25h"]
+[10.26, "o", "\u001b[3;61H\u001b[0;38;2;190;207;196;48;2;49;71;56mmake\u001b[0;39;48;2;49;71;56m \u001b[4;95H\u001b[0;39;48;2;29;40;36m \u001b[0;38;2;178;195;184;48;2;29;40;36mExec\u001b[0;39;48;2;29;40;36m \u001b[14;1H\u001b[0;39;48;2;21;32;25m \u001b[15;1H \u001b[16;1H \u001b[17;1H\u001b[0;38;2;255;255;255;48;2;73;102;86m \u001b[0;39;48;2;29;40;36m \u001b[0;38;2;178;195;184;48;2;29;40;36m/tmp/cast/hello (make) exit 2 Kill Save Collapse Del\u001b[0;39;48;2;29;40;36m \u001b[18;3H\u001b[0;38;2;229;238;229;48;2;13;20;16m%\u001b[18;5Hmake\u001b[19;3Hmain.c:\u001b[19;11HIn\u001b[19;14Hfunction\u001b[19;23H‘main’:\u001b[20;3Hmain.c:12:9:\u001b[20;16Herror:\u001b[20;23H‘sum’\u001b[20;29Hundeclared\u001b[20;40H(first\u001b[20;47Huse\u001b[20;51Hin\u001b[20;54Hthis\u001b[20;59Hfunction)\u001b[21;3Hmain.c:12:9:\u001b[21;16Hnote:\u001b[21;22Heach\u001b[21;27Hundeclared\u001b[21;38Hidentifier\u001b[21;49His\u001b[21;52Hreported\u001b[21;61Honly\u001b[21;66Honce\u001b[21;71Hfor\u001b[21;75Heach\u001b[21;80Hfunction\u001b[21;89Hit\u001b[21;92Happears\u001b[21;100Hi\u001b[22;3Hn\u001b[23;3Hmain.c:10:9:\u001b[23;16Hwarning:\u001b[23;25Hunused\u001b[23;32Hvariable\u001b[23;41H‘total’\u001b[24;3Hmake:\u001b[24;9H***\u001b[24;13H[Makefile:4:\u001b[24;26Hhello]\u001b[24;33HError\u001b[24;39H1\u001b[25;3Hexit\u001b[25;8H2\u001b[0m\u001b[3;65H\u001b[?25h"]
+[12.26, "o", "\u001b[3;1H\u001b[0;38;2;255;255;255;48;2;73;102;86m \u001b[0;39;48;2;29;40;36m \u001b[0;38;2;178;195;184;48;2;29;40;36m/tmp/cast/hello/\u001b[0;38;2;211;176;217;48;2;29;40;36mmain.c\u001b[0;38;2;178;195;184;48;2;29;40;36m Save Tty Collapse Del TreeContext make\u001b[0;39;48;2;29;40;36m \u001b[4;95H\u001b[0;39;48;2;13;20;16m \u001b[17;1H\u001b[0;38;2;0;0;0;48;2;173;211;138m \u001b[0;39;48;2;49;71;56m \u001b[0;38;2;190;207;196;48;2;49;71;56m/tmp/cast/hello (make) exit 2 Kill Save Collapse Del\u001b[0;39;48;2;49;71;56m \u001b[20;3H\u001b[0;38;2;245;247;238;48;2;107;120;88mmain.c:12:9:\u001b[0m\u001b[26;3H\u001b[?25h"]
+[13.06, "o", "\u001b[3;1H\u001b[0;38;2;0;0;0;48;2;173;211;138m \u001b[0;39;48;2;49;71;56m \u001b[0;38;2;190;207;196;48;2;49;71;56m/tmp/cast/hello/\u001b[0;38;2;223;188;229;48;2;49;71;56mmain.c\u001b[0;38;2;190;207;196;48;2;49;71;56m Save Tty Collapse Del TreeContext make\u001b[0;39;48;2;49;71;56m \u001b[4;1H\u001b[0;39;48;2;21;32;25m \u001b[4;6H\u001b[0;38;2;89;103;92;48;2;13;20;16m6\u001b[4;8H\u001b[0;38;2;229;238;229;48;2;13;20;16m}\u001b[0;39;48;2;13;20;16m \u001b[4;17H \u001b[5;1H\u001b[0;39;48;2;21;32;25m \u001b[5;6H\u001b[0;38;2;89;103;92;48;2;13;20;16m7\u001b[6;1H\u001b[0;39;48;2;21;32;25m \u001b[6;6H\u001b[0;38;2;89;103;92;48;2;13;20;16m8\u001b[6;8H\u001b[0;38;2;229;238;229;48;2;13;20;16mint main(void)\u001b[0;39;48;2;13;20;16m \u001b[6;30H \u001b[7;1H\u001b[0;39;48;2;21;32;25m \u001b[7;6H\u001b[0;38;2;89;103;92;48;2;13;20;16m9\u001b[8;5H10\u001b[8;12H\u001b[0;38;2;229;238;229;48;2;13;20;16mint total = \u001b[0;38;2;248;192;130;48;2;13;20;16m0\u001b[0;38;2;229;238;229;48;2;13;20;16m;\u001b[8;27H\u001b[0;38;2;185;244;128;48;2;13;20;16m/*\u001b[8;30H1\u001b[8;32H+\u001b[8;34H4\u001b[8;36H+\u001b[8;38H9\u001b[8;40H+\u001b[8;42H16\u001b[8;45H*/\u001b[9;5H\u001b[0;38;2;89;103;92;48;2;13;20;16m11\u001b[9;8H\u001b[0;38;2;229;238;229;48;2;13;20;16m \u001b[9;12H\u001b[0;38;2;201;167;237;48;2;13;20;16mfor\u001b[9;16H\u001b[0;38;2;229;238;229;48;2;13;20;16m(int\u001b[9;21Hi\u001b[9;23H=\u001b[9;25H\u001b[0;38;2;248;192;130;48;2;13;20;16m1\u001b[0;38;2;229;238;229;48;2;13;20;16m;\u001b[9;28Hi\u001b[9;30H<=\u001b[9;33H\u001b[0;38;2;248;192;130;48;2;13;20;16m4\u001b[0;38;2;229;238;229;48;2;13;20;16m;\u001b[9;36Hi++)\u001b[10;3H\u001b[0;38;2;97;111;100;48;2;13;20;16;1m 12 \u001b[10;16H\u001b[0;38;2;229;238;229;48;2;13;20;16msum\u001b[10;20H+=\u001b[10;23Hsquare(i);\u001b[11;5H\u001b[0;38;2;89;103;92;48;2;13;20;16m13\u001b[11;8H\u001b[0;38;2;229;238;229;48;2;13;20;16m \u001b[11;12Hpr\u001b[11;16Htf(\u001b[0;38;2;184;216;138;48;2;13;20;16m\"squares:\u001b[11;29H%d\\n\"\u001b[0;38;2;229;238;229;48;2;13;20;16m,\u001b[11;36Hsum);\u001b[12;5H\u001b[0;38;2;89;103;92;48;2;13;20;16m14\u001b[12;8H\u001b[0;38;2;229;238;229;48;2;13;20;16m \u001b[12;12H\u001b[0;38;2;201;167;237;48;2;13;20;16mreturn\u001b[12;19H\u001b[0;38;2;248;192;130;48;2;13;20;16m0\u001b[0;38;2;229;238;229;48;2;13;20;16m;\u001b[13;6H\u001b[0;38;2;89;103;92;48;2;13;20;16m5\u001b[13;8H\u001b[0;38;2;229;238;229;48;2;13;20;16m}\u001b[13;12H\u001b[0;39;48;2;13;20;16m \u001b[13;16H \u001b[13;22H \u001b[13;24H \u001b[13;27H \u001b[13;30H \u001b[13;32H \u001b[13;34H \u001b[13;36H \u001b[13;38H \u001b[13;40H \u001b[13;42H \u001b[13;45H \u001b[14;1H\u001b[0;39;48;2;96;130;105m \u001b[14;6H\u001b[0;38;2;89;103;92;48;2;13;20;16m6\u001b[14;12H\u001b[0;39;48;2;13;20;16m \u001b[14;16H \u001b[14;21H \u001b[14;23H \u001b[14;25H \u001b[14;28H \u001b[14;30H \u001b[14;33H \u001b[14;36H \u001b[15;1H\u001b[0;39;48;2;96;130;105m \u001b[15;5H\u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[15;16H\u001b[0;39;48;2;13;20;16m \u001b[15;20H \u001b[15;23H \u001b[16;1H\u001b[0;39;48;2;96;130;105m \u001b[16;5H\u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[16;12H\u001b[0;39;48;2;13;20;16m \u001b[16;29H \u001b[16;36H \u001b[17;1H\u001b[0;38;2;255;255;255;48;2;73;102;86m \u001b[0;39;48;2;29;40;36m \u001b[0;38;2;178;195;184;48;2;29;40;36m/tmp/cast/hello (make) exit 2 Kill Save Collapse Del\u001b[0;39;48;2;29;40;36m \u001b[20;3H\u001b[0;38;2;229;238;229;48;2;13;20;16mmain.c:12:9:\u001b[0m\u001b[10;16H\u001b[?25h"]
+[15.06, "o", "\u001b[10;16H\u001b[0;38;2;245;247;238;48;2;60;97;74msum\u001b[0m\u001b[10;18H\u001b[?25h"]
+[15.66, "o", "\u001b[3;1H\u001b[0;38;2;0;0;0;48;2;173;211;138m^\u001b[0;38;2;0;0;0;48;2;249;203;112;1m*\u001b[10;16H\u001b[0;38;2;229;238;229;48;2;13;20;16m +=\u001b[10;20Hsquare(i);\u001b[0;39;48;2;13;20;16m \u001b[0m\u001b[10;16H\u001b[?25h"]
+[15.96, "o", "\u001b[10;16H\u001b[0;38;2;229;238;229;48;2;13;20;16mt += square(i);\u001b[0m\u001b[10;17H\u001b[?25h"]
+[16.05, "o", "\u001b[10;17H\u001b[0;38;2;229;238;229;48;2;13;20;16mo += square(i);\u001b[0m\u001b[10;18H\u001b[?25h"]
+[16.14, "o", "\u001b[10;18H\u001b[0;38;2;229;238;229;48;2;13;20;16mt += square(i);\u001b[0m\u001b[10;19H\u001b[?25h"]
+[16.23, "o", "\u001b[10;19H\u001b[0;38;2;229;238;229;48;2;13;20;16ma += square(i);\u001b[0m\u001b[10;20H\u001b[?25h"]
+[16.32, "o", "\u001b[10;20H\u001b[0;38;2;229;238;229;48;2;13;20;16ml += square(i);\u001b[0m\u001b[10;21H\u001b[?25h"]
+[16.62, "o", "\u001b[3;1H\u001b[0;38;2;0;0;0;48;2;173;211;138m \u001b[0m\u001b[10;21H\u001b[?25h"]
+[18.62, "o", ""]
diff --git a/docs/site/casts/petscii.cast b/docs/site/casts/petscii.cast
new file mode 100644
index 00000000..466dd3c7
--- /dev/null
+++ b/docs/site/casts/petscii.cast
@@ -0,0 +1,39 @@
+{"version": 2, "width": 100, "height": 30, "title": "Images and PDFs in a plain terminal", "env": {"TERM": "xterm-256color", "SHELL": "/bin/sh"}}
+[0.0, "o", "\u001b[?25l\u001b[0m\u001b[2J\u001b[1;1H\u001b[0;38;2;178;195;184;48;2;29;40;36mNewcol Joincol Find Grep Help Changelog Tutor Dump Themes Config Debug Exit\u001b[0;39;48;2;29;40;36m \u001b[2;1H\u001b[0;38;2;255;255;255;48;2;136;116;85m \u001b[0;39;48;2;49;71;56m \u001b[0;38;2;190;207;196;48;2;49;71;56mNew Tty Find Grep Joincol Delcol\u001b[0;39;48;2;49;71;56m \u001b[3;1H\u001b[0;38;2;0;0;0;48;2;173;211;138m \u001b[0;39;48;2;49;71;56m \u001b[0;38;2;190;207;196;48;2;49;71;56m/tmp/cast/art/\u001b[0;38;2;223;188;229;48;2;49;71;56mREADME\u001b[0;38;2;190;207;196;48;2;49;71;56m Save Tty Collapse Del\u001b[0;39;48;2;49;71;56m \u001b[4;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;97;111;100;48;2;13;20;16;1m 1 \u001b[0;38;2;229;238;229;48;2;13;20;16mpictures, right-click a name:\u001b[0;39;48;2;13;20;16m \u001b[5;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m 2 \u001b[0;39;48;2;13;20;16m \u001b[6;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m 3 \u001b[0;38;2;229;238;229;48;2;13;20;16m mandelbrot.png the whole set\u001b[0;39;48;2;13;20;16m \u001b[7;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m 4 \u001b[0;38;2;229;238;229;48;2;13;20;16m seahorse.png a seahorse valley, zoomed in\u001b[0;39;48;2;13;20;16m \u001b[8;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m 5 \u001b[0;38;2;229;238;229;48;2;13;20;16m sdm.pdf Intel SDM vol. 2, 2,515 pages\u001b[0;39;48;2;13;20;16m \u001b[9;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m 6 \u001b[0;39;48;2;13;20;16m \u001b[10;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[11;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[12;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[13;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[14;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[15;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[16;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[17;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[18;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[19;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[20;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[21;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[22;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[23;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[24;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[25;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[26;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[27;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[28;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[29;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[30;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[0m\u001b[4;8H\u001b[?25h"]
+[1.6, "o", "\u001b[6;10H\u001b[0;38;2;245;247;238;48;2;107;120;88mmandelbrot.png \u001b[0m\u001b[4;8H\u001b[?25h"]
+[2.1, "o", "\u001b[3;1H\u001b[0;38;2;255;255;255;48;2;73;102;86m \u001b[0;39;48;2;29;40;36m \u001b[0;38;2;178;195;184;48;2;29;40;36m/tmp/cast/art/\u001b[0;38;2;211;176;217;48;2;29;40;36mREADME\u001b[0;38;2;178;195;184;48;2;29;40;36m Save Tty Collapse Del\u001b[0;39;48;2;29;40;36m \u001b[4;3H\u001b[0;38;2;89;103;92;48;2;13;20;16m 1 \u001b[6;10H\u001b[0;38;2;229;238;229;48;2;13;20;16mmandelbrot.png \u001b[8;1H\u001b[0;39;48;2;21;32;25m \u001b[9;1H\u001b[0;38;2;0;0;0;48;2;173;211;138m \u001b[0;39;48;2;49;71;56m \u001b[0;38;2;190;207;196;48;2;49;71;56mimg petscii:off palette:commodore ascii:on /tmp/cast/art/\u001b[0;38;2;223;188;229;48;2;49;71;56mmandelbrot.png\u001b[0;38;2;190;207;196;48;2;49;71;56m Tty Collapse Del\u001b[0;39;48;2;49;71;56m \u001b[10;1H\u001b[0;39;48;2;21;32;25m \u001b[10;20H\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[0;38;2;108;94;181;48;2;112;164;178m🬝🬎\u001b[0;38;2;112;164;178;48;2;108;94;181m🬹🬻\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m▙🬒🬬🬎█\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;108;94;181m█🬱\u001b[0;38;2;108;94;181;48;2;112;164;178m🬬\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[11;1H\u001b[0;39;48;2;21;32;25m \u001b[11;20H\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[0;38;2;108;94;181;48;2;112;164;178m🬝▀~\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m🬝🬝\u001b[0;38;2;255;255;255;48;2;112;164;178m🬜\u001b[0;38;2;255;255;255;48;2;0;0;0m🬬\u001b[0;38;2;112;164;178;48;2;255;255;255m▜█\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;108;94;181m█\u001b[0;38;2;108;94;181;48;2;112;164;178m🬊█\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[12;1H\u001b[0;39;48;2;21;32;25m \u001b[12;20H\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[0;38;2;108;94;181;48;2;112;164;178m🬝▀\u001b[0;38;2;112;164;178;48;2;108;94;181m🬻\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m🬺\u001b[0;38;2;255;255;255;48;2;184;199;111m🬴\u001b[0;38;2;0;0;0;48;2;184;199;111m▄🬻🬺▖\u001b[0;38;2;255;255;255;48;2;184;199;111m▜\u001b[0;38;2;112;164;178;48;2;255;255;255m█\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;108;94;181m🬺\u001b[0;38;2;108;94;181;48;2;112;164;178m🬬\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[13;1H\u001b[0;39;48;2;21;32;25m \u001b[13;20H\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[0;38;2;108;94;181;48;2;112;164;178m█🬆\u001b[0;38;2;112;164;178;48;2;108;94;181m🬻\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m🬬🬎🬬\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m🬝\u001b[0;38;2;255;255;255;48;2;112;164;178m__\u001b[0;38;2;255;255;255;48;2;184;199;111m🬲\u001b[0;38;2;0;0;0;48;2;184;199;111m🬬\u001b[0;38;2;0;0;0;48;2;0;0;0m \u001b[0;38;2;0;0;0;48;2;184;199;111m🬕\u001b[0;38;2;184;199;111;48;2;255;255;255m^\u001b[0;38;2;255;255;255;48;2;112;164;178m_\u001b[0;38;2;112;164;178;48;2;255;255;255m█🬬\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m█\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;108;94;181m🬺\u001b[0;38;2;108;94;181;48;2;112;164;178m🬬\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[14;1H\u001b[0;39;48;2;21;32;25m \u001b[14;20H\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[0;38;2;108;94;181;48;2;112;164;178m🬝\u001b[0;38;2;112;164;178;48;2;108;94;181m▄█\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;255;255;255;48;2;112;164;178m🬫\u001b[0;38;2;184;199;111;48;2;0;0;0m▛\u001b[0;38;2;0;0;0;48;2;112;164;178m▄_🬭\u001b[0;38;2;0;0;0;48;2;184;199;111m🬹\u001b[0;38;2;0;0;0;48;2;111;79;37m🬹\u001b[0;38;2;0;0;0;48;2;104;55;43m🬹\u001b[0;38;2;111;79;37;48;2;0;0;0m~\u001b[0;38;2;0;0;0;48;2;67;57;0m█\u001b[0;38;2;0;0;0;48;2;111;79;37m█\u001b[0;38;2;0;0;0;48;2;104;55;43m🬹\u001b[0;38;2;0;0;0;48;2;108;108;108m🬹\u001b[0;38;2;0;0;0;48;2;184;199;111m🬹🬹\u001b[0;38;2;184;199;111;48;2;0;0;0m🬎\u001b[0;38;2;112;164;178;48;2;255;255;255m🬝\u001b[0;38;2;112;164;178;48;2;0;0;0m🬝\u001b[0;38;2;0;0;0;48;2;112;164;178m_\u001b[0;38;2;255;255;255;48;2;184;199;111m🬬\u001b[0;38;2;112;164;178;48;2;255;255;255m▜\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;108;94;181m🬺\u001b[0;38;2;108;94;181;48;2;112;164;178m🬬\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[15;1H\u001b[0;39;48;2;21;32;25m \u001b[15;20H\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[0;38;2;108;94;181;48;2;112;164;178m🬝\u001b[0;38;2;112;164;178;48;2;108;94;181m▟\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m🬝\u001b[0;38;2;112;164;178;48;2;184;199;111m🬎\u001b[0;38;2;255;255;255;48;2;112;164;178mj\u001b[0;38;2;0;0;0;48;2;184;199;111m🬯\u001b[0;38;2;0;0;0;48;2;67;57;0m🬸\u001b[0;38;2;104;55;43;48;2;0;0;0m`\u001b[0;38;2;0;0;0;48;2;0;0;0m \u001b[0;38;2;0;0;0;48;2;184;199;111m🬺\u001b[0;38;2;0;0;0;48;2;67;57;0m🬝\u001b[0;38;2;0;0;0;48;2;255;255;255m🬎\u001b[0;38;2;112;164;178;48;2;255;255;255m▟█\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;108;94;181m🬲\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[16;1H\u001b[0;39;48;2;21;32;25m \u001b[16;20H\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[0;38;2;108;94;181;48;2;112;164;178m🬝\u001b[0;38;2;112;164;178;48;2;108;94;181m▟\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m▛\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m█🬬\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m▌\u001b[0;38;2;184;199;111;48;2;154;103;89m▌\u001b[0;38;2;184;199;111;48;2;0;0;0m~\u001b[0;38;2;0;0;0;48;2;0;0;0m \u001b[0;38;2;0;0;0;48;2;184;199;111m🬺\u001b[0;38;2;112;164;178;48;2;184;199;111m🬊🬬\u001b[0;38;2;112;164;178;48;2;255;255;255m▜\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;108;94;181;48;2;112;164;178m🬬\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[17;1H\u001b[0;39;48;2;21;32;25m \u001b[17;20H\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[0;38;2;108;94;181;48;2;112;164;178m█\u001b[0;38;2;112;164;178;48;2;108;94;181m🬵\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m▙\u001b[0;38;2;255;255;255;48;2;112;164;178m🬩\u001b[0;38;2;255;255;255;48;2;0;0;0m🬝\u001b[0;38;2;112;164;178;48;2;255;255;255m🬒\u001b[0;38;2;255;255;255;48;2;112;164;178m▟\u001b[0;38;2;184;199;111;48;2;0;0;0m🬝\u001b[0;38;2;112;164;178;48;2;255;255;255m▀🬙🬬\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m🬝\u001b[0;38;2;0;0;0;48;2;154;103;89m🬞\u001b[0;38;2;67;57;0;48;2;0;0;0m`\u001b[0;38;2;0;0;0;48;2;0;0;0m \u001b[0;38;2;0;0;0;48;2;154;103;89m▛\u001b[0;38;2;184;199;111;48;2;0;0;0m▟\u001b[0;38;2;112;164;178;48;2;255;255;255m🬻\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;108;94;181m▌\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[18;1H\u001b[0;39;48;2;21;32;25m \u001b[18;20H\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[0;38;2;108;94;181;48;2;112;164;178m🬝\u001b[0;38;2;112;164;178;48;2;108;94;181m🬻\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m▀\u001b[0;38;2;0;0;0;48;2;255;255;255m_\u001b[0;38;2;0;0;0;48;2;184;199;111m🬷\u001b[0;38;2;0;0;0;48;2;154;103;89m🬺\u001b[0;38;2;104;55;43;48;2;0;0;0m~\u001b[0;38;2;0;0;0;48;2;111;79;37m█\u001b[0;38;2;104;55;43;48;2;0;0;0m~\u001b[0;38;2;0;0;0;48;2;184;199;111m🬺🬹\u001b[0;38;2;0;0;0;48;2;112;164;178m🬏\u001b[0;38;2;255;255;255;48;2;184;199;111m▌\u001b[0;38;2;0;0;0;48;2;111;79;37m🬻\u001b[0;38;2;0;0;0;48;2;0;0;0m \u001b[0;38;2;0;0;0;48;2;154;103;89m▛\u001b[0;38;2;255;255;255;48;2;112;164;178m🬑\u001b[0;38;2;112;164;178;48;2;255;255;255m█\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;108;94;181m🬲\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[19;1H\u001b[0;39;48;2;21;32;25m \u001b[19;20H\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[0;38;2;108;94;181;48;2;112;164;178m█\u001b[0;38;2;112;164;178;48;2;108;94;181m▟\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m▌🬡\u001b[0;38;2;111;79;37;48;2;255;255;255m_\u001b[0;38;2;255;255;255;48;2;184;199;111m🬆\u001b[0;38;2;0;0;0;48;2;111;79;37m🬻\u001b[0;38;2;0;0;0;48;2;0;0;0m \u001b[0;38;2;67;57;0;48;2;0;0;0m╱\u001b[0;38;2;184;199;111;48;2;0;0;0mT\u001b[0;38;2;0;0;0;48;2;0;0;0m \u001b[0;38;2;0;0;0;48;2;112;164;178m🬆\u001b[0;38;2;112;164;178;48;2;184;199;111m🬻\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;108;94;181m█\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[20;1H\u001b[0;39;48;2;21;32;25m \u001b[20;20H\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[0;38;2;108;94;181;48;2;112;164;178m█\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m██\u001b[0;38;2;112;164;178;48;2;154;103;89m🬴\u001b[0;38;2;112;164;178;48;2;255;255;255m🬸█🬰\u001b[0;38;2;255;255;255;48;2;112;164;178m─\u001b[0;38;2;112;164;178;48;2;255;255;255m🬰\u001b[0;38;2;255;255;255;48;2;112;164;178m🬛\u001b[0;38;2;255;255;255;48;2;184;199;111m🬴\u001b[0;38;2;0;0;0;48;2;184;199;111m🬫\u001b[0;38;2;0;0;0;48;2;0;0;0m \u001b[0;38;2;0;0;0;48;2;104;55;43m🬛\u001b[0;38;2;0;0;0;48;2;0;0;0m \u001b[0;38;2;0;0;0;48;2;104;55;43m🬴\u001b[0;38;2;0;0;0;48;2;112;164;178m🬐\u001b[0;38;2;112;164;178;48;2;255;255;255m█\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;108;94;181m█\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[21;1H\u001b[0;39;48;2;21;32;25m \u001b[21;20H\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[0;38;2;108;94;181;48;2;112;164;178m█\u001b[0;38;2;112;164;178;48;2;108;94;181m🬬\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m█\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m▌\u001b[0;38;2;255;255;255;48;2;112;164;178m🬌\u001b[0;38;2;0;0;0;48;2;112;164;178m~\u001b[0;38;2;255;255;255;48;2;184;199;111m🬱\u001b[0;38;2;0;0;0;48;2;111;79;37m🬬\u001b[0;38;2;0;0;0;48;2;0;0;0m \u001b[0;38;2;0;0;0;48;2;111;79;37m█\u001b[0;38;2;255;255;255;48;2;67;57;0m,\u001b[0;38;2;0;0;0;48;2;0;0;0m \u001b[0;38;2;0;0;0;48;2;184;199;111m█\u001b[0;38;2;0;0;0;48;2;112;164;178m▖\u001b[0;38;2;112;164;178;48;2;184;199;111m🬬\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;108;94;181m█\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[22;1H\u001b[0;39;48;2;21;32;25m \u001b[22;20H\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[0;38;2;108;94;181;48;2;112;164;178m🬺\u001b[0;38;2;112;164;178;48;2;108;94;181m🬬\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m█\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m▄\u001b[0;38;2;255;255;255;48;2;67;57;0m🬹\u001b[0;38;2;0;0;0;48;2;184;199;111m🬨\u001b[0;38;2;0;0;0;48;2;104;55;43m🬝\u001b[0;38;2;0;0;0;48;2;184;199;111m█\u001b[0;38;2;0;0;0;48;2;0;0;0m \u001b[0;38;2;0;0;0;48;2;111;79;37m█🬝\u001b[0;38;2;0;0;0;48;2;154;103;89m🬆\u001b[0;38;2;255;255;255;48;2;111;79;37m🬹\u001b[0;38;2;255;255;255;48;2;184;199;111m▌\u001b[0;38;2;0;0;0;48;2;67;57;0m▜\u001b[0;38;2;0;0;0;48;2;0;0;0m \u001b[0;38;2;0;0;0;48;2;111;79;37m🬛\u001b[0;38;2;255;255;255;48;2;112;164;178m▚\u001b[0;38;2;112;164;178;48;2;255;255;255m█\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;108;94;181m🬕\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[23;1H\u001b[0;39;48;2;21;32;25m \u001b[23;20H\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[0;38;2;108;94;181;48;2;112;164;178m🬺\u001b[0;38;2;112;164;178;48;2;108;94;181m🬊\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m▛\u001b[0;38;2;255;255;255;48;2;112;164;178m🬍\u001b[0;38;2;255;255;255;48;2;0;0;0m🬺\u001b[0;38;2;112;164;178;48;2;255;255;255m🬮\u001b[0;38;2;184;199;111;48;2;255;255;255m'\u001b[0;38;2;0;0;0;48;2;184;199;111m🬁\u001b[0;38;2;112;164;178;48;2;184;199;111m▄\u001b[0;38;2;112;164;178;48;2;255;255;255m🬶🬹█🬺\u001b[0;38;2;0;0;0;48;2;184;199;111m▝\u001b[0;38;2;0;0;0;48;2;67;57;0m█\u001b[0;38;2;0;0;0;48;2;0;0;0m \u001b[0;38;2;0;0;0;48;2;154;103;89m🬲\u001b[0;38;2;112;164;178;48;2;0;0;0m🬬\u001b[0;38;2;112;164;178;48;2;255;255;255m🬬\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;108;94;181m▌\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[24;1H\u001b[0;39;48;2;21;32;25m \u001b[24;20H\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[0;38;2;108;94;181;48;2;112;164;178m🬺\u001b[0;38;2;112;164;178;48;2;108;94;181m🬬\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m🬲\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m█🬻\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m█\u001b[0;38;2;112;164;178;48;2;184;199;111m🬚\u001b[0;38;2;0;0;0;48;2;184;199;111m🬠\u001b[0;38;2;0;0;0;48;2;111;79;37m🬝\u001b[0;38;2;0;0;0;48;2;0;0;0m \u001b[0;38;2;0;0;0;48;2;184;199;111m🬝\u001b[0;38;2;184;199;111;48;2;112;164;178mf\u001b[0;38;2;112;164;178;48;2;184;199;111m🬹\u001b[0;38;2;112;164;178;48;2;255;255;255m▟\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;108;94;181;48;2;112;164;178m🬻\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[25;1H\u001b[0;39;48;2;21;32;25m \u001b[25;20H\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[0;38;2;108;94;181;48;2;112;164;178m█🬺\u001b[0;38;2;112;164;178;48;2;108;94;181m🬬\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m🬺\u001b[0;38;2;112;164;178;48;2;184;199;111m🬹\u001b[0;38;2;255;255;255;48;2;112;164;178m4\u001b[0;38;2;0;0;0;48;2;184;199;111m🬡\u001b[0;38;2;0;0;0;48;2;67;57;0m🬸\u001b[0;38;2;0;0;0;48;2;104;55;43m█\u001b[0;38;2;0;0;0;48;2;0;0;0m \u001b[0;38;2;0;0;0;48;2;184;199;111m🬝\u001b[0;38;2;0;0;0;48;2;67;57;0m█\u001b[0;38;2;184;199;111;48;2;104;55;43m🬂\u001b[0;38;2;112;164;178;48;2;255;255;255m🬨\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;108;94;181m🬕\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[26;1H\u001b[0;39;48;2;21;32;25m \u001b[26;20H\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[0;38;2;108;94;181;48;2;112;164;178m🬺\u001b[0;38;2;112;164;178;48;2;108;94;181m🬊█\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m🬐\u001b[0;38;2;184;199;111;48;2;0;0;0m▙\u001b[0;38;2;0;0;0;48;2;184;199;111m▀\u001b[0;38;2;255;255;255;48;2;184;199;111m▄\u001b[0;38;2;0;0;0;48;2;184;199;111m🬂🬎🬎\u001b[0;38;2;149;149;149;48;2;0;0;0m_\u001b[0;38;2;154;103;89;48;2;0;0;0m_\u001b[0;38;2;0;0;0;48;2;67;57;0m█\u001b[0;38;2;67;57;0;48;2;0;0;0m_\u001b[0;38;2;108;108;108;48;2;0;0;0m__\u001b[0;38;2;0;0;0;48;2;184;199;111m🬎🬎🬂\u001b[0;38;2;112;164;178;48;2;255;255;255m🬺\u001b[0;38;2;112;164;178;48;2;111;79;37m🬹\u001b[0;38;2;0;0;0;48;2;112;164;178m~\u001b[0;38;2;255;255;255;48;2;184;199;111m🬻\u001b[0;38;2;112;164;178;48;2;255;255;255m▟\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;108;94;181m🬝\u001b[0;38;2;108;94;181;48;2;112;164;178m🬻\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[27;1H\u001b[0;39;48;2;21;32;25m \u001b[27;20H\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[0;38;2;108;94;181;48;2;112;164;178m🬺\u001b[0;38;2;112;164;178;48;2;108;94;181m🬊🬬\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m🬹🬹🬻\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m🬺\u001b[0;38;2;255;255;255;48;2;112;164;178m~\u001b[0;38;2;112;164;178;48;2;255;255;255m█\u001b[0;38;2;255;255;255;48;2;184;199;111m▛\u001b[0;38;2;0;0;0;48;2;184;199;111m🬻\u001b[0;38;2;0;0;0;48;2;0;0;0m \u001b[0;38;2;255;255;255;48;2;104;55;43m🬁\u001b[0;38;2;255;255;255;48;2;184;199;111m🬬\u001b[0;38;2;184;199;111;48;2;112;164;178m~\u001b[0;38;2;255;255;255;48;2;112;164;178m~\u001b[0;38;2;112;164;178;48;2;255;255;255m🬻\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;255;255;255;48;2;112;164;178m'\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;108;94;181m█\u001b[0;38;2;108;94;181;48;2;112;164;178m🬻\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[28;1H\u001b[0;39;48;2;21;32;25m \u001b[28;20H\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[0;38;2;108;94;181;48;2;112;164;178m█🬹\u001b[0;38;2;112;164;178;48;2;108;94;181m▀🬬\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m🬝\u001b[0;38;2;255;255;255;48;2;184;199;111m🬴\u001b[0;38;2;0;0;0;48;2;184;199;111m▀🬬🬝▀\u001b[0;38;2;255;255;255;48;2;184;199;111m🬸\u001b[0;38;2;112;164;178;48;2;255;255;255m█\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;108;94;181m🬝\u001b[0;38;2;108;94;181;48;2;112;164;178m🬻\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[29;1H\u001b[0;39;48;2;21;32;25m \u001b[29;20H\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[0;38;2;108;94;181;48;2;112;164;178m█🬹\u001b[0;38;2;112;164;178;48;2;108;94;181m▀🬬\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m🬺▙\u001b[0;38;2;255;255;255;48;2;0;0;0m🬺\u001b[0;38;2;184;199;111;48;2;0;0;0m🬻\u001b[0;38;2;112;164;178;48;2;255;255;255m▟█\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;108;94;181m█🬆\u001b[0;38;2;108;94;181;48;2;112;164;178m█\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[30;1H\u001b[0;39;48;2;21;32;25m \u001b[30;20H\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[0;38;2;112;164;178;48;2;108;94;181m\"\u001b[0;38;2;108;94;181;48;2;112;164;178m🬹\u001b[0;38;2;112;164;178;48;2;108;94;181m🬎🬬\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m🬝🬣\u001b[0;38;2;255;255;255;48;2;112;164;178m~\u001b[0;38;2;112;164;178;48;2;255;255;255m🬹█\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;108;94;181m█🬆\u001b[0;38;2;108;94;181;48;2;112;164;178m🬻\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[0m\u001b[4;8H\u001b[?25h"]
+[4.1, "o", "\u001b[9;89H\u001b[0;38;2;245;247;238;48;2;91;126;90mDel \u001b[0m\u001b[4;8H\u001b[?25h"]
+[4.5, "o", "\u001b[3;1H\u001b[0;38;2;0;0;0;48;2;173;211;138m \u001b[0;39;48;2;49;71;56m \u001b[0;38;2;190;207;196;48;2;49;71;56m/tmp/cast/art/\u001b[0;38;2;223;188;229;48;2;49;71;56mREADME\u001b[0;38;2;190;207;196;48;2;49;71;56m Save Tty Collapse Del\u001b[0;39;48;2;49;71;56m \u001b[6;3H\u001b[0;38;2;97;111;100;48;2;13;20;16;1m 3 \u001b[8;1H\u001b[0;39;48;2;96;130;105m \u001b[9;1H \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m 6 \u001b[0;39;48;2;13;20;16m \u001b[10;1H\u001b[0;39;48;2;96;130;105m \u001b[10;20H\u001b[0;39;48;2;13;20;16m \u001b[11;1H\u001b[0;39;48;2;96;130;105m \u001b[11;20H\u001b[0;39;48;2;13;20;16m \u001b[12;1H\u001b[0;39;48;2;96;130;105m \u001b[12;20H\u001b[0;39;48;2;13;20;16m \u001b[13;1H\u001b[0;39;48;2;96;130;105m \u001b[13;20H\u001b[0;39;48;2;13;20;16m \u001b[14;1H\u001b[0;39;48;2;96;130;105m \u001b[14;20H\u001b[0;39;48;2;13;20;16m \u001b[15;1H\u001b[0;39;48;2;96;130;105m \u001b[15;20H\u001b[0;39;48;2;13;20;16m \u001b[16;1H\u001b[0;39;48;2;96;130;105m \u001b[16;20H\u001b[0;39;48;2;13;20;16m \u001b[17;1H\u001b[0;39;48;2;96;130;105m \u001b[17;20H\u001b[0;39;48;2;13;20;16m \u001b[18;1H\u001b[0;39;48;2;96;130;105m \u001b[18;20H\u001b[0;39;48;2;13;20;16m \u001b[19;1H\u001b[0;39;48;2;96;130;105m \u001b[19;20H\u001b[0;39;48;2;13;20;16m \u001b[20;1H\u001b[0;39;48;2;96;130;105m \u001b[20;20H\u001b[0;39;48;2;13;20;16m \u001b[21;1H\u001b[0;39;48;2;96;130;105m \u001b[21;20H\u001b[0;39;48;2;13;20;16m \u001b[22;1H\u001b[0;39;48;2;96;130;105m \u001b[22;20H\u001b[0;39;48;2;13;20;16m \u001b[23;1H\u001b[0;39;48;2;96;130;105m \u001b[23;20H\u001b[0;39;48;2;13;20;16m \u001b[24;1H\u001b[0;39;48;2;96;130;105m \u001b[24;20H\u001b[0;39;48;2;13;20;16m \u001b[25;1H\u001b[0;39;48;2;96;130;105m \u001b[25;20H\u001b[0;39;48;2;13;20;16m \u001b[26;1H\u001b[0;39;48;2;96;130;105m \u001b[26;20H\u001b[0;39;48;2;13;20;16m \u001b[27;1H\u001b[0;39;48;2;96;130;105m \u001b[27;20H\u001b[0;39;48;2;13;20;16m \u001b[28;1H\u001b[0;39;48;2;96;130;105m \u001b[28;20H\u001b[0;39;48;2;13;20;16m \u001b[29;1H\u001b[0;39;48;2;96;130;105m \u001b[29;20H\u001b[0;39;48;2;13;20;16m \u001b[30;1H\u001b[0;39;48;2;96;130;105m \u001b[30;20H\u001b[0;39;48;2;13;20;16m \u001b[0m\u001b[6;10H\u001b[?25h"]
+[5.0, "o", "\u001b[7;10H\u001b[0;38;2;245;247;238;48;2;107;120;88mseahorse.png \u001b[0m\u001b[6;10H\u001b[?25h"]
+[5.5, "o", "\u001b[3;1H\u001b[0;38;2;255;255;255;48;2;73;102;86m \u001b[0;39;48;2;29;40;36m \u001b[0;38;2;178;195;184;48;2;29;40;36m/tmp/cast/art/\u001b[0;38;2;211;176;217;48;2;29;40;36mREADME\u001b[0;38;2;178;195;184;48;2;29;40;36m Save Tty Collapse Del\u001b[0;39;48;2;29;40;36m \u001b[6;3H\u001b[0;38;2;89;103;92;48;2;13;20;16m 3 \u001b[7;10H\u001b[0;38;2;229;238;229;48;2;13;20;16mseahorse.png \u001b[8;1H\u001b[0;39;48;2;21;32;25m \u001b[9;1H\u001b[0;38;2;0;0;0;48;2;173;211;138m \u001b[0;39;48;2;49;71;56m \u001b[0;38;2;190;207;196;48;2;49;71;56mimg petscii:off palette:commodore ascii:on /tmp/cast/art/\u001b[0;38;2;223;188;229;48;2;49;71;56mseahorse.png\u001b[0;38;2;190;207;196;48;2;49;71;56m Tty Collapse Del\u001b[0;39;48;2;49;71;56m \u001b[10;1H\u001b[0;39;48;2;21;32;25m \u001b[10;20H\u001b[0;38;2;112;164;178;48;2;108;94;181m🬝\u001b[0;38;2;184;199;111;48;2;112;164;178mq_\u001b[0;38;2;112;164;178;48;2;184;199;111m🬎\u001b[0;38;2;112;164;178;48;2;154;103;89m🬫🬱\u001b[0;38;2;154;103;89;48;2;53;40;121m🬴\u001b[0;38;2;149;149;149;48;2;108;94;181mY\u001b[0;38;2;112;164;178;48;2;154;103;89m\\\u001b[0;38;2;184;199;111;48;2;112;164;178m▖\u001b[0;38;2;108;94;181;48;2;112;164;178m🬺🬹\u001b[0;38;2;108;94;181;48;2;184;199;111m🬻\u001b[0;38;2;53;40;121;48;2;112;164;178m🬵\u001b[0;38;2;108;94;181;48;2;149;149;149m🬹\u001b[0;38;2;108;94;181;48;2;184;199;111m🬻\u001b[0;38;2;112;164;178;48;2;149;149;149m🬃\u001b[0;38;2;184;199;111;48;2;112;164;178m─\u001b[0;38;2;108;94;181;48;2;112;164;178m▟\u001b[0;38;2;53;40;121;48;2;108;94;181m🬻\u001b[0;38;2;53;40;121;48;2;53;40;121m \u001b[0;38;2;53;40;121;48;2;108;94;181m█🬹▄\u001b[0;38;2;108;94;181;48;2;53;40;121m~\u001b[0;38;2;53;40;121;48;2;108;94;181m█\u001b[0;38;2;53;40;121;48;2;53;40;121m \u001b[0;38;2;53;40;121;48;2;108;94;181m█🬹🬹\u001b[0;38;2;108;94;181;48;2;53;40;121m▀🬬\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[11;1H\u001b[0;39;48;2;21;32;25m \u001b[11;20H\u001b[0;38;2;108;94;181;48;2;149;149;149m▐\u001b[0;38;2;53;40;121;48;2;108;94;181m🬹🬹🬱\u001b[0;38;2;53;40;121;48;2;112;164;178m🬶▄\u001b[0;38;2;53;40;121;48;2;184;199;111m🬹\u001b[0;38;2;112;164;178;48;2;149;149;149m🬜\u001b[0;38;2;184;199;111;48;2;149;149;149m─\"\u001b[0;38;2;53;40;121;48;2;108;94;181m▟\u001b[0;38;2;53;40;121;48;2;53;40;121m \u001b[0;38;2;53;40;121;48;2;108;94;181m█▄🬻\u001b[0;38;2;53;40;121;48;2;53;40;121m \u001b[0;38;2;53;40;121;48;2;108;94;181m🬺\u001b[0;38;2;108;94;181;48;2;53;40;121m🬬\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[12;1H\u001b[0;39;48;2;21;32;25m \u001b[12;20H\u001b[0;38;2;53;40;121;48;2;112;164;178m🬦\u001b[0;38;2;53;40;121;48;2;53;40;121m \u001b[0;38;2;112;164;178;48;2;53;40;121m~\u001b[0;38;2;53;40;121;48;2;108;94;181m▄█\u001b[0;38;2;53;40;121;48;2;53;40;121m \u001b[0;38;2;108;94;181;48;2;53;40;121m🬨\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[13;1H\u001b[0;39;48;2;21;32;25m \u001b[13;20H\u001b[0;38;2;53;40;121;48;2;53;40;121m \u001b[0;38;2;53;40;121;48;2;108;94;181m▌\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[14;1H\u001b[0;39;48;2;21;32;25m \u001b[14;20H\u001b[0;38;2;53;40;121;48;2;53;40;121m \u001b[0;38;2;53;40;121;48;2;108;94;181m🬄\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[15;1H\u001b[0;39;48;2;21;32;25m \u001b[15;20H\u001b[0;38;2;53;40;121;48;2;53;40;121m \u001b[0;38;2;53;40;121;48;2;108;94;181m🬝▘\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[16;1H\u001b[0;39;48;2;21;32;25m \u001b[16;20H\u001b[0;38;2;53;40;121;48;2;53;40;121m \u001b[0;38;2;53;40;121;48;2;108;94;181m█🬎\u001b[0;38;2;108;94;181;48;2;53;40;121m🬹█\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[17;1H\u001b[0;39;48;2;21;32;25m \u001b[17;20H\u001b[0;38;2;53;40;121;48;2;53;40;121m \u001b[0;38;2;53;40;121;48;2;108;94;181m🬝\u001b[0;38;2;108;94;181;48;2;53;40;121m🬹\u001b[0;38;2;108;94;181;48;2;184;199;111m🬎\u001b[0;38;2;108;94;181;48;2;53;40;121m█\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[0;38;2;108;94;181;48;2;53;40;121m█\u001b[0;38;2;108;94;181;48;2;149;149;149m🬬\u001b[0;38;2;108;94;181;48;2;112;164;178m█\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[18;1H\u001b[0;39;48;2;21;32;25m \u001b[18;20H\u001b[0;38;2;53;40;121;48;2;53;40;121m \u001b[0;38;2;53;40;121;48;2;112;164;178m🬆\u001b[0;38;2;184;199;111;48;2;108;94;181m▄\u001b[0;38;2;108;94;181;48;2;112;164;178m▜\u001b[0;38;2;112;164;178;48;2;108;94;181m_\u001b[0;38;2;108;94;181;48;2;154;103;89m🬝\u001b[0;38;2;149;149;149;48;2;108;94;181m_\u001b[0;38;2;112;164;178;48;2;108;94;181m🬳\u001b[0;38;2;154;103;89;48;2;112;164;178m🬶\u001b[0;38;2;108;94;181;48;2;184;199;111m🬴▀\u001b[0;38;2;108;94;181;48;2;255;255;255m🬝\u001b[0;38;2;108;94;181;48;2;112;164;178m🬆\u001b[0;38;2;184;199;111;48;2;108;94;181mc\u001b[0;38;2;53;40;121;48;2;149;149;149m_\u001b[0;38;2;108;94;181;48;2;149;149;149m🬫\u001b[0;38;2;108;94;181;48;2;112;164;178m🬬\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[0;38;2;108;94;181;48;2;112;164;178m🬝🬬\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[19;1H\u001b[0;39;48;2;21;32;25m \u001b[19;20H\u001b[0;38;2;53;40;121;48;2;53;40;121m \u001b[0;38;2;53;40;121;48;2;108;94;181m🬎\u001b[0;38;2;149;149;149;48;2;53;40;121m_\u001b[0;38;2;53;40;121;48;2;108;94;181m🬎\u001b[0;38;2;108;94;181;48;2;53;40;121m_\u001b[0;38;2;53;40;121;48;2;108;94;181m▀\u001b[0;38;2;108;94;181;48;2;112;164;178m🬝\u001b[0;38;2;108;94;181;48;2;149;149;149m🬄\u001b[0;38;2;112;164;178;48;2;154;103;89m🬤\u001b[0;38;2;112;164;178;48;2;108;94;181m│\u001b[0;38;2;184;199;111;48;2;154;103;89m~\u001b[0;38;2;154;103;89;48;2;184;199;111ma\u001b[0;38;2;255;255;255;48;2;112;164;178mq\u001b[0;38;2;112;164;178;48;2;154;103;89m🬄\u001b[0;38;2;154;103;89;48;2;112;164;178m🬹\u001b[0;38;2;53;40;121;48;2;154;103;89m🬈\u001b[0;38;2;184;199;111;48;2;154;103;89m▄\u001b[0;38;2;255;255;255;48;2;149;149;149m<\u001b[0;38;2;112;164;178;48;2;184;199;111mT\u001b[0;38;2;108;94;181;48;2;154;103;89m}\u001b[0;38;2;149;149;149;48;2;108;94;181mt\u001b[0;38;2;154;103;89;48;2;149;149;149md\u001b[0;38;2;255;255;255;48;2;184;199;111m▗\u001b[0;38;2;112;164;178;48;2;255;255;255m▜\u001b[0;38;2;108;94;181;48;2;154;103;89m🬕\u001b[0;38;2;53;40;121;48;2;149;149;149m🬏\u001b[0;38;2;112;164;178;48;2;184;199;111m🬴\u001b[0;38;2;108;94;181;48;2;112;164;178m█\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[20;1H\u001b[0;39;48;2;21;32;25m \u001b[20;20H\u001b[0;38;2;53;40;121;48;2;53;40;121m \u001b[0;38;2;108;94;181;48;2;112;164;178m▌\u001b[0;38;2;112;164;178;48;2;154;103;89m▝\u001b[0;38;2;108;94;181;48;2;149;149;149m🬑\u001b[0;38;2;184;199;111;48;2;108;94;181m─\u001b[0;38;2;184;199;111;48;2;149;149;149m=\u001b[0;38;2;112;164;178;48;2;184;199;111m🬜\u001b[0;38;2;255;255;255;48;2;112;164;178m.\u001b[0;38;2;255;255;255;48;2;149;149;149m_\u001b[0;38;2;184;199;111;48;2;154;103;89m🬭\u001b[0;38;2;149;149;149;48;2;154;103;89m~\u001b[0;38;2;184;199;111;48;2;149;149;149m🬊\u001b[0;38;2;255;255;255;48;2;184;199;111m🬞\u001b[0;38;2;154;103;89;48;2;184;199;111mz\u001b[0;38;2;184;199;111;48;2;149;149;149m▀\u001b[0;38;2;108;94;181;48;2;154;103;89m🬹\u001b[0;38;2;184;199;111;48;2;108;94;181m🬊\u001b[0;38;2;255;255;255;48;2;149;149;149m🬢\u001b[0;38;2;184;199;111;48;2;149;149;149m▀\u001b[0;38;2;112;164;178;48;2;154;103;89m▗\u001b[0;38;2;184;199;111;48;2;108;94;181m🬉\u001b[0;38;2;184;199;111;48;2;149;149;149m🬴🬪\u001b[0;38;2;184;199;111;48;2;154;103;89m🬐\u001b[0;38;2;184;199;111;48;2;108;94;181m▝\u001b[0;38;2;53;40;121;48;2;108;94;181mL\u001b[0;38;2;112;164;178;48;2;154;103;89m🬁\u001b[0;38;2;112;164;178;48;2;149;149;149m▜\u001b[0;38;2;108;94;181;48;2;112;164;178m🬬\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[21;1H\u001b[0;39;48;2;21;32;25m \u001b[21;20H\u001b[0;38;2;53;40;121;48;2;53;40;121m \u001b[0;38;2;53;40;121;48;2;108;94;181m█\u001b[0;38;2;53;40;121;48;2;53;40;121m \u001b[0;38;2;53;40;121;48;2;149;149;149m🬎▀\u001b[0;38;2;108;94;181;48;2;112;164;178m▀\u001b[0;38;2;112;164;178;48;2;154;103;89m🬱\u001b[0;38;2;108;94;181;48;2;154;103;89m─\u001b[0;38;2;154;103;89;48;2;112;164;178m▟\u001b[0;38;2;53;40;121;48;2;154;103;89m-\u001b[0;38;2;154;103;89;48;2;184;199;111m_─\u001b[0;38;2;255;255;255;48;2;149;149;149m🬭\u001b[0;38;2;184;199;111;48;2;255;255;255m🬎\u001b[0;38;2;111;79;37;48;2;112;164;178m▀\u001b[0;38;2;149;149;149;48;2;53;40;121m🬺\u001b[0;38;2;255;255;255;48;2;149;149;149m🬞\u001b[0;38;2;255;255;255;48;2;255;255;255m \u001b[0;38;2;184;199;111;48;2;255;255;255m'\u001b[0;38;2;255;255;255;48;2;184;199;111m🬺\u001b[0;38;2;255;255;255;48;2;149;149;149m🬵\u001b[0;38;2;255;255;255;48;2;68;68;68m█\u001b[0;38;2;255;255;255;48;2;154;103;89m█\u001b[0;38;2;255;255;255;48;2;149;149;149m🬱\u001b[0;38;2;255;255;255;48;2;112;164;178m🬭\u001b[0;38;2;255;255;255;48;2;184;199;111m🬺\u001b[0;38;2;255;255;255;48;2;154;103;89m🬏\u001b[0;38;2;112;164;178;48;2;154;103;89mx\u001b[0;38;2;184;199;111;48;2;154;103;89m▗🬛\u001b[0;38;2;53;40;121;48;2;184;199;111m🬄\u001b[0;38;2;255;255;255;48;2;184;199;111mm\u001b[0;38;2;112;164;178;48;2;108;94;181m🬎\u001b[0;38;2;112;164;178;48;2;154;103;89m▀\u001b[0;38;2;108;94;181;48;2;149;149;149m🬂\u001b[0;38;2;108;94;181;48;2;112;164;178m🬨\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[22;1H\u001b[0;39;48;2;21;32;25m \u001b[22;20H\u001b[0;38;2;53;40;121;48;2;53;40;121m \u001b[0;38;2;53;40;121;48;2;108;94;181m▌\u001b[0;38;2;53;40;121;48;2;112;164;178m^\u001b[0;38;2;112;164;178;48;2;149;149;149m🬍\u001b[0;38;2;108;94;181;48;2;154;103;89m🬝\u001b[0;38;2;184;199;111;48;2;108;94;181m🬋\u001b[0;38;2;184;199;111;48;2;112;164;178m▄\u001b[0;38;2;184;199;111;48;2;149;149;149m🬐\u001b[0;38;2;112;164;178;48;2;154;103;89m🬎\u001b[0;38;2;255;255;255;48;2;112;164;178m.\u001b[0;38;2;149;149;149;48;2;184;199;111m/\u001b[0;38;2;154;103;89;48;2;184;199;111m~\u001b[0;38;2;184;199;111;48;2;154;103;89m▌\u001b[0;38;2;53;40;121;48;2;154;103;89m)\u001b[0;38;2;184;199;111;48;2;149;149;149m🬞\u001b[0;38;2;149;149;149;48;2;108;94;181m🬸\u001b[0;38;2;255;255;255;48;2;112;164;178m▀~~~\u001b[0;38;2;112;164;178;48;2;255;255;255m██🬹\u001b[0;38;2;255;255;255;48;2;112;164;178m🬬\u001b[0;38;2;255;255;255;48;2;255;255;255m \u001b[0;38;2;255;255;255;48;2;112;164;178m▙▄\u001b[0;38;2;255;255;255;48;2;184;199;111m🬓\u001b[0;38;2;184;199;111;48;2;154;103;89m🬇🬄\u001b[0;38;2;149;149;149;48;2;104;55;43m🬍\u001b[0;38;2;53;40;121;48;2;184;199;111m🬯\u001b[0;38;2;154;103;89;48;2;0;0;0m🬻\u001b[0;38;2;255;255;255;48;2;112;164;178m`\u001b[0;38;2;112;164;178;48;2;108;94;181m🬕\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[23;1H\u001b[0;39;48;2;21;32;25m \u001b[23;20H\u001b[0;38;2;53;40;121;48;2;53;40;121m \u001b[0;38;2;53;40;121;48;2;108;94;181m🬺\u001b[0;38;2;184;199;111;48;2;108;94;181m🬊\u001b[0;38;2;112;164;178;48;2;154;103;89m▐\u001b[0;38;2;112;164;178;48;2;53;40;121m🬴\u001b[0;38;2;108;94;181;48;2;149;149;149m🬷\u001b[0;38;2;154;103;89;48;2;108;94;181m🬨\u001b[0;38;2;108;94;181;48;2;154;103;89m.\u001b[0;38;2;184;199;111;48;2;255;255;255m█🬎\u001b[0;38;2;255;255;255;48;2;154;103;89m▄\u001b[0;38;2;255;255;255;48;2;184;199;111m▄\u001b[0;38;2;112;164;178;48;2;184;199;111m🬻\u001b[0;38;2;184;199;111;48;2;112;164;178m~\u001b[0;38;2;112;164;178;48;2;255;255;255m🬻\u001b[0;38;2;154;103;89;48;2;112;164;178m~\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;255;255;255;48;2;112;164;178m🬷\u001b[0;38;2;255;255;255;48;2;255;255;255m \u001b[0;38;2;255;255;255;48;2;149;149;149m▛\u001b[0;38;2;112;164;178;48;2;154;103;89m╲\u001b[0;38;2;154;103;89;48;2;149;149;149m🬉\u001b[0;38;2;184;199;111;48;2;154;103;89ma\u001b[0;38;2;154;103;89;48;2;255;255;255m🬝\u001b[0;38;2;255;255;255;48;2;149;149;149m🬭\u001b[0;38;2;112;164;178;48;2;184;199;111m▐\u001b[0;38;2;112;164;178;48;2;108;94;181m█\u001b[0;38;2;108;94;181;48;2;112;164;178m🬬\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[24;1H\u001b[0;39;48;2;21;32;25m \u001b[24;20H\u001b[0;38;2;53;40;121;48;2;53;40;121m \u001b[0;38;2;53;40;121;48;2;108;94;181m🬝\u001b[0;38;2;53;40;121;48;2;112;164;178m🬎\u001b[0;38;2;53;40;121;48;2;149;149;149m🬆\u001b[0;38;2;112;164;178;48;2;108;94;181m▄🬺\u001b[0;38;2;104;55;43;48;2;112;164;178m^\u001b[0;38;2;154;103;89;48;2;104;55;43m🬺\u001b[0;38;2;184;199;111;48;2;154;103;89m🬭🬳\u001b[0;38;2;154;103;89;48;2;184;199;111m🬺\u001b[0;38;2;108;94;181;48;2;149;149;149m🬓\u001b[0;38;2;104;55;43;48;2;108;108;108m🬃\u001b[0;38;2;154;103;89;48;2;149;149;149m🬓\u001b[0;38;2;112;164;178;48;2;255;255;255m█\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;255;255;255m█\u001b[0;38;2;255;255;255;48;2;112;164;178mm\u001b[0;38;2;112;164;178;48;2;108;108;108m🬎\u001b[0;38;2;255;255;255;48;2;149;149;149m~\u001b[0;38;2;184;199;111;48;2;154;103;89m🬰\u001b[0;38;2;255;255;255;48;2;154;103;89m🬂▜\u001b[0;38;2;255;255;255;48;2;255;255;255m \u001b[0;38;2;184;199;111;48;2;255;255;255m~\u001b[0;38;2;154;103;89;48;2;184;199;111m🬻\u001b[0;38;2;184;199;111;48;2;154;103;89m🬋\u001b[0;38;2;53;40;121;48;2;149;149;149m🬞\u001b[0;38;2;255;255;255;48;2;112;164;178m🬂\u001b[0;38;2;112;164;178;48;2;154;103;89m▀▀\u001b[0;38;2;112;164;178;48;2;108;94;181m🬺\u001b[0;38;2;108;94;181;48;2;112;164;178m▜\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[25;1H\u001b[0;39;48;2;21;32;25m \u001b[25;20H\u001b[0;38;2;53;40;121;48;2;53;40;121m \u001b[0;38;2;53;40;121;48;2;111;61;134m█\u001b[0;38;2;111;61;134;48;2;53;40;121m_\u001b[0;38;2;53;40;121;48;2;149;149;149m🬆\u001b[0;38;2;53;40;121;48;2;184;199;111m🬎\u001b[0;38;2;53;40;121;48;2;108;94;181m🬬▛\u001b[0;38;2;53;40;121;48;2;112;164;178m▘\u001b[0;38;2;184;199;111;48;2;112;164;178m_\u001b[0;38;2;184;199;111;48;2;149;149;149m_\u001b[0;38;2;108;108;108;48;2;112;164;178m_\u001b[0;38;2;112;164;178;48;2;255;255;255m█\u001b[0;38;2;112;164;178;48;2;149;149;149m▙\u001b[0;38;2;184;199;111;48;2;154;103;89m▟\u001b[0;38;2;184;199;111;48;2;255;255;255m🬻\u001b[0;38;2;154;103;89;48;2;184;199;111m_\u001b[0;38;2;154;103;89;48;2;149;149;149m▛\u001b[0;38;2;112;164;178;48;2;154;103;89m🬷\u001b[0;38;2;112;164;178;48;2;149;149;149m🬹\u001b[0;38;2;104;55;43;48;2;112;164;178m`\u001b[0;38;2;112;164;178;48;2;255;255;255m█\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;149;149;149m🬆\u001b[0;38;2;108;94;181;48;2;154;103;89m🬒\u001b[0;38;2;154;103;89;48;2;184;199;111m▛\u001b[0;38;2;184;199;111;48;2;112;164;178m█▛\u001b[0;38;2;184;199;111;48;2;154;103;89m🬀\u001b[0;38;2;184;199;111;48;2;108;108;108m▐\u001b[0;38;2;255;255;255;48;2;184;199;111m█\u001b[0;38;2;255;255;255;48;2;255;255;255m \u001b[0;38;2;184;199;111;48;2;154;103;89m🬰🬭🬭\u001b[0;38;2;108;94;181;48;2;154;103;89m🬉\u001b[0;38;2;112;164;178;48;2;104;55;43m┼\u001b[0;38;2;154;103;89;48;2;0;0;0m🬻\u001b[0;38;2;112;164;178;48;2;184;199;111m🬲\u001b[0;38;2;112;164;178;48;2;149;149;149m🬵\u001b[0;38;2;108;94;181;48;2;112;164;178m~\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[26;1H\u001b[0;39;48;2;21;32;25m \u001b[26;20H\u001b[0;38;2;53;40;121;48;2;53;40;121m \u001b[0;38;2;53;40;121;48;2;112;164;178m▙\u001b[0;38;2;112;164;178;48;2;108;94;181m▐\u001b[0;38;2;112;164;178;48;2;149;149;149m▖\u001b[0;38;2;112;164;178;48;2;154;103;89m🬎\u001b[0;38;2;108;94;181;48;2;149;149;149m🬑\u001b[0;38;2;108;108;108;48;2;112;164;178m*\u001b[0;38;2;184;199;111;48;2;108;94;181m🬂\u001b[0;38;2;154;103;89;48;2;184;199;111m🬺\u001b[0;38;2;184;199;111;48;2;154;103;89m▀🬭🬹🬝🬓\u001b[0;38;2;255;255;255;48;2;149;149;149m🬭\u001b[0;38;2;112;164;178;48;2;184;199;111m▟\u001b[0;38;2;255;255;255;48;2;112;164;178m/\u001b[0;38;2;112;164;178;48;2;255;255;255m█\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;149;149;149m▌\u001b[0;38;2;154;103;89;48;2;108;94;181m🬝\u001b[0;38;2;184;199;111;48;2;154;103;89m▝█\u001b[0;38;2;184;199;111;48;2;255;255;255m🬕\u001b[0;38;2;255;255;255;48;2;184;199;111m🬹█\u001b[0;38;2;255;255;255;48;2;255;255;255m \u001b[0;38;2;255;255;255;48;2;184;199;111m▛\u001b[0;38;2;255;255;255;48;2;149;149;149m▀\u001b[0;38;2;255;255;255;48;2;108;108;108m🬀\u001b[0;38;2;184;199;111;48;2;154;103;89m╲\u001b[0;38;2;154;103;89;48;2;108;108;108m▟\u001b[0;38;2;255;255;255;48;2;154;103;89m▄\u001b[0;38;2;184;199;111;48;2;154;103;89m🬓\u001b[0;38;2;112;164;178;48;2;184;199;111m🬻\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;108;94;181m▌\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[27;1H\u001b[0;39;48;2;21;32;25m \u001b[27;20H\u001b[0;38;2;53;40;121;48;2;53;40;121m \u001b[0;38;2;53;40;121;48;2;111;61;134m█\u001b[0;38;2;53;40;121;48;2;112;164;178m▖\u001b[0;38;2;184;199;111;48;2;112;164;178m▐\u001b[0;38;2;154;103;89;48;2;108;94;181m🬕\u001b[0;38;2;184;199;111;48;2;108;94;181m[\u001b[0;38;2;53;40;121;48;2;184;199;111m🬄\u001b[0;38;2;112;164;178;48;2;108;94;181m▌\u001b[0;38;2;53;40;121;48;2;108;94;181m🬈\u001b[0;38;2;154;103;89;48;2;108;94;181m🬴▟\u001b[0;38;2;184;199;111;48;2;255;255;255m█\u001b[0;38;2;255;255;255;48;2;184;199;111m─\u001b[0;38;2;255;255;255;48;2;149;149;149m▀\u001b[0;38;2;255;255;255;48;2;112;164;178m🬂\u001b[0;38;2;184;199;111;48;2;112;164;178m🬋\u001b[0;38;2;112;164;178;48;2;184;199;111m▜\u001b[0;38;2;112;164;178;48;2;53;40;121m█\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;67;57;0m█\u001b[0;38;2;112;164;178;48;2;154;103;89m🬹\u001b[0;38;2;184;199;111;48;2;154;103;89m┼\u001b[0;38;2;154;103;89;48;2;111;61;134m🬎\u001b[0;38;2;184;199;111;48;2;154;103;89m🬂🬬\u001b[0;38;2;255;255;255;48;2;149;149;149m▀\u001b[0;38;2;255;255;255;48;2;184;199;111m🬎🬆\u001b[0;38;2;255;255;255;48;2;108;94;181m▀\u001b[0;38;2;154;103;89;48;2;184;199;111m▄\u001b[0;38;2;184;199;111;48;2;154;103;89m-\u001b[0;38;2;154;103;89;48;2;149;149;149m🬻\u001b[0;38;2;53;40;121;48;2;108;94;181mq\u001b[0;38;2;112;164;178;48;2;108;108;108m▖\u001b[0;38;2;0;0;0;48;2;108;108;108m🬏\u001b[0;38;2;112;164;178;48;2;149;149;149m▀\u001b[0;38;2;112;164;178;48;2;255;255;255m█\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;108;94;181m▌\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[28;1H\u001b[0;39;48;2;21;32;25m \u001b[28;20H\u001b[0;38;2;53;40;121;48;2;53;40;121m \u001b[0;38;2;53;40;121;48;2;108;94;181m🬛\u001b[0;38;2;108;94;181;48;2;184;199;111m▙\u001b[0;38;2;108;94;181;48;2;149;149;149m🬯\u001b[0;38;2;184;199;111;48;2;108;94;181m▄\u001b[0;38;2;108;94;181;48;2;154;103;89mY\u001b[0;38;2;53;40;121;48;2;154;103;89m`\u001b[0;38;2;184;199;111;48;2;154;103;89m_🬹\u001b[0;38;2;154;103;89;48;2;53;40;121m🬝🬥\u001b[0;38;2;108;94;181;48;2;149;149;149m🬲\u001b[0;38;2;53;40;121;48;2;108;94;181m+\u001b[0;38;2;112;164;178;48;2;184;199;111m▛\u001b[0;38;2;154;103;89;48;2;149;149;149m▌\u001b[0;38;2;112;164;178;48;2;255;255;255m█\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;108;108;108;48;2;112;164;178m.\u001b[0;38;2;154;103;89;48;2;112;164;178m>\u001b[0;38;2;184;199;111;48;2;154;103;89m🬚\u001b[0;38;2;154;103;89;48;2;108;108;108m🬙\u001b[0;38;2;104;55;43;48;2;108;94;181m▘\u001b[0;38;2;154;103;89;48;2;149;149;149m🬝\u001b[0;38;2;154;103;89;48;2;184;199;111m🬬\u001b[0;38;2;108;94;181;48;2;154;103;89m\"\u001b[0;38;2;154;103;89;48;2;108;94;181m🬆\u001b[0;38;2;154;103;89;48;2;184;199;111mP\u001b[0;38;2;255;255;255;48;2;184;199;111m🬃\u001b[0;38;2;154;103;89;48;2;108;94;181m🬎\u001b[0;38;2;184;199;111;48;2;112;164;178m─\u001b[0;38;2;112;164;178;48;2;184;199;111m🬴\u001b[0;38;2;184;199;111;48;2;112;164;178m+\u001b[0;38;2;149;149;149;48;2;112;164;178m-\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;108;94;181m▙\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[29;1H\u001b[0;39;48;2;21;32;25m \u001b[29;20H\u001b[0;38;2;53;40;121;48;2;53;40;121m \u001b[0;38;2;53;40;121;48;2;108;94;181m█\u001b[0;38;2;112;164;178;48;2;53;40;121m_\u001b[0;38;2;53;40;121;48;2;112;164;178m🬆\u001b[0;38;2;53;40;121;48;2;149;149;149m~\u001b[0;38;2;112;164;178;48;2;149;149;149m🬹▄\u001b[0;38;2;108;94;181;48;2;112;164;178m^\u001b[0;38;2;112;164;178;48;2;154;210;132m█\u001b[0;38;2;255;255;255;48;2;149;149;149m~\u001b[0;38;2;184;199;111;48;2;154;103;89m▐\u001b[0;38;2;255;255;255;48;2;184;199;111m🬆\u001b[0;38;2;184;199;111;48;2;255;255;255m█\u001b[0;38;2;184;199;111;48;2;149;149;149m🬺\u001b[0;38;2;154;103;89;48;2;111;79;37m🬝\u001b[0;38;2;184;199;111;48;2;154;103;89m▄\u001b[0;38;2;112;164;178;48;2;184;199;111m▟\u001b[0;38;2;112;164;178;48;2;255;255;255m██\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;53;40;121m█\u001b[0;38;2;112;164;178;48;2;184;199;111m🬔\u001b[0;38;2;53;40;121;48;2;112;164;178m+\u001b[0;38;2;112;164;178;48;2;255;255;255m▙\u001b[0;38;2;112;164;178;48;2;154;103;89m🬮🬯\u001b[0;38;2;112;164;178;48;2;108;108;108m▙\u001b[0;38;2;149;149;149;48;2;154;103;89m╱\u001b[0;38;2;112;164;178;48;2;255;255;255m█\u001b[0;38;2;112;164;178;48;2;0;0;0m█\u001b[0;38;2;112;164;178;48;2;154;103;89m█\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;108;94;181m█\u001b[0;38;2;108;94;181;48;2;112;164;178m█\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[30;1H\u001b[0;39;48;2;21;32;25m \u001b[30;20H\u001b[0;38;2;53;40;121;48;2;53;40;121m \u001b[0;38;2;53;40;121;48;2;112;164;178m█\u001b[0;38;2;112;164;178;48;2;108;94;181m🬨\u001b[0;38;2;112;164;178;48;2;149;149;149m🬭\u001b[0;38;2;184;199;111;48;2;149;149;149mt\u001b[0;38;2;112;164;178;48;2;184;199;111m██🬬\u001b[0;38;2;112;164;178;48;2;154;210;132m█\u001b[0;38;2;112;164;178;48;2;184;199;111m█\u001b[0;38;2;255;255;255;48;2;112;164;178m]\u001b[0;38;2;184;199;111;48;2;154;103;89m🬒🬆\u001b[0;38;2;154;103;89;48;2;184;199;111m🬻🬙\u001b[0;38;2;112;164;178;48;2;149;149;149m▄\u001b[0;38;2;112;164;178;48;2;184;199;111m█\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;149;149;149m█\u001b[0;38;2;112;164;178;48;2;104;55;43m█\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;112;164;178;48;2;149;149;149m🬺🬺█\u001b[0;38;2;112;164;178;48;2;112;164;178m \u001b[0;38;2;108;94;181;48;2;112;164;178m▐\u001b[0;38;2;108;94;181;48;2;108;94;181m \u001b[0m\u001b[6;10H\u001b[?25h"]
+[7.5, "o", "\u001b[9;87H\u001b[0;38;2;245;247;238;48;2;91;126;90mDel \u001b[0m\u001b[6;10H\u001b[?25h"]
+[7.9, "o", "\u001b[3;1H\u001b[0;38;2;0;0;0;48;2;173;211;138m \u001b[0;39;48;2;49;71;56m \u001b[0;38;2;190;207;196;48;2;49;71;56m/tmp/cast/art/\u001b[0;38;2;223;188;229;48;2;49;71;56mREADME\u001b[0;38;2;190;207;196;48;2;49;71;56m Save Tty Collapse Del\u001b[0;39;48;2;49;71;56m \u001b[7;3H\u001b[0;38;2;97;111;100;48;2;13;20;16;1m 4 \u001b[8;1H\u001b[0;39;48;2;96;130;105m \u001b[9;1H \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m 6 \u001b[0;39;48;2;13;20;16m \u001b[10;1H\u001b[0;39;48;2;96;130;105m \u001b[10;20H\u001b[0;39;48;2;13;20;16m \u001b[11;1H\u001b[0;39;48;2;96;130;105m \u001b[11;20H\u001b[0;39;48;2;13;20;16m \u001b[12;1H\u001b[0;39;48;2;96;130;105m \u001b[12;20H\u001b[0;39;48;2;13;20;16m \u001b[13;1H\u001b[0;39;48;2;96;130;105m \u001b[13;20H\u001b[0;39;48;2;13;20;16m \u001b[14;1H\u001b[0;39;48;2;96;130;105m \u001b[14;20H\u001b[0;39;48;2;13;20;16m \u001b[15;1H\u001b[0;39;48;2;96;130;105m \u001b[15;20H\u001b[0;39;48;2;13;20;16m \u001b[16;1H\u001b[0;39;48;2;96;130;105m \u001b[16;20H\u001b[0;39;48;2;13;20;16m \u001b[17;1H\u001b[0;39;48;2;96;130;105m \u001b[17;20H\u001b[0;39;48;2;13;20;16m \u001b[18;1H\u001b[0;39;48;2;96;130;105m \u001b[18;20H\u001b[0;39;48;2;13;20;16m \u001b[19;1H\u001b[0;39;48;2;96;130;105m \u001b[19;20H\u001b[0;39;48;2;13;20;16m \u001b[20;1H\u001b[0;39;48;2;96;130;105m \u001b[20;20H\u001b[0;39;48;2;13;20;16m \u001b[21;1H\u001b[0;39;48;2;96;130;105m \u001b[21;20H\u001b[0;39;48;2;13;20;16m \u001b[22;1H\u001b[0;39;48;2;96;130;105m \u001b[22;20H\u001b[0;39;48;2;13;20;16m \u001b[23;1H\u001b[0;39;48;2;96;130;105m \u001b[23;20H\u001b[0;39;48;2;13;20;16m \u001b[24;1H\u001b[0;39;48;2;96;130;105m \u001b[24;20H\u001b[0;39;48;2;13;20;16m \u001b[25;1H\u001b[0;39;48;2;96;130;105m \u001b[25;20H\u001b[0;39;48;2;13;20;16m \u001b[26;1H\u001b[0;39;48;2;96;130;105m \u001b[26;20H\u001b[0;39;48;2;13;20;16m \u001b[27;1H\u001b[0;39;48;2;96;130;105m \u001b[27;20H\u001b[0;39;48;2;13;20;16m \u001b[28;1H\u001b[0;39;48;2;96;130;105m \u001b[28;20H\u001b[0;39;48;2;13;20;16m \u001b[29;1H\u001b[0;39;48;2;96;130;105m \u001b[29;20H\u001b[0;39;48;2;13;20;16m \u001b[30;1H\u001b[0;39;48;2;96;130;105m \u001b[30;20H\u001b[0;39;48;2;13;20;16m \u001b[0m\u001b[7;10H\u001b[?25h"]
+[8.4, "o", "\u001b[8;10H\u001b[0;38;2;245;247;238;48;2;107;120;88msdm.pdf \u001b[0m\u001b[7;10H\u001b[?25h"]
+[8.9, "o", "\u001b[3;1H\u001b[0;38;2;255;255;255;48;2;73;102;86m \u001b[0;39;48;2;29;40;36m \u001b[0;38;2;178;195;184;48;2;29;40;36m/tmp/cast/art/\u001b[0;38;2;211;176;217;48;2;29;40;36mREADME\u001b[0;38;2;178;195;184;48;2;29;40;36m Save Tty Collapse Del\u001b[0;39;48;2;29;40;36m \u001b[7;3H\u001b[0;38;2;89;103;92;48;2;13;20;16m 4 \u001b[8;1H\u001b[0;39;48;2;21;32;25m \u001b[8;10H\u001b[0;38;2;229;238;229;48;2;13;20;16msdm.pdf \u001b[9;1H\u001b[0;38;2;0;0;0;48;2;173;211;138m \u001b[0;39;48;2;49;71;56m \u001b[0;38;2;190;207;196;48;2;49;71;56m/home/goblin/01-resources/\u001b[0;38;2;223;188;229;48;2;49;71;56mintel-devref-ii.pdf\u001b[0;38;2;190;207;196;48;2;49;71;56m [1/2515] Tty PdfSections PdfTint Collapse Del\u001b[0;39;48;2;49;71;56m \u001b[10;3H\u001b[0;38;2;229;238;229;48;2;13;20;16mIntel®\u001b[10;10H64\u001b[10;13Hand\u001b[10;17HIA-32\u001b[10;23HArchitectures\u001b[11;1H\u001b[0;39;48;2;21;32;25m \u001b[11;3H\u001b[0;38;2;229;238;229;48;2;13;20;16mSoftware\u001b[11;12HDeveloper’s\u001b[11;24HManual\u001b[12;1H\u001b[0;39;48;2;21;32;25m \u001b[12;3H\u001b[0;38;2;229;238;229;48;2;13;20;16mVolume\u001b[12;10H2\u001b[12;12H(2A,\u001b[12;17H2B,\u001b[12;21H2C,\u001b[12;25H&\u001b[12;27H2D):\u001b[13;1H\u001b[0;39;48;2;21;32;25m \u001b[13;3H\u001b[0;38;2;229;238;229;48;2;13;20;16mInstruction\u001b[13;15HSet\u001b[13;19HReference,\u001b[13;30HA-Z\u001b[14;1H\u001b[0;39;48;2;21;32;25m \u001b[14;3H\u001b[0;38;2;229;238;229;48;2;13;20;16mNOTE:\u001b[14;9HThe\u001b[14;13HIntel\u001b[14;19H64\u001b[14;22Hand\u001b[14;26HIA-32\u001b[14;32HArchitectures\u001b[14;46HSoftware\u001b[14;55HDeveloper's\u001b[14;67HManual\u001b[14;74Hconsists\u001b[14;83Hof\u001b[14;86Hfour\u001b[14;91Hvolumes:\u001b[15;1H\u001b[0;39;48;2;21;32;25m \u001b[15;3H\u001b[0;38;2;229;238;229;48;2;13;20;16mBasic\u001b[15;9HArchitecture,\u001b[15;23HOrder\u001b[15;29HNumber\u001b[15;36H253665;\u001b[15;44HInstruction\u001b[15;56HSet\u001b[15;60HReference,\u001b[15;71HA-Z,\u001b[15;76HOrder\u001b[15;82HNumber\u001b[15;89H325383;\u001b[16;1H\u001b[0;39;48;2;21;32;25m \u001b[16;3H\u001b[0;38;2;229;238;229;48;2;13;20;16mSystem\u001b[16;10HProgramming\u001b[16;22HGuide,\u001b[16;29HOrder\u001b[16;35HNumber\u001b[16;42H325384;\u001b[16;50HModel-Specific\u001b[16;65HRegisters,\u001b[16;76HOrder\u001b[16;82HNumber\u001b[17;1H\u001b[0;39;48;2;21;32;25m \u001b[17;3H\u001b[0;38;2;229;238;229;48;2;13;20;16m335592.\u001b[17;11HRefer\u001b[17;17Hto\u001b[17;20Hall\u001b[17;24Hfour\u001b[17;29Hvolumes\u001b[17;37Hwhen\u001b[17;42Hevaluating\u001b[17;53Hyour\u001b[17;58Hdesign\u001b[17;65Hneeds.\u001b[18;1H\u001b[0;39;48;2;21;32;25m \u001b[18;3H\u001b[0;38;2;229;238;229;48;2;13;20;16mOrder\u001b[18;9HNumber:\u001b[18;18H325383-084US\u001b[19;1H\u001b[0;39;48;2;21;32;25m \u001b[19;3H\u001b[0;38;2;229;238;229;48;2;13;20;16mJune\u001b[19;8H2024\u001b[20;1H\u001b[0;39;48;2;21;32;25m \u001b[21;1H \u001b[22;1H \u001b[23;1H \u001b[24;1H \u001b[25;1H \u001b[26;1H \u001b[27;1H \u001b[28;1H \u001b[29;1H \u001b[30;1H \u001b[0m\u001b[10;3H\u001b[?25h"]
+[10.4, "o", "\u001b[9;63H\u001b[0;38;2;245;247;238;48;2;91;126;90mPdfSections \u001b[0m\u001b[10;3H\u001b[?25h"]
+[10.9, "o", "\u001b[9;63H\u001b[0;38;2;190;207;196;48;2;49;71;56mPdfSections \u001b[10;88H\u001b[0;39;48;2;29;40;36m \u001b[0;38;2;178;195;184;48;2;29;40;36mPdfSections\u001b[0;39;48;2;29;40;36m \u001b[19;3H\u001b[0;39;48;2;13;20;16m \u001b[19;8H \u001b[20;1H\u001b[0;38;2;255;255;255;48;2;73;102;86m \u001b[0;39;48;2;29;40;36m \u001b[0;38;2;178;195;184;48;2;29;40;36m/home/goblin/01-resources/\u001b[0;38;2;211;176;217;48;2;29;40;36m+PdfSections\u001b[0;38;2;178;195;184;48;2;29;40;36m Save Tty Collapse Del LocationsConfig\u001b[0;39;48;2;29;40;36m \u001b[21;1H\u001b[0;39;48;2;96;130;105m \u001b[21;6H\u001b[0;38;2;89;103;92;48;2;13;20;16m1\u001b[21;8Hintel-devref-ii.pdf:29:1\u001b[21;33H\u001b[0;38;2;229;238;229;48;2;13;20;16mChapter\u001b[21;41H1\u001b[21;43HAbout\u001b[21;49HThis\u001b[21;54HManual\u001b[22;6H\u001b[0;38;2;89;103;92;48;2;13;20;16m2\u001b[22;8Hintel-devref-ii.pdf:29:2\u001b[22;35H\u001b[0;38;2;229;238;229;48;2;13;20;16m1.1\u001b[22;39HOverview\u001b[22;48Hof\u001b[22;51HVolume\u001b[22;58H2A,\u001b[22;62H2B,\u001b[22;66H2C,\u001b[22;70Hand\u001b[22;74H2D:\u001b[22;78HInstruction\u001b[22;90HSet\u001b[22;94HRefere\u001b[0;38;2;89;103;92;48;2;13;20;16m↩\u001b[23;8H\u001b[0;38;2;229;238;229;48;2;13;20;16mnce\u001b[24;6H\u001b[0;38;2;89;103;92;48;2;13;20;16m3\u001b[24;8Hintel-devref-ii.pdf:31:3\u001b[24;33H\u001b[0;38;2;229;238;229;48;2;13;20;16mChapter\u001b[24;41H2\u001b[24;43HInstruction\u001b[24;55HFormat\u001b[25;6H\u001b[0;38;2;89;103;92;48;2;13;20;16m4\u001b[25;8Hintel-devref-ii.pdf:31:4\u001b[25;35H\u001b[0;38;2;229;238;229;48;2;13;20;16m2.1\u001b[25;39HInstruction\u001b[25;51HFormat\u001b[25;58Hfor\u001b[25;62HProtected\u001b[25;72HMode,\u001b[25;78Hreal-address\u001b[25;91HMode,\u001b[25;97Hand\u001b[0;38;2;89;103;92;48;2;13;20;16m↩\u001b[26;9H\u001b[0;38;2;229;238;229;48;2;13;20;16mvirtual-8086\u001b[26;22Hmode\u001b[27;6H\u001b[0;38;2;89;103;92;48;2;13;20;16m5\u001b[27;8Hintel-devref-ii.pdf:31:5\u001b[27;37H\u001b[0;38;2;229;238;229;48;2;13;20;16m2.1.1\u001b[27;43HInstruction\u001b[27;55HPrefixes\u001b[28;6H\u001b[0;38;2;89;103;92;48;2;13;20;16m6\u001b[28;8Hintel-devref-ii.pdf:33:6\u001b[28;37H\u001b[0;38;2;229;238;229;48;2;13;20;16m2.1.2\u001b[28;43HOpcodes\u001b[29;6H\u001b[0;38;2;89;103;92;48;2;13;20;16m7\u001b[29;8Hintel-devref-ii.pdf:33:7\u001b[29;37H\u001b[0;38;2;229;238;229;48;2;13;20;16m2.1.3\u001b[29;43HModR/M\u001b[29;50Hand\u001b[29;54HSIB\u001b[29;58HBytes\u001b[30;6H\u001b[0;38;2;89;103;92;48;2;13;20;16m8\u001b[30;8Hintel-devref-ii.pdf:33:8\u001b[30;37H\u001b[0;38;2;229;238;229;48;2;13;20;16m2.1.4\u001b[30;43HDisplacement\u001b[30;56Hand\u001b[30;60HImmediate\u001b[30;70HBytes\u001b[0m\u001b[10;3H\u001b[?25h"]
+[12.2, "o", "\u001b[9;1H\u001b[0;38;2;255;255;255;48;2;73;102;86m \u001b[0;39;48;2;29;40;36m \u001b[0;38;2;178;195;184;48;2;29;40;36m/home/goblin/01-resources/\u001b[0;38;2;211;176;217;48;2;29;40;36mintel-devref-ii.pdf\u001b[0;38;2;178;195;184;48;2;29;40;36m [1/2515] Tty PdfSections PdfTint Collapse Del\u001b[0;39;48;2;29;40;36m \u001b[10;88H\u001b[0;39;48;2;13;20;16m \u001b[20;1H\u001b[0;38;2;0;0;0;48;2;173;211;138m \u001b[0;39;48;2;49;71;56m \u001b[0;38;2;190;207;196;48;2;49;71;56m/home/goblin/01-resources/\u001b[0;38;2;223;188;229;48;2;49;71;56m+PdfSections\u001b[0;38;2;190;207;196;48;2;49;71;56m Save Tty Collapse Del LocationsConfig\u001b[0;39;48;2;49;71;56m \u001b[0m\u001b[20;80H\u001b[?25h"]
+[12.5, "o", "\u001b[0m\u001b[20;81H\u001b[?25h"]
+[12.59, "o", "\u001b[20;81H\u001b[0;38;2;190;207;196;48;2;49;71;56mC\u001b[0m\u001b[20;82H\u001b[?25h"]
+[12.68, "o", "\u001b[20;82H\u001b[0;38;2;190;207;196;48;2;49;71;56mP\u001b[0m\u001b[20;83H\u001b[?25h"]
+[12.77, "o", "\u001b[20;83H\u001b[0;38;2;190;207;196;48;2;49;71;56mU\u001b[0m\u001b[20;84H\u001b[?25h"]
+[12.86, "o", "\u001b[20;84H\u001b[0;38;2;190;207;196;48;2;49;71;56mI\u001b[0m\u001b[20;85H\u001b[?25h"]
+[12.95, "o", "\u001b[20;85H\u001b[0;38;2;190;207;196;48;2;49;71;56mD\u001b[0m\u001b[20;86H\u001b[?25h"]
+[13.65, "o", "\u001b[20;81H\u001b[0;38;2;245;247;238;48;2;107;120;88mCPUID \u001b[0m\u001b[20;86H\u001b[?25h"]
+[14.05, "o", "\u001b[20;81H\u001b[0;38;2;190;207;196;48;2;49;71;56mCPUID\u001b[0;39;48;2;49;71;56m \u001b[21;5H\u001b[0;38;2;89;103;92;48;2;13;20;16m95\u001b[21;28H103:95\u001b[0;38;2;229;238;229;48;2;13;20;16m \u001b[21;41H3.1.1.2\u001b[21;49HOpcode Column\u001b[21;63Hin\u001b[21;66Hthe\u001b[21;70HInstruction\u001b[21;82HSummary\u001b[21;90HTable\u001b[21;96H(Ins\u001b[0;38;2;89;103;92;48;2;13;20;16m↩\u001b[22;6H \u001b[22;8H\u001b[0;38;2;229;238;229;48;2;13;20;16mtructions with VEX prefix)\u001b[22;35H\u001b[0;39;48;2;13;20;16m \u001b[22;39H \u001b[22;48H \u001b[22;51H \u001b[22;58H \u001b[22;62H \u001b[22;66H \u001b[22;70H \u001b[22;74H \u001b[22;78H \u001b[22;90H \u001b[22;94H \u001b[23;5H\u001b[0;38;2;89;103;92;48;2;13;20;16m96\u001b[23;8Hintel-devref-ii.pdf:105:96\u001b[23;41H\u001b[0;38;2;229;238;229;48;2;13;20;16m3.1.1.3\u001b[23;49HInstruction\u001b[23;61HColumn\u001b[23;68Hin\u001b[23;71Hthe\u001b[23;75HOpcode\u001b[23;82HSummary\u001b[23;90HTable\u001b[24;5H\u001b[0;38;2;89;103;92;48;2;13;20;16m97\u001b[24;28H108:97\u001b[0;38;2;229;238;229;48;2;13;20;16m \u001b[24;41H3.1.1.4 Operand Encoding\u001b[24;66HColumn\u001b[24;73Hin\u001b[24;76Hthe\u001b[24;80HInstruction\u001b[24;92HSummary\u001b[24;100H\u001b[0;38;2;89;103;92;48;2;13;20;16m↩\u001b[25;6H \u001b[25;8H\u001b[0;38;2;229;238;229;48;2;13;20;16mTable\u001b[0;39;48;2;13;20;16m \u001b[25;35H \u001b[25;39H \u001b[25;51H \u001b[25;58H \u001b[25;62H \u001b[25;72H \u001b[25;78H \u001b[25;91H \u001b[25;97H \u001b[26;5H\u001b[0;38;2;89;103;92;48;2;13;20;16m98\u001b[26;8Hintel-devref-ii.pdf:108:98\u001b[26;41H\u001b[0;38;2;229;238;229;48;2;13;20;16m3.1.1.5\u001b[26;49H64/32-bit\u001b[26;59HMode\u001b[26;64HColumn\u001b[26;71Hin\u001b[26;74Hthe\u001b[26;78HInstruction\u001b[26;90HSummary\u001b[26;98HTa\u001b[0;38;2;89;103;92;48;2;13;20;16m↩\u001b[27;6H \u001b[27;8H\u001b[0;38;2;229;238;229;48;2;13;20;16mble\u001b[0;39;48;2;13;20;16m \u001b[27;37H \u001b[27;43H \u001b[27;55H \u001b[28;5H\u001b[0;38;2;89;103;92;48;2;13;20;16m99\u001b[28;28H109:99\u001b[28;37H\u001b[0;38;2;229;238;229;48;2;13;20;16m 3.1.1.6 \u001b[0;38;2;245;247;238;48;2;60;97;74mCPUID\u001b[28;55H\u001b[0;38;2;229;238;229;48;2;13;20;16mSupport\u001b[28;63HColumn\u001b[28;70Hin\u001b[28;73Hthe\u001b[28;77HInstruction\u001b[28;89HSummary\u001b[28;97HTab\u001b[0;38;2;89;103;92;48;2;13;20;16m↩\u001b[29;6H \u001b[29;8H\u001b[0;38;2;229;238;229;48;2;13;20;16mle\u001b[0;39;48;2;13;20;16m \u001b[29;37H \u001b[29;43H \u001b[29;50H \u001b[29;54H \u001b[29;58H \u001b[30;4H\u001b[0;38;2;89;103;92;48;2;13;20;16m100\u001b[30;28H109:100\u001b[30;37H\u001b[0;38;2;229;238;229;48;2;13;20;16m 3.1.1.7 Description Column in \u001b[30;73Hhe\u001b[30;76HInstruction\u001b[30;88HSummary\u001b[30;96HTabl\u001b[0m\u001b[20;86H\u001b[?25h"]
+[14.95, "o", "\u001b[20;81H\u001b[0;38;2;245;247;238;48;2;107;120;88mCPUID \u001b[0m\u001b[20;86H\u001b[?25h"]
+[15.35, "o", "\u001b[20;81H\u001b[0;38;2;190;207;196;48;2;49;71;56mCPUID\u001b[0;39;48;2;49;71;56m \u001b[21;1H\u001b[0;39;48;2;21;32;25m \u001b[21;4H\u001b[0;38;2;89;103;92;48;2;13;20;16m1\u001b[21;6H7\u001b[21;28H310\u001b[21;32H197\u001b[21;40H\u001b[0;38;2;229;238;229;48;2;13;20;16mCMPXCHG8B/CMPXCHG16B—Compare and Exchange\u001b[21;82HBytes\u001b[0;39;48;2;13;20;16m \u001b[21;90H \u001b[21;96H \u001b[22;1H\u001b[0;39;48;2;96;130;105m \u001b[22;4H\u001b[0;38;2;89;103;92;48;2;13;20;16m198\u001b[22;8Hintel-devref-ii.pdf:313:198\u001b[22;40H\u001b[0;38;2;229;238;229;48;2;13;20;16mCOMISD—Compare\u001b[22;55HScalar\u001b[22;62HOrdered\u001b[22;70HDouble\u001b[22;77HPrecision\u001b[22;87HFloating-Poin\u001b[0;38;2;89;103;92;48;2;13;20;16m↩\u001b[23;5H \u001b[23;8H\u001b[0;38;2;229;238;229;48;2;13;20;16mt Values and Set EFLAGS\u001b[0;39;48;2;13;20;16m \u001b[23;41H \u001b[23;49H \u001b[23;61H \u001b[23;68H \u001b[23;71H \u001b[23;75H \u001b[23;82H \u001b[23;90H \u001b[24;4H\u001b[0;38;2;89;103;92;48;2;13;20;16m1\u001b[24;6H9\u001b[24;28H315\u001b[24;32H199\u001b[24;40H\u001b[0;38;2;229;238;229;48;2;13;20;16mCOMISS—Com\u001b[24;51Ha\u001b[24;53He Scalar Ordered Single Preci\u001b[24;83Hion Fl\u001b[24;90Hating-Poin\u001b[25;8Ht Values\u001b[25;17Hand\u001b[25;21HSet\u001b[25;25HEFLAGS\u001b[26;4H\u001b[0;38;2;89;103;92;48;2;13;20;16m200\u001b[26;28H317\u001b[26;32H200\u001b[26;40H\u001b[0;38;2;245;247;238;48;2;60;97;74mCPUID\u001b[0;38;2;229;238;229;48;2;13;20;16m—CPU Identification\u001b[0;39;48;2;13;20;16m \u001b[26;71H \u001b[26;74H \u001b[26;78H \u001b[26;90H \u001b[26;98H \u001b[27;4H\u001b[0;38;2;89;103;92;48;2;13;20;16m201\u001b[27;8Hintel-devref-ii.pdf:318:201\u001b[27;42H\u001b[0;38;2;229;238;229;48;2;13;20;16mBasic\u001b[27;48HCPUID\u001b[27;54HInformation\u001b[28;4H\u001b[0;38;2;89;103;92;48;2;13;20;16m202\u001b[28;28H318\u001b[28;32H202\u001b[28;41H\u001b[0;38;2;229;238;229;48;2;13;20;16m 0H\u001b[0;39;48;2;13;20;16m \u001b[28;49H \u001b[28;55H \u001b[28;63H \u001b[28;70H \u001b[28;73H \u001b[28;77H \u001b[28;89H \u001b[28;97H \u001b[29;4H\u001b[0;38;2;89;103;92;48;2;13;20;16m203\u001b[29;8Hintel-devref-ii.pdf:318:203\u001b[29;44H\u001b[0;38;2;229;238;229;48;2;13;20;16m01H\u001b[30;4H\u001b[0;38;2;89;103;92;48;2;13;20;16m2\u001b[30;6H4\u001b[30;28H318\u001b[30;32H2\u001b[30;34H4\u001b[30;42H\u001b[0;38;2;229;238;229;48;2;13;20;16m 02H\u001b[0;39;48;2;13;20;16m \u001b[30;50H \u001b[30;62H \u001b[30;69H \u001b[30;72H \u001b[30;76H \u001b[30;88H \u001b[30;96H \u001b[0m\u001b[20;86H\u001b[?25h"]
+[16.25, "o", "\u001b[26;8H\u001b[0;38;2;245;247;238;48;2;107;120;88mintel-devref-ii.pdf:317:\u001b[0m\u001b[20;86H\u001b[?25h"]
+[16.75, "o", "\u001b[9;1H\u001b[0;38;2;0;0;0;48;2;173;211;138m \u001b[0;39;48;2;49;71;56m \u001b[0;38;2;190;207;196;48;2;49;71;56m/home/goblin/01-resources/\u001b[0;38;2;223;188;229;48;2;49;71;56mintel-devref-ii.pdf\u001b[0;38;2;190;207;196;48;2;49;71;56m [317/2515] Tty PdfSections PdfTint Collapse Del\u001b[0;39;48;2;49;71;56m \u001b[10;1H\u001b[0;39;48;2;21;32;25m \u001b[10;3H\u001b[0;38;2;229;238;229;48;2;13;20;16mCPUID—CPU\u001b[10;13HIdentification\u001b[0;39;48;2;13;20;16m \u001b[11;1H\u001b[0;39;48;2;96;130;105m \u001b[11;3H\u001b[0;38;2;229;238;229;48;2;13;20;16mV\u001b[11;5Hl. 2A 3-217\u001b[0;39;48;2;13;20;16m \u001b[11;24H \u001b[12;3H\u001b[0;38;2;229;238;229;48;2;13;20;16mCPUID—CPU Identification\u001b[0;39;48;2;13;20;16m \u001b[13;15H\u001b[0;38;2;229;238;229;48;2;13;20;16mOperand Encoding\u001b[0;39;48;2;13;20;16m \u001b[14;3H\u001b[0;38;2;229;238;229;48;2;13;20;16mDescription\u001b[0;39;48;2;13;20;16m \u001b[14;19H \u001b[14;22H \u001b[14;26H \u001b[14;32H \u001b[14;46H \u001b[14;55H \u001b[14;67H \u001b[14;74H \u001b[14;83H \u001b[14;86H \u001b[14;91H \u001b[15;3H\u001b[0;38;2;229;238;229;48;2;13;20;16mThe ID flag (bit 21) in the EFLAGS register indicates support for the CPUID instruction. If a\u001b[15;97Hsoft\u001b[16;3Hset and clear this\u001b[16;22Hflag, the p\u001b[16;34Hocesso\u001b[16;42Hexecuting the pro\u001b[16;60Hedure support\u001b[16;74H the CPUID instruction.\u001b[16;98HThi\u001b[17;3Hoperates th\u001b[17;15H same in\u001b[17;24Hn\u001b[17;26Hn-64-bit modes and 64-b\u001b[17;50Ht mode.\u001b[17;58H\u001b[0;39;48;2;13;20;16m \u001b[17;65H \u001b[18;3H\u001b[0;38;2;229;238;229;48;2;13;20;16mCPUID\u001b[18;9Hreturns\u001b[18;17Hprocessor identification\u001b[18;42Hand\u001b[18;46Hfeature\u001b[18;54Hinformation\u001b[18;66Hin\u001b[18;69Hthe\u001b[18;73HEAX,\u001b[18;78HEBX,\u001b[18;83HECX,\u001b[18;88Hand\u001b[18;92HEDX\u001b[18;96Hregis\u001b[20;1H\u001b[0;38;2;255;255;255;48;2;73;102;86m \u001b[0;39;48;2;29;40;36m \u001b[0;38;2;178;195;184;48;2;29;40;36m/home/goblin/01-resources/\u001b[0;38;2;211;176;217;48;2;29;40;36m+PdfSections\u001b[0;38;2;178;195;184;48;2;29;40;36m Save Tty Collapse Del LocationsConfig CPUID\u001b[0;39;48;2;29;40;36m \u001b[26;8H\u001b[0;38;2;245;247;238;48;2;60;97;74mintel-devref-ii.pdf:317:200 \u001b[26;41H\u001b[0;38;2;229;238;229;48;2;13;20;16mPUID\u001b[0m\u001b[10;3H\u001b[?25h"]
+[18.55, "o", "\u001b[20;61H\u001b[0;38;2;245;247;238;48;2;91;126;90mDel \u001b[0m\u001b[10;3H\u001b[?25h"]
+[18.95, "o", "\u001b[11;1H\u001b[0;39;48;2;21;32;25m \u001b[12;1H\u001b[0;39;48;2;96;130;105m \u001b[19;3H\u001b[0;38;2;229;238;229;48;2;13;20;16minstruction’s\u001b[19;17Houtput\u001b[19;24His\u001b[19;27Hdependent\u001b[19;37Hon\u001b[19;40Hthe\u001b[19;44Hcontents\u001b[19;53Hof\u001b[19;56Hthe\u001b[19;60HEAX\u001b[19;64Hregister\u001b[19;73Hupon\u001b[19;78Hexecution\u001b[19;88H(in\u001b[19;92Hsome\u001b[19;97Hcase\u001b[20;1H\u001b[0;39;48;2;21;32;25m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;229;238;229;48;2;13;20;16mFor example, the following pseudocode loads EAX with 00H and causes CPUID to return a Maximum Retu\u001b[21;3Hand the Vendor Identification String\u001b[21;40Hin the appropriate registe\u001b[21;67Hs:\u001b[0;39;48;2;13;20;16m \u001b[21;73H \u001b[21;82H \u001b[22;1H\u001b[0;39;48;2;21;32;25m \u001b[22;3H\u001b[0;38;2;229;238;229;48;2;13;20;16mMOV EAX, 00H\u001b[0;39;48;2;13;20;16m \u001b[22;40H \u001b[22;55H \u001b[22;62H \u001b[22;70H \u001b[22;77H \u001b[22;87H \u001b[23;3H\u001b[0;38;2;229;238;229;48;2;13;20;16mCPUID\u001b[0;39;48;2;13;20;16m \u001b[23;10H \u001b[23;17H \u001b[23;21H \u001b[23;25H \u001b[24;3H\u001b[0;38;2;229;238;229;48;2;13;20;16mTable 3-17 shows information returned, depending on\u001b[24;55Hthe initial value loaded into the EAX register\u001b[25;3HTwo\u001b[25;7Htypes of informa\u001b[25;24Hion are\u001b[25;32Hreturned:\u001b[25;42Hbasic\u001b[25;48Hand\u001b[25;52Hextended\u001b[25;61Hfunction\u001b[25;70Hinformation.\u001b[25;83HIf\u001b[25;86Ha\u001b[25;88Hvalue\u001b[25;94Hentered\u001b[26;3His higher than the maximum input value for basic or extended function\u001b[26;73Hfor\u001b[26;77Hthat\u001b[26;82Hprocessor\u001b[26;92Hthen\u001b[26;97Hthe\u001b[27;3Hhighest basic information leaf is\u001b[27;37Hreturned. For example, us\u001b[27;63Hng\u001b[27;66Hsome\u001b[27;71HIntel\u001b[27;77Hprocessors,\u001b[27;89Hthe\u001b[27;93Hfollowin\u001b[28;3HCPUID.EAX = 05H (* Returns MONITOR/MWAIT\u001b[28;44Hleaf.\u001b[28;50H*)\u001b[29;3HCPUID.EAX = 0AH (* Returns Architectural\u001b[29;44HPerformance\u001b[29;56HMonitoring\u001b[29;67Hleaf.\u001b[29;73H*)\u001b[30;4H\u001b[0;39;48;2;13;20;16m \u001b[30;8H \u001b[30;44H \u001b[0m\u001b[10;3H\u001b[?25h"]
+[19.75, "o", "\u001b[0m\u001b[13;3H\u001b[?25h"]
+[20.05, "o", "\u001b[10;97H\u001b[0;39;48;2;29;40;36m \u001b[0;38;2;178;195;184;48;2;29;40;36m /\u001b[0;39;48;2;29;40;36m \u001b[0m\u001b[10;100H\u001b[?25h"]
+[20.35, "o", "\u001b[10;96H\u001b[0;39;48;2;29;40;36m \u001b[10;98H\u001b[0;38;2;178;195;184;48;2;29;40;36m/b\u001b[0m\u001b[10;100H\u001b[?25h"]
+[20.44, "o", "\u001b[10;95H\u001b[0;39;48;2;29;40;36m \u001b[10;97H\u001b[0;38;2;178;195;184;48;2;29;40;36m/bi\u001b[0m\u001b[10;100H\u001b[?25h"]
+[20.53, "o", "\u001b[10;94H\u001b[0;39;48;2;29;40;36m \u001b[10;96H\u001b[0;38;2;178;195;184;48;2;29;40;36m/bit\u001b[0m\u001b[10;100H\u001b[?25h"]
+[20.62, "o", "\u001b[10;93H\u001b[0;39;48;2;29;40;36m \u001b[10;95H\u001b[0;38;2;178;195;184;48;2;29;40;36m/bit \u001b[0m\u001b[10;100H\u001b[?25h"]
+[20.71, "o", "\u001b[10;92H\u001b[0;39;48;2;29;40;36m \u001b[10;94H\u001b[0;38;2;178;195;184;48;2;29;40;36m/bit 2\u001b[0m\u001b[10;100H\u001b[?25h"]
+[20.8, "o", "\u001b[10;91H\u001b[0;39;48;2;29;40;36m \u001b[10;93H\u001b[0;38;2;178;195;184;48;2;29;40;36m/bit 21\u001b[0m\u001b[10;100H\u001b[?25h"]
+[21.1, "o", "\u001b[10;91H\u001b[0;39;48;2;13;20;16m \u001b[11;1H\u001b[0;39;48;2;96;130;105m \u001b[12;1H\u001b[0;39;48;2;21;32;25m \u001b[19;3H\u001b[0;39;48;2;13;20;16m \u001b[19;17H \u001b[19;24H \u001b[19;27H \u001b[19;37H \u001b[19;40H \u001b[19;44H \u001b[19;53H \u001b[19;56H \u001b[19;60H \u001b[19;64H \u001b[19;73H \u001b[19;78H \u001b[19;88H \u001b[19;92H \u001b[19;97H \u001b[20;1H\u001b[0;38;2;255;255;255;48;2;73;102;86m \u001b[0;39;48;2;29;40;36m \u001b[0;38;2;178;195;184;48;2;29;40;36m/home/goblin/01-resources/\u001b[0;38;2;211;176;217;48;2;29;40;36m+Search\u001b[0;38;2;178;195;184;48;2;29;40;36m Save Tty Collapse Del LocationsConfig\u001b[0;39;48;2;29;40;36m \u001b[21;1H\u001b[0;39;48;2;96;130;105m \u001b[21;3H\u001b[0;38;2;89;103;92;48;2;13;20;16m 1 intel-devref-ii.pdf:317:1\u001b[0;39;48;2;13;20;16m \u001b[21;40H \u001b[21;43H \u001b[21;47H \u001b[21;59H \u001b[22;1H\u001b[0;39;48;2;96;130;105m \u001b[22;3H\u001b[0;38;2;89;103;92;48;2;13;20;16m 2 \u001b[0;38;2;229;238;229;48;2;13;20;16mbit\u001b[22;12H21\u001b[0;39;48;2;13;20;16m \u001b[23;1H\u001b[0;39;48;2;96;130;105m \u001b[23;3H\u001b[0;38;2;89;103;92;48;2;13;20;16m 3 intel-devref-ii.pdf:320:1\u001b[24;1H\u001b[0;39;48;2;96;130;105m \u001b[24;3H\u001b[0;38;2;89;103;92;48;2;13;20;16m 4 \u001b[0;38;2;229;238;229;48;2;13;20;16mbit 21\u001b[0;39;48;2;13;20;16m \u001b[24;20H \u001b[24;32H \u001b[24;42H \u001b[24;52H \u001b[24;55H \u001b[24;59H \u001b[24;67H \u001b[24;73H \u001b[24;80H \u001b[24;85H \u001b[24;89H \u001b[24;93H \u001b[25;1H\u001b[0;39;48;2;96;130;105m \u001b[25;3H\u001b[0;38;2;89;103;92;48;2;13;20;16m 5 intel-devref-ii.pdf:321:1\u001b[0;39;48;2;13;20;16m \u001b[25;42H \u001b[25;48H \u001b[25;52H \u001b[25;61H \u001b[25;70H \u001b[25;83H \u001b[25;86H \u001b[25;88H \u001b[25;94H \u001b[26;1H\u001b[0;39;48;2;96;130;105m \u001b[26;3H\u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[26;6H6 \u001b[0;38;2;229;238;229;48;2;13;20;16mbit 21\u001b[0;39;48;2;13;20;16m \u001b[26;18H \u001b[26;22H \u001b[26;30H \u001b[26;36H \u001b[26;42H \u001b[26;46H \u001b[26;52H \u001b[26;55H \u001b[26;64H \u001b[26;73H \u001b[26;77H \u001b[26;82H \u001b[26;92H \u001b[26;97H \u001b[27;1H\u001b[0;39;48;2;96;130;105m \u001b[27;3H\u001b[0;38;2;89;103;92;48;2;13;20;16m 7 intel-devref-ii.pdf:323:1\u001b[27;34H\u001b[0;39;48;2;13;20;16m \u001b[27;37H \u001b[27;47H \u001b[27;51H \u001b[27;60H \u001b[27;66H \u001b[27;71H \u001b[27;77H \u001b[27;89H \u001b[27;93H \u001b[28;1H\u001b[0;39;48;2;96;130;105m \u001b[28;3H\u001b[0;38;2;89;103;92;48;2;13;20;16m 8 \u001b[0;38;2;229;238;229;48;2;13;20;16mbit 21\u001b[28;15H\u001b[0;39;48;2;13;20;16m \u001b[28;19H \u001b[28;22H \u001b[28;30H \u001b[28;44H \u001b[28;50H \u001b[29;1H\u001b[0;39;48;2;96;130;105m \u001b[29;3H\u001b[0;38;2;89;103;92;48;2;13;20;16m 9 intel-devref-ii.pdf:684:1\u001b[0;39;48;2;13;20;16m \u001b[29;44H \u001b[29;56H \u001b[29;67H \u001b[29;73H \u001b[30;5H\u001b[0;38;2;89;103;92;48;2;13;20;16m10\u001b[30;8H\u001b[0;38;2;229;238;229;48;2;13;20;16mbit\u001b[30;12H21\u001b[0m\u001b[13;3H\u001b[?25h"]
+[23.1, "o", ""]
diff --git a/docs/site/casts/terminals.cast b/docs/site/casts/terminals.cast
new file mode 100644
index 00000000..bac022a2
--- /dev/null
+++ b/docs/site/casts/terminals.cast
@@ -0,0 +1,59 @@
+{"version": 2, "width": 100, "height": 30, "title": "Terminals as panes", "env": {"TERM": "xterm-256color", "SHELL": "/bin/sh"}}
+[0.0, "o", "\u001b[?25l\u001b[0m\u001b[2J\u001b[1;1H\u001b[0;38;2;178;195;184;48;2;29;40;36mNewcol Joincol Find Grep Help Changelog Tutor Dump Themes Config Debug Exit\u001b[0;39;48;2;29;40;36m \u001b[2;1H\u001b[0;38;2;255;255;255;48;2;136;116;85m \u001b[0;39;48;2;49;71;56m \u001b[0;38;2;190;207;196;48;2;49;71;56mNew Tty Find Grep Joincol Delcol\u001b[0;39;48;2;49;71;56m \u001b[3;1H\u001b[0;38;2;0;0;0;48;2;173;211;138m \u001b[0;39;48;2;49;71;56m \u001b[0;38;2;190;207;196;48;2;49;71;56m/tmp/cast/hello/\u001b[0;38;2;223;188;229;48;2;49;71;56mNOTES\u001b[0;38;2;190;207;196;48;2;49;71;56m Save Tty Collapse Del\u001b[0;39;48;2;49;71;56m \u001b[4;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;97;111;100;48;2;13;20;16;1m 1 \u001b[0;38;2;229;238;229;48;2;13;20;16mhello: notes\u001b[0;39;48;2;13;20;16m \u001b[5;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m 2 \u001b[0;39;48;2;13;20;16m \u001b[6;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m 3 \u001b[0;38;2;229;238;229;48;2;13;20;16mThe sum of the squares of 1 to 4 is 30.\u001b[0;39;48;2;13;20;16m \u001b[7;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m 4 \u001b[0;38;2;229;238;229;48;2;13;20;16mWhat ./hello prints:\u001b[0;39;48;2;13;20;16m \u001b[8;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m 5 \u001b[0;39;48;2;13;20;16m \u001b[9;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m 6 \u001b[0;39;48;2;13;20;16m \u001b[10;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[11;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[12;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[13;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[14;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[15;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[16;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[17;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[18;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[19;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[20;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[21;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[22;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[23;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[24;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[25;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[26;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[27;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[28;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[29;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[30;1H\u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[0;39;48;2;13;20;16m \u001b[0m\u001b[4;8H\u001b[?25h"]
+[1.2, "o", "\u001b[3;31H\u001b[0;38;2;245;247;238;48;2;91;126;90mTty \u001b[0m\u001b[4;8H\u001b[?25h"]
+[1.7, "o", "\u001b[3;1H\u001b[0;38;2;255;255;255;48;2;73;102;86m \u001b[0;39;48;2;29;40;36m \u001b[0;38;2;178;195;184;48;2;29;40;36m/tmp/cast/hello/\u001b[0;38;2;211;176;217;48;2;29;40;36mNOTES\u001b[0;38;2;178;195;184;48;2;29;40;36m Save Tty Collapse Del\u001b[0;39;48;2;29;40;36m \u001b[4;3H\u001b[0;38;2;89;103;92;48;2;13;20;16m 1 \u001b[4;96H\u001b[0;39;48;2;29;40;36m \u001b[0;38;2;178;195;184;48;2;29;40;36mTty\u001b[0;39;48;2;29;40;36m \u001b[8;1H\u001b[0;39;48;2;21;32;25m \u001b[9;1H\u001b[0;38;2;0;0;0;48;2;173;211;138m$ \u001b[0;39;48;2;49;71;56m \u001b[0;38;2;190;207;196;48;2;49;71;56m/tmp/cast/hello \u001b[0;38;2;223;188;229;48;2;49;71;56mTty+sh\u001b[0;38;2;190;207;196;48;2;49;71;56m Save Mode Filter Collapse Del\u001b[0;39;48;2;49;71;56m \u001b[10;3H\u001b[0;38;2;229;238;229;48;2;13;20;16m$\u001b[0m\u001b[10;5H\u001b[?25h"]
+[2.7, "o", "\u001b[4;96H\u001b[0;39;48;2;13;20;16m \u001b[9;1H\u001b[0;38;2;0;0;0;48;2;173;211;138m \u001b[0m\u001b[10;5H\u001b[?25h"]
+[3.0, "o", "\u001b[2;3H\u001b[0;39;48;2;29;40;36m \u001b[0;38;2;178;195;184;48;2;29;40;36mNew Tty Find Grep Joincol Delcol\u001b[0;39;48;2;29;40;36m \u001b[0;38;2;255;255;255;48;2;136;116;85m \u001b[2;54H\u001b[0;38;2;190;207;196;48;2;49;71;56mNew\u001b[2;58HTty\u001b[2;62HFind\u001b[2;67HGrep\u001b[2;72HJoincol\u001b[2;80HDelcol\u001b[3;51H\u001b[0;38;2;0;0;0;48;2;173;211;138m \u001b[0;39;48;2;49;71;56m \u001b[0;38;2;190;207;196;48;2;49;71;56m/tmp/cast/hello \u001b[0;38;2;223;188;229;48;2;49;71;56mTty+sh\u001b[0;38;2;190;207;196;48;2;49;71;56m Save Mode Filter Collaps\u001b[4;51H\u001b[0;39;48;2;49;71;56m \u001b[0;38;2;190;207;196;48;2;49;71;56me Del\u001b[0;39;48;2;49;71;56m \u001b[5;51H\u001b[0;39;48;2;96;130;105m \u001b[5;53H\u001b[0;38;2;229;238;229;48;2;13;20;16m$\u001b[6;51H\u001b[0;39;48;2;96;130;105m \u001b[7;51H \u001b[8;1H \u001b[8;51H \u001b[9;1H \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;89;103;92;48;2;13;20;16m 6 \u001b[0;39;48;2;13;20;16m \u001b[0;39;48;2;96;130;105m \u001b[0;39;48;2;13;20;16m \u001b[0;38;2;229;238;229;48;2;13;20;16m \u001b[10;3H\u001b[0;38;2;89;103;92;48;2;13;20;16m \u001b[10;51H\u001b[0;39;48;2;96;130;105m \u001b[11;51H \u001b[12;51H \u001b[13;51H \u001b[14;51H \u001b[15;51H \u001b[16;51H \u001b[17;51H \u001b[18;51H \u001b[19;51H \u001b[20;51H \u001b[21;51H \u001b[22;51H \u001b[23;51H \u001b[24;51H \u001b[25;51H \u001b[26;51H \u001b[27;51H \u001b[28;51H \u001b[29;51H \u001b[30;51H \u001b[0m\u001b[5;55H\u001b[?25h"]
+[3.4, "o", "\u001b[3;51H\u001b[0;38;2;0;0;0;48;2;173;211;138m$\u001b[0m\u001b[5;55H\u001b[?25h"]
+[4.0, "o", "\u001b[5;55H\u001b[0;38;2;229;238;229;48;2;13;20;16mm\u001b[0m\u001b[5;56H\u001b[?25h"]
+[4.07, "o", "\u001b[5;56H\u001b[0;38;2;229;238;229;48;2;13;20;16ma\u001b[0m\u001b[5;57H\u001b[?25h"]
+[4.14, "o", "\u001b[5;57H\u001b[0;38;2;229;238;229;48;2;13;20;16mk\u001b[0m\u001b[5;58H\u001b[?25h"]
+[4.21, "o", "\u001b[5;58H\u001b[0;38;2;229;238;229;48;2;13;20;16me\u001b[0m\u001b[5;59H\u001b[?25h"]
+[4.28, "o", "\u001b[0m\u001b[5;60H\u001b[?25h"]
+[4.35, "o", "\u001b[5;60H\u001b[0;38;2;229;238;229;48;2;13;20;16m&\u001b[0m\u001b[5;61H\u001b[?25h"]
+[4.42, "o", "\u001b[5;61H\u001b[0;38;2;229;238;229;48;2;13;20;16m&\u001b[0m\u001b[5;62H\u001b[?25h"]
+[4.49, "o", "\u001b[0m\u001b[5;63H\u001b[?25h"]
+[4.56, "o", "\u001b[5;63H\u001b[0;38;2;229;238;229;48;2;13;20;16m.\u001b[0m\u001b[5;64H\u001b[?25h"]
+[4.63, "o", "\u001b[5;64H\u001b[0;38;2;229;238;229;48;2;13;20;16m/\u001b[0m\u001b[5;65H\u001b[?25h"]
+[4.7, "o", "\u001b[5;65H\u001b[0;38;2;229;238;229;48;2;13;20;16mh\u001b[0m\u001b[5;66H\u001b[?25h"]
+[4.77, "o", "\u001b[5;66H\u001b[0;38;2;229;238;229;48;2;13;20;16me\u001b[0m\u001b[5;67H\u001b[?25h"]
+[4.84, "o", "\u001b[5;67H\u001b[0;38;2;229;238;229;48;2;13;20;16ml\u001b[0m\u001b[5;68H\u001b[?25h"]
+[4.91, "o", "\u001b[5;68H\u001b[0;38;2;229;238;229;48;2;13;20;16ml\u001b[0m\u001b[5;69H\u001b[?25h"]
+[4.98, "o", "\u001b[5;69H\u001b[0;38;2;229;238;229;48;2;13;20;16mo\u001b[0m\u001b[5;70H\u001b[?25h"]
+[5.38, "o", "\u001b[6;53H\u001b[0;38;2;229;238;229;48;2;13;20;16msquares:\u001b[6;62H30\u001b[7;53H$\u001b[0m\u001b[7;55H\u001b[?25h"]
+[6.58, "o", "\u001b[3;51H\u001b[0;38;2;0;0;0;48;2;173;211;138m \u001b[0m\u001b[7;55H\u001b[?25h"]
+[7.18, "o", "\u001b[0m\u001b[6;55H\u001b[?25h"]
+[7.58, "o", "\u001b[6;53H\u001b[0;38;2;245;247;238;48;2;60;97;74msquares: 30 \u001b[0m\u001b[6;64H\u001b[?25h"]
+[8.88, "o", "\u001b[2;3H\u001b[0;39;48;2;49;71;56m \u001b[0;38;2;190;207;196;48;2;49;71;56mNew Tty Find Grep Joincol Delcol\u001b[0;39;48;2;49;71;56m \u001b[2;53H\u001b[0;39;48;2;29;40;36m \u001b[0;38;2;178;195;184;48;2;29;40;36mNew Tty Find Grep Joincol Delcol\u001b[0;39;48;2;29;40;36m \u001b[3;1H\u001b[0;38;2;0;0;0;48;2;173;211;138m \u001b[0;39;48;2;49;71;56m \u001b[0;38;2;190;207;196;48;2;49;71;56m/tmp/cast/hello/\u001b[0;38;2;223;188;229;48;2;49;71;56mNOTES\u001b[0;38;2;190;207;196;48;2;49;71;56m Save Tty Collapse Del\u001b[0;39;48;2;49;71;56m \u001b[0;38;2;255;255;255;48;2;73;102;86m \u001b[0;39;48;2;29;40;36m \u001b[0;38;2;178;195;184;48;2;29;40;36m/tmp/cast/hello \u001b[0;38;2;211;176;217;48;2;29;40;36mTty+sh\u001b[0;38;2;178;195;184;48;2;29;40;36m Save Mode Filter Collaps\u001b[4;3H\u001b[0;38;2;97;111;100;48;2;13;20;16;1m 1 \u001b[4;51H\u001b[0;39;48;2;29;40;36m \u001b[0;38;2;178;195;184;48;2;29;40;36me Del\u001b[0;39;48;2;29;40;36m \u001b[5;95H \u001b[0;38;2;178;195;184;48;2;29;40;36mLeft\u001b[0;39;48;2;29;40;36m \u001b[0m\u001b[4;8H\u001b[?25h"]
+[9.48, "o", "\u001b[5;95H\u001b[0;38;2;229;238;229;48;2;13;20;16m \u001b[0m\u001b[4;8H\u001b[?25h"]
+[9.7, "o", "\u001b[4;3H\u001b[0;38;2;89;103;92;48;2;13;20;16m 1 \u001b[8;3H\u001b[0;38;2;97;111;100;48;2;13;20;16;1m 5 \u001b[0m\u001b[8;8H\u001b[?25h"]
+[10.2, "o", "\u001b[3;2H\u001b[0;38;2;0;0;0;48;2;249;203;112;1m*\u001b[8;3H\u001b[0;38;2;89;103;92;48;2;13;20;16m 5 \u001b[9;3H\u001b[0;38;2;97;111;100;48;2;13;20;16;1m 6 \u001b[0;38;2;245;247;238;48;2;60;97;74msquares: 30 \u001b[10;6H\u001b[0;38;2;89;103;92;48;2;13;20;16m7\u001b[0m\u001b[9;19H\u001b[?25h"]
+[11.4, "o", "\u001b[2;3H\u001b[0;39;48;2;29;40;36m \u001b[0;38;2;178;195;184;48;2;29;40;36mNew Tty Find Grep Joincol Delcol\u001b[0;39;48;2;29;40;36m \u001b[2;53H\u001b[0;39;48;2;49;71;56m \u001b[0;38;2;190;207;196;48;2;49;71;56mNew Tty Find Grep Joincol Delcol\u001b[0;39;48;2;49;71;56m \u001b[3;1H\u001b[0;38;2;255;255;255;48;2;73;102;86m \u001b[3;3H\u001b[0;39;48;2;29;40;36m \u001b[0;38;2;178;195;184;48;2;29;40;36m/tmp/cast/hello/\u001b[0;38;2;211;176;217;48;2;29;40;36mNOTES\u001b[0;38;2;178;195;184;48;2;29;40;36m Save Tty Collapse Del\u001b[0;39;48;2;29;40;36m \u001b[0;38;2;0;0;0;48;2;173;211;138m \u001b[0;39;48;2;49;71;56m \u001b[0;38;2;190;207;196;48;2;49;71;56m/tmp/cast/hello \u001b[0;38;2;223;188;229;48;2;49;71;56mTty+sh\u001b[0;38;2;190;207;196;48;2;49;71;56m Save Mode Filter Collaps\u001b[4;44H\u001b[0;39;48;2;29;40;36m \u001b[0;38;2;178;195;184;48;2;29;40;36mRight\u001b[0;39;48;2;29;40;36m \u001b[0;39;48;2;49;71;56m \u001b[0;38;2;190;207;196;48;2;49;71;56me Del\u001b[0;39;48;2;49;71;56m \u001b[9;3H\u001b[0;38;2;89;103;92;48;2;13;20;16m 6 \u001b[0m\u001b[6;64H\u001b[?25h"]
+[11.8, "o", "\u001b[3;51H\u001b[0;38;2;0;0;0;48;2;173;211;138m$\u001b[4;44H\u001b[0;39;48;2;13;20;16m \u001b[6;53H\u001b[0;38;2;229;238;229;48;2;13;20;16msquares: 30 \u001b[0m\u001b[7;55H\u001b[?25h"]
+[12.4, "o", "\u001b[7;55H\u001b[0;38;2;229;238;229;48;2;13;20;16mg\u001b[0m\u001b[7;56H\u001b[?25h"]
+[12.47, "o", "\u001b[7;56H\u001b[0;38;2;229;238;229;48;2;13;20;16mi\u001b[0m\u001b[7;57H\u001b[?25h"]
+[12.54, "o", "\u001b[7;57H\u001b[0;38;2;229;238;229;48;2;13;20;16mt\u001b[0m\u001b[7;58H\u001b[?25h"]
+[12.61, "o", "\u001b[0m\u001b[7;59H\u001b[?25h"]
+[12.68, "o", "\u001b[7;59H\u001b[0;38;2;229;238;229;48;2;13;20;16ml\u001b[0m\u001b[7;60H\u001b[?25h"]
+[12.75, "o", "\u001b[7;60H\u001b[0;38;2;229;238;229;48;2;13;20;16mo\u001b[0m\u001b[7;61H\u001b[?25h"]
+[12.82, "o", "\u001b[7;61H\u001b[0;38;2;229;238;229;48;2;13;20;16mg\u001b[0m\u001b[7;62H\u001b[?25h"]
+[12.89, "o", "\u001b[0m\u001b[7;63H\u001b[?25h"]
+[12.96, "o", "\u001b[7;63H\u001b[0;38;2;229;238;229;48;2;13;20;16m-\u001b[0m\u001b[7;64H\u001b[?25h"]
+[13.03, "o", "\u001b[7;64H\u001b[0;38;2;229;238;229;48;2;13;20;16m-\u001b[0m\u001b[7;65H\u001b[?25h"]
+[13.1, "o", "\u001b[7;65H\u001b[0;38;2;229;238;229;48;2;13;20;16ms\u001b[0m\u001b[7;66H\u001b[?25h"]
+[13.17, "o", "\u001b[7;66H\u001b[0;38;2;229;238;229;48;2;13;20;16mt\u001b[0m\u001b[7;67H\u001b[?25h"]
+[13.24, "o", "\u001b[7;67H\u001b[0;38;2;229;238;229;48;2;13;20;16ma\u001b[0m\u001b[7;68H\u001b[?25h"]
+[13.31, "o", "\u001b[7;68H\u001b[0;38;2;229;238;229;48;2;13;20;16mt\u001b[0m\u001b[7;69H\u001b[?25h"]
+[13.38, "o", "\u001b[0m\u001b[7;70H\u001b[?25h"]
+[13.45, "o", "\u001b[7;70H\u001b[0;38;2;229;238;229;48;2;13;20;16m|\u001b[0m\u001b[7;71H\u001b[?25h"]
+[13.52, "o", "\u001b[0m\u001b[7;72H\u001b[?25h"]
+[13.59, "o", "\u001b[7;72H\u001b[0;38;2;229;238;229;48;2;13;20;16mp\u001b[0m\u001b[7;73H\u001b[?25h"]
+[13.66, "o", "\u001b[7;73H\u001b[0;38;2;229;238;229;48;2;13;20;16ma\u001b[0m\u001b[7;74H\u001b[?25h"]
+[13.73, "o", "\u001b[7;74H\u001b[0;38;2;229;238;229;48;2;13;20;16mr\u001b[0m\u001b[7;75H\u001b[?25h"]
+[13.8, "o", "\u001b[7;75H\u001b[0;38;2;229;238;229;48;2;13;20;16md\u001b[0m\u001b[7;76H\u001b[?25h"]
+[13.87, "o", "\u001b[7;76H\u001b[0;38;2;229;238;229;48;2;13;20;16me\u001b[0m\u001b[7;77H\u001b[?25h"]
+[13.94, "o", "\u001b[7;77H\u001b[0;38;2;229;238;229;48;2;13;20;16ms\u001b[0m\u001b[7;78H\u001b[?25h"]
+[14.01, "o", "\u001b[0m\u001b[7;79H\u001b[?25h"]
+[14.08, "o", "\u001b[7;79H\u001b[0;38;2;229;238;229;48;2;13;20;16m-\u001b[0m\u001b[7;80H\u001b[?25h"]
+[14.48, "o", "\u001b[8;53H\u001b[0;38;2;229;238;229;48;2;13;20;16m$\u001b[18;51H\u001b[0;38;2;255;255;255;48;2;73;102;86m \u001b[0;39;48;2;29;40;36m \u001b[0;38;2;178;195;184;48;2;29;40;36m/tmp/cast/hello/\u001b[0;38;2;211;176;217;48;2;29;40;36m+Pager\u001b[0;38;2;178;195;184;48;2;29;40;36m Save Tty Collapse Del\u001b[0;39;48;2;29;40;36m \u001b[19;56H\u001b[0;38;2;89;103;92;48;2;13;20;16m1\u001b[19;58H\u001b[0;38;2;233;198;128;48;2;13;20;16mcommit\u001b[19;65H691de50\u001b[20;56H\u001b[0;38;2;89;103;92;48;2;13;20;16m2\u001b[20;58H\u001b[0;38;2;229;238;229;48;2;13;20;16mAuthor:\u001b[20;66HDemo\u001b[20;71H<[email protected]>\u001b[21;56H\u001b[0;38;2;89;103;92;48;2;13;20;16m3\u001b[21;58H\u001b[0;38;2;229;238;229;48;2;13;20;16mDate:\u001b[21;66HSun\u001b[21;70HSep\u001b[21;74H27\u001b[21;77H16:40:00\u001b[21;86H2026\u001b[21;91H+0000\u001b[22;56H\u001b[0;38;2;89;103;92;48;2;13;20;16m4\u001b[23;51H\u001b[0;39;48;2;21;32;25m \u001b[23;56H\u001b[0;38;2;89;103;92;48;2;13;20;16m5\u001b[23;62H\u001b[0;38;2;229;238;229;48;2;13;20;16mKeep\u001b[23;67Hnotes\u001b[24;51H\u001b[0;39;48;2;21;32;25m \u001b[24;56H\u001b[0;38;2;89;103;92;48;2;13;20;16m6\u001b[25;51H\u001b[0;39;48;2;21;32;25m \u001b[25;56H\u001b[0;38;2;89;103;92;48;2;13;20;16m7\u001b[25;59H\u001b[0;38;2;229;238;229;48;2;13;20;16mNOTES\u001b[25;65H|\u001b[25;67H5\u001b[25;69H\u001b[0;38;2;182;206;148;48;2;13;20;16m+++++\u001b[26;51H\u001b[0;39;48;2;21;32;25m \u001b[26;56H\u001b[0;38;2;89;103;92;48;2;13;20;16m8\u001b[26;59H\u001b[0;38;2;229;238;229;48;2;13;20;16m1\u001b[26;61Hfile\u001b[26;66Hchanged,\u001b[26;75H5\u001b[26;77Hinsertions(+)\u001b[27;51H\u001b[0;39;48;2;21;32;25m \u001b[27;56H\u001b[0;38;2;89;103;92;48;2;13;20;16m9\u001b[28;51H\u001b[0;39;48;2;21;32;25m \u001b[28;55H\u001b[0;38;2;89;103;92;48;2;13;20;16m10\u001b[28;58H\u001b[0;38;2;233;198;128;48;2;13;20;16mcommit\u001b[28;65H09d5c1f\u001b[29;51H\u001b[0;39;48;2;21;32;25m \u001b[29;55H\u001b[0;38;2;89;103;92;48;2;13;20;16m11\u001b[29;58H\u001b[0;38;2;229;238;229;48;2;13;20;16mAuthor:\u001b[29;66HDemo\u001b[29;71H<[email protected]>\u001b[30;51H\u001b[0;39;48;2;21;32;25m \u001b[30;55H\u001b[0;38;2;89;103;92;48;2;13;20;16m12\u001b[30;58H\u001b[0;38;2;229;238;229;48;2;13;20;16mDate:\u001b[30;66HThu\u001b[30;70HSep\u001b[30;74H24\u001b[30;77H09:15:00\u001b[30;86H2026\u001b[30;91H+0000\u001b[0m\u001b[8;55H\u001b[?25h"]
+[16.48, "o", ""]
diff --git a/docs/site/media/captions.txt b/docs/site/media/captions.txt
index 55f64d5b..4879cb12 100644
--- a/docs/site/media/captions.txt
+++ b/docs/site/media/captions.txt
@@ -1,4 +1,13 @@
-text-is-the-interface: Middle-click runs a word; right-click an error opens the file.
-terminals-are-panes: A shell is a pane: Ctrl-b, then move over its output.
-scripting-over-9p: The session is files: a shell script reads and writes its panes.
-diff-review: git diff pages into a pane; right-click a change to open it.
+pdf-navigation: A 2,515-page PDF: page, jump to CPUID, search, step hits.
+image-pane: Right-click an image's name, even in a shell, to open it.
+pdf-tint-fit: PdfTint tints the page, PdfFit fits it, a page address jumps.
+text-is-the-interface: Middle-click make in the README; right-click the error.
+terminals-are-panes: A terminal is a pane: Ctrl-b, then move over its output.
+scripting-over-9p: A script drives the session through its virtual filesystem (9P).
+diff-review: Right-click a diff line to open that line of the file.
+chords: Hold left, click middle to cut; click right to paste.
+columns: Newcol adds a column; a look opens there; Alt-c moves a pane.
+search: Grep lists the hits; n and N walk them; right-click opens one.
+where-commands-run: A file's tag runs in its directory; the column tag, in the session's.
+edit-via-ctl: An Edit written to ctl changes every sum; one Undo restores.
+wait-editor: git commit's message opens in a pane; Del returns it to git.
diff --git a/docs/site/media/chords.mp4 b/docs/site/media/chords.mp4
new file mode 100644
index 00000000..43bc556b
--- /dev/null
+++ b/docs/site/media/chords.mp4
Binary files differ
diff --git a/docs/site/media/chords.png b/docs/site/media/chords.png
new file mode 100644
index 00000000..a140347c
--- /dev/null
+++ b/docs/site/media/chords.png
Binary files differ
diff --git a/docs/site/media/chords.webm b/docs/site/media/chords.webm
new file mode 100644
index 00000000..42a6f4e6
--- /dev/null
+++ b/docs/site/media/chords.webm
Binary files differ
diff --git a/docs/site/media/clips.toml b/docs/site/media/clips.toml
index 9a83d681..f2406396 100644
--- a/docs/site/media/clips.toml
+++ b/docs/site/media/clips.toml
@@ -1,25 +1,77 @@
# The landing page's recordings, in the order shown. For each clip the
# site ships media/<name>.webm and media/<name>.mp4, with media/<name>.png
-# as the poster; the first ready clip's poster is also the landing's
-# hero image. While `ready` is false the clip shows placeholder.svg and
+# as the poster; a caption may hold markup (#link). `landing = false` keeps a clip off the landing (the
+# terminal casts show the same) while its files stay for the chapters. While `ready` is false the clip shows placeholder.svg and
# no video, so the site builds before a recording exists.
[[clip]]
+name = "pdf-navigation"
+caption = "A 2,515-page PDF: page, jump to CPUID, search, step hits."
+ready = true
+
+[[clip]]
+name = "image-pane"
+caption = "Right-click an image's name, even in a shell, to open it."
+ready = true
+
+[[clip]]
+name = "pdf-tint-fit"
+caption = "PdfTint tints the page, PdfFit fits it, a page address jumps."
+ready = true
+
+[[clip]]
name = "text-is-the-interface"
-caption = "Middle-click runs a word; right-click an error opens its line."
+caption = "Middle-click make in the README; right-click the error."
ready = true
[[clip]]
name = "terminals-are-panes"
caption = "A terminal is a pane: Ctrl-b, then move over its output."
ready = true
+landing = false
[[clip]]
name = "scripting-over-9p"
-caption = "A script drives the session through its virtual filesystem (9P)."
+caption = "A shell under #link(\"setup.html#ninens\")[9ns], where the session is a directory: ls, cat, echo."
ready = true
[[clip]]
name = "diff-review"
caption = "Right-click a diff line to open that line of the file."
ready = true
+
+[[clip]]
+name = "chords"
+caption = "Hold left, click middle to cut; click right to paste."
+ready = true
+landing = false
+
+[[clip]]
+name = "columns"
+caption = "Newcol adds a column; a look opens there; Alt-c moves a pane."
+ready = true
+landing = false
+
+[[clip]]
+name = "search"
+caption = "Grep lists the hits; n and N walk them; right-click opens one."
+ready = true
+landing = false
+
+[[clip]]
+name = "where-commands-run"
+caption = "File tags run in their directory; column tags, in the session's."
+ready = true
+landing = false
+
+[[clip]]
+name = "edit-via-ctl"
+caption = "An Edit written to ctl changes every sum; one Undo restores."
+ready = true
+landing = false
+
+[[clip]]
+name = "wait-editor"
+caption = "git commit's message opens in a pane; Del returns it to git."
+ready = true
+landing = false
diff --git a/docs/site/media/columns.mp4 b/docs/site/media/columns.mp4
new file mode 100644
index 00000000..48bc462b
--- /dev/null
+++ b/docs/site/media/columns.mp4
Binary files differ
diff --git a/docs/site/media/columns.png b/docs/site/media/columns.png
new file mode 100644
index 00000000..f8cc1801
--- /dev/null
+++ b/docs/site/media/columns.png
Binary files differ
diff --git a/docs/site/media/columns.webm b/docs/site/media/columns.webm
new file mode 100644
index 00000000..ddb6bdfc
--- /dev/null
+++ b/docs/site/media/columns.webm
Binary files differ
diff --git a/docs/site/media/diff-review.mp4 b/docs/site/media/diff-review.mp4
index e3bb2f5b..73fa1a76 100644
--- a/docs/site/media/diff-review.mp4
+++ b/docs/site/media/diff-review.mp4
Binary files differ
diff --git a/docs/site/media/diff-review.png b/docs/site/media/diff-review.png
index fda184e3..76a7dc43 100644
--- a/docs/site/media/diff-review.png
+++ b/docs/site/media/diff-review.png
Binary files differ
diff --git a/docs/site/media/diff-review.webm b/docs/site/media/diff-review.webm
index ed201b13..da7756f9 100644
--- a/docs/site/media/diff-review.webm
+++ b/docs/site/media/diff-review.webm
Binary files differ
diff --git a/docs/site/media/edit-via-ctl.mp4 b/docs/site/media/edit-via-ctl.mp4
new file mode 100644
index 00000000..d63f6e7f
--- /dev/null
+++ b/docs/site/media/edit-via-ctl.mp4
Binary files differ
diff --git a/docs/site/media/edit-via-ctl.png b/docs/site/media/edit-via-ctl.png
new file mode 100644
index 00000000..7a21d734
--- /dev/null
+++ b/docs/site/media/edit-via-ctl.png
Binary files differ
diff --git a/docs/site/media/edit-via-ctl.webm b/docs/site/media/edit-via-ctl.webm
new file mode 100644
index 00000000..77639d34
--- /dev/null
+++ b/docs/site/media/edit-via-ctl.webm
Binary files differ
diff --git a/docs/site/media/image-pane.mp4 b/docs/site/media/image-pane.mp4
new file mode 100644
index 00000000..9fb1a0e9
--- /dev/null
+++ b/docs/site/media/image-pane.mp4
Binary files differ
diff --git a/docs/site/media/image-pane.png b/docs/site/media/image-pane.png
new file mode 100644
index 00000000..94eb7b50
--- /dev/null
+++ b/docs/site/media/image-pane.png
Binary files differ
diff --git a/docs/site/media/image-pane.webm b/docs/site/media/image-pane.webm
new file mode 100644
index 00000000..764be10c
--- /dev/null
+++ b/docs/site/media/image-pane.webm
Binary files differ
diff --git a/docs/site/media/pdf-navigation.mp4 b/docs/site/media/pdf-navigation.mp4
new file mode 100644
index 00000000..f0369f7b
--- /dev/null
+++ b/docs/site/media/pdf-navigation.mp4
Binary files differ
diff --git a/docs/site/media/pdf-navigation.png b/docs/site/media/pdf-navigation.png
new file mode 100644
index 00000000..79dd6453
--- /dev/null
+++ b/docs/site/media/pdf-navigation.png
Binary files differ
diff --git a/docs/site/media/pdf-navigation.webm b/docs/site/media/pdf-navigation.webm
new file mode 100644
index 00000000..17c8b1b3
--- /dev/null
+++ b/docs/site/media/pdf-navigation.webm
Binary files differ
diff --git a/docs/site/media/pdf-tint-fit.mp4 b/docs/site/media/pdf-tint-fit.mp4
new file mode 100644
index 00000000..a1b4a5a6
--- /dev/null
+++ b/docs/site/media/pdf-tint-fit.mp4
Binary files differ
diff --git a/docs/site/media/pdf-tint-fit.png b/docs/site/media/pdf-tint-fit.png
new file mode 100644
index 00000000..923ab143
--- /dev/null
+++ b/docs/site/media/pdf-tint-fit.png
Binary files differ
diff --git a/docs/site/media/pdf-tint-fit.webm b/docs/site/media/pdf-tint-fit.webm
new file mode 100644
index 00000000..e641101f
--- /dev/null
+++ b/docs/site/media/pdf-tint-fit.webm
Binary files differ
diff --git a/docs/site/media/scripting-over-9p.webm b/docs/site/media/scripting-over-9p.webm
index b6f192b3..bf39a7e8 100644
--- a/docs/site/media/scripting-over-9p.webm
+++ b/docs/site/media/scripting-over-9p.webm
Binary files differ
diff --git a/docs/site/media/search.mp4 b/docs/site/media/search.mp4
new file mode 100644
index 00000000..6c9c9445
--- /dev/null
+++ b/docs/site/media/search.mp4
Binary files differ
diff --git a/docs/site/media/search.png b/docs/site/media/search.png
new file mode 100644
index 00000000..40e5bed5
--- /dev/null
+++ b/docs/site/media/search.png
Binary files differ
diff --git a/docs/site/media/search.webm b/docs/site/media/search.webm
new file mode 100644
index 00000000..e1581570
--- /dev/null
+++ b/docs/site/media/search.webm
Binary files differ
diff --git a/docs/site/media/terminals-are-panes.webm b/docs/site/media/terminals-are-panes.webm
index 3f1ab09e..15ee73fe 100644
--- a/docs/site/media/terminals-are-panes.webm
+++ b/docs/site/media/terminals-are-panes.webm
Binary files differ
diff --git a/docs/site/media/text-is-the-interface.mp4 b/docs/site/media/text-is-the-interface.mp4
index 19545731..b4a12c87 100644
--- a/docs/site/media/text-is-the-interface.mp4
+++ b/docs/site/media/text-is-the-interface.mp4
Binary files differ
diff --git a/docs/site/media/text-is-the-interface.png b/docs/site/media/text-is-the-interface.png
index 81a73aee..a31dcb78 100644
--- a/docs/site/media/text-is-the-interface.png
+++ b/docs/site/media/text-is-the-interface.png
Binary files differ
diff --git a/docs/site/media/text-is-the-interface.webm b/docs/site/media/text-is-the-interface.webm
index 88c02d11..76c2c06b 100644
--- a/docs/site/media/text-is-the-interface.webm
+++ b/docs/site/media/text-is-the-interface.webm
Binary files differ
diff --git a/docs/site/media/themes/acme.png b/docs/site/media/themes/acme.png
new file mode 100644
index 00000000..da647db1
--- /dev/null
+++ b/docs/site/media/themes/acme.png
Binary files differ
diff --git a/docs/site/media/themes/alucard.png b/docs/site/media/themes/alucard.png
new file mode 100644
index 00000000..dab6ce80
--- /dev/null
+++ b/docs/site/media/themes/alucard.png
Binary files differ
diff --git a/docs/site/media/themes/atelier.png b/docs/site/media/themes/atelier.png
new file mode 100644
index 00000000..a8c36f2a
--- /dev/null
+++ b/docs/site/media/themes/atelier.png
Binary files differ
diff --git a/docs/site/media/themes/ayu_dark.png b/docs/site/media/themes/ayu_dark.png
new file mode 100644
index 00000000..711ed8aa
--- /dev/null
+++ b/docs/site/media/themes/ayu_dark.png
Binary files differ
diff --git a/docs/site/media/themes/ayu_light.png b/docs/site/media/themes/ayu_light.png
new file mode 100644
index 00000000..0ddcb9af
--- /dev/null
+++ b/docs/site/media/themes/ayu_light.png
Binary files differ
diff --git a/docs/site/media/themes/ayu_mirage.png b/docs/site/media/themes/ayu_mirage.png
new file mode 100644
index 00000000..56676d1f
--- /dev/null
+++ b/docs/site/media/themes/ayu_mirage.png
Binary files differ
diff --git a/docs/site/media/themes/catppuccin_frappe.png b/docs/site/media/themes/catppuccin_frappe.png
new file mode 100644
index 00000000..58c13dbe
--- /dev/null
+++ b/docs/site/media/themes/catppuccin_frappe.png
Binary files differ
diff --git a/docs/site/media/themes/catppuccin_latte.png b/docs/site/media/themes/catppuccin_latte.png
new file mode 100644
index 00000000..27e58ce0
--- /dev/null
+++ b/docs/site/media/themes/catppuccin_latte.png
Binary files differ
diff --git a/docs/site/media/themes/catppuccin_macchiato.png b/docs/site/media/themes/catppuccin_macchiato.png
new file mode 100644
index 00000000..fb32c742
--- /dev/null
+++ b/docs/site/media/themes/catppuccin_macchiato.png
Binary files differ
diff --git a/docs/site/media/themes/catppuccin_mocha.png b/docs/site/media/themes/catppuccin_mocha.png
new file mode 100644
index 00000000..e16e4224
--- /dev/null
+++ b/docs/site/media/themes/catppuccin_mocha.png
Binary files differ
diff --git a/docs/site/media/themes/clay.png b/docs/site/media/themes/clay.png
new file mode 100644
index 00000000..117b731d
--- /dev/null
+++ b/docs/site/media/themes/clay.png
Binary files differ
diff --git a/docs/site/media/themes/dark.png b/docs/site/media/themes/dark.png
new file mode 100644
index 00000000..6346759e
--- /dev/null
+++ b/docs/site/media/themes/dark.png
Binary files differ
diff --git a/docs/site/media/themes/dark_plus.png b/docs/site/media/themes/dark_plus.png
new file mode 100644
index 00000000..6a750655
--- /dev/null
+++ b/docs/site/media/themes/dark_plus.png
Binary files differ
diff --git a/docs/site/media/themes/daybreak.png b/docs/site/media/themes/daybreak.png
new file mode 100644
index 00000000..ca3dcc5c
--- /dev/null
+++ b/docs/site/media/themes/daybreak.png
Binary files differ
diff --git a/docs/site/media/themes/doom_one.png b/docs/site/media/themes/doom_one.png
new file mode 100644
index 00000000..95f13135
--- /dev/null
+++ b/docs/site/media/themes/doom_one.png
Binary files differ
diff --git a/docs/site/media/themes/doom_one_light.png b/docs/site/media/themes/doom_one_light.png
new file mode 100644
index 00000000..c8c4c69a
--- /dev/null
+++ b/docs/site/media/themes/doom_one_light.png
Binary files differ
diff --git a/docs/site/media/themes/dracula.png b/docs/site/media/themes/dracula.png
new file mode 100644
index 00000000..64eea04a
--- /dev/null
+++ b/docs/site/media/themes/dracula.png
Binary files differ
diff --git a/docs/site/media/themes/dracula_soft.png b/docs/site/media/themes/dracula_soft.png
new file mode 100644
index 00000000..9ef81583
--- /dev/null
+++ b/docs/site/media/themes/dracula_soft.png
Binary files differ
diff --git a/docs/site/media/themes/duckbones.png b/docs/site/media/themes/duckbones.png
new file mode 100644
index 00000000..9809ab36
--- /dev/null
+++ b/docs/site/media/themes/duckbones.png
Binary files differ
diff --git a/docs/site/media/themes/dusk.png b/docs/site/media/themes/dusk.png
new file mode 100644
index 00000000..0d95b59c
--- /dev/null
+++ b/docs/site/media/themes/dusk.png
Binary files differ
diff --git a/docs/site/media/themes/forestbones_dark.png b/docs/site/media/themes/forestbones_dark.png
new file mode 100644
index 00000000..ea399605
--- /dev/null
+++ b/docs/site/media/themes/forestbones_dark.png
Binary files differ
diff --git a/docs/site/media/themes/forestbones_light.png b/docs/site/media/themes/forestbones_light.png
new file mode 100644
index 00000000..862858de
--- /dev/null
+++ b/docs/site/media/themes/forestbones_light.png
Binary files differ
diff --git a/docs/site/media/themes/forge.png b/docs/site/media/themes/forge.png
new file mode 100644
index 00000000..bab91d48
--- /dev/null
+++ b/docs/site/media/themes/forge.png
Binary files differ
diff --git a/docs/site/media/themes/forge_black.png b/docs/site/media/themes/forge_black.png
new file mode 100644
index 00000000..e09320ed
--- /dev/null
+++ b/docs/site/media/themes/forge_black.png
Binary files differ
diff --git a/docs/site/media/themes/forge_soft.png b/docs/site/media/themes/forge_soft.png
new file mode 100644
index 00000000..1b9fb2fb
--- /dev/null
+++ b/docs/site/media/themes/forge_soft.png
Binary files differ
diff --git a/docs/site/media/themes/harvest.png b/docs/site/media/themes/harvest.png
new file mode 100644
index 00000000..b95e8c76
--- /dev/null
+++ b/docs/site/media/themes/harvest.png
Binary files differ
diff --git a/docs/site/media/themes/helix.png b/docs/site/media/themes/helix.png
new file mode 100644
index 00000000..6c353815
--- /dev/null
+++ b/docs/site/media/themes/helix.png
Binary files differ
diff --git a/docs/site/media/themes/ink.png b/docs/site/media/themes/ink.png
new file mode 100644
index 00000000..314610db
--- /dev/null
+++ b/docs/site/media/themes/ink.png
Binary files differ
diff --git a/docs/site/media/themes/kanagawabones.png b/docs/site/media/themes/kanagawabones.png
new file mode 100644
index 00000000..c2c58ec9
--- /dev/null
+++ b/docs/site/media/themes/kanagawabones.png
Binary files differ
diff --git a/docs/site/media/themes/lagoon.png b/docs/site/media/themes/lagoon.png
new file mode 100644
index 00000000..bdd3dd49
--- /dev/null
+++ b/docs/site/media/themes/lagoon.png
Binary files differ
diff --git a/docs/site/media/themes/lapis.png b/docs/site/media/themes/lapis.png
new file mode 100644
index 00000000..2bc4024a
--- /dev/null
+++ b/docs/site/media/themes/lapis.png
Binary files differ
diff --git a/docs/site/media/themes/lapis_plain.png b/docs/site/media/themes/lapis_plain.png
new file mode 100644
index 00000000..7315c2a0
--- /dev/null
+++ b/docs/site/media/themes/lapis_plain.png
Binary files differ
diff --git a/docs/site/media/themes/monokai.png b/docs/site/media/themes/monokai.png
new file mode 100644
index 00000000..4b4854b8
--- /dev/null
+++ b/docs/site/media/themes/monokai.png
Binary files differ
diff --git a/docs/site/media/themes/monokai_pro.png b/docs/site/media/themes/monokai_pro.png
new file mode 100644
index 00000000..e8036053
--- /dev/null
+++ b/docs/site/media/themes/monokai_pro.png
Binary files differ
diff --git a/docs/site/media/themes/monokai_pro_classic.png b/docs/site/media/themes/monokai_pro_classic.png
new file mode 100644
index 00000000..4e25319c
--- /dev/null
+++ b/docs/site/media/themes/monokai_pro_classic.png
Binary files differ
diff --git a/docs/site/media/themes/monokai_pro_light.png b/docs/site/media/themes/monokai_pro_light.png
new file mode 100644
index 00000000..ee2f1e4c
--- /dev/null
+++ b/docs/site/media/themes/monokai_pro_light.png
Binary files differ
diff --git a/docs/site/media/themes/monokai_pro_light_sun.png b/docs/site/media/themes/monokai_pro_light_sun.png
new file mode 100644
index 00000000..67e6e807
--- /dev/null
+++ b/docs/site/media/themes/monokai_pro_light_sun.png
Binary files differ
diff --git a/docs/site/media/themes/monokai_pro_machine.png b/docs/site/media/themes/monokai_pro_machine.png
new file mode 100644
index 00000000..3f683a68
--- /dev/null
+++ b/docs/site/media/themes/monokai_pro_machine.png
Binary files differ
diff --git a/docs/site/media/themes/monokai_pro_octagon.png b/docs/site/media/themes/monokai_pro_octagon.png
new file mode 100644
index 00000000..bc7a831e
--- /dev/null
+++ b/docs/site/media/themes/monokai_pro_octagon.png
Binary files differ
diff --git a/docs/site/media/themes/monokai_pro_ristretto.png b/docs/site/media/themes/monokai_pro_ristretto.png
new file mode 100644
index 00000000..06429245
--- /dev/null
+++ b/docs/site/media/themes/monokai_pro_ristretto.png
Binary files differ
diff --git a/docs/site/media/themes/monokai_pro_spectrum.png b/docs/site/media/themes/monokai_pro_spectrum.png
new file mode 100644
index 00000000..c6e49f4c
--- /dev/null
+++ b/docs/site/media/themes/monokai_pro_spectrum.png
Binary files differ
diff --git a/docs/site/media/themes/neobones_dark.png b/docs/site/media/themes/neobones_dark.png
new file mode 100644
index 00000000..026400de
--- /dev/null
+++ b/docs/site/media/themes/neobones_dark.png
Binary files differ
diff --git a/docs/site/media/themes/neobones_light.png b/docs/site/media/themes/neobones_light.png
new file mode 100644
index 00000000..62d26b3a
--- /dev/null
+++ b/docs/site/media/themes/neobones_light.png
Binary files differ
diff --git a/docs/site/media/themes/nord.png b/docs/site/media/themes/nord.png
new file mode 100644
index 00000000..d5c903b2
--- /dev/null
+++ b/docs/site/media/themes/nord.png
Binary files differ
diff --git a/docs/site/media/themes/nordbones.png b/docs/site/media/themes/nordbones.png
new file mode 100644
index 00000000..272ad19d
--- /dev/null
+++ b/docs/site/media/themes/nordbones.png
Binary files differ
diff --git a/docs/site/media/themes/orchard.png b/docs/site/media/themes/orchard.png
new file mode 100644
index 00000000..623fde75
--- /dev/null
+++ b/docs/site/media/themes/orchard.png
Binary files differ
diff --git a/docs/site/media/themes/orchard_black.png b/docs/site/media/themes/orchard_black.png
new file mode 100644
index 00000000..02d78992
--- /dev/null
+++ b/docs/site/media/themes/orchard_black.png
Binary files differ
diff --git a/docs/site/media/themes/paper.png b/docs/site/media/themes/paper.png
new file mode 100644
index 00000000..59919d80
--- /dev/null
+++ b/docs/site/media/themes/paper.png
Binary files differ
diff --git a/docs/site/media/themes/rose_pine.png b/docs/site/media/themes/rose_pine.png
new file mode 100644
index 00000000..9dbf1d76
--- /dev/null
+++ b/docs/site/media/themes/rose_pine.png
Binary files differ
diff --git a/docs/site/media/themes/rose_pine_dawn.png b/docs/site/media/themes/rose_pine_dawn.png
new file mode 100644
index 00000000..8a062630
--- /dev/null
+++ b/docs/site/media/themes/rose_pine_dawn.png
Binary files differ
diff --git a/docs/site/media/themes/rose_pine_moon.png b/docs/site/media/themes/rose_pine_moon.png
new file mode 100644
index 00000000..ee93f871
--- /dev/null
+++ b/docs/site/media/themes/rose_pine_moon.png
Binary files differ
diff --git a/docs/site/media/themes/rosebones_dark.png b/docs/site/media/themes/rosebones_dark.png
new file mode 100644
index 00000000..19992fea
--- /dev/null
+++ b/docs/site/media/themes/rosebones_dark.png
Binary files differ
diff --git a/docs/site/media/themes/rosebones_light.png b/docs/site/media/themes/rosebones_light.png
new file mode 100644
index 00000000..a879dc55
--- /dev/null
+++ b/docs/site/media/themes/rosebones_light.png
Binary files differ
diff --git a/docs/site/media/themes/seoul256_dark_233.png b/docs/site/media/themes/seoul256_dark_233.png
new file mode 100644
index 00000000..a757640b
--- /dev/null
+++ b/docs/site/media/themes/seoul256_dark_233.png
Binary files differ
diff --git a/docs/site/media/themes/seoul256_dark_234.png b/docs/site/media/themes/seoul256_dark_234.png
new file mode 100644
index 00000000..a34b3f2a
--- /dev/null
+++ b/docs/site/media/themes/seoul256_dark_234.png
Binary files differ
diff --git a/docs/site/media/themes/seoul256_dark_235.png b/docs/site/media/themes/seoul256_dark_235.png
new file mode 100644
index 00000000..d4c69938
--- /dev/null
+++ b/docs/site/media/themes/seoul256_dark_235.png
Binary files differ
diff --git a/docs/site/media/themes/seoul256_dark_236.png b/docs/site/media/themes/seoul256_dark_236.png
new file mode 100644
index 00000000..8f1c48ce
--- /dev/null
+++ b/docs/site/media/themes/seoul256_dark_236.png
Binary files differ
diff --git a/docs/site/media/themes/seoul256_dark_237.png b/docs/site/media/themes/seoul256_dark_237.png
new file mode 100644
index 00000000..3816b258
--- /dev/null
+++ b/docs/site/media/themes/seoul256_dark_237.png
Binary files differ
diff --git a/docs/site/media/themes/seoul256_dark_238.png b/docs/site/media/themes/seoul256_dark_238.png
new file mode 100644
index 00000000..9553da5f
--- /dev/null
+++ b/docs/site/media/themes/seoul256_dark_238.png
Binary files differ
diff --git a/docs/site/media/themes/seoul256_dark_239.png b/docs/site/media/themes/seoul256_dark_239.png
new file mode 100644
index 00000000..8109f756
--- /dev/null
+++ b/docs/site/media/themes/seoul256_dark_239.png
Binary files differ
diff --git a/docs/site/media/themes/seoul256_light_252.png b/docs/site/media/themes/seoul256_light_252.png
new file mode 100644
index 00000000..7f01a1ab
--- /dev/null
+++ b/docs/site/media/themes/seoul256_light_252.png
Binary files differ
diff --git a/docs/site/media/themes/seoul256_light_253.png b/docs/site/media/themes/seoul256_light_253.png
new file mode 100644
index 00000000..5b9d2a43
--- /dev/null
+++ b/docs/site/media/themes/seoul256_light_253.png
Binary files differ
diff --git a/docs/site/media/themes/seoul256_light_254.png b/docs/site/media/themes/seoul256_light_254.png
new file mode 100644
index 00000000..125546f7
--- /dev/null
+++ b/docs/site/media/themes/seoul256_light_254.png
Binary files differ
diff --git a/docs/site/media/themes/seoul256_light_255.png b/docs/site/media/themes/seoul256_light_255.png
new file mode 100644
index 00000000..06b1e3fc
--- /dev/null
+++ b/docs/site/media/themes/seoul256_light_255.png
Binary files differ
diff --git a/docs/site/media/themes/seoul256_light_256.png b/docs/site/media/themes/seoul256_light_256.png
new file mode 100644
index 00000000..ce4ee4da
--- /dev/null
+++ b/docs/site/media/themes/seoul256_light_256.png
Binary files differ
diff --git a/docs/site/media/themes/seoulbones_dark.png b/docs/site/media/themes/seoulbones_dark.png
new file mode 100644
index 00000000..74ea8ebc
--- /dev/null
+++ b/docs/site/media/themes/seoulbones_dark.png
Binary files differ
diff --git a/docs/site/media/themes/seoulbones_light.png b/docs/site/media/themes/seoulbones_light.png
new file mode 100644
index 00000000..7591721a
--- /dev/null
+++ b/docs/site/media/themes/seoulbones_light.png
Binary files differ
diff --git a/docs/site/media/themes/solarium.png b/docs/site/media/themes/solarium.png
new file mode 100644
index 00000000..f24a111e
--- /dev/null
+++ b/docs/site/media/themes/solarium.png
Binary files differ
diff --git a/docs/site/media/themes/solarized_dark.png b/docs/site/media/themes/solarized_dark.png
new file mode 100644
index 00000000..7df0ef41
--- /dev/null
+++ b/docs/site/media/themes/solarized_dark.png
Binary files differ
diff --git a/docs/site/media/themes/solarized_light.png b/docs/site/media/themes/solarized_light.png
new file mode 100644
index 00000000..40b88ef3
--- /dev/null
+++ b/docs/site/media/themes/solarized_light.png
Binary files differ
diff --git a/docs/site/media/themes/spectrum.png b/docs/site/media/themes/spectrum.png
new file mode 100644
index 00000000..111f0913
--- /dev/null
+++ b/docs/site/media/themes/spectrum.png
Binary files differ
diff --git a/docs/site/media/themes/themes.toml b/docs/site/media/themes/themes.toml
index 23df1e97..ed45b075 100644
--- a/docs/site/media/themes/themes.toml
+++ b/docs/site/media/themes/themes.toml
@@ -1,7 +1,6 @@
-# The Themes page gallery, in NextColor's order: media/themes/<file> for
-# each. `ready = false` shows placeholder.svg under each name, so the site
-# builds before the screenshots exist; set it true (or drop it) once they do.
-ready = false
+# The Themes page gallery, in the order the Themes builtin walks them:
+# media/themes/<file> for each, made by test/record_demos.py themes.
+ready = true
[[theme]]
name = "orchard"
@@ -77,3 +76,343 @@ kind = "dark"
name = "orchard_black"
file = "orchard_black.png"
kind = "dark"
+
+[[theme]]
+name = "acme"
+file = "acme.png"
+kind = "light"
+
+[[theme]]
+name = "lapis"
+file = "lapis.png"
+kind = "dark"
+
+[[theme]]
+name = "lapis_plain"
+file = "lapis_plain.png"
+kind = "dark"
+
+[[theme]]
+name = "dark_plus"
+file = "dark_plus.png"
+kind = "dark"
+
+[[theme]]
+name = "solarized_dark"
+file = "solarized_dark.png"
+kind = "dark"
+
+[[theme]]
+name = "solarized_light"
+file = "solarized_light.png"
+kind = "light"
+
+[[theme]]
+name = "dracula"
+file = "dracula.png"
+kind = "dark"
+
+[[theme]]
+name = "dracula_soft"
+file = "dracula_soft.png"
+kind = "dark"
+
+[[theme]]
+name = "alucard"
+file = "alucard.png"
+kind = "light"
+
+[[theme]]
+name = "monokai"
+file = "monokai.png"
+kind = "dark"
+
+[[theme]]
+name = "monokai_pro"
+file = "monokai_pro.png"
+kind = "dark"
+
+[[theme]]
+name = "monokai_pro_classic"
+file = "monokai_pro_classic.png"
+kind = "dark"
+
+[[theme]]
+name = "monokai_pro_machine"
+file = "monokai_pro_machine.png"
+kind = "dark"
+
+[[theme]]
+name = "monokai_pro_octagon"
+file = "monokai_pro_octagon.png"
+kind = "dark"
+
+[[theme]]
+name = "monokai_pro_ristretto"
+file = "monokai_pro_ristretto.png"
+kind = "dark"
+
+[[theme]]
+name = "monokai_pro_spectrum"
+file = "monokai_pro_spectrum.png"
+kind = "dark"
+
+[[theme]]
+name = "monokai_pro_light"
+file = "monokai_pro_light.png"
+kind = "light"
+
+[[theme]]
+name = "monokai_pro_light_sun"
+file = "monokai_pro_light_sun.png"
+kind = "light"
+
+[[theme]]
+name = "tokyonight_night"
+file = "tokyonight_night.png"
+kind = "dark"
+
+[[theme]]
+name = "tokyonight_storm"
+file = "tokyonight_storm.png"
+kind = "dark"
+
+[[theme]]
+name = "tokyonight_moon"
+file = "tokyonight_moon.png"
+kind = "dark"
+
+[[theme]]
+name = "tokyonight_day"
+file = "tokyonight_day.png"
+kind = "light"
+
+[[theme]]
+name = "rose_pine"
+file = "rose_pine.png"
+kind = "dark"
+
+[[theme]]
+name = "rose_pine_moon"
+file = "rose_pine_moon.png"
+kind = "dark"
+
+[[theme]]
+name = "rose_pine_dawn"
+file = "rose_pine_dawn.png"
+kind = "light"
+
+[[theme]]
+name = "catppuccin_latte"
+file = "catppuccin_latte.png"
+kind = "light"
+
+[[theme]]
+name = "catppuccin_frappe"
+file = "catppuccin_frappe.png"
+kind = "dark"
+
+[[theme]]
+name = "catppuccin_macchiato"
+file = "catppuccin_macchiato.png"
+kind = "dark"
+
+[[theme]]
+name = "catppuccin_mocha"
+file = "catppuccin_mocha.png"
+kind = "dark"
+
+[[theme]]
+name = "seoul256_dark_233"
+file = "seoul256_dark_233.png"
+kind = "dark"
+
+[[theme]]
+name = "seoul256_dark_234"
+file = "seoul256_dark_234.png"
+kind = "dark"
+
+[[theme]]
+name = "seoul256_dark_235"
+file = "seoul256_dark_235.png"
+kind = "dark"
+
+[[theme]]
+name = "seoul256_dark_236"
+file = "seoul256_dark_236.png"
+kind = "dark"
+
+[[theme]]
+name = "seoul256_dark_237"
+file = "seoul256_dark_237.png"
+kind = "dark"
+
+[[theme]]
+name = "seoul256_dark_238"
+file = "seoul256_dark_238.png"
+kind = "dark"
+
+[[theme]]
+name = "seoul256_dark_239"
+file = "seoul256_dark_239.png"
+kind = "dark"
+
+[[theme]]
+name = "seoul256_light_252"
+file = "seoul256_light_252.png"
+kind = "light"
+
+[[theme]]
+name = "seoul256_light_253"
+file = "seoul256_light_253.png"
+kind = "light"
+
+[[theme]]
+name = "seoul256_light_254"
+file = "seoul256_light_254.png"
+kind = "light"
+
+[[theme]]
+name = "seoul256_light_255"
+file = "seoul256_light_255.png"
+kind = "light"
+
+[[theme]]
+name = "seoul256_light_256"
+file = "seoul256_light_256.png"
+kind = "light"
+
+[[theme]]
+name = "zenbones_light"
+file = "zenbones_light.png"
+kind = "light"
+
+[[theme]]
+name = "zenbones_dark"
+file = "zenbones_dark.png"
+kind = "dark"
+
+[[theme]]
+name = "neobones_light"
+file = "neobones_light.png"
+kind = "light"
+
+[[theme]]
+name = "neobones_dark"
+file = "neobones_dark.png"
+kind = "dark"
+
+[[theme]]
+name = "vimbones"
+file = "vimbones.png"
+kind = "light"
+
+[[theme]]
+name = "forestbones_light"
+file = "forestbones_light.png"
+kind = "light"
+
+[[theme]]
+name = "forestbones_dark"
+file = "forestbones_dark.png"
+kind = "dark"
+
+[[theme]]
+name = "nordbones"
+file = "nordbones.png"
+kind = "dark"
+
+[[theme]]
+name = "rosebones_light"
+file = "rosebones_light.png"
+kind = "light"
+
+[[theme]]
+name = "rosebones_dark"
+file = "rosebones_dark.png"
+kind = "dark"
+
+[[theme]]
+name = "tokyobones_light"
+file = "tokyobones_light.png"
+kind = "light"
+
+[[theme]]
+name = "tokyobones_dark"
+file = "tokyobones_dark.png"
+kind = "dark"
+
+[[theme]]
+name = "seoulbones_light"
+file = "seoulbones_light.png"
+kind = "light"
+
+[[theme]]
+name = "seoulbones_dark"
+file = "seoulbones_dark.png"
+kind = "dark"
+
+[[theme]]
+name = "duckbones"
+file = "duckbones.png"
+kind = "dark"
+
+[[theme]]
+name = "zenburned"
+file = "zenburned.png"
+kind = "dark"
+
+[[theme]]
+name = "zenwritten_light"
+file = "zenwritten_light.png"
+kind = "light"
+
+[[theme]]
+name = "zenwritten_dark"
+file = "zenwritten_dark.png"
+kind = "dark"
+
+[[theme]]
+name = "kanagawabones"
+file = "kanagawabones.png"
+kind = "dark"
+
+[[theme]]
+name = "nord"
+file = "nord.png"
+kind = "dark"
+
+[[theme]]
+name = "ayu_dark"
+file = "ayu_dark.png"
+kind = "dark"
+
+[[theme]]
+name = "ayu_mirage"
+file = "ayu_mirage.png"
+kind = "dark"
+
+[[theme]]
+name = "ayu_light"
+file = "ayu_light.png"
+kind = "light"
+
+[[theme]]
+name = "doom_one"
+file = "doom_one.png"
+kind = "dark"
+
+[[theme]]
+name = "doom_one_light"
+file = "doom_one_light.png"
+kind = "light"
+
+[[theme]]
+name = "helix"
+file = "helix.png"
+kind = "dark"
+
+[[theme]]
+name = "dark"
+file = "dark.png"
+kind = "dark"
diff --git a/docs/site/media/themes/tokyobones_dark.png b/docs/site/media/themes/tokyobones_dark.png
new file mode 100644
index 00000000..f873726d
--- /dev/null
+++ b/docs/site/media/themes/tokyobones_dark.png
Binary files differ
diff --git a/docs/site/media/themes/tokyobones_light.png b/docs/site/media/themes/tokyobones_light.png
new file mode 100644
index 00000000..211a30ff
--- /dev/null
+++ b/docs/site/media/themes/tokyobones_light.png
Binary files differ
diff --git a/docs/site/media/themes/tokyonight_day.png b/docs/site/media/themes/tokyonight_day.png
new file mode 100644
index 00000000..cdbef103
--- /dev/null
+++ b/docs/site/media/themes/tokyonight_day.png
Binary files differ
diff --git a/docs/site/media/themes/tokyonight_moon.png b/docs/site/media/themes/tokyonight_moon.png
new file mode 100644
index 00000000..d35bf419
--- /dev/null
+++ b/docs/site/media/themes/tokyonight_moon.png
Binary files differ
diff --git a/docs/site/media/themes/tokyonight_night.png b/docs/site/media/themes/tokyonight_night.png
new file mode 100644
index 00000000..5497275b
--- /dev/null
+++ b/docs/site/media/themes/tokyonight_night.png
Binary files differ
diff --git a/docs/site/media/themes/tokyonight_storm.png b/docs/site/media/themes/tokyonight_storm.png
new file mode 100644
index 00000000..5e62b9e2
--- /dev/null
+++ b/docs/site/media/themes/tokyonight_storm.png
Binary files differ
diff --git a/docs/site/media/themes/vimbones.png b/docs/site/media/themes/vimbones.png
new file mode 100644
index 00000000..134fd582
--- /dev/null
+++ b/docs/site/media/themes/vimbones.png
Binary files differ
diff --git a/docs/site/media/themes/zenbones_dark.png b/docs/site/media/themes/zenbones_dark.png
new file mode 100644
index 00000000..d7e8315c
--- /dev/null
+++ b/docs/site/media/themes/zenbones_dark.png
Binary files differ
diff --git a/docs/site/media/themes/zenbones_light.png b/docs/site/media/themes/zenbones_light.png
new file mode 100644
index 00000000..22c2da48
--- /dev/null
+++ b/docs/site/media/themes/zenbones_light.png
Binary files differ
diff --git a/docs/site/media/themes/zenburned.png b/docs/site/media/themes/zenburned.png
new file mode 100644
index 00000000..3b97815b
--- /dev/null
+++ b/docs/site/media/themes/zenburned.png
Binary files differ
diff --git a/docs/site/media/themes/zenwritten_dark.png b/docs/site/media/themes/zenwritten_dark.png
new file mode 100644
index 00000000..6421245f
--- /dev/null
+++ b/docs/site/media/themes/zenwritten_dark.png
Binary files differ
diff --git a/docs/site/media/themes/zenwritten_light.png b/docs/site/media/themes/zenwritten_light.png
new file mode 100644
index 00000000..28f3a144
--- /dev/null
+++ b/docs/site/media/themes/zenwritten_light.png
Binary files differ
diff --git a/docs/site/media/wait-editor.mp4 b/docs/site/media/wait-editor.mp4
new file mode 100644
index 00000000..49adadd6
--- /dev/null
+++ b/docs/site/media/wait-editor.mp4
Binary files differ
diff --git a/docs/site/media/wait-editor.png b/docs/site/media/wait-editor.png
new file mode 100644
index 00000000..1d029f4c
--- /dev/null
+++ b/docs/site/media/wait-editor.png
Binary files differ
diff --git a/docs/site/media/wait-editor.webm b/docs/site/media/wait-editor.webm
new file mode 100644
index 00000000..5afda502
--- /dev/null
+++ b/docs/site/media/wait-editor.webm
Binary files differ
diff --git a/docs/site/media/where-commands-run.mp4 b/docs/site/media/where-commands-run.mp4
new file mode 100644
index 00000000..c4bd83fe
--- /dev/null
+++ b/docs/site/media/where-commands-run.mp4
Binary files differ
diff --git a/docs/site/media/where-commands-run.png b/docs/site/media/where-commands-run.png
new file mode 100644
index 00000000..5af438cc
--- /dev/null
+++ b/docs/site/media/where-commands-run.png
Binary files differ
diff --git a/docs/site/media/where-commands-run.webm b/docs/site/media/where-commands-run.webm
new file mode 100644
index 00000000..c9d35176
--- /dev/null
+++ b/docs/site/media/where-commands-run.webm
Binary files differ
diff --git a/docs/site/site.css b/docs/site/site.css
index bab762d0..a0959d5e 100644
--- a/docs/site/site.css
+++ b/docs/site/site.css
@@ -63,12 +63,13 @@ body { margin:0; min-height:100vh; background:var(--field) radial-gradient(color
/* code: a window on the machine, titled in stripes */
.content code, .content pre, .content kbd, .tag { font-family:var(--mono); }
.content code { font-size:.82em; overflow-wrap:break-word; hyphens:none; }
-.content pre {
+.content pre:not(.ap-term-text) {
font-size:15px; line-height:1.45; padding:12px 14px; margin:1em 0; overflow-x:auto;
background:var(--deep); border:2px solid var(--leaf); border-top-width:8px; box-shadow:5px 5px 0 var(--shadow);
}
.content pre code { font-size:inherit; overflow-wrap:normal; }
-@media (prefers-color-scheme: dark) { .content pre span { color:inherit !important; } }
+/* Typst's code highlighting only: the cast player's terminal is a <pre> of coloured spans too */
+@media (prefers-color-scheme: dark) { .content pre:not(.ap-term-text) span { color:inherit !important; } }
.content pre.tutor { font-size:14px; }
/* tables: rows on alternating tints, a pardes #pairs */
@@ -81,8 +82,13 @@ body { margin:0; min-height:100vh; background:var(--field) radial-gradient(color
/* --- the semantic elements (docs/typ/style.typ) ------------------------------ */
.key { display:inline-block; padding:0 .3em; border-radius:4px; background:color-mix(in srgb, var(--leaf) 20%, transparent); color:var(--ink); font-size:.82em; white-space:nowrap; line-height:1.4; }
.key .plus, .key .then { color:var(--leaf); opacity:.8; padding:0 .12em; }
-.word { background:var(--tag); padding:0 .25em; color:var(--dim); }
-.word code { font-size:.82em; color:var(--ink); }
+/* a builtin or tag word: a chip to click, on the tag's ground over a rule
+ (Look and Exec in acme's look green and exec red) */
+:root { --look:#7fd07f; --exec:#ff8a7a; }
+@media (prefers-color-scheme: light) { :root { --look:#006600; --exec:#aa0000; } }
+.content code.word { font-size:.82em; color:var(--ink); background:var(--tag); padding:.05em .3em; border-radius:2px; border-bottom:2px solid var(--leaf); white-space:nowrap; }
+.content code.word.look { border-bottom-color:var(--look); }
+.content code.word.exec { border-bottom-color:var(--exec); }
.addr code { color:var(--plum); }
.file code { color:var(--leaf); }
.btn, .chord { display:inline-flex; align-items:center; gap:2px; vertical-align:-.38em; margin-block:-.3em; }
@@ -126,7 +132,6 @@ body { margin:0; min-height:100vh; background:var(--field) radial-gradient(color
.glossary { margin:1.4em 0; }
.glossary summary { cursor:pointer; list-style-position:inside; }
.glossary summary h3, .glossary summary p { display:inline; margin:0; }
-.glossary summary .count { font:20px var(--pixel); color:var(--dim); margin-left:.4em; }
.vh { position:absolute; width:1px; height:1px; overflow:hidden; clip-path:inset(50%); white-space:nowrap; }
.colophon { font:15px var(--pixel); color:var(--dim); text-align:center; }
.colophon a { color:var(--leaf); }
@@ -144,8 +149,8 @@ body { margin:0; min-height:100vh; background:var(--field) radial-gradient(color
@media (max-width:600px) { .cmd pre { white-space:pre-wrap; overflow-wrap:anywhere; } }
/* terminal recordings: the first across the page, the rest two by two */
-.casts { display:grid; grid-template-columns:repeat(auto-fit, minmax(min(100%, 340px), 1fr)); gap:18px; margin:1em 0 1.4em; }
-.casts .first { grid-column:1 / -1; }
+/* one per row at the page's full width: a terminal at half width is unreadable */
+.casts { display:grid; grid-template-columns:minmax(0, 1fr); gap:22px; margin:1em 0 1.4em; }
.cast .player { background:#121314; }
.cast figcaption strong { color:var(--leaf); }
.content h2.shelf { font-size:26px; margin:1.2em 0 .4em; }
@@ -157,3 +162,63 @@ body { margin:0; min-height:100vh; background:var(--field) radial-gradient(color
.shot figcaption { padding:3px 8px; font:16px var(--pixel); color:var(--dim); border-top:2px solid var(--leaf); }
.shot.light figcaption::after { content:" · light"; color:var(--amber); }
.shot .pending { aspect-ratio:960/700; display:flex; align-items:center; justify-content:center; font:15px var(--pixel); color:var(--dim); }
+
+/* a builtin's chip that links to its glossary entry */
+.content a:has(> code.word) { text-decoration:none; }
+.content a:hover > code.word { text-decoration:underline; text-underline-offset:3px; }
+.credit { font-size:18px; color:var(--dim); margin:0 0 .3em; }
+/* the glossary: each entry's name is a small heading over its line */
+main[data-page="builtins"] .content h4 { font:600 18px var(--mono); color:var(--leaf); margin:1.1em 0 .1em; }
+main[data-page="builtins"] .content h4 + p { margin-top:0; }
+.content pre.tutor .btn, .content pre.tutor .chord { vertical-align:-.3em; }
+.all-words { line-height:2.1; }
+
+/* the virtual filesystem as a tree: names and connectors, descriptions
+ in a quiet column; on a phone a description wraps under its name */
+.content pre.fstree { font-size:15px; line-height:1.35; overflow-x:visible; }
+.fstree .row { display:grid; grid-template-columns:var(--name) 1fr; align-items:baseline; }
+.fstree .nl { display:none; }
+.fstree .branch { color:var(--rule); }
+.fstree .dir, .fstree .dir a { color:var(--leaf); font-weight:700; }
+.fstree a { color:var(--amber); text-decoration:none; }
+.fstree a:hover { text-decoration:underline; }
+.fstree .desc { color:var(--dim); font-family:var(--hand); font-size:17px; white-space:normal; line-height:1.3; }
+@media (max-width:600px) {
+ .content pre.fstree { font-size:13px; }
+ .fstree .row { display:block; }
+ .fstree .name { display:block; }
+ /* under the name: its prefix is --cols cells of the 13px mono font */
+ .fstree .desc { display:block; padding-left:calc(var(--cols) * 7.8px); font-size:15px; margin-bottom:.15em; }
+}
+
+/* what's in it: a row of linked chips under the lead */
+.inside { display:flex; flex-wrap:wrap; gap:8px 10px; margin:.2em 0 1.1em; padding:0; list-style:none; }
+.inside a { display:inline-block; padding:2px 10px; font:17px var(--pixel); color:var(--leaf); background:var(--tag); border:2px solid var(--leaf); text-decoration:none; }
+.inside a:hover { color:var(--amber); border-color:var(--amber); }
+
+/* a screenshot with numbered pins, their labels listed beside it */
+.annotated { margin:1.2em 0 1.6em; display:grid; grid-template-columns:minmax(0, 3fr) minmax(12em, 2fr); gap:14px 22px; align-items:center; }
+.annotated .frame { position:relative; border:2px solid var(--leaf); box-shadow:5px 5px 0 var(--shadow); }
+.annotated img { display:block; width:100%; height:auto; }
+.annotated .pin { position:absolute; transform:translate(-50%, -50%); width:1.5em; height:1.5em; border-radius:50%;
+ display:flex; align-items:center; justify-content:center; font:700 14px var(--mono); background:var(--amber); color:#1b120a; box-shadow:0 0 0 2px var(--panel); }
+.annotated .pins { margin:0; padding-left:1.8em; font-size:18px; }
+.annotated .pins li { margin:.25em 0; }
+.annotated .pins li::marker { font:700 15px var(--mono); color:var(--amber); }
+@media (max-width:600px) { .annotated { grid-template-columns:minmax(0, 1fr); } }
+.clip figcaption .more { font:15px var(--pixel); color:var(--leaf); margin-left:.3em; white-space:nowrap; }
+.clip { scroll-margin-top:16px; }
+
+/* a pane's box: blank normal, ^ insert, $ raw; filled while unsaved */
+.mode-box { display:inline-flex; align-items:center; justify-content:center; width:1.15em; height:1.15em; vertical-align:-.15em;
+ font:700 .8em var(--mono); background:var(--tag); color:var(--ink); border:2px solid var(--leaf); border-radius:2px; }
+.mode-box.unsaved { background:var(--amber); border-color:var(--amber); color:#1b120a; }
+/* a recording inside a chapter */
+.content .clip.inline { margin:1.2em 0; max-width:640px; }
+.clip.inline video { display:block; width:100%; height:auto; background:var(--deep); }
+.content .clip.inline.wide { max-width:none; }
+.glossary dl { margin:.6em 0 0; display:grid; grid-template-columns:minmax(8em, max-content) 1fr; }
+.glossary dt, .glossary dd { margin:0; padding:5px 9px; }
+.glossary dt { font-weight:600; color:var(--leaf); }
+.glossary dt:nth-of-type(odd), .glossary dt:nth-of-type(odd) + dd { background:color-mix(in srgb, var(--tag) 70%, transparent); }
+@media (max-width:600px) { .glossary dl { grid-template-columns:1fr; } .glossary dd { padding-top:0; } }
diff --git a/docs/site/site.typ b/docs/site/site.typ
index afcd1041..47903d6e 100644
--- a/docs/site/site.typ
+++ b/docs/site/site.typ
@@ -4,7 +4,7 @@
// typst compile --root . --format bundle --features bundle,html docs/site/site.typ OUT
// Every link is relative and every page sits at the top of OUT, so the site
// works from file:// and from any static server.
-#import "../typ/style.typ": chapters, tutor-path, doc-links, project
+#import "../typ/style.typ": chapters, tutor-path, doc-links, project, btn, chord
#let clips = toml("media/clips.toml").clip
#let casts = toml("casts/casts.toml").cast
@@ -19,11 +19,25 @@
// Change the landing here; the rest of the site is the chapters.
#let landing = (
lead: [pardes is a text environment, after acme and helix, where any text
- is live: right-click looks at it (opens the file at that line, the URL,
- or finds the word) and middle-click runs it (a builtin or a shell
- command). Read PDFs and source, edit code and use terminals with it, in
- a terminal or in its own window.],
+ is live: right-click `main.c:12` to open that line, middle-click `make`
+ to run it, in source, PDFs and terminals alike, in a terminal or in its
+ own window.],
+ credit: [It is built on ideas from #link("https://9p.io/plan9/")[Plan 9] from
+ Bell Labs: #link("https://9p.io/sys/doc/acme/acme.html")[acme]'s text as
+ the interface, and the 9P protocol.],
status: [Linux; macOS in progress. Version #version.],
+ // what's in it: a word each, linked to where it is told; no prose
+ // what's in it: each word jumps to its recording on this page when it
+ // has one, and that recording's caption links on to the docs
+ inside: (
+ (name: "Terminals", rec: "terminals", docs: "guide.html#terminals"),
+ (name: "PDFs", rec: "pdf-navigation", docs: "builtins.html#builtin-PdfSections"),
+ (name: "Images", rec: "image-pane", docs: "reference.html#panes"),
+ (name: "Language servers", rec: none, docs: "setup.html#language-servers"),
+ (name: "Diff review", rec: "diff-review", docs: "guide.html#reviewing-diffs"),
+ (name: "Scripting", rec: "scripting-over-9p", docs: "scripting.html"),
+ (name: "Themes", rec: none, docs: "themes.html"),
+ ),
terminal: [In a terminal],
window: [In its own window],
start: (
@@ -84,6 +98,20 @@
]
]
+#let in-view-script = el("script")[#(
+ "(() => { if (!('IntersectionObserver' in window)) return;
+" +
+ " const p = el => el.player || (el.tagName === 'VIDEO' ? el : null);
+" +
+ " const io = new IntersectionObserver(es => { for (const e of es) { const r = p(e.target); if (!r) continue;
+" +
+ " if (e.isIntersecting) Promise.resolve(r.play()).catch(() => {}); else r.pause(); } }, {threshold: 0.25});
+" +
+ " for (const el of document.querySelectorAll('.clip video, .cast .player')) io.observe(el);
+" +
+ "})();"
+)]
+
#let shell(id, title, body) = html.html(lang: "en", {
html.head({
html.meta(charset: "utf-8")
@@ -101,12 +129,16 @@
#el("footer", (class: "colophon"))[
pardes #version ·
source: #project.mirrors.map(m => el("a", (href: m.web))[#m.name]).join(", ") ·
+ #el("a", (href: project.changes))[changes] ·
#if project.license != none [#project.license license · ]
built from `docs/typ` with Typst ·
#el("a", (href: "fonts/LICENSE-DepartureMono.txt"))[fonts] (OFL) ·
#el("a", (href: "player/LICENSE-asciinema-player.txt"))[asciinema-player] (Apache-2.0)
]
]
+ // after the page's own scripts (the landing's players), on every page
+ // that has a recording
+ in-view-script
})
})
@@ -126,34 +158,55 @@
#doc-links.update(true)
-#let video(c) = el("video", (poster: "media/" + c.name + ".png", muted: "", loop: "", playsinline: "",
- controls: "", preload: "none"))[
+// Every recording plays by itself; the script below plays each only while
+// it is on screen. Without the script, `autoplay` still plays them.
+#let video(c) = el("video", (poster: "media/" + c.name + ".png", autoplay: "", muted: "", loop: "", playsinline: "",
+ controls: ""))[
#el("source", (src: "media/" + c.name + ".webm", type: "video/webm"))[]
#el("source", (src: "media/" + c.name + ".mp4", type: "video/mp4"))[]
]
#let placeholder = el("img", (src: "media/placeholder.svg", alt: "", width: "640", height: "400"))[]
+/// A recording's caption: its text (which may hold #link markup), then the
+/// docs of the "What's in it" word that jumps here, if any.
+#let caption(c) = {
+ if c.caption.contains("#") { eval(c.caption, mode: "markup") } else { c.caption }
+ let to = landing.inside.find(i => i.rec == c.name)
+ if to != none [ #el("a", (class: "more", href: to.docs))[#to.name in the docs →]]
+}
+
/// A terminal recording: a box the player fills, its data inline (so it
-/// plays from file://), its caption under it. The first ready one plays.
+/// plays from file://), its caption under it.
#let ready-casts = casts.filter(c => c.ready)
-#let cast(c, i) = el("figure", (class: if i == 0 { "clip cast first" } else { "clip cast" }))[
+#let cast(c, i) = el("figure", (class: if i == 0 { "clip cast first" } else { "clip cast" }, id: "rec-" + c.name))[
#if c.ready { el("div", (class: "player", id: "cast-" + c.name, "aria-label": c.title))[] } else { placeholder }
- #el("figcaption")[#el("strong")[#c.title.] #c.caption]
+ #el("figcaption")[#el("strong")[#c.title.] #caption(c)]
]
#let player-script = {
let list = ready-casts.enumerate().map(((i, c)) => (
id: "cast-" + c.name, data: read("casts/" + c.name + ".cast"),
- cols: c.cols, rows: c.rows, autoPlay: i == 0,
+ cols: c.cols, rows: c.rows, poster: "npt:0:" + str(c.at("poster_at", default: 2)),
))
// "</" may not appear inside a script element
let data = json.encode(list, pretty: false).replace("</", "<\\/")
el("script", (src: "player/asciinema-player.min.js"))[]
- el("script")[#("for (const c of " + data + ") AsciinemaPlayer.create({data: c.data}, document.getElementById(c.id), {cols: c.cols, rows: c.rows, autoPlay: c.autoPlay, loop: true, fit: 'width'});")]
+ el("script")[#("for (const c of " + data + ") { const el = document.getElementById(c.id); el.player = AsciinemaPlayer.create({data: c.data}, el, {cols: c.cols, rows: c.rows, autoPlay: false, loop: true, fit: 'width', poster: c.poster}); }")]
}
+/// Plays a recording while it is on screen and pauses it once it leaves.
+/// The casts wait for it (autoPlay off) so each shows its poster frame
+/// until then; the videos autoplay by themselves too.
+
#document(href("index"), title: "pardes", shell("index", "pardes")[
#el("h1", (class: "masthead"))[pardes]
#el("p", (class: "lead"))[#landing.lead]
+ #el("ul", (class: "inside", "aria-label": "What's in it"))[
+ #for i in landing.inside {
+ let to = if i.rec != none { "#rec-" + i.rec } else { i.docs }
+ el("li")[#el("a", (href: to, title: if i.rec != none { "watch it here; the docs: " + i.docs } else { "the docs" }))[#i.name]]
+ }
+ ]
+ #el("p", (class: "credit"))[#landing.credit]
#el("p", (class: "runs"))[#landing.status]
#el("div", (class: "start"))[
#for s in landing.start {
@@ -169,10 +222,10 @@
#el("div", (class: "casts"))[#for (i, c) in casts.enumerate() { cast(c, i) }]
#el("h2", (class: "shelf"))[#landing.window]
#el("div", (class: "clips"))[
- #for c in clips {
- el("figure", (class: "clip"))[
+ #for c in clips.filter(c => c.at("landing", default: true)) {
+ el("figure", (class: "clip", id: "rec-" + c.name))[
#if c.ready { video(c) } else { placeholder }
- #el("figcaption")[#c.caption]
+ #el("figcaption")[#caption(c)]
]
}
]
@@ -197,8 +250,38 @@
])
}
+/// The tutor's text with its mouse buttons drawn: B1, B2, B3 and the
+/// chords it writes 1-2 (hold 1, click 2) become the docs' mouse glyphs,
+/// each with its hidden words, inside the preformatted block.
+#let tutor-text(t) = {
+ // the guide's sections by title, for "-> Guide: Modes, Config"
+ let guide-sections = (:)
+ for m in read("../typ/guide.typ").matches(regex("(?m)^= (.+?) <([a-z0-9-]+)>$")) {
+ guide-sections.insert(m.captures.at(0), m.captures.at(1))
+ }
+ let tokens = regex("\\bB([123])\\b|\\b([123])-([123])\\b|docs/typ/([a-z]+)\\.typ|(?m)(?:^ -> Guide: )(.+)$|https://[^\\s)]+")
+ let at = 0
+ for m in t.matches(tokens) {
+ t.slice(at, m.start)
+ let (b, c1, c2, page, sections) = m.captures
+ if b != none { btn("B" + b) }
+ else if c1 != none { chord("B" + c1, "B" + c2) }
+ else if page != none { link(page + ".html", m.text) }
+ else if sections != none {
+ " -> Guide: "
+ sections.split(", ").map(name => {
+ let l = guide-sections.at(name, default: none)
+ if l != none { link("guide.html#" + l, name) } else { name }
+ }).join(", ")
+ }
+ else { link(m.text, m.text) }
+ at = m.end
+ }
+ t.slice(at)
+}
+
#document(href("tutor"), title: "The tutor", shell("tutor", "The tutor")[
#heading(level: 1)[The tutor] <tutor>
The tutor as the editor shows it (#raw("Tutor"), or #raw("SPC h t")).
- #el("pre", (class: "tutor"))[#read(tutor-path)]
+ #el("pre", (class: "tutor"))[#tutor-text(read(tutor-path))]
])