Mojo Stylesby Mojo Layers

StylesFocal

Style 49 of 51 · clear sight and low light

Focal

Optometrists as a website: an eye test booker that works out whether Medicare covers your test, a frame finder that really filters, a glasses builder with lenses, coatings and the health fund gap, and a guide to how soon to be seen. Prata on misty paper with rust and lens blue.

CalmClearCareful

Best for

  • Optometrists
  • Eyewear shops
  • Dentists
  • Physios
  • Allied health
Prata · Wix Madefor Text · PT Mono
Focal template home page: a serif headline 'See it all, clearly.' with the last word in rust over a fine line, beside an eye test booker with age and last test fields, a 'Covered by Medicare, and bulk billed here' badge, a row of days and appointment times
Focal template on a phone

STYLE.md ·

How Focal works. Every rule, written down.

Optometrists and eyewear, as a website. It has four pieces:

  • An eye test booker. Age, when the last full test was, and whether anything has changed, turned into a plain answer about Medicare cover: covered and bulk billed, likely covered (to be confirmed on the day), or not covered yet with the price and when the next covered test falls due. Then a day and a time, with booked slots struck through.
  • A frame finder. Shape, size, material and a price limit that really filter the frames, each one drawn in CSS in its own shape and colour, with a count of what matches.
  • A glasses builder. The frame you picked, lenses and coatings, priced line by line to a total, and a slider for your extras cover that shows what the fund pays on the spot and what you pay.
  • An urgent guide. Tick what's happening and it says how soon to be seen: book a regular appointment, call today, or go to emergency now.

The type is Prata, Wix Madefor Text and PT Mono, on misty paper with ink, one rust and a pale lens blue for fills. A pair of round lenses is the mark.

Calm · clear · careful

Best for

  • Optometrists. It's written to Medicare's eye test intervals, Ahpra's advertising rules (no clinical testimonials), the sunglasses safety standard and the end of card surcharges (see "Eye care: what we build in").
  • Anyone fitting, testing or seeing people soon:
    • eyewear and sunglasses shops (Sundial: a frame finder and a builder with tints and the fund gap)
    • dentists (Brightside Dental: how soon to be seen, and same-day hours)
    • physios, podiatrists, audiologists and other allied health with urgent appointments
  • Audiences: people due for an eye test, parents booking a child's first test, glasses buyers who want the full price, and anyone with a worrying eye right now.

Less suited to: a pharmacy (Remedy), a hospital, or anything that needs clinical records online.

Personality and voice

Calm and careful, the optometrist who tells you when you don't need new glasses.

  • Headlines: "See it all, clearly." · "Your glasses, priced in full." · "Is it urgent? Here's how soon."
  • Buttons: "Book an eye test" · "Build with this frame" · "Is it urgent?"
  • Microcopy:
    • "Medicare covers a full eye test every 3 years under 65, and it's been long enough."
    • "Your fund pays about $250 on the spot; you pay $88."
    • "Go to emergency now. Call 000 or go to the nearest emergency department."
  • Words to avoid: "free eye test" without saying who pays, "best optometrist in town", patient quotes or star ratings about care, "cure", and anything that sounds like a diagnosis.

Colour

Token Clear sight (light) Low light (dark) Role
--paper #f4f7f8 #0c161c Page
--card #ffffff #142128 Booker, finder, builder, guide
--well #e7eef0 #101b21 Alternate sections, filter panel
--line #d3dde1 #263640 Hairlines
--ink / --ink-2 #0f1d26 / #34434c #eef3f5 / #ccd6db Text
--muted #55636c #9aa8b0 Meta, fine print
--rust #9c3d1e #ffa384 The one accent: buttons, links, the lit words, picked days and frames
--lens #bfe6ee #bfe6ee Fills only: the lens glass, the frame tiles, the total panel; text on it is ink
--lens-ink / --lens-soft #1d5f6e / #e3f3f6 #bfe6ee / #132a30 Lens blue as text, and its soft fill
--ok #1d6b45 #7fd6a0 Covered by Medicare
--alert #b3261e #ff9a90 Invalid fields, "go to emergency now"

Measured contrast (WCAG).

  • Clear sight:
    • ink on paper 15.9:1
    • muted on paper 5.8:1 (5.3:1 on well)
    • rust on paper 6.3:1 (5.8:1 on well, 5.5:1 on its soft fill, 6.8:1 on card), white on rust 6.8:1
    • ink on lens 12.9:1; lens ink 6.7:1 (6.3:1 on its soft fill)
    • ok 6.5:1 (5.7:1 on lens soft), alert 6.5:1
  • Low light:
    • ink 16.4:1
    • muted 7.5:1 (6.7:1 on card)
    • rust 9.4:1, text on rust 9.2:1, rust on its soft fill 8.6:1
    • lens ink 13.8:1 (11.3:1 on its soft fill)
    • ok 9.4:1, alert 8.0:1
  • Closing card: text 14.5:1, body 11.0:1, rust em 8.4:1, ink on its button 8.8:1.
  • Example dials: teal (Sundial, white on teal 6.8:1), plum (Brightside, 9.4:1) and spruce (Lumen, 8.0:1) all meet AA, light and dark, and so does each closing card.

