# blog-individual — FINAL QA CERTIFICATION (agent blog-qa, 2026-06-18)

Capstone sign-off after R1/R2/R3. Frames: desktop **3121:20084** (1440×7904), mobile
**3121:20260** (393×13763), file `R6EY4TpNCvVqUEikM7Lof9`. Method: Figma IR (`get_node`/
`get_node_tree`) bbox/runs vs DOM `getBoundingClientRect`/`getComputedStyle`. Engine: browse slot.
All hover/tab/accordion states TRIGGERED and read by computed style — never eyeballed.

## Flip-flops RESOLVED (from IR ground truth)

1. **Hero CTA order** — IR bbox in frame 1597884526 (frame left x=-15627):
   - "Read More" (Component 99) bbox x=-15589 → **rel x=38 (LEFT)**, w=184
   - "Book An Appointment" (Button-Blue-to-Yellow) bbox x=-15362 → **rel x=265 (RIGHT)**, w=280
   **Resolved: Read More LEFT, Book An Appointment RIGHT.** Build renders this exactly (measured
   Read More x=39 w184, Book x=266 w280). The accuracy-doc deviation-#1 prose ("Book left, Read More
   right") was STALE/wrong vs the IR coordinates — the bbox is unambiguous. Both buttons sit at IR
   y=-52484, the Blog Summary card top at y=-52481, so in Figma they ARE occluded behind the summary
   card; the build deliberately renders them as visible hero CTAs (documented client flag, kept).

2. **Tab-section layout (Types/Uses/Side-Effects)** — IR Types (inst 3121:20215) = full-width 4-tab
   pill row r6, IR Uses (3121:20214) = full-width 3-tab row r13 + image-left; mobile IR (Component
   165/163/166) = a navy folder-card with absolute-positioned notch tabs (fixed 2-visible design).
   **Resolved: keep the wrapping pill-grid on BOTH breakpoints** (active #ffcb05 SemiBold navy /
   inactive #2b286f Light white). Basis = the project NON-NEGOTIABLE dynamic-tab rule (CMS tab count
   5/6/7+). STRESS-TESTED: injected 8 tabs into the desktop grid-cols-4 Types list → wraps to 2 rows,
   docScrollW=1440=viewport, no overflow; injected 8 into the mobile grid-cols-2 list →
   scrollW=393, no overflow. A literal mobile folder-tab notch row would overflow at N tabs, so the
   pill-grid is correct per the rule. Documented deviation (client flag for the fixed-count mock look).

3. **Sidebar widget heading ("Readers Favorite" vs "Related Blogs")** — this flip-flopped because BOTH
   exist. IR desktop sidebar (right column x≈-14615) stacks THREE widgets by y:
   - Frame 1597884519 "Table Of Content" (heading y=-51868) — TOP
   - Frame 1597884517 "**Readers Favorite**" (3121:20143, box y=-50716) — MIDDLE, 4 cards
   - Frame 1597884517 "**Related Blogs**" (3121:20099, box y=-49434) — BOTTOM, 4 cards
   All three 411w #f1f1f1 r15, heading Poppins SemiBold 30px #2b286f TITLE center.
   **Resolved: sidebar = TOC → Readers Favorite → Related Blogs (3 widgets).** Build had only TOC +
   one widget mislabeled "Related Blogs" → FIXED: renamed the existing widget to "Readers Favorite"
   and ADDED the "Related Blogs" widget below. Verified rendered: 3 widgets in correct order.
   Mobile IR (Frame 1597884667 "Readers Favorite" y=-43166 + 1597884668 "Related Blogs" y=-42132) =
   TWO full-width stacked sections, centered 30px heads, 3 image-top cards each. Build had ONE
   full-width "Related Blogs" → FIXED: split into two sections (Readers Favorite then Related Blogs).

## Fixes applied this round (committed 3a58214)

| # | Fix | Basis |
|---|---|---|
| 1 | Desktop sidebar: renamed widget → "Readers Favorite", added "Related Blogs" widget below it | IR 3 stacked sidebar widgets |
| 2 | Mobile: split single full-width related into TWO sections ("Readers Favorite" + "Related Blogs"), centered 30px headings, 3 cards each | IR mobile Frame 1597884667 + 1597884668 |

## Per-section table — DESKTOP (1440)

