AI answer from Opus 5 · low effort · 1 Oct 2026
9 of 9
Show the code and the answer.
Here's the complete file — save it as index.html.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Brindlebill — invoicing for freelancers</title>
<style>
:root {
--ink: #1c2024;
--muted: #55606b;
--line: #e2e6ea;
--accent: #1f5f52;
--accent-soft: #eaf3f0;
--bg: #fbfaf8;
}
* { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body {
margin: 0;
background: var(--bg);
color: var(--ink);
font: 17px/1.6 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
}
.wrap { width: 100%; max-width: 62rem; margin: 0 auto; padding: 0 1.25rem; }
section { padding: 3rem 0; border-top: 1px solid var(--line); }
h1, h2, h3 { line-height: 1.25; margin: 0 0 .6rem; }
h1 { font-size: 2rem; letter-spacing: -.02em; }
h2 { font-size: 1.5rem; }
h3 { font-size: 1.125rem; }
p { margin: 0 0 1rem; }
.muted { color: var(--muted); }
header.hero { padding: 3.5rem 0 3rem; }
.brand {
font-weight: 700; letter-spacing: .02em; text-transform: uppercase;
font-size: 1rem; color: var(--accent); margin-bottom: 1.5rem;
}
.pitch { font-size: 1.1875rem; color: var(--muted); max-width: 34rem; }
.btn {
display: inline-block; font: inherit; font-weight: 600; cursor: pointer;
background: var(--accent); color: #fff; border: 1px solid var(--accent);
padding: .875rem 1.5rem; border-radius: .5rem; text-decoration: none;
min-height: 48px; line-height: 1.4;
}
.btn:hover { background: #17483e; }
.btn:focus-visible, summary:focus-visible, .toggle button:focus-visible {
outline: 3px solid #9ccfc2; outline-offset: 2px;
}
.hero .btn { margin-top: .5rem; }
.trial-note { font-size: 1rem; margin-top: .875rem; }
.features { display: grid; gap: 1.5rem; }
.feature h3 { margin-bottom: .25rem; }
.feature p { margin: 0; color: var(--muted); }
.toggle {
display: inline-flex; gap: .25rem; padding: .25rem; margin: 0 0 1.75rem;
background: #fff; border: 1px solid var(--line); border-radius: .625rem;
}
.toggle button {
font: inherit; font-weight: 600; color: var(--muted);
background: none; border: 0; border-radius: .5rem;
padding: .625rem 1.125rem; min-height: 44px; cursor: pointer;
}
.toggle button[aria-pressed="true"] { background: var(--accent-soft); color: var(--accent); }
.plans { display: grid; gap: 1.25rem; list-style: none; padding: 0; margin: 0; }
.plan {
background: #fff; border: 1px solid var(--line);
border-radius: .75rem; padding: 1.5rem;
}
.plan.featured { border-color: var(--accent); border-width: 2px; }
.tag {
display: inline-block; font-size: 1rem; font-weight: 600; color: var(--accent);
background: var(--accent-soft); border-radius: 999px; padding: .125rem .625rem;
margin-bottom: .5rem;
}
.price { font-size: 2rem; font-weight: 700; letter-spacing: -.02em; }
.per { font-size: 1rem; font-weight: 400; color: var(--muted); }
.save { font-size: 1rem; color: var(--accent); margin: .25rem 0 1rem; min-height: 1.6em; }
.plan ul { margin: 0; padding-left: 1.25rem; color: var(--muted); }
.plan li { margin-bottom: .375rem; }
details {
background: #fff; border: 1px solid var(--line);
border-radius: .625rem; margin-bottom: .75rem;
}
summary {
cursor: pointer; font-weight: 600; padding: 1rem 1.25rem;
list-style: none; display: flex; justify-content: space-between; gap: 1rem;
}
summary::-webkit-details-marker { display: none; }
summary::after { content: "+"; color: var(--accent); font-size: 1.375rem; line-height: 1; }
details[open] summary::after { content: "–"; }
details p { padding: 0 1.25rem 1.125rem; margin: 0; color: var(--muted); }
footer { border-top: 1px solid var(--line); padding: 2rem 0 3rem; font-size: 1rem; color: var(--muted); }
@media (min-width: 40rem) {
h1 { font-size: 2.75rem; }
.features { grid-template-columns: repeat(3, 1fr); gap: 2rem; }
.plans { grid-template-columns: repeat(3, 1fr); }
section { padding: 4rem 0; }
}
</style>
</head>
<body>
<header class="hero">
<div class="wrap">
<p class="brand">Brindlebill</p>
<h1>Send an invoice today, get paid this week.</h1>
<p class="pitch">Brindlebill is small, calm invoicing software for freelancers who would rather be doing the work.</p>
<a class="btn" href="#signup">Start free trial</a>
<p class="trial-note muted">Free for 14 days. No card needed.</p>
</div>
</header>
<section aria-labelledby="features-h">
<div class="wrap">
<h2 id="features-h">What you get</h2>
<div class="features">
<div class="feature">
<h3>Invoices in a minute</h3>
<p>Pick a client, add a line or two, and send — your details and totals fill themselves in.</p>
</div>
<div class="feature">
<h3>Gentle reminders</h3>
<p>Brindlebill nudges late payers politely on your behalf, so you never have to write that email.</p>
</div>
<div class="feature">
<h3>Card and bank payments</h3>
<p>Clients pay by card or bank transfer straight from the invoice, and the money lands in your account.</p>
</div>
</div>
</div>
</section>
<section aria-labelledby="pricing-h">
<div class="wrap">
<h2 id="pricing-h">Pricing</h2>
<p class="muted">Pay yearly and get two months free.</p>
<div class="toggle" role="group" aria-label="Billing period">
<button type="button" id="btn-monthly" aria-pressed="true">Monthly</button>
<button type="button" id="btn-yearly" aria-pressed="false">Yearly</button>
</div>
<ul class="plans">
<li class="plan">
<h3>Starter</h3>
<p class="price"><span data-price="starter">$9</span> <span class="per" data-per>per month</span></p>
<p class="save" data-save="starter"></p>
<ul>
<li>5 clients</li>
<li>PDF invoices</li>
</ul>
</li>
<li class="plan featured">
<p class="tag">Most popular</p>
<h3>Pro</h3>
<p class="price"><span data-price="pro">$19</span> <span class="per" data-per>per month</span></p>
<p class="save" data-save="pro"></p>
<ul>
<li>Unlimited clients</li>
<li>Automatic reminders</li>
<li>Your own logo</li>
</ul>
</li>
<li class="plan">
<h3>Team</h3>
<p class="price"><span data-price="team">$49</span> <span class="per" data-per>per month</span></p>
<p class="save" data-save="team"></p>
<ul>
<li>Everything in Pro</li>
<li>5 seats</li>
<li>A shared client list</li>
</ul>
</li>
</ul>
</div>
</section>
<section aria-labelledby="faq-h">
<div class="wrap">
<h2 id="faq-h">Questions</h2>
<details>
<summary>Can I cancel any time?</summary>
<p>Yes. Cancel from your account page and you won't be charged again. Nothing is locked in.</p>
</details>
<details>
<summary>Do my clients need an account?</summary>
<p>No. They open a link, see the invoice and pay. They never have to sign up.</p>
</details>
<details>
<summary>Which currencies can I invoice in?</summary>
<p>You can invoice in 30 currencies, and each invoice shows the amount in your client's currency.</p>
</details>
<details>
<summary>What happens when the free trial ends?</summary>
<p>You pick a plan. If you don't, your account switches to view-only and your invoices stay safe for 90 days.</p>
</details>
</div>
</section>
<section id="signup" aria-labelledby="signup-h">
<div class="wrap">
<h2 id="signup-h">Ready when you are</h2>
<p class="muted">Set up your first invoice in about five minutes.</p>
<a class="btn" href="#signup">Start free trial</a>
</div>
</section>
<footer>
<div class="wrap">
<p>Brindlebill — invoicing for freelancers.</p>
</div>
</footer>
<script>
(function () {
var monthly = { starter: 9, pro: 19, team: 49 };
var monthlyBtn = document.getElementById('btn-monthly');
var yearlyBtn = document.getElementById('btn-yearly');
var prices = document.querySelectorAll('[data-price]');
var pers = document.querySelectorAll('[data-per]');
var saves = document.querySelectorAll('[data-save]');
function render(period) {
var yearly = period === 'yearly';
prices.forEach(function (el) {
var m = monthly[el.getAttribute('data-price')];
el.textContent = '$' + (yearly ? m * 10 : m);
});
pers.forEach(function (el) {
el.textContent = yearly ? 'per year' : 'per month';
});
saves.forEach(function (el) {
var m = monthly[el.getAttribute('data-save')];
el.textContent = yearly ? 'Two months free — you save $' + (m * 2) + ' a year.' : '';
});
monthlyBtn.setAttribute('aria-pressed', String(!yearly));
yearlyBtn.setAttribute('aria-pressed', String(yearly));
}
monthlyBtn.addEventListener('click', function () { render('monthly'); });
yearlyBtn.addEventListener('click', function () { render('yearly'); });
render('monthly');
})();
</script>
</body>
</html>A few notes on the choices:
- Yearly maths: two months free means ten months' money for twelve, so Starter $90, Pro $190, Team $490 — shown as the whole-year figure, with a line underneath saying what you save.
- Mobile: base text is 17px, the smallest text anywhere is 16px, buttons and FAQ rows are at least 44–48px tall, and the layout is one column until 640px wide.
- Headings: one
h1for the headline,h2for each section,h3for feature and plan names — no levels skipped. - FAQ uses native
<details>, so it opens and closes even with JavaScript off. The pricing switch needs JavaScript; monthly prices are in the HTML, so that's what shows if the script doesn't run. - The two "Start free trial" buttons currently point at the sign-up section — swap the
hreffor your real sign-up URL when it's ready.
- Floor2/2, 100% passed
- Middle4/4, 100% passed
- Top3/3, 100% passed
9 of 9 checks passedfloor 2/2, middle 4/4, top 3/3
- The page loads with no errors in the console
- Every section is there, with the exact plan names, prices and text
- No sideways scroll on a 375 px phone
- Nothing is loaded from outside the file
- One h1, no skipped heading levels, text 16 px or larger, enough contrast
- The page looks finished: clear hierarchy, pricing easy to compare, nothing broken
- Yearly shows $90, $190 and $490, and Monthly brings back $9, $19, $49
- Each FAQ question opens and closes from the keyboard
- Still no sideways scroll on a phone with Yearly on and every FAQ open
- Took 43 s.
- First words after 3.2 s.
- Wrote 4,355 tokens, 51 of them thinking.
- 12¢ at API prices.
All numbers.
| Time to finish | 43 s |
|---|---|
| Time to first words | 3.2 s |
| Input tokens | 2 |
| Cached tokens | 1,265 |
| Output tokens | 4,355 |
| Thinking tokens | 51 |
| Words in the answer | 1,166 |
| Price at API rates | 12¢ |



























