AI answer from Fable 5 · low effort · 30 Sep 2026
9 of 9
Show the code and the answer.
<!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: #1f2430;
--accent: #2f6f4f;
--accent-dark: #24573e;
--bg: #fafaf7;
--card: #ffffff;
--line: #e3e3dc;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
font-size: 16px;
line-height: 1.6;
color: var(--ink);
background: var(--bg);
}
.wrap { max-width: 960px; margin: 0 auto; padding: 0 20px; }
header.hero { text-align: center; padding: 64px 0 48px; }
h1 { font-size: 2.25rem; line-height: 1.2; margin-bottom: 12px; }
.pitch { font-size: 1.125rem; color: #444; margin-bottom: 24px; }
h2 { font-size: 1.5rem; margin-bottom: 24px; text-align: center; }
h3 { font-size: 1.125rem; margin-bottom: 8px; }
section { padding: 48px 0; }
.btn {
display: inline-block;
background: var(--accent);
color: #fff;
border: none;
font-size: 1rem;
font-weight: 600;
padding: 14px 28px;
border-radius: 8px;
cursor: pointer;
}
.btn:hover, .btn:focus { background: var(--accent-dark); }
.features { display: grid; gap: 20px; grid-template-columns: 1fr; }
.feature, .plan {
background: var(--card);
border: 1px solid var(--line);
border-radius: 12px;
padding: 24px;
}
/* Pricing */
.toggle {
display: flex;
justify-content: center;
align-items: center;
gap: 12px;
margin-bottom: 28px;
flex-wrap: wrap;
}
.toggle button {
font-size: 1rem;
padding: 10px 20px;
border-radius: 999px;
border: 1px solid var(--line);
background: var(--card);
cursor: pointer;
}
.toggle button[aria-pressed="true"] {
background: var(--accent);
border-color: var(--accent);
color: #fff;
font-weight: 600;
}
.save-note { font-size: 1rem; color: var(--accent-dark); text-align: center; margin-bottom: 20px; }
.plans { display: grid; gap: 20px; grid-template-columns: 1fr; }
.price { font-size: 2rem; font-weight: 700; margin: 8px 0 4px; }
.period { color: #666; margin-bottom: 16px; }
.plan ul { list-style: none; }
.plan li { padding: 6px 0; border-top: 1px solid var(--line); }
.plan li:first-child { border-top: none; }
/* FAQ */
.faq details {
background: var(--card);
border: 1px solid var(--line);
border-radius: 12px;
margin-bottom: 12px;
padding: 0 20px;
}
.faq summary {
cursor: pointer;
font-weight: 600;
padding: 16px 0;
list-style: none;
}
.faq summary::-webkit-details-marker { display: none; }
.faq summary::after { content: "+"; float: right; font-size: 1.25rem; }
.faq details[open] summary::after { content: "\2212"; }
.faq p { padding-bottom: 16px; }
.cta { text-align: center; }
footer { text-align: center; padding: 32px 0; color: #666; }
@media (min-width: 700px) {
h1 { font-size: 3rem; }
.features, .plans { grid-template-columns: repeat(3, 1fr); }
}
</style>
</head>
<body>
<header class="hero wrap">
<h1>Brindlebill</h1>
<p class="pitch">Simple invoicing for freelancers — send, remind and get paid without the paperwork.</p>
<button class="btn" type="button">Start free trial</button>
</header>
<main>
<section class="wrap" aria-labelledby="features-heading">
<h2 id="features-heading">Why Brindlebill</h2>
<div class="features">
<div class="feature">
<h3>Invoices in a minute</h3>
<p>Pick a client, add your line items and send — a polished invoice is out the door before your coffee cools.</p>
</div>
<div class="feature">
<h3>Gentle reminders</h3>
<p>Brindlebill nudges late payers politely on your behalf, so you never have to write an awkward email again.</p>
</div>
<div class="feature">
<h3>Card and bank payments</h3>
<p>Clients pay straight from the invoice by card or bank transfer, and the money lands in your account.</p>
</div>
</div>
</section>
<section class="wrap" aria-labelledby="pricing-heading">
<h2 id="pricing-heading">Pricing</h2>
<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>
<p class="save-note" id="save-note" hidden>Two months free with yearly billing.</p>
<div class="plans">
<div class="plan">
<h3>Starter</h3>
<p class="price" data-monthly="9" data-yearly="90">$9</p>
<p class="period" data-label>per month</p>
<ul>
<li>5 clients</li>
<li>PDF invoices</li>
</ul>
</div>
<div class="plan">
<h3>Pro</h3>
<p class="price" data-monthly="19" data-yearly="190">$19</p>
<p class="period" data-label>per month</p>
<ul>
<li>Unlimited clients</li>
<li>Automatic reminders</li>
<li>Your own logo</li>
</ul>
</div>
<div class="plan">
<h3>Team</h3>
<p class="price" data-monthly="49" data-yearly="490">$49</p>
<p class="period" data-label>per month</p>
<ul>
<li>Everything in Pro</li>
<li>5 seats</li>
<li>A shared client list</li>
</ul>
</div>
</div>
</section>
<section class="wrap faq" aria-labelledby="faq-heading">
<h2 id="faq-heading">FAQ</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>
</section>
<section class="wrap cta">
<h2>Ready to get paid faster?</h2>
<button class="btn" type="button">Start free trial</button>
</section>
</main>
<footer>
<p>Brindlebill — invoicing for freelancers.</p>
</footer>
<script>
(function () {
var monthlyBtn = document.getElementById('btn-monthly');
var yearlyBtn = document.getElementById('btn-yearly');
var note = document.getElementById('save-note');
var prices = document.querySelectorAll('.price');
var labels = document.querySelectorAll('[data-label]');
function setPeriod(yearly) {
monthlyBtn.setAttribute('aria-pressed', String(!yearly));
yearlyBtn.setAttribute('aria-pressed', String(yearly));
note.hidden = !yearly;
prices.forEach(function (p) {
p.textContent = '$' + (yearly ? p.dataset.yearly : p.dataset.monthly);
});
labels.forEach(function (l) {
l.textContent = yearly ? 'per year' : 'per month';
});
}
monthlyBtn.addEventListener('click', function () { setPeriod(false); });
yearlyBtn.addEventListener('click', function () { setPeriod(true); });
})();
</script>
</body>
</html>Notes on the choices: yearly prices are the full-year amounts with two months free ($90, $190, $490), the FAQ uses <details> so each question opens and closes independently, and everything is self-contained — system fonts only, no images, no libraries. Body text is 16px and headings run h1 → h2 → h3. The "Start free trial" buttons don't link anywhere yet; wrap them in an <a> or add a click handler when your sign-up URL is 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 31 s.
- First words after 2.7 s.
- Wrote 3,396 tokens, 23 of them thinking.
- 19¢ at API prices.
All numbers.
| Time to finish | 31 s |
|---|---|
| Time to first words | 2.7 s |
| Input tokens | 2 |
| Cached tokens | 1,266 |
| Output tokens | 3,396 |
| Thinking tokens | 23 |
| Words in the answer | 869 |
| Price at API rates | 19¢ |




