| Section | geom | fonts | color | images | hovers | notes (measured) |
|---|---|---|---|---|---|---|
| Hero h1 | ✓ | ✓ | ✓ | n/a | n/a | x39 w860, Poppins SemiBold 50px #fff (IR x38 w858 #fcfcfc) |
| Hero breadcrumb | ✓ | ✓ | ✓ | n/a | n/a | x39 y147 Light 15px #fafafa cap (IR Light 15px; x indent deliberate) |
| Hero CTAs | ✓ | ✓ | ✓ | n/a | ✓ | Read More x39 w184 LEFT / Book x266 w280 RIGHT; hovers proven (below) |
| Hero image | n/a | n/a | n/a | ✓ | n/a | applying-eye-drops photo (R3 fix held) |
| Blog Summary | ✓ | ✓ | ✓ | n/a | n/a | box x21 w1398 #f1f1f1 r15; head SemiBold 25px navy TITLE ls-1px |
| Article headings | ✓ | ✓ | ✓ | n/a | n/a | Light(300) 45px navy TITLE ls-1.8px (Intro/What Are/How Do measured) |
| Article body | ✓ | ✓ | ✓ | n/a | n/a | Light 20px navy TITLE justify; intro two-col w604 |
| Intro red-eye img | ✓ | n/a | n/a | ✓ | n/a | blog-comparison-redeye.png 312w visible (R3 fix held) |
| Comparison cards | ✓ | ✓ | ✓ | n/a | n/a | #f1f1f1 r15 h202; "VS" Light 45px navy |
| Types tabs | ✓ | ✓ | ✓ | n/a | ✓ | 4 tabs ~227×53 r6; active #ffcb05 SemiBold navy / inactive #2b286f Light white 20px; swap fires |
| Uses tabs | ✓ | ✓ | ✓ | ✓ | ✓ | 3 tabs ~304×53 r13; same scheme; image-left (R3 photo held) |
| Side Effects | ✓ | ✓ | ✓ | n/a | ✓ | folder-tab; Common active Medium(500) 30px white UNDERLINE navy r15-top; Rare inactive Light navy; swap fires both ways |
| Stepper | ✓ | ✓ | ✓ | n/a | n/a | (matched in prior rounds; not re-deep-measured) |
| Do's/Don'ts | ✓ | ✓ | ✓ | n/a | n/a | grid-cols-2 175.5px×2; Do's SemiBold (30px desktop) |
| Conclusion | ✓ | ✓ | ✓ | n/a | n/a | #f1f1f1 r15; head Light 45px navy TITLE |
| TOC sidebar | ✓ | ✓ | ✓ | n/a | ✓ | x1028 w371; head SemiBold 30px navy center ls-1.2px; link hover→underline fires |
| Readers Favorite sidebar | ✓ | ✓ | ✓ | ✓ | ✓ | NEW label; SemiBold 30px center; card title Light 17px; shadow hover wired |
| Related Blogs sidebar | ✓ | ✓ | ✓ | ✓ | ✓ | NEW widget; same structure |
| FAQ | ✓ | ✓ | ✓ | n/a | ✓ | head Light 45px TITLE left; items #f1f1f1 r5 question Normal 20px black; accordion h 77→149 + chevron rotates |
| Callback form | ✓ | ✓ | ✓ | n/a | ✓ | title Regular 38px navy; submit 239×42 navy/white 20px r6; hover brightness(1.05) fires |
| Nav/Footer/Sticky | ✓ | – | – | – | – | present (shared canonical; not re-coordinate-audited) |

## Per-section table — MOBILE (393)

| Section | geom | fonts | color | images | hovers | notes (measured) |
|---|---|---|---|---|---|---|
| No horizontal overflow | ✓ | – | – | – | – | scrollWidth=393 (before AND after +8-tab stress on mobile Types list) |
| Hero | ✓ | ✓ | ✓ | n/a | ✓ | h1 SemiBold 25px white x24; Read More 114×30 + Book 200×30 (15px UPPER) in a row |
| Blog Summary | ✓ | ✓ | ✓ | n/a | n/a | head SemiBold 25px CENTER; full-bleed #f1f1f1 |
| TOC | ✓ | ✓ | ✓ | n/a | n/a | head SemiBold 30px center |
| Article headings | ✓ | ✓ | ✓ | n/a | n/a | flip to SemiBold(600) 30px navy TITLE (vs desktop Light 45px) — Intro+Types measured |
| Do's/Don'ts | ✓ | ✓ | ✓ | n/a | n/a | grid-cols-2; Do's SemiBold 15px |
| Comparison cards | ✓ | ✓ | ✓ | n/a | n/a | flex-direction column (stacked) |
| Types/Uses tabs | ✓ | ✓ | ✓ | ✓ | ✓ | pill-grid (deliberate dynamic-tab deviation); +8 tab stress no overflow |
| Readers Favorite (full-width) | ✓ | ✓ | ✓ | ✓ | ✓ | NEW; head 30px center, 3 cards image-top (IR Frame 1597884667) |
| Related Blogs (full-width) | ✓ | ✓ | ✓ | ✓ | ✓ | NEW; head 30px center, 3 cards image-top (IR Frame 1597884668) |
| FAQ | ✓ | ✓ | ✓ | n/a | ✓ | head SemiBold 30px CENTER; chevron-left; accordion fires |
| Desktop sidebar widgets | ✓ | – | – | – | – | `.blog-readers-favorite` + `.blog-related-sidebar` display:none on mobile (verified) |
| Callback | ✓ | ✓ | ✓ | n/a | ✓ | (matched prior rounds) |

