The contact lens fit step does not look like the rest of specialist grading

A study of the LensFitStep in SpecialistGradingScreen.tsx (origin/main f2c399af, 06-10-2026). Every phone below is rendered at iPhone 15 Pro size (393 x 852 pt, the tightest phone in the pilot fleet). The fixed parts use the shipping heights: status bar 59, header 68, intake band 41, eye tabs 53, video 275, home indicator 34. That leaves 322 pt for the step itself. The dashed line marks the bottom of the usable area. The phones are clickable.

Today

EFRON step, Conjunctival RednessThe step that comes just before. Tapping a card selects it and moves on after 280 ms.
Lens fit today, clickablePick a judgement, then press Continue. Choosing "Possible misfit" adds a second grid below.
Lens fit today, misfit openedPossible misfit selected, no reason chosen yet.

What differs from the steps either side

  • Shape: square boxes with 1 pt borders, tinted the same colour as the page. The EFRON cards and the chooser rows are white, with 2 pt and 1 pt borders and 12 and 10 pt corners.
  • Type: option titles are 12 pt, reason titles 11 pt and Continue 12 pt. The steps around it use 15 to 16 pt labels and a 14 pt action.
  • Header: a 20 pt left-aligned title with a separate back link above it. EFRON uses a centred 16 pt title with chevrons on either side, and that title row is also how you move back.
  • Interaction: EFRON moves on as soon as you tap. Lens fit needs a tap and then Continue on each eye, which adds two more taps, and Continue is not at the bottom of the screen.
  • Progress: the eye tabs keep showing EFRON's "6/6" during lens fit. Progress appears instead as a "1 of 2" chip that is hardcoded in English, so Dutch users also see "1 of 2".
  • Selection colour: the selected judgement gets a teal border, while the selected reason gets an amber fill. EFRON shows the selection with a severity-coloured border and a "Selected" badge.
  • Fit: see the measurement under each phone. When "Possible misfit" is open, Continue is pushed well below the fold.

Round 2: rows inside the stepper, misfit opens its own stepD2 chosen

Feedback on round 1: keep lens fit as part of the single stepper (as in B), use rows instead of cards, and do not unfold the reasons inline when "Possible misfit" is tapped. In both variants below, the misfit row has a › chevron because it is the only row that opens something. The other three rows select and move on after 280 ms, as EFRON does. The video stays visible the whole time, because the reason is something the specialist reads from the video.

D1. Reasons as the next step, clickableTapping "Possible misfit" slides the reasons in, in place of the judgements, like a step forward in the stepper.
D1. After tapping "Possible misfit""‹ Possible misfit" goes back to the judgements. If no reason was picked, the earlier answer comes back.
D2. Reasons in a sheet, clickableTapping "Possible misfit" raises a sheet over the grading area only. The video stays uncovered.
D2. Sheet openPicking a reason closes the sheet and moves on. Cancel restores the earlier answer.

D1. Reasons as the next step

  • It extends the stepper the specialist already uses: one question at a time, the same header, and the same back chevron. Lens fit becomes one more page in that stepper, and the reasons are a page inside it.
  • The header changes to "‹ Possible misfit" with the line "Right eye (OD): what suggests a possible misfit?", so the eye and the question stay visible.
  • Both levels fit above the fold on the 15 Pro (see the measurements).
  • Accessibility: when the reasons slide in, focus moves to the new header and VoiceOver reads "Possible misfit, choose a reason". The rows are announced as radio choices.

D2. Reasons in a sheet (chosen, 06-10-2026)

  • It shows clearly that the reasons belong to "Possible misfit", which still sits dimmed underneath.
  • The sheet covers the stepper header, so the eye name moves into the sheet subtitle.
  • It is a modal for a choice that does not need to interrupt anything, and it adds a second way to dismiss (a swipe down or Cancel) that the rest of grading does not have.
  • The sheet only just fits in the space under the video, so long Dutch labels leave little room.

Both variants

  • Once a reason is recorded, the misfit row shows it ("Reason: too loose"), so going back to that eye shows the full answer.
  • The eye tab badges count to 7/7. This replaces the hardcoded "1 of 2" chip.
  • The button that is removed is today's "Next eye" / "Continue to decision". Tapping a row now moves on, as in EFRON. A wrong tap is undone with the back chevron or the eye tabs, and the confirm sheet shows lens fit for both eyes before sending.

Round 1. A. Restyle in placesmallest change

Same structure and the same explicit Continue. The options take on the EFRON card anatomy, the header becomes the stepper header, and Continue moves to a full-width footer that is always visible, styled like the existing "Continue after EFRON edit" footer.

Clickable
Misfit opened