Typography

  • Display: Prata, 400. Headlines, prices, the big total. A high-contrast serif, like the letters on a test chart.
  • Body: Wix Madefor Text, 400–800. Reading, forms, buttons.
  • Mono: PT Mono, 400. Times, prices in lists, frame details, labels.
Token Size Use
--fs-h1 clamp(44px, 6vw, 90px) Page headline
--fs-h2 clamp(32px, 3.9vw, 56px) Section headline
--fs-h3 22px Card titles
--fs-lead clamp(17.5px, 1.35vw, 20.5px) Intro paragraphs
--fs-body 16.5px Body

The signature move: the lit words come into focus. They start blurred and faint, sharpen to rust, and a fine line draws in under them, like a lens clicking into place.

Layout

  • Frame: a 1200px wrap with a max(20px, 4vw) gutter. An ink top line with a lens-blue label; a sticky header with the lens mark; a large lens of fine concentric rings behind the hero that slowly breathes.
  • Hero: copy on the left; the eye test booker on the right.
  • Then: the frame finder full width; the glasses builder beside two notes (no upselling, fund claims on the spot); the urgent guide; questions; and a dark closing card with a pair of lenses that catch a glint of light.

Shape

  • Soft: --r-s 8px, --r-m 14px, --r-l 24px, pill buttons.
  • Lenses: circles drawn in CSS for the mark, the tag, the hero, the page heads, the frames and the closing card. No images needed.

Motion language

  • Focus: the lit words sharpen from a blur, and the line draws in.
  • Finder and builder: frames lift on hover and the picked one is outlined; the builder's total slides in when anything changes.
  • Elsewhere: the hero lens breathes, the closing card's lenses catch a glint, sections reveal with a rise, and the phone menu drops in.
  • Motion switch in the footer ([data-motion-toggle], html.calm, remembered as site-motion, with the default from prefers-reduced-motion). Calm stops the blur, the breathing, the glint and the slides.
  • Low light switch ([data-theme-toggle]), remembered as site-theme; theme-color follows.

Imagery and illustration

Your own practice, your own team and your real frames on the wall, photographed in daylight. The template draws its glasses in CSS, so nothing is borrowed. No stock "woman laughing in glasses", no eye chart clip art, no brand logos without the supplier's permission, and no patient quotes about care.

