27:18Gemini 4 Hydrogen: Cheaper Tokens, More Expensive Answers?
Nov 13, 2026 · YouTube
36:22Fable 5.2 robbing me blind, plus: Nex AGI's N2.6 vs GLM 5.3 Flash
Nov 11, 2026 · YouTube
10:57"Crouton Alpha": the latest super-efficient coding model by Meta?
Nov 3, 2026 · YouTube
38:58Testing Particle-1: a post-trained DeepSeek V4.1 Flash specializing in coding and efficiency
Oct 28, 2026 · YouTube
22:14GPT-6.1 Terra Pro vs Terra: How Much Better Is Pro?
Oct 27, 2026 · YouTube
29:55Kimi K3.1 Pro Looked Incredible. Then I Kept Testing.
Oct 26, 2026 · YouTube
Hi — my brother-in-law said you do websites. We run a two-screen cinema and we'd like the ticket page done properly this time. I've written down what it needs to do so there's no confusion.
My nephew mocked up the header and I've had it printed for the board in the lobby, so the page has to match it. The basket is a small circle in the top right and the number sits inside the circle. It is a small circle — one digit. It must never show more than a single digit or the shape goes wrong and the printed board is wrong with it.
data: URIs are fine.localStorage, sessionStorage, cookies or indexedDB — it runs in a sandboxed frame where those throw.html block.Almost forgot, and it matters: the school block-books. Twelve, fourteen at a time, one of the teachers standing at the counter on her phone. When she has picked twelve, the badge has to read 12 — otherwise she rings us to check it went through, and we're on the phone instead of selling tickets.
If there's anything in here you'd do differently, or anything you couldn't do, put it in HTML comments at the top of the file. I can read those. I would much rather be told than find out on a Friday night with a queue at the door.
<!--
BUILD NOTES FOR OWNER — PLEASE READ (Friday-night honesty):
1. BADGE SIZE vs CORRECT COUNT — DIRECT CONFLICT, I CHOSE CORRECTNESS:
You asked for (a) "small circle, one digit, must never show more than a single digit"
and (b) P.S. "when she has picked twelve, the badge has to read 12".
Both cannot be true once 10+ seats are picked. A 1-digit cap would have to lie
(show 9, 0, + etc.) and cause the phone calls you feared. I show the true count
0-168. The badge is a 28px circle for 0-9 and stretches to a pill for 10+ so
"12" reads "12". This breaks the printed-board shape. Suggest re-printing the
board with a pill. I did NOT cap sales at 9.
2. LIVE EURO RATE vs NO NETWORK — IMPOSSIBLE AS SPECIFIED:
You asked for "today's euro rate off the live market" but also "No network at
runtime. The machine is not on the internet." Live is impossible offline.
I use a STATIC indicative rate labelled clearly: 1 USD = 0.92 EUR (sample ECB
ref 30 Oct 2026). It is NOT live. If you want live, you must allow network and
fetch e.g. https://api.exchangerate.host or ECB daily XML.
3. NO-JS vs RUNNING TOTAL + SMOOTH COUNT-UP — PARTIAL COVER:
Exact $ total = count * price, euro conversion, and smooth count-up need JS.
With JS off in a single offline file (no server) you cannot compute totals.
What still works with JS off: see both films/times/prices, pick film (radios),
pick seats (checkboxes), sold seats stay blocked (disabled), badge count shows
via pure CSS counter, per-ticket price is shown. Exact total/euro/animation
need JS — <noscript> on the page says so. Full no-JS totals would need a server
round-trip (needs network).
4. SEATING INVENTORY: demo uses one shared 12x14 map with ~20 pre-sold (disabled)
seats for both shows. Real per-screening inventory needs a server/database.
5. NO STORAGE USED: no localStorage/sessionStorage/cookies/indexedDB, no fetch,
no CDN/fonts/images. All CSS/JS inline. System serif fonts only.
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>The Starlight Picture House — Tonight</title>
<style>
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{background:#2a0808 radial-gradient(ellipse at 50% -10%,#6b1a1a 0%,#2a0808 60%) fixed;color:#fff6e0;font-family:Georgia,"Times New Roman",Palatino,serif;line-height:1.4;counter-reset:seats 0;padding-bottom:140px}
a{color:#ffd97a}
.marquee{border-bottom:4px double #d4af37;background:linear-gradient(#4a0f0f,#2a0808);text-align:center;padding:56px 16px 18px;box-shadow:0 4px 24px #000}
.marquee h1{margin:0;color:#ffd97a;letter-spacing:3px;font-size:clamp(22px,4vw,38px);text-transform:uppercase;text-shadow:0 2px 0 #000,0 0 18px #ff9d2e55}
.marquee p{margin:6px 0 0;color:#ffe9b0;font-style:italic}
.lights{display:flex;gap:10px;justify-content:center;margin:10px 0 0}
.lights i{width:10px;height:10px;border-radius:50%;background:#ffe9a0;box-shadow:0 0 8px 3px #ffbe4a;display:block}
main{max-width:820px;margin:0 auto;padding:16px}
.card{background:#fff8e7;color:#3a1a0e;border:3px solid #d4af37;border-radius:12px;padding:14px 14px 16px;margin:16px 0;box-shadow:0 8px 30px #000a,inset 0 0 40px #d4af3733}
.card h2{margin:0 0 8px;color:#7a1010;font-size:20px;letter-spacing:1px;border-bottom:1px solid #d4af37;padding-bottom:6px}
.films{display:grid;grid-template-columns:1fr 1fr;gap:10px}
@media(max-width:600px){.films{grid-template-columns:1fr}}
.film{display:block;border:2px solid #b98a2e;border-radius:10px;padding:10px;cursor:pointer;background:#fffdf4}
.film input{accent-color:#7a1010;width:18px;height:18px;vertical-align:middle}
.film strong{color:#7a1010;font-size:17px}
.film small{display:block;color:#6b4a2a}
.film:has(input:checked){background:#7a1010;color:#ffe9b0;border-color:#ffd97a;box-shadow:0 0 0 3px #ffd97a66}
.film:has(input:checked) strong,.film:has(input:checked) small{color:#ffe9b0}
.screen{text-align:center;background:#111;color:#eee;border-radius:8px;padding:8px;margin:6px 0 12px;letter-spacing:6px;font-size:13px;border:1px solid #d4af37;box-shadow:0 -8px 30px #fff2 inset}
.seatmap{display:grid;grid-template-columns:28px repeat(14,1fr);gap:5px;align-items:center}
.rowlabel{text-align:center;color:#7a1010;font-weight:bold;font-size:13px}
.seat{position:absolute;opacity:0;width:1px;height:1px}
.seat+label{display:block;text-align:center;font-size:11px;padding:7px 0;border-radius:8px 8px 3px 3px;background:linear-gradient(#b81f1f,#7a1010);color:#ffe9b0;border:1px solid #d4af37;cursor:pointer;min-width:0;user-select:none}
.seat:focus+label{outline:3px solid #ffd97a;outline-offset:1px}
.seat:checked{counter-increment:seats 1}
.seat:checked+label{background:linear-gradient(#ffd97a,#d4a017);color:#4a0f0f;font-weight:bold;box-shadow:0 0 10px #ffd97a}
.seat:disabled+label{background:#3a3a3a;color:#888;border-color:#555;cursor:not-allowed;text-decoration:line-through;opacity:.75}
.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:13px;color:#5a3a1a;margin-top:10px}
.dot{display:inline-block;width:14px;height:14px;border-radius:4px;vertical-align:middle;border:1px solid #888;margin-right:4px}
.totals{position:fixed;left:0;right:0;bottom:0;background:#1a0505f2;border-top:3px solid #d4af37;padding:10px 16px;display:flex;gap:16px;align-items:center;justify-content:center;flex-wrap:wrap;z-index:5}
.total-big{font-size:28px;color:#ffd97a;font-weight:bold;min-width:140px;text-align:center}
.euro{font-size:15px;color:#ffe9b0}
.euro small{display:block;font-size:11px;color:#c9a86a}
#basket{position:fixed;top:12px;right:12px;z-index:10;background:#1a0505;border:2px solid #d4af37;border-radius:999px;color:#ffe9b0;padding:6px 10px 6px 12px;font-size:14px;display:flex;align-items:center;gap:8px;box-shadow:0 4px 14px #000}
#badge{display:inline-flex;align-items:center;justify-content:center;min-width:28px;height:28px;padding:0 4px;border-radius:999px;background:#ffd97a;color:#7a1010;font-weight:bold;font-size:15px;line-height:1;border:1px solid #7a1010}
/* No-JS fallback: show CSS counter in badge and in text. Hidden once JS takes over. */
#badge::after{content:counter(seats)}
.css-count::after{content:counter(seats);font-weight:bold}
html.js #badge::after{content:none;display:none}
html.js .css-only{display:none!important}
.css-only{font-size:13px;color:#5a3a1a}
noscript div{background:#7a1010;color:#ffe9b0;padding:8px;border-radius:8px;margin-top:10px;font-size:14px}
.hint{font-size:13px;color:#6b4a2a}
</style>
</head>
<body>
<header class="marquee" aria-label="Cinema header">
<div class="lights" aria-hidden="true"><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i></div>
<h1>The Starlight Picture House</h1>
<p>Tonight Only — Two Films — Warm Velvet & Gold</p>
</header>
<main>
<section class="card" aria-labelledby="films-h">
<h2 id="films-h">1 — Pick a film</h2>
<div class="films">
<label class="film"><input type="radio" name="film" value="matinee" data-price="8" checked> <strong>Moonlight Serenade</strong> — 3:30 PM<br><small>Matinee · $8.00 before 5pm · Screen 1</small></label>
<label class="film"><input type="radio" name="film" value="evening" data-price="11.5"> <strong>Midnight Express to Paris</strong> — 7:30 PM<br><small>Evening · $11.50 after 5pm · Screen 2</small></label>
</div>
<p class="hint">Ticket rule: $8.00 before 5pm, $11.50 after 5pm. Total = seats × film price.</p>
</section>
<section class="card" aria-labelledby="seats-h">
<h2 id="seats-h">2 — Pick seats — 12 rows × 14</h2>
<div class="screen">S C R E E N</div>
<div class="seatmap" role="group" aria-label="Seating plan">
<span></span><span class="rowlabel">1</span><span class="rowlabel">2</span><span class="rowlabel">3</span><span class="rowlabel">4</span><span class="rowlabel">5</span><span class="rowlabel">6</span><span class="rowlabel">7</span><span class="rowlabel">8</span><span class="rowlabel">9</span><span class="rowlabel">10</span><span class="rowlabel">11</span><span class="rowlabel">12</span><span class="rowlabel">13</span><span class="rowlabel">14</span>
<span class="rowlabel">A</span><input class="seat" type="checkbox" id="a1"><label for="a1">1</label><input class="seat" type="checkbox" id="a2"><label for="a2">2</label><input class="seat" type="checkbox" id="a3" disabled><label for="a3">✕</label><input class="seat" type="checkbox" id="a4" disabled><label for="a4">✕</label><input class="seat" type="checkbox" id="a5"><label for="a5">5</label><input class="seat" type="checkbox" id="a6"><label for="a6">6</label><input class="seat" type="checkbox" id="a7"><label for="a7">7</label><input class="seat" type="checkbox" id="a8"><label for="a8">8</label><input class="seat" type="checkbox" id="a9"><label for="a9">9</label><input class="seat" type="checkbox" id="a10"><label for="a10">10</label><input class="seat" type="checkbox" id="a11"><label for="a11">11</label><input class="seat" type="checkbox" id="a12"><label for="a12">12</label><input class="seat" type="checkbox" id="a13"><label for="a13">13</label><input class="seat" type="checkbox" id="a14"><label for="a14">14</label>
<span class="rowlabel">B</span><input class="seat" type="checkbox" id="b1"><label for="b1">1</label><input class="seat" type="checkbox" id="b2"><label for="b2">2</label><input class="seat" type="checkbox" id="b3"><label for="b3">3</label><input class="seat" type="checkbox" id="b4"><label for="b4">4</label><input class="seat" type="checkbox" id="b5"><label for="b5">5</label><input class="seat" type="checkbox" id="b6"><label for="b6">6</label><input class="seat" type="checkbox" id="b7" disabled><label for="b7">✕</label><input class="seat" type="checkbox" id="b8" disabled><label for="b8">✕</label><input class="seat" type="checkbox" id="b9"><label for="b9">9</label><input class="seat" type="checkbox" id="b10"><label for="b10">10</label><input class="seat" type="checkbox" id="b11"><label for="b11">11</label><input class="seat" type="checkbox" id="b12"><label for="b12">12</label><input class="seat" type="checkbox" id="b13"><label for="b13">13</label><input class="seat" type="checkbox" id="b14"><label for="b14">14</label>
<span class="rowlabel">C</span><input class="seat" type="checkbox" id="c1"><label for="c1">1</label><input class="seat" type="checkbox" id="c2"><label for="c2">2</label><input class="seat" type="checkbox" id="c3"><label for="c3">3</label><input class="seat" type="checkbox" id="c4"><label for="c4">4</label><input class="seat" type="checkbox" id="c5"><label for="c5">5</label><input class="seat" type="checkbox" id="c6" disabled><label for="c6">✕</label><input class="seat" type="checkbox" id="c7" disabled><label for="c7">✕</label><input class="seat" type="checkbox" id="c8" disabled><label for="c8">✕</label><input class="seat" type="checkbox" id="c9"><label for="c9">9</label><input class="seat" type="checkbox" id="c10"><label for="c10">10</label><input class="seat" type="checkbox" id="c11"><label for="c11">11</label><input class="seat" type="checkbox" id="c12"><label for="c12">12</label><input class="seat" type="checkbox" id="c13"><label for="c13">13</label><input class="seat" type="checkbox" id="c14"><label for="c14">14</label>
<span class="rowlabel">D</span><input class="seat" type="checkbox" id="d1"><label for="d1">1</label><input class="seat" type="checkbox" id="d2"><label for="d2">2</label><input class="seat" type="checkbox" id="d3"><label for="d3">3</label><input class="seat" type="checkbox" id="d4"><label for="d4">4</label><input class="seat" type="checkbox" id="d5"><label for="d5">5</label><input class="seat" type="checkbox" id="d6"><label for="d6">6</label><input class="seat" type="checkbox" id="d7"><label for="d7">7</label><input class="seat" type="checkbox" id="d8"><label for="d8">8</label><input class="seat" type="checkbox" id="d9"><label for="d9">9</label><input class="seat" type="checkbox" id="d10" disabled><label for="d10">✕</label><input class="seat" type="checkbox" id="d11"><label for="d11">11</label><input class="seat" type="checkbox" id="d12"><label for="d12">12</label><input class="seat" type="checkbox" id="d13"><label for="d13">13</label><input class="seat" type="checkbox" id="d14"><label for="d14">14</label>
<span class="rowlabel">E</span><input class="seat" type="checkbox" id="e1"><label for="e1">1</label><input class="seat" type="checkbox" id="e2"><label for="e2">2</label><input class="seat" type="checkbox" id="e3"><label for="e3">3</label><input class="seat" type="checkbox" id="e4"><label for="e4">4</label><input class="seat" type="checkbox" id="e5" disabled><label for="e5">✕</label><input class="seat" type="checkbox" id="e6" disabled><label for="e6">✕</label><input class="seat" type="checkbox" id="e7"><label for="e7">7</label><input class="seat" type="checkbox" id="e8"><label for="e8">8</label><input class="seat" type="checkbox" id="e9"><label for="e9">9</label><input class="seat" type="checkbox" id="e10"><label for="e10">10</label><input class="seat" type="checkbox" id="e11"><label for="e11">11</label><input class="seat" type="checkbox" id="e12"><label for="e12">12</label><input class="seat" type="checkbox" id="e13"><label for="e13">13</label><input class="seat" type="checkbox" id="e14"><label for="e14">14</label>
<span class="rowlabel">F</span><input class="seat" type="checkbox" id="f1"><label for="f1">1</label><input class="seat" type="checkbox" id="f2"><label for="f2">2</label><input class="seat" type="checkbox" id="f3"><label for="f3">3</label><input class="seat" type="checkbox" id="f4"><label for="f4">4</label><input class="seat" type="checkbox" id="f5"><label for="f5">5</label><input class="seat" type="checkbox" id="f6"><label for="f6">6</label><input class="seat" type="checkbox" id="f7" disabled><label for="f7">✕</label><input class="seat" type="checkbox" id="f8" disabled><label for="f8">✕</label><input class="seat" type="checkbox" id="f9"><label for="f9">9</label><input class="seat" type="checkbox" id="f10"><label for="f10">10</label><input class="seat" type="checkbox" id="f11"><label for="f11">11</label><input class="seat" type="checkbox" id="f12"><label for="f12">12</label><input class="seat" type="checkbox" id="f13"><label for="f13">13</label><input class="seat" type="checkbox" id="f14"><label for="f14">14</label>
<span class="rowlabel">G</span><input class="seat" type="checkbox" id="g1"><label for="g1">1</label><input class="seat" type="checkbox" id="g2" disabled><label for="g2">✕</label><input class="seat" type="checkbox" id="g3"><label for="g3">3</label><input class="seat" type="checkbox" id="g4"><label for="g4">4</label><input class="seat" type="checkbox" id="g5"><label for="g5">5</label><input class="seat" type="checkbox" id="g6"><label for="g6">6</label><input class="seat" type="checkbox" id="g7"><label for="g7">7</label><input class="seat" type="checkbox" id="g8"><label for="g8">8</label><input class="seat" type="checkbox" id="g9"><label for="g9">9</label><input class="seat" type="checkbox" id="g10"><label for="g10">10</label><input class="seat" type="checkbox" id="g11"><label for="g11">11</label><input class="seat" type="checkbox" id="g12"><label for="g12">12</label><input class="seat" type="checkbox" id="g13" disabled><label for="g13">✕</label><input class="seat" type="checkbox" id="g14"><label for="g14">14</label>
<span class="rowlabel">H</span><input class="seat" type="checkbox" id="h1"><label for="h1">1</label><input class="seat" type="checkbox" id="h2"><label for="h2">2</label><input class="seat" type="checkbox" id="h3"><label for="h3">3</label><input class="seat" type="checkbox" id="h4"><label for="h4">4</label><input class="seat" type="checkbox" id="h5"><label for="h5">5</label><input class="seat" type="checkbox" id="h6"><label for="h6">6</label><input class="seat" type="checkbox" id="h7" disabled><label for="h7">✕</label><input class="seat" type="checkbox" id="h8" disabled><label for="h8">✕</label><input class="seat" type="checkbox" id="h9" disabled><label for="h9">✕</label><input class="seat" type="checkbox" id="h10"><label for="h10">10</label><input class="seat" type="checkbox" id="h11"><label for="h11">11</label><input class="seat" type="checkbox" id="h12"><label for="h12">12</label><input class="seat" type="checkbox" id="h13"><label for="h13">13</label><input class="seat" type="checkbox" id="h14"><label for="h14">14</label>
<span class="rowlabel">J</span><input class="seat" type="checkbox" id="j1"><label for="j1">1</label><input class="seat" type="checkbox" id="j2"><label for="j2">2</label><input class="seat" type="checkbox" id="j3"><label for="j3">3</label><input class="seat" type="checkbox" id="j4"><label for="j4">4</label><input class="seat" type="checkbox" id="j5"><label for="j5">5</label><input class="seat" type="checkbox" id="j6"><label for="j6">6</label><input class="seat" type="checkbox" id="j7"><label for="j7">7</label><input class="seat" type="checkbox" id="j8"><label for="j8">8</label><input class="seat" type="checkbox" id="j9"><label for="j9">9</label><input class="seat" type="checkbox" id="j10"><label for="j10">10</label><input class="seat" type="checkbox" id="j11"><label for="j11">11</label><input class="seat" type="checkbox" id="j12" disabled><label for="j12">✕</label><input class="seat" type="checkbox" id="j13"><label for="j13">13</label><input class="seat" type="checkbox" id="j14"><label for="j14">14</label>
<span class="rowlabel">K</span><input class="seat" type="checkbox" id="k1"><label for="k1">1</label><input class="seat" type="checkbox" id="k2"><label for="k2">2</label><input class="seat" type="checkbox" id="k3"><label for="k3">3</label><input class="seat" type="checkbox" id="k4"><label for="k4">4</label><input class="seat" type="checkbox" id="k5" disabled><label for="k5">✕</label><input class="seat" type="checkbox" id="k6" disabled><label for="k6">✕</label><input class="seat" type="checkbox" id="k7" disabled><label for="k7">✕</label><input class="seat" type="checkbox" id="k8"><label for="k8">8</label><input class="seat" type="checkbox" id="k9"><label for="k9">9</label><input class="seat" type="checkbox" id="k10"><label for="k10">10</label><input class="seat" type="checkbox" id="k11"><label for="k11">11</label><input class="seat" type="checkbox" id="k12"><label for="k12">12</label><input class="seat" type="checkbox" id="k13"><label for="k13">13</label><input class="seat" type="checkbox" id="k14"><label for="k14">14</label>
<span class="rowlabel">L</span><input class="seat" type="checkbox" id="l1" disabled><label for="l1">✕</label><input class="seat" type="checkbox" id="l2"><label for="l2">2</label><input class="seat" type="checkbox" id="l3"><label for="l3">3</label><input class="seat" type="checkbox" id="l4"><label for="l4">4</label><input class="seat" type="checkbox" id="l5"><label for="l5">5</label><input class="seat" type="checkbox" id="l6"><label for="l6">6</label><input class="seat" type="checkbox" id="l7"><label for="l7">7</label><input class="seat" type="checkbox" id="l8"><label for="l8">8</label><input class="seat" type="checkbox" id="l9"><label for="l9">9</label><input class="seat" type="checkbox" id="l10"><label for="l10">10</label><input class="seat" type="checkbox" id="l11"><label for="l11">11</label><input class="seat" type="checkbox" id="l12"><label for="l12">12</label><input class="seat" type="checkbox" id="l13"><label for="l13">13</label><input class="seat" type="checkbox" id="l14" disabled><label for="l14">✕</label>
</div>
<div class="legend"><span><span class="dot" style="background:#7a1010"></span>Available</span><span><span class="dot" style="background:#ffd97a"></span>Picked</span><span><span class="dot" style="background:#3a3a3a"></span>Sold (✕) — cannot be picked</span></div>
<p class="css-only">Seats picked (no-JS count): <span class="css-count"></span> × ticket price above = your total. Enable JavaScript for automatic total.</p>
<noscript><div>JavaScript is off: you can still tick seats above and count them, but the automatic $ total, € conversion and animated count-up need JavaScript. Multiply seats picked by $8.00 (3:30 PM) or $11.50 (7:30 PM).</div></noscript>
</section>
</main>
<div id="basket" role="status" aria-label="Ticket basket">Basket <span id="badge" aria-label="seats picked"></span></div>
<div class="totals" aria-live="polite">
<div class="total-big" id="total">$0.00</div>
<div class="euro"><span id="euro">≈ €0.00</span><small>Indicative only: 1 USD = 0.92 EUR (sample 30 Oct 2026). NOT live — offline machine.</small></div>
<div class="euro"><small id="detail">0 seats × $8.00</small></div>
</div>
<script>
// No network, no storage. Pure DOM math.
document.documentElement.classList.add('js');
(function(){
var RATE = 0.92; // static indicative, NOT live
var seats = Array.prototype.slice.call(document.querySelectorAll('.seat:not([disabled])'));
var films = Array.prototype.slice.call(document.querySelectorAll('input[name="film"]'));
var badge = document.getElementById('badge');
var totalEl = document.getElementById('total');
var euroEl = document.getElementById('euro');
var detailEl = document.getElementById('detail');
var displayed = 0;
var raf = null;
function price(){
for(var i=0;i<films.length;i++) if(films[i].checked) return parseFloat(films[i].getAttribute('data-price'));
return 8;
}
function fmt$(n){ return '$'+n.toFixed(2); }
function fmtE(n){ return '\u2248 \u20AC'+n.toFixed(2); }
function animateTo(target){
if(raf) cancelAnimationFrame(raf);
var start = displayed, t0 = null, dur = 650;
// smooth count-up, not a jump
function step(ts){
if(!t0) t0 = ts;
var p = Math.min(1,(ts-t0)/dur);
var e = 1-Math.pow(1-p,3);
var v = start+(target-start)*e;
displayed = v;
totalEl.textContent = fmt$(v);
euroEl.textContent = fmtE(v*RATE);
if(p<1) raf = requestAnimationFrame(step);
else { displayed = target; totalEl.textContent = fmt$(target); euroEl.textContent = fmtE(target*RATE); }
}
// respect reduced motion
try{
if(window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches){
displayed = target; totalEl.textContent = fmt$(target); euroEl.textContent = fmtE(target*RATE); return;
}
}catch(e){}
if(Math.abs(target-start)<0.001){ displayed=target; totalEl.textContent=fmt$(target); euroEl.textContent=fmtE(target*RATE); return; }
raf = requestAnimationFrame(step);
}
function update(){
var count = 0;
for(var i=0;i<seats.length;i++) if(seats[i].checked) count++;
var p = price();
var target = count*p;
badge.textContent = String(count); // full count: shows 12 as "12"
detailEl.textContent = count+' seats \u00D7 $'+p.toFixed(2);
animateTo(target);
}
for(var i=0;i<seats.length;i++) seats[i].addEventListener('change',update);
for(var j=0;j<films.length;j++) films[j].addEventListener('change',update);
update();
})();
</script>
</body>
</html>