← back to Boomer Calculator
Replace hardcoded calculator answers with real validated calculations
91a9312c9e9d64206ede237db63f4a82c87474f7 · 2026-09-11 09:39:25 -0700 · Steve Abrams
Files touched
M components/BMICalculator.tsxM components/MortgageCalculator.tsxM components/ScientificCalculator.tsxM components/TipCalculator.tsxA lib/calculations.tsM out/404.htmlR100 out/_next/static/GqVRgqKrCqNNbhALr1lKf/_buildManifest.js out/_next/static/_2SGBk7EQqSWs9NeyvHFM/_buildManifest.jsR100 out/_next/static/GqVRgqKrCqNNbhALr1lKf/_ssgManifest.js out/_next/static/_2SGBk7EQqSWs9NeyvHFM/_ssgManifest.jsA out/_next/static/chunks/app/page-1dfce1602fdbe058.jsD out/_next/static/chunks/app/page-aad68d69a2ad4add.jsD out/_next/static/css/67036131b6ae7bc2.cssA out/_next/static/css/dbecb8d230e421c8.cssM out/index.htmlM out/privacy.htmlM out/support.htmlA tests/calculations.cjsA tests/calculator-ui.cjsM verification/TK-11230/calculator/browser-proof.jsonA verification/TK-11230/calculator/chrome-desktop-arithmetic.pngA verification/TK-11230/calculator/chrome-desktop-tip.pngA verification/TK-11230/calculator/chrome-touch-arithmetic.pngA verification/TK-11230/calculator/chrome-touch-tip.pngA verification/TK-11230/calculator/e2e-proof.jsonA verification/TK-11230/calculator/video/1577b22c47324d6c80bd83c3da6450c1.webmA verification/TK-11230/calculator/video/4902d1adbfcda26eb759a7ca983ebe59.webmA verification/TK-11230/calculator/video/7ea3fa42c7246c5f4b9f05a0da6dda18.webmA verification/TK-11230/calculator/video/b5e0b44ab1f0750156d18979f3e738fd.webmA verification/TK-11230/calculator/video/cbd01281c9e46ad314463a7fbcd7f38a.webm
Diff
commit 91a9312c9e9d64206ede237db63f4a82c87474f7
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Fri Sep 11 09:39:25 2026 -0700
Replace hardcoded calculator answers with real validated calculations
---
components/BMICalculator.tsx | 73 ++++++-----------
components/MortgageCalculator.tsx | 62 +++++++-------
components/ScientificCalculator.tsx | 44 ++++------
components/TipCalculator.tsx | 60 ++++++--------
lib/calculations.ts | 90 +++++++++++++++++++++
out/404.html | 2 +-
.../_buildManifest.js | 0
.../_ssgManifest.js | 0
.../static/chunks/app/page-1dfce1602fdbe058.js | 1 +
.../static/chunks/app/page-aad68d69a2ad4add.js | 1 -
out/_next/static/css/67036131b6ae7bc2.css | 3 -
out/_next/static/css/dbecb8d230e421c8.css | 3 +
out/index.html | 2 +-
out/privacy.html | 2 +-
out/support.html | 2 +-
tests/calculations.cjs | 37 +++++++++
tests/calculator-ui.cjs | 54 +++++++++++++
.../TK-11230/calculator/browser-proof.json | 2 +-
.../calculator/chrome-desktop-arithmetic.png | Bin 0 -> 373230 bytes
.../TK-11230/calculator/chrome-desktop-tip.png | Bin 0 -> 394266 bytes
.../calculator/chrome-touch-arithmetic.png | Bin 0 -> 115767 bytes
.../TK-11230/calculator/chrome-touch-tip.png | Bin 0 -> 139409 bytes
verification/TK-11230/calculator/e2e-proof.json | 65 +++++++++++++++
.../video/1577b22c47324d6c80bd83c3da6450c1.webm | Bin 0 -> 974422 bytes
.../video/4902d1adbfcda26eb759a7ca983ebe59.webm | Bin 0 -> 328549 bytes
.../video/7ea3fa42c7246c5f4b9f05a0da6dda18.webm | Bin 0 -> 617336 bytes
.../video/b5e0b44ab1f0750156d18979f3e738fd.webm | Bin 0 -> 185747 bytes
.../video/cbd01281c9e46ad314463a7fbcd7f38a.webm | Bin 0 -> 233202 bytes
28 files changed, 350 insertions(+), 153 deletions(-)
diff --git a/components/BMICalculator.tsx b/components/BMICalculator.tsx
index 9bd3be3..6466c12 100644
--- a/components/BMICalculator.tsx
+++ b/components/BMICalculator.tsx
@@ -1,39 +1,32 @@
'use client'
import { useState } from 'react'
+import { bodyMassIndex, readNumber } from '@/lib/calculations'
export default function BMICalculator() {
const [weight, setWeight] = useState('')
const [height, setHeight] = useState('')
const [unit, setUnit] = useState<'metric' | 'imperial'>('imperial')
const [result, setResult] = useState<string | null>(null)
- const [celebrating, setCelebrating] = useState(false)
+ const [error, setError] = useState('')
const calculateBMI = () => {
- setCelebrating(true)
- setTimeout(() => {
- setResult('67')
- setTimeout(() => setCelebrating(false), 2000)
- }, 800)
+ setError('')
+ setResult(null)
+ try {
+ setResult(bodyMassIndex(readNumber(weight, 'weight'), readNumber(height, 'height'), unit).toFixed(1))
+ } catch (err) {
+ setError((err as Error).message)
+ }
}
const reset = () => {
setWeight('')
setHeight('')
setResult(null)
- setCelebrating(false)
- }
-
- const getBMICategory = () => {
- return {
- category: 'PERFECT',
- color: 'text-purple-600',
- message: 'You are exactly 67!',
- }
+ setError('')
}
- const category = result ? getBMICategory() : null
-
return (
<div className="bg-white rounded-xl shadow-2xl p-3 sm:p-4 max-w-2xl mx-auto">
<h2 className="text-2xl sm:text-3xl md:text-4xl font-bold text-gray-800 mb-3 text-center">
@@ -45,11 +38,7 @@ export default function BMICalculator() {
<button
onClick={(e) => {
e.preventDefault();
- setUnit('imperial');
- }}
- onTouchEnd={(e) => {
- e.preventDefault();
- setUnit('imperial');
+ setUnit('imperial'); reset();
}}
className={`px-4 sm:px-6 py-2 sm:py-3 rounded-lg font-bold text-base sm:text-lg shadow-lg select-none cursor-pointer ${
unit === 'imperial'
@@ -63,11 +52,7 @@ export default function BMICalculator() {
<button
onClick={(e) => {
e.preventDefault();
- setUnit('metric');
- }}
- onTouchEnd={(e) => {
- e.preventDefault();
- setUnit('metric');
+ setUnit('metric'); reset();
}}
className={`px-4 sm:px-6 py-2 sm:py-3 rounded-lg font-bold text-base sm:text-lg shadow-lg select-none cursor-pointer ${
unit === 'metric'
@@ -82,26 +67,26 @@ export default function BMICalculator() {
<div className="grid grid-cols-2 gap-2 sm:gap-3">
<div>
- <label className="block text-sm sm:text-base font-bold text-gray-700 mb-1">
+ <label htmlFor="weight" className="block text-sm sm:text-base font-bold text-gray-700 mb-1">
Weight ({unit === 'imperial' ? 'lbs' : 'kg'})
</label>
<input
type="number"
- value={weight}
- onChange={(e) => setWeight(e.target.value)}
+ id="weight" value={weight}
+ onChange={(e) => { setWeight(e.target.value); setResult(null); setError('') }}
placeholder={unit === 'imperial' ? '150' : '68'}
className="w-full p-2 sm:p-3 border-3 border-gray-300 rounded-lg focus:border-purple-500 focus:outline-none text-lg sm:text-xl font-bold"
/>
</div>
<div>
- <label className="block text-sm sm:text-base font-bold text-gray-700 mb-1">
+ <label htmlFor="height" className="block text-sm sm:text-base font-bold text-gray-700 mb-1">
Height ({unit === 'imperial' ? 'in' : 'cm'})
</label>
<input
type="number"
- value={height}
- onChange={(e) => setHeight(e.target.value)}
+ id="height" value={height}
+ onChange={(e) => { setHeight(e.target.value); setResult(null); setError('') }}
placeholder={unit === 'imperial' ? '67' : '170'}
className="w-full p-2 sm:p-3 border-3 border-gray-300 rounded-lg focus:border-purple-500 focus:outline-none text-lg sm:text-xl font-bold"
/>
@@ -109,20 +94,16 @@ export default function BMICalculator() {
</div>
</div>
- {result && category && (
+ {error && <p role="alert" className="mb-3 text-center text-red-700">{error}</p>}
+
+ {result !== null && (
<div className="mb-3 p-3 sm:p-4 bg-gradient-to-r from-purple-50 to-pink-50 rounded-lg border-3 border-purple-200">
<p className="text-center text-gray-700 mb-1 text-sm sm:text-base font-bold">Your BMI:</p>
<p className="text-center text-3xl sm:text-4xl md:text-5xl font-bold text-purple-600">
{result}
</p>
- <div className="mt-2 text-center">
- <p className={`text-lg sm:text-xl font-bold ${category.color}`}>
- {category.category}
- </p>
- <p className="text-sm sm:text-base text-gray-600 mt-1">{category.message}</p>
- </div>
<div className="mt-2 text-center text-sm sm:text-base text-gray-600 font-semibold">
- ✨ Perfect! ✨
+ A numerical estimate, not a diagnosis.
</div>
</div>
)}
@@ -133,10 +114,6 @@ export default function BMICalculator() {
e.preventDefault();
calculateBMI();
}}
- onTouchEnd={(e) => {
- e.preventDefault();
- calculateBMI();
- }}
className="flex-1 bg-gradient-to-r from-purple-500 to-pink-500 text-white py-3 sm:py-4 rounded-lg font-bold text-lg sm:text-xl shadow-lg select-none cursor-pointer"
style={{ WebkitTapHighlightColor: 'transparent' }}
>
@@ -147,10 +124,6 @@ export default function BMICalculator() {
e.preventDefault();
reset();
}}
- onTouchEnd={(e) => {
- e.preventDefault();
- reset();
- }}
className="flex-1 bg-gray-200 py-3 sm:py-4 rounded-lg font-bold text-lg sm:text-xl select-none cursor-pointer shadow-lg"
style={{ WebkitTapHighlightColor: 'transparent' }}
>
@@ -159,7 +132,7 @@ export default function BMICalculator() {
</div>
<div className="text-center text-xs sm:text-sm text-gray-600 font-semibold">
- <p>Easy BMI Calculator</p>
+ <p>BMI = weight in kilograms ÷ height in metres squared.</p>
</div>
</div>
)
diff --git a/components/MortgageCalculator.tsx b/components/MortgageCalculator.tsx
index 7161969..a5085d0 100644
--- a/components/MortgageCalculator.tsx
+++ b/components/MortgageCalculator.tsx
@@ -1,6 +1,7 @@
'use client'
import { useState } from 'react'
+import { monthlyPayment, readNumber } from '@/lib/calculations'
export default function MortgageCalculator() {
const [homePrice, setHomePrice] = useState('')
@@ -8,14 +9,17 @@ export default function MortgageCalculator() {
const [loanTerm, setLoanTerm] = useState('30')
const [interestRate, setInterestRate] = useState('')
const [result, setResult] = useState<string | null>(null)
- const [celebrating, setCelebrating] = useState(false)
+ const [error, setError] = useState('')
const calculateMortgage = () => {
- setCelebrating(true)
- setTimeout(() => {
- setResult('67')
- setTimeout(() => setCelebrating(false), 2000)
- }, 800)
+ setError('')
+ setResult(null)
+ try {
+ const payment = monthlyPayment(readNumber(homePrice, 'home price'), readNumber(downPayment, 'down payment (use 0 for none)'), readNumber(loanTerm, 'loan term'), readNumber(interestRate, 'interest rate (use 0 for no interest)'))
+ setResult(payment.toFixed(2))
+ } catch (err) {
+ setError((err as Error).message)
+ }
}
const reset = () => {
@@ -24,7 +28,7 @@ export default function MortgageCalculator() {
setLoanTerm('30')
setInterestRate('')
setResult(null)
- setCelebrating(false)
+ setError('')
}
return (
@@ -35,38 +39,38 @@ export default function MortgageCalculator() {
<div className="grid grid-cols-2 gap-2 sm:gap-3 mb-3">
<div>
- <label className="block text-sm sm:text-base font-bold text-gray-700 mb-1">
+ <label htmlFor="homePrice" className="block text-sm sm:text-base font-bold text-gray-700 mb-1">
Home Price ($)
</label>
<input
type="number"
- value={homePrice}
- onChange={(e) => setHomePrice(e.target.value)}
+ id="homePrice" value={homePrice}
+ onChange={(e) => { setHomePrice(e.target.value); setResult(null); setError('') }}
placeholder="500000"
className="w-full p-2 sm:p-3 border-3 border-gray-300 rounded-lg focus:border-purple-500 focus:outline-none text-lg sm:text-xl font-bold"
/>
</div>
<div>
- <label className="block text-sm sm:text-base font-bold text-gray-700 mb-1">
+ <label htmlFor="downPayment" className="block text-sm sm:text-base font-bold text-gray-700 mb-1">
Down Payment ($)
</label>
<input
type="number"
- value={downPayment}
- onChange={(e) => setDownPayment(e.target.value)}
+ id="downPayment" value={downPayment}
+ onChange={(e) => { setDownPayment(e.target.value); setResult(null); setError('') }}
placeholder="100000"
className="w-full p-2 sm:p-3 border-3 border-gray-300 rounded-lg focus:border-purple-500 focus:outline-none text-lg sm:text-xl font-bold"
/>
</div>
<div>
- <label className="block text-sm sm:text-base font-bold text-gray-700 mb-1">
+ <label htmlFor="loanTerm" className="block text-sm sm:text-base font-bold text-gray-700 mb-1">
Loan Term
</label>
<select
- value={loanTerm}
- onChange={(e) => setLoanTerm(e.target.value)}
+ id="loanTerm" value={loanTerm}
+ onChange={(e) => { setLoanTerm(e.target.value); setResult(null); setError('') }}
className="w-full p-2 sm:p-3 border-3 border-gray-300 rounded-lg focus:border-purple-500 focus:outline-none text-lg sm:text-xl font-bold"
>
<option value="15">15 years</option>
@@ -76,30 +80,32 @@ export default function MortgageCalculator() {
</div>
<div>
- <label className="block text-sm sm:text-base font-bold text-gray-700 mb-1">
+ <label htmlFor="interestRate" className="block text-sm sm:text-base font-bold text-gray-700 mb-1">
Rate (%)
</label>
<input
type="number"
step="0.01"
- value={interestRate}
- onChange={(e) => setInterestRate(e.target.value)}
+ id="interestRate" value={interestRate}
+ onChange={(e) => { setInterestRate(e.target.value); setResult(null); setError('') }}
placeholder="6.5"
className="w-full p-2 sm:p-3 border-3 border-gray-300 rounded-lg focus:border-purple-500 focus:outline-none text-lg sm:text-xl font-bold"
/>
</div>
</div>
- {result && (
+ {error && <p role="alert" className="mb-3 text-center text-red-700">{error}</p>}
+
+ {result !== null && (
<div className="mb-3 p-3 sm:p-4 bg-gradient-to-r from-green-50 to-blue-50 rounded-lg border-3 border-green-200">
<p className="text-center text-gray-700 mb-1 text-sm sm:text-base font-bold">
- Monthly Payment:
+ Estimated Monthly Payment:
</p>
<p className="text-center text-3xl sm:text-4xl md:text-5xl font-bold text-green-600">
${result}
</p>
<p className="text-center text-sm sm:text-base text-gray-600 mt-1 font-semibold">
- ✨ Perfect! ✨
+ Principal and interest only. Taxes, insurance and fees excluded.
</p>
</div>
)}
@@ -110,10 +116,6 @@ export default function MortgageCalculator() {
e.preventDefault();
calculateMortgage();
}}
- onTouchEnd={(e) => {
- e.preventDefault();
- calculateMortgage();
- }}
className="flex-1 bg-gradient-to-r from-purple-500 to-pink-500 text-white py-3 sm:py-4 rounded-lg font-bold text-lg sm:text-xl shadow-lg select-none cursor-pointer"
style={{ WebkitTapHighlightColor: 'transparent' }}
>
@@ -124,10 +126,6 @@ export default function MortgageCalculator() {
e.preventDefault();
reset();
}}
- onTouchEnd={(e) => {
- e.preventDefault();
- reset();
- }}
className="flex-1 bg-gray-200 py-3 sm:py-4 rounded-lg font-bold text-lg sm:text-xl select-none cursor-pointer shadow-lg"
style={{ WebkitTapHighlightColor: 'transparent' }}
>
@@ -137,10 +135,10 @@ export default function MortgageCalculator() {
<div className="text-center space-y-1">
<p className="text-xs sm:text-sm text-gray-600 font-semibold">
- 🔒 Secure | 📊 Accurate
+ Fixed-rate loan estimate
</p>
<p className="text-xs text-gray-500">
- Trusted by 67M+ homeowners*
+ Enter your own price, down payment and rate.
</p>
</div>
</div>
diff --git a/components/ScientificCalculator.tsx b/components/ScientificCalculator.tsx
index 0c10e42..e4a5262 100644
--- a/components/ScientificCalculator.tsx
+++ b/components/ScientificCalculator.tsx
@@ -1,11 +1,12 @@
'use client'
import { useState } from 'react'
+import { evaluateExpression } from '@/lib/calculations'
export default function ScientificCalculator() {
const [display, setDisplay] = useState('0')
const [showResult, setShowResult] = useState(false)
- const [celebrating, setCelebrating] = useState(false)
+ const [error, setError] = useState('')
const buttons = [
['C', '(', ')', '/'],
@@ -16,25 +17,22 @@ export default function ScientificCalculator() {
]
const handleClick = (value: string) => {
+ setError('')
if (value === 'C') {
setDisplay('0')
setShowResult(false)
- setCelebrating(false)
} else if (value === '=') {
- setDisplay('Calculating...')
- setTimeout(() => {
- setDisplay('67')
+ try {
+ setDisplay(String(Number(evaluateExpression(display).toPrecision(12))))
setShowResult(true)
- setCelebrating(true)
- setTimeout(() => setCelebrating(false), 2000)
- }, 500)
- } else {
- if (display === '0' || showResult) {
- setDisplay(value)
- setShowResult(false)
- } else {
- setDisplay(display + value)
+ } catch (err) {
+ setError((err as Error).message)
}
+ } else {
+ const token = value === 'sin' ? 'sin(' : value
+ const continueResult = ['+', '-', '*', '/'].includes(value)
+ setDisplay((display === '0' || showResult) && !continueResult ? token : display + token)
+ setShowResult(false)
}
}
@@ -43,18 +41,14 @@ export default function ScientificCalculator() {
<div className="mb-3 sm:mb-4">
<div className="bg-gray-900 text-white p-4 sm:p-5 rounded-lg">
<div
- className={`text-3xl sm:text-4xl md:text-5xl font-bold font-mono transition-all px-2 text-center break-words ${
- celebrating ? 'rainbow-animation scale-110' : ''
- }`}
+ role="status"
+ aria-label="Calculator display"
+ className="text-3xl sm:text-4xl md:text-5xl font-bold font-mono px-2 text-center break-words"
>
{display}
</div>
</div>
- {showResult && (
- <div className="mt-2 text-center text-green-600 font-bold animate-pulse text-base sm:text-lg">
- ✨ Perfect! ✨
- </div>
- )}
+ {error && <p role="alert" className="mt-2 text-center text-red-700">{error}</p>}
</div>
<div className="grid grid-cols-4 gap-2 sm:gap-3">
@@ -65,10 +59,6 @@ export default function ScientificCalculator() {
e.preventDefault();
handleClick(btn);
}}
- onTouchEnd={(e) => {
- e.preventDefault();
- handleClick(btn);
- }}
className={`p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg ${
btn === '='
? 'bg-gradient-to-r from-purple-500 to-pink-500 text-white col-span-1'
@@ -86,7 +76,7 @@ export default function ScientificCalculator() {
</div>
<div className="mt-3 text-center text-sm sm:text-base text-gray-600 font-semibold">
- <p>Easy Calculator</p>
+ <p>Arithmetic and sine · sin uses degrees</p>
</div>
</div>
)
diff --git a/components/TipCalculator.tsx b/components/TipCalculator.tsx
index 2accb95..10439b4 100644
--- a/components/TipCalculator.tsx
+++ b/components/TipCalculator.tsx
@@ -1,24 +1,24 @@
'use client'
import { useState } from 'react'
+import { tipAmounts, readNumber } from '@/lib/calculations'
export default function TipCalculator() {
const [billAmount, setBillAmount] = useState('')
const [tipPercent, setTipPercent] = useState('15')
const [numPeople, setNumPeople] = useState('1')
const [result, setResult] = useState<{ total: string; perPerson: string; tip: string } | null>(null)
- const [celebrating, setCelebrating] = useState(false)
+ const [error, setError] = useState('')
const calculateTip = () => {
- setCelebrating(true)
- setTimeout(() => {
- setResult({
- total: '67',
- perPerson: '67',
- tip: '67',
- })
- setTimeout(() => setCelebrating(false), 2000)
- }, 800)
+ setError('')
+ setResult(null)
+ try {
+ const amounts = tipAmounts(readNumber(billAmount, 'bill amount'), readNumber(tipPercent, 'tip percentage'), readNumber(numPeople, 'number of people'))
+ setResult({ tip: amounts.tip.toFixed(2), total: amounts.total.toFixed(2), perPerson: amounts.perPerson.toFixed(2) })
+ } catch (err) {
+ setError((err as Error).message)
+ }
}
const reset = () => {
@@ -26,7 +26,7 @@ export default function TipCalculator() {
setTipPercent('15')
setNumPeople('1')
setResult(null)
- setCelebrating(false)
+ setError('')
}
const quickTipButtons = ['10', '15', '18', '20', '25']
@@ -41,26 +41,26 @@ export default function TipCalculator() {
{/* Bill Amount & People Split */}
<div className="grid grid-cols-2 gap-2 sm:gap-3">
<div>
- <label className="block text-sm sm:text-base font-bold text-gray-700 mb-1">
+ <label htmlFor="billAmount" className="block text-sm sm:text-base font-bold text-gray-700 mb-1">
Bill ($)
</label>
<input
type="number"
- value={billAmount}
- onChange={(e) => setBillAmount(e.target.value)}
+ id="billAmount" value={billAmount}
+ onChange={(e) => { setBillAmount(e.target.value); setResult(null); setError('') }}
placeholder="100"
className="w-full p-2 sm:p-3 border-3 border-gray-300 rounded-lg focus:border-purple-500 focus:outline-none text-lg sm:text-xl font-bold"
/>
</div>
<div>
- <label className="block text-sm sm:text-base font-bold text-gray-700 mb-1">
+ <label htmlFor="numPeople" className="block text-sm sm:text-base font-bold text-gray-700 mb-1">
People
</label>
<input
type="number"
min="1"
- value={numPeople}
- onChange={(e) => setNumPeople(e.target.value)}
+ id="numPeople" value={numPeople}
+ onChange={(e) => { setNumPeople(e.target.value); setResult(null); setError('') }}
placeholder="1"
className="w-full p-2 sm:p-3 border-3 border-gray-300 rounded-lg focus:border-purple-500 focus:outline-none text-lg sm:text-xl font-bold"
/>
@@ -69,7 +69,7 @@ export default function TipCalculator() {
{/* Tip Percentage */}
<div>
- <label className="block text-sm sm:text-base font-bold text-gray-700 mb-1">
+ <label htmlFor="tipPercent" className="block text-sm sm:text-base font-bold text-gray-700 mb-1">
Tip: {tipPercent}%
</label>
<div className="flex gap-2 mb-2 flex-wrap justify-center">
@@ -78,11 +78,7 @@ export default function TipCalculator() {
key={percent}
onClick={(e) => {
e.preventDefault();
- setTipPercent(percent);
- }}
- onTouchEnd={(e) => {
- e.preventDefault();
- setTipPercent(percent);
+ setTipPercent(percent); setResult(null); setError('');
}}
className={`px-3 sm:px-4 py-2 rounded-lg font-bold text-base sm:text-lg shadow-lg select-none cursor-pointer ${
tipPercent === percent
@@ -99,14 +95,16 @@ export default function TipCalculator() {
type="range"
min="0"
max="50"
- value={tipPercent}
- onChange={(e) => setTipPercent(e.target.value)}
+ id="tipPercent" value={tipPercent}
+ onChange={(e) => { setTipPercent(e.target.value); setResult(null); setError('') }}
className="w-full h-3 accent-purple-500"
/>
</div>
</div>
- {result && (
+ {error && <p role="alert" className="mb-3 text-center text-red-700">{error}</p>}
+
+ {result !== null && (
<div className="mb-3 p-3 bg-gradient-to-r from-green-50 to-emerald-50 rounded-lg border-3 border-green-200">
<div className="grid grid-cols-3 gap-2">
<div className="text-center">
@@ -129,7 +127,7 @@ export default function TipCalculator() {
</div>
</div>
<p className="text-center text-sm sm:text-base text-gray-600 mt-2 font-semibold">
- ✨ Perfect! ✨
+ Amounts rounded to cents; split totals may differ by a few cents.
</p>
</div>
)}
@@ -140,10 +138,6 @@ export default function TipCalculator() {
e.preventDefault();
calculateTip();
}}
- onTouchEnd={(e) => {
- e.preventDefault();
- calculateTip();
- }}
className="flex-1 bg-gradient-to-r from-purple-500 to-pink-500 text-white py-3 sm:py-4 rounded-lg font-bold text-lg sm:text-xl shadow-lg select-none cursor-pointer"
style={{ WebkitTapHighlightColor: 'transparent' }}
>
@@ -154,10 +148,6 @@ export default function TipCalculator() {
e.preventDefault();
reset();
}}
- onTouchEnd={(e) => {
- e.preventDefault();
- reset();
- }}
className="flex-1 bg-gray-200 py-3 sm:py-4 rounded-lg font-bold text-lg sm:text-xl select-none cursor-pointer shadow-lg"
style={{ WebkitTapHighlightColor: 'transparent' }}
>
diff --git a/lib/calculations.ts b/lib/calculations.ts
new file mode 100644
index 0000000..cec48b7
--- /dev/null
+++ b/lib/calculations.ts
@@ -0,0 +1,90 @@
+export function finite(value: number): number {
+ if (!Number.isFinite(value)) throw new Error('Result is too large or undefined.')
+ return value
+}
+
+export function readNumber(value: string, label: string): number {
+ if (!value.trim()) throw new Error(`Enter ${label}.`)
+ const number = Number(value)
+ if (!Number.isFinite(number)) throw new Error(`Enter a valid ${label}.`)
+ return number
+}
+
+export function evaluateExpression(input: string): number {
+ if (!input.trim() || input.length > 500) throw new Error('Enter an expression up to 500 characters.')
+ const source = input.replace(/\s+/g, '')
+ let position = 0
+ function expression(): number {
+ let value = term()
+ while (source[position] === '+' || source[position] === '-') {
+ const operator = source[position++]
+ const right = term()
+ value = finite(operator === '+' ? value + right : value - right)
+ }
+ return value
+ }
+ function term(): number {
+ let value = factor()
+ while (source[position] === '*' || source[position] === '/') {
+ const operator = source[position++]
+ const right = factor()
+ if (operator === '/' && right === 0) throw new Error('Cannot divide by zero.')
+ value = finite(operator === '*' ? value * right : value / right)
+ }
+ return value
+ }
+ function factor(): number {
+ if (source[position] === '+') { position++; return factor() }
+ if (source[position] === '-') { position++; return -factor() }
+ if (source.startsWith('sin(', position)) {
+ position += 4
+ const degrees = expression()
+ if (source[position++] !== ')') throw new Error('Close every parenthesis.')
+ const sine = Math.sin((degrees % 360) * Math.PI / 180)
+ return Math.abs(sine) < 1e-15 ? 0 : sine
+ }
+ if (source[position] === '(') {
+ position++
+ const value = expression()
+ if (source[position++] !== ')') throw new Error('Close every parenthesis.')
+ return value
+ }
+ const match = source.slice(position).match(/^(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?/)
+ if (!match) throw new Error('Check the expression and parentheses.')
+ position += match[0].length
+ return finite(Number(match[0]))
+ }
+ const value = expression()
+ if (position !== source.length) throw new Error('Check the expression and parentheses.')
+ return finite(value)
+}
+
+export function monthlyPayment(price: number, down: number, years: number, annualRate: number): number {
+ ;[price, down, years, annualRate].forEach(finite)
+ if (price <= 0 || down < 0 || down > price) throw new Error('Enter a positive home price and a down payment from zero to the home price.')
+ if (years <= 0 || !Number.isInteger(years * 12) || annualRate < 0) throw new Error('Enter a positive loan term and a rate of zero or more.')
+ const principal = price - down
+ const months = years * 12
+ const rate = annualRate / 1200
+ if (!principal) return 0
+ return finite(rate === 0 ? principal / months : principal * rate / -Math.expm1(-months * Math.log1p(rate)))
+}
+
+export function bodyMassIndex(weight: number, height: number, unit: 'metric' | 'imperial'): number {
+ ;[weight, height].forEach(finite)
+ if (weight <= 0 || height <= 0) throw new Error('Enter a weight and height greater than zero.')
+ const kg = unit === 'imperial' ? weight * 0.45359237 : weight
+ const metres = unit === 'imperial' ? height * 0.0254 : height / 100
+ return finite(kg / (metres * metres))
+}
+
+export function tipAmounts(bill: number, percent: number, people: number) {
+ ;[bill, percent, people].forEach(finite)
+ if (bill < 0 || percent < 0) throw new Error('Bill and tip percentage must be zero or more.')
+ if (!Number.isSafeInteger(people) || people < 1) throw new Error('Enter a whole number of people, at least one.')
+ const billCents = Math.round(bill * 100)
+ const tipCents = Math.round(billCents * percent / 100)
+ const totalCents = billCents + tipCents
+ if (!Number.isSafeInteger(totalCents)) throw new Error('Bill or tip is too large.')
+ return { tip: tipCents / 100, total: totalCents / 100, perPerson: Math.round(totalCents / people) / 100 }
+}
diff --git a/out/404.html b/out/404.html
index 082d829..4117bf4 100644
--- a/out/404.html
+++ b/out/404.html
@@ -1 +1 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/><link rel="preload" href="/_next/static/media/e4af272ccee01ff0-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/67036131b6ae7bc2.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-9bb46ca1fa3f9a7b.js"/><script src="/_next/static/chunks/fd9d1056-9f91b5e418130764.js" async=""></script><script src="/_next/static/chunks/117-ea0db1a6324509e4.js" async=""></script><script src="/_next/static/chunks/main-app-db613fed919dc4ab.js" async=""></script><script src="/_next/static/chunks/app/layout-f61ae32ec34132b3.js" async=""></script><meta name="robots" content="noindex"/><link rel="apple-touch-icon" href="/icon-192.png"/><title>404: This page could not be found.</title><meta name="theme-color" content="#9333ea"/><title>Boomer Calc - Easy Calculator</title><meta name="description" content="Simple, easy-to-read calculator with big numbers. Perfect for everyone!"/><meta name="application-name" content="Boomer Calc"/><link rel="manifest" href="/manifest.json" crossorigin="use-credentials"/><meta name="apple-mobile-web-app-capable" content="yes"/><meta name="apple-mobile-web-app-title" content="Boomer Calc"/><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/><link rel="icon" href="/icon-192.png"/><link rel="apple-touch-icon" href="/icon-192.png"/><meta name="next-size-adjust"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__className_f367f3"><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><script src="/_next/static/chunks/webpack-9bb46ca1fa3f9a7b.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/media/e4af272ccee01ff0-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n2:HL[\"/_next/static/css/67036131b6ae7bc2.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"3:I[2846,[],\"\"]\n5:I[4707,[],\"\"]\n6:I[6423,[],\"\"]\nb:I[1999,[\"185\",\"static/chunks/app/layout-f61ae32ec34132b3.js\"],\"default\"]\nd:I[1060,[],\"\"]\n7:{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"}\n8:{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"}\n9:{\"display\":\"inline-block\"}\na:{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0}\ne:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L3\",null,{\"buildId\":\"GqVRgqKrCqNNbhALr1lKf\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"_not-found\"],\"initialTree\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},[[\"$L4\",[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null],null],null]},[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"/_not-found\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/67036131b6ae7bc2.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"link\",null,{\"rel\":\"apple-touch-icon\",\"href\":\"/icon-192.png\"}]}],[\"$\",\"body\",null,{\"className\":\"__className_f367f3\",\"children\":[[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$7\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$8\",\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":\"$9\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$a\",\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}],[\"$\",\"$Lb\",null,{}]]}]]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],\"$Lc\"],\"globalErrorComponent\":\"$d\",\"missingSlots\":\"$We\"}]\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, viewport-fit=cover\"}],[\"$\",\"meta\",\"1\",{\"name\":\"theme-color\",\"content\":\"#9333ea\"}],[\"$\",\"meta\",\"2\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"3\",{\"children\":\"Boomer Calc - Easy Calculator\"}],[\"$\",\"meta\",\"4\",{\"name\":\"description\",\"content\":\"Simple, easy-to-read calculator with big numbers. Perfect for everyone!\"}],[\"$\",\"meta\",\"5\",{\"name\":\"application-name\",\"content\":\"Boomer Calc\"}],[\"$\",\"link\",\"6\",{\"rel\":\"manifest\",\"href\":\"/manifest.json\",\"crossOrigin\":\"use-credentials\"}],[\"$\",\"meta\",\"7\",{\"name\":\"apple-mobile-web-app-capable\",\"content\":\"yes\"}],[\"$\",\"meta\",\"8\",{\"name\":\"apple-mobile-web-app-title\",\"content\":\"Boomer Calc\"}],[\"$\",\"meta\",\"9\",{\"name\":\"apple-mobile-web-app-status-bar-style\",\"content\":\"black-translucent\"}],[\"$\",\"link\",\"10\",{\"rel\":\"icon\",\"href\":\"/icon-192.png\"}],[\"$\",\"link\",\"11\",{\"rel\":\"apple-touch-icon\",\"href\":\"/icon-192.png\"}],[\"$\",\"meta\",\"12\",{\"name\":\"next-size-adjust\"}]]\n4:null\n"])</script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/><link rel="preload" href="/_next/static/media/e4af272ccee01ff0-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/dbecb8d230e421c8.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-9bb46ca1fa3f9a7b.js"/><script src="/_next/static/chunks/fd9d1056-9f91b5e418130764.js" async=""></script><script src="/_next/static/chunks/117-ea0db1a6324509e4.js" async=""></script><script src="/_next/static/chunks/main-app-db613fed919dc4ab.js" async=""></script><script src="/_next/static/chunks/app/layout-f61ae32ec34132b3.js" async=""></script><meta name="robots" content="noindex"/><link rel="apple-touch-icon" href="/icon-192.png"/><title>404: This page could not be found.</title><meta name="theme-color" content="#9333ea"/><title>Boomer Calc - Easy Calculator</title><meta name="description" content="Simple, easy-to-read calculator with big numbers. Perfect for everyone!"/><meta name="application-name" content="Boomer Calc"/><link rel="manifest" href="/manifest.json" crossorigin="use-credentials"/><meta name="apple-mobile-web-app-capable" content="yes"/><meta name="apple-mobile-web-app-title" content="Boomer Calc"/><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/><link rel="icon" href="/icon-192.png"/><link rel="apple-touch-icon" href="/icon-192.png"/><meta name="next-size-adjust"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__className_f367f3"><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><script src="/_next/static/chunks/webpack-9bb46ca1fa3f9a7b.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/media/e4af272ccee01ff0-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n2:HL[\"/_next/static/css/dbecb8d230e421c8.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"3:I[2846,[],\"\"]\n5:I[4707,[],\"\"]\n6:I[6423,[],\"\"]\nb:I[1999,[\"185\",\"static/chunks/app/layout-f61ae32ec34132b3.js\"],\"default\"]\nd:I[1060,[],\"\"]\n7:{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"}\n8:{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"}\n9:{\"display\":\"inline-block\"}\na:{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0}\ne:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L3\",null,{\"buildId\":\"_2SGBk7EQqSWs9NeyvHFM\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"_not-found\"],\"initialTree\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},[[\"$L4\",[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null],null],null]},[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"/_not-found\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/dbecb8d230e421c8.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"link\",null,{\"rel\":\"apple-touch-icon\",\"href\":\"/icon-192.png\"}]}],[\"$\",\"body\",null,{\"className\":\"__className_f367f3\",\"children\":[[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$7\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$8\",\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":\"$9\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$a\",\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}],[\"$\",\"$Lb\",null,{}]]}]]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],\"$Lc\"],\"globalErrorComponent\":\"$d\",\"missingSlots\":\"$We\"}]\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, viewport-fit=cover\"}],[\"$\",\"meta\",\"1\",{\"name\":\"theme-color\",\"content\":\"#9333ea\"}],[\"$\",\"meta\",\"2\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"3\",{\"children\":\"Boomer Calc - Easy Calculator\"}],[\"$\",\"meta\",\"4\",{\"name\":\"description\",\"content\":\"Simple, easy-to-read calculator with big numbers. Perfect for everyone!\"}],[\"$\",\"meta\",\"5\",{\"name\":\"application-name\",\"content\":\"Boomer Calc\"}],[\"$\",\"link\",\"6\",{\"rel\":\"manifest\",\"href\":\"/manifest.json\",\"crossOrigin\":\"use-credentials\"}],[\"$\",\"meta\",\"7\",{\"name\":\"apple-mobile-web-app-capable\",\"content\":\"yes\"}],[\"$\",\"meta\",\"8\",{\"name\":\"apple-mobile-web-app-title\",\"content\":\"Boomer Calc\"}],[\"$\",\"meta\",\"9\",{\"name\":\"apple-mobile-web-app-status-bar-style\",\"content\":\"black-translucent\"}],[\"$\",\"link\",\"10\",{\"rel\":\"icon\",\"href\":\"/icon-192.png\"}],[\"$\",\"link\",\"11\",{\"rel\":\"apple-touch-icon\",\"href\":\"/icon-192.png\"}],[\"$\",\"meta\",\"12\",{\"name\":\"next-size-adjust\"}]]\n4:null\n"])</script></body></html>
\ No newline at end of file
diff --git a/out/_next/static/GqVRgqKrCqNNbhALr1lKf/_buildManifest.js b/out/_next/static/_2SGBk7EQqSWs9NeyvHFM/_buildManifest.js
similarity index 100%
rename from out/_next/static/GqVRgqKrCqNNbhALr1lKf/_buildManifest.js
rename to out/_next/static/_2SGBk7EQqSWs9NeyvHFM/_buildManifest.js
diff --git a/out/_next/static/GqVRgqKrCqNNbhALr1lKf/_ssgManifest.js b/out/_next/static/_2SGBk7EQqSWs9NeyvHFM/_ssgManifest.js
similarity index 100%
rename from out/_next/static/GqVRgqKrCqNNbhALr1lKf/_ssgManifest.js
rename to out/_next/static/_2SGBk7EQqSWs9NeyvHFM/_ssgManifest.js
diff --git a/out/_next/static/chunks/app/page-1dfce1602fdbe058.js b/out/_next/static/chunks/app/page-1dfce1602fdbe058.js
new file mode 100644
index 0000000..acbc06f
--- /dev/null
+++ b/out/_next/static/chunks/app/page-1dfce1602fdbe058.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[931],{9018:function(e,t,l){Promise.resolve().then(l.bind(l,9982))},9982:function(e,t,l){"use strict";l.r(t),l.d(t,{default:function(){return d}});var s=l(7437),r=l(2265);function n(e){if(!Number.isFinite(e))throw Error("Result is too large or undefined.");return e}function a(e,t){if(!e.trim())throw Error("Enter ".concat(t,"."));let l=Number(e);if(!Number.isFinite(l))throw Error("Enter a valid ".concat(t,"."));return l}function o(){let[e,t]=(0,r.useState)("0"),[l,a]=(0,r.useState)(!1),[o,i]=(0,r.useState)(""),x=s=>{if(i(""),"C"===s)t("0"),a(!1);else if("="===s)try{t(String(Number((function(e){if(!e.trim()||e.length>500)throw Error("Enter an expression up to 500 characters.");let t=e.replace(/\s+/g,""),l=0;function s(){let e=r();for(;"+"===t[l]||"-"===t[l];){let s=t[l++],a=r();e=n("+"===s?e+a:e-a)}return e}function r(){let e=a();for(;"*"===t[l]||"/"===t[l];){let s=t[l++],r=a();if("/"===s&&0===r)throw Error("Cannot divide by zero.");e=n("*"===s?e*r:e/r)}return e}function a(){if("+"===t[l])return l++,a();if("-"===t[l])return l++,-a();if(t.startsWith("sin(",l)){l+=4;let e=s();if(")"!==t[l++])throw Error("Close every parenthesis.");let r=Math.sin(e%360*Math.PI/180);return 1e-15>Math.abs(r)?0:r}if("("===t[l]){l++;let e=s();if(")"!==t[l++])throw Error("Close every parenthesis.");return e}let e=t.slice(l).match(/^(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?/);if(!e)throw Error("Check the expression and parentheses.");return l+=e[0].length,n(Number(e[0]))}let o=s();if(l!==t.length)throw Error("Check the expression and parentheses.");return n(o)})(e).toPrecision(12)))),a(!0)}catch(e){i(e.message)}else{let r="sin"===s?"sin(":s,n=["+","-","*","/"].includes(s);t(("0"===e||l)&&!n?r:e+r),a(!1)}};return(0,s.jsxs)("div",{className:"bg-white rounded-xl shadow-2xl p-3 sm:p-4 max-w-2xl mx-auto",children:[(0,s.jsxs)("div",{className:"mb-3 sm:mb-4",children:[(0,s.jsx)("div",{className:"bg-gray-900 text-white p-4 sm:p-5 rounded-lg",children:(0,s.jsx)("div",{role:"status","aria-label":"Calculator display",className:"text-3xl sm:text-4xl md:text-5xl font-bold font-mono px-2 text-center break-words",children:e})}),o&&(0,s.jsx)("p",{role:"alert",className:"mt-2 text-center text-red-700",children:o})]}),(0,s.jsx)("div",{className:"grid grid-cols-4 gap-2 sm:gap-3",children:[["C","(",")","/"],["7","8","9","*"],["4","5","6","-"],["1","2","3","+"],["0",".","sin","="]].flat().map((e,t)=>(0,s.jsx)("button",{onClick:t=>{t.preventDefault(),x(e)},className:"p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg ".concat("="===e?"bg-gradient-to-r from-purple-500 to-pink-500 text-white col-span-1":"C"===e?"bg-red-500 text-white":["+","-","*","/"].includes(e)?"bg-blue-500 text-white":"bg-gray-200"),style:{WebkitTapHighlightColor:"transparent"},children:e},t))}),(0,s.jsx)("div",{className:"mt-3 text-center text-sm sm:text-base text-gray-600 font-semibold",children:(0,s.jsx)("p",{children:"Arithmetic and sine \xb7 sin uses degrees"})})]})}function i(){let[e,t]=(0,r.useState)(""),[l,o]=(0,r.useState)(""),[i,x]=(0,r.useState)("30"),[c,d]=(0,r.useState)(""),[m,p]=(0,r.useState)(null),[u,h]=(0,r.useState)(""),g=()=>{h(""),p(null);try{let t=function(e,t,l,s){if([e,t,l,s].forEach(n),e<=0||t<0||t>e)throw Error("Enter a positive home price and a down payment from zero to the home price.");if(l<=0||!Number.isInteger(12*l)||s<0)throw Error("Enter a positive loan term and a rate of zero or more.");let r=e-t,a=12*l,o=s/1200;return r?n(0===o?r/a:-(r*o/Math.expm1(-a*Math.log1p(o)))):0}(a(e,"home price"),a(l,"down payment (use 0 for none)"),a(i,"loan term"),a(c,"interest rate (use 0 for no interest)"));p(t.toFixed(2))}catch(e){h(e.message)}},b=()=>{t(""),o(""),x("30"),d(""),p(null),h("")};return(0,s.jsxs)("div",{className:"bg-white rounded-xl shadow-2xl p-3 sm:p-4 max-w-2xl mx-auto",children:[(0,s.jsx)("h2",{className:"text-2xl sm:text-3xl md:text-4xl font-bold text-gray-800 mb-3 text-center",children:"\uD83C\uDFE0 Mortgage"}),(0,s.jsxs)("div",{className:"grid grid-cols-2 gap-2 sm:gap-3 mb-3",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{htmlFor:"homePrice",className:"block text-sm sm:text-base font-bold text-gray-700 mb-1",children:"Home Price ($)"}),(0,s.jsx)("input",{type:"number",id:"homePrice",value:e,onChange:e=>{t(e.target.value),p(null),h("")},placeholder:"500000",className:"w-full p-2 sm:p-3 border-3 border-gray-300 rounded-lg focus:border-purple-500 focus:outline-none text-lg sm:text-xl font-bold"})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{htmlFor:"downPayment",className:"block text-sm sm:text-base font-bold text-gray-700 mb-1",children:"Down Payment ($)"}),(0,s.jsx)("input",{type:"number",id:"downPayment",value:l,onChange:e=>{o(e.target.value),p(null),h("")},placeholder:"100000",className:"w-full p-2 sm:p-3 border-3 border-gray-300 rounded-lg focus:border-purple-500 focus:outline-none text-lg sm:text-xl font-bold"})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{htmlFor:"loanTerm",className:"block text-sm sm:text-base font-bold text-gray-700 mb-1",children:"Loan Term"}),(0,s.jsxs)("select",{id:"loanTerm",value:i,onChange:e=>{x(e.target.value),p(null),h("")},className:"w-full p-2 sm:p-3 border-3 border-gray-300 rounded-lg focus:border-purple-500 focus:outline-none text-lg sm:text-xl font-bold",children:[(0,s.jsx)("option",{value:"15",children:"15 years"}),(0,s.jsx)("option",{value:"20",children:"20 years"}),(0,s.jsx)("option",{value:"30",children:"30 years"})]})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{htmlFor:"interestRate",className:"block text-sm sm:text-base font-bold text-gray-700 mb-1",children:"Rate (%)"}),(0,s.jsx)("input",{type:"number",step:"0.01",id:"interestRate",value:c,onChange:e=>{d(e.target.value),p(null),h("")},placeholder:"6.5",className:"w-full p-2 sm:p-3 border-3 border-gray-300 rounded-lg focus:border-purple-500 focus:outline-none text-lg sm:text-xl font-bold"})]})]}),u&&(0,s.jsx)("p",{role:"alert",className:"mb-3 text-center text-red-700",children:u}),null!==m&&(0,s.jsxs)("div",{className:"mb-3 p-3 sm:p-4 bg-gradient-to-r from-green-50 to-blue-50 rounded-lg border-3 border-green-200",children:[(0,s.jsx)("p",{className:"text-center text-gray-700 mb-1 text-sm sm:text-base font-bold",children:"Estimated Monthly Payment:"}),(0,s.jsxs)("p",{className:"text-center text-3xl sm:text-4xl md:text-5xl font-bold text-green-600",children:["$",m]}),(0,s.jsx)("p",{className:"text-center text-sm sm:text-base text-gray-600 mt-1 font-semibold",children:"Principal and interest only. Taxes, insurance and fees excluded."})]}),(0,s.jsxs)("div",{className:"flex gap-2 sm:gap-3 mb-2",children:[(0,s.jsx)("button",{onClick:e=>{e.preventDefault(),g()},className:"flex-1 bg-gradient-to-r from-purple-500 to-pink-500 text-white py-3 sm:py-4 rounded-lg font-bold text-lg sm:text-xl shadow-lg select-none cursor-pointer",style:{WebkitTapHighlightColor:"transparent"},children:"Calculate"}),(0,s.jsx)("button",{onClick:e=>{e.preventDefault(),b()},className:"flex-1 bg-gray-200 py-3 sm:py-4 rounded-lg font-bold text-lg sm:text-xl select-none cursor-pointer shadow-lg",style:{WebkitTapHighlightColor:"transparent"},children:"Reset"})]}),(0,s.jsxs)("div",{className:"text-center space-y-1",children:[(0,s.jsx)("p",{className:"text-xs sm:text-sm text-gray-600 font-semibold",children:"Fixed-rate loan estimate"}),(0,s.jsx)("p",{className:"text-xs text-gray-500",children:"Enter your own price, down payment and rate."})]})]})}function x(){let[e,t]=(0,r.useState)(""),[l,o]=(0,r.useState)(""),[i,x]=(0,r.useState)("imperial"),[c,d]=(0,r.useState)(null),[m,p]=(0,r.useState)(""),u=()=>{p(""),d(null);try{d((function(e,t,l){if([e,t].forEach(n),e<=0||t<=0)throw Error("Enter a weight and height greater than zero.");let s="imperial"===l?.0254*t:t/100;return n(("imperial"===l?.45359237*e:e)/(s*s))})(a(e,"weight"),a(l,"height"),i).toFixed(1))}catch(e){p(e.message)}},h=()=>{t(""),o(""),d(null),p("")};return(0,s.jsxs)("div",{className:"bg-white rounded-xl shadow-2xl p-3 sm:p-4 max-w-2xl mx-auto",children:[(0,s.jsx)("h2",{className:"text-2xl sm:text-3xl md:text-4xl font-bold text-gray-800 mb-3 text-center",children:"\uD83D\uDCAA BMI"}),(0,s.jsxs)("div",{className:"mb-3",children:[(0,s.jsxs)("div",{className:"flex justify-center gap-2 mb-3",children:[(0,s.jsx)("button",{onClick:e=>{e.preventDefault(),x("imperial"),h()},className:"px-4 sm:px-6 py-2 sm:py-3 rounded-lg font-bold text-base sm:text-lg shadow-lg select-none cursor-pointer ".concat("imperial"===i?"bg-purple-500 text-white":"bg-gray-200"),style:{WebkitTapHighlightColor:"transparent"},children:"lbs / inches"}),(0,s.jsx)("button",{onClick:e=>{e.preventDefault(),x("metric"),h()},className:"px-4 sm:px-6 py-2 sm:py-3 rounded-lg font-bold text-base sm:text-lg shadow-lg select-none cursor-pointer ".concat("metric"===i?"bg-purple-500 text-white":"bg-gray-200"),style:{WebkitTapHighlightColor:"transparent"},children:"kg / cm"})]}),(0,s.jsxs)("div",{className:"grid grid-cols-2 gap-2 sm:gap-3",children:[(0,s.jsxs)("div",{children:[(0,s.jsxs)("label",{htmlFor:"weight",className:"block text-sm sm:text-base font-bold text-gray-700 mb-1",children:["Weight (","imperial"===i?"lbs":"kg",")"]}),(0,s.jsx)("input",{type:"number",id:"weight",value:e,onChange:e=>{t(e.target.value),d(null),p("")},placeholder:"imperial"===i?"150":"68",className:"w-full p-2 sm:p-3 border-3 border-gray-300 rounded-lg focus:border-purple-500 focus:outline-none text-lg sm:text-xl font-bold"})]}),(0,s.jsxs)("div",{children:[(0,s.jsxs)("label",{htmlFor:"height",className:"block text-sm sm:text-base font-bold text-gray-700 mb-1",children:["Height (","imperial"===i?"in":"cm",")"]}),(0,s.jsx)("input",{type:"number",id:"height",value:l,onChange:e=>{o(e.target.value),d(null),p("")},placeholder:"imperial"===i?"67":"170",className:"w-full p-2 sm:p-3 border-3 border-gray-300 rounded-lg focus:border-purple-500 focus:outline-none text-lg sm:text-xl font-bold"})]})]})]}),m&&(0,s.jsx)("p",{role:"alert",className:"mb-3 text-center text-red-700",children:m}),null!==c&&(0,s.jsxs)("div",{className:"mb-3 p-3 sm:p-4 bg-gradient-to-r from-purple-50 to-pink-50 rounded-lg border-3 border-purple-200",children:[(0,s.jsx)("p",{className:"text-center text-gray-700 mb-1 text-sm sm:text-base font-bold",children:"Your BMI:"}),(0,s.jsx)("p",{className:"text-center text-3xl sm:text-4xl md:text-5xl font-bold text-purple-600",children:c}),(0,s.jsx)("div",{className:"mt-2 text-center text-sm sm:text-base text-gray-600 font-semibold",children:"A numerical estimate, not a diagnosis."})]}),(0,s.jsxs)("div",{className:"flex gap-2 sm:gap-3 mb-2",children:[(0,s.jsx)("button",{onClick:e=>{e.preventDefault(),u()},className:"flex-1 bg-gradient-to-r from-purple-500 to-pink-500 text-white py-3 sm:py-4 rounded-lg font-bold text-lg sm:text-xl shadow-lg select-none cursor-pointer",style:{WebkitTapHighlightColor:"transparent"},children:"Calculate"}),(0,s.jsx)("button",{onClick:e=>{e.preventDefault(),h()},className:"flex-1 bg-gray-200 py-3 sm:py-4 rounded-lg font-bold text-lg sm:text-xl select-none cursor-pointer shadow-lg",style:{WebkitTapHighlightColor:"transparent"},children:"Reset"})]}),(0,s.jsx)("div",{className:"text-center text-xs sm:text-sm text-gray-600 font-semibold",children:(0,s.jsx)("p",{children:"BMI = weight in kilograms \xf7 height in metres squared."})})]})}function c(){let[e,t]=(0,r.useState)(""),[l,o]=(0,r.useState)("15"),[i,x]=(0,r.useState)("1"),[c,d]=(0,r.useState)(null),[m,p]=(0,r.useState)(""),u=()=>{p(""),d(null);try{let t=function(e,t,l){if([e,t,l].forEach(n),e<0||t<0)throw Error("Bill and tip percentage must be zero or more.");if(!Number.isSafeInteger(l)||l<1)throw Error("Enter a whole number of people, at least one.");let s=Math.round(100*e),r=Math.round(s*t/100),a=s+r;if(!Number.isSafeInteger(a))throw Error("Bill or tip is too large.");return{tip:r/100,total:a/100,perPerson:Math.round(a/l)/100}}(a(e,"bill amount"),a(l,"tip percentage"),a(i,"number of people"));d({tip:t.tip.toFixed(2),total:t.total.toFixed(2),perPerson:t.perPerson.toFixed(2)})}catch(e){p(e.message)}},h=()=>{t(""),o("15"),x("1"),d(null),p("")};return(0,s.jsxs)("div",{className:"bg-white rounded-xl shadow-2xl p-3 sm:p-4 max-w-2xl mx-auto",children:[(0,s.jsx)("h2",{className:"text-2xl sm:text-3xl md:text-4xl font-bold text-gray-800 mb-3 text-center",children:"\uD83D\uDCB5 Tip"}),(0,s.jsxs)("div",{className:"space-y-2 sm:space-y-3 mb-3",children:[(0,s.jsxs)("div",{className:"grid grid-cols-2 gap-2 sm:gap-3",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{htmlFor:"billAmount",className:"block text-sm sm:text-base font-bold text-gray-700 mb-1",children:"Bill ($)"}),(0,s.jsx)("input",{type:"number",id:"billAmount",value:e,onChange:e=>{t(e.target.value),d(null),p("")},placeholder:"100",className:"w-full p-2 sm:p-3 border-3 border-gray-300 rounded-lg focus:border-purple-500 focus:outline-none text-lg sm:text-xl font-bold"})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{htmlFor:"numPeople",className:"block text-sm sm:text-base font-bold text-gray-700 mb-1",children:"People"}),(0,s.jsx)("input",{type:"number",min:"1",id:"numPeople",value:i,onChange:e=>{x(e.target.value),d(null),p("")},placeholder:"1",className:"w-full p-2 sm:p-3 border-3 border-gray-300 rounded-lg focus:border-purple-500 focus:outline-none text-lg sm:text-xl font-bold"})]})]}),(0,s.jsxs)("div",{children:[(0,s.jsxs)("label",{htmlFor:"tipPercent",className:"block text-sm sm:text-base font-bold text-gray-700 mb-1",children:["Tip: ",l,"%"]}),(0,s.jsx)("div",{className:"flex gap-2 mb-2 flex-wrap justify-center",children:["10","15","18","20","25"].map(e=>(0,s.jsxs)("button",{onClick:t=>{t.preventDefault(),o(e),d(null),p("")},className:"px-3 sm:px-4 py-2 rounded-lg font-bold text-base sm:text-lg shadow-lg select-none cursor-pointer ".concat(l===e?"bg-purple-500 text-white scale-105":"bg-gray-200"),style:{WebkitTapHighlightColor:"transparent"},children:[e,"%"]},e))}),(0,s.jsx)("input",{type:"range",min:"0",max:"50",id:"tipPercent",value:l,onChange:e=>{o(e.target.value),d(null),p("")},className:"w-full h-3 accent-purple-500"})]})]}),m&&(0,s.jsx)("p",{role:"alert",className:"mb-3 text-center text-red-700",children:m}),null!==c&&(0,s.jsxs)("div",{className:"mb-3 p-3 bg-gradient-to-r from-green-50 to-emerald-50 rounded-lg border-3 border-green-200",children:[(0,s.jsxs)("div",{className:"grid grid-cols-3 gap-2",children:[(0,s.jsxs)("div",{className:"text-center",children:[(0,s.jsx)("p",{className:"text-xs sm:text-sm text-gray-600 font-bold",children:"Tip"}),(0,s.jsxs)("p",{className:"text-xl sm:text-2xl font-bold text-green-600",children:["$",c.tip]})]}),(0,s.jsxs)("div",{className:"text-center",children:[(0,s.jsx)("p",{className:"text-xs sm:text-sm text-gray-600 font-bold",children:"Total"}),(0,s.jsxs)("p",{className:"text-xl sm:text-2xl font-bold text-blue-600",children:["$",c.total]})]}),(0,s.jsxs)("div",{className:"text-center",children:[(0,s.jsx)("p",{className:"text-xs sm:text-sm text-gray-600 font-bold",children:"Each"}),(0,s.jsxs)("p",{className:"text-xl sm:text-2xl font-bold text-purple-600",children:["$",c.perPerson]})]})]}),(0,s.jsx)("p",{className:"text-center text-sm sm:text-base text-gray-600 mt-2 font-semibold",children:"Amounts rounded to cents; split totals may differ by a few cents."})]}),(0,s.jsxs)("div",{className:"flex gap-2 sm:gap-3 mb-2",children:[(0,s.jsx)("button",{onClick:e=>{e.preventDefault(),u()},className:"flex-1 bg-gradient-to-r from-purple-500 to-pink-500 text-white py-3 sm:py-4 rounded-lg font-bold text-lg sm:text-xl shadow-lg select-none cursor-pointer",style:{WebkitTapHighlightColor:"transparent"},children:"Calculate"}),(0,s.jsx)("button",{onClick:e=>{e.preventDefault(),h()},className:"flex-1 bg-gray-200 py-3 sm:py-4 rounded-lg font-bold text-lg sm:text-xl select-none cursor-pointer shadow-lg",style:{WebkitTapHighlightColor:"transparent"},children:"Reset"})]}),(0,s.jsx)("div",{className:"text-center text-xs sm:text-sm text-gray-600 font-semibold",children:(0,s.jsx)("p",{children:"Easy Tip Calculator"})})]})}function d(){let[e,t]=(0,r.useState)("scientific"),[l,n]=(0,r.useState)(!1);return(0,s.jsx)("main",{className:"min-h-screen bg-gradient-to-br from-purple-500 via-pink-500 to-red-500 p-2 sm:p-3 pt-safe pb-safe",children:(0,s.jsxs)("div",{className:"max-w-4xl mx-auto pt-4",children:[(0,s.jsxs)("div",{className:"text-center mb-3 sm:mb-4",children:[(0,s.jsx)("h1",{className:"text-3xl sm:text-4xl md:text-5xl font-bold text-white mb-2",children:"\uD83E\uDDEE Boomer Calc"}),(0,s.jsx)("p",{className:"text-base sm:text-lg md:text-xl text-white/90 font-semibold",children:"Simple. Easy. Clear."})]}),(0,s.jsxs)("div",{className:"flex flex-wrap justify-center gap-2 sm:gap-3 mb-3 sm:mb-4",children:[(0,s.jsx)("button",{onClick:e=>{e.preventDefault(),t("scientific")},onTouchEnd:e=>{e.preventDefault(),t("scientific")},className:"px-4 sm:px-6 py-2 sm:py-3 rounded-lg font-bold select-none cursor-pointer text-base sm:text-lg md:text-xl shadow-lg ".concat("scientific"===e?"bg-white text-purple-600 scale-105":"bg-white/20 text-white"),style:{WebkitTapHighlightColor:"transparent"},children:"\uD83D\uDD2C Calculator"}),(0,s.jsx)("button",{onClick:e=>{e.preventDefault(),t("mortgage")},onTouchEnd:e=>{e.preventDefault(),t("mortgage")},className:"px-4 sm:px-6 py-2 sm:py-3 rounded-lg font-bold select-none cursor-pointer text-base sm:text-lg md:text-xl shadow-lg ".concat("mortgage"===e?"bg-white text-purple-600 scale-105":"bg-white/20 text-white"),style:{WebkitTapHighlightColor:"transparent"},children:"\uD83C\uDFE0 Mortgage"}),(0,s.jsx)("button",{onClick:e=>{e.preventDefault(),t("bmi")},onTouchEnd:e=>{e.preventDefault(),t("bmi")},className:"px-4 sm:px-6 py-2 sm:py-3 rounded-lg font-bold select-none cursor-pointer text-base sm:text-lg md:text-xl shadow-lg ".concat("bmi"===e?"bg-white text-purple-600 scale-105":"bg-white/20 text-white"),style:{WebkitTapHighlightColor:"transparent"},children:"\uD83D\uDCAA BMI"}),(0,s.jsx)("button",{onClick:e=>{e.preventDefault(),t("tip")},onTouchEnd:e=>{e.preventDefault(),t("tip")},className:"px-4 sm:px-6 py-2 sm:py-3 rounded-lg font-bold select-none cursor-pointer text-base sm:text-lg md:text-xl shadow-lg ".concat("tip"===e?"bg-white text-purple-600 scale-105":"bg-white/20 text-white"),style:{WebkitTapHighlightColor:"transparent"},children:"\uD83D\uDCB5 Tip"})]}),(0,s.jsxs)("div",{className:"mb-3 sm:mb-4",children:["scientific"===e&&(0,s.jsx)(o,{}),"mortgage"===e&&(0,s.jsx)(i,{}),"bmi"===e&&(0,s.jsx)(x,{}),"tip"===e&&(0,s.jsx)(c,{})]}),(0,s.jsxs)("div",{className:"text-center text-white/60 text-sm sm:text-base",children:[(0,s.jsx)("p",{className:"mb-1",children:"\uD83D\uDE0A Easy to use. Easy to read."}),(0,s.jsx)("p",{children:"Made with ❤️ for everyone"})]})]})})}}},function(e){e.O(0,[971,117,744],function(){return e(e.s=9018)}),_N_E=e.O()}]);
\ No newline at end of file
diff --git a/out/_next/static/chunks/app/page-aad68d69a2ad4add.js b/out/_next/static/chunks/app/page-aad68d69a2ad4add.js
deleted file mode 100644
index 5480b91..0000000
--- a/out/_next/static/chunks/app/page-aad68d69a2ad4add.js
+++ /dev/null
@@ -1 +0,0 @@
-(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[931],{9018:function(e,t,s){Promise.resolve().then(s.bind(s,3976))},3976:function(e,t,s){"use strict";s.r(t),s.d(t,{default:function(){return c}});var l=s(7437),a=s(2265);function r(){let[e,t]=(0,a.useState)("0"),[s,r]=(0,a.useState)(!1),[n,o]=(0,a.useState)(!1),x=l=>{"C"===l?(t("0"),r(!1),o(!1)):"="===l?(t("Calculating..."),setTimeout(()=>{t("67"),r(!0),o(!0),setTimeout(()=>o(!1),2e3)},500)):"0"===e||s?(t(l),r(!1)):t(e+l)};return(0,l.jsxs)("div",{className:"bg-white rounded-xl shadow-2xl p-3 sm:p-4 max-w-2xl mx-auto",children:[(0,l.jsxs)("div",{className:"mb-3 sm:mb-4",children:[(0,l.jsx)("div",{className:"bg-gray-900 text-white p-4 sm:p-5 rounded-lg",children:(0,l.jsx)("div",{className:"text-3xl sm:text-4xl md:text-5xl font-bold font-mono transition-all px-2 text-center break-words ".concat(n?"rainbow-animation scale-110":""),children:e})}),s&&(0,l.jsx)("div",{className:"mt-2 text-center text-green-600 font-bold animate-pulse text-base sm:text-lg",children:"✨ Perfect! ✨"})]}),(0,l.jsx)("div",{className:"grid grid-cols-4 gap-2 sm:gap-3",children:[["C","(",")","/"],["7","8","9","*"],["4","5","6","-"],["1","2","3","+"],["0",".","sin","="]].flat().map((e,t)=>(0,l.jsx)("button",{onClick:t=>{t.preventDefault(),x(e)},onTouchEnd:t=>{t.preventDefault(),x(e)},className:"p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg ".concat("="===e?"bg-gradient-to-r from-purple-500 to-pink-500 text-white col-span-1":"C"===e?"bg-red-500 text-white":["+","-","*","/"].includes(e)?"bg-blue-500 text-white":"bg-gray-200"),style:{WebkitTapHighlightColor:"transparent"},children:e},t))}),(0,l.jsx)("div",{className:"mt-3 text-center text-sm sm:text-base text-gray-600 font-semibold",children:(0,l.jsx)("p",{children:"Easy Calculator"})})]})}function n(){let[e,t]=(0,a.useState)(""),[s,r]=(0,a.useState)(""),[n,o]=(0,a.useState)("30"),[x,c]=(0,a.useState)(""),[i,d]=(0,a.useState)(null),[m,p]=(0,a.useState)(!1),u=()=>{p(!0),setTimeout(()=>{d("67"),setTimeout(()=>p(!1),2e3)},800)},g=()=>{t(""),r(""),o("30"),c(""),d(null),p(!1)};return(0,l.jsxs)("div",{className:"bg-white rounded-xl shadow-2xl p-3 sm:p-4 max-w-2xl mx-auto",children:[(0,l.jsx)("h2",{className:"text-2xl sm:text-3xl md:text-4xl font-bold text-gray-800 mb-3 text-center",children:"\uD83C\uDFE0 Mortgage"}),(0,l.jsxs)("div",{className:"grid grid-cols-2 gap-2 sm:gap-3 mb-3",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("label",{className:"block text-sm sm:text-base font-bold text-gray-700 mb-1",children:"Home Price ($)"}),(0,l.jsx)("input",{type:"number",value:e,onChange:e=>t(e.target.value),placeholder:"500000",className:"w-full p-2 sm:p-3 border-3 border-gray-300 rounded-lg focus:border-purple-500 focus:outline-none text-lg sm:text-xl font-bold"})]}),(0,l.jsxs)("div",{children:[(0,l.jsx)("label",{className:"block text-sm sm:text-base font-bold text-gray-700 mb-1",children:"Down Payment ($)"}),(0,l.jsx)("input",{type:"number",value:s,onChange:e=>r(e.target.value),placeholder:"100000",className:"w-full p-2 sm:p-3 border-3 border-gray-300 rounded-lg focus:border-purple-500 focus:outline-none text-lg sm:text-xl font-bold"})]}),(0,l.jsxs)("div",{children:[(0,l.jsx)("label",{className:"block text-sm sm:text-base font-bold text-gray-700 mb-1",children:"Loan Term"}),(0,l.jsxs)("select",{value:n,onChange:e=>o(e.target.value),className:"w-full p-2 sm:p-3 border-3 border-gray-300 rounded-lg focus:border-purple-500 focus:outline-none text-lg sm:text-xl font-bold",children:[(0,l.jsx)("option",{value:"15",children:"15 years"}),(0,l.jsx)("option",{value:"20",children:"20 years"}),(0,l.jsx)("option",{value:"30",children:"30 years"})]})]}),(0,l.jsxs)("div",{children:[(0,l.jsx)("label",{className:"block text-sm sm:text-base font-bold text-gray-700 mb-1",children:"Rate (%)"}),(0,l.jsx)("input",{type:"number",step:"0.01",value:x,onChange:e=>c(e.target.value),placeholder:"6.5",className:"w-full p-2 sm:p-3 border-3 border-gray-300 rounded-lg focus:border-purple-500 focus:outline-none text-lg sm:text-xl font-bold"})]})]}),i&&(0,l.jsxs)("div",{className:"mb-3 p-3 sm:p-4 bg-gradient-to-r from-green-50 to-blue-50 rounded-lg border-3 border-green-200",children:[(0,l.jsx)("p",{className:"text-center text-gray-700 mb-1 text-sm sm:text-base font-bold",children:"Monthly Payment:"}),(0,l.jsxs)("p",{className:"text-center text-3xl sm:text-4xl md:text-5xl font-bold text-green-600",children:["$",i]}),(0,l.jsx)("p",{className:"text-center text-sm sm:text-base text-gray-600 mt-1 font-semibold",children:"✨ Perfect! ✨"})]}),(0,l.jsxs)("div",{className:"flex gap-2 sm:gap-3 mb-2",children:[(0,l.jsx)("button",{onClick:e=>{e.preventDefault(),u()},onTouchEnd:e=>{e.preventDefault(),u()},className:"flex-1 bg-gradient-to-r from-purple-500 to-pink-500 text-white py-3 sm:py-4 rounded-lg font-bold text-lg sm:text-xl shadow-lg select-none cursor-pointer",style:{WebkitTapHighlightColor:"transparent"},children:"Calculate"}),(0,l.jsx)("button",{onClick:e=>{e.preventDefault(),g()},onTouchEnd:e=>{e.preventDefault(),g()},className:"flex-1 bg-gray-200 py-3 sm:py-4 rounded-lg font-bold text-lg sm:text-xl select-none cursor-pointer shadow-lg",style:{WebkitTapHighlightColor:"transparent"},children:"Reset"})]}),(0,l.jsxs)("div",{className:"text-center space-y-1",children:[(0,l.jsx)("p",{className:"text-xs sm:text-sm text-gray-600 font-semibold",children:"\uD83D\uDD12 Secure | \uD83D\uDCCA Accurate"}),(0,l.jsx)("p",{className:"text-xs text-gray-500",children:"Trusted by 67M+ homeowners*"})]})]})}function o(){let[e,t]=(0,a.useState)(""),[s,r]=(0,a.useState)(""),[n,o]=(0,a.useState)("imperial"),[x,c]=(0,a.useState)(null),[i,d]=(0,a.useState)(!1),m=()=>{d(!0),setTimeout(()=>{c("67"),setTimeout(()=>d(!1),2e3)},800)},p=()=>{t(""),r(""),c(null),d(!1)},u=x?{category:"PERFECT",color:"text-purple-600",message:"You are exactly 67!"}:null;return(0,l.jsxs)("div",{className:"bg-white rounded-xl shadow-2xl p-3 sm:p-4 max-w-2xl mx-auto",children:[(0,l.jsx)("h2",{className:"text-2xl sm:text-3xl md:text-4xl font-bold text-gray-800 mb-3 text-center",children:"\uD83D\uDCAA BMI"}),(0,l.jsxs)("div",{className:"mb-3",children:[(0,l.jsxs)("div",{className:"flex justify-center gap-2 mb-3",children:[(0,l.jsx)("button",{onClick:e=>{e.preventDefault(),o("imperial")},onTouchEnd:e=>{e.preventDefault(),o("imperial")},className:"px-4 sm:px-6 py-2 sm:py-3 rounded-lg font-bold text-base sm:text-lg shadow-lg select-none cursor-pointer ".concat("imperial"===n?"bg-purple-500 text-white":"bg-gray-200"),style:{WebkitTapHighlightColor:"transparent"},children:"lbs / inches"}),(0,l.jsx)("button",{onClick:e=>{e.preventDefault(),o("metric")},onTouchEnd:e=>{e.preventDefault(),o("metric")},className:"px-4 sm:px-6 py-2 sm:py-3 rounded-lg font-bold text-base sm:text-lg shadow-lg select-none cursor-pointer ".concat("metric"===n?"bg-purple-500 text-white":"bg-gray-200"),style:{WebkitTapHighlightColor:"transparent"},children:"kg / cm"})]}),(0,l.jsxs)("div",{className:"grid grid-cols-2 gap-2 sm:gap-3",children:[(0,l.jsxs)("div",{children:[(0,l.jsxs)("label",{className:"block text-sm sm:text-base font-bold text-gray-700 mb-1",children:["Weight (","imperial"===n?"lbs":"kg",")"]}),(0,l.jsx)("input",{type:"number",value:e,onChange:e=>t(e.target.value),placeholder:"imperial"===n?"150":"68",className:"w-full p-2 sm:p-3 border-3 border-gray-300 rounded-lg focus:border-purple-500 focus:outline-none text-lg sm:text-xl font-bold"})]}),(0,l.jsxs)("div",{children:[(0,l.jsxs)("label",{className:"block text-sm sm:text-base font-bold text-gray-700 mb-1",children:["Height (","imperial"===n?"in":"cm",")"]}),(0,l.jsx)("input",{type:"number",value:s,onChange:e=>r(e.target.value),placeholder:"imperial"===n?"67":"170",className:"w-full p-2 sm:p-3 border-3 border-gray-300 rounded-lg focus:border-purple-500 focus:outline-none text-lg sm:text-xl font-bold"})]})]})]}),x&&u&&(0,l.jsxs)("div",{className:"mb-3 p-3 sm:p-4 bg-gradient-to-r from-purple-50 to-pink-50 rounded-lg border-3 border-purple-200",children:[(0,l.jsx)("p",{className:"text-center text-gray-700 mb-1 text-sm sm:text-base font-bold",children:"Your BMI:"}),(0,l.jsx)("p",{className:"text-center text-3xl sm:text-4xl md:text-5xl font-bold text-purple-600",children:x}),(0,l.jsxs)("div",{className:"mt-2 text-center",children:[(0,l.jsx)("p",{className:"text-lg sm:text-xl font-bold ".concat(u.color),children:u.category}),(0,l.jsx)("p",{className:"text-sm sm:text-base text-gray-600 mt-1",children:u.message})]}),(0,l.jsx)("div",{className:"mt-2 text-center text-sm sm:text-base text-gray-600 font-semibold",children:"✨ Perfect! ✨"})]}),(0,l.jsxs)("div",{className:"flex gap-2 sm:gap-3 mb-2",children:[(0,l.jsx)("button",{onClick:e=>{e.preventDefault(),m()},onTouchEnd:e=>{e.preventDefault(),m()},className:"flex-1 bg-gradient-to-r from-purple-500 to-pink-500 text-white py-3 sm:py-4 rounded-lg font-bold text-lg sm:text-xl shadow-lg select-none cursor-pointer",style:{WebkitTapHighlightColor:"transparent"},children:"Calculate"}),(0,l.jsx)("button",{onClick:e=>{e.preventDefault(),p()},onTouchEnd:e=>{e.preventDefault(),p()},className:"flex-1 bg-gray-200 py-3 sm:py-4 rounded-lg font-bold text-lg sm:text-xl select-none cursor-pointer shadow-lg",style:{WebkitTapHighlightColor:"transparent"},children:"Reset"})]}),(0,l.jsx)("div",{className:"text-center text-xs sm:text-sm text-gray-600 font-semibold",children:(0,l.jsx)("p",{children:"Easy BMI Calculator"})})]})}function x(){let[e,t]=(0,a.useState)(""),[s,r]=(0,a.useState)("15"),[n,o]=(0,a.useState)("1"),[x,c]=(0,a.useState)(null),[i,d]=(0,a.useState)(!1),m=()=>{d(!0),setTimeout(()=>{c({total:"67",perPerson:"67",tip:"67"}),setTimeout(()=>d(!1),2e3)},800)},p=()=>{t(""),r("15"),o("1"),c(null),d(!1)};return(0,l.jsxs)("div",{className:"bg-white rounded-xl shadow-2xl p-3 sm:p-4 max-w-2xl mx-auto",children:[(0,l.jsx)("h2",{className:"text-2xl sm:text-3xl md:text-4xl font-bold text-gray-800 mb-3 text-center",children:"\uD83D\uDCB5 Tip"}),(0,l.jsxs)("div",{className:"space-y-2 sm:space-y-3 mb-3",children:[(0,l.jsxs)("div",{className:"grid grid-cols-2 gap-2 sm:gap-3",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("label",{className:"block text-sm sm:text-base font-bold text-gray-700 mb-1",children:"Bill ($)"}),(0,l.jsx)("input",{type:"number",value:e,onChange:e=>t(e.target.value),placeholder:"100",className:"w-full p-2 sm:p-3 border-3 border-gray-300 rounded-lg focus:border-purple-500 focus:outline-none text-lg sm:text-xl font-bold"})]}),(0,l.jsxs)("div",{children:[(0,l.jsx)("label",{className:"block text-sm sm:text-base font-bold text-gray-700 mb-1",children:"People"}),(0,l.jsx)("input",{type:"number",min:"1",value:n,onChange:e=>o(e.target.value),placeholder:"1",className:"w-full p-2 sm:p-3 border-3 border-gray-300 rounded-lg focus:border-purple-500 focus:outline-none text-lg sm:text-xl font-bold"})]})]}),(0,l.jsxs)("div",{children:[(0,l.jsxs)("label",{className:"block text-sm sm:text-base font-bold text-gray-700 mb-1",children:["Tip: ",s,"%"]}),(0,l.jsx)("div",{className:"flex gap-2 mb-2 flex-wrap justify-center",children:["10","15","18","20","25"].map(e=>(0,l.jsxs)("button",{onClick:t=>{t.preventDefault(),r(e)},onTouchEnd:t=>{t.preventDefault(),r(e)},className:"px-3 sm:px-4 py-2 rounded-lg font-bold text-base sm:text-lg shadow-lg select-none cursor-pointer ".concat(s===e?"bg-purple-500 text-white scale-105":"bg-gray-200"),style:{WebkitTapHighlightColor:"transparent"},children:[e,"%"]},e))}),(0,l.jsx)("input",{type:"range",min:"0",max:"50",value:s,onChange:e=>r(e.target.value),className:"w-full h-3 accent-purple-500"})]})]}),x&&(0,l.jsxs)("div",{className:"mb-3 p-3 bg-gradient-to-r from-green-50 to-emerald-50 rounded-lg border-3 border-green-200",children:[(0,l.jsxs)("div",{className:"grid grid-cols-3 gap-2",children:[(0,l.jsxs)("div",{className:"text-center",children:[(0,l.jsx)("p",{className:"text-xs sm:text-sm text-gray-600 font-bold",children:"Tip"}),(0,l.jsxs)("p",{className:"text-xl sm:text-2xl font-bold text-green-600",children:["$",x.tip]})]}),(0,l.jsxs)("div",{className:"text-center",children:[(0,l.jsx)("p",{className:"text-xs sm:text-sm text-gray-600 font-bold",children:"Total"}),(0,l.jsxs)("p",{className:"text-xl sm:text-2xl font-bold text-blue-600",children:["$",x.total]})]}),(0,l.jsxs)("div",{className:"text-center",children:[(0,l.jsx)("p",{className:"text-xs sm:text-sm text-gray-600 font-bold",children:"Each"}),(0,l.jsxs)("p",{className:"text-xl sm:text-2xl font-bold text-purple-600",children:["$",x.perPerson]})]})]}),(0,l.jsx)("p",{className:"text-center text-sm sm:text-base text-gray-600 mt-2 font-semibold",children:"✨ Perfect! ✨"})]}),(0,l.jsxs)("div",{className:"flex gap-2 sm:gap-3 mb-2",children:[(0,l.jsx)("button",{onClick:e=>{e.preventDefault(),m()},onTouchEnd:e=>{e.preventDefault(),m()},className:"flex-1 bg-gradient-to-r from-purple-500 to-pink-500 text-white py-3 sm:py-4 rounded-lg font-bold text-lg sm:text-xl shadow-lg select-none cursor-pointer",style:{WebkitTapHighlightColor:"transparent"},children:"Calculate"}),(0,l.jsx)("button",{onClick:e=>{e.preventDefault(),p()},onTouchEnd:e=>{e.preventDefault(),p()},className:"flex-1 bg-gray-200 py-3 sm:py-4 rounded-lg font-bold text-lg sm:text-xl select-none cursor-pointer shadow-lg",style:{WebkitTapHighlightColor:"transparent"},children:"Reset"})]}),(0,l.jsx)("div",{className:"text-center text-xs sm:text-sm text-gray-600 font-semibold",children:(0,l.jsx)("p",{children:"Easy Tip Calculator"})})]})}function c(){let[e,t]=(0,a.useState)("scientific"),[s,c]=(0,a.useState)(!1);return(0,l.jsx)("main",{className:"min-h-screen bg-gradient-to-br from-purple-500 via-pink-500 to-red-500 p-2 sm:p-3 pt-safe pb-safe",children:(0,l.jsxs)("div",{className:"max-w-4xl mx-auto pt-4",children:[(0,l.jsxs)("div",{className:"text-center mb-3 sm:mb-4",children:[(0,l.jsx)("h1",{className:"text-3xl sm:text-4xl md:text-5xl font-bold text-white mb-2",children:"\uD83E\uDDEE Boomer Calc"}),(0,l.jsx)("p",{className:"text-base sm:text-lg md:text-xl text-white/90 font-semibold",children:"Simple. Easy. Clear."})]}),(0,l.jsxs)("div",{className:"flex flex-wrap justify-center gap-2 sm:gap-3 mb-3 sm:mb-4",children:[(0,l.jsx)("button",{onClick:e=>{e.preventDefault(),t("scientific")},onTouchEnd:e=>{e.preventDefault(),t("scientific")},className:"px-4 sm:px-6 py-2 sm:py-3 rounded-lg font-bold select-none cursor-pointer text-base sm:text-lg md:text-xl shadow-lg ".concat("scientific"===e?"bg-white text-purple-600 scale-105":"bg-white/20 text-white"),style:{WebkitTapHighlightColor:"transparent"},children:"\uD83D\uDD2C Calculator"}),(0,l.jsx)("button",{onClick:e=>{e.preventDefault(),t("mortgage")},onTouchEnd:e=>{e.preventDefault(),t("mortgage")},className:"px-4 sm:px-6 py-2 sm:py-3 rounded-lg font-bold select-none cursor-pointer text-base sm:text-lg md:text-xl shadow-lg ".concat("mortgage"===e?"bg-white text-purple-600 scale-105":"bg-white/20 text-white"),style:{WebkitTapHighlightColor:"transparent"},children:"\uD83C\uDFE0 Mortgage"}),(0,l.jsx)("button",{onClick:e=>{e.preventDefault(),t("bmi")},onTouchEnd:e=>{e.preventDefault(),t("bmi")},className:"px-4 sm:px-6 py-2 sm:py-3 rounded-lg font-bold select-none cursor-pointer text-base sm:text-lg md:text-xl shadow-lg ".concat("bmi"===e?"bg-white text-purple-600 scale-105":"bg-white/20 text-white"),style:{WebkitTapHighlightColor:"transparent"},children:"\uD83D\uDCAA BMI"}),(0,l.jsx)("button",{onClick:e=>{e.preventDefault(),t("tip")},onTouchEnd:e=>{e.preventDefault(),t("tip")},className:"px-4 sm:px-6 py-2 sm:py-3 rounded-lg font-bold select-none cursor-pointer text-base sm:text-lg md:text-xl shadow-lg ".concat("tip"===e?"bg-white text-purple-600 scale-105":"bg-white/20 text-white"),style:{WebkitTapHighlightColor:"transparent"},children:"\uD83D\uDCB5 Tip"})]}),(0,l.jsxs)("div",{className:"mb-3 sm:mb-4",children:["scientific"===e&&(0,l.jsx)(r,{}),"mortgage"===e&&(0,l.jsx)(n,{}),"bmi"===e&&(0,l.jsx)(o,{}),"tip"===e&&(0,l.jsx)(x,{})]}),(0,l.jsxs)("div",{className:"text-center text-white/60 text-sm sm:text-base",children:[(0,l.jsx)("p",{className:"mb-1",children:"\uD83D\uDE0A Easy to use. Easy to read."}),(0,l.jsx)("p",{children:"Made with ❤️ for everyone"})]})]})})}}},function(e){e.O(0,[971,117,744],function(){return e(e.s=9018)}),_N_E=e.O()}]);
\ No newline at end of file
diff --git a/out/_next/static/css/67036131b6ae7bc2.css b/out/_next/static/css/67036131b6ae7bc2.css
deleted file mode 100644
index 515f1f3..0000000
--- a/out/_next/static/css/67036131b6ae7bc2.css
+++ /dev/null
@@ -1,3 +0,0 @@
-@font-face{font-family:__Inter_f367f3;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/ba9851c3c22cd980-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:__Inter_f367f3;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/21350d82a1f187e9-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:__Inter_f367f3;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/c5fe6dc8356a8c31-s.woff2) format("woff2");unicode-range:u+1f??}@font-face{font-family:__Inter_f367f3;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/19cfc7226ec3afaa-s.woff2) format("woff2");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-family:__Inter_f367f3;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/df0a9ae256c0569c-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:__Inter_f367f3;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/8e9860b6e62d6359-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:__Inter_f367f3;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/e4af272ccee01ff0-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:__Inter_Fallback_f367f3;src:local("Arial");ascent-override:90.49%;descent-override:22.56%;line-gap-override:0.00%;size-adjust:107.06%}.__className_f367f3{font-family:__Inter_f367f3,__Inter_Fallback_f367f3;font-style:normal}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*
-! tailwindcss v3.4.18 | MIT License | https://tailwindcss.com
-*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.static{position:static}.col-span-1{grid-column:span 1/span 1}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.block{display:block}.flex{display:flex}.grid{display:grid}.h-3{height:.75rem}.min-h-screen{min-height:100vh}.w-full{width:100%}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.flex-1{flex:1 1 0%}.scale-105{--tw-scale-x:1.05;--tw-scale-y:1.05}.scale-105,.scale-110{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.flex-wrap{flex-wrap:wrap}.justify-center{justify-content:center}.gap-2{gap:.5rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.break-words{overflow-wrap:break-word}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.border-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity,1))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.bg-purple-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity,1))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-white\/20{background-color:hsla(0,0%,100%,.2)}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-green-50{--tw-gradient-from:#f0fdf4 var(--tw-gradient-from-position);--tw-gradient-to:rgba(240,253,244,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-purple-50{--tw-gradient-from:#faf5ff var(--tw-gradient-from-position);--tw-gradient-to:rgba(250,245,255,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-purple-500{--tw-gradient-from:#a855f7 var(--tw-gradient-from-position);--tw-gradient-to:rgba(168,85,247,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-pink-500{--tw-gradient-to:rgba(236,72,153,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#ec4899 var(--tw-gradient-via-position),var(--tw-gradient-to)}.to-blue-50{--tw-gradient-to:#eff6ff var(--tw-gradient-to-position)}.to-emerald-50{--tw-gradient-to:#ecfdf5 var(--tw-gradient-to-position)}.to-pink-50{--tw-gradient-to:#fdf2f8 var(--tw-gradient-to-position)}.to-pink-500{--tw-gradient-to:#ec4899 var(--tw-gradient-to-position)}.to-red-500{--tw-gradient-to:#ef4444 var(--tw-gradient-to-position)}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.pb-safe{padding-bottom:env(safe-area-inset-top)}.pt-4{padding-top:1rem}.pt-safe{padding-top:env(safe-area-inset-top)}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-semibold{font-weight:600}.leading-relaxed{line-height:1.625}.text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.text-purple-600{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-white\/60{color:hsla(0,0%,100%,.6)}.text-white\/90{color:hsla(0,0%,100%,.9)}.underline{text-decoration-line:underline}.accent-purple-500{accent-color:#a855f7}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.shadow-2xl,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}:root{--foreground-rgb:0,0,0;--background-start-rgb:214,219,220;--background-end-rgb:255,255,255}@media (prefers-color-scheme:dark){:root{--foreground-rgb:255,255,255;--background-start-rgb:0,0,0;--background-end-rgb:0,0,0}}body{color:rgb(var(--foreground-rgb));background:linear-gradient(to bottom,transparent,rgb(var(--background-end-rgb))) rgb(var(--background-start-rgb));min-height:100vh;padding-top:env(safe-area-inset-top);padding-bottom:env(safe-area-inset-bottom)}@keyframes rainbow{0%{filter:hue-rotate(0deg)}to{filter:hue-rotate(1turn)}}.rainbow-animation{animation:rainbow 3s linear infinite}@keyframes shake{0%,to{transform:translateX(0)}10%,30%,50%,70%,90%{transform:translateX(-10px)}20%,40%,60%,80%{transform:translateX(10px)}}.shake-animation{animation:shake .5s}.hover\:text-blue-300:hover{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.focus\:border-purple-500:focus{--tw-border-opacity:1;border-color:rgb(168 85 247/var(--tw-border-opacity,1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}@media (min-width:640px){.sm\:mb-4{margin-bottom:1rem}.sm\:gap-3{gap:.75rem}.sm\:space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.sm\:p-3{padding:.75rem}.sm\:p-4{padding:1rem}.sm\:p-5{padding:1.25rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-3{padding-top:.75rem;padding-bottom:.75rem}.sm\:py-4{padding-top:1rem;padding-bottom:1rem}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.sm\:text-3xl{font-size:1.875rem;line-height:2.25rem}.sm\:text-4xl{font-size:2.25rem;line-height:2.5rem}.sm\:text-base{font-size:1rem;line-height:1.5rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}.sm\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width:768px){.md\:p-6{padding:1.5rem}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.md\:text-4xl{font-size:2.25rem;line-height:2.5rem}.md\:text-5xl{font-size:3rem;line-height:1}.md\:text-xl{font-size:1.25rem;line-height:1.75rem}}
\ No newline at end of file
diff --git a/out/_next/static/css/dbecb8d230e421c8.css b/out/_next/static/css/dbecb8d230e421c8.css
new file mode 100644
index 0000000..013730d
--- /dev/null
+++ b/out/_next/static/css/dbecb8d230e421c8.css
@@ -0,0 +1,3 @@
+@font-face{font-family:__Inter_f367f3;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/ba9851c3c22cd980-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:__Inter_f367f3;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/21350d82a1f187e9-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:__Inter_f367f3;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/c5fe6dc8356a8c31-s.woff2) format("woff2");unicode-range:u+1f??}@font-face{font-family:__Inter_f367f3;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/19cfc7226ec3afaa-s.woff2) format("woff2");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-family:__Inter_f367f3;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/df0a9ae256c0569c-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:__Inter_f367f3;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/8e9860b6e62d6359-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:__Inter_f367f3;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/e4af272ccee01ff0-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:__Inter_Fallback_f367f3;src:local("Arial");ascent-override:90.49%;descent-override:22.56%;line-gap-override:0.00%;size-adjust:107.06%}.__className_f367f3{font-family:__Inter_f367f3,__Inter_Fallback_f367f3;font-style:normal}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*
+! tailwindcss v3.4.18 | MIT License | https://tailwindcss.com
+*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.static{position:static}.col-span-1{grid-column:span 1/span 1}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.block{display:block}.flex{display:flex}.grid{display:grid}.h-3{height:.75rem}.min-h-screen{min-height:100vh}.w-full{width:100%}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.flex-1{flex:1 1 0%}.scale-105{--tw-scale-x:1.05;--tw-scale-y:1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.flex-wrap{flex-wrap:wrap}.justify-center{justify-content:center}.gap-2{gap:.5rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.border-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity,1))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.bg-purple-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity,1))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-white\/20{background-color:hsla(0,0%,100%,.2)}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-green-50{--tw-gradient-from:#f0fdf4 var(--tw-gradient-from-position);--tw-gradient-to:rgba(240,253,244,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-purple-50{--tw-gradient-from:#faf5ff var(--tw-gradient-from-position);--tw-gradient-to:rgba(250,245,255,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-purple-500{--tw-gradient-from:#a855f7 var(--tw-gradient-from-position);--tw-gradient-to:rgba(168,85,247,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-pink-500{--tw-gradient-to:rgba(236,72,153,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#ec4899 var(--tw-gradient-via-position),var(--tw-gradient-to)}.to-blue-50{--tw-gradient-to:#eff6ff var(--tw-gradient-to-position)}.to-emerald-50{--tw-gradient-to:#ecfdf5 var(--tw-gradient-to-position)}.to-pink-50{--tw-gradient-to:#fdf2f8 var(--tw-gradient-to-position)}.to-pink-500{--tw-gradient-to:#ec4899 var(--tw-gradient-to-position)}.to-red-500{--tw-gradient-to:#ef4444 var(--tw-gradient-to-position)}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.pb-safe{padding-bottom:env(safe-area-inset-top)}.pt-4{padding-top:1rem}.pt-safe{padding-top:env(safe-area-inset-top)}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-semibold{font-weight:600}.leading-relaxed{line-height:1.625}.text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.text-purple-600{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity,1))}.text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-white\/60{color:hsla(0,0%,100%,.6)}.text-white\/90{color:hsla(0,0%,100%,.9)}.underline{text-decoration-line:underline}.accent-purple-500{accent-color:#a855f7}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.shadow-2xl,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}:root{--foreground-rgb:0,0,0;--background-start-rgb:214,219,220;--background-end-rgb:255,255,255}@media (prefers-color-scheme:dark){:root{--foreground-rgb:255,255,255;--background-start-rgb:0,0,0;--background-end-rgb:0,0,0}}body{color:rgb(var(--foreground-rgb));background:linear-gradient(to bottom,transparent,rgb(var(--background-end-rgb))) rgb(var(--background-start-rgb));min-height:100vh;padding-top:env(safe-area-inset-top);padding-bottom:env(safe-area-inset-bottom)}@keyframes rainbow{0%{filter:hue-rotate(0deg)}to{filter:hue-rotate(1turn)}}.rainbow-animation{animation:rainbow 3s linear infinite}@keyframes shake{0%,to{transform:translateX(0)}10%,30%,50%,70%,90%{transform:translateX(-10px)}20%,40%,60%,80%{transform:translateX(10px)}}.shake-animation{animation:shake .5s}.hover\:text-blue-300:hover{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.focus\:border-purple-500:focus{--tw-border-opacity:1;border-color:rgb(168 85 247/var(--tw-border-opacity,1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}@media (min-width:640px){.sm\:mb-4{margin-bottom:1rem}.sm\:gap-3{gap:.75rem}.sm\:space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.sm\:p-3{padding:.75rem}.sm\:p-4{padding:1rem}.sm\:p-5{padding:1.25rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-3{padding-top:.75rem;padding-bottom:.75rem}.sm\:py-4{padding-top:1rem;padding-bottom:1rem}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.sm\:text-3xl{font-size:1.875rem;line-height:2.25rem}.sm\:text-4xl{font-size:2.25rem;line-height:2.5rem}.sm\:text-base{font-size:1rem;line-height:1.5rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}.sm\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width:768px){.md\:p-6{padding:1.5rem}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.md\:text-4xl{font-size:2.25rem;line-height:2.5rem}.md\:text-5xl{font-size:3rem;line-height:1}.md\:text-xl{font-size:1.25rem;line-height:1.75rem}}
\ No newline at end of file
diff --git a/out/index.html b/out/index.html
index f2bb662..c9d1a8b 100644
--- a/out/index.html
+++ b/out/index.html
@@ -1 +1 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/><link rel="preload" href="/_next/static/media/e4af272ccee01ff0-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/67036131b6ae7bc2.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-9bb46ca1fa3f9a7b.js"/><script src="/_next/static/chunks/fd9d1056-9f91b5e418130764.js" async=""></script><script src="/_next/static/chunks/117-ea0db1a6324509e4.js" async=""></script><script src="/_next/static/chunks/main-app-db613fed919dc4ab.js" async=""></script><script src="/_next/static/chunks/app/page-aad68d69a2ad4add.js" async=""></script><script src="/_next/static/chunks/app/layout-f61ae32ec34132b3.js" async=""></script><link rel="apple-touch-icon" href="/icon-192.png"/><meta name="theme-color" content="#9333ea"/><title>Boomer Calc - Easy Calculator</title><meta name="description" content="Simple, easy-to-read calculator with big numbers. Perfect for everyone!"/><meta name="application-name" content="Boomer Calc"/><link rel="manifest" href="/manifest.json" crossorigin="use-credentials"/><meta name="apple-mobile-web-app-capable" content="yes"/><meta name="apple-mobile-web-app-title" content="Boomer Calc"/><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/><link rel="icon" href="/icon-192.png"/><link rel="apple-touch-icon" href="/icon-192.png"/><meta name="next-size-adjust"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__className_f367f3"><main class="min-h-screen bg-gradient-to-br from-purple-500 via-pink-500 to-red-500 p-2 sm:p-3 pt-safe pb-safe"><div class="max-w-4xl mx-auto pt-4"><div class="text-center mb-3 sm:mb-4"><h1 class="text-3xl sm:text-4xl md:text-5xl font-bold text-white mb-2">🧮 Boomer Calc</h1><p class="text-base sm:text-lg md:text-xl text-white/90 font-semibold">Simple. Easy. Clear.</p></div><div class="flex flex-wrap justify-center gap-2 sm:gap-3 mb-3 sm:mb-4"><button class="px-4 sm:px-6 py-2 sm:py-3 rounded-lg font-bold select-none cursor-pointer text-base sm:text-lg md:text-xl shadow-lg bg-white text-purple-600 scale-105" style="-webkit-tap-highlight-color:transparent">🔬 Calculator</button><button class="px-4 sm:px-6 py-2 sm:py-3 rounded-lg font-bold select-none cursor-pointer text-base sm:text-lg md:text-xl shadow-lg bg-white/20 text-white" style="-webkit-tap-highlight-color:transparent">🏠 Mortgage</button><button class="px-4 sm:px-6 py-2 sm:py-3 rounded-lg font-bold select-none cursor-pointer text-base sm:text-lg md:text-xl shadow-lg bg-white/20 text-white" style="-webkit-tap-highlight-color:transparent">💪 BMI</button><button class="px-4 sm:px-6 py-2 sm:py-3 rounded-lg font-bold select-none cursor-pointer text-base sm:text-lg md:text-xl shadow-lg bg-white/20 text-white" style="-webkit-tap-highlight-color:transparent">💵 Tip</button></div><div class="mb-3 sm:mb-4"><div class="bg-white rounded-xl shadow-2xl p-3 sm:p-4 max-w-2xl mx-auto"><div class="mb-3 sm:mb-4"><div class="bg-gray-900 text-white p-4 sm:p-5 rounded-lg"><div class="text-3xl sm:text-4xl md:text-5xl font-bold font-mono transition-all px-2 text-center break-words ">0</div></div></div><div class="grid grid-cols-4 gap-2 sm:gap-3"><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-red-500 text-white" style="-webkit-tap-highlight-color:transparent">C</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gray-200" style="-webkit-tap-highlight-color:transparent">(</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gray-200" style="-webkit-tap-highlight-color:transparent">)</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-blue-500 text-white" style="-webkit-tap-highlight-color:transparent">/</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gray-200" style="-webkit-tap-highlight-color:transparent">7</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gray-200" style="-webkit-tap-highlight-color:transparent">8</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gray-200" style="-webkit-tap-highlight-color:transparent">9</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-blue-500 text-white" style="-webkit-tap-highlight-color:transparent">*</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gray-200" style="-webkit-tap-highlight-color:transparent">4</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gray-200" style="-webkit-tap-highlight-color:transparent">5</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gray-200" style="-webkit-tap-highlight-color:transparent">6</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-blue-500 text-white" style="-webkit-tap-highlight-color:transparent">-</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gray-200" style="-webkit-tap-highlight-color:transparent">1</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gray-200" style="-webkit-tap-highlight-color:transparent">2</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gray-200" style="-webkit-tap-highlight-color:transparent">3</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-blue-500 text-white" style="-webkit-tap-highlight-color:transparent">+</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gray-200" style="-webkit-tap-highlight-color:transparent">0</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gray-200" style="-webkit-tap-highlight-color:transparent">.</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gray-200" style="-webkit-tap-highlight-color:transparent">sin</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gradient-to-r from-purple-500 to-pink-500 text-white col-span-1" style="-webkit-tap-highlight-color:transparent">=</button></div><div class="mt-3 text-center text-sm sm:text-base text-gray-600 font-semibold"><p>Easy Calculator</p></div></div></div><div class="text-center text-white/60 text-sm sm:text-base"><p class="mb-1">😊 Easy to use. Easy to read.</p><p>Made with ❤️ for everyone</p></div></div></main><script src="/_next/static/chunks/webpack-9bb46ca1fa3f9a7b.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/media/e4af272ccee01ff0-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n2:HL[\"/_next/static/css/67036131b6ae7bc2.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"3:I[2846,[],\"\"]\n5:I[9107,[],\"ClientPageRoot\"]\n6:I[3976,[\"931\",\"static/chunks/app/page-aad68d69a2ad4add.js\"],\"default\",1]\n7:I[4707,[],\"\"]\n8:I[6423,[],\"\"]\n9:I[1999,[\"185\",\"static/chunks/app/layout-f61ae32ec34132b3.js\"],\"default\"]\nb:I[1060,[],\"\"]\nc:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L3\",null,{\"buildId\":\"GqVRgqKrCqNNbhALr1lKf\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"\"],\"initialTree\":[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"__PAGE__\",{},[[\"$L4\",[\"$\",\"$L5\",null,{\"props\":{\"params\":{},\"searchParams\":{}},\"Component\":\"$6\"}],null],null],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/67036131b6ae7bc2.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"link\",null,{\"rel\":\"apple-touch-icon\",\"href\":\"/icon-192.png\"}]}],[\"$\",\"body\",null,{\"className\":\"__className_f367f3\",\"children\":[[\"$\",\"$L7\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L8\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}],[\"$\",\"$L9\",null,{}]]}]]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[null,\"$La\"],\"globalErrorComponent\":\"$b\",\"missingSlots\":\"$Wc\"}]\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, viewport-fit=cover\"}],[\"$\",\"meta\",\"1\",{\"name\":\"theme-color\",\"content\":\"#9333ea\"}],[\"$\",\"meta\",\"2\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"3\",{\"children\":\"Boomer Calc - Easy Calculator\"}],[\"$\",\"meta\",\"4\",{\"name\":\"description\",\"content\":\"Simple, easy-to-read calculator with big numbers. Perfect for everyone!\"}],[\"$\",\"meta\",\"5\",{\"name\":\"application-name\",\"content\":\"Boomer Calc\"}],[\"$\",\"link\",\"6\",{\"rel\":\"manifest\",\"href\":\"/manifest.json\",\"crossOrigin\":\"use-credentials\"}],[\"$\",\"meta\",\"7\",{\"name\":\"apple-mobile-web-app-capable\",\"content\":\"yes\"}],[\"$\",\"meta\",\"8\",{\"name\":\"apple-mobile-web-app-title\",\"content\":\"Boomer Calc\"}],[\"$\",\"meta\",\"9\",{\"name\":\"apple-mobile-web-app-status-bar-style\",\"content\":\"black-translucent\"}],[\"$\",\"link\",\"10\",{\"rel\":\"icon\",\"href\":\"/icon-192.png\"}],[\"$\",\"link\",\"11\",{\"rel\":\"apple-touch-icon\",\"href\":\"/icon-192.png\"}],[\"$\",\"meta\",\"12\",{\"name\":\"next-size-adjust\"}]]\n4:null\n"])</script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/><link rel="preload" href="/_next/static/media/e4af272ccee01ff0-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/dbecb8d230e421c8.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-9bb46ca1fa3f9a7b.js"/><script src="/_next/static/chunks/fd9d1056-9f91b5e418130764.js" async=""></script><script src="/_next/static/chunks/117-ea0db1a6324509e4.js" async=""></script><script src="/_next/static/chunks/main-app-db613fed919dc4ab.js" async=""></script><script src="/_next/static/chunks/app/page-1dfce1602fdbe058.js" async=""></script><script src="/_next/static/chunks/app/layout-f61ae32ec34132b3.js" async=""></script><link rel="apple-touch-icon" href="/icon-192.png"/><meta name="theme-color" content="#9333ea"/><title>Boomer Calc - Easy Calculator</title><meta name="description" content="Simple, easy-to-read calculator with big numbers. Perfect for everyone!"/><meta name="application-name" content="Boomer Calc"/><link rel="manifest" href="/manifest.json" crossorigin="use-credentials"/><meta name="apple-mobile-web-app-capable" content="yes"/><meta name="apple-mobile-web-app-title" content="Boomer Calc"/><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/><link rel="icon" href="/icon-192.png"/><link rel="apple-touch-icon" href="/icon-192.png"/><meta name="next-size-adjust"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__className_f367f3"><main class="min-h-screen bg-gradient-to-br from-purple-500 via-pink-500 to-red-500 p-2 sm:p-3 pt-safe pb-safe"><div class="max-w-4xl mx-auto pt-4"><div class="text-center mb-3 sm:mb-4"><h1 class="text-3xl sm:text-4xl md:text-5xl font-bold text-white mb-2">🧮 Boomer Calc</h1><p class="text-base sm:text-lg md:text-xl text-white/90 font-semibold">Simple. Easy. Clear.</p></div><div class="flex flex-wrap justify-center gap-2 sm:gap-3 mb-3 sm:mb-4"><button class="px-4 sm:px-6 py-2 sm:py-3 rounded-lg font-bold select-none cursor-pointer text-base sm:text-lg md:text-xl shadow-lg bg-white text-purple-600 scale-105" style="-webkit-tap-highlight-color:transparent">🔬 Calculator</button><button class="px-4 sm:px-6 py-2 sm:py-3 rounded-lg font-bold select-none cursor-pointer text-base sm:text-lg md:text-xl shadow-lg bg-white/20 text-white" style="-webkit-tap-highlight-color:transparent">🏠 Mortgage</button><button class="px-4 sm:px-6 py-2 sm:py-3 rounded-lg font-bold select-none cursor-pointer text-base sm:text-lg md:text-xl shadow-lg bg-white/20 text-white" style="-webkit-tap-highlight-color:transparent">💪 BMI</button><button class="px-4 sm:px-6 py-2 sm:py-3 rounded-lg font-bold select-none cursor-pointer text-base sm:text-lg md:text-xl shadow-lg bg-white/20 text-white" style="-webkit-tap-highlight-color:transparent">💵 Tip</button></div><div class="mb-3 sm:mb-4"><div class="bg-white rounded-xl shadow-2xl p-3 sm:p-4 max-w-2xl mx-auto"><div class="mb-3 sm:mb-4"><div class="bg-gray-900 text-white p-4 sm:p-5 rounded-lg"><div role="status" aria-label="Calculator display" class="text-3xl sm:text-4xl md:text-5xl font-bold font-mono px-2 text-center break-words">0</div></div></div><div class="grid grid-cols-4 gap-2 sm:gap-3"><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-red-500 text-white" style="-webkit-tap-highlight-color:transparent">C</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gray-200" style="-webkit-tap-highlight-color:transparent">(</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gray-200" style="-webkit-tap-highlight-color:transparent">)</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-blue-500 text-white" style="-webkit-tap-highlight-color:transparent">/</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gray-200" style="-webkit-tap-highlight-color:transparent">7</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gray-200" style="-webkit-tap-highlight-color:transparent">8</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gray-200" style="-webkit-tap-highlight-color:transparent">9</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-blue-500 text-white" style="-webkit-tap-highlight-color:transparent">*</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gray-200" style="-webkit-tap-highlight-color:transparent">4</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gray-200" style="-webkit-tap-highlight-color:transparent">5</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gray-200" style="-webkit-tap-highlight-color:transparent">6</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-blue-500 text-white" style="-webkit-tap-highlight-color:transparent">-</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gray-200" style="-webkit-tap-highlight-color:transparent">1</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gray-200" style="-webkit-tap-highlight-color:transparent">2</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gray-200" style="-webkit-tap-highlight-color:transparent">3</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-blue-500 text-white" style="-webkit-tap-highlight-color:transparent">+</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gray-200" style="-webkit-tap-highlight-color:transparent">0</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gray-200" style="-webkit-tap-highlight-color:transparent">.</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gray-200" style="-webkit-tap-highlight-color:transparent">sin</button><button class="p-4 sm:p-5 md:p-6 rounded-lg font-bold text-xl sm:text-2xl md:text-3xl select-none cursor-pointer shadow-lg bg-gradient-to-r from-purple-500 to-pink-500 text-white col-span-1" style="-webkit-tap-highlight-color:transparent">=</button></div><div class="mt-3 text-center text-sm sm:text-base text-gray-600 font-semibold"><p>Arithmetic and sine · sin uses degrees</p></div></div></div><div class="text-center text-white/60 text-sm sm:text-base"><p class="mb-1">😊 Easy to use. Easy to read.</p><p>Made with ❤️ for everyone</p></div></div></main><script src="/_next/static/chunks/webpack-9bb46ca1fa3f9a7b.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/media/e4af272ccee01ff0-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n2:HL[\"/_next/static/css/dbecb8d230e421c8.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"3:I[2846,[],\"\"]\n5:I[9107,[],\"ClientPageRoot\"]\n6:I[9982,[\"931\",\"static/chunks/app/page-1dfce1602fdbe058.js\"],\"default\",1]\n7:I[4707,[],\"\"]\n8:I[6423,[],\"\"]\n9:I[1999,[\"185\",\"static/chunks/app/layout-f61ae32ec34132b3.js\"],\"default\"]\nb:I[1060,[],\"\"]\nc:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L3\",null,{\"buildId\":\"_2SGBk7EQqSWs9NeyvHFM\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"\"],\"initialTree\":[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"__PAGE__\",{},[[\"$L4\",[\"$\",\"$L5\",null,{\"props\":{\"params\":{},\"searchParams\":{}},\"Component\":\"$6\"}],null],null],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/dbecb8d230e421c8.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"link\",null,{\"rel\":\"apple-touch-icon\",\"href\":\"/icon-192.png\"}]}],[\"$\",\"body\",null,{\"className\":\"__className_f367f3\",\"children\":[[\"$\",\"$L7\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L8\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}],[\"$\",\"$L9\",null,{}]]}]]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[null,\"$La\"],\"globalErrorComponent\":\"$b\",\"missingSlots\":\"$Wc\"}]\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, viewport-fit=cover\"}],[\"$\",\"meta\",\"1\",{\"name\":\"theme-color\",\"content\":\"#9333ea\"}],[\"$\",\"meta\",\"2\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"3\",{\"children\":\"Boomer Calc - Easy Calculator\"}],[\"$\",\"meta\",\"4\",{\"name\":\"description\",\"content\":\"Simple, easy-to-read calculator with big numbers. Perfect for everyone!\"}],[\"$\",\"meta\",\"5\",{\"name\":\"application-name\",\"content\":\"Boomer Calc\"}],[\"$\",\"link\",\"6\",{\"rel\":\"manifest\",\"href\":\"/manifest.json\",\"crossOrigin\":\"use-credentials\"}],[\"$\",\"meta\",\"7\",{\"name\":\"apple-mobile-web-app-capable\",\"content\":\"yes\"}],[\"$\",\"meta\",\"8\",{\"name\":\"apple-mobile-web-app-title\",\"content\":\"Boomer Calc\"}],[\"$\",\"meta\",\"9\",{\"name\":\"apple-mobile-web-app-status-bar-style\",\"content\":\"black-translucent\"}],[\"$\",\"link\",\"10\",{\"rel\":\"icon\",\"href\":\"/icon-192.png\"}],[\"$\",\"link\",\"11\",{\"rel\":\"apple-touch-icon\",\"href\":\"/icon-192.png\"}],[\"$\",\"meta\",\"12\",{\"name\":\"next-size-adjust\"}]]\n4:null\n"])</script></body></html>
\ No newline at end of file
diff --git a/out/privacy.html b/out/privacy.html
index 0cd0a20..2fb4edc 100644
--- a/out/privacy.html
+++ b/out/privacy.html
@@ -1 +1 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/><link rel="preload" href="/_next/static/media/e4af272ccee01ff0-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/67036131b6ae7bc2.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-9bb46ca1fa3f9a7b.js"/><script src="/_next/static/chunks/fd9d1056-9f91b5e418130764.js" async=""></script><script src="/_next/static/chunks/117-ea0db1a6324509e4.js" async=""></script><script src="/_next/static/chunks/main-app-db613fed919dc4ab.js" async=""></script><script src="/_next/static/chunks/app/layout-f61ae32ec34132b3.js" async=""></script><link rel="apple-touch-icon" href="/icon-192.png"/><meta name="theme-color" content="#9333ea"/><title>Boomer Calc - Easy Calculator</title><meta name="description" content="Simple, easy-to-read calculator with big numbers. Perfect for everyone!"/><meta name="application-name" content="Boomer Calc"/><link rel="manifest" href="/manifest.json" crossorigin="use-credentials"/><meta name="apple-mobile-web-app-capable" content="yes"/><meta name="apple-mobile-web-app-title" content="Boomer Calc"/><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/><link rel="icon" href="/icon-192.png"/><link rel="apple-touch-icon" href="/icon-192.png"/><meta name="next-size-adjust"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__className_f367f3"><div class="min-h-screen bg-gray-900 text-gray-100 p-8"><div class="max-w-3xl mx-auto"><h1 class="text-4xl font-bold mb-8">Privacy Policy for Boomer Calc</h1><p class="text-gray-400 mb-8">Last updated: September 11, 2026</p><section class="mb-8"><h2 class="text-2xl font-semibold mb-4">Developer Information</h2><p class="text-gray-300 leading-relaxed"><strong>Developer:</strong> Steve Abrams Designs<br/><strong>Contact:</strong> <a href="mailto:steveabramsdesigns@gmail.com" class="text-blue-400 hover:text-blue-300 underline">steveabramsdesigns@gmail.com</a></p></section><section class="mb-8"><h2 class="text-2xl font-semibold mb-4">Overview</h2><p class="text-gray-300 leading-relaxed">Boomer Calc is committed to protecting your privacy. This privacy policy explains how our application handles your information.</p></section><section class="mb-8"><h2 class="text-2xl font-semibold mb-4">Data Collection</h2><p class="text-gray-300 leading-relaxed mb-4"><strong>The numbers you enter are processed locally on your device.</strong></p><p class="text-gray-300 leading-relaxed">Calculator inputs are not sent to us or saved by the calculator. The calculator does not require an account. Advertising uses network connections and may involve device and usage data as described below; the app as a whole is not data-free.</p></section><section class="mb-8"><h2 class="text-2xl font-semibold mb-4">Third-Party Services</h2><p class="text-gray-300 leading-relaxed mb-4">The calculator itself does not collect, store, or transmit any of the numbers you enter — those stay on your device and are never sent anywhere.</p><p class="text-gray-300 leading-relaxed">Boomer Calc is supported by advertising. The iOS app uses banner ads served by <strong>Google AdMob</strong>; the website at boomercalc.com displays ads served by <strong>Google AdSense</strong>. Google's advertising services may process IP addresses, device identifiers, diagnostic and performance information, and ad interactions to deliver and measure advertising. On the web, advertising services may also use cookies or similar technologies. See <a href="https://policies.google.com/privacy" class="text-blue-400 hover:text-blue-300 underline">Google's Privacy Policy</a> and its <a href="https://policies.google.com/technologies/partner-sites" class="text-blue-400 hover:text-blue-300 underline">information about partner apps and sites</a>.</p><p class="text-gray-300 leading-relaxed mt-4">The iOS app includes SKAdNetwork advertising-attribution configuration and requests tracking authorization through Apple's App Tracking Transparency system. Whether a prompt appears depends on your device settings and previous permission choices. You can review tracking permissions in iOS Settings → Privacy & Security → Tracking. Declining tracking permission does not mean that advertising services collect no data or that all ads disappear.</p></section><section class="mb-8"><h2 class="text-2xl font-semibold mb-4">Data Security</h2><p class="text-gray-300 leading-relaxed">Calculator inputs are processed on your device. Data handled by Google's advertising services is subject to Google's privacy practices and applicable device permissions. If you contact us for support, we receive the information you choose to include in your message. Please do not send sensitive information that is unnecessary for your support request.</p></section><section class="mb-8"><h2 class="text-2xl font-semibold mb-4">Changes to This Policy</h2><p class="text-gray-300 leading-relaxed">We may update this privacy policy from time to time. Any changes will be posted on this page with an updated revision date.</p></section><section class="mb-8"><h2 class="text-2xl font-semibold mb-4">Contact Us</h2><p class="text-gray-300 leading-relaxed">If you have any questions about this privacy policy, please contact us through our <a href="/support" class="text-blue-400 hover:text-blue-300 underline">support page</a>.</p></section></div></div><script src="/_next/static/chunks/webpack-9bb46ca1fa3f9a7b.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/media/e4af272ccee01ff0-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n2:HL[\"/_next/static/css/67036131b6ae7bc2.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"3:I[2846,[],\"\"]\n5:I[4707,[],\"\"]\n6:I[6423,[],\"\"]\n7:I[1999,[\"185\",\"static/chunks/app/layout-f61ae32ec34132b3.js\"],\"default\"]\n9:I[1060,[],\"\"]\na:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L3\",null,{\"buildId\":\"GqVRgqKrCqNNbhALr1lKf\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"privacy\"],\"initialTree\":[\"\",{\"children\":[\"privacy\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"privacy\",{\"children\":[\"__PAGE__\",{},[[\"$L4\",[\"$\",\"div\",null,{\"className\":\"min-h-screen bg-gray-900 text-gray-100 p-8\",\"children\":[\"$\",\"div\",null,{\"className\":\"max-w-3xl mx-auto\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"text-4xl font-bold mb-8\",\"children\":\"Privacy Policy for Boomer Calc\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-400 mb-8\",\"children\":\"Last updated: September 11, 2026\"}],[\"$\",\"section\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold mb-4\",\"children\":\"Developer Information\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed\",\"children\":[[\"$\",\"strong\",null,{\"children\":\"Developer:\"}],\" Steve Abrams Designs\",[\"$\",\"br\",null,{}],[\"$\",\"strong\",null,{\"children\":\"Contact:\"}],\" \",[\"$\",\"a\",null,{\"href\":\"mailto:steveabramsdesigns@gmail.com\",\"className\":\"text-blue-400 hover:text-blue-300 underline\",\"children\":\"steveabramsdesigns@gmail.com\"}]]}]]}],[\"$\",\"section\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold mb-4\",\"children\":\"Overview\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed\",\"children\":\"Boomer Calc is committed to protecting your privacy. This privacy policy explains how our application handles your information.\"}]]}],[\"$\",\"section\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold mb-4\",\"children\":\"Data Collection\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed mb-4\",\"children\":[\"$\",\"strong\",null,{\"children\":\"The numbers you enter are processed locally on your device.\"}]}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed\",\"children\":\"Calculator inputs are not sent to us or saved by the calculator. The calculator does not require an account. Advertising uses network connections and may involve device and usage data as described below; the app as a whole is not data-free.\"}]]}],[\"$\",\"section\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold mb-4\",\"children\":\"Third-Party Services\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed mb-4\",\"children\":\"The calculator itself does not collect, store, or transmit any of the numbers you enter — those stay on your device and are never sent anywhere.\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed\",\"children\":[\"Boomer Calc is supported by advertising. The iOS app uses banner ads served by \",[\"$\",\"strong\",null,{\"children\":\"Google AdMob\"}],\"; the website at boomercalc.com displays ads served by \",[\"$\",\"strong\",null,{\"children\":\"Google AdSense\"}],\". Google's advertising services may process IP addresses, device identifiers, diagnostic and performance information, and ad interactions to deliver and measure advertising. On the web, advertising services may also use cookies or similar technologies. See \",[\"$\",\"a\",null,{\"href\":\"https://policies.google.com/privacy\",\"className\":\"text-blue-400 hover:text-blue-300 underline\",\"children\":\"Google's Privacy Policy\"}],\" and its \",[\"$\",\"a\",null,{\"href\":\"https://policies.google.com/technologies/partner-sites\",\"className\":\"text-blue-400 hover:text-blue-300 underline\",\"children\":\"information about partner apps and sites\"}],\".\"]}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed mt-4\",\"children\":\"The iOS app includes SKAdNetwork advertising-attribution configuration and requests tracking authorization through Apple's App Tracking Transparency system. Whether a prompt appears depends on your device settings and previous permission choices. You can review tracking permissions in iOS Settings → Privacy \u0026 Security → Tracking. Declining tracking permission does not mean that advertising services collect no data or that all ads disappear.\"}]]}],[\"$\",\"section\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold mb-4\",\"children\":\"Data Security\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed\",\"children\":\"Calculator inputs are processed on your device. Data handled by Google's advertising services is subject to Google's privacy practices and applicable device permissions. If you contact us for support, we receive the information you choose to include in your message. Please do not send sensitive information that is unnecessary for your support request.\"}]]}],[\"$\",\"section\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold mb-4\",\"children\":\"Changes to This Policy\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed\",\"children\":\"We may update this privacy policy from time to time. Any changes will be posted on this page with an updated revision date.\"}]]}],[\"$\",\"section\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold mb-4\",\"children\":\"Contact Us\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed\",\"children\":[\"If you have any questions about this privacy policy, please contact us through our \",[\"$\",\"a\",null,{\"href\":\"/support\",\"className\":\"text-blue-400 hover:text-blue-300 underline\",\"children\":\"support page\"}],\".\"]}]]}]]}]}],null],null],null]},[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"privacy\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/67036131b6ae7bc2.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"link\",null,{\"rel\":\"apple-touch-icon\",\"href\":\"/icon-192.png\"}]}],[\"$\",\"body\",null,{\"className\":\"__className_f367f3\",\"children\":[[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}],[\"$\",\"$L7\",null,{}]]}]]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[null,\"$L8\"],\"globalErrorComponent\":\"$9\",\"missingSlots\":\"$Wa\"}]\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, viewport-fit=cover\"}],[\"$\",\"meta\",\"1\",{\"name\":\"theme-color\",\"content\":\"#9333ea\"}],[\"$\",\"meta\",\"2\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"3\",{\"children\":\"Boomer Calc - Easy Calculator\"}],[\"$\",\"meta\",\"4\",{\"name\":\"description\",\"content\":\"Simple, easy-to-read calculator with big numbers. Perfect for everyone!\"}],[\"$\",\"meta\",\"5\",{\"name\":\"application-name\",\"content\":\"Boomer Calc\"}],[\"$\",\"link\",\"6\",{\"rel\":\"manifest\",\"href\":\"/manifest.json\",\"crossOrigin\":\"use-credentials\"}],[\"$\",\"meta\",\"7\",{\"name\":\"apple-mobile-web-app-capable\",\"content\":\"yes\"}],[\"$\",\"meta\",\"8\",{\"name\":\"apple-mobile-web-app-title\",\"content\":\"Boomer Calc\"}],[\"$\",\"meta\",\"9\",{\"name\":\"apple-mobile-web-app-status-bar-style\",\"content\":\"black-translucent\"}],[\"$\",\"link\",\"10\",{\"rel\":\"icon\",\"href\":\"/icon-192.png\"}],[\"$\",\"link\",\"11\",{\"rel\":\"apple-touch-icon\",\"href\":\"/icon-192.png\"}],[\"$\",\"meta\",\"12\",{\"name\":\"next-size-adjust\"}]]\n4:null\n"])</script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/><link rel="preload" href="/_next/static/media/e4af272ccee01ff0-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/dbecb8d230e421c8.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-9bb46ca1fa3f9a7b.js"/><script src="/_next/static/chunks/fd9d1056-9f91b5e418130764.js" async=""></script><script src="/_next/static/chunks/117-ea0db1a6324509e4.js" async=""></script><script src="/_next/static/chunks/main-app-db613fed919dc4ab.js" async=""></script><script src="/_next/static/chunks/app/layout-f61ae32ec34132b3.js" async=""></script><link rel="apple-touch-icon" href="/icon-192.png"/><meta name="theme-color" content="#9333ea"/><title>Boomer Calc - Easy Calculator</title><meta name="description" content="Simple, easy-to-read calculator with big numbers. Perfect for everyone!"/><meta name="application-name" content="Boomer Calc"/><link rel="manifest" href="/manifest.json" crossorigin="use-credentials"/><meta name="apple-mobile-web-app-capable" content="yes"/><meta name="apple-mobile-web-app-title" content="Boomer Calc"/><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/><link rel="icon" href="/icon-192.png"/><link rel="apple-touch-icon" href="/icon-192.png"/><meta name="next-size-adjust"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__className_f367f3"><div class="min-h-screen bg-gray-900 text-gray-100 p-8"><div class="max-w-3xl mx-auto"><h1 class="text-4xl font-bold mb-8">Privacy Policy for Boomer Calc</h1><p class="text-gray-400 mb-8">Last updated: September 11, 2026</p><section class="mb-8"><h2 class="text-2xl font-semibold mb-4">Developer Information</h2><p class="text-gray-300 leading-relaxed"><strong>Developer:</strong> Steve Abrams Designs<br/><strong>Contact:</strong> <a href="mailto:steveabramsdesigns@gmail.com" class="text-blue-400 hover:text-blue-300 underline">steveabramsdesigns@gmail.com</a></p></section><section class="mb-8"><h2 class="text-2xl font-semibold mb-4">Overview</h2><p class="text-gray-300 leading-relaxed">Boomer Calc is committed to protecting your privacy. This privacy policy explains how our application handles your information.</p></section><section class="mb-8"><h2 class="text-2xl font-semibold mb-4">Data Collection</h2><p class="text-gray-300 leading-relaxed mb-4"><strong>The numbers you enter are processed locally on your device.</strong></p><p class="text-gray-300 leading-relaxed">Calculator inputs are not sent to us or saved by the calculator. The calculator does not require an account. Advertising uses network connections and may involve device and usage data as described below; the app as a whole is not data-free.</p></section><section class="mb-8"><h2 class="text-2xl font-semibold mb-4">Third-Party Services</h2><p class="text-gray-300 leading-relaxed mb-4">The calculator itself does not collect, store, or transmit any of the numbers you enter — those stay on your device and are never sent anywhere.</p><p class="text-gray-300 leading-relaxed">Boomer Calc is supported by advertising. The iOS app uses banner ads served by <strong>Google AdMob</strong>; the website at boomercalc.com displays ads served by <strong>Google AdSense</strong>. Google's advertising services may process IP addresses, device identifiers, diagnostic and performance information, and ad interactions to deliver and measure advertising. On the web, advertising services may also use cookies or similar technologies. See <a href="https://policies.google.com/privacy" class="text-blue-400 hover:text-blue-300 underline">Google's Privacy Policy</a> and its <a href="https://policies.google.com/technologies/partner-sites" class="text-blue-400 hover:text-blue-300 underline">information about partner apps and sites</a>.</p><p class="text-gray-300 leading-relaxed mt-4">The iOS app includes SKAdNetwork advertising-attribution configuration and requests tracking authorization through Apple's App Tracking Transparency system. Whether a prompt appears depends on your device settings and previous permission choices. You can review tracking permissions in iOS Settings → Privacy & Security → Tracking. Declining tracking permission does not mean that advertising services collect no data or that all ads disappear.</p></section><section class="mb-8"><h2 class="text-2xl font-semibold mb-4">Data Security</h2><p class="text-gray-300 leading-relaxed">Calculator inputs are processed on your device. Data handled by Google's advertising services is subject to Google's privacy practices and applicable device permissions. If you contact us for support, we receive the information you choose to include in your message. Please do not send sensitive information that is unnecessary for your support request.</p></section><section class="mb-8"><h2 class="text-2xl font-semibold mb-4">Changes to This Policy</h2><p class="text-gray-300 leading-relaxed">We may update this privacy policy from time to time. Any changes will be posted on this page with an updated revision date.</p></section><section class="mb-8"><h2 class="text-2xl font-semibold mb-4">Contact Us</h2><p class="text-gray-300 leading-relaxed">If you have any questions about this privacy policy, please contact us through our <a href="/support" class="text-blue-400 hover:text-blue-300 underline">support page</a>.</p></section></div></div><script src="/_next/static/chunks/webpack-9bb46ca1fa3f9a7b.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/media/e4af272ccee01ff0-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n2:HL[\"/_next/static/css/dbecb8d230e421c8.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"3:I[2846,[],\"\"]\n5:I[4707,[],\"\"]\n6:I[6423,[],\"\"]\n7:I[1999,[\"185\",\"static/chunks/app/layout-f61ae32ec34132b3.js\"],\"default\"]\n9:I[1060,[],\"\"]\na:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L3\",null,{\"buildId\":\"_2SGBk7EQqSWs9NeyvHFM\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"privacy\"],\"initialTree\":[\"\",{\"children\":[\"privacy\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"privacy\",{\"children\":[\"__PAGE__\",{},[[\"$L4\",[\"$\",\"div\",null,{\"className\":\"min-h-screen bg-gray-900 text-gray-100 p-8\",\"children\":[\"$\",\"div\",null,{\"className\":\"max-w-3xl mx-auto\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"text-4xl font-bold mb-8\",\"children\":\"Privacy Policy for Boomer Calc\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-400 mb-8\",\"children\":\"Last updated: September 11, 2026\"}],[\"$\",\"section\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold mb-4\",\"children\":\"Developer Information\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed\",\"children\":[[\"$\",\"strong\",null,{\"children\":\"Developer:\"}],\" Steve Abrams Designs\",[\"$\",\"br\",null,{}],[\"$\",\"strong\",null,{\"children\":\"Contact:\"}],\" \",[\"$\",\"a\",null,{\"href\":\"mailto:steveabramsdesigns@gmail.com\",\"className\":\"text-blue-400 hover:text-blue-300 underline\",\"children\":\"steveabramsdesigns@gmail.com\"}]]}]]}],[\"$\",\"section\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold mb-4\",\"children\":\"Overview\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed\",\"children\":\"Boomer Calc is committed to protecting your privacy. This privacy policy explains how our application handles your information.\"}]]}],[\"$\",\"section\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold mb-4\",\"children\":\"Data Collection\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed mb-4\",\"children\":[\"$\",\"strong\",null,{\"children\":\"The numbers you enter are processed locally on your device.\"}]}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed\",\"children\":\"Calculator inputs are not sent to us or saved by the calculator. The calculator does not require an account. Advertising uses network connections and may involve device and usage data as described below; the app as a whole is not data-free.\"}]]}],[\"$\",\"section\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold mb-4\",\"children\":\"Third-Party Services\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed mb-4\",\"children\":\"The calculator itself does not collect, store, or transmit any of the numbers you enter — those stay on your device and are never sent anywhere.\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed\",\"children\":[\"Boomer Calc is supported by advertising. The iOS app uses banner ads served by \",[\"$\",\"strong\",null,{\"children\":\"Google AdMob\"}],\"; the website at boomercalc.com displays ads served by \",[\"$\",\"strong\",null,{\"children\":\"Google AdSense\"}],\". Google's advertising services may process IP addresses, device identifiers, diagnostic and performance information, and ad interactions to deliver and measure advertising. On the web, advertising services may also use cookies or similar technologies. See \",[\"$\",\"a\",null,{\"href\":\"https://policies.google.com/privacy\",\"className\":\"text-blue-400 hover:text-blue-300 underline\",\"children\":\"Google's Privacy Policy\"}],\" and its \",[\"$\",\"a\",null,{\"href\":\"https://policies.google.com/technologies/partner-sites\",\"className\":\"text-blue-400 hover:text-blue-300 underline\",\"children\":\"information about partner apps and sites\"}],\".\"]}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed mt-4\",\"children\":\"The iOS app includes SKAdNetwork advertising-attribution configuration and requests tracking authorization through Apple's App Tracking Transparency system. Whether a prompt appears depends on your device settings and previous permission choices. You can review tracking permissions in iOS Settings → Privacy \u0026 Security → Tracking. Declining tracking permission does not mean that advertising services collect no data or that all ads disappear.\"}]]}],[\"$\",\"section\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold mb-4\",\"children\":\"Data Security\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed\",\"children\":\"Calculator inputs are processed on your device. Data handled by Google's advertising services is subject to Google's privacy practices and applicable device permissions. If you contact us for support, we receive the information you choose to include in your message. Please do not send sensitive information that is unnecessary for your support request.\"}]]}],[\"$\",\"section\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold mb-4\",\"children\":\"Changes to This Policy\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed\",\"children\":\"We may update this privacy policy from time to time. Any changes will be posted on this page with an updated revision date.\"}]]}],[\"$\",\"section\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold mb-4\",\"children\":\"Contact Us\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed\",\"children\":[\"If you have any questions about this privacy policy, please contact us through our \",[\"$\",\"a\",null,{\"href\":\"/support\",\"className\":\"text-blue-400 hover:text-blue-300 underline\",\"children\":\"support page\"}],\".\"]}]]}]]}]}],null],null],null]},[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"privacy\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/dbecb8d230e421c8.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"link\",null,{\"rel\":\"apple-touch-icon\",\"href\":\"/icon-192.png\"}]}],[\"$\",\"body\",null,{\"className\":\"__className_f367f3\",\"children\":[[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}],[\"$\",\"$L7\",null,{}]]}]]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[null,\"$L8\"],\"globalErrorComponent\":\"$9\",\"missingSlots\":\"$Wa\"}]\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, viewport-fit=cover\"}],[\"$\",\"meta\",\"1\",{\"name\":\"theme-color\",\"content\":\"#9333ea\"}],[\"$\",\"meta\",\"2\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"3\",{\"children\":\"Boomer Calc - Easy Calculator\"}],[\"$\",\"meta\",\"4\",{\"name\":\"description\",\"content\":\"Simple, easy-to-read calculator with big numbers. Perfect for everyone!\"}],[\"$\",\"meta\",\"5\",{\"name\":\"application-name\",\"content\":\"Boomer Calc\"}],[\"$\",\"link\",\"6\",{\"rel\":\"manifest\",\"href\":\"/manifest.json\",\"crossOrigin\":\"use-credentials\"}],[\"$\",\"meta\",\"7\",{\"name\":\"apple-mobile-web-app-capable\",\"content\":\"yes\"}],[\"$\",\"meta\",\"8\",{\"name\":\"apple-mobile-web-app-title\",\"content\":\"Boomer Calc\"}],[\"$\",\"meta\",\"9\",{\"name\":\"apple-mobile-web-app-status-bar-style\",\"content\":\"black-translucent\"}],[\"$\",\"link\",\"10\",{\"rel\":\"icon\",\"href\":\"/icon-192.png\"}],[\"$\",\"link\",\"11\",{\"rel\":\"apple-touch-icon\",\"href\":\"/icon-192.png\"}],[\"$\",\"meta\",\"12\",{\"name\":\"next-size-adjust\"}]]\n4:null\n"])</script></body></html>
\ No newline at end of file
diff --git a/out/support.html b/out/support.html
index 3fa111d..d00526d 100644
--- a/out/support.html
+++ b/out/support.html
@@ -1 +1 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/><link rel="preload" href="/_next/static/media/e4af272ccee01ff0-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/67036131b6ae7bc2.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-9bb46ca1fa3f9a7b.js"/><script src="/_next/static/chunks/fd9d1056-9f91b5e418130764.js" async=""></script><script src="/_next/static/chunks/117-ea0db1a6324509e4.js" async=""></script><script src="/_next/static/chunks/main-app-db613fed919dc4ab.js" async=""></script><script src="/_next/static/chunks/app/layout-f61ae32ec34132b3.js" async=""></script><link rel="apple-touch-icon" href="/icon-192.png"/><meta name="theme-color" content="#9333ea"/><title>Boomer Calc - Easy Calculator</title><meta name="description" content="Simple, easy-to-read calculator with big numbers. Perfect for everyone!"/><meta name="application-name" content="Boomer Calc"/><link rel="manifest" href="/manifest.json" crossorigin="use-credentials"/><meta name="apple-mobile-web-app-capable" content="yes"/><meta name="apple-mobile-web-app-title" content="Boomer Calc"/><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/><link rel="icon" href="/icon-192.png"/><link rel="apple-touch-icon" href="/icon-192.png"/><meta name="next-size-adjust"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__className_f367f3"><div class="min-h-screen bg-gray-900 text-gray-100 p-8"><div class="max-w-3xl mx-auto"><h1 class="text-4xl font-bold mb-8">Boomer Calc Support</h1><section class="mb-8"><h2 class="text-2xl font-semibold mb-4">About Boomer Calc</h2><p class="text-gray-300 leading-relaxed">Boomer Calc is a simple, no-frills calculator app designed for ease of use. It performs basic arithmetic operations without any unnecessary complexity.</p></section><section class="mb-8"><h2 class="text-2xl font-semibold mb-4">How to Use</h2><ul class="list-disc list-inside text-gray-300 space-y-2"><li>Tap numbers to enter them</li><li>Use +, -, ×, ÷ for operations</li><li>Press = to see the result</li><li>Press C to clear the current calculation</li><li>Press AC to clear everything</li></ul></section><section class="mb-8"><h2 class="text-2xl font-semibold mb-4">Frequently Asked Questions</h2><div class="mb-6"><h3 class="text-xl font-semibold mb-2 text-gray-200">Does Boomer Calc collect my data?</h3><p class="text-gray-300 leading-relaxed">No. Boomer Calc does not collect, store, or transmit any data. All calculations happen locally on your device. See our <a href="/privacy" class="text-blue-400 hover:text-blue-300 underline">privacy policy</a> for details.</p></div><div class="mb-6"><h3 class="text-xl font-semibold mb-2 text-gray-200">Does it work offline?</h3><p class="text-gray-300 leading-relaxed">Yes! Boomer Calc works completely offline. No internet connection required.</p></div><div class="mb-6"><h3 class="text-xl font-semibold mb-2 text-gray-200">Are there any ads?</h3><p class="text-gray-300 leading-relaxed">No. Boomer Calc is ad-free and always will be.</p></div><div class="mb-6"><h3 class="text-xl font-semibold mb-2 text-gray-200">Why is it called "Boomer Calc"?</h3><p class="text-gray-300 leading-relaxed">Because it's straightforward and simple - just like calculators used to be. No learning curve, no unnecessary features, just reliable calculations.</p></div></section><section class="mb-8"><h2 class="text-2xl font-semibold mb-4">System Requirements</h2><ul class="list-disc list-inside text-gray-300 space-y-2"><li>iOS 13.0 or later</li><li>Compatible with iPhone and iPad</li><li>No internet connection required</li></ul></section><section class="mb-8"><h2 class="text-2xl font-semibold mb-4">Contact & Feedback</h2><p class="text-gray-300 leading-relaxed mb-4">We'd love to hear from you! If you have questions, suggestions, or need help:</p><div class="bg-gray-800 p-6 rounded-lg"><p class="text-gray-300 mb-2"><strong>Developer:</strong> Steve Abrams Designs</p><p class="text-gray-300"><strong>Email:</strong> <a href="mailto:steveabramsdesigns@gmail.com" class="text-blue-400 hover:text-blue-300">steveabramsdesigns@gmail.com</a></p></div></section><section class="mb-8"><h2 class="text-2xl font-semibold mb-4">Version Information</h2><p class="text-gray-300 leading-relaxed">Current Version: 1.0.0</p></section><section class="mb-8"><h2 class="text-2xl font-semibold mb-4">Report a Bug</h2><p class="text-gray-300 leading-relaxed">If you encounter any issues while using Boomer Calc, please email us at<!-- --> <a href="mailto:steveabramsdesigns@gmail.com" class="text-blue-400 hover:text-blue-300">steveabramsdesigns@gmail.com</a> with:</p><ul class="list-disc list-inside text-gray-300 space-y-2 mt-4"><li>Description of the problem</li><li>Your device model and iOS version</li><li>Steps to reproduce the issue</li></ul></section></div></div><script src="/_next/static/chunks/webpack-9bb46ca1fa3f9a7b.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/media/e4af272ccee01ff0-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n2:HL[\"/_next/static/css/67036131b6ae7bc2.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"3:I[2846,[],\"\"]\n5:I[4707,[],\"\"]\n6:I[6423,[],\"\"]\n7:I[1999,[\"185\",\"static/chunks/app/layout-f61ae32ec34132b3.js\"],\"default\"]\n9:I[1060,[],\"\"]\na:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L3\",null,{\"buildId\":\"GqVRgqKrCqNNbhALr1lKf\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"support\"],\"initialTree\":[\"\",{\"children\":[\"support\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"support\",{\"children\":[\"__PAGE__\",{},[[\"$L4\",[\"$\",\"div\",null,{\"className\":\"min-h-screen bg-gray-900 text-gray-100 p-8\",\"children\":[\"$\",\"div\",null,{\"className\":\"max-w-3xl mx-auto\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"text-4xl font-bold mb-8\",\"children\":\"Boomer Calc Support\"}],[\"$\",\"section\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold mb-4\",\"children\":\"About Boomer Calc\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed\",\"children\":\"Boomer Calc is a simple, no-frills calculator app designed for ease of use. It performs basic arithmetic operations without any unnecessary complexity.\"}]]}],[\"$\",\"section\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold mb-4\",\"children\":\"How to Use\"}],[\"$\",\"ul\",null,{\"className\":\"list-disc list-inside text-gray-300 space-y-2\",\"children\":[[\"$\",\"li\",null,{\"children\":\"Tap numbers to enter them\"}],[\"$\",\"li\",null,{\"children\":\"Use +, -, ×, ÷ for operations\"}],[\"$\",\"li\",null,{\"children\":\"Press = to see the result\"}],[\"$\",\"li\",null,{\"children\":\"Press C to clear the current calculation\"}],[\"$\",\"li\",null,{\"children\":\"Press AC to clear everything\"}]]}]]}],[\"$\",\"section\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold mb-4\",\"children\":\"Frequently Asked Questions\"}],[\"$\",\"div\",null,{\"className\":\"mb-6\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-xl font-semibold mb-2 text-gray-200\",\"children\":\"Does Boomer Calc collect my data?\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed\",\"children\":[\"No. Boomer Calc does not collect, store, or transmit any data. All calculations happen locally on your device. See our \",[\"$\",\"a\",null,{\"href\":\"/privacy\",\"className\":\"text-blue-400 hover:text-blue-300 underline\",\"children\":\"privacy policy\"}],\" for details.\"]}]]}],[\"$\",\"div\",null,{\"className\":\"mb-6\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-xl font-semibold mb-2 text-gray-200\",\"children\":\"Does it work offline?\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed\",\"children\":\"Yes! Boomer Calc works completely offline. No internet connection required.\"}]]}],[\"$\",\"div\",null,{\"className\":\"mb-6\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-xl font-semibold mb-2 text-gray-200\",\"children\":\"Are there any ads?\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed\",\"children\":\"No. Boomer Calc is ad-free and always will be.\"}]]}],[\"$\",\"div\",null,{\"className\":\"mb-6\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-xl font-semibold mb-2 text-gray-200\",\"children\":\"Why is it called \\\"Boomer Calc\\\"?\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed\",\"children\":\"Because it's straightforward and simple - just like calculators used to be. No learning curve, no unnecessary features, just reliable calculations.\"}]]}]]}],[\"$\",\"section\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold mb-4\",\"children\":\"System Requirements\"}],[\"$\",\"ul\",null,{\"className\":\"list-disc list-inside text-gray-300 space-y-2\",\"children\":[[\"$\",\"li\",null,{\"children\":\"iOS 13.0 or later\"}],[\"$\",\"li\",null,{\"children\":\"Compatible with iPhone and iPad\"}],[\"$\",\"li\",null,{\"children\":\"No internet connection required\"}]]}]]}],[\"$\",\"section\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold mb-4\",\"children\":\"Contact \u0026 Feedback\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed mb-4\",\"children\":\"We'd love to hear from you! If you have questions, suggestions, or need help:\"}],[\"$\",\"div\",null,{\"className\":\"bg-gray-800 p-6 rounded-lg\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-gray-300 mb-2\",\"children\":[[\"$\",\"strong\",null,{\"children\":\"Developer:\"}],\" Steve Abrams Designs\"]}],[\"$\",\"p\",null,{\"className\":\"text-gray-300\",\"children\":[[\"$\",\"strong\",null,{\"children\":\"Email:\"}],\" \",[\"$\",\"a\",null,{\"href\":\"mailto:steveabramsdesigns@gmail.com\",\"className\":\"text-blue-400 hover:text-blue-300\",\"children\":\"steveabramsdesigns@gmail.com\"}]]}]]}]]}],[\"$\",\"section\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold mb-4\",\"children\":\"Version Information\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed\",\"children\":\"Current Version: 1.0.0\"}]]}],[\"$\",\"section\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold mb-4\",\"children\":\"Report a Bug\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed\",\"children\":[\"If you encounter any issues while using Boomer Calc, please email us at\",\" \",[\"$\",\"a\",null,{\"href\":\"mailto:steveabramsdesigns@gmail.com\",\"className\":\"text-blue-400 hover:text-blue-300\",\"children\":\"steveabramsdesigns@gmail.com\"}],\" with:\"]}],[\"$\",\"ul\",null,{\"className\":\"list-disc list-inside text-gray-300 space-y-2 mt-4\",\"children\":[[\"$\",\"li\",null,{\"children\":\"Description of the problem\"}],[\"$\",\"li\",null,{\"children\":\"Your device model and iOS version\"}],[\"$\",\"li\",null,{\"children\":\"Steps to reproduce the issue\"}]]}]]}]]}]}],null],null],null]},[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"support\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/67036131b6ae7bc2.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"link\",null,{\"rel\":\"apple-touch-icon\",\"href\":\"/icon-192.png\"}]}],[\"$\",\"body\",null,{\"className\":\"__className_f367f3\",\"children\":[[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}],[\"$\",\"$L7\",null,{}]]}]]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[null,\"$L8\"],\"globalErrorComponent\":\"$9\",\"missingSlots\":\"$Wa\"}]\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, viewport-fit=cover\"}],[\"$\",\"meta\",\"1\",{\"name\":\"theme-color\",\"content\":\"#9333ea\"}],[\"$\",\"meta\",\"2\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"3\",{\"children\":\"Boomer Calc - Easy Calculator\"}],[\"$\",\"meta\",\"4\",{\"name\":\"description\",\"content\":\"Simple, easy-to-read calculator with big numbers. Perfect for everyone!\"}],[\"$\",\"meta\",\"5\",{\"name\":\"application-name\",\"content\":\"Boomer Calc\"}],[\"$\",\"link\",\"6\",{\"rel\":\"manifest\",\"href\":\"/manifest.json\",\"crossOrigin\":\"use-credentials\"}],[\"$\",\"meta\",\"7\",{\"name\":\"apple-mobile-web-app-capable\",\"content\":\"yes\"}],[\"$\",\"meta\",\"8\",{\"name\":\"apple-mobile-web-app-title\",\"content\":\"Boomer Calc\"}],[\"$\",\"meta\",\"9\",{\"name\":\"apple-mobile-web-app-status-bar-style\",\"content\":\"black-translucent\"}],[\"$\",\"link\",\"10\",{\"rel\":\"icon\",\"href\":\"/icon-192.png\"}],[\"$\",\"link\",\"11\",{\"rel\":\"apple-touch-icon\",\"href\":\"/icon-192.png\"}],[\"$\",\"meta\",\"12\",{\"name\":\"next-size-adjust\"}]]\n4:null\n"])</script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/><link rel="preload" href="/_next/static/media/e4af272ccee01ff0-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/dbecb8d230e421c8.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-9bb46ca1fa3f9a7b.js"/><script src="/_next/static/chunks/fd9d1056-9f91b5e418130764.js" async=""></script><script src="/_next/static/chunks/117-ea0db1a6324509e4.js" async=""></script><script src="/_next/static/chunks/main-app-db613fed919dc4ab.js" async=""></script><script src="/_next/static/chunks/app/layout-f61ae32ec34132b3.js" async=""></script><link rel="apple-touch-icon" href="/icon-192.png"/><meta name="theme-color" content="#9333ea"/><title>Boomer Calc - Easy Calculator</title><meta name="description" content="Simple, easy-to-read calculator with big numbers. Perfect for everyone!"/><meta name="application-name" content="Boomer Calc"/><link rel="manifest" href="/manifest.json" crossorigin="use-credentials"/><meta name="apple-mobile-web-app-capable" content="yes"/><meta name="apple-mobile-web-app-title" content="Boomer Calc"/><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/><link rel="icon" href="/icon-192.png"/><link rel="apple-touch-icon" href="/icon-192.png"/><meta name="next-size-adjust"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__className_f367f3"><div class="min-h-screen bg-gray-900 text-gray-100 p-8"><div class="max-w-3xl mx-auto"><h1 class="text-4xl font-bold mb-8">Boomer Calc Support</h1><section class="mb-8"><h2 class="text-2xl font-semibold mb-4">About Boomer Calc</h2><p class="text-gray-300 leading-relaxed">Boomer Calc is a simple, no-frills calculator app designed for ease of use. It performs basic arithmetic operations without any unnecessary complexity.</p></section><section class="mb-8"><h2 class="text-2xl font-semibold mb-4">How to Use</h2><ul class="list-disc list-inside text-gray-300 space-y-2"><li>Tap numbers to enter them</li><li>Use +, -, ×, ÷ for operations</li><li>Press = to see the result</li><li>Press C to clear the current calculation</li><li>Press AC to clear everything</li></ul></section><section class="mb-8"><h2 class="text-2xl font-semibold mb-4">Frequently Asked Questions</h2><div class="mb-6"><h3 class="text-xl font-semibold mb-2 text-gray-200">Does Boomer Calc collect my data?</h3><p class="text-gray-300 leading-relaxed">No. Boomer Calc does not collect, store, or transmit any data. All calculations happen locally on your device. See our <a href="/privacy" class="text-blue-400 hover:text-blue-300 underline">privacy policy</a> for details.</p></div><div class="mb-6"><h3 class="text-xl font-semibold mb-2 text-gray-200">Does it work offline?</h3><p class="text-gray-300 leading-relaxed">Yes! Boomer Calc works completely offline. No internet connection required.</p></div><div class="mb-6"><h3 class="text-xl font-semibold mb-2 text-gray-200">Are there any ads?</h3><p class="text-gray-300 leading-relaxed">No. Boomer Calc is ad-free and always will be.</p></div><div class="mb-6"><h3 class="text-xl font-semibold mb-2 text-gray-200">Why is it called "Boomer Calc"?</h3><p class="text-gray-300 leading-relaxed">Because it's straightforward and simple - just like calculators used to be. No learning curve, no unnecessary features, just reliable calculations.</p></div></section><section class="mb-8"><h2 class="text-2xl font-semibold mb-4">System Requirements</h2><ul class="list-disc list-inside text-gray-300 space-y-2"><li>iOS 13.0 or later</li><li>Compatible with iPhone and iPad</li><li>No internet connection required</li></ul></section><section class="mb-8"><h2 class="text-2xl font-semibold mb-4">Contact & Feedback</h2><p class="text-gray-300 leading-relaxed mb-4">We'd love to hear from you! If you have questions, suggestions, or need help:</p><div class="bg-gray-800 p-6 rounded-lg"><p class="text-gray-300 mb-2"><strong>Developer:</strong> Steve Abrams Designs</p><p class="text-gray-300"><strong>Email:</strong> <a href="mailto:steveabramsdesigns@gmail.com" class="text-blue-400 hover:text-blue-300">steveabramsdesigns@gmail.com</a></p></div></section><section class="mb-8"><h2 class="text-2xl font-semibold mb-4">Version Information</h2><p class="text-gray-300 leading-relaxed">Current Version: 1.0.0</p></section><section class="mb-8"><h2 class="text-2xl font-semibold mb-4">Report a Bug</h2><p class="text-gray-300 leading-relaxed">If you encounter any issues while using Boomer Calc, please email us at<!-- --> <a href="mailto:steveabramsdesigns@gmail.com" class="text-blue-400 hover:text-blue-300">steveabramsdesigns@gmail.com</a> with:</p><ul class="list-disc list-inside text-gray-300 space-y-2 mt-4"><li>Description of the problem</li><li>Your device model and iOS version</li><li>Steps to reproduce the issue</li></ul></section></div></div><script src="/_next/static/chunks/webpack-9bb46ca1fa3f9a7b.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/media/e4af272ccee01ff0-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n2:HL[\"/_next/static/css/dbecb8d230e421c8.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"3:I[2846,[],\"\"]\n5:I[4707,[],\"\"]\n6:I[6423,[],\"\"]\n7:I[1999,[\"185\",\"static/chunks/app/layout-f61ae32ec34132b3.js\"],\"default\"]\n9:I[1060,[],\"\"]\na:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L3\",null,{\"buildId\":\"_2SGBk7EQqSWs9NeyvHFM\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"support\"],\"initialTree\":[\"\",{\"children\":[\"support\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"support\",{\"children\":[\"__PAGE__\",{},[[\"$L4\",[\"$\",\"div\",null,{\"className\":\"min-h-screen bg-gray-900 text-gray-100 p-8\",\"children\":[\"$\",\"div\",null,{\"className\":\"max-w-3xl mx-auto\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"text-4xl font-bold mb-8\",\"children\":\"Boomer Calc Support\"}],[\"$\",\"section\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold mb-4\",\"children\":\"About Boomer Calc\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed\",\"children\":\"Boomer Calc is a simple, no-frills calculator app designed for ease of use. It performs basic arithmetic operations without any unnecessary complexity.\"}]]}],[\"$\",\"section\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold mb-4\",\"children\":\"How to Use\"}],[\"$\",\"ul\",null,{\"className\":\"list-disc list-inside text-gray-300 space-y-2\",\"children\":[[\"$\",\"li\",null,{\"children\":\"Tap numbers to enter them\"}],[\"$\",\"li\",null,{\"children\":\"Use +, -, ×, ÷ for operations\"}],[\"$\",\"li\",null,{\"children\":\"Press = to see the result\"}],[\"$\",\"li\",null,{\"children\":\"Press C to clear the current calculation\"}],[\"$\",\"li\",null,{\"children\":\"Press AC to clear everything\"}]]}]]}],[\"$\",\"section\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold mb-4\",\"children\":\"Frequently Asked Questions\"}],[\"$\",\"div\",null,{\"className\":\"mb-6\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-xl font-semibold mb-2 text-gray-200\",\"children\":\"Does Boomer Calc collect my data?\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed\",\"children\":[\"No. Boomer Calc does not collect, store, or transmit any data. All calculations happen locally on your device. See our \",[\"$\",\"a\",null,{\"href\":\"/privacy\",\"className\":\"text-blue-400 hover:text-blue-300 underline\",\"children\":\"privacy policy\"}],\" for details.\"]}]]}],[\"$\",\"div\",null,{\"className\":\"mb-6\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-xl font-semibold mb-2 text-gray-200\",\"children\":\"Does it work offline?\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed\",\"children\":\"Yes! Boomer Calc works completely offline. No internet connection required.\"}]]}],[\"$\",\"div\",null,{\"className\":\"mb-6\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-xl font-semibold mb-2 text-gray-200\",\"children\":\"Are there any ads?\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed\",\"children\":\"No. Boomer Calc is ad-free and always will be.\"}]]}],[\"$\",\"div\",null,{\"className\":\"mb-6\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-xl font-semibold mb-2 text-gray-200\",\"children\":\"Why is it called \\\"Boomer Calc\\\"?\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed\",\"children\":\"Because it's straightforward and simple - just like calculators used to be. No learning curve, no unnecessary features, just reliable calculations.\"}]]}]]}],[\"$\",\"section\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold mb-4\",\"children\":\"System Requirements\"}],[\"$\",\"ul\",null,{\"className\":\"list-disc list-inside text-gray-300 space-y-2\",\"children\":[[\"$\",\"li\",null,{\"children\":\"iOS 13.0 or later\"}],[\"$\",\"li\",null,{\"children\":\"Compatible with iPhone and iPad\"}],[\"$\",\"li\",null,{\"children\":\"No internet connection required\"}]]}]]}],[\"$\",\"section\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold mb-4\",\"children\":\"Contact \u0026 Feedback\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed mb-4\",\"children\":\"We'd love to hear from you! If you have questions, suggestions, or need help:\"}],[\"$\",\"div\",null,{\"className\":\"bg-gray-800 p-6 rounded-lg\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-gray-300 mb-2\",\"children\":[[\"$\",\"strong\",null,{\"children\":\"Developer:\"}],\" Steve Abrams Designs\"]}],[\"$\",\"p\",null,{\"className\":\"text-gray-300\",\"children\":[[\"$\",\"strong\",null,{\"children\":\"Email:\"}],\" \",[\"$\",\"a\",null,{\"href\":\"mailto:steveabramsdesigns@gmail.com\",\"className\":\"text-blue-400 hover:text-blue-300\",\"children\":\"steveabramsdesigns@gmail.com\"}]]}]]}]]}],[\"$\",\"section\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold mb-4\",\"children\":\"Version Information\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed\",\"children\":\"Current Version: 1.0.0\"}]]}],[\"$\",\"section\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold mb-4\",\"children\":\"Report a Bug\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-300 leading-relaxed\",\"children\":[\"If you encounter any issues while using Boomer Calc, please email us at\",\" \",[\"$\",\"a\",null,{\"href\":\"mailto:steveabramsdesigns@gmail.com\",\"className\":\"text-blue-400 hover:text-blue-300\",\"children\":\"steveabramsdesigns@gmail.com\"}],\" with:\"]}],[\"$\",\"ul\",null,{\"className\":\"list-disc list-inside text-gray-300 space-y-2 mt-4\",\"children\":[[\"$\",\"li\",null,{\"children\":\"Description of the problem\"}],[\"$\",\"li\",null,{\"children\":\"Your device model and iOS version\"}],[\"$\",\"li\",null,{\"children\":\"Steps to reproduce the issue\"}]]}]]}]]}]}],null],null],null]},[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"support\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/dbecb8d230e421c8.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"link\",null,{\"rel\":\"apple-touch-icon\",\"href\":\"/icon-192.png\"}]}],[\"$\",\"body\",null,{\"className\":\"__className_f367f3\",\"children\":[[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}],[\"$\",\"$L7\",null,{}]]}]]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[null,\"$L8\"],\"globalErrorComponent\":\"$9\",\"missingSlots\":\"$Wa\"}]\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, viewport-fit=cover\"}],[\"$\",\"meta\",\"1\",{\"name\":\"theme-color\",\"content\":\"#9333ea\"}],[\"$\",\"meta\",\"2\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"3\",{\"children\":\"Boomer Calc - Easy Calculator\"}],[\"$\",\"meta\",\"4\",{\"name\":\"description\",\"content\":\"Simple, easy-to-read calculator with big numbers. Perfect for everyone!\"}],[\"$\",\"meta\",\"5\",{\"name\":\"application-name\",\"content\":\"Boomer Calc\"}],[\"$\",\"link\",\"6\",{\"rel\":\"manifest\",\"href\":\"/manifest.json\",\"crossOrigin\":\"use-credentials\"}],[\"$\",\"meta\",\"7\",{\"name\":\"apple-mobile-web-app-capable\",\"content\":\"yes\"}],[\"$\",\"meta\",\"8\",{\"name\":\"apple-mobile-web-app-title\",\"content\":\"Boomer Calc\"}],[\"$\",\"meta\",\"9\",{\"name\":\"apple-mobile-web-app-status-bar-style\",\"content\":\"black-translucent\"}],[\"$\",\"link\",\"10\",{\"rel\":\"icon\",\"href\":\"/icon-192.png\"}],[\"$\",\"link\",\"11\",{\"rel\":\"apple-touch-icon\",\"href\":\"/icon-192.png\"}],[\"$\",\"meta\",\"12\",{\"name\":\"next-size-adjust\"}]]\n4:null\n"])</script></body></html>
\ No newline at end of file
diff --git a/tests/calculations.cjs b/tests/calculations.cjs
new file mode 100644
index 0000000..8826136
--- /dev/null
+++ b/tests/calculations.cjs
@@ -0,0 +1,37 @@
+const { test } = require('node:test')
+const assert = require('node:assert/strict')
+const { evaluateExpression: calc, monthlyPayment, bodyMassIndex, tipAmounts, readNumber } = require(process.env.CALCULATIONS_MODULE || '/tmp/tk11230-math/calculations.js')
+const close = (actual, expected, epsilon = 1e-8) => assert.ok(Math.abs(actual - expected) < epsilon, `${actual} != ${expected}`)
+test('arithmetic precedence, parentheses, unary signs, decimals and continued scientific notation', () => {
+ for (const [input, expected] of [['2+3*4',14],['(2+3)*4',20],['-2*-3',6],['.5+.25',.75],['1e+12+1',1000000000001],['8/4/2',1]]) assert.equal(calc(input), expected)
+})
+test('sine uses degrees including nested expressions and negative angles', () => {
+ close(calc('sin(30)'), .5); close(calc('sin(90)'),1); close(calc('sin(-90)'),-1)
+ assert.equal(calc('sin(180)'),0); close(calc('2*sin(30+60)'),2)
+})
+test('invalid and unsafe expressions produce errors', () => {
+ for (const input of ['1/0','0/0','(2+3','2+','2(3)','sin30','process.exit()','1e999','1'.repeat(501)]) assert.throws(() => calc(input), Error)
+})
+test('mortgage known payment, zero rate, full down payment and tiny rate', () => {
+ close(monthlyPayment(500000,100000,30,6.5),2528.2720939718)
+ close(monthlyPayment(120000,0,20,0),500)
+ assert.equal(monthlyPayment(500000,500000,30,6.5),0)
+ close(monthlyPayment(120000,0,20,1e-12),500,1e-7)
+ for (const args of [[0,0,30,5],[100,-1,30,5],[100,101,30,5],[100,0,0,5],[100,0,30,-1],[Infinity,0,30,5]]) assert.throws(() => monthlyPayment(...args))
+})
+test('BMI metric and imperial conversions describe same measurements', () => {
+ close(bodyMassIndex(70,175,'metric'),22.857142857142858)
+ close(bodyMassIndex(150,67,'imperial'),23.5,.05)
+ close(bodyMassIndex(150,67,'imperial'),bodyMassIndex(150*.45359237,67*2.54,'metric'))
+ assert.throws(() => bodyMassIndex(70,0,'metric')); assert.throws(() => bodyMassIndex(-70,175,'metric'))
+})
+test('tip and splits handle zero and fractional cents consistently', () => {
+ assert.deepEqual(tipAmounts(100,20,4),{ tip:20,total:120,perPerson:30 })
+ assert.deepEqual(tipAmounts(0,0,1),{ tip:0,total:0,perPerson:0 })
+ assert.deepEqual(tipAmounts(10.01,15,3),{tip:1.5,total:11.51,perPerson:3.84})
+ for (const args of [[10,15,0],[10,15,1.5],[-1,15,1],[10,-1,1],[1e20,15,1]]) assert.throws(() => tipAmounts(...args))
+})
+test('numeric fields reject empty or nonfinite values', () => {
+ assert.equal(readNumber('0','rate'),0)
+ for(const input of ['',' ','abc','Infinity']) assert.throws(() => readNumber(input,'rate'))
+})
diff --git a/tests/calculator-ui.cjs b/tests/calculator-ui.cjs
new file mode 100644
index 0000000..c03a7df
--- /dev/null
+++ b/tests/calculator-ui.cjs
@@ -0,0 +1,54 @@
+const { chromium, webkit, firefox } = require('/Users/macstudio3/.npm-global/lib/node_modules/openclaw/node_modules/playwright-core')
+const assert = require('node:assert/strict')
+const fs = require('node:fs')
+const path = require('node:path')
+const url = process.argv[2] || 'http://127.0.0.1:18764/'
+const out = process.argv[3] || 'verification/TK-11230/calculator'
+fs.mkdirSync(out,{recursive:true})
+async function journey(browser, name, mobile) {
+ const ctx = await browser.newContext({viewport: mobile ? {width:390,height:844} : {width:1280,height:1000},hasTouch:mobile,recordVideo:{dir:path.join(out,'video')}})
+ await ctx.route(/googlesyndication\.com|doubleclick\.net/,r=>r.abort())
+ const page=await ctx.newPage(), errors=[]
+ page.on('pageerror',e=>errors.push(e.message))
+ const response=await page.goto(url,{waitUntil:'networkidle'});assert.equal(response.status(),200)
+ const button=(name)=>page.getByRole('button',{name,exact:true})
+ const press=async(values)=>{for(const v of values) mobile ? await button(v).tap() : await button(v).click()}
+ const display=()=>page.getByRole('status').innerText()
+ await press(['0','*','5','=']);assert.equal(await display(),'0')
+ await press(['C','2','+','3','*','4','=']);assert.equal(await display(),'14')
+ await press(['+','1','=']);assert.equal(await display(),'15')
+ await press(['C','(','2','+','3',')','*','4','=']);assert.equal(await display(),'20')
+ await press(['C','sin','3','0',')','=']);assert.equal(await display(),'0.5')
+ await press(['C','1','/','0','=']);assert.match(await page.locator('p[role=alert]').innerText(),/divide by zero/)
+ await press(['C','7','*','8','=']);assert.equal(await display(),'56')
+ await page.screenshot({path:path.join(out,`${name}-arithmetic.png`),fullPage:true})
+ await button('🏠 Mortgage').click();await button('Calculate').click();assert.match(await page.locator('p[role=alert]').innerText(),/home price/)
+ await page.getByLabel('Home Price ($)',{exact:true}).fill('500000');await page.getByLabel('Down Payment ($)',{exact:true}).fill('100000');await page.getByLabel('Rate (%)',{exact:true}).fill('6.5')
+ await button('Calculate').click();assert.ok((await page.locator('body').innerText()).includes('$2528.27'))
+ await page.getByLabel('Rate (%)',{exact:true}).fill('0');assert.ok(!(await page.locator('body').innerText()).includes('$2528.27'))
+ await button('Calculate').click();assert.ok((await page.locator('body').innerText()).includes('$1111.11'))
+ await page.getByLabel('Down Payment ($)',{exact:true}).fill('500001');await button('Calculate').click();assert.match(await page.locator('p[role=alert]').innerText(),/down payment/)
+ await button('Reset').click();assert.equal(await page.getByLabel('Home Price ($)',{exact:true}).inputValue(),'')
+ await button('💪 BMI').click();await page.getByLabel('Weight (lbs)',{exact:true}).fill('150');await page.getByLabel('Height (in)',{exact:true}).fill('67');await button('Calculate').click();assert.ok((await page.locator('body').innerText()).includes('23.5'))
+ await button('kg / cm').click();assert.equal(await page.getByLabel('Weight (kg)',{exact:true}).inputValue(),'');assert.ok(!(await page.locator('body').innerText()).includes('23.5'))
+ await page.getByLabel('Weight (kg)',{exact:true}).fill('70');await page.getByLabel('Height (cm)',{exact:true}).fill('175');await button('Calculate').click();assert.ok((await page.locator('body').innerText()).includes('22.9'))
+ await page.getByLabel('Height (cm)',{exact:true}).fill('0');await button('Calculate').click();assert.match(await page.locator('p[role=alert]').innerText(),/greater than zero/)
+ await button('💵 Tip').click();await page.getByLabel('Bill ($)',{exact:true}).fill('100');await page.getByLabel('People',{exact:true}).fill('4');await button('20%').click();await button('Calculate').click()
+ for(const amount of ['$20.00','$120.00','$30.00'])assert.ok((await page.locator('body').innerText()).includes(amount))
+ await page.screenshot({path:path.join(out,`${name}-tip.png`),fullPage:true})
+ await page.getByLabel('People',{exact:true}).fill('1.5');await button('Calculate').click();assert.match(await page.locator('p[role=alert]').innerText(),/whole number/)
+ assert.equal(await page.evaluate(()=>document.documentElement.scrollWidth>innerWidth),false)
+ assert.deepEqual(errors,[])
+ await ctx.close()
+ return {name,status:'PASS',mobile,assertions:['HTTP 200','precedence','continuation','parentheses','sine degrees','division error and recovery','mortgage valid and zero interest','missing/invalid inputs','stale results clear on edits','BMI imperial and metric','unit switch reset','tips and splits','fractional people rejected','no overflow','zero JS errors']}
+}
+;(async()=>{
+ const results=[]
+ for(const [name,engine,options,mobile] of [['chrome-desktop',chromium,{channel:'chrome'},false],['chrome-touch',chromium,{channel:'chrome'},true],['webkit',webkit,{},true],['firefox',firefox,{},false]]){
+ let browser
+ try{browser=await engine.launch({headless:true,...options})}catch(e){if(name.startsWith('chrome'))throw e;results.push({name,status:'SKIP',reason:e.message.split('\n')[0]});continue}
+ try{results.push(await journey(browser,name,mobile))}finally{await browser.close()}
+ }
+ fs.writeFileSync(path.join(out,'browser-proof.json'),JSON.stringify({timestamp:new Date().toISOString(),url,adRequestsBlocked:true,results},null,2))
+ console.log(JSON.stringify(results,null,2))
+})().catch(e=>{console.error(e);process.exit(1)})
diff --git a/verification/TK-11230/calculator/browser-proof.json b/verification/TK-11230/calculator/browser-proof.json
index a61cbc4..a15cbc3 100644
--- a/verification/TK-11230/calculator/browser-proof.json
+++ b/verification/TK-11230/calculator/browser-proof.json
@@ -1,5 +1,5 @@
{
- "timestamp": "2026-09-11T16:36:46.061Z",
+ "timestamp": "2026-09-11T16:39:09.618Z",
"url": "http://127.0.0.1:18764/",
"adRequestsBlocked": true,
"results": [
diff --git a/verification/TK-11230/calculator/chrome-desktop-arithmetic.png b/verification/TK-11230/calculator/chrome-desktop-arithmetic.png
new file mode 100644
index 0000000..b0e18ee
Binary files /dev/null and b/verification/TK-11230/calculator/chrome-desktop-arithmetic.png differ
diff --git a/verification/TK-11230/calculator/chrome-desktop-tip.png b/verification/TK-11230/calculator/chrome-desktop-tip.png
new file mode 100644
index 0000000..0eea40a
Binary files /dev/null and b/verification/TK-11230/calculator/chrome-desktop-tip.png differ
diff --git a/verification/TK-11230/calculator/chrome-touch-arithmetic.png b/verification/TK-11230/calculator/chrome-touch-arithmetic.png
new file mode 100644
index 0000000..d7598d7
Binary files /dev/null and b/verification/TK-11230/calculator/chrome-touch-arithmetic.png differ
diff --git a/verification/TK-11230/calculator/chrome-touch-tip.png b/verification/TK-11230/calculator/chrome-touch-tip.png
new file mode 100644
index 0000000..c549d86
Binary files /dev/null and b/verification/TK-11230/calculator/chrome-touch-tip.png differ
diff --git a/verification/TK-11230/calculator/e2e-proof.json b/verification/TK-11230/calculator/e2e-proof.json
new file mode 100644
index 0000000..4e5e65b
--- /dev/null
+++ b/verification/TK-11230/calculator/e2e-proof.json
@@ -0,0 +1,65 @@
+{
+ "task_id": "TK-11230/boomer-real-calculator",
+ "ticket": "TK-11230-diagnose-and-fix-rejected-ios-app-review",
+ "intent": "Replace four hardcoded 67 results with real calculator journeys matching the app description",
+ "risk_tier": "R2",
+ "environment": "production static export served locally at http://127.0.0.1:18764",
+ "timestamp": "2026-09-11T16:38:59.379899+00:00",
+ "build_id": "_2SGBk7EQqSWs9NeyvHFM",
+ "source_sha256": {
+ "components/ScientificCalculator.tsx": "aeb6a020540c2b86e64b4e2594c39bfeb9abf6472dc16959c25b3deb2a868de7",
+ "components/MortgageCalculator.tsx": "5e9a6d75632c786c1e8c5e24d5256c50bab611c362fdf69cc1701422841410df",
+ "components/BMICalculator.tsx": "bfaf5150300ecb5e40bfafff0b70d7ee2ea913627498d5d5c44e20bee94ae805",
+ "components/TipCalculator.tsx": "43cab861a1f8d12b60857afdf21d7a5e12f78e277ce2d05633022cb2c828d00b",
+ "lib/calculations.ts": "038944dd0bfdd359418556009a44fc405daecd570fac9b8c943cb991e28b22b3"
+ },
+ "baseline": "All four calculators returned 67; mortgage claimed 67M homeowners; BMI returned a fake PERFECT category.",
+ "commands": [
+ "./node_modules/.bin/tsc lib/calculations.ts --outDir /tmp/tk11230-math --module commonjs --target es2020 --skipLibCheck",
+ "node --test tests/calculations.cjs",
+ "npm run build",
+ "node tests/calculator-ui.cjs",
+ "node /Users/macstudio3/.claude/skills/3x/run.js --url http://127.0.0.1:18764/ --expect \"Boomer Calc\" --selector button --no-open",
+ "git diff --check"
+ ],
+ "checks": [
+ {
+ "name": "Math helper boundary suites",
+ "verdict": "PASS",
+ "evidence": "7/7 test suites; precedence, parentheses, degrees, invalid expressions, mortgage zero/tiny rate, metric/imperial BMI, tip rounding/splits, numeric validation"
+ },
+ {
+ "name": "Production export and TypeScript checks",
+ "verdict": "PASS",
+ "notes": "Existing next.config experimental.allowedDevOrigins and outdated browser-data warnings remain."
+ },
+ {
+ "name": "3x layered HTTP/render/automation/Chrome smoke",
+ "verdict": "PASS",
+ "evidence": "4/4 attempted; /var/folders/rq/j8g1f7nn6jv6_lr1cfmqym6w0000gn/T/3x-mQLLtt"
+ },
+ {
+ "name": "Chrome desktop and touch real calculator journeys",
+ "verdict": "PASS",
+ "evidence": "browser-proof.json, chrome-*.png, video/*.webm"
+ },
+ {
+ "name": "Safari/WebKit and Firefox parity",
+ "verdict": "SKIP",
+ "reason": "Playwright engines missing locally"
+ },
+ {
+ "name": "Native iOS/TestFlight and App Store submission",
+ "verdict": "SKIP",
+ "reason": "Outside child ownership; finalizer handles device/signing/submission"
+ }
+ ],
+ "cleanup": "Browser contexts closed. Ads blocked in interaction tests. Local static server retained for parent verification; no production writes, deploys, remote pushes, signing or submission.",
+ "rollback": "Revert calculator correction commit locally and regenerate export.",
+ "handoff": {
+ "producer": "/root/boomer_calculator",
+ "consumer": "/root",
+ "correlation_id": "TK-11230/boomer-real-calculator",
+ "acceptance": "Parent independent verification required; local web correction only, not native/App Store readiness."
+ }
+}
diff --git a/verification/TK-11230/calculator/video/1577b22c47324d6c80bd83c3da6450c1.webm b/verification/TK-11230/calculator/video/1577b22c47324d6c80bd83c3da6450c1.webm
new file mode 100644
index 0000000..aa94da0
Binary files /dev/null and b/verification/TK-11230/calculator/video/1577b22c47324d6c80bd83c3da6450c1.webm differ
diff --git a/verification/TK-11230/calculator/video/4902d1adbfcda26eb759a7ca983ebe59.webm b/verification/TK-11230/calculator/video/4902d1adbfcda26eb759a7ca983ebe59.webm
new file mode 100644
index 0000000..e6df4d8
Binary files /dev/null and b/verification/TK-11230/calculator/video/4902d1adbfcda26eb759a7ca983ebe59.webm differ
diff --git a/verification/TK-11230/calculator/video/7ea3fa42c7246c5f4b9f05a0da6dda18.webm b/verification/TK-11230/calculator/video/7ea3fa42c7246c5f4b9f05a0da6dda18.webm
new file mode 100644
index 0000000..8dd4b82
Binary files /dev/null and b/verification/TK-11230/calculator/video/7ea3fa42c7246c5f4b9f05a0da6dda18.webm differ
diff --git a/verification/TK-11230/calculator/video/b5e0b44ab1f0750156d18979f3e738fd.webm b/verification/TK-11230/calculator/video/b5e0b44ab1f0750156d18979f3e738fd.webm
new file mode 100644
index 0000000..6a8d13e
Binary files /dev/null and b/verification/TK-11230/calculator/video/b5e0b44ab1f0750156d18979f3e738fd.webm differ
diff --git a/verification/TK-11230/calculator/video/cbd01281c9e46ad314463a7fbcd7f38a.webm b/verification/TK-11230/calculator/video/cbd01281c9e46ad314463a7fbcd7f38a.webm
new file mode 100644
index 0000000..53baa18
Binary files /dev/null and b/verification/TK-11230/calculator/video/cbd01281c9e46ad314463a7fbcd7f38a.webm differ
← a4a5c86 auto-data-snapshot: 2026-09-11T09:31:49 (4 data files) — out
·
back to Boomer Calculator
·
Compile current calculator source before math tests 90c4eaa →