Signature components

  • Eye test booker: .eyetest[data-eyetest] containing script[data-eye-data] (price, closed days, times, booked as [dayOffset, slotIndex], days, and optional yes, no, likely wording), input[data-age], select[data-last] (years since the last full test), input[data-symptoms], [data-eye-verdict], [data-eye-why], [data-eye-days], [data-eye-times] and [data-eye-msg]. Under 65 a full test is covered every 3 years, from 65 every year; ticking a change says "likely covered" and that it's confirmed on the day.
  • Frame finder: .frames[data-frames] containing segmented filters [data-f-shape], [data-f-size], [data-f-material] (buttons with data-value), input[data-f-max] with [data-f-max-out], [data-f-count], .frames-none, and .frame cards (data-price, data-shape, data-size, data-material, and --frame for the colour) with a [data-pick-frame] button (a #id to scroll to, or a page to go to).
  • Glasses builder: .specs[data-specs] with data-for (the finder's id) and script[data-specs-data] (frame), containing lens radios named <id>-lens with data-price, input[data-coat] with data-price, [data-frame-name], [data-specs-lines], [data-specs-total], input[data-fund], [data-fund-out] and [data-gap].
  • Urgent guide: .urgent[data-urgent] containing script[data-urgent-data] (levels, 0 to 3, each a heading and a sentence), input[data-level] checkboxes, [data-urgent-head] and [data-urgent-out]; the guide sets data-now for styling.
  • Supporting pieces: .plan-pair, .card, .facts (--n columns), .notice, .side-box, .checks, .faq, .close-card (--close-bg, --close-em).

Multi-page kit

  • Phone menu: .menu-btn[aria-controls] opens .site-menu. Escape, an outside click or choosing a link closes it, and Tab stays inside while it's open.
  • Current page: aria-current="page", shown as a soft pill.
  • Inner pages: .page-head (rings and a small pair of lenses), .crumbs, a .tag and a smaller .h1.
  • Fields: .field, .fields, .field-wide, fieldset.field-set, .check, .form-card, [aria-invalid="true"]; form[data-template].
  • Tiles, segmented control, gate, slider, switch, tables: .choices, .seg, [data-gate], input.range, .switch[role=switch], .table.
  • Events: eyetest (covered, likely, when), frame (name, price), specs (total, gap, frame), urgent (level).
  • Helper: Focal.refresh(root), and Focal.last, the latest detail of each event, for scripts that load afterwards.

Eye care: what we build in

We checked these for Australian optometrists in October 2026:

  • Medicare eye tests. A comprehensive initial consultation is covered once every 36 months under 65 (item 10910) and once every 12 months from 65 (item 10911). A test sooner is covered when the optometrist documents a significant change in vision or new, clinically significant signs (items 10912 and 10913); symptoms alone aren't always enough, so the booker says "likely covered, confirmed on the day" rather than promising it. Children follow the same rules, with an extra assessment for ages 3 to 14 when it's needed.
  • No clinical testimonials. Ahpra's advertising rules don't allow testimonials about symptoms, diagnosis, treatment or outcomes in advertising a regulated health service; comments on customer service are allowed. The template has no star ratings or patient quotes, and says why on the industry site.
  • Registration. The footer names the Optometry Board of Australia (Ahpra), with room for registration numbers.
  • Sunglasses. The Consumer Goods (Sunglasses and Fashion Spectacles) Safety Standard 2017 sets lens categories 0 to 4 and their labels; category 4 isn't suitable for driving. Sundial shows each pair's category.
  • Urgent care. Sudden vision loss and chemical splashes go straight to emergency (rinse with water for 15 to 20 minutes on the way); new flashes or floaters and a red, painful eye are seen the same day. Every guide says it isn't a diagnosis.
  • Prices and surcharges. Prices include GST, the health fund gap is an estimate that depends on cover, and there are no card surcharges, which end for eftpos, Mastercard and Visa on 1 October 2026.

These notes are design guidance, not medical or legal advice.

Do and don't

  • Do say when Medicare covers a test, and what it costs when it doesn't.
  • Do price glasses in full, frame, lenses and coatings, before anyone books.
  • Do send sudden vision loss and chemical splashes to emergency, in the first line.
  • Don't use patient quotes, star ratings or before-and-after claims about care.
  • Don't ask for a Medicare number or health details in a web form.
  • Don't put text on lens blue in anything but ink.

Accessibility

  • AA contrast throughout (measured above), a skip link and a 3px focus ring.
  • Booker: labelled fields; the Medicare answer and the reason are announced as they change; days and times are buttons with aria-pressed and full spoken dates, and booked times are disabled.
  • Finder: filters are buttons with aria-pressed; the match count is announced; the drawn frames are decorative and each card has its name, size, material and price as text.
  • Builder: lens radios and coating checkboxes are labelled with their prices; each line, the total and the fund gap are text.
  • Urgent guide: checkboxes, with the answer announced in words, not just colour.
  • Forms: labelled fields, errors listed in an alert, linked to and marked on each field.
  • Testing: responsive to 360px, and tested with motion on and off, in Clear sight and Low light.

How to make it yours

Dial Range
Accent Rust (default), teal (Sundial), plum (Brightside), spruce (Lumen). Set --rust, --rust-2, --rust-soft, --focus (plus --on-rust at night), --close-bg and --close-em.
Booker Your appointment times, closed days, test length and private fee.
Finder Your frames: shape, size, material, price and colour.
Builder Your lens and coating prices, and a typical extras limit.
Urgent guide Your same-day arrangements and after-hours advice.
Not negotiable Medicare's intervals stated honestly, the full price before booking, emergencies first, no clinical testimonials, no Medicare numbers in web forms, and the Motion switch.

Start with Focal

Your business, in Focal. Fixed price, your content.

We set your logo, palette and words within Focal's rules and build the site. Prices in AUD, no GST added, 50% upfront and 50% on delivery.

Industry templates in Focal

Pricing and FAQOpen the live templateWant something bespoke instead?

The other 50

Dark · WebGL lightAurora

A living light field behind frosted glass.

Light and dark · interactiveSignal.

Precision you can see: a paper page around a dark instrument.

Light and dark · product motionStrata

A night band of moving print-layer lines over calm surfaces.

Light and dark · showroomFolio

A quiet showroom where the work is the hero.

Paper · night runRiso

Spot inks that overprint, sliding into register.

Light and evening · editorialAtelier

Quiet luxury, set like a lookbook.

Colour blocks · kinetic typeMarquee

Kinetic type on full-bleed colour blocks.

Light and dusk · physicsPebble

Soft clay pebbles you can flick, for brands that look after people.

Light and after hours · labelsRemedy

The care of a well-run dispensary: labels that print, packs that count out.

Bench and night shift · evidenceAssay

Corporate science: a chromatogram that runs, a batch that releases.

Day and night freight · logisticsDispatch

Clinical logistics: a parcel that rides its tracker, a label that slaps on.

Day clinic and night shift · telehealthVigil

Telehealth with a lamp left on: the clinic's day as a clock, every free time lit.

Case notes and after hours · disclosureCandour

A clinic that shows its working: a record that writes itself, a ledger that says who pays.

Day and night board · split-flapTableau

The menu board: rows that clatter into place, price tickets and one brass accent.

Reading room and night stacks · filedCatalogue

Information, filed: index cards in a drawer, pulled to the front one at a time.

Day issue and night issue · officialCharter

The official document, made friendly: a record that fills itself in under a foil seal.

Birch and polar night · steadyCairn

Care built stone by stone: a cairn that stacks itself and a year with the visits marked.

Salon and after hours · polishedLustre

The salon chair as a website: a swatch fan that opens and a menu where every service is timed.

Daylight and evening · elegantBlush

The makeup case, opened: a compact that flips up to pans you can tap, and a morning planned backwards.

Clinic and night clinic · candidLucent

Clinical calm, layered light: a cross-section to explore and risks given equal billing.

Daytime and night shift · brightPolish

Bright and tidy: a polish rack that paints nails, a builder that adds up, a queue you can join.

Shopfront and late shift · old-schoolClipper

The corner barbershop: a pole that turns, a board of who's free, a ticket printer.

Parchment and back room · boldFlash

The tattoo studio: a flash sheet that inks itself in, an estimate, the artists' books.

Morning and cool room · freshStem

The florist: build a bouquet stem by stem, a ring of seasons, a cut-off that tells the truth.

Proof and darkroom · quietContact

The photographer: a contact sheet that develops, coverage on the day's timeline, is my date free?

Clinic and after hours · gentleEnamel

The dentist: tap the tooth that hurts, every fee with its number, a comfort plan that comes with you

Daylight and night shift · warmCollar

The vet: a tag that engraves their name, is it urgent?, did they eat it?, their first year by date

Paper and chambers · plainClause

The lawyer: a clause that redlines itself into plain English, terms that explain themselves, the fee up front

Morning and evening · calmExhale

The studio: a breath that paces you, a timetable with spots left, the cheapest way to come

Lunch and dinner · warmMise

The restaurant: pick your table on the floor plan, a menu that listens for allergies, an honest surcharge

Day and lights out · friendlyThread

The forum: replies on a thread line, a report on every post, similar threads as you type

Morning and late edition · trustworthyMasthead

The newsroom: labels on every story, corrections you can see, a live blog that waits for you

Studio and screening · boldCue

The video creator: chapters on the scrubber, a transcript that follows along, partnerships marked

Daylight and after dark · loudNeedle

Music streaming: a player bar that follows you, explicit songs marked, lyrics that light up

Matinee and late show · cinematicReel

TV and film streaming: ratings with reasons, profiles that lock or hide, shelves and a title sheet

Light and dark · clearConsole

Software products: a tour with hotspots, pricing with real totals, data location and uptime

Daylight and evening · warmKindred

Charities: a gift picker with a live receipt, where every dollar went, volunteer shifts, and a gift you can stop online

Day and night · upfrontTurndown

Places to stay: nightly rates on a calendar, the whole total up front, cancellation in dates, rooms measured

Day and night study · clearPrimer

Courses: an outline with every lesson's minutes, intakes, fees with refund dates, and an honest fit check

Daylight and candlelight · warmGarland

Weddings and events: dates with minimum spends, a quote with every line, spaces that fit, the day hour by hour

Playtime and nap time · warmSprout

Childcare: the gap after the subsidy, rooms by age with ratios, places by day, the full quality rating

Showroom and night drive · boldForecourt

Car dealers: stock that really filters, drive-away prices in full, finance with the comparison rate, condition reports

Daylight and after hours · sturdyCrate

Removalists: an inventory that sizes the truck, hourly or fixed with every line, arrival windows, cover in plain words

Day out and night sky · invitingWaypoint

Tour operators: departures with seats left, one fare with every charge, the day hour by hour, a fit check

Daylight and site lights · exactPlumbline

Home builders: an estimator, payments within the deposit limit, a timeline with weather, a warranty clock

Match day and night game · proudPennant

Sports clubs: fees with vouchers, a ladder from the results, a volunteer roster, return to play

Day session and after dark · loudHeadliner

Festivals: tickets with fees in, a clash finder, the way home, a bag checker

Open house and lamplight · warmThreshold

Mortgage brokers: borrowing with the buffer, cash needed, comparison rates, commission in dollars

Studio and late night · on airCadence

Podcasts: a player with chapters, a transcript that follows along, episodes for the time you've got, sponsors labelled

Lights on and lights off · loudRespawn

Gaming venues: stations on a seat map, games by rating for the group, skill-based tournaments, a bracket

Custom · from $2,500Yours?

A look nobody else has, designed from scratch.