STYLE.md ·
How Array works. Every rule, written down.
Solar and battery installers, as a website. It has four pieces:
- A solar estimate. Where you live (the STC zone), your last bill, which way your roof faces and a system size.
- What it shows: the panels, a year's power, the STCs and what they take off the price, and the price after the discount.
- The savings: a range for the yearly saving and the payback, never a single promised number.
- The fit: a plain note on whether the size suits your use.
- A battery planner. Slide the usable size.
- The discount: it shows the Cheaper Home Batteries discount tier by tier (full to 14 kWh, 60% to 28, 15% to 50), the price after it, and how many evenings it covers.
- The step-down: it shows how much less the same battery would get after the next step-down, which follows today's date.
- A day curve. A sunny day hour by hour.
- What you choose: your system and your use, with no battery, 10 kWh or 16 kWh.
- What it shows: solar you use, solar you send to the grid, power from the battery, and what you'd still buy.
- An install tracker. Every step from quote to handover, who does it, and its date, worked out from the install day you choose.
The type is Saira, Heebo and B612 Mono, on bright paper with deep ink, one solar-cell blue and a sun amber for fills. A tilted four-cell panel with the sun rising behind it is the mark.
Bright · honest · practical
Best for
- Solar and battery installers. It's written to the small-scale scheme (STCs), the Cheaper Home Batteries Program, accredited installers, and honest savings claims (see "Solar: what we build in").
- Anyone selling power, charging or efficiency:
- EV charger installers (Volt Lane: charging on your own solar, and a photo quote)
- community energy groups (Kettering Energy: honest battery sizing, no commissions)
- electricians, energy retailers and heat pump installers
- Audiences: households comparing quotes, people adding a battery to old solar, and farms and small businesses watching their bills.
Less suited to: a large-scale or commercial solar developer, or a product shop shipping panels without installation.
Personality and voice
Bright and honest, like an installer who shows the numbers, gives a range and tells you when something isn't worth it.
- Headlines: "Make your own power, keep more of it." · "How big a battery?" · "From quote to switch-on."
- Buttons: "Get an estimate" · "Ask for a quote"
- Microcopy:
- "45 STCs, about $1,710 off"
- "$1,030 to $1,480 a year"
- "From 1 January 2027 the same battery would get about $570 less."
- Words to avoid:
- "free solar", "zero bills", "guaranteed savings" and "government-approved"
- "limited-time rebate" when it's the normal step-down
- any pressure to sign today
Colour
| Token | Midday (light) | After sunset (dark) | Role |
|---|---|---|---|
--paper |
#f5f7f6 |
#0b1119 |
Page |
--card |
#ffffff |
#131b26 |
Estimate, battery, curve, tracker |
--well |
#e9eeec |
#0f1620 |
Alternate sections, the chart |
--line |
#d3dbd8 |
#263241 |
Hairlines |
--ink / --ink-2 |
#0e1a22 / #2e3c45 |
#eef3f6 / #cdd6dd |
Text |
--muted |
#55636c |
#9aa7b2 |
Meta, fine print |
--panel |
#1747a6 |
#8fb4ff |
The one accent: buttons, links, chosen options, solar cells, battery power, the lit words |
--sun |
#ffb020 |
#ffb020 |
Fills only: the charge under the lit words, generation, the battery level, the kW badge; text on it is ink |
--sun-ink / --sun-soft |
#7a4b00 / #fff1d6 |
#ffc04d / #2c210c |
Sun as text, and its soft fill (the saving) |
--ok |
#1b6e3c |
#84d6a2 |
Steps done |
--alert |
#b3261e |
#ff9a90 |
Invalid fields |
Measured contrast (WCAG).
- Midday:
- ink on paper 16.4:1
- muted on paper 5.8:1 (5.3:1 on well)
- panel on paper 7.8:1 (7.2:1 on well, 6.9:1 on its soft fill), white on panel 8.4:1
- ink on sun 9.7:1; sun ink 6.9:1 (6.6:1 on its soft fill)
- ok 5.8:1, alert 6.1:1
- After sunset:
- ink 17.0:1
- muted 7.7:1 (7.1:1 on card)
- panel 9.2:1 (8.4:1 on card), text on panel 8.3:1, panel on its soft fill 7.6:1
- sun ink 11.6:1 (9.7:1 on its soft fill)
- ok 10.9:1, alert 9.3:1
- Example dials: Volt Lane green, Kettering teal and Sunbird eucalypt all meet AA, light and dark, and so does each closing card.
Typography
- Display: Saira, 500–800. Headlines, results and totals. Squared, engineered and friendly.
- Body: Heebo, 400–700. Reading, forms and buttons.
- Mono: B612 Mono, 400 and 700. kW, kWh, dollars, dates and labels. Designed for cockpit legibility.
| Token | Size | Use |
|---|---|---|
--fs-h1 |
clamp(44px, 6vw, 94px) | Page headline |
--fs-h2 |
clamp(33px, 4vw, 58px) | 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 charge up. They're set in cell blue over a strip of cells that fills with amber from left to right in steps, like a battery charging.
Layout
- Frame: a 1200px wrap with a
max(20px, 4vw)gutter. An ink top line with an amber label; a sticky header with the panel mark; a solar array in perspective under the hero copy, with a low sun rising behind it. - Hero: copy on the left, which stays in view on wide screens; the solar estimate on the right.
- Then: the battery planner beside its heading; the day curve full width; the install tracker with two notices; questions; and a dark closing card with the sun setting behind a panel.
Shape
- Engineered:
--r-s6px,--r-m12px,--r-l18px. - Hardware in CSS: the mark, the hero array, the live cell grid in the estimate, the battery, the sun's arc in each page head and the closing panel are drawn in CSS. No images needed.
Motion language
- Charge: the cells under the lit words fill in twelve steps.
- Estimate and battery:
- Cells light up one by one as the system grows.
- The battery fills.
- The tier bars grow.
- Totals rise in when they change.
- Elsewhere:
- The hero sun rises.
- The page-head sun travels its arc to midday.
- The current install step pulses.
- The closing sun sets.
- The mark's sun lifts on hover.
- Motion switch in the footer (
[data-motion-toggle],html.calm, remembered assite-motion, with the default fromprefers-reduced-motion). Calm stops all of it. - After sunset switch (
[data-theme-toggle]), remembered assite-theme;theme-colorfollows.
Imagery and illustration
Your own installs, crews and customers' roofs, with permission. The template draws its hardware in CSS, so nothing is borrowed. Avoid stock photos of panels on houses you didn't do, and drone shots of solar farms for a residential installer.
Signature components
-
Solar estimate:
.sizer[data-sizer](.hero-cardin a hero) withscript[data-sz-data](perKw,panelW,stc,deeming,tariff,fit,supply). It contains:select[data-sz-zone]withoption[data-rating](the CER zone ratings)input[data-sz-bill], a[data-sz-face]segmented control (data-f, an orientation factor) andinput[data-sz-kw](whole panels: 3.08 to 13.2 kW in 440 W steps)[data-sz-cells],[data-sz-badge], outputs[data-sz="panels|gen|stc|net|save|payback"], and[data-sz-note]
STCs are kW × zone rating × deeming years, rounded down.
-
Battery planner:
.battery[data-battery]withscript[data-bt-data](perKwh,stc,factorsas[[from date, factor]],night). It contains:input[data-bt-k],[data-bt-fill](--lv),[data-bt-big]and[data-bt-tiers][data-bt-lines],[data-bt-net]and[data-bt-note]
The discount is usable kWh × factor: 100% to 14 kWh, 60% to 28 kWh and 15% to 50 kWh, rounded down.
-
Day curve:
.daycurve[data-daycurve]withscript[data-dc-data](rating). It contains:input[data-dc-kw],input[data-dc-use]and a[data-dc-bat]segmented control (kWh).dc-bars li(--gsolar used,--xexported,--bfrom the battery,--uuse) and[data-dc="gen|self|export|import"]
The battery runs twice through the day, so it starts the evening as it would on a run of sunny days.
-
Install tracker:
.install[data-install]withscript[data-in-data](leaddays),input[data-in-date], and.strows (data-offdays from the install day;.done,.now), each with[data-st-date]. -
Supporting pieces:
.plan-pair,.card,.facts(--ncolumns, or.stack),.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(the sun's dotted arc),.crumbs, a.tagand 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:
sizer(kw, panels, stcs, net, save)battery(kwh, stcs, discount, net, factor)daycurve(gen, self, exported, imported, battery)install(date)
- Helper:
ArrayStyle.refresh(root), andArrayStyle.last, the latest detail of each event, for scripts that load afterwards. It isn'twindow.Array, which would replace JavaScript's own Array.
Solar: what we build in
We checked these for Australian installers in October 2026:
- STCs: a system earns kW × zone rating × the deeming years, rounded down.
- Deeming: five years for systems installed in 2026, then one fewer each year until the scheme ends in 2030.
- Zone ratings: 1.622 (zone 1), 1.536 (zone 2), 1.382 (zone 3) and 1.185 (zone 4).
- Price: certificates trade around $37 to $40.
- The Cheaper Home Batteries Program: since 1 May 2026, the discount is STCs on usable capacity at a factor of 6.8. It's 100% to 14 kWh, 60% from 14 to 28 kWh and 15% from 28 to 50 kWh. The factor steps down every 1 January and 1 July (5.7 from January 2027) to 2.1 in late 2030. It's set by the install date.
- Accreditation: installers are accredited by Solar Accreditation Australia, and their numbers belong in the footer and on the paperwork.
- Selling: the New Energy Tech Consumer Code asks for honest selling with no high pressure, and clear written quotes that show the expected performance and payment terms. The Australian Consumer Law gives 10 business days to cancel unsolicited sales.
- Savings claims: a range, built from the customer's own bill and stated assumptions, never a guarantee.
These notes are design guidance, not legal or financial advice.
Do and don't
- Do show the price after the discounts, and the discounts themselves.
- Do give savings as a range, and say what it depends on.
- Do tell people when a smaller system, or no battery, would suit them better.
- Don't say "free", "zero bills" or "guaranteed".
- Don't call the normal step-down a limited-time offer.
- Don't put text on amber in anything but ink.
Accessibility
- AA contrast throughout (measured above), a skip link and a 3px focus ring.
- Estimate: labelled fields, a segmented control with
aria-pressed, and a labelled slider. Every result is text in a description list; the price is announced. The cell grid is decoration. - Battery: a labelled slider with its value in text. The tiers have a text key, and every figure is in the lines and the note. The drawn battery is decoration.
- Day curve: the chart is decoration. The totals are text, and "bought from the grid" is announced.
- Install tracker: an ordered list with dates and states in text.
- Testing: responsive to 360px, and tested with motion on and off, in Midday and After sunset.
How to make it yours
| Dial | Range |
|---|---|
| Accent | Cell blue (default), Volt Lane green, Kettering teal, Sunbird eucalypt. Set --panel, --panel-2, --panel-soft, --focus (plus --on-panel at night), --close-bg and --close-em. |
| Estimate | Your price per kW, panel size, tariff and feed-in assumptions, and the zones you serve. |
| Battery | Your price per kWh and typical evening use. Update the factor table if the program changes. |
| Tracker | Your steps, your distributor and your lead time. |
| Not negotiable | Prices after discounts, savings as a range, accreditation shown, no pressure selling, and the Motion switch. |



