cat / 012
clone

a spreadsheet for the terminal: lotus 1-2-3 looks, google sheets keys and formulas, one go binary

Add golden screen snapshots and review gallery

Dami committed 37ada28
libghostty renders each key UI state to HTML that references palette
variables, compared against goldens in e2e/testdata/screens. make
screens rewrites them and builds a gallery with dark and light reference
palettes for visual review. Light-terminal variants cover the key
screens.
commit
37ada28630b125f132343927477190ec537d2ab8
parent
071e0a65d908eec63cbeec5cff9dcbd8ce27c554
author
Dami <dami.etoile@gmail.com>
25 files changed, +911 -6
M.gitignore1+
MMakefile7+-
Me2e/harness_test.go36+++++-
Ae2e/palette_test.go48+++++++
Ae2e/screens_test.go193++++++++++++++++++++++++++++++
Ae2e/testdata/screens/.playwright-cli/console-2026-09-26T22-10-26-203Z.log1+
Ae2e/testdata/screens/.playwright-cli/page-2026-09-26T22-10-26-244Z.yml65++++++++++
Ae2e/testdata/screens/.playwright-cli/page-2026-09-26T22-11-20-441Z.yml65++++++++++
Ae2e/testdata/screens/.playwright-cli/page-2026-09-26T22-11-44-676Z.yml51++++++++
Ae2e/testdata/screens/budget-light.html30+++++
Ae2e/testdata/screens/budget.html30+++++
Ae2e/testdata/screens/edit-error.html30+++++
Ae2e/testdata/screens/entry-formula.html30+++++
Ae2e/testdata/screens/error-goto.html30+++++
Ae2e/testdata/screens/help-light.html22+++
Ae2e/testdata/screens/help.html22+++
Ae2e/testdata/screens/menu-quit-unsaved-light.html30+++++
Ae2e/testdata/screens/menu-quit-unsaved.html30+++++
Ae2e/testdata/screens/menu-top.html30+++++
Ae2e/testdata/screens/narrow.html16++
Ae2e/testdata/screens/point-range-light.html30+++++
Ae2e/testdata/screens/point-range.html30+++++
Ae2e/testdata/screens/prompt-width.html30+++++
Ae2e/testdata/screens/range-erase.html30+++++
Ae2e/testdata/screens/ready-empty.html30+++++
M .gitignore +1 -0
M Makefile +6 -1
M e2e/harness_test.go +31 -5
@@ -58,18 +58,34 @@ type session struct {
5858 exited chan struct{} // closed when the pty reader stops5959 }6060 61+// options configures a session.62+type options struct {63+ dir string // working directory; a fresh temp dir if empty64+ cols, rows uint16 // defaults to 100x3065+ light bool // use the light reference palette66+}67+6168 // start launches one23 in dir (a fresh temp dir if empty) with args.6269 func start(t *testing.T, dir string, args ...string) *session {6370 t.Helper()64- if dir == "" {65- dir = t.TempDir()71+ return startWith(t, options{dir: dir}, args...)72+}73+74+func startWith(t *testing.T, o options, args ...string) *session {75+ t.Helper()76+ if o.dir == "" {77+ o.dir = t.TempDir()6678 }67- s := &session{t: t, dir: dir, cols: 100, rows: 30, exited: make(chan struct{})}79+ if o.cols == 0 {80+ o.cols, o.rows = 100, 3081+ }82+ s := &session{t: t, dir: o.dir, cols: o.cols, rows: o.rows, exited: make(chan struct{})}6883 6984 var err error7085 if s.vt, err = ghostty.NewTerminal(ghostty.WithSize(s.cols, s.rows)); err != nil {7186 t.Fatal(err)7287 }88+ applyPalette(t, s.vt, o.light)7389 if s.enc, err = ghostty.NewKeyEncoder(); err != nil {7490 t.Fatal(err)7591 }
@@ -78,7 +94,7 @@ func start(t *testing.T, dir string, args ...string) *session {
7894 }7995 8096 s.cmd = exec.Command(binPath, args...)81- s.cmd.Dir = dir97+ s.cmd.Dir = o.dir8298 s.cmd.Env = append(os.Environ(), "TERM=xterm-256color", "COLORTERM=truecolor")8399 s.pty, err = pty.StartWithSize(s.cmd, &pty.Winsize{Cols: s.cols, Rows: s.rows})84100 if err != nil {
@@ -125,10 +141,20 @@ func start(t *testing.T, dir string, args ...string) *session {
125141 126142 // screen returns the visible screen as plain text.127143 func (s *session) screen() string {144+ return s.format(ghostty.FormatterFormatPlain)145+}146+147+// html returns the visible screen as HTML with inline styles, colored by148+// the session's reference palette.149+func (s *session) html() string {150+ return s.format(ghostty.FormatterFormatHTML)151+}152+153+func (s *session) format(format ghostty.FormatterFormat) string {128154 s.mu.Lock()129155 defer s.mu.Unlock()130156 f, err := ghostty.NewFormatter(s.vt,131- ghostty.WithFormatterFormat(ghostty.FormatterFormatPlain),157+ ghostty.WithFormatterFormat(format),132158 ghostty.WithFormatterTrim(true))133159 if err != nil {134160 s.t.Fatal(err)
A e2e/palette_test.go +48 -0
A e2e/screens_test.go +193 -0
@@ -0,0 +1,193 @@
1+package e2e2+3+import (4+ "flag"5+ "fmt"6+ "html"7+ "os"8+ "path/filepath"9+ "strings"10+ "testing"11+ "time"12+)13+14+var update = flag.Bool("update", false, "rewrite golden screens in testdata/screens")15+16+// A screen is a named UI state captured as styled HTML. Goldens make every17+// visual change show up in review; `make screens` renders them to a gallery18+// with dark and light palettes for looking at.19+type screen struct {20+ name string21+ opts options22+ setup func(s *session)23+}24+25+// budget types a small worksheet with labels, numbers, formulas and an26+// error, used by several screens.27+func budget(s *session) {28+ s.keys("Household budget 2026", "<down>", "<down>")29+ s.keys("Rent", "<right>", "1450", "<down>", "<left>")30+ s.keys("Groceries", "<right>", "612.4", "<down>", "<left>")31+ s.keys("Transit", "<right>", "96", "<down>", "<left>")32+ s.keys("Savings rate", "<right>", "+B3/0", "<down>", "<left>")33+ s.keys(`"Total`, "<right>", "@SUM(B3..B5)", "<enter>")34+ s.waitFor("B7: @SUM(B3..B5)")35+}36+37+var screens = []screen{38+ {name: "ready-empty", setup: func(s *session) {}},39+ {name: "budget", setup: budget},40+ {name: "budget-light", opts: options{light: true}, setup: budget},41+ {name: "entry-formula", setup: func(s *session) {42+ budget(s)43+ s.keys("<down>", "+B7*12")44+ s.waitFor("VALUE")45+ }},46+ {name: "point-range", setup: func(s *session) {47+ budget(s)48+ s.keys("<right>", "@AVG(", "<left>", "<up>", "<up>", "<up>", "<up>", ".", "<down>", "<down>")49+ s.waitFor("@AVG(B3..B5")50+ }},51+ {name: "edit-error", setup: func(s *session) {52+ s.keys("@SUM(A1", "<enter>")53+ s.waitFor("expected , or )")54+ }},55+ {name: "menu-top", setup: func(s *session) {56+ budget(s)57+ s.keys("/")58+ s.waitFor("Worksheet Range File Quit")59+ }},60+ {name: "menu-quit-unsaved", setup: func(s *session) {61+ budget(s)62+ s.keys("/q", "<right>")63+ s.waitFor("NOT SAVED")64+ }},65+ {name: "prompt-width", setup: func(s *session) {66+ budget(s)67+ s.keys("<home>", "/wcs", "<right>", "<right>", "<right>")68+ s.waitFor("Enter column width (1..240): 12")69+ }},70+ {name: "range-erase", setup: func(s *session) {71+ budget(s)72+ s.keys("<home>", "<down>", "<down>", "/re", "<right>", "<down>", "<down>")73+ s.waitFor("Enter range to erase: A3..B5")74+ }},75+ {name: "error-goto", setup: func(s *session) {76+ s.keys("<f5>", "nope", "<enter>")77+ s.waitFor("Invalid cell address")78+ }},79+ {name: "help", setup: func(s *session) {80+ s.keys("<f1>")81+ s.waitFor("HELP")82+ }},83+ {name: "narrow", opts: options{cols: 60, rows: 16}, setup: budget},84+}85+86+// Key screens are also recorded on a light terminal, where the app picks87+// its light theme from the reported background color.88+func init() {89+ for _, name := range []string{"point-range", "menu-quit-unsaved", "help"} {90+ for _, sc := range screens {91+ if sc.name == name {92+ sc.name += "-light"93+ sc.opts.light = true94+ screens = append(screens, sc)95+ }96+ }97+ }98+}99+100+func TestScreens(t *testing.T) {101+ dir := filepath.Join("testdata", "screens")102+ if *update {103+ os.MkdirAll(dir, 0o755)104+ }105+ for _, sc := range screens {106+ t.Run(sc.name, func(t *testing.T) {107+ s := startWith(t, sc.opts)108+ sc.setup(s)109+ got := s.stableHTML()110+ path := filepath.Join(dir, sc.name+".html")111+ if *update {112+ if err := os.WriteFile(path, []byte(got), 0o644); err != nil {113+ t.Fatal(err)114+ }115+ return116+ }117+ want, err := os.ReadFile(path)118+ if err != nil {119+ t.Fatalf("missing golden (run make screens): %v", err)120+ }121+ if got != string(want) {122+ actual := filepath.Join(t.TempDir(), sc.name+".html")123+ os.WriteFile(actual, []byte(got), 0o644)124+ t.Errorf("screen %s changed; if intended, run make screens and review the gallery.\nplain text now:\n%s", sc.name, s.screen())125+ }126+ })127+ }128+ if *update {129+ if err := writeGallery(dir); err != nil {130+ t.Fatal(err)131+ }132+ }133+}134+135+// stableHTML waits until two captures in a row match, so a snapshot never136+// catches a frame mid-render.137+func (s *session) stableHTML() string {138+ s.t.Helper()139+ prev := s.html()140+ for range 100 {141+ time.Sleep(30 * time.Millisecond)142+ cur := s.html()143+ if cur == prev {144+ return cur145+ }146+ prev = cur147+ }148+ s.t.Fatal("screen never settled")149+ return ""150+}151+152+// writeGallery renders all goldens into gallery.html (git-ignored), once153+// with each reference palette.154+func writeGallery(dir string) error {155+ var b strings.Builder156+ b.WriteString(`<!doctype html><meta charset="utf-8"><title>one23 screens</title>157+<style>158+body{margin:0;padding:32px;background:#0f1012;color:#ddd;font:14px system-ui,sans-serif}159+h1{font-weight:600;margin:0 0 24px}160+section{margin:0 0 40px}161+h2{font:500 13px ui-monospace,monospace;color:#aaa;margin:0 0 8px}162+.term{display:inline-block;padding:14px 16px;border-radius:10px;box-shadow:0 8px 30px #0008;font:13px/1.25 "JetBrains Mono","SF Mono",Menlo,monospace}163+.term div{font-family:inherit !important}164+.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(820px,1fr));gap:8px 24px}165+`)166+ for _, p := range []struct {167+ class string168+ ansi [16]uint32169+ bg, fg string170+ }{{"dark", darkANSI, "#1d1f21", "#c5c8c6"}, {"light", lightANSI, "#fafafa", "#1d1f21"}} {171+ fmt.Fprintf(&b, ".%s{background:%s;color:%s}.%s{", p.class, p.bg, p.fg, p.class)172+ for i, c := range p.ansi {173+ fmt.Fprintf(&b, "--vt-palette-%d:#%06x;", i, c)174+ }175+ b.WriteString("}\n")176+ }177+ b.WriteString("</style><h1>one23 screens</h1><div class=grid>\n")178+ for _, sc := range screens {179+ body, err := os.ReadFile(filepath.Join(dir, sc.name+".html"))180+ if err != nil {181+ return err182+ }183+ fmt.Fprintf(&b, "<section id=%q><h2>%s</h2><div>", sc.name, html.EscapeString(sc.name))184+ th := "dark"185+ if sc.opts.light {186+ th = "light"187+ }188+ fmt.Fprintf(&b, "<div class=\"term %s\">%s</div>", th, body)189+ b.WriteString("</div></section>\n")190+ }191+ b.WriteString("</div>\n")192+ return os.WriteFile(filepath.Join(dir, "gallery.html"), []byte(b.String()), 0o644)193+}
A e2e/testdata/screens/.playwright-cli/console-2026-09-26T22-10-26-203Z.log +1 -0
A e2e/testdata/screens/.playwright-cli/page-2026-09-26T22-10-26-244Z.yml +65 -0
@@ -0,0 +1,65 @@
1+- generic [active] [ref=e1]:2+ - heading "one23 screens" [level=1] [ref=e2]3+ - generic [ref=e3]:4+ - heading "ready-empty" [level=2] [ref=e4]5+ - generic [ref=e5]:6+ - generic [ref=e6]: "A1: READY A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled F1 Help / Menu"7+ - generic [ref=e8]: "A1: READY A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled F1 Help / Menu"8+ - generic [ref=e10]:9+ - heading "budget" [level=2] [ref=e11]10+ - generic [ref=e12]:11+ - generic [ref=e13]: "B7: @SUM(B3..B5) READY A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"12+ - generic [ref=e15]: "B7: @SUM(B3..B5) READY A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"13+ - generic [ref=e17]:14+ - heading "budget-light" [level=2] [ref=e18]15+ - generic [ref=e19]: "B7: @SUM(B3..B5) READY A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"16+ - generic [ref=e22]:17+ - heading "entry-formula" [level=2] [ref=e23]18+ - generic [ref=e24]:19+ - generic [ref=e25]: "B8: VALUE +B7*12 A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"20+ - generic [ref=e27]: "B8: VALUE +B7*12 A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"21+ - generic [ref=e29]:22+ - heading "point-range" [level=2] [ref=e30]23+ - generic [ref=e31]:24+ - generic [ref=e32]: "C7: POINT @AVG(B3..B5 Arrows move, . anchors a range, Esc unanchors, Enter accepts A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"25+ - generic [ref=e34]: "C7: POINT @AVG(B3..B5 Arrows move, . anchors a range, Esc unanchors, Enter accepts A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"26+ - generic [ref=e36]:27+ - heading "edit-error" [level=2] [ref=e37]28+ - generic [ref=e38]:29+ - generic [ref=e39]: "A1: EDIT @SUM(A1 expected , or ) at position 8 A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled F1 Help / Menu"30+ - generic [ref=e41]: "A1: EDIT @SUM(A1 expected , or ) at position 8 A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled F1 Help / Menu"31+ - generic [ref=e43]:32+ - heading "menu-top" [level=2] [ref=e44]33+ - generic [ref=e45]:34+ - generic [ref=e46]: "B7: @SUM(B3..B5) MENU Worksheet Range File Quit Column Erase A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"35+ - generic [ref=e48]: "B7: @SUM(B3..B5) MENU Worksheet Range File Quit Column Erase A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"36+ - generic [ref=e50]:37+ - heading "menu-quit-unsaved" [level=2] [ref=e51]38+ - generic [ref=e52]:39+ - generic [ref=e53]: "B7: @SUM(B3..B5) MENU No Yes WORKSHEET CHANGES NOT SAVED! End the session anyway? A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"40+ - generic [ref=e55]: "B7: @SUM(B3..B5) MENU No Yes WORKSHEET CHANGES NOT SAVED! End the session anyway? A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"41+ - generic [ref=e57]:42+ - heading "prompt-width" [level=2] [ref=e58]43+ - generic [ref=e59]:44+ - generic [ref=e60]: "A1: [W12] 'Household budget 2026 POINT Enter column width (1..240): 12 Type a width or use the left and right arrows A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings rate ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"45+ - generic [ref=e62]: "A1: [W12] 'Household budget 2026 POINT Enter column width (1..240): 12 Type a width or use the left and right arrows A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings rate ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"46+ - generic [ref=e64]:47+ - heading "range-erase" [level=2] [ref=e65]48+ - generic [ref=e66]:49+ - generic [ref=e67]: "A3: 'Rent POINT Enter range to erase: A3..B5 Arrows move, . anchors a range, Esc unanchors, Enter accepts A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"50+ - generic [ref=e69]: "A3: 'Rent POINT Enter range to erase: A3..B5 Arrows move, . anchors a range, Esc unanchors, Enter accepts A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"51+ - generic [ref=e71]:52+ - heading "error-goto" [level=2] [ref=e72]53+ - generic [ref=e73]:54+ - generic [ref=e74]: "A1: ERROR A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Invalid cell address: nope (press any key)"55+ - generic [ref=e76]: "A1: ERROR A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Invalid cell address: nope (press any key)"56+ - generic [ref=e78]:57+ - heading "help" [level=2] [ref=e79]58+ - generic [ref=e80]:59+ - generic [ref=e81]: "HELP one23 (press any key to return) Arrows Move the cell pointer PgUp / PgDn Move one screen up or down Tab / Shift+Tab Move one screen right or left Home Go to A1 Ctrl+C Quit immediately F2 Edit the current cell's contents DELETE Erase the current cell F5 Move the cell pointer to an address F1 Show keys and functions / OR < Open the slash menu Entries Text Label (prefix ' left, \" right, ^ center) 0-9 + - . ( @ # $ Value or formula, e.g. +A1*2, @SUM(A1..A5) Arrows after an operator enter POINT mode; . anchors a range Functions: @SUM @AVG @COUNT @MIN @MAX @ABS @INT @SQRT @ROUND @MOD @IF @PI @TRUE @FALSE @ERR @NA Operators: + - * / ^ & = <> < > <= >= #AND# #OR# #NOT#"60+ - generic [ref=e83]: "HELP one23 (press any key to return) Arrows Move the cell pointer PgUp / PgDn Move one screen up or down Tab / Shift+Tab Move one screen right or left Home Go to A1 Ctrl+C Quit immediately F2 Edit the current cell's contents DELETE Erase the current cell F5 Move the cell pointer to an address F1 Show keys and functions / OR < Open the slash menu Entries Text Label (prefix ' left, \" right, ^ center) 0-9 + - . ( @ # $ Value or formula, e.g. +A1*2, @SUM(A1..A5) Arrows after an operator enter POINT mode; . anchors a range Functions: @SUM @AVG @COUNT @MIN @MAX @ABS @INT @SQRT @ROUND @MOD @IF @PI @TRUE @FALSE @ERR @NA Operators: + - * / ^ & = <> < > <= >= #AND# #OR# #NOT#"61+ - generic [ref=e85]:62+ - heading "narrow" [level=2] [ref=e86]63+ - generic [ref=e87]:64+ - generic [ref=e88]: "B7: @SUM(B3..B5) READY A B C D E F 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 untitled [modified] F1 Help / Menu"65+ - generic [ref=e90]: "B7: @SUM(B3..B5) READY A B C D E F 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 untitled [modified] F1 Help / Menu"\ No newline at end of file
A e2e/testdata/screens/.playwright-cli/page-2026-09-26T22-11-20-441Z.yml +65 -0
@@ -0,0 +1,65 @@
1+- generic [active] [ref=f1e1]:2+ - heading "one23 screens" [level=1] [ref=f1e2]3+ - generic [ref=f1e3]:4+ - heading "ready-empty" [level=2] [ref=f1e4]5+ - generic [ref=f1e5]:6+ - generic [ref=f1e6]: "A1: READY A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled F1 Help / Menu"7+ - generic [ref=f1e8]: "A1: READY A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled F1 Help / Menu"8+ - generic [ref=f1e10]:9+ - heading "budget" [level=2] [ref=f1e11]10+ - generic [ref=f1e12]:11+ - generic [ref=f1e13]: "B7: @SUM(B3..B5) READY A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"12+ - generic [ref=f1e15]: "B7: @SUM(B3..B5) READY A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"13+ - generic [ref=f1e17]:14+ - heading "budget-light" [level=2] [ref=f1e18]15+ - generic [ref=f1e19]: "B7: @SUM(B3..B5) READY A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"16+ - generic [ref=f1e22]:17+ - heading "entry-formula" [level=2] [ref=f1e23]18+ - generic [ref=f1e24]:19+ - generic [ref=f1e25]: "B8: VALUE +B7*12 A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"20+ - generic [ref=f1e27]: "B8: VALUE +B7*12 A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"21+ - generic [ref=f1e29]:22+ - heading "point-range" [level=2] [ref=f1e30]23+ - generic [ref=f1e31]:24+ - generic [ref=f1e32]: "C7: POINT @AVG(B3..B5 Arrows move, . anchors a range, Esc unanchors, Enter accepts A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"25+ - generic [ref=f1e34]: "C7: POINT @AVG(B3..B5 Arrows move, . anchors a range, Esc unanchors, Enter accepts A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"26+ - generic [ref=f1e36]:27+ - heading "edit-error" [level=2] [ref=f1e37]28+ - generic [ref=f1e38]:29+ - generic [ref=f1e39]: "A1: EDIT @SUM(A1 expected , or ) at position 8 A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled F1 Help / Menu"30+ - generic [ref=f1e41]: "A1: EDIT @SUM(A1 expected , or ) at position 8 A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled F1 Help / Menu"31+ - generic [ref=f1e43]:32+ - heading "menu-top" [level=2] [ref=f1e44]33+ - generic [ref=f1e45]:34+ - generic [ref=f1e46]: "B7: @SUM(B3..B5) MENU Worksheet Range File Quit Column Erase A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"35+ - generic [ref=f1e48]: "B7: @SUM(B3..B5) MENU Worksheet Range File Quit Column Erase A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"36+ - generic [ref=f1e50]:37+ - heading "menu-quit-unsaved" [level=2] [ref=f1e51]38+ - generic [ref=f1e52]:39+ - generic [ref=f1e53]: "B7: @SUM(B3..B5) MENU No Yes WORKSHEET CHANGES NOT SAVED! End the session anyway? A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"40+ - generic [ref=f1e55]: "B7: @SUM(B3..B5) MENU No Yes WORKSHEET CHANGES NOT SAVED! End the session anyway? A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"41+ - generic [ref=f1e57]:42+ - heading "prompt-width" [level=2] [ref=f1e58]43+ - generic [ref=f1e59]:44+ - generic [ref=f1e60]: "A1: [W12] 'Household budget 2026 POINT Enter column width (1..240): 12 Type a width or use the left and right arrows A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings rate ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"45+ - generic [ref=f1e62]: "A1: [W12] 'Household budget 2026 POINT Enter column width (1..240): 12 Type a width or use the left and right arrows A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings rate ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"46+ - generic [ref=f1e64]:47+ - heading "range-erase" [level=2] [ref=f1e65]48+ - generic [ref=f1e66]:49+ - generic [ref=f1e67]: "A3: 'Rent POINT Enter range to erase: A3..B5 Arrows move, . anchors a range, Esc unanchors, Enter accepts A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"50+ - generic [ref=f1e69]: "A3: 'Rent POINT Enter range to erase: A3..B5 Arrows move, . anchors a range, Esc unanchors, Enter accepts A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"51+ - generic [ref=f1e71]:52+ - heading "error-goto" [level=2] [ref=f1e72]53+ - generic [ref=f1e73]:54+ - generic [ref=f1e74]: "A1: ERROR A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Invalid cell address: nope (press any key)"55+ - generic [ref=f1e76]: "A1: ERROR A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Invalid cell address: nope (press any key)"56+ - generic [ref=f1e78]:57+ - heading "help" [level=2] [ref=f1e79]58+ - generic [ref=f1e80]:59+ - generic [ref=f1e81]: "HELP one23 (press any key to return) Arrows Move the cell pointer PgUp / PgDn Move one screen up or down Tab / Shift+Tab Move one screen right or left Home Go to A1 Ctrl+C Quit immediately F2 Edit the current cell's contents Del Erase the current cell F5 Move the cell pointer to an address F1 Show keys and functions / or < Open the slash menu Entries Text Label (prefix ' left, \" right, ^ center) 0-9 + - . ( @ # $ Value or formula, e.g. +A1*2, @SUM(A1..A5) Arrow after + ( , POINT mode: arrow to a cell, . anchors a range Functions: @SUM @AVG @COUNT @MIN @MAX @ABS @INT @SQRT @ROUND @MOD @IF @PI @TRUE @FALSE @ERR @NA Operators: + - * / ^ & = <> < > <= >= #AND# #OR# #NOT#"60+ - generic [ref=f1e83]: "HELP one23 (press any key to return) Arrows Move the cell pointer PgUp / PgDn Move one screen up or down Tab / Shift+Tab Move one screen right or left Home Go to A1 Ctrl+C Quit immediately F2 Edit the current cell's contents Del Erase the current cell F5 Move the cell pointer to an address F1 Show keys and functions / or < Open the slash menu Entries Text Label (prefix ' left, \" right, ^ center) 0-9 + - . ( @ # $ Value or formula, e.g. +A1*2, @SUM(A1..A5) Arrow after + ( , POINT mode: arrow to a cell, . anchors a range Functions: @SUM @AVG @COUNT @MIN @MAX @ABS @INT @SQRT @ROUND @MOD @IF @PI @TRUE @FALSE @ERR @NA Operators: + - * / ^ & = <> < > <= >= #AND# #OR# #NOT#"61+ - generic [ref=f1e85]:62+ - heading "narrow" [level=2] [ref=f1e86]63+ - generic [ref=f1e87]:64+ - generic [ref=f1e88]: "B7: @SUM(B3..B5) READY A B C D E F 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 untitled [modified] F1 Help / Menu"65+ - generic [ref=f1e90]: "B7: @SUM(B3..B5) READY A B C D E F 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 untitled [modified] F1 Help / Menu"\ No newline at end of file
A e2e/testdata/screens/.playwright-cli/page-2026-09-26T22-11-44-676Z.yml +51 -0
@@ -0,0 +1,51 @@
1+- generic [active] [ref=f2e1]:2+ - heading "one23 screens" [level=1] [ref=f2e2]3+ - generic [ref=f2e3]:4+ - generic [ref=f2e4]:5+ - heading "ready-empty" [level=2] [ref=f2e5]6+ - generic [ref=f2e6]: "A1: READY A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled F1 Help / Menu"7+ - generic [ref=f2e9]:8+ - heading "budget" [level=2] [ref=f2e10]9+ - generic [ref=f2e11]: "B7: @SUM(B3..B5) READY A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"10+ - generic [ref=f2e14]:11+ - heading "budget-light" [level=2] [ref=f2e15]12+ - generic [ref=f2e16]: "B7: @SUM(B3..B5) READY A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"13+ - generic [ref=f2e19]:14+ - heading "entry-formula" [level=2] [ref=f2e20]15+ - generic [ref=f2e21]: "B8: VALUE +B7*12 A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"16+ - generic [ref=f2e24]:17+ - heading "point-range" [level=2] [ref=f2e25]18+ - generic [ref=f2e26]: "C7: POINT @AVG(B3..B5 Arrows move, . anchors a range, Esc unanchors, Enter accepts A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"19+ - generic [ref=f2e29]:20+ - heading "edit-error" [level=2] [ref=f2e30]21+ - generic [ref=f2e31]: "A1: EDIT @SUM(A1 expected , or ) at position 8 A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled F1 Help / Menu"22+ - generic [ref=f2e34]:23+ - heading "menu-top" [level=2] [ref=f2e35]24+ - generic [ref=f2e36]: "B7: @SUM(B3..B5) MENU Worksheet Range File Quit Column Erase A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"25+ - generic [ref=f2e39]:26+ - heading "menu-quit-unsaved" [level=2] [ref=f2e40]27+ - generic [ref=f2e41]: "B7: @SUM(B3..B5) MENU No Yes WORKSHEET CHANGES NOT SAVED! End the session anyway? A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"28+ - generic [ref=f2e44]:29+ - heading "prompt-width" [level=2] [ref=f2e45]30+ - generic [ref=f2e46]: "A1: [W12] 'Household budget 2026 POINT Enter column width (1..240): 12 Type a width or use the left and right arrows A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings rate ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"31+ - generic [ref=f2e49]:32+ - heading "range-erase" [level=2] [ref=f2e50]33+ - generic [ref=f2e51]: "A3: 'Rent POINT Enter range to erase: A3..B5 Arrows move, . anchors a range, Esc unanchors, Enter accepts A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"34+ - generic [ref=f2e54]:35+ - heading "error-goto" [level=2] [ref=f2e55]36+ - generic [ref=f2e56]: "A1: ERROR A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Invalid cell address: nope (press any key)"37+ - generic [ref=f2e59]:38+ - heading "help" [level=2] [ref=f2e60]39+ - generic [ref=f2e61]: "HELP one23 (press any key to return) Arrows Move the cell pointer PgUp / PgDn Move one screen up or down Tab / Shift+Tab Move one screen right or left Home Go to A1 Ctrl+C Quit immediately F2 Edit the current cell's contents Del Erase the current cell F5 Move the cell pointer to an address F1 Show keys and functions / or < Open the slash menu Entries Text Label (prefix ' left, \" right, ^ center) 0-9 + - . ( @ # $ Value or formula, e.g. +A1*2, @SUM(A1..A5) Arrow after + ( , POINT mode: arrow to a cell, . anchors a range Functions: @SUM @AVG @COUNT @MIN @MAX @ABS @INT @SQRT @ROUND @MOD @IF @PI @TRUE @FALSE @ERR @NA Operators: + - * / ^ & = <> < > <= >= #AND# #OR# #NOT#"40+ - generic [ref=f2e64]:41+ - heading "narrow" [level=2] [ref=f2e65]42+ - generic [ref=f2e66]: "B7: @SUM(B3..B5) READY A B C D E F 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 untitled [modified] F1 Help / Menu"43+ - generic [ref=f2e69]:44+ - heading "point-range-light" [level=2] [ref=f2e70]45+ - generic [ref=f2e71]: "C7: POINT @AVG(B3..B5 Arrows move, . anchors a range, Esc unanchors, Enter accepts A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"46+ - generic [ref=f2e74]:47+ - heading "menu-quit-unsaved-light" [level=2] [ref=f2e75]48+ - generic [ref=f2e76]: "B7: @SUM(B3..B5) MENU No Yes WORKSHEET CHANGES NOT SAVED! End the session anyway? A B C D E F G H I J 1 Household budget 2026 2 3 Rent 1450 4 Groceries 612.4 5 Transit 96 6 Savings r ERR 7 Total 2158.4 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 untitled [modified] F1 Help / Menu"49+ - generic [ref=f2e79]:50+ - heading "help-light" [level=2] [ref=f2e80]51+ - generic [ref=f2e81]: "HELP one23 (press any key to return) Arrows Move the cell pointer PgUp / PgDn Move one screen up or down Tab / Shift+Tab Move one screen right or left Home Go to A1 Ctrl+C Quit immediately F2 Edit the current cell's contents Del Erase the current cell F5 Move the cell pointer to an address F1 Show keys and functions / or < Open the slash menu Entries Text Label (prefix ' left, \" right, ^ center) 0-9 + - . ( @ # $ Value or formula, e.g. +A1*2, @SUM(A1..A5) Arrow after + ( , POINT mode: arrow to a cell, . anchors a range Functions: @SUM @AVG @COUNT @MIN @MAX @ABS @INT @SQRT @ROUND @MOD @IF @PI @TRUE @FALSE @ERR @NA Operators: + - * / ^ & = <> < > <= >= #AND# #OR# #NOT#"\ No newline at end of file
A e2e/testdata/screens/budget-light.html +30 -0
@@ -0,0 +1,30 @@
1+<div style="font-family: monospace; white-space: pre;">B7: @SUM(B3..B5) <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> READY</div><div style="display: inline;background-color: var(--vt-palette-6);"> </div>2+3+4+<div style="display: inline;background-color: var(--vt-palette-7);"> </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> A </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> B </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> C D E F G H I J </div>5+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 1 </div>Household budget 20266+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 2 </div>7+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 3 </div>Rent 14508+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 4 </div>Groceries 612.49+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 5 </div>Transit 9610+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 6 </div>Savings r<div style="display: inline;color: var(--vt-palette-1);"> ERR </div>11+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> 7 </div> Total<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);"> 2158.4 </div>12+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 8 </div>13+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 9 </div>14+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 10 </div>15+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 11 </div>16+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 12 </div>17+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 13 </div>18+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 14 </div>19+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 15 </div>20+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 16 </div>21+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 17 </div>22+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 18 </div>23+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 19 </div>24+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 20 </div>25+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 21 </div>26+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 22 </div>27+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 23 </div>28+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 24 </div>29+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 25 </div>30+untitled [modified] <div style="display: inline;color: var(--vt-palette-0);">F1 Help / Menu</div></div>\ No newline at end of file
A e2e/testdata/screens/budget.html +30 -0
@@ -0,0 +1,30 @@
1+<div style="font-family: monospace; white-space: pre;">B7: @SUM(B3..B5) <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> READY</div><div style="display: inline;background-color: var(--vt-palette-6);"> </div>2+3+4+<div style="display: inline;background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> A </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> B </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> C D E F G H I J </div>5+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 1 </div>Household budget 20266+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 2 </div>7+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 3 </div>Rent 14508+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 4 </div>Groceries 612.49+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 5 </div>Transit 9610+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 6 </div>Savings r<div style="display: inline;color: var(--vt-palette-1);"> ERR </div>11+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> 7 </div> Total<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);"> 2158.4 </div>12+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 8 </div>13+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 9 </div>14+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 10 </div>15+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 11 </div>16+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 12 </div>17+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 13 </div>18+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 14 </div>19+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 15 </div>20+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 16 </div>21+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 17 </div>22+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 18 </div>23+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 19 </div>24+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 20 </div>25+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 21 </div>26+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 22 </div>27+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 23 </div>28+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 24 </div>29+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 25 </div>30+untitled [modified] <div style="display: inline;color: var(--vt-palette-8);">F1 Help / Menu</div></div>\ No newline at end of file
A e2e/testdata/screens/edit-error.html +30 -0
@@ -0,0 +1,30 @@
1+<div style="font-family: monospace; white-space: pre;">A1: <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> EDIT</div><div style="display: inline;background-color: var(--vt-palette-6);"> </div>2+@SUM(A13+<div style="display: inline;color: var(--vt-palette-3);">expected , or ) at position 8</div>4+<div style="display: inline;background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> A </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> B C D E F G H I J </div>5+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> 1 </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);"> </div>6+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 2 </div>7+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 3 </div>8+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 4 </div>9+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 5 </div>10+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 6 </div>11+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 7 </div>12+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 8 </div>13+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 9 </div>14+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 10 </div>15+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 11 </div>16+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 12 </div>17+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 13 </div>18+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 14 </div>19+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 15 </div>20+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 16 </div>21+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 17 </div>22+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 18 </div>23+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 19 </div>24+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 20 </div>25+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 21 </div>26+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 22 </div>27+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 23 </div>28+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 24 </div>29+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 25 </div>30+untitled <div style="display: inline;color: var(--vt-palette-8);">F1 Help / Menu</div></div>\ No newline at end of file
A e2e/testdata/screens/entry-formula.html +30 -0
@@ -0,0 +1,30 @@
1+<div style="font-family: monospace; white-space: pre;">B8: <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> VALUE</div><div style="display: inline;background-color: var(--vt-palette-6);"> </div>2++B7*123+4+<div style="display: inline;background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> A </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> B </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> C D E F G H I J </div>5+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 1 </div>Household budget 20266+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 2 </div>7+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 3 </div>Rent 14508+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 4 </div>Groceries 612.49+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 5 </div>Transit 9610+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 6 </div>Savings r<div style="display: inline;color: var(--vt-palette-1);"> ERR </div>11+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 7 </div> Total 2158.412+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> 8 </div> <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);"> </div>13+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 9 </div>14+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 10 </div>15+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 11 </div>16+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 12 </div>17+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 13 </div>18+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 14 </div>19+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 15 </div>20+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 16 </div>21+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 17 </div>22+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 18 </div>23+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 19 </div>24+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 20 </div>25+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 21 </div>26+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 22 </div>27+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 23 </div>28+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 24 </div>29+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 25 </div>30+untitled [modified] <div style="display: inline;color: var(--vt-palette-8);">F1 Help / Menu</div></div>\ No newline at end of file
A e2e/testdata/screens/error-goto.html +30 -0
@@ -0,0 +1,30 @@
1+<div style="font-family: monospace; white-space: pre;">A1: <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> ERROR</div><div style="display: inline;background-color: var(--vt-palette-6);"> </div>2+3+4+<div style="display: inline;background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> A </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> B C D E F G H I J </div>5+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> 1 </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);"> </div>6+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 2 </div>7+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 3 </div>8+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 4 </div>9+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 5 </div>10+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 6 </div>11+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 7 </div>12+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 8 </div>13+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 9 </div>14+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 10 </div>15+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 11 </div>16+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 12 </div>17+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 13 </div>18+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 14 </div>19+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 15 </div>20+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 16 </div>21+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 17 </div>22+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 18 </div>23+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 19 </div>24+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 20 </div>25+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 21 </div>26+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 22 </div>27+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 23 </div>28+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 24 </div>29+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 25 </div>30+<div style="display: inline;color: var(--vt-palette-9);font-weight: bold;">Invalid cell address: nope</div><div style="display: inline;color: var(--vt-palette-8);"> (press any key)</div></div>\ No newline at end of file
A e2e/testdata/screens/help-light.html +22 -0
A e2e/testdata/screens/help.html +22 -0
A e2e/testdata/screens/menu-quit-unsaved-light.html +30 -0
@@ -0,0 +1,30 @@
1+<div style="font-family: monospace; white-space: pre;">B7: @SUM(B3..B5) <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> MENU</div><div style="display: inline;background-color: var(--vt-palette-6);"> </div>2+No <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;">Yes</div>3+WORKSHEET CHANGES NOT SAVED! End the session anyway?4+<div style="display: inline;background-color: var(--vt-palette-7);"> </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> A </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> B </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> C D E F G H I J </div>5+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 1 </div>Household budget 20266+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 2 </div>7+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 3 </div>Rent 14508+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 4 </div>Groceries 612.49+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 5 </div>Transit 9610+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 6 </div>Savings r<div style="display: inline;color: var(--vt-palette-1);"> ERR </div>11+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> 7 </div> Total<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);"> 2158.4 </div>12+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 8 </div>13+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 9 </div>14+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 10 </div>15+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 11 </div>16+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 12 </div>17+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 13 </div>18+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 14 </div>19+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 15 </div>20+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 16 </div>21+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 17 </div>22+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 18 </div>23+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 19 </div>24+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 20 </div>25+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 21 </div>26+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 22 </div>27+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 23 </div>28+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 24 </div>29+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 25 </div>30+untitled [modified] <div style="display: inline;color: var(--vt-palette-0);">F1 Help / Menu</div></div>\ No newline at end of file
A e2e/testdata/screens/menu-quit-unsaved.html +30 -0
@@ -0,0 +1,30 @@
1+<div style="font-family: monospace; white-space: pre;">B7: @SUM(B3..B5) <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> MENU</div><div style="display: inline;background-color: var(--vt-palette-6);"> </div>2+No <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;">Yes</div>3+WORKSHEET CHANGES NOT SAVED! End the session anyway?4+<div style="display: inline;background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> A </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> B </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> C D E F G H I J </div>5+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 1 </div>Household budget 20266+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 2 </div>7+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 3 </div>Rent 14508+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 4 </div>Groceries 612.49+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 5 </div>Transit 9610+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 6 </div>Savings r<div style="display: inline;color: var(--vt-palette-1);"> ERR </div>11+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> 7 </div> Total<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);"> 2158.4 </div>12+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 8 </div>13+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 9 </div>14+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 10 </div>15+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 11 </div>16+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 12 </div>17+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 13 </div>18+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 14 </div>19+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 15 </div>20+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 16 </div>21+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 17 </div>22+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 18 </div>23+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 19 </div>24+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 20 </div>25+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 21 </div>26+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 22 </div>27+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 23 </div>28+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 24 </div>29+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 25 </div>30+untitled [modified] <div style="display: inline;color: var(--vt-palette-8);">F1 Help / Menu</div></div>\ No newline at end of file
A e2e/testdata/screens/menu-top.html +30 -0
@@ -0,0 +1,30 @@
1+<div style="font-family: monospace; white-space: pre;">B7: @SUM(B3..B5) <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> MENU</div><div style="display: inline;background-color: var(--vt-palette-6);"> </div>2+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;">Worksheet</div> Range File Quit3+Column Erase4+<div style="display: inline;background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> A </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> B </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> C D E F G H I J </div>5+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 1 </div>Household budget 20266+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 2 </div>7+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 3 </div>Rent 14508+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 4 </div>Groceries 612.49+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 5 </div>Transit 9610+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 6 </div>Savings r<div style="display: inline;color: var(--vt-palette-1);"> ERR </div>11+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> 7 </div> Total<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);"> 2158.4 </div>12+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 8 </div>13+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 9 </div>14+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 10 </div>15+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 11 </div>16+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 12 </div>17+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 13 </div>18+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 14 </div>19+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 15 </div>20+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 16 </div>21+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 17 </div>22+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 18 </div>23+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 19 </div>24+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 20 </div>25+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 21 </div>26+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 22 </div>27+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 23 </div>28+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 24 </div>29+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 25 </div>30+untitled [modified] <div style="display: inline;color: var(--vt-palette-8);">F1 Help / Menu</div></div>\ No newline at end of file
A e2e/testdata/screens/narrow.html +16 -0
@@ -0,0 +1,16 @@
1+<div style="font-family: monospace; white-space: pre;">B7: @SUM(B3..B5) <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> READY</div><div style="display: inline;background-color: var(--vt-palette-6);"> </div>2+3+4+<div style="display: inline;background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> A </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> B </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> C D E F</div><div style="display: inline;background-color: var(--vt-palette-8);"> </div>5+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 1 </div>Household budget 20266+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 2 </div>7+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 3 </div>Rent 14508+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 4 </div>Groceries 612.49+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 5 </div>Transit 9610+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 6 </div>Savings r<div style="display: inline;color: var(--vt-palette-1);"> ERR </div>11+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> 7 </div> Total<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);"> 2158.4 </div>12+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 8 </div>13+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 9 </div>14+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 10 </div>15+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 11 </div>16+untitled [modified] <div style="display: inline;color: var(--vt-palette-8);">F1 Help / Menu</div></div>\ No newline at end of file
A e2e/testdata/screens/point-range-light.html +30 -0
@@ -0,0 +1,30 @@
1+<div style="font-family: monospace; white-space: pre;">C7: <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> POINT</div><div style="display: inline;background-color: var(--vt-palette-6);"> </div>2+@AVG(B3..B53+<div style="display: inline;color: var(--vt-palette-0);">Arrows move, . anchors a range, Esc unanchors, Enter accepts</div>4+<div style="display: inline;background-color: var(--vt-palette-7);"> </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> A </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> B </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> C D E F G H I J </div>5+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 1 </div>Household budget 20266+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 2 </div>7+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 3 </div>Rent <div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-4);"> 1450 </div>8+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 4 </div>Groceries<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-4);"> 612.4 </div>9+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> 5 </div>Transit <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);"> 96 </div>10+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 6 </div>Savings r<div style="display: inline;color: var(--vt-palette-1);"> ERR </div>11+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 7 </div> Total 2158.412+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 8 </div>13+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 9 </div>14+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 10 </div>15+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 11 </div>16+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 12 </div>17+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 13 </div>18+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 14 </div>19+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 15 </div>20+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 16 </div>21+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 17 </div>22+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 18 </div>23+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 19 </div>24+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 20 </div>25+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 21 </div>26+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 22 </div>27+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 23 </div>28+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 24 </div>29+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-7);"> 25 </div>30+untitled [modified] <div style="display: inline;color: var(--vt-palette-0);">F1 Help / Menu</div></div>\ No newline at end of file
A e2e/testdata/screens/point-range.html +30 -0
@@ -0,0 +1,30 @@
1+<div style="font-family: monospace; white-space: pre;">C7: <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> POINT</div><div style="display: inline;background-color: var(--vt-palette-6);"> </div>2+@AVG(B3..B53+<div style="display: inline;color: var(--vt-palette-8);">Arrows move, . anchors a range, Esc unanchors, Enter accepts</div>4+<div style="display: inline;background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> A </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> B </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> C D E F G H I J </div>5+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 1 </div>Household budget 20266+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 2 </div>7+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 3 </div>Rent <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-4);"> 1450 </div>8+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 4 </div>Groceries<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-4);"> 612.4 </div>9+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> 5 </div>Transit <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);"> 96 </div>10+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 6 </div>Savings r<div style="display: inline;color: var(--vt-palette-1);"> ERR </div>11+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 7 </div> Total 2158.412+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 8 </div>13+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 9 </div>14+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 10 </div>15+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 11 </div>16+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 12 </div>17+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 13 </div>18+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 14 </div>19+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 15 </div>20+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 16 </div>21+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 17 </div>22+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 18 </div>23+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 19 </div>24+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 20 </div>25+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 21 </div>26+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 22 </div>27+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 23 </div>28+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 24 </div>29+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 25 </div>30+untitled [modified] <div style="display: inline;color: var(--vt-palette-8);">F1 Help / Menu</div></div>\ No newline at end of file
A e2e/testdata/screens/prompt-width.html +30 -0
@@ -0,0 +1,30 @@
1+<div style="font-family: monospace; white-space: pre;">A1: [W12] &#39;Household budget 2026 <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> POINT</div><div style="display: inline;background-color: var(--vt-palette-6);"> </div>2+Enter column width (1..240): 123+<div style="display: inline;color: var(--vt-palette-8);">Type a width or use the left and right arrows</div>4+<div style="display: inline;background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> A </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> B C D E F G H I J </div>5+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> 1 </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);">Household bu</div>dget 20266+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 2 </div>7+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 3 </div>Rent 14508+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 4 </div>Groceries 612.49+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 5 </div>Transit 9610+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 6 </div>Savings rate<div style="display: inline;color: var(--vt-palette-1);"> ERR </div>11+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 7 </div> Total 2158.412+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 8 </div>13+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 9 </div>14+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 10 </div>15+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 11 </div>16+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 12 </div>17+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 13 </div>18+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 14 </div>19+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 15 </div>20+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 16 </div>21+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 17 </div>22+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 18 </div>23+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 19 </div>24+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 20 </div>25+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 21 </div>26+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 22 </div>27+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 23 </div>28+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 24 </div>29+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 25 </div>30+untitled [modified] <div style="display: inline;color: var(--vt-palette-8);">F1 Help / Menu</div></div>\ No newline at end of file
A e2e/testdata/screens/range-erase.html +30 -0
@@ -0,0 +1,30 @@
1+<div style="font-family: monospace; white-space: pre;">A3: &#39;Rent <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> POINT</div><div style="display: inline;background-color: var(--vt-palette-6);"> </div>2+Enter range to erase: A3..B53+<div style="display: inline;color: var(--vt-palette-8);">Arrows move, . anchors a range, Esc unanchors, Enter accepts</div>4+<div style="display: inline;background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> A </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> B </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> C D E F G H I J </div>5+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 1 </div>Household budget 20266+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 2 </div>7+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 3 </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-4);">Rent 1450 </div>8+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 4 </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-4);">Groceries 612.4 </div>9+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> 5 </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-4);">Transit </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);"> 96 </div>10+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 6 </div>Savings r<div style="display: inline;color: var(--vt-palette-1);"> ERR </div>11+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 7 </div> Total 2158.412+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 8 </div>13+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 9 </div>14+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 10 </div>15+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 11 </div>16+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 12 </div>17+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 13 </div>18+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 14 </div>19+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 15 </div>20+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 16 </div>21+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 17 </div>22+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 18 </div>23+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 19 </div>24+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 20 </div>25+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 21 </div>26+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 22 </div>27+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 23 </div>28+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 24 </div>29+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 25 </div>30+untitled [modified] <div style="display: inline;color: var(--vt-palette-8);">F1 Help / Menu</div></div>\ No newline at end of file
A e2e/testdata/screens/ready-empty.html +30 -0
@@ -0,0 +1,30 @@
1+<div style="font-family: monospace; white-space: pre;">A1: <div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> READY</div><div style="display: inline;background-color: var(--vt-palette-6);"> </div>2+3+4+<div style="display: inline;background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> A </div><div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> B C D E F G H I J </div>5+<div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);font-weight: bold;"> 1 </div><div style="display: inline;color: var(--vt-palette-0);background-color: var(--vt-palette-6);"> </div>6+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 2 </div>7+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 3 </div>8+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 4 </div>9+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 5 </div>10+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 6 </div>11+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 7 </div>12+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 8 </div>13+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 9 </div>14+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 10 </div>15+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 11 </div>16+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 12 </div>17+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 13 </div>18+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 14 </div>19+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 15 </div>20+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 16 </div>21+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 17 </div>22+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 18 </div>23+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 19 </div>24+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 20 </div>25+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 21 </div>26+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 22 </div>27+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 23 </div>28+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 24 </div>29+<div style="display: inline;color: var(--vt-palette-15);background-color: var(--vt-palette-8);"> 25 </div>30+untitled <div style="display: inline;color: var(--vt-palette-8);">F1 Help / Menu</div></div>\ No newline at end of file