Changes

  • White cards with a 2 pt border, 12 pt corners, a 15 pt title and a 12 pt description, laid out like the reference cards: a 28 pt circle, then the label. A 2 by 2 grid gives a 172 pt card width, the same as an EFRON reference card.
  • Selection works as on a reference card: the border takes the colour, and the circle fills with it. There is no photo for a "Selected" badge to sit on, and on a card with only text, the badge covered the title.
  • The selected border is coloured by meaning: green for "Fit looks OK", amber for "Possible misfit", teal for "No lens" and "Unable to assess". This follows the soft and strong colour pairs the decision chooser already uses.
  • The header uses the same pattern as the EFRON condition header. The left chevron goes back to EFRON, which replaces the separate back link. The eye name moves into the description line, which removes the hardcoded "1 of 2" chip.
  • Continue is a pinned 44 pt, 14 pt footer with a specific label: "Next: left eye (OS)" or "Continue to decision".

Trade-offs

  • It still needs a tap and then Continue on each eye, so the interaction stays different from EFRON.
  • The pinned footer takes 57 pt of the 322 pt available. Even with nothing selected, the bottom of the second card row sits 38 pt under the footer. With misfit open, all four reasons sit below it. The footer is always reachable, but the cards above it are not.

B. Lens fit as the seventh card setround 1

Lens fit becomes one more page of the stepper the specialist has just used six times: the same header, the same card anatomy, and the same behaviour where a tap moves you on. "Possible misfit" opens a second card set in the same space instead of adding a second grid below. There is no Continue button and no back link.

Clickable
After tapping "Possible misfit"

Changes

  • The header is the EFRON condition header: "‹ Contact lens fit ›". The left chevron goes back to the last EFRON condition, exactly like moving back between conditions.
  • Tapping "Fit looks OK", "No lens visible" or "Unable to assess" selects it and moves on after 280 ms, as EFRON does: from the right eye to the left eye, then from the left eye to the decision chooser.
  • Tapping "Possible misfit" swaps in four reason cards under the header "‹ Possible misfit ›". The left chevron there goes back to the judgements. Picking a reason moves on. Both states fit above the fold.
  • The eye tab badge counts lens fit as the seventh item ("7/7"), so progress appears where the specialist already looks for it. The "1 of 2" chip goes away.

Trade-offs

  • A wrong tap moves on straight away. EFRON has worked this way since launch, the chevron and the eye tabs let the specialist go back, and the confirm sheet lists lens fit for both eyes before anything is sent.
  • This is more engineering work than A. The badge count changes, the post-EFRON flow changes, and the Maestro flows that tap gradingLensFitContinue need updating.

C. Rows like the decision chooseralternative

Lens fit borrows the look of the decision chooser that follows it: full-width rows with an icon and a 15 pt title, so the step reads as the start of the decision. A tap moves on. "Possible misfit" opens reason chips inside its own row.

Clickable
Misfit opened

Changes

  • Full-width rows with 10 pt corners. Long Dutch labels such as "Mogelijk slechte pasvorm" get the whole row width, which is the same reason the chooser switched to rows in EYOX-571.
  • The same stepper header as B, and the same behaviour where a tap moves on.
  • The misfit reasons open as chips (4 pt corners, at least 36 pt tall) inside the misfit row, so the judgement and its reason stay together on screen.

Trade-offs

  • With misfit open, the list is taller than the space available, so two chips need a short scroll on the 15 Pro.
  • It looks like the decision chooser, which is the final clinical decision. Making an observation step look like a decision can make it feel heavier than it is.

Side by side

TodayA. RestyleB. Seventh card setC. Chooser rowsD1. Rows, reasons as next stepD2. Rows, reasons in a sheet
Matches EFRON cardsNoYesYesPartly (matches the chooser)Header and stepper, rowsHeader and stepper, rows
Matches EFRON interactionNoNoYesYesYesMostly (adds a modal)
Taps for two OK eyes442222
Taps for one misfit eye332222
Fits on 15 Pro, closed
Fits on 15 Pro, misfit open
Progress shown inEnglish "1 of 2" chipDescription lineEye tab badge (7/7)Eye tab badge (7/7)Eye tab badge (7/7)Eye tab badge (7/7)
Engineering sizeSmall (styles and footer)Medium (flow, badge, Maestro)MediumMediumMedium, plus sheet

Decision (06-10-2026): D2. Lens fit becomes rows inside the single stepper, and the misfit reasons open in a sheet over the grading area, so the video stays visible. The sheet fits with only 1 pt to spare in English, so Dutch must be checked on a device. If Dutch text does not fit, the sheet scrolls internally and Cancel stays visible. The ticket also covers the hardcoded "1 of 2" chip, the left-eye "Continue to decision" label, and the radio roles.