<!doctype html>
<html lang=”pl”><head>
<meta charset=”UTF-8″>
<meta name=”viewport” content=”width=device-width, initial-scale=1.0″>
<title>Kalkulator Hormonów Tarczycy</title>
<script src=”https://cdn.tailwindcss.com/3.4.17″></script>
<link href=”https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;700&display=swap” rel=”stylesheet”>
<style>
body { font-family: 'DM Sans’, sans-serif; }
.range-bar { height: 12px; border-radius: 6px; position: relative; }
.range-marker { width: 4px; height: 20px; border-radius: 2px; position: absolute; top: -4px; transform: translateX(-50%); }
.optimal-zone { position: absolute; height: 100%; opacity: 0.3; border-radius: 6px; }
</style>
<script src=”https://cdn.jsdelivr.net/npm/lucide@0.263.0/dist/umd/lucide.min.js” type=”text/javascript”></script>
<script src=”/_sdk/data_sdk.js” type=”text/javascript”></script>
<script src=”/_sdk/resizing_sdk.js” type=”text/javascript”></script>
</head>
<body data-template-id=”__page-root” class=”min-h-screen” style=”background: linear-gradient(rgb(240, 253, 244), rgb(236, 254, 255));”>
<div class=”w-full max-w-2xl mx-auto p-6″>
<header class=”text-center mb-8″>
<h1 data-template-id=”page-title” class=”canva-text text-3xl font-bold mb-2″ style=”color: rgb(6, 78, 59); font-weight: 700; font-style: normal; font-size: 32px;”>Kalkulator Hormonów Tarczycy</h1>
<p data-template-id=”page-subtitle” class=”canva-text” style=”color: rgb(75, 85, 99); font-weight: 400; font-style: normal; font-size: 16px;”>Sprawdź, czy Twoje wyniki mieszczą się w optymalnym zakresie</p>
</header>
<main>
<form id=”calc-form” class=”space-y-6 mb-8″>
<div data-template-id=”form-card” class=”canva-card rounded-xl p-6 space-y-5″ style=”background: rgb(255, 255, 255);”>
<!– TSH –>
<div>
<label data-template-id=”label-tsh” class=”canva-text font-medium block mb-2″ for=”tsh-val” style=”color: rgb(31, 41, 55); font-weight: 500; font-style: normal; font-size: 16px;”>TSH (mIU/L)</label>
<div class=”grid grid-cols-3 gap-3″>
<div>
<label class=”text-xs text-gray-500 block mb-1″ for=”tsh-val”>Wynik</label> <input id=”tsh-val” type=”number” step=”0.01″ class=”w-full border border-gray-300 rounded-lg px-3 py-2 text-sm” placeholder=”np. 2.5″>
</div>
<div>
<label class=”text-xs text-gray-500 block mb-1″ for=”tsh-min”>Min normy</label> <input id=”tsh-min” type=”number” step=”0.01″ value=”0.27″ class=”w-full border border-gray-300 rounded-lg px-3 py-2 text-sm”>
</div>
<div>
<label class=”text-xs text-gray-500 block mb-1″ for=”tsh-max”>Max normy</label> <input id=”tsh-max” type=”number” step=”0.01″ value=”4.20″ class=”w-full border border-gray-300 rounded-lg px-3 py-2 text-sm”>
</div>
</div>
</div><!– FT3 –>
<div>
<label data-template-id=”label-ft3″ class=”canva-text font-medium block mb-2″ for=”ft3-val” style=”color: rgb(31, 41, 55); font-weight: 500; font-style: normal; font-size: 16px;”>FT3 (pg/mL)</label>
<div class=”grid grid-cols-3 gap-3″>
<div>
<label class=”text-xs text-gray-500 block mb-1″ for=”ft3-val”>Wynik</label> <input id=”ft3-val” type=”number” step=”0.01″ class=”w-full border border-gray-300 rounded-lg px-3 py-2 text-sm” placeholder=”np. 3.1″>
</div>
<div>
<label class=”text-xs text-gray-500 block mb-1″ for=”ft3-min”>Min normy</label> <input id=”ft3-min” type=”number” step=”0.01″ value=”2.0″ class=”w-full border border-gray-300 rounded-lg px-3 py-2 text-sm”>
</div>
<div>
<label class=”text-xs text-gray-500 block mb-1″ for=”ft3-max”>Max normy</label> <input id=”ft3-max” type=”number” step=”0.01″ value=”4.4″ class=”w-full border border-gray-300 rounded-lg px-3 py-2 text-sm”>
</div>
</div>
</div><!– FT4 –>
<div>
<label data-template-id=”label-ft4″ class=”canva-text font-medium block mb-2″ for=”ft4-val” style=”color: rgb(31, 41, 55); font-weight: 500; font-style: normal; font-size: 16px;”>FT4 (ng/dL)</label>
<div class=”grid grid-cols-3 gap-3″>
<div>
<label class=”text-xs text-gray-500 block mb-1″ for=”ft4-val”>Wynik</label> <input id=”ft4-val” type=”number” step=”0.01″ class=”w-full border border-gray-300 rounded-lg px-3 py-2 text-sm” placeholder=”np. 1.2″>
</div>
<div>
<label class=”text-xs text-gray-500 block mb-1″ for=”ft4-min”>Min normy</label> <input id=”ft4-min” type=”number” step=”0.01″ value=”0.93″ class=”w-full border border-gray-300 rounded-lg px-3 py-2 text-sm”>
</div>
<div>
<label class=”text-xs text-gray-500 block mb-1″ for=”ft4-max”>Max normy</label> <input id=”ft4-max” type=”number” step=”0.01″ value=”1.70″ class=”w-full border border-gray-300 rounded-lg px-3 py-2 text-sm”>
</div>
</div>
</div>
</div><button data-template-id=”calc-button” type=”submit” class=”canva-button w-full py-3 rounded-xl font-medium text-lg transition hover:opacity-90″ style=”background: rgb(5, 150, 105); color: rgb(255, 255, 255); font-weight: 600; font-style: normal; font-size: 16px;”>Oblicz wyniki</button>
</form>
<section id=”results” class=”hidden space-y-4″>
<h2 data-template-id=”results-title” class=”canva-text font-bold text-xl mb-4″ style=”color: rgb(6, 78, 59); font-weight: 700; font-style: normal; font-size: 24px;”>Twoje wyniki</h2>
<div id=”results-container” class=”space-y-5″></div>
<p data-template-id=”disclaimer” class=”canva-text text-xs mt-6″ style=”color: rgb(107, 114, 128); font-weight: 400; font-style: normal; font-size: 16px;”>⚠️ Kalkulator ma charakter informacyjny i nie zastępuje konsultacji lekarskiej. Zakres optymalny to 25–75% normy laboratoryjnej.</p>
</section>
</main>
</div>
<script src=”/_sdk/editing_sdk.js”></script>
<script>
document.getElementById(’calc-form’).addEventListener(’submit’, function(e) {
e.preventDefault();
const hormones = [
{ name: 'TSH’, val: 'tsh-val’, min: 'tsh-min’, max: 'tsh-max’ },
{ name: 'FT3′, val: 'ft3-val’, min: 'ft3-min’, max: 'ft3-max’ },
{ name: 'FT4′, val: 'ft4-val’, min: 'ft4-min’, max: 'ft4-max’ }
];
const container = document.getElementById(’results-container’);
container.innerHTML = ”;
let hasData = false;
hormones.forEach(h => {
const val = parseFloat(document.getElementById(h.val).value);
const min = parseFloat(document.getElementById(h.min).value);
const max = parseFloat(document.getElementById(h.max).value);
if (isNaN(val) || isNaN(min) || isNaN(max) || min >= max) return;
hasData = true;
const range = max – min;
const percent = Math.max(0, Math.min(100, ((val – min) / range) * 100));
const optimalMin = 25;
const optimalMax = 75;
let status, color;
if (percent < optimalMin) { status = 'Poniżej optymalnego’; color = '#f59e0b’; }
else if (percent > optimalMax) { status = 'Powyżej optymalnego’; color = '#ef4444′; }
else { status = 'Optymalny’; color = '#10b981′; }
const item = document.createElement(’div’);
item.className = 'bg-white rounded-xl p-4 shadow-sm border border-gray-100′;
item.innerHTML = `
<div class=”flex justify-between items-center mb-2″>
<span class=”font-medium text-gray-800″>${h.name}: <strong>${val}</strong></span>
<span class=”text-sm font-medium px-2 py-0.5 rounded-full” style=”background:${color}20;color:${color}”>${status}</span>
</div>
<div class=”range-bar bg-gray-200 w-full”>
<div class=”optimal-zone” style=”left:${optimalMin}%;width:${optimalMax – optimalMin}%;background:${color}”></div>
<div class=”range-marker” style=”left:${percent}%;background:${color}”></div>
</div>
<div class=”flex justify-between text-xs text-gray-400 mt-1″>
<span>${min}</span>
<span>${percent.toFixed(0)}% normy</span>
<span>${max}</span>
</div>
`;
container.appendChild(item);
});
if (hasData) {
document.getElementById(’results’).classList.remove(’hidden’);
}
});
</script>
<script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement(’script’);d.innerHTML=”window.__CF$cv$params={r:’9fd9eb1135e2d614′,t:’MTc3OTA5NzQxMy4wMDAwMDA=’};var a=document.createElement(’script’);a.nonce=”;a.src=’/cdn-cgi/challenge-platform/scripts/jsd/main.js’;document.getElementsByTagName(’head’)[0].appendChild(a);”;b.getElementsByTagName(’head’)[0].appendChild(d)}}if(document.body){var a=document.createElement(’iframe’);a.height=1;a.width=1;a.style.position=’absolute’;a.style.top=0;a.style.left=0;a.style.border=’none’;a.style.visibility=’hidden’;document.body.appendChild(a);if(’loading’!==document.readyState)c();else if(window.addEventListener)document.addEventListener(’DOMContentLoaded’,c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);’loading’!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
</body></html>