From 5288cf051512ad29bd0411f2c3fd564bf2848322 Mon Sep 17 00:00:00 2001 From: sergey Date: Thu, 22 Oct 2026 19:22:10 +0200 Subject: [PATCH 1/5] fix(windows): improve terminal colors and update command Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- .github/workflows/ci.yml | 6 +++- README.md | 42 ++++++++++++++++++++++ src/__tests__/ui.test.ts | 18 ++++++++++ src/__tests__/update.test.ts | 20 +++++++++-- src/ui.ts | 67 ++++++++++++++++++++++++++++++------ src/update.ts | 4 +++ 6 files changed, 144 insertions(+), 13 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9f0b1e7..d1842d6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,7 +8,10 @@ on: jobs: verify: - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest] steps: - name: Checkout Code @@ -36,6 +39,7 @@ jobs: - name: Upload Coverage to Codecov uses: codecov/codecov-action@v6 + if: matrix.os == 'ubuntu-latest' with: token: ${{ secrets.CODECOV_TOKEN }} fail_ci_if_error: true diff --git a/README.md b/README.md index 8a77f40..845b16e 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,48 @@ npm install -g doro-cli Once installed, just run `doro` in your terminal! +### Windows + +If PowerShell reports that `npm` is not recognized, Node.js is either not installed or its +installation directory is not on `PATH`. + +If you installed Node.js with **nvm-windows**, activate the version you installed (use an +Administrator PowerShell if `nvm use` reports a permissions error), then close and reopen the +terminal: + +```powershell +nvm use 22.23.4 +``` + +Alternatively, install Node.js LTS (version 22 or later) using winget from an Administrator +PowerShell: + +```powershell +winget install --id OpenJS.NodeJS.LTS --exact +``` + +After either option, confirm Node.js and npm are available: + +```powershell +node --version +npm.cmd --version +``` + +Then install and launch doro-cli: + +```powershell +npm.cmd install -g doro-cli +doro.cmd +``` + +Using the `.cmd` launchers avoids PowerShell's script execution policy, which may block the +`npm.ps1` and `doro.ps1` shims. This does not require changing the system execution policy. + +The application generates audio cues using Windows PowerShell. Settings are saved under +`%LOCALAPPDATA%\doro-cli-nodejs\Config\settings.json`. +For consistent pastel colors, run it in Windows Terminal, which supports the 256-color palette +used by the Windows theme. + ## Quick Start (Build from source) ```bash diff --git a/src/__tests__/ui.test.ts b/src/__tests__/ui.test.ts index d238a90..3c7e701 100644 --- a/src/__tests__/ui.test.ts +++ b/src/__tests__/ui.test.ts @@ -74,6 +74,24 @@ describe('DoroUi', () => { expect(handlers.onAnyClick).toHaveBeenCalledTimes(1); }); + it('should request 256-color terminal support on Windows', () => { + const originalPlatform = process.platform; + Object.defineProperty(process, 'platform', { value: 'win32' }); + + try { + ui = new DoroUi(handlers as any); + expect(blessed.screen).toHaveBeenCalledWith( + expect.objectContaining({ terminal: 'xterm-256color' }) + ); + expect(vi.mocked(blessed.box).mock.calls[0][0]).toMatchObject({ + style: { bg: '#ffd7d7' } + }); + } finally { + ui?.destroy(); + Object.defineProperty(process, 'platform', { value: originalPlatform }); + } + }); + it('should render work mode state', () => { ui = new DoroUi(handlers as any); const mockScreen = vi.mocked(blessed.screen).mock.results[0].value; diff --git a/src/__tests__/update.test.ts b/src/__tests__/update.test.ts index 38f0b15..ba4e12f 100644 --- a/src/__tests__/update.test.ts +++ b/src/__tests__/update.test.ts @@ -216,8 +216,23 @@ describe('update functionality', () => { }); describe('getUpdateCommand', () => { - it('should return npm install command', () => { - expect(getUpdateCommand()).toBe('npm install -g doro-cli@latest && doro'); + it('should return a shell-compatible update command', () => { + expect(getUpdateCommand()).toBe( + process.platform === 'win32' + ? 'npm.cmd install -g doro-cli@latest; if ($?) { doro.cmd }' + : 'npm install -g doro-cli@latest && doro' + ); + }); + + it('should return a PowerShell-compatible command on Windows', () => { + const originalPlatform = process.platform; + Object.defineProperty(process, 'platform', { value: 'win32' }); + + try { + expect(getUpdateCommand()).toBe('npm.cmd install -g doro-cli@latest; if ($?) { doro.cmd }'); + } finally { + Object.defineProperty(process, 'platform', { value: originalPlatform }); + } }); }); @@ -440,6 +455,7 @@ describe('update functionality', () => { const result = await resultPromise; expect(result.success).toBe(true); + expect(result.command).toBe('npm.cmd install -g doro-cli@latest; if ($?) { doro.cmd }'); expect(mockSpawnLocal).toHaveBeenCalledWith('clip', []); Object.defineProperty(process, 'platform', { value: originalPlatform }); diff --git a/src/ui.ts b/src/ui.ts index c02db5a..d61437d 100644 --- a/src/ui.ts +++ b/src/ui.ts @@ -1,6 +1,7 @@ import blessed from 'blessed'; import { MODE_LABELS, MODE_LABELS_SHORT, type TimerMode, type TimerStatus } from './constants'; import { enableMouse, disableMouse } from './mouse'; +import { getUpdateCommand } from './update'; import type { UpdateCheckResult, UpdatePromptState } from './update'; type UiRenderState = { @@ -236,19 +237,28 @@ function getUpdatePromptText( } if (updatePromptState === 'copyFallback') { - const candidates = [ - 'Run this command after doro exits: npm install -g doro-cli@latest && doro', - 'Run after exit: npm install -g doro-cli@latest && doro', - 'Run: npm install -g doro-cli@latest && doro', - 'Run: npm i -g doro-cli@latest && doro', - 'npm i -g doro-cli@latest && doro' - ]; + const updateCommand = getUpdateCommand(); + const candidates = + process.platform === 'win32' + ? [ + `Run this command after doro exits: ${updateCommand}`, + `Run after exit: ${updateCommand}`, + `Run: ${updateCommand}`, + updateCommand + ] + : [ + 'Run this command after doro exits: npm install -g doro-cli@latest && doro', + 'Run after exit: npm install -g doro-cli@latest && doro', + 'Run: npm install -g doro-cli@latest && doro', + 'Run: npm i -g doro-cli@latest && doro', + 'npm i -g doro-cli@latest && doro' + ]; for (const c of candidates) { if (c.length <= cols) { return c; } } - return 'npm i -g doro-cli@latest && doro'; + return updateCommand; } if (updatePromptState === 'skipped') { @@ -454,6 +464,41 @@ const PALETTES: Record = { } }; +function createWindowsModeStyle(base: string, fill: string): ModeStyle { + const text = '#262626'; + return { + base, + fill, + text, + bannerBg: fill, + bannerFg: text, + statusBg: base, + statusFg: text, + promptBg: fill, + promptFg: text + }; +} + +const WINDOWS_PAUSED_STYLE = createWindowsModeStyle('#e4e4e4', '#bcbcbc'); +const WINDOWS_PALETTES: Record = { + modern: { + modes: { + work: createWindowsModeStyle('#ffd7d7', '#ffafaf'), + short: createWindowsModeStyle('#d7ffd7', '#afd7af'), + long: createWindowsModeStyle('#d7d7ff', '#afafd7') + }, + pause: WINDOWS_PAUSED_STYLE + }, + calm: { + modes: { + work: createWindowsModeStyle('#ffd7ff', '#ffafff'), + short: createWindowsModeStyle('#d7ffff', '#afd7d7'), + long: createWindowsModeStyle('#afd7ff', '#afafd7') + }, + pause: WINDOWS_PAUSED_STYLE + } +}; + function clamp(value: number, min: number, max: number): number { return Math.max(min, Math.min(max, value)); } @@ -506,9 +551,11 @@ export class DoroUi { public constructor(handlers: UiHandlers, initialColorScheme: ColorScheme = 'modern') { this.colorScheme = initialColorScheme; - const initialStyle = PALETTES[this.colorScheme].modes.work; + const palettes = process.platform === 'win32' ? WINDOWS_PALETTES : PALETTES; + const initialStyle = palettes[this.colorScheme].modes.work; this.screen = blessed.screen({ + terminal: process.platform === 'win32' ? 'xterm-256color' : undefined, smartCSR: false, fastCSR: false, fullUnicode: true, @@ -644,7 +691,7 @@ export class DoroUi { const cols = this.screen.cols; const rows = this.screen.rows; const isPaused = state.status === 'paused'; - const palette = PALETTES[this.colorScheme]; + const palette = (process.platform === 'win32' ? WINDOWS_PALETTES : PALETTES)[this.colorScheme]; const isTransition = state.hasPrompt; const hasUpdatePrompt = state.updatePromptState !== 'none'; const isEditingDuration = state.editDurationState === 'editing'; diff --git a/src/update.ts b/src/update.ts index 0b56385..d8acb7c 100644 --- a/src/update.ts +++ b/src/update.ts @@ -141,6 +141,10 @@ export async function checkForUpdates(): Promise { * Gets the update command for the current platform */ export function getUpdateCommand(): string { + if (process.platform === 'win32') { + return 'npm.cmd install -g doro-cli@latest; if ($?) { doro.cmd }'; + } + return 'npm install -g doro-cli@latest && doro'; } From 29472b5d60e81f1ad1a3a38e27473a5b345a33ee Mon Sep 17 00:00:00 2001 From: sergey Date: Thu, 22 Oct 2026 19:37:02 +0200 Subject: [PATCH 2/5] fix(windows): use ANSI yellow and magenta work palettes Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- README.md | 35 +---------------------------------- src/__tests__/ui.test.ts | 31 ++++++++++++++++++++++++++----- src/ui.ts | 34 ++++++++++++++++------------------ 3 files changed, 43 insertions(+), 57 deletions(-) diff --git a/README.md b/README.md index 845b16e..c06afe8 100644 --- a/README.md +++ b/README.md @@ -36,45 +36,12 @@ Once installed, just run `doro` in your terminal! ### Windows -If PowerShell reports that `npm` is not recognized, Node.js is either not installed or its -installation directory is not on `PATH`. - -If you installed Node.js with **nvm-windows**, activate the version you installed (use an -Administrator PowerShell if `nvm use` reports a permissions error), then close and reopen the -terminal: - -```powershell -nvm use 22.23.4 -``` - -Alternatively, install Node.js LTS (version 22 or later) using winget from an Administrator -PowerShell: - -```powershell -winget install --id OpenJS.NodeJS.LTS --exact -``` - -After either option, confirm Node.js and npm are available: - -```powershell -node --version -npm.cmd --version -``` - -Then install and launch doro-cli: - ```powershell npm.cmd install -g doro-cli doro.cmd ``` -Using the `.cmd` launchers avoids PowerShell's script execution policy, which may block the -`npm.ps1` and `doro.ps1` shims. This does not require changing the system execution policy. - -The application generates audio cues using Windows PowerShell. Settings are saved under -`%LOCALAPPDATA%\doro-cli-nodejs\Config\settings.json`. -For consistent pastel colors, run it in Windows Terminal, which supports the 256-color palette -used by the Windows theme. +Use the `.cmd` launchers in PowerShell to avoid script execution policy restrictions. ## Quick Start (Build from source) diff --git a/src/__tests__/ui.test.ts b/src/__tests__/ui.test.ts index 3c7e701..459214a 100644 --- a/src/__tests__/ui.test.ts +++ b/src/__tests__/ui.test.ts @@ -74,17 +74,38 @@ describe('DoroUi', () => { expect(handlers.onAnyClick).toHaveBeenCalledTimes(1); }); - it('should request 256-color terminal support on Windows', () => { + it('should use an ANSI-safe magenta palette on Windows', () => { const originalPlatform = process.platform; Object.defineProperty(process, 'platform', { value: 'win32' }); try { ui = new DoroUi(handlers as any); - expect(blessed.screen).toHaveBeenCalledWith( - expect.objectContaining({ terminal: 'xterm-256color' }) - ); expect(vi.mocked(blessed.box).mock.calls[0][0]).toMatchObject({ - style: { bg: '#ffd7d7' } + style: { bg: 'magenta' } + }); + expect(vi.mocked(blessed.box).mock.calls[1][0]).toMatchObject({ + style: { bg: 'brightmagenta' } + }); + expect(vi.mocked(blessed.box).mock.calls[2][0]).toMatchObject({ + style: { bg: 'default', fg: 'default' } + }); + } finally { + ui?.destroy(); + Object.defineProperty(process, 'platform', { value: originalPlatform }); + } + }); + + it('should use an ANSI-safe yellow palette for calm mode on Windows', () => { + const originalPlatform = process.platform; + Object.defineProperty(process, 'platform', { value: 'win32' }); + + try { + ui = new DoroUi(handlers as any, 'calm'); + expect(vi.mocked(blessed.box).mock.calls[0][0]).toMatchObject({ + style: { bg: 'yellow' } + }); + expect(vi.mocked(blessed.box).mock.calls[1][0]).toMatchObject({ + style: { bg: 'brightyellow' } }); } finally { ui?.destroy(); diff --git a/src/ui.ts b/src/ui.ts index d61437d..3f62617 100644 --- a/src/ui.ts +++ b/src/ui.ts @@ -465,37 +465,36 @@ const PALETTES: Record = { }; function createWindowsModeStyle(base: string, fill: string): ModeStyle { - const text = '#262626'; return { base, fill, - text, - bannerBg: fill, - bannerFg: text, - statusBg: base, - statusFg: text, - promptBg: fill, - promptFg: text + text: 'default', + bannerBg: 'default', + bannerFg: 'default', + statusBg: 'default', + statusFg: 'default', + promptBg: 'default', + promptFg: 'default' }; } -const WINDOWS_PAUSED_STYLE = createWindowsModeStyle('#e4e4e4', '#bcbcbc'); +const WINDOWS_MODE_STYLE = createWindowsModeStyle('default', 'brightblack'); const WINDOWS_PALETTES: Record = { modern: { modes: { - work: createWindowsModeStyle('#ffd7d7', '#ffafaf'), - short: createWindowsModeStyle('#d7ffd7', '#afd7af'), - long: createWindowsModeStyle('#d7d7ff', '#afafd7') + work: createWindowsModeStyle('magenta', 'brightmagenta'), + short: WINDOWS_MODE_STYLE, + long: WINDOWS_MODE_STYLE }, - pause: WINDOWS_PAUSED_STYLE + pause: WINDOWS_MODE_STYLE }, calm: { modes: { - work: createWindowsModeStyle('#ffd7ff', '#ffafff'), - short: createWindowsModeStyle('#d7ffff', '#afd7d7'), - long: createWindowsModeStyle('#afd7ff', '#afafd7') + work: createWindowsModeStyle('yellow', 'brightyellow'), + short: WINDOWS_MODE_STYLE, + long: WINDOWS_MODE_STYLE }, - pause: WINDOWS_PAUSED_STYLE + pause: WINDOWS_MODE_STYLE } }; @@ -555,7 +554,6 @@ export class DoroUi { const initialStyle = palettes[this.colorScheme].modes.work; this.screen = blessed.screen({ - terminal: process.platform === 'win32' ? 'xterm-256color' : undefined, smartCSR: false, fastCSR: false, fullUnicode: true, From 60d983d32d01e052da6d6547bb513f84e149dede Mon Sep 17 00:00:00 2001 From: sergey Date: Thu, 22 Oct 2026 19:48:37 +0200 Subject: [PATCH 3/5] fix(windows): distinguish break colors by theme Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- src/__tests__/ui.test.ts | 66 +++++++++++++++++++++++++++++++++++++++- src/ui.ts | 25 +++++++++------ 2 files changed, 81 insertions(+), 10 deletions(-) diff --git a/src/__tests__/ui.test.ts b/src/__tests__/ui.test.ts index 459214a..1e09124 100644 --- a/src/__tests__/ui.test.ts +++ b/src/__tests__/ui.test.ts @@ -21,7 +21,7 @@ vi.mock('blessed', () => { return { default: { screen: vi.fn(() => mockScreen), - box: vi.fn(() => ({ ...mockBox })) + box: vi.fn((options) => ({ ...mockBox, style: { ...options.style } })) } }; }); @@ -113,6 +113,70 @@ describe('DoroUi', () => { } }); + it('should use distinct ANSI colors for Windows short and long breaks', () => { + const originalPlatform = process.platform; + Object.defineProperty(process, 'platform', { value: 'win32' }); + + try { + ui = new DoroUi(handlers as any); + const root = vi.mocked(blessed.box).mock.results[0].value; + const progressFill = vi.mocked(blessed.box).mock.results[1].value; + const banner = vi.mocked(blessed.box).mock.results[2].value; + const baseState = { + status: 'running' as const, + remainingSeconds: 600, + durationSeconds: 1500, + isLocked: false, + volumeMode: 'normal' as const, + hasPrompt: false, + promptCountdownSeconds: 0, + promptTotalSeconds: 0, + promptNextMode: null, + updatePromptState: 'none' as const, + updateCheckResult: null, + editDurationState: 'none' as const, + editDurationValue: null, + editDurationBlink: false + }; + + ui.render({ ...baseState, mode: 'short' }); + expect(root.style.bg).toBe('cyan'); + expect(progressFill.style.bg).toBe('brightcyan'); + expect(banner.setContent).toHaveBeenCalledWith(expect.stringContaining('{bright-cyan-bg}')); + + ui.render({ ...baseState, mode: 'long' }); + expect(root.style.bg).toBe('blue'); + expect(progressFill.style.bg).toBe('brightblue'); + expect(banner.setContent).toHaveBeenLastCalledWith( + expect.stringContaining('{bright-blue-bg}') + ); + + ui.destroy(); + const previousBoxCount = vi.mocked(blessed.box).mock.results.length; + ui = new DoroUi(handlers as any, 'calm'); + const calmBoxes = vi + .mocked(blessed.box) + .mock.results.slice(previousBoxCount, previousBoxCount + 3); + const calmRoot = calmBoxes[0].value; + const calmProgressFill = calmBoxes[1].value; + const calmBanner = calmBoxes[2].value; + + ui.render({ ...baseState, mode: 'short' }); + expect(calmRoot.style.bg).toBe('green'); + expect(calmProgressFill.style.bg).toBe('brightgreen'); + + ui.render({ ...baseState, mode: 'long' }); + expect(calmRoot.style.bg).toBe('cyan'); + expect(calmProgressFill.style.bg).toBe('brightcyan'); + expect(calmBanner.setContent).toHaveBeenLastCalledWith( + expect.stringContaining('{bright-cyan-bg}') + ); + } finally { + ui?.destroy(); + Object.defineProperty(process, 'platform', { value: originalPlatform }); + } + }); + it('should render work mode state', () => { ui = new DoroUi(handlers as any); const mockScreen = vi.mocked(blessed.screen).mock.results[0].value; diff --git a/src/ui.ts b/src/ui.ts index 3f62617..533ae4e 100644 --- a/src/ui.ts +++ b/src/ui.ts @@ -80,6 +80,10 @@ export function splitAtVisible(s: string, n: number): [string, string] { return [s, '']; } +function colorTagName(color: string): string { + return color.replace(/^(bright|light)(?=[a-z])/, '$1-'); +} + // Wide format: [key, remaining letters] pairs — key rendered in bold, rest appended. // Lock uses uppercase 'L' and Update uses uppercase 'U' to distinguish them from 'l'/'u'. const HELP_KEYS_WIDE: [string, string][] = [ @@ -359,12 +363,15 @@ function buildProgressRow( const bO = bold ? '{bold}' : ''; const bC = bold ? '{/bold}' : ''; + const fillTag = colorTagName(fillBg); + const baseTag = colorTagName(baseBg); + const fgTag = colorTagName(fg); let content = ''; if (p1.length > 0) { - content += `{${fillBg}-bg}{${fg}-fg}${bO}${p1}${bC}`; + content += `{${fillTag}-bg}{${fgTag}-fg}${bO}${p1}${bC}`; } if (p2.length > 0) { - content += `{${baseBg}-bg}{${fg}-fg}${bO}${p2}${bC}`; + content += `{${baseTag}-bg}{${fgTag}-fg}${bO}${p2}${bC}`; } return content; } @@ -478,23 +485,23 @@ function createWindowsModeStyle(base: string, fill: string): ModeStyle { }; } -const WINDOWS_MODE_STYLE = createWindowsModeStyle('default', 'brightblack'); +const WINDOWS_PAUSED_STYLE = createWindowsModeStyle('default', 'brightblack'); const WINDOWS_PALETTES: Record = { modern: { modes: { work: createWindowsModeStyle('magenta', 'brightmagenta'), - short: WINDOWS_MODE_STYLE, - long: WINDOWS_MODE_STYLE + short: createWindowsModeStyle('cyan', 'brightcyan'), + long: createWindowsModeStyle('blue', 'brightblue') }, - pause: WINDOWS_MODE_STYLE + pause: WINDOWS_PAUSED_STYLE }, calm: { modes: { work: createWindowsModeStyle('yellow', 'brightyellow'), - short: WINDOWS_MODE_STYLE, - long: WINDOWS_MODE_STYLE + short: createWindowsModeStyle('green', 'brightgreen'), + long: createWindowsModeStyle('cyan', 'brightcyan') }, - pause: WINDOWS_MODE_STYLE + pause: WINDOWS_PAUSED_STYLE } }; From d4636f2e0b2861a4b080dba0ee1ac3524319c27d Mon Sep 17 00:00:00 2001 From: sergey Date: Thu, 22 Oct 2026 19:56:16 +0200 Subject: [PATCH 4/5] fix: add permissions --- .github/workflows/ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d1842d6..5fa5749 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,6 +6,9 @@ on: pull_request: branches: [main] +permissions: + contents: read + jobs: verify: runs-on: ${{ matrix.os }} From cdc385326a3858afbaed2e78901697d3779d4956 Mon Sep 17 00:00:00 2001 From: dnim <1839962+dnim@users.noreply.github.com> Date: Thu, 22 Oct 2026 18:07:19 +0000 Subject: [PATCH 5/5] chore(vis-reg): update baseline snapshots [skip ci] --- ...ny-update-copy-fallback-chromium-linux.png | Bin 5016 -> 5195 bytes ...ll-update-copy-fallback-chromium-linux.png | Bin 7122 -> 6954 bytes ...ny-update-copy-fallback-chromium-linux.png | Bin 5016 -> 5195 bytes ...ll-update-copy-fallback-chromium-linux.png | Bin 7122 -> 6954 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/snapshots/visual.spec.mts-snapshots/calm-tiny-update-copy-fallback-chromium-linux.png b/tests/snapshots/visual.spec.mts-snapshots/calm-tiny-update-copy-fallback-chromium-linux.png index b389b261a276a74ca2905b14f32ce761239ddc9a..7cafa718d2fa100700628c5bc163f1c5221aa71e 100644 GIT binary patch literal 5195 zcmdUzWl$7s*T>5`BXkd9lrQ92iaB?Jj2bcv;KAdxA&YYQR=DOy8&H4Z0o&&WgNFR~{000UdZFS?jdU6*jB=~o^ zhJR!g0H6lws6PYw7wkaYT4fJecv&9XoQ<7AuF?LnrSP{ z@Hh7sy5i=u-<4Q3jUrBfT-tsmmezwI7U#%;mRd=c>&^bJp!j?jPv zPwk$U4W*p>C$D_FymR{7CH%=G!Ts3KoY!BZni z9b+CHE`SBlBFj#QKd z@kJ*+(yh;-`HQU5pliOPEDRK>Ce>Et91q@zhUZ6z%V+{>3OGs9zJT*y^Y6$E1}Q2R zp7kHGS(_iKHlL_TN=g@{%`5KXF7VNIIhxAZPYej~I&=YlcX5RLzwTp9Ou!lg+3dXh zF#7IxIV^W3X}oa`rsNTbK!{`(395^=m$Swg>lZ*WR8i>`%jcpxQt0<|*{aWYsR0$T zt`!hDCp}{kQ{76o##VNfwjLy7f(Z%0OgKsvD{1huBZ=!gi-&r^OR>sv&5M~3AjF~o z8@9`pn^)tESn&_%B!(07JXDgD(W+K_`(z~ieP$P(!EM}JCw~9#!8&=p0yRL9i&F&e z5{pX#0!()lJx<%rmJcdotF+m+u|BdzP*1@ zV&-*@{2wZ|hZC=y)M}C1_NvT>Wwz3;`NeyC1t67a`IDF$@7?#)>xO>h*?ta`iV8mb zfv{Iy`pCn6zMD>4>%T+ttMiUtyY0bq2jq!THj?aT{gq^wZ`CfRlOe&>Xur;O>{dfp zE|$akHaR8W%&5)((R21^U|U<$_qhRs%rcsL2+pYxhU*ELwGNX3m5O}b+6xtBQ`crr z5W`xednhaA1n}mjG45Ht|7$hpWxjIEBWdo{s%1MjT5?Cmh{kPwyVhgbiA#;aAlrqA zfW^k@KbH3Y3{12uS&vx+v|CJ-`32RK)jm+g86R3`L5ye$o13=E=&(J)#%Wowy4WYV zy;h51=f(~P&`-fY!F%o!jffNten~SFJD=F=S5L)hYF>tut`cynrO!_QzoT~rbo8Ag zUs2o!Ze@KFjiiDqTacOLWQiraSuUllPgLip-I}bg{Ct%AfJQJlh{&u+!&S<0ooF`I z0wk&}8|+<6eoH?5g?N<#*j(+kCXv*Lu6Bx4A==zcs6lwR`@@^V)~ ztV+KMx#Ztd;4m4?|1QFd`9c`OOH%_9j-6Y3@8eu%IIYri79WR7WH+8_dBXh1EyJ+Q z>&^je02J*X z#ucNmxTUtkUDQ~bupi`&>`0#5v(8K#pi$C6;Yq1X{QPE!vs&lEEAWc2jl-ohJ$F#) zYX#r>s~A@*P;?P_^vz!fICbu?OQXQLKXDsH)@>s;$^nHVsXa16E|kS#Kb=HZbnM$4 zW~%>GG){MI6&N*hn=9}ndE~l5<-k=%>%}%&E?D3DCIVJ-c?rsky~9a1HQ&@rdOseH z7sl<{Cb~IuYt2`%v7&=ogmarm5+>POua6}L7=Y(jnG0{d0!RKys@GRy=1%_|&f@%} zNzWuOSZ#e>d2-eJdJ?N|f!sef|N6meRDofz?P{Phd;aH2)vw|CG9hlebk*DWCLw{= z)rIbaeTPZSfgdxv#Hv#3GBBpF&2wmJtN{e8oa}v{51O)lRnjA#zEcFBylV0@7Hdm~ zfJ>rn$gDTQd@T9L>!#FTXVi-!>BAg9;t1M4qZ~55<;S4Dt?tJlE2pu2@uUI|c)ssq zO)rtYUbpp(Z^=1di@ek*T?czk<)se@_3*T;$dh&DM;4`A?QB?y*2f*+8yW}U+v{s2 z)0A9f81 zt-C5C4p&hU?(vUi^^KY$2G3VF)6|n&Sy(|wi)JEBP%TH$9*%%32gj?H#UHRA^D=c-o5Dseak^U)5V*P#@7EL!to7y#;pw-FGkcw= z*nV7`tuJBqJHjm)ea*F;ZlHbveJR()da|MN3mXX?O1NIC2ifjswiPN#ZNk|A%T;sfce zCCgQXK$$txO2mham5vGmg_jfgLpncH)o&C{!Tsj^0UJir7s3pBzT#Yc9|@~ZJeFGv z_1H#>i`8dOw0vdjly7hM5DHV9jlcVTD?hT{SbDAxrx>z~YzQ{eQ`v7lVpo~(OQOnn z+~KZms_if8N4Ci$aHb1mI|!XJu77dg>&M1oM<#n{3v6J>CQ`LlN@@%1e2sVTo{Z%P?6ILA&8Hm`g1##ynd%(Jyf>wiu$ zn<|9N!pbF2O>4~dVTt88LNT4@tIfM}szGZPk>NM?bsVh*Tsm&Q!rmD8dF&KIwT=({ zHgCGxZp?$vLrz-hmbaJvyq7M``IfyrYRXT?>|wHz2Kxp4n)7mUOs9zAkX2+4cU#hugU)p087oJgxOg9J69t z?6A;-e*Y)1?)-FXn~WC&V}fDvSd(JjSi^wx&=7G6|>8Z(LXN zrk9scudPI^z?S94e*3n@5F$jH;SzP8u+F*eX3LXBvW}*tn#U1;)59Ce7>K16vlNZS73mp*z?LmBHK1kp1q$(GPP7 z&abBmZfuxf;-7gGf5o?F1?rPI$PFrIvm0dhKr+^#5rVaetlsQP-spj>ua5H$qey1g zI{sW{4$URXkSca}!QXwKrpKFPFm$j47u#nEScBmbZpCIk+;UfDtmeI)>g#JYaBFp7a=usLGti)PhI?FRp^JvUHwl5ZOhZqB(0ZVr-H{iVc*}9zA>`` zkLo(6v4oDwVW&cs=A4r#|Iv-t<^AzA7D#FQJ->nrjPtg2?yH)GIVTWa{;9h7CMh}9 zz>T`74CVS47Ut zBQl(JPF+Pz>!_B^tSLKRRU+@Ga#t@jQo=1quM9D7seu9TnU|8J<)VZk?r^KD zY_?@9DdnD|mSJP7j01)TxCHL&;^T#2d9$xI>@zYC;y4|15KZ&060(573~^W~q<~eI z7P|8)VZ+n$*(mKRwJP|GHx4JiH4!Y*m&kf-AUE~=Yu+>W+u6$|wrD9H8(AIV)77qt z(1nwzem{odgiX~^!B6nDX|@hWZF)cwO`-XGDGffEGP zP-cj0w*O+vt3Bg@0g~P!xrUN2QTzLcC+y`)+$HT(PF$J5Li&u#%_Ic_8Eke72iX{w z&1{Op&^gkh@HHB$aK8Bjqv~YWH%_&boHX+`wbwgaY=W`6o{q1zgOQV%9iM5K0w4tV*S#l* zdtj;|JFShic~V^%vJe>>fG{x`XM+M#vLocFB|e(rKYINCx`C7|$3B@D@0bTh+$u}wVRW<}PY)-+gNS~&zj9L$4%c}31spr~Uhk7`s-?*TW08R& zq@s@T9dePiuosr_S`ket1>3dXk2nY<_`fC!!QkPT#zT#9;&YuX1#2Go(*PC$=W^=q&Jj}1=jvl#^ag1pQ{i=BA`kp|o>6-WK!GoSES%5cY*gCZndBjiD*;pn zC}AO{Qb_i%c09X_$P%2+v#doA<~~=Afo1&g+2*eDycFw8)mZzBr!|EvwO-N0R1)|72*vD*j!bmWL0ptWV0|*<%#68aYQYQ^N9chKC@Wx-aOCEU|)0 z-kZ3THUF-Cn29SLByvztLBD7GbLT3%j?hX(eE|i9bo2(PKjo-|#q?bf;2faWX9VJl w0$%eHPJi(h4*HGNNHe*Zch>>vXaLo#RP7@E2ZlTgE`&YXvH=9@X+m+;(Bi-eGY5C8y>=xD2({EO&+mQH~E&)4(*+yVf| z0Xpg`X2Bo-7J|K~EDDB=K(B1t$8FZUJ62kT9>d=j20{SS6#bc4et zI^f-4^LrD_#5-GHe_6v#k#t~<%zZ}2VVOepjqFpQ!GyB}#K@ zAY>I$egG_T-?}evkLAwJYGE^LU9+_wVOTN~h0s~y0>-hbj|g*feHS%lGU9={K&gDk z)l9NCr=5CZ)KpxB+M2y)IO7E4;vk7=?>3H|uXKxRBl(aO_|Sz-CeRm4PH69&K0ClN z(9*I!>qAXrc?gayAJ|WwXDouRLjqr=n3=mHhL?{(t~G^62qP zJ%FPX=eUhILBhlGv%o=}7^rwpNZby&?p$h5vmlMsK$pVw-yd5K!6COa7M3}a_2=-! z;x{HMEKcO2S_`SSeoinEJ*T^8C$7c6P|kEi4$0;86%1XgNSo6zy4yTF>P+LgJ@|Of zMt*QVy8GrPWvN1S8z%K9dWNCKKn-FmqgJ{l^!W9i)?{6{3$Z-o{Uk>Ho!;I3lKzc> zs{>^0ayt&|%^bSUE{|bTbVo{4@~%YE$I;2ekBZSV+L4|grI*_9o8%$@wuNcGtVKro zp2Z0Neo^Ssf8Nt>w)9-uZsI2bLUt+sEwUowMYY?wAaIKI@YlW9Sa-gL`izM`1pa8{ zrP8rcal8P_$>_qD&J)SLrafuZ`-Cx)#gHenIGJxF{qTU1$XI>3<%%b=u%+UW};eGQXBA@b!u2MUoOh&!hV@Ov<5Ij)o zXWF;@fo$+y6L#Ew_RS)yyB}Y7wU|x;ljP>>3=OBUq%f~;odkOa-TOlHDO=KH;jJ8J zwOJQqpQT?u?U?^U_hw>GOLyP{6LlCC9+nG1J_1r~Z`B^rcb3RZH~<|&Vo|1y!~Tk} zaY1-V>7%g*B~dfzo;%0(`gdaCh*bmwl7ewG*mJ+iYueLiGBx+{L%wHXE zGcOQnVsuT%np^oSZ~{N-WtB|rUgFI5+#8SO_?s>sLao9Xm~=m^lIFl(q<1!65v z!eO>%XhHLe=OqjAvJwc6GC#IBs*4zGp2fHoqF#15I)=kByP1QoaAdy=RQJ;lzjv6Q zu|0#VWULV}-GYI+3n8!ZRC5O9-k`%zXm?HzoAjD;|ym@?&*NlPVzl3p&+}+n~NO1PNvOy+)8OE4Q6|M)}!FnHH?9;j(zG0`|+UIL`w$0h=;^ zILS-rL#3CxRth6tMOTpUJbmLYy=Qt2SA^hkg$tE}pB^UG{c#6#>~s%kr%A2uh`d0T z@_WrQ$4j;_5R1+;XAF19w}fu4S6y7{$C*sCrVpA2Ix4MPy$(}LH##>Ty>xR*f=4n6 z(sc{Q3LCDyf1aRp(Km2i(kMSGbBE~IBa~k*@wI7c8Pc=LA}ywI>cv%D+E*YzO|;G} z>$xV09m)6afXAIbr7U z*E^gryT*BVGp5iD<`cS@T=frsZM`0-)!b9F*@!9Ld*NWDWGDV%_=8FLdYs68HLvlQ zw1N|-n=RQlnt?IgIiM2PrC*4KXy)ivEU}MF2+;}6Fo&A$DQ{{CTg_Ebq4bnd3U~%m z^D+&e9Xw~U?EfD5cL2~YS&_-31ihB@6tK(7r>B9r^e@<=)!uoX(=d||nWi~6Sq1Q# zQicUIK7l&sQGh}4m!yl`4W>hsJ7G%x_Ze;GGGe;}awGv%54qGM2rFpP#YAv^Ta>IT zx6jn=jAggssHoYp*|vZenILxyamrv#Dc4{vXXmD1z&Yu^^FD~=`B$76Z`dIF`EA7o zVCuzMU&Y@$$~USoS{M0Nq)01HpXkUP#2_aTAhZ?-we@#<)>p8T6E~nFjlU#+zPQnz z@7NT$ndgTS{z0wv$aG6*T+cGR@=+*~@JHvbiUvJu~l(iu#$EeObAdWHX4uZCJs zQQy?>Eaa>GPOuu#oQ9soPC1=>T02hExstPZrF(r{EU>vUa$GF%7fra~-Jlr#mLym@ zf5&U{qy|w%uc(%pk&lGexx+l*oe~E}%!EFFOc#Y|f3eDRn3-p|2DKxCWmBYKW3e|x zAo{Sq;#A8Sn!B4$YeH$+TF}lP!J*`YK_SyuFXvtQgpSb4?qy2FHG~C23X-4zzif7M zzM^UC=UJTG%i|t{lZNLFyyYQxMBejtq0zh&-)W`vM(@I6r_H6Ni+opsUF}yr+WxAt zOcxoPTCH(6+k^>&jvYc`gcT)+Wz;(`p41y?C=2s2pwGO_0e-oW)897X%#^czCH2MFnAQp%zCKmHZ}X zeAFWo<_#i47jVGrRDOZ1n&%Y*kdgPq!WZLiA@FTXATMxC4r`CB^)5I)AtKB~pg6G3gOk7YsAL%U1wIV^6Mw12f z1!#X~4dLoz{t2d!l*>AholDG=mu=im85w71+PSb%9LyUz4&;tl#Ap+bwF&+XjNey6 zb@^c}C{U~@#?Ny^Stg4&cD#`~y0zv=ZQF|;@gJ|dj-+3)^FO!s8xCzax~XE92Wjhy zfq%A`-pD3nEud_5Jw_YkzoIQx_e(0t%Dz&Udi4Q(l}OVzS^m^GwG~KS2$33izi#4u zz~YrFiUMN`@UY!519Gtb-;b&s(@>p2WMM~`yxGAOi&&W+u40Fp%Ca3cKw>td1)s1T zoa4+z50Uc8-sqzkS%+IDDs(CiX-Hy}g(!cGkqrphn$g!y@?QKq^=;4|*ux@5*1Q z?Hv)iKa4ssf6S+hF z6iQ$2**@$<4~fNNn<8B zd#q>vsPUC%scThenr!|>FgVD0mL;YuPO541ZisEt>&b|94IRC>d61F!7=4euSo`8R zXG=9H7nsaB%#zgxPGS+GR9Ka_%v@tvKWvSaxEH(_p&pV+`b~4KXfc*F_JH!yUBY>& z3HP*}{J}`MTM;CX$6UnEh-CJl099LKymZ`@mpoxe$^kdED;Hy?L^&Dr!tb9ep2(c7 z+J4(qE?9E3gaYTL`8sLbfY$SE+;c7VMqBj3oD(k;XFIH%hOUoa?wK2q1(X}jOMH}) z2@Pr!dSJ<{eKz|uA`T|vq=nt{W=@Jlb6JF^YN;|OW=0`{Pr~&l zNzem4@kCMb+6)?n;|@u3YLi%sz$KCTpbeQasCYpzZum(cbyKv7w+k&U_B*@Vfct&n zT+VnHA7|S}q0q~&i`}<0{$7!wr~1LG#~9`fm7$a0V9(1L;ve~C$6g#sdRxIyXVLnbYDQBj4QB3+V zvXgGYO0VYL7Km4T@p{y_Jr^fTwu)+3JV7Xe+SWS)b8Jj5rE(#fJ2MmJz<+O`p4S}S zdm>uXh9(C^2EGt)YCfD!CSfMSzrZ-8;9RfYH!0O5ZuP4Sf2Kx_$6m(9J<>BqE0o1w z9AX~t_9`UUlk@fKkDhP)WRaPx7SQhrEH-r{0{}QG|7ihnVi$B4>Bzm2aqx!;=VTnk%m*+b)o8dJax zL}d`ZRADmn)MF2)xTiX1mBV6^&|luOdQ*EC$!mMAFZmf$h=Deo{aCRlkA~aQ%t=bT z*1Cf^QvGvVg?thU{nm?iOmcB_Ua!5aXuk8vhn#Nodx{?EdDvvd*c`Xd|9!4rT%kD~ zXP?O4zv~+@k2H2RUCpyvP+;B<#?A;gP+aW0$Mm^F-ZgUGwIOet3g4d0n=ty8GH)qvtUF4BT#DY7L78Pe2k`&r$p0gW z{$JU!EN*bCV*JT3lKj+hs1HUm`<)9PsSHrY4SDtfrsCSjAoP~^}oZDRb~#=Hm$8fs~EPnP$RVIE)N^nMR&&=76Lr$ z!Gz6ciwb3Q_-blM`RBHDmKB=w^@T(r5cQhmBA(4O)jcr)@bECQL3R00UwiZ)m~a4R XeUByrDB7t0RRB5~hU&Gd_EG-_QGu@R diff --git a/tests/snapshots/visual.spec.mts-snapshots/calm-ultra-small-update-copy-fallback-chromium-linux.png b/tests/snapshots/visual.spec.mts-snapshots/calm-ultra-small-update-copy-fallback-chromium-linux.png index a3d2443f7392f1d69dd71015d6284e5b915fe308..76817d5925c07efd94df71f69acc454cf8e0583e 100644 GIT binary patch delta 6541 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 XeUByrDB7t0RRB5~hU&Gd_EG-_QGu@R diff --git a/tests/snapshots/visual.spec.mts-snapshots/modern-ultra-small-update-copy-fallback-chromium-linux.png b/tests/snapshots/visual.spec.mts-snapshots/modern-ultra-small-update-copy-fallback-chromium-linux.png index a3d2443f7392f1d69dd71015d6284e5b915fe308..76817d5925c07efd94df71f69acc454cf8e0583e 100644 GIT binary patch delta 6541 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