<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Men’s Circulation Check – 60 seconds</title>
<meta name="description" content="A quick circulation check for men 35+ to understand daily energy, focus and confidence support." />
<style>
:root{--bg:#0b1220;--card:#0f1a33;--muted:#9fb0d0;--text:#eaf0ff;--accent:#5eead4;--accent2:#60a5fa;--danger:#fb7185;--ok:#34d399;--warn:#fbbf24;}
*{box-sizing:border-box} body{margin:0;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Inter,Arial; background: radial-gradient(1200px 600px at 20% 10%, rgba(96,165,250,.18), transparent), radial-gradient(900px 500px at 80% 30%, rgba(94,234,212,.14), transparent), var(--bg); color:var(--text);}
a{color:inherit}
.wrap{max-width:980px;margin:0 auto;padding:28px 18px 64px}
.topbar{display:flex;justify-content:space-between;align-items:center;gap:14px;margin-bottom:18px}
.brand{display:flex;align-items:center;gap:10px;font-weight:700;letter-spacing:.3px}
.dot{width:10px;height:10px;border-radius:999px;background:linear-gradient(135deg,var(--accent),var(--accent2))}
.pill{font-size:12px;color:var(--muted);border:1px solid rgba(159,176,208,.25);padding:8px 10px;border-radius:999px}
.hero{display:grid;grid-template-columns:1.1fr .9fr;gap:18px;align-items:stretch}
@media (max-width:900px){.hero{grid-template-columns:1fr}}
.card{background:linear-gradient(180deg, rgba(255,255,255,.06), rgba(255,255,255,.03)); border:1px solid rgba(159,176,208,.18); border-radius:22px; padding:22px; box-shadow: 0 20px 60px rgba(0,0,0,.35)}
h1{font-size:40px;line-height:1.05;margin:6px 0 10px}
@media (max-width:520px){h1{font-size:32px}}
.sub{color:var(--muted);font-size:16px;line-height:1.55;margin:0 0 16px}
.ctaRow{display:flex;gap:12px;flex-wrap:wrap;align-items:center;margin-top:14px}
.btn{cursor:pointer;border:0;border-radius:14px;padding:12px 16px;font-weight:700}
.btnPrimary{background:linear-gradient(135deg,var(--accent),var(--accent2));color:#061224}
.btnGhost{background:transparent;color:var(--text);border:1px solid rgba(159,176,208,.25)}
.note{font-size:12px;color:rgba(234,240,255,.72);line-height:1.45;margin-top:10px}
.kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:16px}
@media (max-width:520px){.kpis{grid-template-columns:1fr}}
.kpi{border:1px solid rgba(159,176,208,.18);border-radius:16px;padding:12px;background:rgba(15,26,51,.35)}
.kpi b{display:block;font-size:14px}
.kpi span{color:var(--muted);font-size:12px}
.quizHeader{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:10px}
.progress{height:10px;background:rgba(159,176,208,.16);border-radius:999px;overflow:hidden}
.bar{height:100%;width:0%;background:linear-gradient(90deg,var(--accent),var(--accent2))}
.q{margin-top:14px}
.qTitle{font-weight:800;margin:0 0 10px;font-size:16px}
.options{display:grid;gap:10px}
.opt{display:flex;align-items:center;gap:10px;border:1px solid rgba(159,176,208,.18);background:rgba(15,26,51,.35);padding:12px;border-radius:16px;cursor:pointer}
.opt:hover{border-color:rgba(94,234,212,.45)}
.opt input{accent-color:var(--accent)}
.row{display:grid;grid-template-columns:1fr 1fr;gap:12px}
@media (max-width:720px){.row{grid-template-columns:1fr}}
.field{display:flex;flex-direction:column;gap:6px;margin-top:10px}
.field label{font-size:12px;color:rgba(234,240,255,.8)}
.field input{padding:12px 12px;border-radius:14px;border:1px solid rgba(159,176,208,.22);background:rgba(15,26,51,.35);color:var(--text);outline:none}
.field input:focus{border-color:rgba(96,165,250,.55)}
.legal{margin-top:12px;display:flex;gap:10px;align-items:flex-start;color:rgba(234,240,255,.78);font-size:12px;line-height:1.4}
.legal input{margin-top:2px;accent-color:var(--accent)}
.result{display:none;margin-top:14px}
.scorePill{display:inline-flex;align-items:center;gap:8px;padding:8px 10px;border-radius:999px;border:1px solid rgba(159,176,208,.25);background:rgba(15,26,51,.35);font-size:12px}
.badge{width:10px;height:10px;border-radius:999px;background:var(--warn)}
.result h2{margin:10px 0 8px;font-size:22px}
.result p{margin:0 0 12px;color:var(--muted);line-height:1.55}
.footer{margin-top:18px;color:rgba(234,240,255,.6);font-size:12px;line-height:1.5}
.small{font-size:11px;color:rgba(234,240,255,.55)}
.toast{position:fixed;left:18px;right:18px;bottom:18px;max-width:980px;margin:0 auto;display:none}
.toast .card{padding:14px 16px;border-radius:16px}
.divider{height:1px;background:rgba(159,176,208,.18);margin:14px 0}
/* accessibility */
.sr{position:absolute;left:-9999px;top:auto;width:1px;height:1px;overflow:hidden}
</style>
<!-- TikTok Pixel (add your Pixel ID) -->
<!--
<script>
!function (w, d, t) {
w.TiktokAnalyticsObject=t;var ttq=w[t]=w[t]||[];ttq.methods=["page","track","identify","instances","debug","on","off","once","ready","alias","group","enableCookie","disableCookie"],ttq.setAndDefer=function(t,e){t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}};for(var i=0;i<ttq.methods.length;i++)ttq.setAndDefer(ttq,ttq.methods[i]);ttq.instance=function(t){for(var e=ttq._i[t]||[],n=0;n<ttq.methods.length;n++)ttq.setAndDefer(e,ttq.methods[n]);return e};ttq.load=function(e,n){var i="https://analytics.tiktok.com/i18n/pixel/events.js";ttq._i=ttq._i||{};ttq._i[e]=[];ttq._i[e]._u=i;ttq._t=ttq._t||{};ttq._t[e]=+new Date;ttq._o=ttq._o||{};ttq._o[e]=n||{};var o=d.createElement("script");o.type="text/javascript";o.async=!0;o.src=i+"?sdkid="+e+"&lib="+t;var a=d.getElementsByTagName("script")[0];a.parentNode.insertBefore(o,a)};
ttq.load('YOUR_PIXEL_ID');
ttq.page();
}(window, document, 'ttq');
</script>
-->
</head>
<body>
<div class="wrap">
<div class="topbar">
<div class="brand"><span class="dot"></span> VitalFlow Check</div>
<div class="pill">USA • Men 35+ • 60-second check</div>
</div>
<div class="hero">
<div class="card">
<div class="pill" style="display:inline-flex;gap:8px;align-items:center">
<span class="dot" style="width:8px;height:8px"></span>
Evidence-informed • Non-medical
</div>
<h1>Men’s Circulation Check<br/>in 60 seconds</h1>
<p class="sub">Get a quick, personalized circulation-support score based on daily energy, focus, lifestyle and recovery signals. This is <b>not</b> medical advice—just a practical self-check.</p>
<div class="ctaRow">
<button class="btn btnPrimary" id="startBtn">Start the 60-second check</button>
<button class="btn btnGhost" id="learnBtn">How it works</button>
</div>
<div class="note">Privacy-first: your answers are processed on this page. If you choose to enter email, we’ll send your results and a practical plan.</div>
<div class="kpis">
<div class="kpi"><b>Fast</b><span>~8 questions</span></div>
<div class="kpi"><b>Personalized</b><span>score + plan</span></div>
<div class="kpi"><b>Practical</b><span>actionable next steps</span></div>
</div>
<div class="divider"></div>
<div class="small"><b>Compliance note:</b> Avoids medical claims. Uses “supports / optimizes” language. Do not mention conditions or cures.</div>
</div>
<div class="card" id="quizCard" aria-live="polite">
<div class="quizHeader">
<div style="font-weight:800">Circulation Check</div>
<div class="pill" id="stepLabel">Step 1 of 8</div>
</div>
<div class="progress" aria-label="progress"><div class="bar" id="bar"></div></div>
<form id="quizForm">
<div id="qWrap"></div>
<div class="ctaRow" style="margin-top:16px">
<button class="btn btnGhost" type="button" id="backBtn">Back</button>
<button class="btn btnPrimary" type="button" id="nextBtn">Next</button>
</div>
<div class="result" id="result">
<div class="scorePill"><span class="badge" id="badge"></span><span id="scoreLabel">Score</span></div>
<h2 id="headline">Your Circulation Support Score</h2>
<p id="summary">Summary</p>
<div class="row">
<div class="field">
<label for="email">Email (to receive your result & plan)</label>
<input id="email" name="email" type="email" placeholder="you@email.com" autocomplete="email" />
</div>
<div class="field">
<label for="age">Optional: age</label>
<input id="age" name="age" type="number" min="18" max="99" placeholder="" />
</div>
</div>
<div class="legal">
<input id="consent" type="checkbox" />
<label for="consent">I agree to receive my results and health-related educational content. I understand this is not medical advice.</label>
</div>
<div class="ctaRow" style="margin-top:12px">
<button class="btn btnPrimary" type="button" id="sendBtn">Send my plan</button>
<a class="btn btnGhost" id="protocolBtn" href="#" rel="nofollow noopener" target="_blank">View the daily support protocol</a>
</div>
<div class="small" style="margin-top:10px">If you don’t want email, you can still view the daily support protocol now.</div>
</div>
</form>
<div class="footer">
<b>Disclaimer:</b> This page is for informational purposes only and does not diagnose, treat, cure or prevent any disease.
</div>
</div>
</div>
<div class="toast" id="toast"><div class="card" id="toastCard"></div></div>
</div>
<script>
// ====== CONFIG ======
// Put your Digistore affiliate link here:
const DIGISTORE_AFFILIATE_LINK = "https://www.digistore24.com/redir/PRODUCT_ID/YOUR_AFFILIATE_ID";
// Optional: where to send leads (webhook). If empty, it will just download a CSV locally.
// Examples: Make.com webhook, Zapier webhook, your own endpoint.
const LEAD_WEBHOOK_URL = ""; // e.g. "https://hook.eu1.make.com/xxxx"
// ====== QUIZ MODEL ======
const questions = [
{
id: "ageRange",
title: "1) What’s your age range?",
options: [
{ label: "35–44", score: 2 },
{ label: "45–54", score: 1 },
{ label: "55–65", score: 0 },
{ label: "65+", score: 0 },
]
},
{
id: "energy",
title: "2) How would you rate your daily energy?",
options: [
{ label: "Low", score: 0 },
{ label: "Medium", score: 1 },
{ label: "High", score: 2 },
]
},
{
id: "sleep",
title: "3) How is your sleep quality lately?",
options: [
{ label: "Poor", score: 0 },
{ label: "Okay", score: 1 },
{ label: "Good", score: 2 },
]
},
{
id: "activity",
title: "4) How often do you exercise per week?",
options: [
{ label: "Rarely", score: 0 },
{ label: "1–2 times", score: 1 },
{ label: "3+ times", score: 2 },
]
},
{
id: "stress",
title: "5) What’s your typical stress level?",
options: [
{ label: "High", score: 0 },
{ label: "Medium", score: 1 },
{ label: "Low", score: 2 },
]
},
{
id: "diet",
title: "6) How would you rate your nutrition?",
options: [
{ label: "Needs improvement", score: 0 },
{ label: "Average", score: 1 },
{ label: "Strong", score: 2 },
]
},
{
id: "focus",
title: "7) How is your focus during the day?",
options: [
{ label: "Low", score: 0 },
{ label: "Medium", score: 1 },
{ label: "Strong", score: 2 },
]
},
{
id: "confidence",
title: "8) How would you rate your day-to-day confidence & drive?",
options: [
{ label: "Low", score: 0 },
{ label: "Medium", score: 1 },
{ label: "High", score: 2 },
]
},
];
const state = {
step: 0,
answers: {},
totalScore: 0,
band: "",
};
// ====== UI WIRING ======
const qWrap = document.getElementById('qWrap');
const bar = document.getElementById('bar');
const stepLabel = document.getElementById('stepLabel');
const backBtn = document.getElementById('backBtn');
const nextBtn = document.getElementById('nextBtn');
const startBtn = document.getElementById('startBtn');
const learnBtn = document.getElementById('learnBtn');
const result = document.getElementById('result');
const headline = document.getElementById('headline');
const summary = document.getElementById('summary');
const scoreLabel = document.getElementById('scoreLabel');
const badge = document.getElementById('badge');
const protocolBtn = document.getElementById('protocolBtn');
const sendBtn = document.getElementById('sendBtn');
const toast = document.getElementById('toast');
const toastCard = document.getElementById('toastCard');
protocolBtn.href = DIGISTORE_AFFILIATE_LINK;
function toastMsg(html){
toastCard.innerHTML = html;
toast.style.display = 'block';
setTimeout(()=>toast.style.display='none', 3200);
}
function renderQuestion(){
result.style.display = 'none';
const q = questions[state.step];
const progress = Math.round(((state.step) / questions.length) * 100);
bar.style.width = progress + '%';
stepLabel.textContent = `Step ${state.step + 1} of ${questions.length}`;
qWrap.innerHTML = `
<div class="q">
<p class="qTitle">${q.title}</p>
<div class="options" role="radiogroup" aria-label="${q.title}">
${q.options.map((o, idx)=>{
const checked = state.answers[q.id] === idx ? 'checked' : '';
return `
<label class="opt">
<input type="radio" name="${q.id}" value="${idx}" ${checked} />
<span>${o.label}</span>
</label>`;
}).join('')}
</div>
</div>
`;
backBtn.style.visibility = state.step === 0 ? 'hidden' : 'visible';
nextBtn.textContent = state.step === questions.length - 1 ? 'Finish' : 'Next';
}
function readSelected(){
const q = questions[state.step];
const sel = qWrap.querySelector(`input[name="${q.id}"]:checked`);
if(!sel) return null;
return parseInt(sel.value, 10);
}
function calcResult(){
let total = 0;
questions.forEach(q=>{
const idx = state.answers[q.id];
if(idx == null) return;
total += q.options[idx].score;
});
state.totalScore = total;
// Max score = 16
if(total <= 6){
state.band = 'Low';
} else if(total <= 11){
state.band = 'Medium';
} else {
state.band = 'Strong';
}
let color = getComputedStyle(document.documentElement).getPropertyValue('--warn');
if(state.band === 'Low') color = getComputedStyle(document.documentElement).getPropertyValue('--danger');
if(state.band === 'Strong') color = getComputedStyle(document.documentElement).getPropertyValue('--ok');
badge.style.background = color;
scoreLabel.textContent = `Circulation Support Score: ${state.band}`;
if(state.band === 'Low'){
headline.textContent = 'Your circulation support signals look underpowered';
summary.textContent = 'Based on your inputs, your daily energy, recovery and lifestyle signals suggest your circulation support stack may need attention. Next: a simple, non-medical daily protocol that supports healthy blood flow and performance.';
} else if(state.band === 'Medium'){
headline.textContent = 'Your circulation support signals look average';
summary.textContent = 'Your inputs suggest you’re doing some things right, but there’s room to optimize circulation support for stronger daily energy, focus and confidence. Next: a simple daily support protocol.';
} else {
headline.textContent = 'Your circulation support signals look strong';
summary.textContent = 'Your inputs suggest a good baseline for daily energy and recovery. If you want to maintain momentum, a simple daily protocol can help support consistency over time.';
}
bar.style.width = '100%';
stepLabel.textContent = `Completed`;
result.style.display = 'block';
qWrap.innerHTML = '';
}
function downloadCSVRow(row){
const headers = Object.keys(row);
const values = headers.map(h => (''+row[h]).replaceAll('"','""'));
const csv = headers.join(',') + "\n" + values.map(v=>`"${v}"`).join(',') + "\n";
const blob = new Blob([csv], {type:'text/csv'});
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'lead.csv';
a.click();
URL.revokeObjectURL(url);
}
async function submitLead(){
const email = document.getElementById('email').value.trim();
const age = document.getElementById('age').value.trim();
const consent = document.getElementById('consent').checked;
if(!email){
toastMsg('<b>Missing email.</b> Enter an email to receive your plan (or click “View the daily support protocol”).');
return;
}
if(!consent){
toastMsg('<b>Consent required.</b> Please check the consent box to receive emails.');
return;
}
const payload = {
ts: new Date().toISOString(),
email,
age: age || null,
score_band: state.band,
score_total: state.totalScore,
answers: state.answers,
source: 'tiktok',
page: location.href,
};
// TikTok event (uncomment if pixel is installed)
// if(window.ttq){ ttq.track('SubmitForm'); }
try{
if(LEAD_WEBHOOK_URL){
const res = await fetch(LEAD_WEBHOOK_URL, {
method:'POST',
headers:{'Content-Type':'application/json'},
body: JSON.stringify(payload)
});
if(!res.ok) throw new Error('Webhook failed');
toastMsg('<b>Sent.</b> Check your inbox for your plan.');
} else {
downloadCSVRow({
ts: payload.ts,
email: payload.email,
age: payload.age ?? '',
score_band: payload.score_band,
score_total: payload.score_total,
});
toastMsg('<b>Saved.</b> (No webhook configured.) Add your webhook URL to store leads automatically.');
}
} catch(e){
toastMsg('<b>Error.</b> Could not send. Configure a webhook URL or try again.');
}
}
backBtn.addEventListener('click', ()=>{
if(state.step === 0) return;
state.step -= 1;
renderQuestion();
});
nextBtn.addEventListener('click', ()=>{
const selected = readSelected();
if(selected == null){
toastMsg('<b>Select one option</b> to continue.');
return;
}
const q = questions[state.step];
state.answers[q.id] = selected;
if(state.step === questions.length - 1){
calcResult();
} else {
state.step += 1;
renderQuestion();
}
});
startBtn.addEventListener('click', ()=>{
document.getElementById('quizCard').scrollIntoView({behavior:'smooth', block:'start'});
});
learnBtn.addEventListener('click', ()=>{
toastMsg('<b>How it works:</b> Answer 8 quick questions → get a score → optionally receive a plan by email → view a daily support protocol.');
});
sendBtn.addEventListener('click', submitLead);
// Init
renderQuestion();
</script>
</body>
</html>