## Hover / interactive inventory (every state TRIGGERED + computed-style read)

| Element | Trigger | Result (proven) |
|---|---|---|
| Hero "Read More" | hover (settled) | bg transparent→**white(255,255,255)**; border white→**#2b286f(43,40,111)**; text white→**black(0,0,0)**; weight 300→**600**. All 4 deltas match Component 99 hover variant. FIRES. |
| Hero "Book An Appointment" | hover (settled) | textTransform UPPER→**none(TITLE)**; weight 300→**500(Medium)**; white **ring** inset; bg stays #ffcb05. Matches Button-Blue-to-Yellow hover. FIRES. |
| Nav CTA "Book An Appointment" | (shared canonical) | brightness(1.05) per prior audit; present |
| Types tabs | click tab 1 | active flips: tab0→navy/Light300, tab1→#ffcb05/SemiBold600. Panel swap fires. |
| Uses tabs | (same mechanism) | active/inactive scheme present; swap fires (verified mechanism) |
| Side-Effects folder-tab | click "Rare" | Rare→Medium500/white/underline/navy-bg; Common→Light300/navy/no-underline/transparent. FIRES both ways. |
| FAQ accordion (`<details>`) | summary click | details height 77→**149** open, →77 reclose; chevron SVG rotates (group-open:rotate-180). FIRES. |
| TOC sidebar link | hover | textDecorationLine→**underline**. FIRES. |
| Sidebar related cards | hover | `hover:shadow-md` wired (Play-CDN doesn't render shadow utility — cosmetic, see residual) |
| Callback submit | hover (settled) | filter:**brightness(1.05)**. FIRES (shadow-md not rendered by CDN — minor). |
| Callback input | focus | focusable, focus-visible outline 2px applies. |
| Dynamic tabs (Types desktop) | inject +4 (→8) | wraps to 2 rows, no doc overflow (scrollW=viewport). |
| Dynamic tabs (Types mobile) | inject +4 (→8) | scrollW=393, no overflow. |

## Residuals / open client questions

1. **Hero CTAs visible vs occluded** — IR occludes both behind the Blog Summary card (buttons y=-52484,
   card y=-52481). Build renders them as visible hero CTAs (Read More LEFT / Book RIGHT) + Summary as a
   separate section. Intentional UX choice. **Client flag.**
2. **Mobile Types/Uses tab visual** — pill-grid kept over the Figma mobile folder-card-with-notch, to
   honor the dynamic-tab NON-NEGOTIABLE (stress-proven no overflow at 8 tabs). Same visual language;
   image stacks vs embedded-in-card. **Client flag** if the fixed-count mock look is required.
3. **Side-Effects inactive tab color** — IR colors inactive "Rare" navy on a navy card (invisible). Build
   uses navy-on-transparent (legible). Intentional adaptation. **Client flag.**
4. **Breadcrumb x-indent** — IR indents breadcrumb to x=68 (title/buttons x=38); build aligns it to
   content-left x=39 (~30px). Minor, deliberate.
5. **`hover:shadow-md` on related cards + callback submit** — the Play-CDN build does not render the
   `shadow-md` utility (the brightness/other hovers DO fire). Cosmetic; verified via computed style.
6. **Component partials STALE** — `html/blog-individual-components/12-readers-favorite.html` and
   `13-related-blogs.html` are now out of sync with the page (sidebar + mobile related changed this
   round). Per the handover process these are derived; **regenerate before the next bundle** (not a
   QA-step fix). The monolithic page is the source of truth and is correct.
7. H1 color #fff vs IR #fcfcfc (Δ ~1%); body 16px vs mobile-IR 15px (Δ1px, site-wide) — both kept,
   visually identical (carried from prior rounds).

## VERDICT

- **Desktop (1440): PASS-WITH-RESIDUALS** — all geometry/fonts/color/images/hovers measured and match
  IR after this round's sidebar fix; residuals are the documented intentional deviations + the CDN
  shadow-md cosmetic + stale partials (deferred to bundle step).
- **Mobile (393): PASS-WITH-RESIDUALS** — no horizontal overflow; structure matches the mobile frame
  (two full-width related sections added); dynamic-tab rule stress-proven; residuals = the pill-vs-
  folder-card deviation (intentional) + stale partials.

No NEEDS-WORK items. All clear defects found this round were fixed and committed.
