📊 Detailed Tax Breakdown
▼
📈 Income Statistics
▼
Tax Rate (Average)
0.00%
Tax Rate (Marginal)
0.00%
CPP/EI Maxed Out
No
Net to Gross Ratio
0.00%
Share Your Results
`;
}
function saveToLocalStorage(inputs) {
const data = {
inputs,
timestamp: new Date().toISOString(),
version: '2026'
};
localStorage.setItem('canadaPaycheckCalculator', JSON.stringify(data));
}
function loadFromLocalStorage() {
const saved = localStorage.getItem('canadaPaycheckCalculator');
if (!saved) return;
try {
const data = JSON.parse(saved);
const age = new Date() - new Date(data.timestamp);
// Only load if less than 7 days old
if (age < 7 * 24 * 60 * 60 * 1000) {
const inputs = data.inputs;
// Populate form
Object.keys(inputs).forEach(key => {
const element = document.getElementById(key);
if (element && element.type !== 'checkbox') {
element.value = inputs[key];
} else if (element && element.type === 'checkbox') {
element.checked = inputs[key];
}
});
// Set pay period button
document.querySelectorAll('.pay-period-btn[data-period]').forEach(btn => {
btn.classList.toggle('active', btn.dataset.period === inputs.payPeriod);
});
// Auto-calculate
setTimeout(() => calculatePaycheck(), 200);
}
} catch (e) {
console.error('Failed to load saved data:', e);
}
}
// Google Analytics (placeholder - replace with actual tracking ID)
function gtag() { console.log('Analytics:', arguments); }
// Performance monitoring
if ('PerformanceObserver' in window) {
const observer = new PerformanceObserver((list) => {
for (const entry of list.getEntries()) {
if (entry.entryType === 'largest-contentful-paint') {
console.log('LCP:', entry.startTime);
}
if (entry.entryType === 'first-input-delay') {
console.log('FID:', entry.processingStart - entry.startTime);
}
}
});
observer.observe({ entryTypes: ['largest-contentful-paint', 'first-input-delay'] });
}
// Service Worker (optional - for offline capability)
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('data:text/javascript,' + encodeURIComponent(`
self.addEventListener('install', e => e.waitUntil(self.skipWaiting()));
self.addEventListener('activate', e => e.waitUntil(self.clients.claim()));
self.addEventListener('fetch', e => e.respondWith(fetch(e.request)));
`)).catch(() => {});
}