diff --git a/README.md b/README.md
index e7cf29e..c2db146 100644
--- a/README.md
+++ b/README.md
@@ -19,18 +19,22 @@ Morocco (Ministry of Habous), matching AlAdhan `method=21`:
All computation happens **on the watch** — no GPS, no network. Pure solar math
(same Meeus approach as the sundial) lives in `src/common/prayer.js`.
-## Screen (v0.3)
+## Screen (v0.4)
-- Pure #000000 AMOLED background, including the list and prayer rows
-- Larger 42px clock, 28px prayer names and 36px times
-- Native vertically swipe-scrollable list: 80px rows in a 320×240px viewport
-- Top/bottom spacers let the first and last prayers scroll to the center
-- Fixed next-prayer countdown; lavender outline/text highlight the next prayer
-- Normal system back button exits; no crown support assumed
-- 15s refresh; no changes to prayer calculations
+- Pure #000000 AMOLED background
+- Larger 50px clock; no swipe instruction label
+- Prayer names above their times, in fixed 104px native list rows
+- Center magnification: prayer times grow continuously from 30px to 60px as
+ their row approaches the physical screen center; names grow from 20px to 28px
+- Scroll viewport 320×264 at x73/y101, centered at y233; 80px end spacers
+- Fixed next-prayer countdown below the list; lavender next-prayer highlight
+- Glyph sizes change without changing row heights, avoiding scroll-position drift
+- 15s clock refresh preserves scroll focus; calculation logic unchanged
+- Normal system back exits; crown support not assumed
-Build and automated tests pass; v0.3 scrolling/rendering needs an on-watch check.
-`preview-0.3.png` is a static layout mock with illustrative times, not a watch screenshot.
+Automated math/page/focus/layout tests and release build pass. The live scroll
+magnification still needs an on-watch check. `preview-0.4.png` is a static layout
+mock with illustrative times, not a device screenshot.
## Project layout
@@ -56,6 +60,7 @@ npm run release
node tests/prayer.cjs
node tests/page.cjs
node tests/amoled.cjs
+node tests/focus.cjs
```
## Install
diff --git a/preview-0.4.png b/preview-0.4.png
new file mode 100644
index 0000000..bbf2a3a
Binary files /dev/null and b/preview-0.4.png differ
diff --git a/src/manifest.json b/src/manifest.json
index 2b1e3a7..1f5409a 100644
--- a/src/manifest.json
+++ b/src/manifest.json
@@ -2,8 +2,8 @@
"package": "com.ilias.salah",
"name": "SALAH",
"icon": "/common/icon.png",
- "versionName": "0.3",
- "versionCode": 3,
+ "versionName": "0.4",
+ "versionCode": 4,
"minAPILevel": 1,
"deviceTypeList": [
"watch"
diff --git a/src/pages/index/index.ux b/src/pages/index/index.ux
index ac22aee..e3e419f 100644
--- a/src/pages/index/index.ux
+++ b/src/pages/index/index.ux
@@ -6,15 +6,14 @@
{{ nextName }} in
{{ countdown }}
-
+
- {{ row.label }}
- {{ row.time }}
+ {{ row.label }}
+ {{ row.time }}
- SWIPE TO SCROLL
diff --git a/tests/focus.cjs b/tests/focus.cjs
new file mode 100644
index 0000000..f59a911
--- /dev/null
+++ b/tests/focus.cjs
@@ -0,0 +1,40 @@
+const assert = require('node:assert/strict')
+const fs = require('node:fs')
+const vm = require('node:vm')
+const src = fs.readFileSync('src/pages/index/index.ux', 'utf8')
+const body = src.match(/