Format > Alignment holds left, center and right with top, middle and bottom; Format > Borders > Border color picks the color borders draw with from here on (a picker a recording answers). Tall rows put values and wrapped text where the cell is aligned; checkboxes and dropdown marks follow. Where a double line meets a thick one the joint is drawn thick, in the thick line's color, and the double line starts beside it with a thick stub, as Unicode has no joint of the two: a double rule under the headers of a thick outline reads ┣━═══╪═══━┫ rather than ╠═══╣ between ┃ lines. Reviewed in the gallery and in VHS's font (layout.gif). Merged cells: the entry is as wide as the merge; stepping off a merge goes on along the row or column it was entered by; freezing through one is refused; the value sits on the middle of the lines its rows take, rule lines included, or the top or bottom as aligned, worked out once a frame.
- commit
- fe18f214392b3e7c967d5ee31219c2e557f3e813
- parent
- 4793f2b82616d16f0ef02ef0153cf154aedefd66
- author
- Dami <dami.etoile@gmail.com>
@@ -100,11 +100,12 @@ there.
100100 | Search matches, traced cells | Reverse video, with a count or the list on the context line |101101 | The copied range | A dashed underline |102102 | Dropdowns, checkboxes, active filters | `▾`; `[ ]` and `[✓]`; `▼` instead of `▾` |103-| Borders, wrapped text, merged cells, tall rows | Characters: box-drawing lines, the text's own lines, one value across the merge, the row's number on its last line; the pointer on a merged cell reverses all of it |103+| Borders (of any color), wrapped text, merged cells, tall rows, vertical alignment | Characters: box-drawing lines, the text's own lines, one value across the merge, the row's number on its last line, the value on the line it's aligned to; the pointer on a merged cell reverses all of it |104104 105105 The reverse-video roles (`Theme.standouts`) keep their look in color:106106 their colors are stored swapped, so SGR 7 swaps them back. Conditional107-formats and color scales are colors the user chose, and stay colors.107+formats, color scales and border colors are colors the user chose, and stay108+colors.108109 109110 ## Required with every user-facing change110111 Binary file.
@@ -93,7 +93,8 @@ menus, help, undo or macros. The ids are those in the recorded scripts; a few:
9393 |---|---|9494 | `format.bold`, `format.italic`, `format.underline`, `format.strikethrough` | Text styles (toggles, as the keys) |9595 | `format.currency`, `format.percent`, `format.date`, `format.decimals_more`, ... | Number formats |96-| `format.align_left`, `format.align_center`, `format.align_right`, `format.clear` | Alignment, clear formatting |96+| `format.align_left`, `format.align_center`, `format.align_right`, `format.valign_top`, `format.valign_middle`, `format.valign_bottom`, `format.clear` | Alignment, clear formatting |97+| `format.borders_all`, `format.borders_outer`, `format.border_top`, ..., `format.border_thick`, `format.border_color` (answer: the color, `"Red"` or `"Automatic"`) | Borders, their line and color |9798 | `edit.copy`, `edit.cut`, `edit.paste`, `edit.paste_values` | Clipboard (within 012; copying also sets the system clipboard) |9899 | `edit.fill_down`, `edit.fill_right`, `clear` | Fill, clear the selection |99100 | `insert.row_above`, `insert.row_below`, `insert.col_left`, `insert.col_right`, `delete.row`, `delete.col` | Rows and columns |@@ -38,10 +38,20 @@ A formula left Automatic shows the format of what it reads
3838 3939 ## Text4040 41-Bold, italic, underline and strikethrough, and alignment left, center42-or right. Numbers align right, text left, booleans and errors center, as43-in Sheets, until you align them yourself. Format > Clear formatting resets44-number formats and text styles and keeps the contents.41+Bold, italic, underline and strikethrough, and Format > Alignment's42+left, center or right. Numbers align right, text left, booleans and43+errors center, as in Sheets, until you align them yourself. Format >44+Clear formatting resets number formats and text styles and keeps the45+contents.46+47+## Vertical alignment48+49+Format > Alignment's Top, Middle and Bottom say where a value sits in50+a row taller than it, as in Sheets: on the row's first line, its middle51+one or its last. Wrapped text starts there, so it fills the row from52+the top, around the middle, or up to the bottom. Until you choose, values53+sit at the bottom, as Sheets aligns them, and a54+[merged cell](#merged-cells)'s in its middle.4555 4656 ## Wrapping4757 @@ -57,9 +67,10 @@ Sheets:
5767 | Clip | Is cut off at the cell's edge |5868 5969 Values sit on the last line of a tall row, as Sheets aligns them to the60-bottom, and the row's number is on that line too, so a tall row ends on61-the line that numbers it. Text doesn't run on across a62-[border](#borders) or into [merged cells](#merged-cells).70+bottom, unless [aligned](#vertical-alignment) otherwise, and the row's71+number is on that line, so a tall row ends on the line that numbers it.72+Text doesn't run on across a [border](#borders) or into73+[merged cells](#merged-cells).6374 6475 ## Row heights6576 @@ -90,7 +101,25 @@ as tables printed in a terminal do: a bordered table is taller than a
90101 plain one. Where two cells share an edge, the heavier line shows, and91102 drawing an edge again from one side replaces the other side's line.92103 Borders are part of a cell's formatting: they fall back on rows and93-columns, travel with copies and go with Clear formatting.104+columns, travel with copies and go with Clear formatting. The outline105+of whole columns or rows runs along the sheet's own edges too: over106+row 1 and under the last row, or down column A and the last column.107+108+Unicode has no joint where a double line meets a thick one, so there109+the joint is drawn thick, the heavier look, and the double line starts110+beside it with a thick stub: a double line under the headers of a111+table with a thick outline reads `┣━═══════╪═══════━┫`.112+113+### Border colors114+115+Format > Borders > Border color picks the color borders draw with from116+here on, as the line style is kept: Automatic draws them in the text's117+color, as Sheets draws borders black, or red, yellow, green, cyan, blue118+or magenta, the terminal's own colors as119+[conditional formats](rules.md#conditional-formatting) use them, so the120+palette or the [color scheme](../terminal/themes.md) decides how they121+look. Where lines of two colors meet, the heavier line's color shows,122+and a line's color goes with it.94123 95124 ## Merged cells96125 @@ -102,13 +131,21 @@ Merging clears the values of the other cells, as Sheets does, so when
102131 any would be lost it asks first: Enter merges, Esc backs out, and undo103132 brings them back. Unmerge splits merged cells back into cells.104133 134+Its value sits on the middle one of the lines its rows take on screen,135+counting rows of any height and the border lines between them, unless136+its top-left cell is [aligned](#vertical-alignment) to the top or137+bottom.138+105139 The active cell moves onto a merged cell's top-left and steps off it106-from its edges; clicking any part of it selects it, typing edits it,107-and a selection that touches it takes in all of it. Merges follow108-inserted and deleted lines, and a copy, cut or move carries the merges109-wholly inside it. Sorting a range that holds merged cells is refused,110-an array can't [spill](../formulas/arrays.md) over them, cells an array111-spills into or a pivot table's results can't be merged, and merging in a140+from its edges, along the row or column it came in by, as in Sheets:141+coming in from A2 into B1:C3, Right goes on to D2. Clicking any part142+of it selects it, typing edits it in an entry as wide as the merge, and143+a selection that touches it takes in all of it. Merges follow inserted144+and deleted lines, and a copy, cut or move carries the merges wholly145+inside it. Sorting a range that holds merged cells is refused, as is146+[freezing](sort-filter.md#freeze) rows or columns through one; an array147+can't [spill](../formulas/arrays.md) over them, cells an array spills148+into or a pivot table's results can't be merged, and merging in a112149 [protected range](notes-protection.md#protected-sheets-and-ranges) asks113150 first.114151 @@ -16,7 +16,7 @@ func TestLayoutDrawsAndSurvivesSave(t *testing.T) {
1616 checkTrip := func(s *session) {1717 s.t.Helper()1818 screen := s.screen()19- for _, want := range []string{"Trip to Lisbon", "┏━━━━━━━━━┯", "╠═════════╪", "│Tram 28 ┃", "┃Total │", "┗━━━━━━━━━┷"} {19+ for _, want := range []string{"Trip to Lisbon", "┏━━━━━━━━━┯", "┣━════════╪", "│Tram 28 ┃", "┃Total │", "┗━━━━━━━━━┷"} {2020 if !strings.Contains(screen, want) {2121 t.Errorf("no %q in\n%s", want, screen)2222 }@@ -39,6 +39,40 @@ func TestLayoutDrawsAndSurvivesSave(t *testing.T) {
3939 r.waitForName("D1")4040 }4141 42+// A merged cell takes an entry as wide as it and can't be frozen43+// through; the total's middle alignment and the blue outline survive a44+// save.45+func TestMergeEntryAndAlignment(t *testing.T) {46+ dir := t.TempDir()47+ s := start(t, dir)48+ coloredPlan(s)49+ s.keys("<ctrl+home>", "A title as wide as the merge")50+ s.waitFor("A title as wide as the merge")51+ s.keys("<esc>", "<ctrl+g>", "E2:E4", "<enter>")52+ palette(s, "merge all")53+ s.waitFor("Merged E2:E4")54+ s.keys("<ctrl+g>", "F3", "<enter>")55+ palette(s, "freeze up to current row")56+ s.waitFor("Can't freeze through the merged cells E2:E4")57+ s.keys("<esc>", "<ctrl+s>", "plan", "<enter>")58+ s.eventually("saved", func() bool { return s.title() == "012 - plan.012" })59+ s.keys("<ctrl+q>")60+ s.waitExit()61+62+ r := start(t, dir, "plan.012")63+ r.waitFor("Trip to Lisbon")64+ lines := strings.Split(r.screen(), "\n")65+ for i, l := range lines {66+ if strings.Contains(l, "┃Total │ 225 │") {67+ if i+1 >= len(lines) || !strings.Contains(lines[i+1], " 6 ┃") {68+ t.Errorf("Total isn't in the middle of its row:\n%s", r.screen())69+ }70+ return71+ }72+ }73+ t.Errorf("no total:\n%s", r.screen())74+}75+4276 // Dragging a row number's corner makes the row taller; double-clicking4377 // it fits the row again.4478 func TestDragRowHeight(t *testing.T) {@@ -1,6 +1,10 @@
11 package e2e22 3-import ghostty "go.mitchellh.com/libghostty"3+import (4+ "strings"5+6+ ghostty "go.mitchellh.com/libghostty"7+)48 59 // Golden screens for the grid's layout: a trip plan with its title merged610 // across the table, borders around and inside it (a double line under@@ -48,8 +52,42 @@ func tripPlan(s *session) {
4852 s.waitForBar("C4", "Tram 28 and the castle, before the crowds")4953 }5054 55+// coloredPlan is the trip plan with its outline drawn again in blue and56+// the total's values in the middle of its tall row.57+func coloredPlan(s *session) {58+ tripPlan(s)59+ s.keys("<down>", "<down>", "<left>", "<left>")60+ palette(s, "row height")61+ s.keys("<right>", "<enter>")62+ s.keys("<shift+right>", "<shift+right>")63+ palette(s, "align middle")64+ s.waitFor("Aligned to the middle")65+ s.keys("<esc>", "<ctrl+home>", "<down>")66+ for range 4 {67+ s.keys("<shift+down>")68+ }69+ s.keys("<shift+right>", "<shift+right>")70+ palette(s, "border color")71+ s.waitFor("Automatic")72+ s.keys("blue", "<enter>")73+ s.waitFor("Borders draw in blue now")74+ palette(s, "thick lines")75+ s.keys("<alt+shift+7>")76+ s.waitFor("Outer borders for A2:C6")77+ s.keys("<esc>", "<down>")78+ s.waitForBar("A3", "Fri")79+}80+5181 var layoutScreens = []screen{5282 {name: "layout", setup: tripPlan},83+ {name: "layout-colors", setup: coloredPlan},84+ {name: "layout-colors-high-contrast", opts: options{config: highContrastConfig}, setup: coloredPlan},85+ {name: "border-color-picker", setup: func(s *session) {86+ budget(s)87+ palette(s, "border color")88+ s.waitFor("Automatic")89+ s.keys("<down>", "<down>")90+ }},5391 {name: "layout-narrow", opts: options{cols: 60, rows: 16}, setup: func(s *session) {5492 tripPlan(s)5593 s.keys("<ctrl+home>") // the pointer on the merged title@@ -78,7 +116,7 @@ var layoutScreens = []screen{
78116 func init() {79117 for _, sc := range layoutScreens {80118 screens = append(screens, sc)81- if sc.name != "layout-narrow" && sc.name != "layout-high-contrast" {119+ if sc.name != "layout-narrow" && !strings.HasSuffix(sc.name, "-high-contrast") {82120 sc.name += "-light"83121 sc.opts.light = true84122 screens = append(screens, sc)@@ -0,0 +1,30 @@
1+<pre class="screen"> <span style="text-decoration:underline">F</span>ile <span style="text-decoration:underline">E</span>dit <span style="text-decoration:underline">V</span>iew <span style="text-decoration:underline">I</span>nsert F<span style="text-decoration:underline">o</span>rmat <span style="text-decoration:underline">D</span>ata <span style="text-decoration:underline">H</span>elp <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">MENU</span><span style="background:var(--vt-palette-6)"> </span>2+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">B7</span><span style="background:var(--vt-palette-7)"> </span> =SUM(B3:B5) <span style="color:var(--vt-palette-8)">┌─</span> <span style="font-weight:bold">Border</span> <span style="font-weight:bold">color</span> <span style="color:var(--vt-palette-8)">─────────────────────────┐</span>3+ <span style="color:var(--vt-palette-8)">│</span> <span style="font-weight:bold">›</span> <span style="color:var(--vt-palette-0)">Type</span> <span style="color:var(--vt-palette-0)">a</span> <span style="color:var(--vt-palette-0)">color</span> <span style="color:var(--vt-palette-8)">│</span>4+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">A</span><span style="background:var(--vt-palette-7)"> </span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">B</span><span style="background:var(--vt-palette-6)"> </span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-8)">├────────────────────────────────────────┤</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">H</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">I</span><span style="background:var(--vt-palette-7)"> </span>5+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">1</span><span style="background:var(--vt-palette-7)"> </span> Household budget 2026 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-0)">━━━</span> Automatic <span style="color:var(--vt-palette-8)">│</span>6+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">2</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-1)">━━━</span> Red <span style="color:var(--vt-palette-8)">│</span>7+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">3</span><span style="background:var(--vt-palette-7)"> </span> Rent 1450 <span style="color:var(--vt-palette-8)">│</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-3)">━━━</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Yellow</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-8)">│</span>8+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">4</span><span style="background:var(--vt-palette-7)"> </span> Groceries 612.4 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-2)">━━━</span> Green <span style="color:var(--vt-palette-8)">│</span>9+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">5</span><span style="background:var(--vt-palette-7)"> </span> Transit 96 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">━━━</span> Cyan <span style="color:var(--vt-palette-8)">│</span>10+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">6</span><span style="background:var(--vt-palette-7)"> </span> Savings r <span style="color:var(--vt-palette-1);text-decoration:underline wavy var(--vt-palette-1)">#DIV/0!</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-4)">━━━</span> Blue <span style="color:var(--vt-palette-8)">│</span>11+<span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">7</span><span style="background:var(--vt-palette-6)"> </span> Total <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">2158.4</span><span style="background:var(--vt-palette-6)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-5)">━━━</span> Magenta <span style="color:var(--vt-palette-8)">│</span>12+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">8</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">└───────────────────────────────</span> <span style="color:var(--vt-palette-0)">7</span> <span style="color:var(--vt-palette-0)">of</span> <span style="color:var(--vt-palette-0)">7</span> <span style="color:var(--vt-palette-8)">─┘</span>13+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">9</span><span style="background:var(--vt-palette-7)"> </span>14+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">10</span><span style="background:var(--vt-palette-7)"> </span>15+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">11</span><span style="background:var(--vt-palette-7)"> </span>16+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">12</span><span style="background:var(--vt-palette-7)"> </span>17+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">13</span><span style="background:var(--vt-palette-7)"> </span>18+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">14</span><span style="background:var(--vt-palette-7)"> </span>19+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">15</span><span style="background:var(--vt-palette-7)"> </span>20+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">16</span><span style="background:var(--vt-palette-7)"> </span>21+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">17</span><span style="background:var(--vt-palette-7)"> </span>22+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">18</span><span style="background:var(--vt-palette-7)"> </span>23+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">19</span><span style="background:var(--vt-palette-7)"> </span>24+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">20</span><span style="background:var(--vt-palette-7)"> </span>25+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">21</span><span style="background:var(--vt-palette-7)"> </span>26+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">22</span><span style="background:var(--vt-palette-7)"> </span>27+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">23</span><span style="background:var(--vt-palette-7)"> </span>28+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">24</span><span style="background:var(--vt-palette-7)"> </span>29+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">25</span><span style="background:var(--vt-palette-7)"> </span>30+Draw borders in yellow <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Up/Down</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-0)">move</span> <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Enter</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-0)">choose</span> <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Esc</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-0)">close</span></pre>\ No newline at end of file@@ -0,0 +1,30 @@
1+<pre class="screen"> <span style="text-decoration:underline">F</span>ile <span style="text-decoration:underline">E</span>dit <span style="text-decoration:underline">V</span>iew <span style="text-decoration:underline">I</span>nsert F<span style="text-decoration:underline">o</span>rmat <span style="text-decoration:underline">D</span>ata <span style="text-decoration:underline">H</span>elp <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">MENU</span><span style="background:var(--vt-palette-6)"> </span>2+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">B7</span><span style="background:var(--vt-palette-8)"> </span> =SUM(B3:B5) <span style="color:var(--vt-palette-8)">┌─</span> <span style="font-weight:bold">Border</span> <span style="font-weight:bold">color</span> <span style="color:var(--vt-palette-8)">─────────────────────────┐</span>3+ <span style="color:var(--vt-palette-8)">│</span> <span style="font-weight:bold">›</span> <span style="color:var(--vt-palette-8)">Type</span> <span style="color:var(--vt-palette-8)">a</span> <span style="color:var(--vt-palette-8)">color</span> <span style="color:var(--vt-palette-8)">│</span>4+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">A</span><span style="background:var(--vt-palette-8)"> </span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">B</span><span style="background:var(--vt-palette-6)"> </span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-8)">├────────────────────────────────────────┤</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">H</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">I</span><span style="background:var(--vt-palette-8)"> </span>5+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">1</span><span style="background:var(--vt-palette-8)"> </span> Household budget 2026 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-7)">━━━</span> Automatic <span style="color:var(--vt-palette-8)">│</span>6+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">2</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-1)">━━━</span> Red <span style="color:var(--vt-palette-8)">│</span>7+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">3</span><span style="background:var(--vt-palette-8)"> </span> Rent 1450 <span style="color:var(--vt-palette-8)">│</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-3)">━━━</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Yellow</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-8)">│</span>8+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span> Groceries 612.4 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-2)">━━━</span> Green <span style="color:var(--vt-palette-8)">│</span>9+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">5</span><span style="background:var(--vt-palette-8)"> </span> Transit 96 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-6)">━━━</span> Cyan <span style="color:var(--vt-palette-8)">│</span>10+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">6</span><span style="background:var(--vt-palette-8)"> </span> Savings r <span style="color:var(--vt-palette-1);text-decoration:underline wavy var(--vt-palette-1)">#DIV/0!</span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-4)">━━━</span> Blue <span style="color:var(--vt-palette-8)">│</span>11+<span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">7</span><span style="background:var(--vt-palette-6)"> </span> Total <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">2158.4</span><span style="background:var(--vt-palette-6)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-5)">━━━</span> Magenta <span style="color:var(--vt-palette-8)">│</span>12+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">8</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">└───────────────────────────────</span> <span style="color:var(--vt-palette-8)">7</span> <span style="color:var(--vt-palette-8)">of</span> <span style="color:var(--vt-palette-8)">7</span> <span style="color:var(--vt-palette-8)">─┘</span>13+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">9</span><span style="background:var(--vt-palette-8)"> </span>14+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">10</span><span style="background:var(--vt-palette-8)"> </span>15+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">11</span><span style="background:var(--vt-palette-8)"> </span>16+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">12</span><span style="background:var(--vt-palette-8)"> </span>17+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span>18+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">14</span><span style="background:var(--vt-palette-8)"> </span>19+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">15</span><span style="background:var(--vt-palette-8)"> </span>20+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">16</span><span style="background:var(--vt-palette-8)"> </span>21+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">17</span><span style="background:var(--vt-palette-8)"> </span>22+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">18</span><span style="background:var(--vt-palette-8)"> </span>23+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">19</span><span style="background:var(--vt-palette-8)"> </span>24+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">20</span><span style="background:var(--vt-palette-8)"> </span>25+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">21</span><span style="background:var(--vt-palette-8)"> </span>26+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">22</span><span style="background:var(--vt-palette-8)"> </span>27+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">23</span><span style="background:var(--vt-palette-8)"> </span>28+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">24</span><span style="background:var(--vt-palette-8)"> </span>29+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">25</span><span style="background:var(--vt-palette-8)"> </span>30+Draw borders in yellow <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Up/Down</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">move</span> <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Enter</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">choose</span> <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Esc</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">close</span></pre>\ No newline at end of file@@ -0,0 +1,30 @@
1+<pre class="screen"><span style="background:#1f1f1f"> </span><span style="color:#ffffff;background:#1f1f1f;text-decoration:underline">F</span><span style="color:#ffffff;background:#1f1f1f">ile</span><span style="background:#1f1f1f"> </span><span style="color:#ffffff;background:#1f1f1f;text-decoration:underline">E</span><span style="color:#ffffff;background:#1f1f1f">dit</span><span style="background:#1f1f1f"> </span><span style="color:#ffffff;background:#1f1f1f;text-decoration:underline">V</span><span style="color:#ffffff;background:#1f1f1f">iew</span><span style="background:#1f1f1f"> </span><span style="color:#ffffff;background:#1f1f1f;text-decoration:underline">I</span><span style="color:#ffffff;background:#1f1f1f">nsert</span><span style="background:#1f1f1f"> </span><span style="color:#ffffff;background:#1f1f1f">F</span><span style="color:#ffffff;background:#1f1f1f;text-decoration:underline">o</span><span style="color:#ffffff;background:#1f1f1f">rmat</span><span style="background:#1f1f1f"> </span><span style="color:#ffffff;background:#1f1f1f;text-decoration:underline">D</span><span style="color:#ffffff;background:#1f1f1f">ata</span><span style="background:#1f1f1f"> </span><span style="color:#ffffff;background:#1f1f1f;text-decoration:underline">H</span><span style="color:#ffffff;background:#1f1f1f">elp</span><span style="background:#1f1f1f"> </span><span style="background:#40e0ff"> </span><span style="color:#000000;background:#40e0ff;font-weight:bold">READY</span><span style="background:#40e0ff"> </span>2+<span style="background:#3a3a3a"> </span><span style="color:#ffffff;background:#3a3a3a">A3</span><span style="background:#3a3a3a"> </span><span style="background:#000000"> </span><span style="color:#ffffff;background:#000000">Fri</span><span style="background:#000000"> </span>3+<span style="background:#000000"> </span>4+<span style="background:#3a3a3a"> </span><span style="background:#40e0ff"> </span><span style="color:#000000;background:#40e0ff;font-weight:bold">A</span><span style="background:#40e0ff"> </span><span style="background:#3a3a3a"> </span><span style="color:#ffffff;background:#3a3a3a">B</span><span style="background:#3a3a3a"> </span><span style="color:#ffffff;background:#3a3a3a">C</span><span style="background:#3a3a3a"> </span><span style="color:#ffffff;background:#3a3a3a">D</span><span style="background:#3a3a3a"> </span><span style="color:#ffffff;background:#3a3a3a">E</span><span style="background:#3a3a3a"> </span><span style="color:#ffffff;background:#3a3a3a">F</span><span style="background:#3a3a3a"> </span><span style="color:#ffffff;background:#3a3a3a">G</span><span style="background:#3a3a3a"> </span><span style="color:#ffffff;background:#3a3a3a">H</span><span style="background:#3a3a3a"> </span><span style="color:#ffffff;background:#3a3a3a">I</span><span style="background:#3a3a3a"> </span>5+<span style="background:#3a3a3a"> </span><span style="color:#ffffff;background:#3a3a3a">1</span><span style="background:#3a3a3a"> </span><span style="background:#000000"> </span><span style="color:#ffffff;background:#000000">Trip</span><span style="background:#000000"> </span><span style="color:#ffffff;background:#000000">to</span><span style="background:#000000"> </span><span style="color:#ffffff;background:#000000">Lisbon</span><span style="background:#000000"> </span>6+<span style="background:#3a3a3a"> </span><span style="color:#80a8ff;background:#000000">┏━━━━━━━━━┯━━━━━━━━━┯━━━━━━━━━┓</span><span style="background:#000000"> </span>7+<span style="background:#3a3a3a"> </span><span style="color:#ffffff;background:#3a3a3a">2</span><span style="background:#3a3a3a"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="color:#ffffff;background:#000000">Day</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="color:#ffffff;background:#000000">Cost</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="color:#ffffff;background:#000000">Notes</span><span style="background:#000000"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="background:#000000"> </span>8+<span style="background:#3a3a3a"> </span><span style="color:#80a8ff;background:#000000">┣━</span><span style="color:#e0e0e0;background:#000000">════════╪═════════╪════════</span><span style="color:#80a8ff;background:#000000">━┫</span><span style="background:#000000"> </span>9+<span style="background:#40e0ff"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="background:#40e0ff"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="color:#ffffff;background:#000000">Train,</span><span style="background:#000000"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="background:#000000"> </span>10+<span style="background:#40e0ff"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="background:#40e0ff"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="color:#ffffff;background:#000000">book</span><span style="background:#000000"> </span><span style="color:#ffffff;background:#000000">the</span><span style="background:#000000"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="background:#000000"> </span>11+<span style="background:#40e0ff"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="background:#40e0ff"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="color:#ffffff;background:#000000">early</span><span style="background:#000000"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="background:#000000"> </span>12+<span style="background:#40e0ff"> </span><span style="color:#000000;background:#40e0ff;font-weight:bold">3</span><span style="background:#40e0ff"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="color:#000000;background:#40e0ff">Fri</span><span style="background:#40e0ff"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="background:#000000"> </span><span style="color:#ffffff;background:#000000">120</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="color:#ffffff;background:#000000">fare</span><span style="background:#000000"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="background:#000000"> </span>13+<span style="background:#3a3a3a"> </span><span style="color:#80a8ff;background:#000000">┠</span><span style="color:#e0e0e0;background:#000000">─────────┼─────────┼─────────</span><span style="color:#80a8ff;background:#000000">┨</span><span style="background:#000000"> </span>14+<span style="background:#3a3a3a"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="color:#ffffff;background:#000000">Tram</span><span style="background:#000000"> </span><span style="color:#ffffff;background:#000000">28</span><span style="background:#000000"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="background:#000000"> </span>15+<span style="background:#3a3a3a"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="color:#ffffff;background:#000000">and</span><span style="background:#000000"> </span><span style="color:#ffffff;background:#000000">the</span><span style="background:#000000"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="background:#000000"> </span>16+<span style="background:#3a3a3a"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="color:#ffffff;background:#000000">castle,</span><span style="background:#000000"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="background:#000000"> </span>17+<span style="background:#3a3a3a"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="color:#ffffff;background:#000000">before</span><span style="background:#000000"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="background:#000000"> </span>18+<span style="background:#3a3a3a"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="color:#ffffff;background:#000000">the</span><span style="background:#000000"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="background:#000000"> </span>19+<span style="background:#3a3a3a"> </span><span style="color:#ffffff;background:#3a3a3a">4</span><span style="background:#3a3a3a"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="color:#ffffff;background:#000000">Sat</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="background:#000000"> </span><span style="color:#ffffff;background:#000000">45</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="color:#ffffff;background:#000000">crowds</span><span style="background:#000000"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="background:#000000"> </span>20+<span style="background:#3a3a3a"> </span><span style="color:#80a8ff;background:#000000">┠</span><span style="color:#e0e0e0;background:#000000">─────────┼─────────┼─────────</span><span style="color:#80a8ff;background:#000000">┨</span><span style="background:#000000"> </span>21+<span style="background:#3a3a3a"> </span><span style="color:#ffffff;background:#3a3a3a">5</span><span style="background:#3a3a3a"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="color:#ffffff;background:#000000">Sun</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="background:#000000"> </span><span style="color:#ffffff;background:#000000">60</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="color:#ffffff;background:#000000">Fly</span><span style="background:#000000"> </span><span style="color:#ffffff;background:#000000">home</span><span style="background:#000000"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="background:#000000"> </span>22+<span style="background:#3a3a3a"> </span><span style="color:#80a8ff;background:#000000">┠</span><span style="color:#e0e0e0;background:#000000">─────────┼─────────┼─────────</span><span style="color:#80a8ff;background:#000000">┨</span><span style="background:#000000"> </span>23+<span style="background:#3a3a3a"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="background:#000000"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="background:#000000"> </span>24+<span style="background:#3a3a3a"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="color:#ffffff;background:#000000">Total</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="background:#000000"> </span><span style="color:#ffffff;background:#000000">225</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="background:#000000"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="background:#000000"> </span>25+<span style="background:#3a3a3a"> </span><span style="color:#ffffff;background:#3a3a3a">6</span><span style="background:#3a3a3a"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="background:#000000"> </span><span style="color:#80a8ff;background:#000000">┃</span><span style="background:#000000"> </span>26+<span style="background:#3a3a3a"> </span><span style="color:#80a8ff;background:#000000">┗━━━━━━━━━┷━━━━━━━━━┷━━━━━━━━━┛</span><span style="background:#000000"> </span>27+<span style="background:#3a3a3a"> </span><span style="color:#ffffff;background:#3a3a3a">7</span><span style="background:#3a3a3a"> </span><span style="background:#000000"> </span>28+<span style="background:#3a3a3a"> </span><span style="color:#ffffff;background:#3a3a3a">8</span><span style="background:#3a3a3a"> </span><span style="background:#000000"> </span>29+<span style="background:#3a3a3a"> </span><span style="color:#ffffff;background:#3a3a3a">9</span><span style="background:#3a3a3a"> </span><span style="background:#000000"> </span>30+<span style="background:#40e0ff"> </span><span style="color:#000000;background:#40e0ff;font-weight:bold">Sheet1</span><span style="background:#40e0ff"> </span><span style="background:#1f1f1f"> </span><span style="color:#959595;background:#1f1f1f">+</span><span style="background:#1f1f1f"> </span><span style="color:#757575;background:#1f1f1f">│</span><span style="background:#1f1f1f"> </span><span style="color:#ffffff;background:#1f1f1f">untitled</span><span style="background:#1f1f1f"> </span><span style="color:#959595;background:#1f1f1f">modified</span><span style="background:#1f1f1f"> </span><span style="background:#3a3a3a"> </span><span style="color:#ffffff;background:#3a3a3a">Ctrl+K</span><span style="background:#3a3a3a"> </span><span style="background:#1f1f1f"> </span><span style="color:#959595;background:#1f1f1f">search</span><span style="background:#1f1f1f"> </span><span style="background:#3a3a3a"> </span><span style="color:#ffffff;background:#3a3a3a">Ctrl+/</span><span style="background:#3a3a3a"> </span><span style="background:#1f1f1f"> </span><span style="color:#959595;background:#1f1f1f">shortcuts</span><span style="background:#1f1f1f"> </span><span style="background:#3a3a3a"> </span><span style="color:#ffffff;background:#3a3a3a">F10</span><span style="background:#3a3a3a"> </span><span style="background:#1f1f1f"> </span><span style="color:#959595;background:#1f1f1f">menu</span></pre>\ No newline at end of file@@ -0,0 +1,30 @@
1+<pre class="screen"> <span style="text-decoration:underline">F</span>ile <span style="text-decoration:underline">E</span>dit <span style="text-decoration:underline">V</span>iew <span style="text-decoration:underline">I</span>nsert F<span style="text-decoration:underline">o</span>rmat <span style="text-decoration:underline">D</span>ata <span style="text-decoration:underline">H</span>elp <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">READY</span><span style="background:var(--vt-palette-6)"> </span>2+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">A3</span><span style="background:var(--vt-palette-7)"> </span> Fri3+4+<span style="background:var(--vt-palette-7)"> </span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">A</span><span style="background:var(--vt-palette-6)"> </span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">B</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">C</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">D</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">E</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">F</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">G</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">H</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">I</span><span style="background:var(--vt-palette-7)"> </span>5+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">1</span><span style="background:var(--vt-palette-7)"> </span> Trip to Lisbon6+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-4)">┏━━━━━━━━━┯━━━━━━━━━┯━━━━━━━━━┓</span>7+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">2</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-4)">┃</span>Day <span style="color:var(--vt-palette-0)">│</span>Cost <span style="color:var(--vt-palette-0)">│</span>Notes <span style="color:var(--vt-palette-4)">┃</span>8+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-4)">┣━</span><span style="color:var(--vt-palette-0)">════════╪═════════╪════════</span><span style="color:var(--vt-palette-4)">━┫</span>9+<span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-4)">┃</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0)">│</span> <span style="color:var(--vt-palette-0)">│</span>Train, <span style="color:var(--vt-palette-4)">┃</span>10+<span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-4)">┃</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0)">│</span> <span style="color:var(--vt-palette-0)">│</span>book the <span style="color:var(--vt-palette-4)">┃</span>11+<span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-4)">┃</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0)">│</span> <span style="color:var(--vt-palette-0)">│</span>early <span style="color:var(--vt-palette-4)">┃</span>12+<span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">3</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-4)">┃</span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Fri</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0)">│</span> 120 <span style="color:var(--vt-palette-0)">│</span>fare <span style="color:var(--vt-palette-4)">┃</span>13+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-4)">┠</span><span style="color:var(--vt-palette-0)">─────────┼─────────┼─────────</span><span style="color:var(--vt-palette-4)">┨</span>14+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-4)">┃</span> <span style="color:var(--vt-palette-0)">│</span> <span style="color:var(--vt-palette-0)">│</span>Tram 28 <span style="color:var(--vt-palette-4)">┃</span>15+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-4)">┃</span> <span style="color:var(--vt-palette-0)">│</span> <span style="color:var(--vt-palette-0)">│</span>and the <span style="color:var(--vt-palette-4)">┃</span>16+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-4)">┃</span> <span style="color:var(--vt-palette-0)">│</span> <span style="color:var(--vt-palette-0)">│</span>castle, <span style="color:var(--vt-palette-4)">┃</span>17+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-4)">┃</span> <span style="color:var(--vt-palette-0)">│</span> <span style="color:var(--vt-palette-0)">│</span>before <span style="color:var(--vt-palette-4)">┃</span>18+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-4)">┃</span> <span style="color:var(--vt-palette-0)">│</span> <span style="color:var(--vt-palette-0)">│</span>the <span style="color:var(--vt-palette-4)">┃</span>19+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">4</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-4)">┃</span>Sat <span style="color:var(--vt-palette-0)">│</span> 45 <span style="color:var(--vt-palette-0)">│</span>crowds <span style="color:var(--vt-palette-4)">┃</span>20+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-4)">┠</span><span style="color:var(--vt-palette-0)">─────────┼─────────┼─────────</span><span style="color:var(--vt-palette-4)">┨</span>21+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">5</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-4)">┃</span>Sun <span style="color:var(--vt-palette-0)">│</span> 60 <span style="color:var(--vt-palette-0)">│</span>Fly home <span style="color:var(--vt-palette-4)">┃</span>22+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-4)">┠</span><span style="color:var(--vt-palette-0)">─────────┼─────────┼─────────</span><span style="color:var(--vt-palette-4)">┨</span>23+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-4)">┃</span> <span style="color:var(--vt-palette-0)">│</span> <span style="color:var(--vt-palette-0)">│</span> <span style="color:var(--vt-palette-4)">┃</span>24+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-4)">┃</span>Total <span style="color:var(--vt-palette-0)">│</span> 225 <span style="color:var(--vt-palette-0)">│</span> <span style="color:var(--vt-palette-4)">┃</span>25+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">6</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-4)">┃</span> <span style="color:var(--vt-palette-0)">│</span> <span style="color:var(--vt-palette-0)">│</span> <span style="color:var(--vt-palette-4)">┃</span>26+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-4)">┗━━━━━━━━━┷━━━━━━━━━┷━━━━━━━━━┛</span>27+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">7</span><span style="background:var(--vt-palette-7)"> </span>28+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">8</span><span style="background:var(--vt-palette-7)"> </span>29+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">9</span><span style="background:var(--vt-palette-7)"> </span>30+<span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">Sheet1</span><span style="background:var(--vt-palette-6)"> </span> <span style="color:var(--vt-palette-0)">+</span> <span style="color:var(--vt-palette-8)">│</span> untitled <span style="color:var(--vt-palette-0)">modified</span> <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+K</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-0)">search</span> <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+/</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-0)">shortcuts</span> <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">F10</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-0)">menu</span></pre>\ No newline at end of file@@ -0,0 +1,30 @@
1+<pre class="screen"> <span style="text-decoration:underline">F</span>ile <span style="text-decoration:underline">E</span>dit <span style="text-decoration:underline">V</span>iew <span style="text-decoration:underline">I</span>nsert F<span style="text-decoration:underline">o</span>rmat <span style="text-decoration:underline">D</span>ata <span style="text-decoration:underline">H</span>elp <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">READY</span><span style="background:var(--vt-palette-6)"> </span>2+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">A3</span><span style="background:var(--vt-palette-8)"> </span> Fri3+4+<span style="background:var(--vt-palette-8)"> </span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">A</span><span style="background:var(--vt-palette-6)"> </span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">B</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">C</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">D</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">E</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">F</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">G</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">H</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">I</span><span style="background:var(--vt-palette-8)"> </span>5+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">1</span><span style="background:var(--vt-palette-8)"> </span> Trip to Lisbon6+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-4)">┏━━━━━━━━━┯━━━━━━━━━┯━━━━━━━━━┓</span>7+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">2</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-4)">┃</span>Day <span style="color:var(--vt-palette-7)">│</span>Cost <span style="color:var(--vt-palette-7)">│</span>Notes <span style="color:var(--vt-palette-4)">┃</span>8+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-4)">┣━</span><span style="color:var(--vt-palette-7)">════════╪═════════╪════════</span><span style="color:var(--vt-palette-4)">━┫</span>9+<span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-4)">┃</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-7)">│</span> <span style="color:var(--vt-palette-7)">│</span>Train, <span style="color:var(--vt-palette-4)">┃</span>10+<span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-4)">┃</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-7)">│</span> <span style="color:var(--vt-palette-7)">│</span>book the <span style="color:var(--vt-palette-4)">┃</span>11+<span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-4)">┃</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-7)">│</span> <span style="color:var(--vt-palette-7)">│</span>early <span style="color:var(--vt-palette-4)">┃</span>12+<span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">3</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-4)">┃</span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Fri</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-7)">│</span> 120 <span style="color:var(--vt-palette-7)">│</span>fare <span style="color:var(--vt-palette-4)">┃</span>13+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-4)">┠</span><span style="color:var(--vt-palette-7)">─────────┼─────────┼─────────</span><span style="color:var(--vt-palette-4)">┨</span>14+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-4)">┃</span> <span style="color:var(--vt-palette-7)">│</span> <span style="color:var(--vt-palette-7)">│</span>Tram 28 <span style="color:var(--vt-palette-4)">┃</span>15+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-4)">┃</span> <span style="color:var(--vt-palette-7)">│</span> <span style="color:var(--vt-palette-7)">│</span>and the <span style="color:var(--vt-palette-4)">┃</span>16+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-4)">┃</span> <span style="color:var(--vt-palette-7)">│</span> <span style="color:var(--vt-palette-7)">│</span>castle, <span style="color:var(--vt-palette-4)">┃</span>17+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-4)">┃</span> <span style="color:var(--vt-palette-7)">│</span> <span style="color:var(--vt-palette-7)">│</span>before <span style="color:var(--vt-palette-4)">┃</span>18+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-4)">┃</span> <span style="color:var(--vt-palette-7)">│</span> <span style="color:var(--vt-palette-7)">│</span>the <span style="color:var(--vt-palette-4)">┃</span>19+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-4)">┃</span>Sat <span style="color:var(--vt-palette-7)">│</span> 45 <span style="color:var(--vt-palette-7)">│</span>crowds <span style="color:var(--vt-palette-4)">┃</span>20+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-4)">┠</span><span style="color:var(--vt-palette-7)">─────────┼─────────┼─────────</span><span style="color:var(--vt-palette-4)">┨</span>21+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">5</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-4)">┃</span>Sun <span style="color:var(--vt-palette-7)">│</span> 60 <span style="color:var(--vt-palette-7)">│</span>Fly home <span style="color:var(--vt-palette-4)">┃</span>22+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-4)">┠</span><span style="color:var(--vt-palette-7)">─────────┼─────────┼─────────</span><span style="color:var(--vt-palette-4)">┨</span>23+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-4)">┃</span> <span style="color:var(--vt-palette-7)">│</span> <span style="color:var(--vt-palette-7)">│</span> <span style="color:var(--vt-palette-4)">┃</span>24+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-4)">┃</span>Total <span style="color:var(--vt-palette-7)">│</span> 225 <span style="color:var(--vt-palette-7)">│</span> <span style="color:var(--vt-palette-4)">┃</span>25+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">6</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-4)">┃</span> <span style="color:var(--vt-palette-7)">│</span> <span style="color:var(--vt-palette-7)">│</span> <span style="color:var(--vt-palette-4)">┃</span>26+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-4)">┗━━━━━━━━━┷━━━━━━━━━┷━━━━━━━━━┛</span>27+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">7</span><span style="background:var(--vt-palette-8)"> </span>28+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">8</span><span style="background:var(--vt-palette-8)"> </span>29+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">9</span><span style="background:var(--vt-palette-8)"> </span>30+<span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">Sheet1</span><span style="background:var(--vt-palette-6)"> </span> <span style="color:var(--vt-palette-8)">+</span> <span style="color:var(--vt-palette-8)">│</span> untitled <span style="color:var(--vt-palette-8)">modified</span> <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+K</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">search</span> <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+/</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">shortcuts</span> <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">F10</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">menu</span></pre>\ No newline at end of file@@ -5,7 +5,7 @@
55 <span style="background:#3a3a3a"> </span><span style="color:#ffffff;background:#3a3a3a">1</span><span style="background:#3a3a3a"> </span><span style="background:#000000"> </span><span style="color:#ffffff;background:#000000">Trip</span><span style="background:#000000"> </span><span style="color:#ffffff;background:#000000">to</span><span style="background:#000000"> </span><span style="color:#ffffff;background:#000000">Lisbon</span><span style="background:#000000"> </span>66 <span style="background:#3a3a3a"> </span><span style="color:#e0e0e0;background:#000000">┏━━━━━━━━━┯━━━━━━━━━┯━━━━━━━━━┓</span><span style="background:#000000"> </span>77 <span style="background:#3a3a3a"> </span><span style="color:#ffffff;background:#3a3a3a">2</span><span style="background:#3a3a3a"> </span><span style="color:#e0e0e0;background:#000000">┃</span><span style="color:#ffffff;background:#000000">Day</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="color:#ffffff;background:#000000">Cost</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="color:#ffffff;background:#000000">Notes</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">┃</span><span style="background:#000000"> </span>8-<span style="background:#3a3a3a"> </span><span style="color:#e0e0e0;background:#000000">╠═════════╪═════════╪═════════╣</span><span style="background:#000000"> </span>8+<span style="background:#3a3a3a"> </span><span style="color:#e0e0e0;background:#000000">┣━════════╪═════════╪════════━┫</span><span style="background:#000000"> </span>99 <span style="background:#3a3a3a"> </span><span style="color:#e0e0e0;background:#000000">┃</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="color:#ffffff;background:#000000">Train,</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">┃</span><span style="background:#000000"> </span>1010 <span style="background:#3a3a3a"> </span><span style="color:#e0e0e0;background:#000000">┃</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="color:#ffffff;background:#000000">book</span><span style="background:#000000"> </span><span style="color:#ffffff;background:#000000">the</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">┃</span><span style="background:#000000"> </span>1111 <span style="background:#3a3a3a"> </span><span style="color:#e0e0e0;background:#000000">┃</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">│</span><span style="color:#ffffff;background:#000000">early</span><span style="background:#000000"> </span><span style="color:#e0e0e0;background:#000000">┃</span><span style="background:#000000"> </span>@@ -5,7 +5,7 @@
55 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">1</span><span style="background:var(--vt-palette-7)"> </span> Trip to Lisbon66 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0)">┏━━━━━━━━━┯━━━━━━━━━┯━━━━━━━━━┓</span>77 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">2</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0)">┃</span>Day <span style="color:var(--vt-palette-0)">│</span>Cost <span style="color:var(--vt-palette-0)">│</span>Notes <span style="color:var(--vt-palette-0)">┃</span>8-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0)">╠═════════╪═════════╪═════════╣</span>8+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0)">┣━════════╪═════════╪════════━┫</span>99 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0)">┃</span> <span style="color:var(--vt-palette-0)">│</span> <span style="color:var(--vt-palette-0)">│</span>Train, <span style="color:var(--vt-palette-0)">┃</span>1010 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0)">┃</span> <span style="color:var(--vt-palette-0)">│</span> <span style="color:var(--vt-palette-0)">│</span>book the <span style="color:var(--vt-palette-0)">┃</span>1111 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0)">┃</span> <span style="color:var(--vt-palette-0)">│</span> <span style="color:var(--vt-palette-0)">│</span>early <span style="color:var(--vt-palette-0)">┃</span>@@ -5,7 +5,7 @@
55 <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">1</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Trip</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">to</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Lisbon</span><span style="background:var(--vt-palette-6)"> </span>66 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-7)">┏━━━━━━━━━┯━━━━━━━━━┯━━━━━━━━━┓</span>77 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">2</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-7)">┃</span>Day <span style="color:var(--vt-palette-7)">│</span>Cost <span style="color:var(--vt-palette-7)">│</span>Notes <span style="color:var(--vt-palette-7)">┃</span>8-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-7)">╠═════════╪═════════╪═════════╣</span>8+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-7)">┣━════════╪═════════╪════════━┫</span>99 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-7)">┃</span> <span style="color:var(--vt-palette-7)">│</span> <span style="color:var(--vt-palette-7)">│</span>Train, <span style="color:var(--vt-palette-7)">┃</span>1010 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-7)">┃</span> <span style="color:var(--vt-palette-7)">│</span> <span style="color:var(--vt-palette-7)">│</span>book the <span style="color:var(--vt-palette-7)">┃</span>1111 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-7)">┃</span> <span style="color:var(--vt-palette-7)">│</span> <span style="color:var(--vt-palette-7)">│</span>early <span style="color:var(--vt-palette-7)">┃</span>@@ -5,7 +5,7 @@
55 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">1</span><span style="background:var(--vt-palette-8)"> </span> Trip to Lisbon66 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-7)">┏━━━━━━━━━┯━━━━━━━━━┯━━━━━━━━━┓</span>77 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">2</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-7)">┃</span>Day <span style="color:var(--vt-palette-7)">│</span>Cost <span style="color:var(--vt-palette-7)">│</span>Notes <span style="color:var(--vt-palette-7)">┃</span>8-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-7)">╠═════════╪═════════╪═════════╣</span>8+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-7)">┣━════════╪═════════╪════════━┫</span>99 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-7)">┃</span> <span style="color:var(--vt-palette-7)">│</span> <span style="color:var(--vt-palette-7)">│</span>Train, <span style="color:var(--vt-palette-7)">┃</span>1010 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-7)">┃</span> <span style="color:var(--vt-palette-7)">│</span> <span style="color:var(--vt-palette-7)">│</span>book the <span style="color:var(--vt-palette-7)">┃</span>1111 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-7)">┃</span> <span style="color:var(--vt-palette-7)">│</span> <span style="color:var(--vt-palette-7)">│</span>early <span style="color:var(--vt-palette-7)">┃</span>@@ -1,30 +1,30 @@
11 <pre class="screen"> <span style="text-decoration:underline">F</span>ile <span style="text-decoration:underline">E</span>dit <span style="text-decoration:underline">V</span>iew <span style="text-decoration:underline">I</span>nsert <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">F</span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);text-decoration:underline">o</span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">rmat</span><span style="background:var(--vt-palette-6)"> </span> <span style="text-decoration:underline">D</span>ata <span style="text-decoration:underline">H</span>elp <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">MENU</span><span style="background:var(--vt-palette-6)"> </span>2-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">B7</span><span style="background:var(--vt-palette-7)"> </span> =SUM(B3:B5) <span style="color:var(--vt-palette-8)">┌────────────────────────────────────────────┐</span>3- <span style="color:var(--vt-palette-8)">│</span> Number › <span style="color:var(--vt-palette-8)">│</span>4-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">A</span><span style="background:var(--vt-palette-7)"> </span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">B</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-8)">│</span> Increase decimal places <span style="color:var(--vt-palette-8)">│</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">H</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">I</span><span style="background:var(--vt-palette-7)"> </span>5-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">1</span><span style="background:var(--vt-palette-7)"> </span> Household budget 20<span style="color:var(--vt-palette-8)">│</span> Decrease decimal places <span style="color:var(--vt-palette-8)">│</span>6-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">2</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">├────────────────────────────────────────────┤</span>7-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">3</span><span style="background:var(--vt-palette-7)"> </span> Rent 1450 <span style="color:var(--vt-palette-8)">│</span> Bold <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+B</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>8-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">4</span><span style="background:var(--vt-palette-7)"> </span> Groceries 612.4 <span style="color:var(--vt-palette-8)">│</span> Italic <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+I</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>9-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">5</span><span style="background:var(--vt-palette-7)"> </span> Transit 96 <span style="color:var(--vt-palette-8)">│</span> Underline <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+U</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>10-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">6</span><span style="background:var(--vt-palette-7)"> </span> Savings r <span style="color:var(--vt-palette-1);text-decoration:underline wavy var(--vt-palette-1)">#DIV/0!</span> <span style="color:var(--vt-palette-8)">│</span> Strikethrough <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Alt+Shift+5</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>11-<span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">7</span><span style="background:var(--vt-palette-6)"> </span> Total <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">2158.4</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-8)">├────────────────────────────────────────────┤</span>12-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">8</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Align left <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+Shift+L</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>13-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">9</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Align center <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+Shift+E</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>14-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">10</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Align right <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+Shift+</span><span style="color:var(--vt-palette-8)">┌──────────────────────────────┐</span>15-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">11</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Wrapping <span style="color:var(--vt-palette-8)">│</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">All</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-8)">│</span>16-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">12</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Borders</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-8)">│</span> Outer <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Alt+Shift+7</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>17-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">13</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Merge cells <span style="color:var(--vt-palette-8)">│</span> Inner <span style="color:var(--vt-palette-8)">│</span>18-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">14</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">├─────────────────────────────────────────├──────────────────────────────┤</span>19-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">15</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Column width <span style="color:var(--vt-palette-8)">│</span> Top <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Alt+Shift+1</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>20-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">16</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Reset column width <span style="color:var(--vt-palette-8)">│</span> Bottom <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Alt+Shift+3</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>21-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">17</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Row height <span style="color:var(--vt-palette-8)">│</span> Left <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Alt+Shift+4</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>22-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">18</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Fit rows to data <span style="color:var(--vt-palette-8)">│</span> Right <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Alt+Shift+2</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>23-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">19</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">├─────────────────────────────────────────├──────────────────────────────┤</span>24-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">20</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Conditional formatting <span style="color:var(--vt-palette-8)">│</span> None <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Alt+Shift+6</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>25-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">21</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Clear</span> <span style="color:var(--vt-palette-8)">conditional</span> <span style="color:var(--vt-palette-8)">formats</span> <span style="color:var(--vt-palette-8)">├──────────────────────────────┤</span>26-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">22</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">├─────────────────────────────────────────│</span> Thin lines ✓ <span style="color:var(--vt-palette-8)">│</span>27-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">23</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Clear formatting <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+</span><span style="color:var(--vt-palette-8)">│</span> Thick lines <span style="color:var(--vt-palette-8)">│</span>28-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">24</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">└─────────────────────────────────────────│</span> Double lines <span style="color:var(--vt-palette-8)">│</span>2+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">B7</span><span style="background:var(--vt-palette-7)"> </span> =SUM(B3:B5) <span style="color:var(--vt-palette-8)">┌───────────────────────────────────────────┐</span>3+ <span style="color:var(--vt-palette-8)">│</span> Number › <span style="color:var(--vt-palette-8)">│</span>4+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">A</span><span style="background:var(--vt-palette-7)"> </span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">B</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-8)">│</span> Increase decimal places <span style="color:var(--vt-palette-8)">│</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">H</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">I</span><span style="background:var(--vt-palette-7)"> </span>5+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">1</span><span style="background:var(--vt-palette-7)"> </span> Household budget 20<span style="color:var(--vt-palette-8)">│</span> Decrease decimal places <span style="color:var(--vt-palette-8)">│</span>6+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">2</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">├───────────────────────────────────────────┤</span>7+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">3</span><span style="background:var(--vt-palette-7)"> </span> Rent 1450 <span style="color:var(--vt-palette-8)">│</span> Bold <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+B</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>8+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">4</span><span style="background:var(--vt-palette-7)"> </span> Groceries 612.4 <span style="color:var(--vt-palette-8)">│</span> Italic <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+I</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>9+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">5</span><span style="background:var(--vt-palette-7)"> </span> Transit 96 <span style="color:var(--vt-palette-8)">│</span> Underline <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+U</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>10+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">6</span><span style="background:var(--vt-palette-7)"> </span> Savings r <span style="color:var(--vt-palette-1);text-decoration:underline wavy var(--vt-palette-1)">#DIV/0!</span> <span style="color:var(--vt-palette-8)">│</span> Strikethrough <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Alt+Shift+5</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>11+<span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">7</span><span style="background:var(--vt-palette-6)"> </span> Total <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">2158.4</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-8)">├───────────────────────────────────────────┤</span>12+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">8</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Alignment › <span style="color:var(--vt-palette-8)">│</span>13+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">9</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Wrapping <span style="color:var(--vt-palette-8)">┌──────────────────────────────┐</span>14+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">10</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Borders</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-8)">│</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">All</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-8)">│</span>15+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">11</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Merge cells <span style="color:var(--vt-palette-8)">│</span> Outer <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Alt+Shift+7</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>16+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">12</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">├─────────────────────────────────────────│</span> Inner <span style="color:var(--vt-palette-8)">│</span>17+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">13</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Column width <span style="color:var(--vt-palette-8)">├──────────────────────────────┤</span>18+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">14</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Reset column width <span style="color:var(--vt-palette-8)">│</span> Top <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Alt+Shift+1</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>19+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">15</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Row height <span style="color:var(--vt-palette-8)">│</span> Bottom <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Alt+Shift+3</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>20+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">16</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Fit rows to data <span style="color:var(--vt-palette-8)">│</span> Left <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Alt+Shift+4</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>21+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">17</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">├─────────────────────────────────────────│</span> Right <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Alt+Shift+2</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>22+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">18</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Conditional formatting <span style="color:var(--vt-palette-8)">├──────────────────────────────┤</span>23+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">19</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Clear</span> <span style="color:var(--vt-palette-8)">conditional</span> <span style="color:var(--vt-palette-8)">formats</span> <span style="color:var(--vt-palette-8)">│</span> None <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Alt+Shift+6</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>24+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">20</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">├─────────────────────────────────────────├──────────────────────────────┤</span>25+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">21</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Clear formatting <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+\</span><span style="color:var(--vt-palette-8)">│</span> Thin lines ✓ <span style="color:var(--vt-palette-8)">│</span>26+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">22</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">└─────────────────────────────────────────│</span> Thick lines <span style="color:var(--vt-palette-8)">│</span>27+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">23</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Double lines <span style="color:var(--vt-palette-8)">│</span>28+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">24</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Border color <span style="color:var(--vt-palette-8)">│</span>2929 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">25</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">└──────────────────────────────┘</span>3030 Draw every edge of the selected cells <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Arrows</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-0)">move</span> <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Enter</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-0)">choose</span> <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Esc</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-0)">close</span></pre>\ No newline at end of file@@ -1,30 +1,30 @@
11 <pre class="screen"> <span style="text-decoration:underline">F</span>ile <span style="text-decoration:underline">E</span>dit <span style="text-decoration:underline">V</span>iew <span style="text-decoration:underline">I</span>nsert <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">F</span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);text-decoration:underline">o</span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">rmat</span><span style="background:var(--vt-palette-6)"> </span> <span style="text-decoration:underline">D</span>ata <span style="text-decoration:underline">H</span>elp <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">MENU</span><span style="background:var(--vt-palette-6)"> </span>2-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">B7</span><span style="background:var(--vt-palette-8)"> </span> =SUM(B3:B5) <span style="color:var(--vt-palette-8)">┌────────────────────────────────────────────┐</span>3- <span style="color:var(--vt-palette-8)">│</span> Number › <span style="color:var(--vt-palette-8)">│</span>4-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">A</span><span style="background:var(--vt-palette-8)"> </span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">B</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-8)">│</span> Increase decimal places <span style="color:var(--vt-palette-8)">│</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">H</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">I</span><span style="background:var(--vt-palette-8)"> </span>5-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">1</span><span style="background:var(--vt-palette-8)"> </span> Household budget 20<span style="color:var(--vt-palette-8)">│</span> Decrease decimal places <span style="color:var(--vt-palette-8)">│</span>6-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">2</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">├────────────────────────────────────────────┤</span>7-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">3</span><span style="background:var(--vt-palette-8)"> </span> Rent 1450 <span style="color:var(--vt-palette-8)">│</span> Bold <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+B</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>8-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span> Groceries 612.4 <span style="color:var(--vt-palette-8)">│</span> Italic <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+I</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>9-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">5</span><span style="background:var(--vt-palette-8)"> </span> Transit 96 <span style="color:var(--vt-palette-8)">│</span> Underline <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+U</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>10-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">6</span><span style="background:var(--vt-palette-8)"> </span> Savings r <span style="color:var(--vt-palette-1);text-decoration:underline wavy var(--vt-palette-1)">#DIV/0!</span> <span style="color:var(--vt-palette-8)">│</span> Strikethrough <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Alt+Shift+5</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>11-<span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">7</span><span style="background:var(--vt-palette-6)"> </span> Total <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">2158.4</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-8)">├────────────────────────────────────────────┤</span>12-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">8</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Align left <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+Shift+L</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>13-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">9</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Align center <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+Shift+E</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>14-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">10</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Align right <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+Shift+</span><span style="color:var(--vt-palette-8)">┌──────────────────────────────┐</span>15-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">11</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Wrapping <span style="color:var(--vt-palette-8)">│</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">All</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-8)">│</span>16-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">12</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Borders</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-8)">│</span> Outer <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Alt+Shift+7</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>17-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Merge cells <span style="color:var(--vt-palette-8)">│</span> Inner <span style="color:var(--vt-palette-8)">│</span>18-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">14</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">├─────────────────────────────────────────├──────────────────────────────┤</span>19-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">15</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Column width <span style="color:var(--vt-palette-8)">│</span> Top <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Alt+Shift+1</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>20-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">16</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Reset column width <span style="color:var(--vt-palette-8)">│</span> Bottom <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Alt+Shift+3</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>21-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">17</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Row height <span style="color:var(--vt-palette-8)">│</span> Left <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Alt+Shift+4</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>22-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">18</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Fit rows to data <span style="color:var(--vt-palette-8)">│</span> Right <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Alt+Shift+2</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>23-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">19</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">├─────────────────────────────────────────├──────────────────────────────┤</span>24-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">20</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Conditional formatting <span style="color:var(--vt-palette-8)">│</span> None <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Alt+Shift+6</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>25-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">21</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Clear</span> <span style="color:var(--vt-palette-8)">conditional</span> <span style="color:var(--vt-palette-8)">formats</span> <span style="color:var(--vt-palette-8)">├──────────────────────────────┤</span>26-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">22</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">├─────────────────────────────────────────│</span> Thin lines ✓ <span style="color:var(--vt-palette-8)">│</span>27-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">23</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Clear formatting <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+</span><span style="color:var(--vt-palette-8)">│</span> Thick lines <span style="color:var(--vt-palette-8)">│</span>28-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">24</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">└─────────────────────────────────────────│</span> Double lines <span style="color:var(--vt-palette-8)">│</span>2+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">B7</span><span style="background:var(--vt-palette-8)"> </span> =SUM(B3:B5) <span style="color:var(--vt-palette-8)">┌───────────────────────────────────────────┐</span>3+ <span style="color:var(--vt-palette-8)">│</span> Number › <span style="color:var(--vt-palette-8)">│</span>4+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">A</span><span style="background:var(--vt-palette-8)"> </span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">B</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-8)">│</span> Increase decimal places <span style="color:var(--vt-palette-8)">│</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">H</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">I</span><span style="background:var(--vt-palette-8)"> </span>5+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">1</span><span style="background:var(--vt-palette-8)"> </span> Household budget 20<span style="color:var(--vt-palette-8)">│</span> Decrease decimal places <span style="color:var(--vt-palette-8)">│</span>6+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">2</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">├───────────────────────────────────────────┤</span>7+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">3</span><span style="background:var(--vt-palette-8)"> </span> Rent 1450 <span style="color:var(--vt-palette-8)">│</span> Bold <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+B</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>8+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span> Groceries 612.4 <span style="color:var(--vt-palette-8)">│</span> Italic <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+I</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>9+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">5</span><span style="background:var(--vt-palette-8)"> </span> Transit 96 <span style="color:var(--vt-palette-8)">│</span> Underline <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+U</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>10+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">6</span><span style="background:var(--vt-palette-8)"> </span> Savings r <span style="color:var(--vt-palette-1);text-decoration:underline wavy var(--vt-palette-1)">#DIV/0!</span> <span style="color:var(--vt-palette-8)">│</span> Strikethrough <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Alt+Shift+5</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>11+<span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">7</span><span style="background:var(--vt-palette-6)"> </span> Total <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">2158.4</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-8)">├───────────────────────────────────────────┤</span>12+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">8</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Alignment › <span style="color:var(--vt-palette-8)">│</span>13+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">9</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Wrapping <span style="color:var(--vt-palette-8)">┌──────────────────────────────┐</span>14+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">10</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Borders</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-8)">│</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">All</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-8)">│</span>15+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">11</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Merge cells <span style="color:var(--vt-palette-8)">│</span> Outer <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Alt+Shift+7</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>16+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">12</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">├─────────────────────────────────────────│</span> Inner <span style="color:var(--vt-palette-8)">│</span>17+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Column width <span style="color:var(--vt-palette-8)">├──────────────────────────────┤</span>18+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">14</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Reset column width <span style="color:var(--vt-palette-8)">│</span> Top <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Alt+Shift+1</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>19+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">15</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Row height <span style="color:var(--vt-palette-8)">│</span> Bottom <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Alt+Shift+3</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>20+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">16</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Fit rows to data <span style="color:var(--vt-palette-8)">│</span> Left <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Alt+Shift+4</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>21+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">17</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">├─────────────────────────────────────────│</span> Right <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Alt+Shift+2</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>22+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">18</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Conditional formatting <span style="color:var(--vt-palette-8)">├──────────────────────────────┤</span>23+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">19</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Clear</span> <span style="color:var(--vt-palette-8)">conditional</span> <span style="color:var(--vt-palette-8)">formats</span> <span style="color:var(--vt-palette-8)">│</span> None <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Alt+Shift+6</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>24+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">20</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">├─────────────────────────────────────────├──────────────────────────────┤</span>25+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">21</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Clear formatting <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+\</span><span style="color:var(--vt-palette-8)">│</span> Thin lines ✓ <span style="color:var(--vt-palette-8)">│</span>26+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">22</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">└─────────────────────────────────────────│</span> Thick lines <span style="color:var(--vt-palette-8)">│</span>27+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">23</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Double lines <span style="color:var(--vt-palette-8)">│</span>28+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">24</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Border color <span style="color:var(--vt-palette-8)">│</span>2929 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">25</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">└──────────────────────────────┘</span>3030 Draw every edge of the selected cells <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Arrows</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">move</span> <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Enter</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">choose</span> <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Esc</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">close</span></pre>\ No newline at end of file@@ -4,27 +4,27 @@
44 <span style="background:var(--vt-palette-7)"> </span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">A</span><span style="background:var(--vt-palette-6)"> </span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-4)">B</span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-8)">│</span> Increase decimal places <span style="color:var(--vt-palette-8)">│</span> Plain text <span style="color:var(--vt-palette-8)">│</span>55 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">1</span><span style="background:var(--vt-palette-7)"> </span> <span style="font-weight:bold">Bills</span> <span style="font-weight:bold">for</span> <span style="font-weight:bold">October</span> <span style="color:var(--vt-palette-8)">│</span> Decrease decimal places <span style="color:var(--vt-palette-8)">├───────────────────────────────────┤</span>66 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">2</span><span style="background:var(--vt-palette-7)"> </span> <span style="font-weight:bold">Item</span> <span style="font-weight:bold">Due</span> <span style="color:var(--vt-palette-8)">├────────────────────────────────────│</span> Number <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+Shift+1</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>7-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">3</span><span style="background:var(--vt-palette-7)"> </span> Rent 10/1/2026 <span style="color:var(--vt-palette-8)">│</span> Bold <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-8)">│</span> Percent <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+Shift+5</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>8-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">4</span><span style="background:var(--vt-palette-7)"> </span> Food 9/28/2026 <span style="color:var(--vt-palette-8)">│</span> Italic <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-8)">│</span> Scientific <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+Shift+6</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>9-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">5</span><span style="background:var(--vt-palette-7)"> </span> Transit 9/30/2026 <span style="color:var(--vt-palette-8)">│</span> Underline <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-8)">├───────────────────────────────────┤</span>10-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">6</span><span style="background:var(--vt-palette-7)"> </span> <span style="text-decoration:line-through">Gym</span> <span style="text-decoration:line-through">10/5/2026</span> <span style="color:var(--vt-palette-8)">│</span> Strikethrough <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Alt+S</span><span style="color:var(--vt-palette-8)">│</span> Accounting <span style="color:var(--vt-palette-8)">│</span>7+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">3</span><span style="background:var(--vt-palette-7)"> </span> Rent 10/1/2026 <span style="color:var(--vt-palette-8)">│</span> Bold <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">C</span><span style="color:var(--vt-palette-8)">│</span> Percent <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+Shift+5</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>8+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">4</span><span style="background:var(--vt-palette-7)"> </span> Food 9/28/2026 <span style="color:var(--vt-palette-8)">│</span> Italic <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">C</span><span style="color:var(--vt-palette-8)">│</span> Scientific <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+Shift+6</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>9+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">5</span><span style="background:var(--vt-palette-7)"> </span> Transit 9/30/2026 <span style="color:var(--vt-palette-8)">│</span> Underline <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">C</span><span style="color:var(--vt-palette-8)">├───────────────────────────────────┤</span>10+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">6</span><span style="background:var(--vt-palette-7)"> </span> <span style="text-decoration:line-through">Gym</span> <span style="text-decoration:line-through">10/5/2026</span> <span style="color:var(--vt-palette-8)">│</span> Strikethrough <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Alt+Sh</span><span style="color:var(--vt-palette-8)">│</span> Accounting <span style="color:var(--vt-palette-8)">│</span>1111 <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">7</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">Total</span><span style="background:var(--vt-palette-6)"> </span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-8)">├────────────────────────────────────│</span> Financial <span style="color:var(--vt-palette-8)">│</span>12-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">8</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Align left <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+S</span><span style="color:var(--vt-palette-8)">│</span> Currency <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+Shift+4</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>13-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">9</span><span style="background:var(--vt-palette-7)"> </span> <span style="font-style:italic">Gym</span> <span style="font-style:italic">cancelled</span> <span style="font-style:italic">from</span> <span style="color:var(--vt-palette-8)">│</span> Align center <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+S</span><span style="color:var(--vt-palette-8)">│</span> Currency rounded <span style="color:var(--vt-palette-8)">│</span>14-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">10</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Align right <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+S</span><span style="color:var(--vt-palette-8)">├───────────────────────────────────┤</span>15-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">11</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Wrapping <span style="color:var(--vt-palette-8)">│</span> Date <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+Shift+3</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>16-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">12</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Borders <span style="color:var(--vt-palette-8)">│</span> Time <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+Shift+2</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>17-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">13</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Merge cells <span style="color:var(--vt-palette-8)">│</span> Date time <span style="color:var(--vt-palette-8)">│</span>18-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">14</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">├────────────────────────────────────│</span> Duration <span style="color:var(--vt-palette-8)">│</span>19-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">15</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Column width <span style="color:var(--vt-palette-8)">└───────────────────────────────────┘</span>20-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">16</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Reset column width <span style="color:var(--vt-palette-8)">│</span>21-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">17</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Row height <span style="color:var(--vt-palette-8)">│</span>22-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">18</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Fit rows to data <span style="color:var(--vt-palette-8)">│</span>23-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">19</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">├────────────────────────────────────────────┤</span>24-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">20</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Conditional formatting <span style="color:var(--vt-palette-8)">│</span>25-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">21</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Clear</span> <span style="color:var(--vt-palette-8)">conditional</span> <span style="color:var(--vt-palette-8)">formats</span> <span style="color:var(--vt-palette-8)">│</span>26-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">22</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">├────────────────────────────────────────────┤</span>27-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">23</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Clear formatting <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+\</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>28-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">24</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">└────────────────────────────────────────────┘</span>12+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">8</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Alignment <span style="color:var(--vt-palette-8)">│</span> Currency <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+Shift+4</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>13+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">9</span><span style="background:var(--vt-palette-7)"> </span> <span style="font-style:italic">Gym</span> <span style="font-style:italic">cancelled</span> <span style="font-style:italic">from</span> <span style="color:var(--vt-palette-8)">│</span> Wrapping <span style="color:var(--vt-palette-8)">│</span> Currency rounded <span style="color:var(--vt-palette-8)">│</span>14+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">10</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Borders <span style="color:var(--vt-palette-8)">├───────────────────────────────────┤</span>15+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">11</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Merge cells <span style="color:var(--vt-palette-8)">│</span> Date <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+Shift+3</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>16+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">12</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">├────────────────────────────────────│</span> Time <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+Shift+2</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>17+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">13</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Column width <span style="color:var(--vt-palette-8)">│</span> Date time <span style="color:var(--vt-palette-8)">│</span>18+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">14</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Reset column width <span style="color:var(--vt-palette-8)">│</span> Duration <span style="color:var(--vt-palette-8)">│</span>19+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">15</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Row height <span style="color:var(--vt-palette-8)">└───────────────────────────────────┘</span>20+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">16</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Fit rows to data <span style="color:var(--vt-palette-8)">│</span>21+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">17</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">├───────────────────────────────────────────┤</span>22+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">18</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Conditional formatting <span style="color:var(--vt-palette-8)">│</span>23+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">19</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Clear</span> <span style="color:var(--vt-palette-8)">conditional</span> <span style="color:var(--vt-palette-8)">formats</span> <span style="color:var(--vt-palette-8)">│</span>24+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">20</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">├───────────────────────────────────────────┤</span>25+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">21</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Clear formatting <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+\</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>26+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">22</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">└───────────────────────────────────────────┘</span>27+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">23</span><span style="background:var(--vt-palette-7)"> </span>28+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">24</span><span style="background:var(--vt-palette-7)"> </span>2929 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">25</span><span style="background:var(--vt-palette-7)"> </span>3030 Show numbers as typed, or as formulas infer <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Arrows</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-0)">move</span> <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Enter</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-0)">choose</span> <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Esc</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-0)">close</span></pre>\ No newline at end of file@@ -4,27 +4,27 @@
44 <span style="background:var(--vt-palette-8)"> </span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">A</span><span style="background:var(--vt-palette-6)"> </span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-4)">B</span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-8)">│</span> Increase decimal places <span style="color:var(--vt-palette-8)">│</span> Plain text <span style="color:var(--vt-palette-8)">│</span>55 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">1</span><span style="background:var(--vt-palette-8)"> </span> <span style="font-weight:bold">Bills</span> <span style="font-weight:bold">for</span> <span style="font-weight:bold">October</span> <span style="color:var(--vt-palette-8)">│</span> Decrease decimal places <span style="color:var(--vt-palette-8)">├───────────────────────────────────┤</span>66 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">2</span><span style="background:var(--vt-palette-8)"> </span> <span style="font-weight:bold">Item</span> <span style="font-weight:bold">Due</span> <span style="color:var(--vt-palette-8)">├────────────────────────────────────│</span> Number <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+Shift+1</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>7-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">3</span><span style="background:var(--vt-palette-8)"> </span> Rent 10/1/2026 <span style="color:var(--vt-palette-8)">│</span> Bold <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-8)">│</span> Percent <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+Shift+5</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>8-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span> Food 9/28/2026 <span style="color:var(--vt-palette-8)">│</span> Italic <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-8)">│</span> Scientific <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+Shift+6</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>9-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">5</span><span style="background:var(--vt-palette-8)"> </span> Transit 9/30/2026 <span style="color:var(--vt-palette-8)">│</span> Underline <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-8)">├───────────────────────────────────┤</span>10-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">6</span><span style="background:var(--vt-palette-8)"> </span> <span style="text-decoration:line-through">Gym</span> <span style="text-decoration:line-through">10/5/2026</span> <span style="color:var(--vt-palette-8)">│</span> Strikethrough <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Alt+S</span><span style="color:var(--vt-palette-8)">│</span> Accounting <span style="color:var(--vt-palette-8)">│</span>7+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">3</span><span style="background:var(--vt-palette-8)"> </span> Rent 10/1/2026 <span style="color:var(--vt-palette-8)">│</span> Bold <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">C</span><span style="color:var(--vt-palette-8)">│</span> Percent <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+Shift+5</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>8+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span> Food 9/28/2026 <span style="color:var(--vt-palette-8)">│</span> Italic <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">C</span><span style="color:var(--vt-palette-8)">│</span> Scientific <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+Shift+6</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>9+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">5</span><span style="background:var(--vt-palette-8)"> </span> Transit 9/30/2026 <span style="color:var(--vt-palette-8)">│</span> Underline <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">C</span><span style="color:var(--vt-palette-8)">├───────────────────────────────────┤</span>10+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">6</span><span style="background:var(--vt-palette-8)"> </span> <span style="text-decoration:line-through">Gym</span> <span style="text-decoration:line-through">10/5/2026</span> <span style="color:var(--vt-palette-8)">│</span> Strikethrough <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Alt+Sh</span><span style="color:var(--vt-palette-8)">│</span> Accounting <span style="color:var(--vt-palette-8)">│</span>1111 <span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">7</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">Total</span><span style="background:var(--vt-palette-6)"> </span><span style="background:var(--vt-palette-4)"> </span><span style="color:var(--vt-palette-8)">├────────────────────────────────────│</span> Financial <span style="color:var(--vt-palette-8)">│</span>12-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">8</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Align left <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+S</span><span style="color:var(--vt-palette-8)">│</span> Currency <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+Shift+4</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>13-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">9</span><span style="background:var(--vt-palette-8)"> </span> <span style="font-style:italic">Gym</span> <span style="font-style:italic">cancelled</span> <span style="font-style:italic">from</span> <span style="color:var(--vt-palette-8)">│</span> Align center <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+S</span><span style="color:var(--vt-palette-8)">│</span> Currency rounded <span style="color:var(--vt-palette-8)">│</span>14-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">10</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Align right <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+S</span><span style="color:var(--vt-palette-8)">├───────────────────────────────────┤</span>15-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">11</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Wrapping <span style="color:var(--vt-palette-8)">│</span> Date <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+Shift+3</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>16-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">12</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Borders <span style="color:var(--vt-palette-8)">│</span> Time <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+Shift+2</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>17-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Merge cells <span style="color:var(--vt-palette-8)">│</span> Date time <span style="color:var(--vt-palette-8)">│</span>18-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">14</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">├────────────────────────────────────│</span> Duration <span style="color:var(--vt-palette-8)">│</span>19-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">15</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Column width <span style="color:var(--vt-palette-8)">└───────────────────────────────────┘</span>20-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">16</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Reset column width <span style="color:var(--vt-palette-8)">│</span>21-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">17</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Row height <span style="color:var(--vt-palette-8)">│</span>22-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">18</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Fit rows to data <span style="color:var(--vt-palette-8)">│</span>23-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">19</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">├────────────────────────────────────────────┤</span>24-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">20</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Conditional formatting <span style="color:var(--vt-palette-8)">│</span>25-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">21</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Clear</span> <span style="color:var(--vt-palette-8)">conditional</span> <span style="color:var(--vt-palette-8)">formats</span> <span style="color:var(--vt-palette-8)">│</span>26-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">22</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">├────────────────────────────────────────────┤</span>27-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">23</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Clear formatting <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+\</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>28-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">24</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">└────────────────────────────────────────────┘</span>12+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">8</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Alignment <span style="color:var(--vt-palette-8)">│</span> Currency <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+Shift+4</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>13+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">9</span><span style="background:var(--vt-palette-8)"> </span> <span style="font-style:italic">Gym</span> <span style="font-style:italic">cancelled</span> <span style="font-style:italic">from</span> <span style="color:var(--vt-palette-8)">│</span> Wrapping <span style="color:var(--vt-palette-8)">│</span> Currency rounded <span style="color:var(--vt-palette-8)">│</span>14+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">10</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Borders <span style="color:var(--vt-palette-8)">├───────────────────────────────────┤</span>15+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">11</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Merge cells <span style="color:var(--vt-palette-8)">│</span> Date <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+Shift+3</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>16+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">12</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">├────────────────────────────────────│</span> Time <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+Shift+2</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>17+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Column width <span style="color:var(--vt-palette-8)">│</span> Date time <span style="color:var(--vt-palette-8)">│</span>18+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">14</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Reset column width <span style="color:var(--vt-palette-8)">│</span> Duration <span style="color:var(--vt-palette-8)">│</span>19+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">15</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Row height <span style="color:var(--vt-palette-8)">└───────────────────────────────────┘</span>20+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">16</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Fit rows to data <span style="color:var(--vt-palette-8)">│</span>21+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">17</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">├───────────────────────────────────────────┤</span>22+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">18</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Conditional formatting <span style="color:var(--vt-palette-8)">│</span>23+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">19</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Clear</span> <span style="color:var(--vt-palette-8)">conditional</span> <span style="color:var(--vt-palette-8)">formats</span> <span style="color:var(--vt-palette-8)">│</span>24+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">20</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">├───────────────────────────────────────────┤</span>25+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">21</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Clear formatting <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+\</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>26+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">22</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">└───────────────────────────────────────────┘</span>27+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">23</span><span style="background:var(--vt-palette-8)"> </span>28+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">24</span><span style="background:var(--vt-palette-8)"> </span>2929 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">25</span><span style="background:var(--vt-palette-8)"> </span>3030 Show numbers as typed, or as formulas infer <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Arrows</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">move</span> <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Enter</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">choose</span> <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Esc</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">close</span></pre>\ No newline at end of file@@ -12,5 +12,5 @@
1212 <span style="color:var(--vt-palette-8)">│</span> Sort <span style="color:var(--vt-palette-3);font-weight:bold">s</span>heet Z to <span style="color:var(--vt-palette-3);font-weight:bold">A</span> <span style="color:var(--vt-palette-8)">│</span>1313 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Ask</span> <span style="color:var(--vt-palette-8)">JEV</span> <span style="color:var(--vt-palette-8)">again</span> <span style="color:var(--vt-palette-8)">│</span>1414 <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-3);font-weight:bold">S</span>ort r<span style="color:var(--vt-palette-3);font-weight:bold">a</span>nge <span style="color:var(--vt-palette-8)">│</span>15-<span style="color:var(--vt-palette-8)">└──────────────────────────────────────────────</span> <span style="color:var(--vt-palette-8)">40</span> <span style="color:var(--vt-palette-8)">of</span> <span style="color:var(--vt-palette-8)">163</span> <span style="color:var(--vt-palette-8)">─┘</span>15+<span style="color:var(--vt-palette-8)">└──────────────────────────────────────────────</span> <span style="color:var(--vt-palette-8)">40</span> <span style="color:var(--vt-palette-8)">of</span> <span style="color:var(--vt-palette-8)">167</span> <span style="color:var(--vt-palette-8)">─┘</span>1616 Save the sheet u… <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Up/Down</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">move</span> <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Enter</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">run</span> <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Esc</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">close</span></pre>\ No newline at end of file@@ -3,18 +3,18 @@
33 <span style="color:var(--vt-palette-8)">│</span> <span style="font-weight:bold">›</span> col <span style="color:var(--vt-palette-8)">│</span>44 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">A</span><span style="color:var(--vt-palette-8)">├────────────────────────────────────────────────────────────────────────────┤</span><span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">I</span><span style="background:var(--vt-palette-7)"> </span>55 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">1</span><span style="background:var(--vt-palette-7)"> </span> Hous<span style="color:var(--vt-palette-8)">│</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold;text-decoration:underline">Col</span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">umn</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">width</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Format</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-8)">│</span>6-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">2</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Delete <span style="color:var(--vt-palette-4);font-weight:bold">col</span>umns <span style="color:var(--vt-palette-0)">Edit</span> <span style="color:var(--vt-palette-8)">│</span>7-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">3</span><span style="background:var(--vt-palette-7)"> </span> Rent<span style="color:var(--vt-palette-8)">│</span> Insert <span style="color:var(--vt-palette-4);font-weight:bold">co</span>lumns <span style="color:var(--vt-palette-4);font-weight:bold">l</span>eft <span style="color:var(--vt-palette-0)">Insert</span> <span style="color:var(--vt-palette-8)">│</span>8-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">4</span><span style="background:var(--vt-palette-7)"> </span> Groc<span style="color:var(--vt-palette-8)">│</span> Select <span style="color:var(--vt-palette-4);font-weight:bold">col</span>umns <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+Space</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>9-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">5</span><span style="background:var(--vt-palette-7)"> </span> Tran<span style="color:var(--vt-palette-8)">│</span> Freeze 1 <span style="color:var(--vt-palette-4);font-weight:bold">col</span>umn <span style="color:var(--vt-palette-0)">View</span> <span style="color:var(--vt-palette-0)">›</span> <span style="color:var(--vt-palette-0)">Freeze</span> <span style="color:var(--vt-palette-8)">│</span>10-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">6</span><span style="background:var(--vt-palette-7)"> </span> Savi<span style="color:var(--vt-palette-8)">│</span> Unfreeze <span style="color:var(--vt-palette-4);font-weight:bold">col</span>umns <span style="color:var(--vt-palette-0)">View</span> <span style="color:var(--vt-palette-0)">›</span> <span style="color:var(--vt-palette-0)">Freeze</span> <span style="color:var(--vt-palette-8)">│</span>11-<span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">7</span><span style="background:var(--vt-palette-6)"> </span> Tota<span style="color:var(--vt-palette-8)">│</span> Freeze 2 <span style="color:var(--vt-palette-4);font-weight:bold">col</span>umns <span style="color:var(--vt-palette-0)">View</span> <span style="color:var(--vt-palette-0)">›</span> <span style="color:var(--vt-palette-0)">Freeze</span> <span style="color:var(--vt-palette-8)">│</span>12-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">8</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Filter</span> <span style="color:var(--vt-palette-8)">by</span> <span style="color:var(--vt-palette-8)">column</span> <span style="color:var(--vt-palette-8)">Data</span> <span style="color:var(--vt-palette-8)">│</span>13-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">9</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Reset <span style="color:var(--vt-palette-4);font-weight:bold">col</span>umn width <span style="color:var(--vt-palette-0)">Format</span> <span style="color:var(--vt-palette-8)">│</span>14-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">10</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Insert <span style="color:var(--vt-palette-4);font-weight:bold">col</span>umns right <span style="color:var(--vt-palette-0)">Insert</span> <span style="color:var(--vt-palette-8)">│</span>15-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">11</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Delete rows or <span style="color:var(--vt-palette-4);font-weight:bold">col</span>umns <span style="color:var(--vt-palette-0)">Edit</span> <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+Alt+-</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>16-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">12</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Insert rows or <span style="color:var(--vt-palette-4);font-weight:bold">col</span>umns <span style="color:var(--vt-palette-0)">Insert</span> <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+Alt+=</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>17-<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">13</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">└────────────────────────────────────────────────────────────────</span> <span style="color:var(--vt-palette-0)">24</span> <span style="color:var(--vt-palette-0)">of</span> <span style="color:var(--vt-palette-0)">163</span> <span style="color:var(--vt-palette-8)">─┘</span>6+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">2</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Border <span style="color:var(--vt-palette-4);font-weight:bold">col</span>or <span style="color:var(--vt-palette-0)">Format</span> <span style="color:var(--vt-palette-0)">›</span> <span style="color:var(--vt-palette-0)">Borders</span> <span style="color:var(--vt-palette-8)">│</span>7+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">3</span><span style="background:var(--vt-palette-7)"> </span> Rent<span style="color:var(--vt-palette-8)">│</span> Delete <span style="color:var(--vt-palette-4);font-weight:bold">col</span>umns <span style="color:var(--vt-palette-0)">Edit</span> <span style="color:var(--vt-palette-8)">│</span>8+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">4</span><span style="background:var(--vt-palette-7)"> </span> Groc<span style="color:var(--vt-palette-8)">│</span> Insert <span style="color:var(--vt-palette-4);font-weight:bold">co</span>lumns <span style="color:var(--vt-palette-4);font-weight:bold">l</span>eft <span style="color:var(--vt-palette-0)">Insert</span> <span style="color:var(--vt-palette-8)">│</span>9+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">5</span><span style="background:var(--vt-palette-7)"> </span> Tran<span style="color:var(--vt-palette-8)">│</span> Select <span style="color:var(--vt-palette-4);font-weight:bold">col</span>umns <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+Space</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>10+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">6</span><span style="background:var(--vt-palette-7)"> </span> Savi<span style="color:var(--vt-palette-8)">│</span> Freeze 1 <span style="color:var(--vt-palette-4);font-weight:bold">col</span>umn <span style="color:var(--vt-palette-0)">View</span> <span style="color:var(--vt-palette-0)">›</span> <span style="color:var(--vt-palette-0)">Freeze</span> <span style="color:var(--vt-palette-8)">│</span>11+<span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">7</span><span style="background:var(--vt-palette-6)"> </span> Tota<span style="color:var(--vt-palette-8)">│</span> Unfreeze <span style="color:var(--vt-palette-4);font-weight:bold">col</span>umns <span style="color:var(--vt-palette-0)">View</span> <span style="color:var(--vt-palette-0)">›</span> <span style="color:var(--vt-palette-0)">Freeze</span> <span style="color:var(--vt-palette-8)">│</span>12+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">8</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Freeze 2 <span style="color:var(--vt-palette-4);font-weight:bold">col</span>umns <span style="color:var(--vt-palette-0)">View</span> <span style="color:var(--vt-palette-0)">›</span> <span style="color:var(--vt-palette-0)">Freeze</span> <span style="color:var(--vt-palette-8)">│</span>13+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">9</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Filter</span> <span style="color:var(--vt-palette-8)">by</span> <span style="color:var(--vt-palette-8)">column</span> <span style="color:var(--vt-palette-8)">Data</span> <span style="color:var(--vt-palette-8)">│</span>14+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">10</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Reset <span style="color:var(--vt-palette-4);font-weight:bold">col</span>umn width <span style="color:var(--vt-palette-0)">Format</span> <span style="color:var(--vt-palette-8)">│</span>15+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">11</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Insert <span style="color:var(--vt-palette-4);font-weight:bold">col</span>umns right <span style="color:var(--vt-palette-0)">Insert</span> <span style="color:var(--vt-palette-8)">│</span>16+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">12</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span> Delete rows or <span style="color:var(--vt-palette-4);font-weight:bold">col</span>umns <span style="color:var(--vt-palette-0)">Edit</span> <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">Ctrl+Alt+-</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">│</span>17+<span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">13</span><span style="background:var(--vt-palette-7)"> </span> <span style="color:var(--vt-palette-8)">└────────────────────────────────────────────────────────────────</span> <span style="color:var(--vt-palette-0)">26</span> <span style="color:var(--vt-palette-0)">of</span> <span style="color:var(--vt-palette-0)">167</span> <span style="color:var(--vt-palette-8)">─┘</span>1818 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">14</span><span style="background:var(--vt-palette-7)"> </span>1919 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">15</span><span style="background:var(--vt-palette-7)"> </span>2020 <span style="background:var(--vt-palette-7)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-7)">16</span><span style="background:var(--vt-palette-7)"> </span>@@ -3,18 +3,18 @@
33 <span style="color:var(--vt-palette-8)">│</span> <span style="font-weight:bold">›</span> col <span style="color:var(--vt-palette-8)">│</span>44 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">A</span><span style="color:var(--vt-palette-8)">├────────────────────────────────────────────────────────────────────────────┤</span><span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">I</span><span style="background:var(--vt-palette-8)"> </span>55 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">1</span><span style="background:var(--vt-palette-8)"> </span> Hous<span style="color:var(--vt-palette-8)">│</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold;text-decoration:underline">Col</span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">umn</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">width</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6)">Format</span><span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-8)">│</span>6-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">2</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Delete <span style="color:var(--vt-palette-3);font-weight:bold">col</span>umns <span style="color:var(--vt-palette-8)">Edit</span> <span style="color:var(--vt-palette-8)">│</span>7-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">3</span><span style="background:var(--vt-palette-8)"> </span> Rent<span style="color:var(--vt-palette-8)">│</span> Insert <span style="color:var(--vt-palette-3);font-weight:bold">co</span>lumns <span style="color:var(--vt-palette-3);font-weight:bold">l</span>eft <span style="color:var(--vt-palette-8)">Insert</span> <span style="color:var(--vt-palette-8)">│</span>8-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span> Groc<span style="color:var(--vt-palette-8)">│</span> Select <span style="color:var(--vt-palette-3);font-weight:bold">col</span>umns <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+Space</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>9-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">5</span><span style="background:var(--vt-palette-8)"> </span> Tran<span style="color:var(--vt-palette-8)">│</span> Freeze 1 <span style="color:var(--vt-palette-3);font-weight:bold">col</span>umn <span style="color:var(--vt-palette-8)">View</span> <span style="color:var(--vt-palette-8)">›</span> <span style="color:var(--vt-palette-8)">Freeze</span> <span style="color:var(--vt-palette-8)">│</span>10-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">6</span><span style="background:var(--vt-palette-8)"> </span> Savi<span style="color:var(--vt-palette-8)">│</span> Unfreeze <span style="color:var(--vt-palette-3);font-weight:bold">col</span>umns <span style="color:var(--vt-palette-8)">View</span> <span style="color:var(--vt-palette-8)">›</span> <span style="color:var(--vt-palette-8)">Freeze</span> <span style="color:var(--vt-palette-8)">│</span>11-<span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">7</span><span style="background:var(--vt-palette-6)"> </span> Tota<span style="color:var(--vt-palette-8)">│</span> Freeze 2 <span style="color:var(--vt-palette-3);font-weight:bold">col</span>umns <span style="color:var(--vt-palette-8)">View</span> <span style="color:var(--vt-palette-8)">›</span> <span style="color:var(--vt-palette-8)">Freeze</span> <span style="color:var(--vt-palette-8)">│</span>12-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">8</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Filter</span> <span style="color:var(--vt-palette-8)">by</span> <span style="color:var(--vt-palette-8)">column</span> <span style="color:var(--vt-palette-8)">Data</span> <span style="color:var(--vt-palette-8)">│</span>13-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">9</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Reset <span style="color:var(--vt-palette-3);font-weight:bold">col</span>umn width <span style="color:var(--vt-palette-8)">Format</span> <span style="color:var(--vt-palette-8)">│</span>14-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">10</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Insert <span style="color:var(--vt-palette-3);font-weight:bold">col</span>umns right <span style="color:var(--vt-palette-8)">Insert</span> <span style="color:var(--vt-palette-8)">│</span>15-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">11</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Delete rows or <span style="color:var(--vt-palette-3);font-weight:bold">col</span>umns <span style="color:var(--vt-palette-8)">Edit</span> <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+Alt+-</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>16-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">12</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Insert rows or <span style="color:var(--vt-palette-3);font-weight:bold">col</span>umns <span style="color:var(--vt-palette-8)">Insert</span> <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+Alt+=</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>17-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">└────────────────────────────────────────────────────────────────</span> <span style="color:var(--vt-palette-8)">24</span> <span style="color:var(--vt-palette-8)">of</span> <span style="color:var(--vt-palette-8)">163</span> <span style="color:var(--vt-palette-8)">─┘</span>6+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">2</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Border <span style="color:var(--vt-palette-3);font-weight:bold">col</span>or <span style="color:var(--vt-palette-8)">Format</span> <span style="color:var(--vt-palette-8)">›</span> <span style="color:var(--vt-palette-8)">Borders</span> <span style="color:var(--vt-palette-8)">│</span>7+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">3</span><span style="background:var(--vt-palette-8)"> </span> Rent<span style="color:var(--vt-palette-8)">│</span> Delete <span style="color:var(--vt-palette-3);font-weight:bold">col</span>umns <span style="color:var(--vt-palette-8)">Edit</span> <span style="color:var(--vt-palette-8)">│</span>8+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">4</span><span style="background:var(--vt-palette-8)"> </span> Groc<span style="color:var(--vt-palette-8)">│</span> Insert <span style="color:var(--vt-palette-3);font-weight:bold">co</span>lumns <span style="color:var(--vt-palette-3);font-weight:bold">l</span>eft <span style="color:var(--vt-palette-8)">Insert</span> <span style="color:var(--vt-palette-8)">│</span>9+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">5</span><span style="background:var(--vt-palette-8)"> </span> Tran<span style="color:var(--vt-palette-8)">│</span> Select <span style="color:var(--vt-palette-3);font-weight:bold">col</span>umns <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+Space</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>10+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">6</span><span style="background:var(--vt-palette-8)"> </span> Savi<span style="color:var(--vt-palette-8)">│</span> Freeze 1 <span style="color:var(--vt-palette-3);font-weight:bold">col</span>umn <span style="color:var(--vt-palette-8)">View</span> <span style="color:var(--vt-palette-8)">›</span> <span style="color:var(--vt-palette-8)">Freeze</span> <span style="color:var(--vt-palette-8)">│</span>11+<span style="background:var(--vt-palette-6)"> </span><span style="color:var(--vt-palette-0);background:var(--vt-palette-6);font-weight:bold">7</span><span style="background:var(--vt-palette-6)"> </span> Tota<span style="color:var(--vt-palette-8)">│</span> Unfreeze <span style="color:var(--vt-palette-3);font-weight:bold">col</span>umns <span style="color:var(--vt-palette-8)">View</span> <span style="color:var(--vt-palette-8)">›</span> <span style="color:var(--vt-palette-8)">Freeze</span> <span style="color:var(--vt-palette-8)">│</span>12+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">8</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Freeze 2 <span style="color:var(--vt-palette-3);font-weight:bold">col</span>umns <span style="color:var(--vt-palette-8)">View</span> <span style="color:var(--vt-palette-8)">›</span> <span style="color:var(--vt-palette-8)">Freeze</span> <span style="color:var(--vt-palette-8)">│</span>13+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">9</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> <span style="color:var(--vt-palette-8)">Filter</span> <span style="color:var(--vt-palette-8)">by</span> <span style="color:var(--vt-palette-8)">column</span> <span style="color:var(--vt-palette-8)">Data</span> <span style="color:var(--vt-palette-8)">│</span>14+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">10</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Reset <span style="color:var(--vt-palette-3);font-weight:bold">col</span>umn width <span style="color:var(--vt-palette-8)">Format</span> <span style="color:var(--vt-palette-8)">│</span>15+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">11</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Insert <span style="color:var(--vt-palette-3);font-weight:bold">col</span>umns right <span style="color:var(--vt-palette-8)">Insert</span> <span style="color:var(--vt-palette-8)">│</span>16+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">12</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Delete rows or <span style="color:var(--vt-palette-3);font-weight:bold">col</span>umns <span style="color:var(--vt-palette-8)">Edit</span> <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">Ctrl+Alt+-</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span>17+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">└────────────────────────────────────────────────────────────────</span> <span style="color:var(--vt-palette-8)">26</span> <span style="color:var(--vt-palette-8)">of</span> <span style="color:var(--vt-palette-8)">167</span> <span style="color:var(--vt-palette-8)">─┘</span>1818 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">14</span><span style="background:var(--vt-palette-8)"> </span>1919 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">15</span><span style="background:var(--vt-palette-8)"> </span>2020 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">16</span><span style="background:var(--vt-palette-8)"> </span>@@ -14,7 +14,7 @@
1414 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">10</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> In<span style="color:var(--vt-palette-3);font-weight:bold">se</span>rt rows be<span style="color:var(--vt-palette-3);font-weight:bold">l</span>ow <span style="color:var(--vt-palette-8)">Insert</span> <span style="color:var(--vt-palette-8)">│</span>1515 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">11</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Re<span style="color:var(--vt-palette-3);font-weight:bold">se</span>t co<span style="color:var(--vt-palette-3);font-weight:bold">l</span>umn width <span style="color:var(--vt-palette-8)">Format</span> <span style="color:var(--vt-palette-8)">│</span>1616 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">12</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> In<span style="color:var(--vt-palette-3);font-weight:bold">se</span>rt co<span style="color:var(--vt-palette-3);font-weight:bold">l</span>umns right <span style="color:var(--vt-palette-8)">Insert</span> <span style="color:var(--vt-palette-8)">│</span>17-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">└────────────────────────────────────────────────────────────────</span> <span style="color:var(--vt-palette-8)">22</span> <span style="color:var(--vt-palette-8)">of</span> <span style="color:var(--vt-palette-8)">163</span> <span style="color:var(--vt-palette-8)">─┘</span>17+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">└────────────────────────────────────────────────────────────────</span> <span style="color:var(--vt-palette-8)">22</span> <span style="color:var(--vt-palette-8)">of</span> <span style="color:var(--vt-palette-8)">167</span> <span style="color:var(--vt-palette-8)">─┘</span>1818 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">14</span><span style="background:var(--vt-palette-8)"> </span>1919 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">15</span><span style="background:var(--vt-palette-8)"> </span>2020 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">16</span><span style="background:var(--vt-palette-8)"> </span>@@ -14,7 +14,7 @@
1414 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">10</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Decimal arithmetic <span style="color:var(--vt-palette-8)">File</span> <span style="color:var(--vt-palette-8)">›</span> <span style="color:var(--vt-palette-8)">Settings</span> <span style="color:var(--vt-palette-8)">│</span>1515 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">11</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Locale <span style="color:var(--vt-palette-8)">File</span> <span style="color:var(--vt-palette-8)">›</span> <span style="color:var(--vt-palette-8)">Settings</span> <span style="color:var(--vt-palette-8)">│</span>1616 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">12</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">│</span> Vim keys <span style="color:var(--vt-palette-8)">File</span> <span style="color:var(--vt-palette-8)">›</span> <span style="color:var(--vt-palette-8)">Settings</span> <span style="color:var(--vt-palette-8)">│</span>17-<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">└───────────────────────────────────────────────────────────────</span> <span style="color:var(--vt-palette-8)">163</span> <span style="color:var(--vt-palette-8)">of</span> <span style="color:var(--vt-palette-8)">163</span> <span style="color:var(--vt-palette-8)">─┘</span>17+<span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">13</span><span style="background:var(--vt-palette-8)"> </span> <span style="color:var(--vt-palette-8)">└───────────────────────────────────────────────────────────────</span> <span style="color:var(--vt-palette-8)">167</span> <span style="color:var(--vt-palette-8)">of</span> <span style="color:var(--vt-palette-8)">167</span> <span style="color:var(--vt-palette-8)">─┘</span>1818 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">14</span><span style="background:var(--vt-palette-8)"> </span>1919 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">15</span><span style="background:var(--vt-palette-8)"> </span>2020 <span style="background:var(--vt-palette-8)"> </span><span style="color:var(--vt-palette-15);background:var(--vt-palette-8)">16</span><span style="background:var(--vt-palette-8)"> </span>@@ -0,0 +1,68 @@
1+package ui2+3+import (4+ "strings"5+6+ tea "charm.land/bubbletea/v2"7+8+ "github.com/FelineStateMachine/012/internal/sheet"9+ "github.com/FelineStateMachine/012/internal/ui/picker"10+)11+12+// Format > Alignment's vertical alignments, and the color Format >13+// Borders draws with, which it keeps as it keeps the line style.14+15+var valignments = []struct {16+ id, title, desc string17+ v sheet.VAlign18+}{19+ {"format.valign_top", "Align top", "Put text at the top of a tall row", sheet.VAlignTop},20+ {"format.valign_middle", "Align middle", "Center text between the top and bottom of a tall row", sheet.VAlignMiddle},21+ {"format.valign_bottom", "Align bottom", "Put text at the bottom of a tall row, as Sheets does unless told", sheet.VAlignBottom},22+}23+24+func init() {25+ for _, va := range valignments {26+ v, title := va.v, va.title27+ register(&command{id: va.id, title: title, desc: va.desc, edits: (*Model).selection, keepsSpills: true,28+ checked: func(m *Model) bool { return m.sheet.CellStyle(m.cur).VAlign == v },29+ run: func(m *Model) tea.Cmd {30+ r := m.selection()31+ m.sheet.Batch(sheet.Change{Label: strings.ToLower(title) + " " + r.String(), Focus: r}, func() error {32+ m.sheet.SetStyle(r, func(s *sheet.Style) { s.VAlign = v })33+ return nil34+ })35+ m.formatted("Aligned to the " + strings.ToLower(strings.TrimPrefix(title, "Align ")))36+ return nil37+ }})38+ }39+ register(&command{id: "format.border_color", title: "Border color",40+ desc: "Choose the color borders draw with: the text's, or one of the terminal's colors",41+ run: func(m *Model) tea.Cmd { m.openBorderColors(); return nil }})42+}43+44+// openBorderColors lists the colors borders may draw with, the current45+// one highlighted.46+func (m *Model) openBorderColors() {47+ var items []picker.Item48+ for _, c := range sheet.Colors() {49+ title, desc := c.Title(), "Draw borders in "+c.String()50+ if c == sheet.ColorNone {51+ title, desc = "Automatic", "Draw borders in the text's color, as Sheets draws them black"52+ }53+ items = append(items, picker.Item{Title: title, Name: len(title), Desc: desc, Swatch: m.borderRole(c).Render("━━━"), Pick: func() tea.Cmd {54+ m.closeOverlay()55+ m.borderColor = c56+ m.note = "Borders draw in " + strings.ToLower(title) + " now"57+ if c == sheet.ColorNone {58+ m.note = "Borders draw in the text's color now"59+ }60+ return nil61+ }})62+ }63+ p := m.newPicker("Border color", "Type a color", 40, items)64+ p.Action = "choose"65+ p.Answers = true66+ p.Sel = int(m.borderColor)67+ m.openOverlay(p)68+}@@ -0,0 +1,169 @@
1+package ui2+3+import (4+ "strings"5+ "testing"6+7+ "github.com/FelineStateMachine/012/internal/sheet"8+)9+10+// Format > Alignment's Top, Middle and Bottom put a value on the first,11+// middle or last line of a tall row, and wrapped text starts there.12+func TestVerticalAlignment(t *testing.T) {13+ m := newModel()14+ press(t, m, "x", "<tab>", "one two three", "<enter>")15+ m.sheet.SetRowHeight(0, 0, 5)16+ m.cur = addr("A1")17+ lineOf := func(text string) int {18+ for i, l := range gridLines(m)[:5] {19+ if strings.Contains(l, text) {20+ return i21+ }22+ }23+ return -124+ }25+ if got := lineOf("x"); got != 4 {26+ t.Errorf("automatic: x on line %d", got)27+ }28+ for id, want := range map[string]int{"format.valign_top": 0, "format.valign_middle": 2, "format.valign_bottom": 4} {29+ run(m, m.runCommand(id))30+ if got := lineOf("x"); got != want || !commands[id].checked(m) {31+ t.Errorf("%s: x on line %d, want %d", id, got, want)32+ }33+ }34+ m.cur = addr("B1")35+ run(m, m.runCommand("format.wrap"))36+ run(m, m.runCommand("format.valign_middle"))37+ if lineOf("one") != 1 || lineOf("three") != 2 {38+ t.Errorf("wrapped in the middle:\n%s", strings.Join(gridLines(m)[:5], "\n"))39+ }40+ press(t, m, "<ctrl+z>")41+ if lineOf("one") != 3 {42+ t.Errorf("undo:\n%s", strings.Join(gridLines(m)[:5], "\n"))43+ }44+ if !menuHas(m, "Format", "Alignment") {45+ t.Error("no Format > Alignment")46+ }47+}48+49+// menuHas reports whether the menu titled top has an item titled title.50+func menuHas(m *Model, top, title string) bool {51+ for _, mn := range menuBar {52+ if mn.title != top {53+ continue54+ }55+ for _, it := range mn.items {56+ if it.label() == title {57+ return true58+ }59+ }60+ }61+ return false62+}63+64+// Border color picks the color the next borders draw in, which a65+// recording keeps as the command's answer.66+func TestBorderColor(t *testing.T) {67+ m := newModel()68+ press(t, m, "a", "<tab>", "b", "<enter>")69+ run(m, m.runCommand("format.border_color"))70+ press(t, m, "red", "<enter>")71+ if m.borderColor != sheet.ColorRed || !strings.Contains(m.note, "red") {72+ t.Fatalf("color %v, note %q", m.borderColor, m.note)73+ }74+ m.selectRect(rect("A1:B1"))75+ run(m, m.runCommand("format.borders_outer"))76+ if st := m.sheet.StrokeAbove(addr("A1")); st != (sheet.Stroke{Line: sheet.LineThin, Color: sheet.ColorRed}) {77+ t.Errorf("top edge %+v", st)78+ }79+ if v := m.View().Content; !strings.Contains(v, m.th.RuleText[sheet.ColorRed].Render("│")) {80+ t.Error("the lines aren't drawn red")81+ }82+ m = newModel()83+ script(t, m, `run("format.border_color", answer="Blue")84+run("format.borders_all")`)85+ if st := m.sheet.StrokeLeft(addr("A1")); st.Color != sheet.ColorBlue {86+ t.Errorf("script's border %+v, %q", st, m.warn)87+ }88+}89+90+// A double line meeting a thick outline ends in a thick tee whose arm91+// runs on into the double line, as Unicode has no joint of the two.92+func TestDoubleMeetsThick(t *testing.T) {93+ m := newModel()94+ press(t, m, "Day", "<tab>", "Cost", "<enter>", "Fri", "<tab>", "12", "<enter>")95+ m.selectRect(rect("A1:B2"))96+ run(m, m.runCommand("format.borders_all"))97+ run(m, m.runCommand("format.border_thick"))98+ run(m, m.runCommand("format.borders_outer"))99+ m.selectRect(rect("A1:B1"))100+ run(m, m.runCommand("format.border_double"))101+ run(m, m.runCommand("format.border_bottom"))102+ g := gridLines(m)103+ if !strings.Contains(g[2], "┣━════════╪════════━┫") || strings.ContainsAny(g[2], "╠╣") {104+ t.Errorf("joint under the headers: %q", g[2])105+ }106+}107+108+// Typing in a merged cell shows the entry as wide as the merge, and109+// stepping off it goes on along the row or column it was entered by.110+func TestMergeEntryAndMemory(t *testing.T) {111+ m := newModel()112+ m.selectRect(rect("B1:C3"))113+ run(m, m.runCommand("format.merge_all"))114+ m.clearSelection()115+ m.cur = addr("B1")116+ press(t, m, "a title wider than one column")117+ if !strings.Contains(screen(m), "a title wider than one c") {118+ t.Errorf("entry not as wide as the merge:\n%s", screen(m))119+ }120+ press(t, m, "<esc>")121+ m.cur = addr("A2")122+ press(t, m, "<right>")123+ if m.cur != addr("B1") {124+ t.Fatalf("into the merge: %v", m.cur)125+ }126+ press(t, m, "<right>")127+ if m.cur != addr("D2") {128+ t.Errorf("out of the merge along row 2: %v", m.cur)129+ }130+ m.cur = addr("C5")131+ press(t, m, "<up>", "<up>", "<down>")132+ if m.cur != addr("C4") {133+ t.Errorf("down out of the merge along column C: %v", m.cur)134+ }135+ // Freezing through a merge is refused.136+ m.cur = addr("B2")137+ run(m, m.runCommand("view.freeze_rows2"))138+ if m.mode != modeError || !strings.Contains(m.errMsg, "B1:C3") {139+ t.Errorf("froze through a merge: %v %q", m.mode, m.errMsg)140+ }141+ if fr, _ := m.sheet.Frozen(); fr != 0 {142+ t.Errorf("froze %d rows", fr)143+ }144+}145+146+// A merged cell's value sits on the middle one of the lines its rows147+// take, rule lines between them included, whatever their heights; Top148+// and Bottom put it on the first or last.149+func TestMergeCenteredByLines(t *testing.T) {150+ m := newModel()151+ press(t, m, "mid", "<enter>")152+ m.sheet.SetRowHeight(0, 0, 5)153+ m.selectRect(rect("A1:A3"))154+ run(m, m.runCommand("format.merge_vertical"))155+ m.View()156+ if row, k := m.mergeText(rect("A1:A3")); row != 0 || k != 3 {157+ t.Errorf("middle of 7 lines at row %d line %d", row, k)158+ }159+ m.cur = addr("A1")160+ m.clearSelection()161+ run(m, m.runCommand("format.valign_bottom"))162+ m.View()163+ if row, k := m.mergeText(rect("A1:A3")); row != 2 || k != 0 {164+ t.Errorf("bottom at row %d line %d", row, k)165+ }166+ if !strings.Contains(gridLines(m)[6], "mid") {167+ t.Errorf("drawn:\n%s", strings.Join(gridLines(m)[:8], "\n"))168+ }169+}@@ -39,6 +39,10 @@ func init() {
3939 // freeze sets the frozen rows (or columns) to n and says what happened,4040 // including when the window is too small to show them all.4141 func (m *Model) freeze(rows bool, n int) {42+ if mg, cut := m.sheet.MergeAcross(rows, n); cut {43+ m.fail("Can't freeze through the merged cells " + mg.String() + "; unmerge them first")44+ return45+ }4246 fr, fc := m.sheet.Frozen()4347 noun := "column"4448 if rows {@@ -22,6 +22,12 @@ type grid struct {
2222 selecting bool2323 ext sheet.Addr // the moving corner of the selection2424 whole wholeKind25+26+ // entered is the cell of a merge the active cell last moved or was27+ // clicked into, before it moved to the merge's top-left: stepping28+ // off the merge sideways goes on along its row, and up or down along29+ // its column, as in Sheets.30+ entered sheet.Addr2531 }2632 2733 func (g *grid) book() *sheet.Workbook { return g.sheet.Book() }@@ -43,10 +43,40 @@ func (m *Model) lineContext(row int, ln rowtext.Line) lineCtx {
4343 return lc4444 }4545 46-// bottom reports whether the line is the row's last, where its values47-// sit.46+// bottom reports whether the line is the row's last, where values sit47+// unless aligned otherwise, and the marks of a cell's box are drawn.4848 func (lc *lineCtx) bottom() bool { return lc.ln.K == lc.ln.N-1 }4949 50+// valueLine reports whether the line is the one the value of the cell51+// at a sits on: the row's last, first or middle, as its vertical52+// alignment says.53+func (m *Model) valueLine(lc *lineCtx, a sheet.Addr) bool {54+ return lc.ln.N == 1 || lc.ln.K == m.sheet.CellStyle(a).VAlign.Offset(1, lc.ln.N, false)55+}56+57+// entryPiece is the part of the entry being typed that the cell at a58+// shows on this line, if any: all of it in the active cell, on the line59+// its value sits on, or the piece of a merged active cell's columns60+// that falls in a's, on the line that shows the merge's value, so the61+// entry is as wide as the merge.62+func (m *Model) entryPiece(lc *lineCtx, a sheet.Addr) (string, bool) {63+ if m.mode != modeEnter && m.mode != modeEdit || m.away() {64+ return "", false65+ }66+ if mg, ok := lc.mergeOf(a.Col); ok && mg.From == m.cur {67+ if row, k := m.mergeText(mg); row != lc.row || k != lc.ln.K {68+ return "", false69+ }70+ x0 := m.sheet.ColsWidth(mg.From.Col, a.Col-1)71+ text := m.inCellText(m.sheet.ColsWidth(mg.From.Col, mg.To.Col))72+ return ansi.Cut(text, x0, x0+m.sheet.ColWidth(a.Col)), true73+ }74+ if a != m.cur || !m.valueLine(lc, a) {75+ return "", false76+ }77+ return m.inCellText(m.sheet.ColWidth(a.Col)), true78+}79+5080 // mergeOf returns the merge on the row holding column c.5181 func (lc *lineCtx) mergeOf(c int) (sheet.Rect, bool) {5282 for _, mg := range lc.merges {@@ -84,26 +114,59 @@ func (m *Model) layoutLine(lc *lineCtx, lo, ncols, minCol, maxCol int) []rowtext
84114 return spans85115 }86116 87-// mergeText returns the line that shows a merge's value: the middle line88-// of its middle row among those shown.117+// mergeText returns the line that shows a merge's value: among the lines118+// its shown rows take on screen, rule lines between them included, the119+// middle one (or the top or bottom one, as its top-left cell's vertical120+// alignment says), or the nearest line of text above it. Each merge's is121+// worked out once a frame.89122 func (m *Model) mergeText(mg sheet.Rect) (row, k int) {90- row = (mg.From.Row + mg.To.Row) / 291- if m.sheet.HiddenRows() > 0 && mg.To.Row-mg.From.Row < maxMergeWalk {92- var shown []int93- for r := mg.From.Row; r <= mg.To.Row; r++ {94- if !m.sheet.RowHidden(r) {95- shown = append(shown, r)96- }123+ if at, ok := m.mergeLines[mg]; ok {124+ return at[0], at[1]125+ }126+ row, k = m.mergeLine(mg)127+ if m.mergeLines == nil {128+ m.mergeLines = map[sheet.Rect][2]int{}129+ }130+ m.mergeLines[mg] = [2]int{row, k}131+ return row, k132+}133+134+func (m *Model) mergeLine(mg sheet.Rect) (row, k int) {135+ va := m.sheet.CellStyle(mg.From).VAlign136+ if mg.To.Row-mg.From.Row >= maxMergeWalk {137+ row = (mg.From.Row + mg.To.Row) / 2138+ return row, va.Offset(1, m.shape(row).Lines, true)139+ }140+ type spot struct{ row, k, at int }141+ var spots []spot142+ at := 0 // lines so far143+ for r := mg.From.Row; r <= mg.To.Row; r++ {144+ if m.sheet.RowHidden(r) {145+ continue146+ }147+ sh := m.shape(r)148+ if sh.Rule && len(spots) > 0 {149+ at++150+ }151+ for k := range sh.Lines {152+ spots = append(spots, spot{r, k, at})153+ at++97154 }98- if len(shown) > 0 {99- row = shown[(len(shown)-1)/2]155+ }156+ if len(spots) == 0 {157+ return mg.From.Row, 0158+ }159+ target, best := va.Offset(1, at, true), spots[0]160+ for _, s := range spots[1:] {161+ if s.at <= target {162+ best = s100163 }101164 }102- return row, (m.shape(row).Lines - 1) / 2165+ return best.row, best.k103166 }104167 105-// maxMergeWalk is the tallest merge whose shown rows are counted to find106-// its middle; a taller one takes the middle of all its rows.168+// maxMergeWalk is the tallest merge whose lines are counted to find its169+// middle; a taller one takes the middle of all its rows.107170 const maxMergeWalk = 10000108171 109172 // appendBand appends the lines of a band to lines.@@ -125,39 +188,50 @@ func (m *Model) appendBand(lines []string, b band) []string {
125188 return lines126189 }127190 128-// hEdge is the line drawn along the top of the cell at a: none inside a129-// merge.130-func (m *Model) hEdge(a sheet.Addr) sheet.Line {191+// hEdge is the line drawn along the top of the cell at a, with its192+// color: none inside a merge.193+func (m *Model) hEdge(a sheet.Addr) sheet.Stroke {131194 if a.Col < 0 || a.Row < 0 {132- return sheet.LineNone195+ return sheet.Stroke{}133196 }134197 if mg, ok := m.sheet.MergeAt(a); ok && a.Row > mg.From.Row {135- return sheet.LineNone198+ return sheet.Stroke{}136199 }137- return m.sheet.EdgeAbove(a)200+ return m.sheet.StrokeAbove(a)138201 }139202 140-// vEdge is the line drawn along the left of the cell at a: none inside141-// a merge.142-func (m *Model) vEdge(a sheet.Addr) sheet.Line {203+// vEdge is the line drawn along the left of the cell at a, with its204+// color: none inside a merge.205+func (m *Model) vEdge(a sheet.Addr) sheet.Stroke {143206 if a.Col < 0 || a.Row < 0 {144- return sheet.LineNone207+ return sheet.Stroke{}145208 }146209 if mg, ok := m.sheet.MergeAt(a); ok && a.Col > mg.From.Col {147- return sheet.LineNone210+ return sheet.Stroke{}211+ }212+ return m.sheet.StrokeLeft(a)213+}214+215+// borderRole is the role a border line of color c is drawn in: the216+// text's ink, or its color as a text color of the rules draws it, from217+// the terminal's palette.218+func (m *Model) borderRole(c sheet.Color) *lipgloss.Style {219+ if c == sheet.ColorNone || int(c) >= sheet.NumColors {220+ return &m.th.CellBorder148221 }149- return m.sheet.EdgeLeft(a)222+ return &m.th.RuleText[c]150223 }151224 152225 // leftEdge draws the line along the left of the cell at a over the153226 // first column of its text, in the border's role even in a highlighted154227 // cell, so the table's lines run on through the pointer and selection.155228 func (m *Model) leftEdge(a sheet.Addr, text string) string {156- e := m.vEdge(a)229+ st := m.vEdge(a)230+ e := st.Line157231 if e == sheet.LineNone {158232 return text159233 }160- glyph := m.paint(&m.th.CellBorder, theme.Junction(e, e, sheet.LineNone, sheet.LineNone))234+ glyph := m.paint(m.borderRole(st.Color), theme.Junction(e, e, sheet.LineNone, sheet.LineNone))161235 if strings.HasPrefix(text, " ") { // padding, as it mostly is162236 return glyph + text[1:]163237 }@@ -203,36 +277,107 @@ func (m *Model) ruleLine(row int) string {
203277 return b.String()204278 }205279 280+// ruleJoint is where the edges at the top-left corner of a cell meet on281+// a rule line: its character and color, and whether the double lines to282+// its left and right start thick beside it (see theme.Bridges).283+type ruleJoint struct {284+ glyph string285+ color sheet.Color286+ bridgeL, bridgeR bool287+ hidden bool // inside a merge, where no lines are drawn288+ up, down, left, top sheet.Stroke289+}290+291+// ruleJointAt works out the joint at the top-left of the cell at column292+// c of lc's row, left being the edge along the top of the column before.293+func (m *Model) ruleJointAt(lc *lineCtx, above, c int, left sheet.Stroke) ruleJoint {294+ if c >= sheet.MaxCols {295+ return ruleJoint{glyph: " "}296+ }297+ a := sheet.Addr{Col: c, Row: lc.row}298+ j := ruleJoint{up: m.vEdge(sheet.Addr{Col: c, Row: above}), down: m.vEdge(a), left: left, top: m.hEdge(a)}299+ j.glyph = theme.Junction(j.up.Line, j.down.Line, j.left.Line, j.top.Line)300+ j.bridgeL, j.bridgeR = theme.Bridges(j.up.Line, j.down.Line, j.left.Line, j.top.Line)301+ // The joint takes the color of the heaviest line it draws: a thick302+ // one where it draws double lines thick (see theme.Junction).303+ arms := [...]sheet.Stroke{j.up, j.down, j.left, j.top}304+ weight := func(l sheet.Line) int {305+ if l == sheet.LineDouble && theme.Mixed(j.up.Line, j.down.Line, j.left.Line, j.top.Line) {306+ return int(sheet.LineThin)307+ }308+ return int(l)309+ }310+ heaviest := sheet.Stroke{}311+ for _, st := range arms {312+ if weight(st.Line) > weight(heaviest.Line) {313+ heaviest = st314+ }315+ }316+ j.color = heaviest.Color317+ if mg, ok := lc.mergeOf(c); ok && lc.row > mg.From.Row && c > mg.From.Col {318+ j.hidden, j.glyph = true, " "319+ }320+ return j321+}322+206323 // ruleCols draws the rule line of ncols columns from first.207324 func (m *Model) ruleCols(b *strings.Builder, lc *lineCtx, above, first, ncols int) {208- left := sheet.LineNone // the edge of the column before, on the screen325+ j := m.ruleJointAt(lc, above, first, sheet.Stroke{})209326 for c := first; c < first+ncols; c++ {210327 a := sheet.Addr{Col: c, Row: lc.row}211328 w := m.sheet.ColWidth(c)212- style, colored := &m.th.CellBorder, false329+ h := j.top330+ style, colored := m.borderRole(h.Color), false213331 if lc.selecting && lc.sel.Contains(a) && lc.sel.Contains(sheet.Addr{Col: c, Row: above}) {214332 style, colored = &m.th.Selection, true215333 }216- mg, inMerge := lc.mergeOf(c)217- inside := inMerge && lc.row > mg.From.Row218- if inside && mg.From == lc.focus {334+ if mg, ok := lc.mergeOf(c); ok && lc.row > mg.From.Row && mg.From == lc.focus {219335 style, colored = &m.th.Pointer, true220336 }221- h := m.hEdge(a)222- joint := theme.Junction(m.vEdge(sheet.Addr{Col: c, Row: above}), m.vEdge(a), left, h)223- if inside && c > mg.From.Col {224- joint = " "225- }226- left = h227- run := strings.Repeat(theme.Junction(sheet.LineNone, sheet.LineNone, h, h), w-1)337+ next := m.ruleJointAt(lc, above, c+1, h)228338 switch {229- case !colored && joint == " " && h == sheet.LineNone:339+ case !colored && j.glyph == " " && h.Line == sheet.LineNone:230340 b.WriteString(strings.Repeat(" ", w))231- case joint == " ":232- b.WriteString(m.paint(style, joint+run))341+ case j.glyph == " ":342+ b.WriteString(m.paint(style, j.glyph+strings.Repeat(hLine(h.Line), w-1)))233343 default: // the joint in the border's role, as leftEdge draws the lines through it234- b.WriteString(m.paint(&m.th.CellBorder, joint) + m.paint(style, run))344+ b.WriteString(m.paint(m.borderRole(j.color), j.glyph))345+ m.ruleRun(b, style, colored, h.Line, w-1, j, next)346+ }347+ j = next348+ }349+}350+351+// hLine is the character of a horizontal line drawn with l.352+func hLine(l sheet.Line) string { return theme.Junction(sheet.LineNone, sheet.LineNone, l, l) }353+354+// ruleRun draws the n characters of line l along the top of a cell,355+// between joints from and to, in style: a double line meeting a thick356+// joint starts or ends with a thick stub in the joint's color, as the357+// joint's arm running on (see theme.Bridges).358+func (m *Model) ruleRun(b *strings.Builder, style *lipgloss.Style, colored bool, l sheet.Line, n int, from, to ruleJoint) {359+ if n <= 0 {360+ return361+ }362+ left, right := from.bridgeR, to.bridgeL && (n > 1 || !from.bridgeR)363+ stub := hLine(sheet.LineThick)364+ stubStyle := func(j ruleJoint) *lipgloss.Style {365+ if colored {366+ return style235367 }368+ return m.borderRole(j.color)369+ }370+ mid := n371+ if left {372+ b.WriteString(m.paint(stubStyle(from), stub))373+ mid--374+ }375+ if right {376+ mid--377+ }378+ b.WriteString(m.paint(style, strings.Repeat(hLine(l), max(mid, 0))))379+ if right {380+ b.WriteString(m.paint(stubStyle(to), stub))236381 }237382 }238383 @@ -74,7 +74,7 @@ func init() {
7474 k, title := bk.k, bk.title7575 register(&command{id: bk.id, title: title, desc: bk.desc, edits: (*Model).selection, keepsSpills: true,7676 run: func(m *Model) tea.Cmd {77- m.sheet.SetBorders(m.selection(), k, m.lineStyle())77+ m.sheet.SetBorderStroke(m.selection(), k, sheet.Stroke{Line: m.lineStyle(), Color: m.borderColor})7878 m.formatted(title)7979 return nil8080 }})@@ -82,7 +82,10 @@ var menuBar = []menuDef{
8282 }},8383 {cmd: "format.decimals_more", title: "Increase decimal places"}, {cmd: "format.decimals_less", title: "Decrease decimal places"}, sep,8484 {cmd: "format.bold", title: "Bold"}, {cmd: "format.italic", title: "Italic"}, {cmd: "format.underline", title: "Underline"}, {cmd: "format.strikethrough", title: "Strikethrough"}, sep,85- {cmd: "format.align_left", title: "Align left"}, {cmd: "format.align_center", title: "Align center"}, {cmd: "format.align_right", title: "Align right"},85+ {title: "Alignment", items: []menuItem{86+ {cmd: "format.align_left", title: "Left"}, {cmd: "format.align_center", title: "Center"}, {cmd: "format.align_right", title: "Right"}, sep,87+ {cmd: "format.valign_top", title: "Top"}, {cmd: "format.valign_middle", title: "Middle"}, {cmd: "format.valign_bottom", title: "Bottom"},88+ }},8689 {title: "Wrapping", items: []menuItem{8790 {cmd: "format.wrap_overflow"}, {cmd: "format.wrap"}, {cmd: "format.wrap_clip"},8891 }},@@ -91,7 +94,7 @@ var menuBar = []menuDef{
9194 {cmd: "format.border_top", title: "Top"}, {cmd: "format.border_bottom", title: "Bottom"},9295 {cmd: "format.border_left", title: "Left"}, {cmd: "format.border_right", title: "Right"}, sep,9396 {cmd: "format.borders_clear", title: "None"}, sep,94- {cmd: "format.border_thin"}, {cmd: "format.border_thick"}, {cmd: "format.border_double"},97+ {cmd: "format.border_thin"}, {cmd: "format.border_thick"}, {cmd: "format.border_double"}, {cmd: "format.border_color"},9598 }},9699 {title: "Merge cells", items: []menuItem{97100 {cmd: "format.merge_all"}, {cmd: "format.merge_horizontal"}, {cmd: "format.merge_vertical"}, sep,@@ -91,8 +91,13 @@ type Model struct {
9191 errMsg string // the message ERROR mode shows9292 // borderLine is the line Format > Borders draws with: layoutfmt.go.9393 borderLine sheet.Line94+ // borderColor is the color it draws in: alignfmt.go.95+ borderColor sheet.Color9496 // painted is what borders drew this frame, by role: gridlines.go.9597 painted map[paintKey]string98+ // mergeLines are the lines merges show their values on, worked out99+ // once a frame (see mergeText).100+ mergeLines map[sheet.Rect][2]int96101 97102 // Components. Each owns its state and the handling of the input it98103 // takes; Model routes messages to them and composes what they draw.@@ -330,3 +330,22 @@ func TestMonochromeLayout(t *testing.T) {
330330 t.Errorf("the pointer on a merged cell: %q %+v", cellText(merged), merged)331331 }332332 }333+334+// Border colors are colors the user chose and stay colors; without335+// color their lines are the same characters. A value aligned to the top336+// of a tall row reads there.337+func TestMonochromeBorderColorAndVAlign(t *testing.T) {338+ m := newModel()339+ m.sheet.Set(addr("A2"), "top")340+ m.sheet.SetRowHeight(1, 1, 3)341+ m.sheet.SetStyle(rect("A2"), func(st *sheet.Style) { st.VAlign = sheet.VAlignTop })342+ m.sheet.SetBorderStroke(rect("A2:B2"), sheet.BorderOuter, sheet.Stroke{Line: sheet.LineThick, Color: sheet.ColorRed})343+ y, _ := m.rowY(1)344+ x := m.hdrW()345+ if rule := cellText(monoLine(m, y-1)[x : x+2*sheet.DefaultWidth+1]); rule != "┏━━━━━━━━━━━━━━━━━━━┓" {346+ t.Errorf("the red outline: %q", rule)347+ }348+ if got := strings.TrimSpace(cellText(monoLine(m, y)[x : x+sheet.DefaultWidth])); got != "┃top" {349+ t.Errorf("the first line of row 2: %q", got)350+ }351+}@@ -254,7 +254,7 @@ func (m *Model) readyPress(h hit, mouse tea.Mouse, double bool) tea.Cmd {
254254 m.clearSelection()255255 return m.runCommand("edit")256256 default:257- m.cur = m.snap(h.addr)257+ m.entered, m.cur = h.addr, m.snap(h.addr)258258 m.clearSelection()259259 }260260 m.mouse.drag = dragCells@@ -30,6 +30,7 @@ func (m *Model) View() tea.View {
3030 defer m.timeFrame(time.Now())3131 }3232 clear(m.painted) // the theme may have changed since the last frame33+ clear(m.mergeLines)3334 lines := []string{m.menuBarLine(), m.formulaBar(), m.contextLineText(), m.headerRow()}3435 for _, b := range m.bands() {3536 lines = m.appendBand(lines, b)@@ -43,6 +43,9 @@ type Item struct {
4343 Desc string // what it does, for the status line4444 Off bool // unavailable right now4545 Pick func() tea.Cmd46+ // Swatch, when set, is drawn before the title as it is, styled: a47+ // sample of a color or a line.48+ Swatch string4649 }4750 4851 // haystack is what a search matches against.@@ -404,7 +407,11 @@ func (p *Picker) resultRows(th *theme.Theme, inner, rows int) []string {
404407 case pm.Item.Off:405408 base, dim, hl = th.Disabled, th.Disabled, th.Disabled406409 }407- row := base.Render(" ") + theme.HighlightMatches(pm.Item.Title, pm.InTitle, tw, base, hl)410+ row := base.Render(" ")411+ if pm.Item.Swatch != "" {412+ row += pm.Item.Swatch + base.Render(" ")413+ }414+ row += theme.HighlightMatches(pm.Item.Title, pm.InTitle, tw, base, hl)408415 if dw >= 8 {409416 row += base.Render(" ") + theme.HighlightMatches(pm.Item.Detail, pm.InDetail, dw, dim, hl)410417 }@@ -49,9 +49,10 @@ func Layout(s *sheet.Sheet, row, lo, ncols, minCol, maxCol int) []Span {
4949 type Line struct{ K, N int }5050 5151 // LayoutLine is Layout for one line of a row N lines tall. Values sit on52-// the row's last line, as Sheets aligns them to the bottom, and text53-// that wraps (sheet.WrapOn) fills lines of its own column up to it, cut54-// at the top when the row is too short. Clipped text (sheet.WrapClip)52+// the row's last line, as Sheets aligns them to the bottom, or its first53+// or middle one as the cell's vertical alignment says, and text that54+// wraps (sheet.WrapOn) fills lines of its own column around there, cut55+// at the bottom when the row is too short. Clipped text (sheet.WrapClip)5556 // stays in its column. Text doesn't run on across a border or into5657 // merged cells, whose contents the caller draws (see Merged).5758 func LayoutLine(s *sheet.Sheet, row, lo, ncols, minCol, maxCol int, ln Line) []Span {@@ -234,13 +235,13 @@ func (l *rowLayout) shape(c int, v sheet.Value, st sheet.Style, text string, w i
234235 }235236 if st.Wrap == sheet.WrapOn && v.Kind == sheet.Text {236237 lines := Wrap(text, w-2)237- i := l.ln.K - max(l.ln.N-len(lines), 0)238+ i := l.ln.K - st.VAlign.Offset(len(lines), l.ln.N, false)238239 if i < 0 || i >= len(lines) {239240 return "", false240241 }241242 return lines[i], true242243 }243- return text, l.ln.K == l.ln.N-1244+ return text, l.ln.K == st.VAlign.Offset(1, l.ln.N, false)244245 }245246 246247 // keepGaps keeps a gap where text that runs to the edge of its column@@ -105,13 +105,23 @@ func (g *grid) moveKey(key string) bool {
105105 return g.navigate(base, &g.ext)106106 }107107 if g.navigate(key, &g.cur) {108- g.cur = g.snap(g.cur)108+ g.entered, g.cur = g.cur, g.snap(g.cur)109109 g.clearSelection()110110 return true111111 }112112 return false113113 }114114 115+// leaveFrom is where a step off the merge m leaves from: the cell the116+// active cell entered it by, when a is the active cell and that's in m,117+// otherwise a.118+func (g *grid) leaveFrom(a *sheet.Addr, m sheet.Rect) sheet.Addr {119+ if a == &g.cur && m.Contains(g.entered) {120+ return g.entered121+ }122+ return *a123+}124+115125 // pointMoveKey handles movement in POINT mode and range prompts: arrows116126 // move the pointer and Shift+arrows stretch it into a range, as when117127 // selecting a range while typing a formula in Sheets.@@ -168,15 +178,16 @@ func (g *grid) selectAll() tea.Cmd {
168178 func (g *grid) navigate(key string, a *sheet.Addr) bool {169179 rows, cols := g.scrollRows(), g.visibleCols(g.left)170180 if m, ok := g.sheet.MergeAt(*a); ok { // steps leave a merged cell from its edge181+ from := g.leaveFrom(a, m)171182 switch key {172183 case "up":173- a.Row = m.From.Row184+ a.Row, a.Col = m.From.Row, from.Col174185 case "down":175- a.Row = m.To.Row186+ a.Row, a.Col = m.To.Row, from.Col176187 case "left", "shift+tab":177- a.Col = m.From.Col188+ a.Col, a.Row = m.From.Col, from.Row178189 case "right", "tab":179- a.Col = m.To.Col190+ a.Col, a.Row = m.To.Col, from.Row180191 }181192 }182193 switch key {@@ -8,8 +8,11 @@ import "github.com/FelineStateMachine/012/internal/sheet"
88 // Junction returns the character drawn where cell edges meet, given the99 // line of each arm: up, down, left and right (LineNone for no arm). A1010 // lone arm draws the whole line through, and no arm a space. Unicode11-// joins double lines only to single ones, so heavy arms meeting a double12-// one draw double, as does a single arm on the same axis as a double.11+// joins double lines only to single ones: a single arm on the same axis12+// as a double draws double, and where a double line meets a thick one13+// the joint is drawn thick, the heavier look, as Unicode has no joint of14+// the two (╠ between ┃ lines reads as a stray mark). The double line15+// then starts beside the joint with a thick stub (see Bridges).1316 func Junction(up, down, left, right sheet.Line) string {1417 arms := joinable([4]sheet.Line{up, down, left, right})1518 n := 0@@ -35,9 +38,44 @@ func Junction(up, down, left, right sheet.Line) string {
3538 return junctions[arms]3639 }3740 41+// Bridges reports which of a junction's horizontal arms are double lines42+// it draws thick, meeting a thick line: the line beside the joint on43+// that side starts with a thick stub (━═══), so the joint's arm runs on44+// into it rather than stopping at a gap.45+func Bridges(up, down, left, right sheet.Line) (onLeft, onRight bool) {46+ if !mixed([4]sheet.Line{up, down, left, right}) {47+ return false, false48+ }49+ return left == sheet.LineDouble, right == sheet.LineDouble50+}51+52+// Mixed reports whether a junction of these arms joins double and thick53+// lines, which it draws thick.54+func Mixed(up, down, left, right sheet.Line) bool {55+ return mixed([4]sheet.Line{up, down, left, right})56+}57+58+// mixed reports whether a junction joins double and thick lines.59+func mixed(arms [4]sheet.Line) bool {60+ double, thick := false, false61+ for _, a := range arms {62+ double = double || a == sheet.LineDouble63+ thick = thick || a == sheet.LineThick64+ }65+ return double && thick66+}67+3868 // joinable turns the arms of a junction with a double line into ones3969 // Unicode has a character for.4070 func joinable(arms [4]sheet.Line) [4]sheet.Line {71+ if mixed(arms) {72+ for i, a := range arms {73+ if a == sheet.LineDouble {74+ arms[i] = sheet.LineThick75+ }76+ }77+ return arms78+ }4179 double := false4280 for _, a := range arms {4381 double = double || a == sheet.LineDouble@@ -45,11 +83,6 @@ func joinable(arms [4]sheet.Line) [4]sheet.Line {
4583 if !double {4684 return arms4785 }48- for i, a := range arms {49- if a == sheet.LineThick {50- arms[i] = sheet.LineDouble51- }52- }5386 for _, axis := range [2][2]int{{0, 1}, {2, 3}} {5487 x, y := &arms[axis[0]], &arms[axis[1]]5588 if *x != sheet.LineNone && *y != sheet.LineNone && *x != *y {@@ -176,13 +176,13 @@ func (m *Model) cellsText(lc *lineCtx, first int, spans []rowtext.Span) string {
176176 var look sheet.Look177177 var shade theme.Shade178178 shaded := false179- if a == m.cur && (m.mode == modeEnter || m.mode == modeEdit) && !m.away() && lc.bottom() {180- sp = rowtext.Span{Text: m.inCellText(m.sheet.ColWidth(a.Col))}179+ if piece, typing := m.entryPiece(lc, a); typing { // gridlines.go180+ sp = rowtext.Span{Text: piece}181181 } else {182182 m.decorate(&sp, row) // links and error marks, see links.go183183 if rules {184184 look, shade, shaded = m.ruleSpan(a, &sp, colored, rgb) // looks.go185- if look.Checkbox && !lc.bottom() {185+ if look.Checkbox && !m.valueLine(lc, a) {186186 sp = rowtext.Span{Trail: m.sheet.ColWidth(a.Col)}187187 }188188 }@@ -240,7 +240,7 @@ func (m *Model) cellMarks(lc *lineCtx, a sheet.Addr, text string, look *sheet.Lo
240240 text = ansi.Truncate(text, w-1, "") + base.Render("▟")241241 case lc.ln.K == 0 && m.sheet.Note(a) != "":242242 text = m.noteMark(text, a, *base, colored)243- case lc.bottom() && look.Dropdown:243+ case look.Dropdown && m.valueLine(lc, a):244244 text = m.dropdownMark(text, w, *base, colored)245245 }246246 if lc.shaped {