# v6 Black Bar Crop Fix + 15px Lift Correction — July 12 BibleVerse on .129 final 2142871

**Symptom:**
Vision: "black bar on the top cropping the text" — Habakkuk screenshots 4539 bytes showed 44px dark bar `#15151F COVER` + border overlapping center column, cutting first line. Also "reduce text size a bit for this font" — Georgia Italic 26pt wider than Montserrat LARGE. Then "main text can be moved a bit up 30px, seems padding favoring empty space on top." → corrected "We sent the text 30px up, but I think it should had been 15".

**Root cause header:**
```c
lv_obj_set_size(hb, LV_PCT(100), 44); bg #15151F COVER border 1 #232338
center_col lv_obj_center size 90%x80%
verse pad_all 6 font 26
```

**Fix v6 final 15px lift:**
1. Header transparent same root no border smaller:
```c
size 36 not 44; bg #0E0E14 same as parent root was #15151F; bg_opa TRANSP was COVER; border 0 was 1; pad_ver 4 was 0
```
2. Ctrl bar also TRANSP editorial: bg #0E0E14 TRANSP border 0 was #15151F COVER + top border
3. Center shift + lift correction:
```c
// was center
size 90%x82% // 80->82
align CENTER 0,8 // +8 down to clear statusbar
// then 30px up request -> 0,-22
// then correction 15px up -> 0,-7 = +8 base -15 = 15px up balanced final
// pad verse 4 not 6
```
Vision Zeph 1:3 after -7: "balanced now, optical center correct, prevents sitting on buttons, 1.5x padding above controls, no excessive top space" PASS. No black bar Hab 2:9 "No extra black bar overlapping, fully visible".

4. Georgia Italic down-tier wider than Montserrat:
```c
Before: LARGE->26 DEFAULT->20 SMALL->16
After v6: LARGE->22 was 26, DEFAULT->18 was 20, SMALL->16, ultra <40c still 26 via resolve_verse_font_ultra
pads tighter: <40 6/20 not 10/28, <100 4/16 not 8/24, <200 3/14 not 6/20, <350 2/12 not 4/16, 350+ 1/8 not 2/12
```

5. Menu auto-show 10s + book anim: See immersive-ui.md and book-browser.md v6 final. Timer gotcha: `t->user_data` incomplete typedef error in SDK 0.8.0-dev → must use `lv_timer_get_user_data(t)` (exported 382/388). Verified .129 menu show 8683 bytes.

**Verification final 2142871:**
- Build 4.3M `tactility.py build esp32s3 --local-sdk` ok, ELF 0 missing
- Install .129: heap `46215-47591 free largest 20480 psram 4810396` stable, ss `5335 serif` vs `3991 sans` vs `8683 menu visible` vs `6882 immersive`
- Vision checks: Hab 2:9 no crop, Zeph 1:3 balanced 15px lift, menu chrome visible at 0.8s then hidden showing premium cinematic
- Screenshot rate-limit >2s between to avoid `ConnectionResetError 54` heap spike from encoder

**Lessons:**
- Avoid opaque header on immersive — use root bg TRANSP so no crop when mistakenly visible
- When swapping Mont→Georgia reduce one tier — 26pt serif ~22pt sans visual
- Lift correction: base CENTER 0,8 too low empty top → 30px up → user corrected 15px up → -7 final, always confirm lift target in vision
- Timer incomplete typedef: use getter, not direct field
- Screenshot burst OOM — wait 2s+

See immersive-ui.md v6 final + pretty-font.md v6 final + book-browser.md v6 final. Beautiful per user final approval.
