Down Payment Session Copy

Add New > add ONE “Custom HTML”
block (or switch the classic editor to the Text/HTML tab) and paste
THIS ENTIRE FILE. Do not paste into a “Paragraph” block.
2. The RA_CONFIG settings near the bottom of the file are ALREADY CORRECT:
webAppUrl – wired to the live Apps Script deployment.
zoomRegistrationUrl – the SAME registration link as the Sep 3 campaign.
Zoom has re-pointed it at “Your Path To A Down
Payment”, Sep 17 2026 7:30 PM ET (verified
2026-09-10), so every printed QR code still works.
3. Publish. Open the page on a phone in a private window – the reserve-a-seat
popup appears after ~2.6s. Confirm it CLOSES three ways: the round X,
“Not yet – keep reading”, and tapping the dark area outside the card.
4. Submit a test lead and confirm it lands in the “Leads” Google Sheet with
the phone number in column E, and that the confirmation email arrives.
—————————————————————————-
WORDPRESS / PAGE-BUILDER SAFETY – PLEASE DO NOT REFORMAT THIS FILE.
Three things about it are deliberate and all three are load-bearing. The two
failures below were observed on the real published page, not guessed at.
(1) NO AMPERSAND CHARACTERS in the style or script blocks. WordPress
HTML-encodes an ampersand inside a script block, which turns every
logical-AND operator into a character entity. The parser then meets a stray
hash character and EVERY line of page JavaScript dies: photos stay invisible
at zero opacity, the countdown sticks on two dashes, and no button opens the
registration popup. Each logical AND is therefore written in the equivalent
ternary form “a ? b : false”, which short-circuits identically. Please do not
“simplify” those back.
(2) NO BLANK LINES anywhere. WordPress runs page content through a filter
called wpautop, which rewrites every blank line as a paragraph break – and it
does that inside the style and script blocks too. One paragraph tag dropped
into the middle of a stylesheet is a syntax error, so the browser discards
every rule after it. That is what turned the first upload into a dark blurred
page: the popup lost its positioning rules, rendered inline, and its
full-screen backdrop covered the whole page.
(3) NO MARKUP-LOOKING TEXT IN THIS COMMENT. Tag names written inside a
comment can be picked up by sanitisers and plugins that scan with regular
expressions, which then mangle whatever follows.
—————————————————————————-
WHAT CHANGED SINCE v5 (all v5 copy, compliance wording and layout preserved):
v7 – published-page fixes, both diagnosed on the live site:
– Survives WordPress. The v6 upload was corrupted on save twice over: blank
lines became paragraph tags inside the stylesheet, and ampersands inside the
script were entity-encoded, which killed every line of JavaScript. Neither
can happen now. See the safety notes above.
– Pairs with Code_v7 in 02_Google_Apps_Script.
v6 – mobile and event changes:
– NEW EVENT: Sep 17, 2026 at 7:30 PM ET. Zoom registration URL and the
embedded QR code are UNCHANGED – Zoom re-pointed the existing link.
– MOBILE FIX: the popup is now scrollable and can always be closed. In v5 the
modal used flex centring with a non-scrolling container, so on short screens
the top of the card (and the X button) was pushed off-screen and unreachable.
– Touch targets raised to the 44x44px minimum (Apple HIG / Android Material).
– Inputs are 16px so iOS Safari no longer zooms on focus and shifts the layout.
– Layout verified from 280px (flip-phone cover screen) upward, plus landscape.
– iOS-safe body scroll lock; keyboard no longer auto-opens on touch devices.
– CALMER POPUP: the invitation now waits 22 seconds OR until 45% of the page
has been read (whichever comes first) instead of ambushing at 2.6 seconds.
Both thresholds are one-line edits in RA_CONFIG.
– 100% self-contained: images, QR code and logo are embedded. No uploads.
– Never put passwords in this file. The Apps Script URL is an endpoint, not a secret.
– Confirm the exact RECO-registered brokerage name before going live.
============================================================================ –>

@import url(‘https://fonts.googleapis.com/css2?family=Playfair+Display:wght@600;700;800’);
@import url(‘https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800′);
#ra-lp{
–ink:#0c1b2a; –navy:#102b44; –navy2:#173d5f; –teal:#285873;
–gold:#d8b25c; –gold2:#f1d68c; –gold-deep:#9c7726;
–paper:#fbfaf7; –white:#ffffff; –muted:#5d6a75; –line:#dfe5e8;
–success:#1c7654; –danger:#b3402e;
–glass:rgba(255,255,255,.08); –glass-brd:rgba(255,255,255,.18);
–shadow:0 24px 70px rgba(8,28,46,.22); –radius:22px; –max:1180px;
font-family:’Inter’,ui-sans-serif,system-ui,-apple-system,’Segoe UI’,sans-serif;
color:var(–ink); background:var(–paper); line-height:1.6;
font-size:16px; -webkit-font-smoothing:antialiased; overflow-x:hidden; display:block;
}
#ra-lp *,#ra-lp *::before,#ra-lp *::after{box-sizing:border-box; margin:0; padding:0;}
#ra-lp img{max-width:100%; display:block;}
#ra-lp a{color:inherit;}
#ra-lp .ra-wrap{max-width:var(–max); margin:0 auto; padding:0 22px;}
#ra-lp .ra-serif{font-family:’Playfair Display’,Georgia,serif;}
/* ———- animated backdrop ———- */
#ra-lp .ra-sky{position:relative; isolation:isolate; color:#f4f8fb;
background:linear-gradient(135deg,#081827 0%,#123653 55%,#285873 100%);
background-size:220% 220%; animation:ra-drift 18s ease-in-out infinite alternate;}
@keyframes ra-drift{0%{background-position:0% 0%}100%{background-position:100% 100%}}
#ra-lp .ra-orb{position:absolute; border-radius:50%; filter:blur(70px); opacity:.5; z-index:-1; pointer-events:none;}
#ra-lp .ra-orb.o1{width:420px;height:420px; background:radial-gradient(circle,#d8b25c66,transparent 70%); top:-120px; right:-80px; animation:ra-float 12s ease-in-out infinite alternate;}
#ra-lp .ra-orb.o2{width:520px;height:520px; background:radial-gradient(circle,#2f6a8f88,transparent 70%); bottom:-180px; left:-140px; animation:ra-float 15s ease-in-out infinite alternate-reverse;}
@keyframes ra-float{from{transform:translateY(0) scale(1)}to{transform:translateY(40px) scale(1.08)}}
/* ———- top announcement ———- */
#ra-lp .ra-topbar{background:#071522; color:#e8dfc8; text-align:center; padding:10px 16px;
font-size:13.5px; letter-spacing:.06em; font-weight:600;}
#ra-lp .ra-topbar b{color:var(–gold2); font-weight:800;}
/* ———- nav ———- */
#ra-lp .ra-nav{position:sticky; top:0; z-index:60; backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px);
background:rgba(8,24,39,.82); border-bottom:1px solid rgba(255,255,255,.08);}
#ra-lp .ra-nav-in{display:flex; align-items:center; gap:18px; padding:12px 22px; max-width:var(–max); margin:0 auto;}
#ra-lp .ra-brand{display:flex; align-items:center; gap:12px; color:#fff; text-decoration:none;}
#ra-lp .ra-brand svg{width:44px; height:44px; flex:0 0 44px;}
#ra-lp .ra-brand .t1{font-weight:800; font-size:15px; letter-spacing:.14em;}
#ra-lp .ra-brand .t2{font-size:10.5px; letter-spacing:.22em; color:var(–gold2); font-weight:600;}
#ra-lp .ra-nav-links{display:flex; gap:22px; margin-left:auto; align-items:center;}
#ra-lp .ra-nav-links a{color:#d9e4ec; text-decoration:none; font-size:14px; font-weight:600;}
#ra-lp .ra-nav-links a:hover{color:var(–gold2);}
#ra-lp .ra-progress{position:absolute; left:0; bottom:-1px; height:2px; width:0%;
background:linear-gradient(90deg,var(–gold),var(–gold2)); transition:width .1s linear;}
/* ———- buttons ———- */
#ra-lp .ra-btn{display:inline-flex; align-items:center; justify-content:center; gap:8px;
border:0; cursor:pointer; text-decoration:none; border-radius:999px; font-weight:800;
font-family:inherit; letter-spacing:.02em; transition:transform .18s ease, box-shadow .18s ease;}
#ra-lp .ra-btn:active{transform:translateY(1px) scale(.99);}
#ra-lp .ra-btn-gold{background:linear-gradient(135deg,var(–gold),var(–gold2)); color:#231a05;
padding:15px 30px; font-size:16px; box-shadow:0 14px 34px rgba(216,178,92,.38);}
#ra-lp .ra-btn-gold:hover{transform:translateY(-2px); box-shadow:0 20px 44px rgba(216,178,92,.5);}
#ra-lp .ra-btn-ghost{background:rgba(255,255,255,.08); color:#f4f8fb; padding:15px 26px; font-size:15px;
border:1px solid rgba(255,255,255,.25);}
#ra-lp .ra-btn-ghost:hover{background:rgba(255,255,255,.16);}
#ra-lp .ra-btn-sm{padding:10px 20px; font-size:14px;}
#ra-lp .ra-btn:focus-visible,#ra-lp a:focus-visible,#ra-lp input:focus-visible{outline:3px solid #7db7ff; outline-offset:2px;}
/* ———- hero ———- */
#ra-lp .ra-hero{padding:64px 0 40px; position:relative; overflow:hidden;}
#ra-lp .ra-hero-grid{display:grid; grid-template-columns:1.15fr .85fr; gap:44px; align-items:center;}
#ra-lp .ra-eyebrow{display:inline-flex; align-items:center; gap:8px; font-size:12.5px; font-weight:700;
letter-spacing:.2em; color:var(–gold2); text-transform:uppercase; margin-bottom:18px;}
#ra-lp .ra-eyebrow::before{content:”; width:26px; height:2px; background:var(–gold);}
#ra-lp .ra-h1{font-size:clamp(34px,4.6vw,58px); line-height:1.08; font-weight:800; color:#fff; letter-spacing:.01em;}
#ra-lp .ra-h1 em{font-style:normal; color:var(–gold2); position:relative; white-space:nowrap;}
#ra-lp .ra-h1 em::after{content:”; position:absolute; left:0; right:0; bottom:4px; height:10px;
background:linear-gradient(90deg,#d8b25c55,#f1d68c33); z-index:-1; border-radius:4px;}
#ra-lp .ra-hero-sub{margin-top:20px; font-size:17.5px; color:#cfdbe4; max-width:560px;}
#ra-lp .ra-hero-ctas{display:flex; gap:14px; margin-top:30px; flex-wrap:wrap;}
#ra-lp .ra-trustline{margin-top:18px; font-size:13.5px; color:#9db4c3; letter-spacing:.02em;}
#ra-lp .ra-chip{display:inline-flex; align-items:center; gap:10px; background:var(–glass);
border:1px solid var(–glass-brd); border-radius:14px; padding:10px 16px; font-size:14px; color:#eef4f8;
backdrop-filter:blur(10px); -webkit-backdrop-filter:blur(10px);}
#ra-lp .ra-chip b{color:var(–gold2);}
#ra-lp .ra-hero-card{position:relative; border-radius:26px; padding:14px;
background:linear-gradient(160deg,rgba(255,255,255,.14),rgba(255,255,255,.05));
border:1px solid var(–glass-brd); backdrop-filter:blur(16px); -webkit-backdrop-filter:blur(16px);
box-shadow:var(–shadow); transform:rotate(1.2deg);}
#ra-lp .ra-hero-card img.ra-portrait{border-radius:18px; width:100%; height:auto;}
#ra-lp .ra-hero-badge{position:absolute; left:-14px; bottom:26px; background:rgba(7,21,34,.92);
border:1px solid rgba(216,178,92,.4); color:#f2e8cf; padding:12px 18px; border-radius:14px;
font-size:13px; line-height:1.45; backdrop-filter:blur(8px); box-shadow:0 18px 40px rgba(0,0,0,.35);}
#ra-lp .ra-hero-badge b{color:var(–gold2); display:block; font-size:14px;}
#ra-lp .ra-hero-card img.ra-hero-seal{position:absolute; top:-20px; right:-14px; width:76px; max-width:76px;
height:auto; border-radius:0; z-index:2;
filter:drop-shadow(0 10px 24px rgba(0,0,0,.45)); animation:ra-float 9s ease-in-out infinite alternate;}
/* ———- countdown ———- */
#ra-lp .ra-count{padding:26px 0 56px;}
#ra-lp .ra-count-card{display:flex; gap:14px; justify-content:center; align-items:stretch; flex-wrap:wrap;
background:var(–glass); border:1px solid var(–glass-brd); border-radius:var(–radius);
padding:22px 20px; backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px);}
#ra-lp .ra-count-label{width:100%; text-align:center; font-size:12.5px; letter-spacing:.22em;
text-transform:uppercase; color:#a8bcca; font-weight:700; margin-bottom:6px;}
#ra-lp .ra-timebox{min-width:86px; text-align:center; background:rgba(7,21,34,.6);
border:1px solid rgba(255,255,255,.12); border-radius:16px; padding:14px 10px;}
#ra-lp .ra-timebox b{display:block; font-size:clamp(28px,4vw,40px); font-weight:800; color:var(–gold2);
font-variant-numeric:tabular-nums; text-shadow:0 0 24px rgba(241,214,140,.35);}
#ra-lp .ra-timebox span{font-size:11px; letter-spacing:.18em; text-transform:uppercase; color:#9db4c3;}
/* ———- number strip ———- */
#ra-lp .ra-stats{background:#071522; color:#eef4f8; padding:54px 0;}
#ra-lp .ra-stats-grid{display:grid; grid-template-columns:repeat(4,1fr); gap:18px;}
#ra-lp .ra-stat{text-align:center; padding:26px 18px; border-radius:var(–radius);
background:linear-gradient(170deg,rgba(255,255,255,.06),rgba(255,255,255,.02));
border:1px solid rgba(255,255,255,.1);}
#ra-lp .ra-stat .num{display:block; font-size:clamp(34px,4.4vw,52px); font-weight:800; line-height:1.05;
background:linear-gradient(120deg,#f7e7b6,#d8b25c 45%,#f1d68c 70%,#b98f3e);
-webkit-background-clip:text; background-clip:text; color:transparent;
filter:drop-shadow(0 6px 18px rgba(216,178,92,.35)); font-variant-numeric:tabular-nums; white-space:nowrap;}
#ra-lp .ra-stat .desc{display:block; margin-top:10px; font-size:14px; color:#b9c9d4; max-width:300px; margin-left:auto; margin-right:auto;}
#ra-lp .ra-stats-note{margin-top:20px; text-align:center; font-size:12.5px; color:#7e93a2;}
/* ———- generic sections ———- */
#ra-lp .ra-section{padding:74px 0;}
#ra-lp .ra-section-blue{background:linear-gradient(180deg,#f2f0ea,#fbfaf7);}
#ra-lp .ra-kicker{font-size:12.5px; font-weight:800; letter-spacing:.22em; text-transform:uppercase; color:var(–gold-deep);}
#ra-lp .ra-h2{font-size:clamp(26px,3.4vw,40px); font-weight:800; color:var(–navy); margin-top:10px; line-height:1.15;}
#ra-lp .ra-lead{margin-top:14px; font-size:16.5px; color:var(–muted); max-width:720px;}
#ra-lp .ra-cards{display:grid; grid-template-columns:repeat(3,1fr); gap:20px; margin-top:34px;}
#ra-lp .ra-card{background:var(–white); border:1px solid var(–line); border-radius:var(–radius);
padding:26px; box-shadow:0 10px 34px rgba(8,28,46,.07); transition:transform .25s ease, box-shadow .25s ease;}
#ra-lp .ra-card:hover{transform:translateY(-5px); box-shadow:0 22px 48px rgba(8,28,46,.13);}
#ra-lp .ra-card .ic{width:46px; height:46px; border-radius:13px; display:flex; align-items:center; justify-content:center;
background:linear-gradient(135deg,#102b44,#173d5f); color:var(–gold2); font-size:20px; font-weight:800; margin-bottom:16px;}
#ra-lp .ra-card h3{font-size:18px; color:var(–navy); margin-bottom:8px;}
#ra-lp .ra-card p{font-size:14.5px; color:var(–muted);}
/* ———- real section ———- */
#ra-lp .ra-truth{display:grid; grid-template-columns:1fr 1fr; gap:20px; margin-top:34px;}
#ra-lp .ra-truth-col{border-radius:var(–radius); padding:26px;}
#ra-lp .ra-truth-col.no{background:#fdf3f0; border:1px solid #efd4cc;}
#ra-lp .ra-truth-col.yes{background:#eef7f2; border:1px solid #cfe6da;}
#ra-lp .ra-truth-col h3{font-size:17px; margin-bottom:14px;}
#ra-lp .ra-truth-col.no h3{color:var(–danger);}
#ra-lp .ra-truth-col.yes h3{color:var(–success);}
#ra-lp .ra-truth-col li{list-style:none; padding-left:28px; position:relative; margin-bottom:10px; font-size:14.5px; color:#3c4954;}
#ra-lp .ra-truth-col.no li::before{content:’✕’; position:absolute; left:0; color:var(–danger); font-weight:800;}
#ra-lp .ra-truth-col.yes li::before{content:’✓’; position:absolute; left:0; color:var(–success); font-weight:800;}
#ra-lp .ra-legit{margin-top:26px; background:var(–white); border:1px solid var(–line); border-left:4px solid var(–gold);
border-radius:14px; padding:20px 24px; font-size:14px; color:var(–muted);}
#ra-lp .ra-legit a{color:var(–navy); font-weight:600;}
/* ———- flow ———- */
#ra-lp .ra-flow{display:grid; grid-template-columns:repeat(4,1fr); gap:16px; margin-top:34px;}
#ra-lp .ra-step{background:var(–white); border:1px solid var(–line); border-radius:18px; padding:22px; position:relative;}
#ra-lp .ra-step .n{position:absolute; top:-14px; left:20px; width:30px; height:30px; border-radius:50%;
background:linear-gradient(135deg,var(–gold),var(–gold2)); color:#231a05; display:flex; align-items:center;
justify-content:center; font-weight:800; font-size:14px; box-shadow:0 8px 18px rgba(216,178,92,.4);}
#ra-lp .ra-step h4{font-size:15.5px; color:var(–navy); margin:8px 0 6px;}
#ra-lp .ra-step p{font-size:13.5px; color:var(–muted);}
/* ———- about ———- */
#ra-lp .ra-about{display:grid; grid-template-columns:.9fr 1.1fr; gap:44px; align-items:center;}
#ra-lp .ra-photo-stack{position:relative;}
#ra-lp .ra-photo-stack .main{border-radius:24px; box-shadow:var(–shadow); width:100%;}
#ra-lp .ra-logos{display:flex; align-items:center; gap:22px; margin-top:26px; flex-wrap:wrap;}
#ra-lp .ra-logos img{height:56px; width:auto;}
#ra-lp .ra-facts{display:flex; gap:10px; flex-wrap:wrap; margin-top:22px;}
#ra-lp .ra-fact{background:#0f2a42; color:#e9f0f5; border-radius:999px; padding:9px 18px; font-size:13px; font-weight:600;}
#ra-lp .ra-fact b{color:var(–gold2);}
#ra-lp .ra-quote{margin-top:22px; border-left:3px solid var(–gold); padding:6px 0 6px 18px;
font-size:16.5px; color:#33414d; font-style:italic;}
/* ———- QR ———- */
#ra-lp .ra-qr-band{background:linear-gradient(135deg,#081827,#123653); color:#eef4f8;}
#ra-lp .ra-qr-grid{display:grid; grid-template-columns:1.2fr .8fr; gap:40px; align-items:center;}
#ra-lp .ra-qr-card{background:var(–paper); border-radius:24px; padding:26px; text-align:center; color:var(–ink);
box-shadow:var(–shadow); max-width:320px; margin-left:auto;}
#ra-lp .ra-qr-card img{width:100%; max-width:230px; margin:0 auto; border-radius:12px;}
#ra-lp .ra-qr-card p{font-size:13px; color:var(–muted); margin-top:12px;}
#ra-lp .ra-qr-card .scan{font-weight:800; letter-spacing:.16em; font-size:12px; color:var(–gold-deep); text-transform:uppercase;}
/* ———- FAQ ———- */
#ra-lp .ra-faq{max-width:820px; margin:34px auto 0;}
#ra-lp .ra-faq details{background:var(–white); border:1px solid var(–line); border-radius:16px;
padding:18px 22px; margin-bottom:12px;}
#ra-lp .ra-faq summary{cursor:pointer; font-weight:700; font-size:15.5px; color:var(–navy); list-style:none; position:relative; padding-right:30px;}
#ra-lp .ra-faq summary::-webkit-details-marker{display:none;}
#ra-lp .ra-faq summary::after{content:’+’; position:absolute; right:0; top:0; font-size:20px; color:var(–gold-deep); font-weight:800; transition:transform .2s;}
#ra-lp .ra-faq details[open] summary::after{transform:rotate(45deg);}
#ra-lp .ra-faq details p{margin-top:12px; font-size:14.5px; color:var(–muted);}
/* ———- final CTA ———- */
#ra-lp .ra-final{padding:70px 0;}
#ra-lp .ra-final-card{background:linear-gradient(135deg,var(–gold),var(–gold2)); border-radius:28px;
padding:52px 40px; text-align:center; color:#231a05; box-shadow:0 30px 70px rgba(216,178,92,.4);
position:relative; overflow:hidden;}
#ra-lp .ra-final-card::after{content:”; position:absolute; top:-60%; left:-30%; width:60%; height:220%;
background:linear-gradient(105deg,transparent,rgba(255,255,255,.5),transparent); transform:rotate(12deg);
animation:ra-sheen 5.5s ease-in-out infinite;}
@keyframes ra-sheen{0%,60%{left:-40%}100%{left:130%}}
#ra-lp .ra-final-card h2{font-size:clamp(26px,3.6vw,42px); font-weight:800; line-height:1.12;}
#ra-lp .ra-final-card p{margin:14px auto 26px; max-width:640px; font-size:16px; font-weight:500;}
#ra-lp .ra-final-card .ra-btn{background:#0c1b2a; color:var(–gold2); position:relative; z-index:1;}
/* ———- footer ———- */
#ra-lp .ra-footer{background:#071522; color:#a7b8c5; padding:52px 0 90px; font-size:14px;}
#ra-lp .ra-footer-grid{display:grid; grid-template-columns:1.3fr 1fr 1fr; gap:34px;}
#ra-lp .ra-footer h4{color:#fff; font-size:15px; margin-bottom:12px;}
#ra-lp .ra-footer a{color:#cfdbe4; text-decoration:none;}
#ra-lp .ra-footer a:hover{color:var(–gold2);}
#ra-lp .ra-footer .legal{margin-top:34px; padding-top:22px; border-top:1px solid rgba(255,255,255,.08);
font-size:12.5px; color:#7e93a2; line-height:1.7;}
#ra-lp .ra-footer details{margin-top:10px;}
#ra-lp .ra-footer summary{cursor:pointer; color:#cfdbe4; font-weight:600;}
/* ———- sticky mobile CTA ———- */
#ra-lp .ra-sticky{position:fixed; left:0; right:0; bottom:0; z-index:70; display:none;
padding:10px 14px calc(10px + env(safe-area-inset-bottom)); background:rgba(7,21,34,.94);
backdrop-filter:blur(12px); border-top:1px solid rgba(255,255,255,.12);}
#ra-lp .ra-sticky .ra-btn{width:100%;}
/* ———- modal ———- */
#ra-lp .ra-modal{position:fixed; inset:0; z-index:100; display:none; align-items:center; justify-content:center; padding:20px;}
#ra-lp .ra-modal.open{display:flex;}
#ra-lp .ra-modal-backdrop{position:absolute; inset:0; background:rgba(5,14,23,.7); backdrop-filter:blur(6px);}
#ra-lp .ra-modal-card{position:relative; width:100%; max-width:470px; border-radius:26px; overflow:hidden;
background:linear-gradient(165deg,rgba(23,50,79,.96),rgba(10,27,44,.98));
border:1px solid rgba(216,178,92,.35); color:#eef4f8; box-shadow:0 40px 90px rgba(0,0,0,.5);
animation:ra-pop .35s cubic-bezier(.2,.9,.3,1.2);}
@keyframes ra-pop{from{transform:translateY(26px) scale(.96); opacity:0}to{transform:none; opacity:1}}
#ra-lp .ra-modal-head{padding:26px 28px 0;}
#ra-lp .ra-modal-head .ev{font-size:11.5px; letter-spacing:.2em; text-transform:uppercase; color:var(–gold2); font-weight:800;}
#ra-lp .ra-modal-head h3{font-size:24px; line-height:1.2; margin-top:8px; color:#fff;}
#ra-lp .ra-modal-head p{margin-top:8px; font-size:14px; color:#b9c9d4;}
#ra-lp .ra-modal-close{position:absolute; top:14px; right:14px; width:36px; height:36px; border-radius:50%;
border:1px solid rgba(255,255,255,.2); background:rgba(255,255,255,.08); color:#fff; font-size:17px;
cursor:pointer; line-height:1;}
#ra-lp .ra-form{padding:20px 28px 28px; display:grid; gap:12px;}
#ra-lp .ra-form .row2{display:grid; grid-template-columns:1fr 1fr; gap:12px;}
#ra-lp .ra-form input[type=text],#ra-lp .ra-form input[type=email],#ra-lp .ra-form input[type=tel]{width:100%; padding:13px 16px; border-radius:12px;
border:1px solid rgba(255,255,255,.22); background:rgba(255,255,255,.07); color:#fff; font-size:15px; font-family:inherit;}
#ra-lp .ra-form input::placeholder{color:#8fa3b1;}
#ra-lp .ra-consent{display:flex; gap:10px; align-items:flex-start; font-size:12.5px; color:#a8bcca; line-height:1.5;}
#ra-lp .ra-consent input{margin-top:3px; accent-color:var(–gold);}
#ra-lp .ra-hp{position:absolute; left:-5000px; opacity:0; height:0; overflow:hidden;}
#ra-lp .ra-form .ra-btn-gold{width:100%; margin-top:4px;}
#ra-lp .ra-form-status{font-size:13.5px; min-height:20px;}
#ra-lp .ra-form-status.ok{color:#8fd8b2;}
#ra-lp .ra-form-status.err{color:#f2a08e;}
#ra-lp .ra-keep{background:none; border:none; color:#8fa3b1; font-size:13px; text-decoration:underline;
cursor:pointer; font-family:inherit; margin:0 auto;}
#ra-lp .ra-success{padding:34px 28px 40px; text-align:center; display:none;}
#ra-lp .ra-success .big{font-size:52px; line-height:1;}
#ra-lp .ra-success h3{font-size:23px; color:#fff; margin-top:12px;}
#ra-lp .ra-success p{font-size:14.5px; color:#b9c9d4; margin-top:10px;}
#ra-lp .ra-success .ra-btn{margin-top:20px;}
/* ———- cookie notice ———- */
#ra-lp .ra-cookie{position:fixed; left:16px; bottom:16px; z-index:90; max-width:340px; display:none;
background:rgba(7,21,34,.95); color:#cfdbe4; border:1px solid rgba(255,255,255,.15); border-radius:16px;
padding:16px 18px; font-size:12.5px; line-height:1.5; backdrop-filter:blur(10px); box-shadow:0 20px 50px rgba(0,0,0,.4);}
#ra-lp .ra-cookie button{margin-top:10px; background:var(–gold); border:0; border-radius:999px; padding:7px 18px;
font-weight:800; font-size:12.5px; cursor:pointer; color:#231a05; font-family:inherit;}
/* ———- canadian accents + read more ———- */
#ra-lp .ra-flag{width:27px; height:14px; border-radius:2px; display:inline-block; vertical-align:-2px; box-shadow:0 1px 5px rgba(0,0,0,.35); flex:0 0 auto;}
#ra-lp .ra-flag-chip{display:inline-flex; align-items:center; gap:9px; background:rgba(213,43,30,.14); border:1px solid rgba(255,255,255,.22); border-radius:999px; padding:8px 16px; font-size:11.5px; font-weight:800; letter-spacing:.16em; text-transform:uppercase; color:#ffe3df; margin-bottom:16px;}
#ra-lp .ra-rm{margin-top:20px; max-width:760px;}
#ra-lp .ra-rm-more{display:none; margin-top:12px;}
#ra-lp .ra-rm.open .ra-rm-more{display:block; animation:ra-rmfade .45s ease;}
@keyframes ra-rmfade{from{opacity:0; transform:translateY(8px)}to{opacity:1; transform:none}}
#ra-lp .ra-rm-more p{font-size:15px; color:var(–muted); margin-bottom:10px;}
#ra-lp .ra-rm-btn{background:none; border:1.5px solid var(–gold); color:var(–gold-deep); border-radius:999px; padding:9px 22px; font-weight:800; font-size:13.5px; cursor:pointer; font-family:inherit; margin-top:10px; transition:background .2s, color .2s;}
#ra-lp .ra-rm-btn:hover{background:linear-gradient(135deg,var(–gold),var(–gold2)); color:#231a05;}
#ra-lp .ra-rm.ra-rm-dark .ra-rm-btn{color:var(–gold2); border-color:rgba(241,214,140,.7);}
#ra-lp .ra-rm.ra-rm-dark .ra-rm-more p{color:#b9c9d4;}
#ra-lp .ra-rm .ra-btn{margin-top:8px;}
/* ———- reveal ———- */
#ra-lp .ra-reveal{opacity:0; transform:translateY(26px); transition:opacity .7s ease, transform .7s ease;}
#ra-lp .ra-reveal.in{opacity:1; transform:none;}
/* ———- responsive ———- */
@media (max-width:960px){
#ra-lp .ra-hero-grid,#ra-lp .ra-about,#ra-lp .ra-qr-grid{grid-template-columns:1fr;}
#ra-lp .ra-stats-grid,#ra-lp .ra-cards{grid-template-columns:1fr 1fr;}
#ra-lp .ra-flow{grid-template-columns:1fr 1fr;}
#ra-lp .ra-nav-links a:not(.ra-btn){display:none;}
#ra-lp .ra-hero-card{transform:none; max-width:440px;}
#ra-lp .ra-qr-card{margin:0 auto;}
}
@media (max-width:640px){
#ra-lp .ra-stats-grid,#ra-lp .ra-cards,#ra-lp .ra-flow,#ra-lp .ra-truth,#ra-lp .ra-footer-grid{grid-template-columns:1fr;}
#ra-lp .ra-sticky{display:block;}
#ra-lp .ra-form .row2{grid-template-columns:1fr;}
#ra-lp .ra-hero{padding-top:44px;}
#ra-lp .ra-count-card{gap:10px; padding:18px 12px;}
#ra-lp .ra-timebox{min-width:70px; padding:12px 6px;}
#ra-lp .ra-timebox b{font-size:26px;}
}
@media (prefers-reduced-motion:reduce){
#ra-lp *,#ra-lp *::before,#ra-lp *::after{animation:none !important; transition:none !important;}
#ra-lp .ra-reveal{opacity:1; transform:none;}
}
/* ============================================================================
v7 MOBILE HARDENING · appended last so these rules win.
Fixes the v5 “cannot close the popup on mobile” bug and makes every control
reachable from a 280px flip-phone cover screen up to desktop.
ROOT CAUSE of the v5 popup bug: .ra-modal used flex centring on a NON-scrolling
container. When the card was taller than the screen (always, on a phone with
the name/email/phone/consent form) flexbox overflowed in BOTH directions, so
the top of the card – and the X button – sat above the viewport with no way
to scroll to it. Making the modal itself the scroll container and using
margin:auto on the card fixes it: centred when it fits, top-aligned when not.
========================================================================== */
#ra-lp .ra-modal{
position:fixed; inset:0; z-index:1000; display:none;
overflow-y:auto; overflow-x:hidden; -webkit-overflow-scrolling:touch;
overscroll-behavior:contain;
align-items:flex-start; justify-content:center;
padding:calc(12px + env(safe-area-inset-top)) calc(12px + env(safe-area-inset-right))
calc(12px + env(safe-area-inset-bottom)) calc(12px + env(safe-area-inset-left));
}
#ra-lp .ra-modal.open{display:flex;}
#ra-lp .ra-modal-backdrop{position:fixed; inset:0; background:rgba(5,14,23,.72);
-webkit-backdrop-filter:blur(6px); backdrop-filter:blur(6px);}
#ra-lp .ra-modal-card{
position:relative; width:100%; max-width:470px;
margin:auto; /* centres when it fits, top-aligns when it does not */
overflow:visible; /* never clip the close button */
flex:0 0 auto;
}
/* close button: 44×44 minimum touch target, high contrast, always on top */
#ra-lp .ra-modal-close{
position:absolute; top:10px; right:10px;
width:44px; height:44px; min-width:44px; min-height:44px;
border-radius:50%; display:flex; align-items:center; justify-content:center;
border:1.5px solid rgba(255,255,255,.45); background:rgba(9,24,38,.9);
color:#fff; font-size:20px; line-height:1; cursor:pointer; z-index:3; padding:0;
-webkit-tap-highlight-color:transparent; touch-action:manipulation;
box-shadow:0 4px 14px rgba(0,0,0,.45);
}
#ra-lp .ra-modal-close:active{background:rgba(216,178,92,.95); color:#231a05;}
#ra-lp .ra-modal-head{padding:26px 66px 0 26px;} /* keep the title clear of the X */
/* 16px inputs stop iOS Safari zooming (and re-laying-out) on focus */
#ra-lp .ra-form input[type=text],
#ra-lp .ra-form input[type=email],
#ra-lp .ra-form input[type=tel]{font-size:16px; padding:14px 16px;}
/* every tappable control clears 44px */
#ra-lp .ra-btn,#ra-lp .ra-rm-btn,#ra-lp .ra-cookie button,#ra-lp .ra-keep{
min-height:44px; touch-action:manipulation; -webkit-tap-highlight-color:transparent;}
#ra-lp .ra-consent input{width:22px; height:22px; min-width:22px; flex:0 0 auto; margin-top:1px;}
/* secondary dismiss, always at the bottom of the form */
#ra-lp .ra-keep{display:block; width:100%; padding:12px 8px; margin-top:2px;}
/* ———- narrow phones ———- */
@media (max-width:420px){
#ra-lp .ra-modal{padding:calc(8px + env(safe-area-inset-top)) 8px calc(8px + env(safe-area-inset-bottom));}
#ra-lp .ra-modal-card{border-radius:20px;}
#ra-lp .ra-modal-head{padding:22px 60px 0 18px;}
#ra-lp .ra-modal-head h3{font-size:20px;}
#ra-lp .ra-form{padding:16px 18px 22px; gap:10px;}
#ra-lp .ra-success{padding:28px 18px 32px;}
}
/* ———- flip-phone cover screens and small Androids (max 340px) ———- */
@media (max-width:340px){
#ra-lp .ra-wrap{padding:0 12px;}
#ra-lp .ra-modal{padding:6px;}
#ra-lp .ra-modal-head{padding:20px 54px 0 14px;}
#ra-lp .ra-modal-head h3{font-size:18px; line-height:1.25;}
#ra-lp .ra-modal-head p{font-size:12.5px;}
#ra-lp .ra-modal-head .ev{font-size:10px;}
#ra-lp .ra-form{padding:14px 14px 18px; gap:9px;}
#ra-lp .ra-consent{font-size:11.5px;}
#ra-lp .ra-modal-close{width:44px; height:44px; min-width:44px; min-height:44px; top:8px; right:8px; font-size:18px;}
#ra-lp .ra-h1{font-size:27px;}
#ra-lp .ra-btn{font-size:13.5px; padding:12px 14px;}
#ra-lp .ra-timebox{min-width:56px; padding:10px 4px;}
#ra-lp .ra-timebox b{font-size:21px;}
#ra-lp .ra-cookie{left:8px; right:8px; bottom:8px; max-width:none;}
}
/* ———- landscape / very short viewports ———- */
@media (max-height:560px) and (orientation:landscape){
#ra-lp .ra-modal{padding:8px;}
#ra-lp .ra-modal-head{padding-top:18px;}
#ra-lp .ra-modal-head h3{font-size:19px;}
#ra-lp .ra-modal-head p{display:none;}
#ra-lp .ra-form{padding-top:14px; gap:9px;}
#ra-lp .ra-sticky{display:none;}
}
/* hide the sticky CTA and cookie bar while the popup is open (JS adds the class) */
#ra-lp.ra-modal-open .ra-sticky,#ra-lp.ra-modal-open .ra-cookie{display:none !important;}

{“@context”:”https://schema.org”,”@type”:”Event”,
“name”:”Your Path To A Down Payment”,
“description”:”A free live Zoom session for Ontario buyers who feel the down payment is the barrier to homeownership. Hosted by Ryan Anderson & Team. No pressure, no guaranteed outcomes – a practical conversation about legitimate Canadian home-buyer planning tools.”,
“startDate”:”2026-09-17T19:30:00-04:00″,”endDate”:”2026-09-17T20:30:00-04:00″,
“eventAttendanceMode”:”https://schema.org/OnlineEventAttendanceMode”,
“eventStatus”:”https://schema.org/EventScheduled”,
“location”:{“@type”:”VirtualLocation”,”url”:”https://us06web.zoom.us/meeting/register/PgIIazDZRE2fCnWENPUloA”},
“isAccessibleForFree”:true,
“organizer”:{“@type”:”Person”,”name”:”Ryan Anderson”,”email”:”advisorryananderson@gmail.com”,”telephone”:”+1-416-910-7698″}}

{“@context”:”https://schema.org”,”@type”:”FAQPage”,”mainEntity”:[
{“@type”:”Question”,”name”:”Is this a government grant or free money?”,”acceptedAnswer”:{“@type”:”Answer”,”text”:”No. This is a free educational session about legitimate Canadian home-buyer planning tools and financing pathways. Nothing is given away and no approval, financing or outcome is guaranteed.”}},
{“@type”:”Question”,”name”:”Does it cost anything to attend?”,”acceptedAnswer”:{“@type”:”Answer”,”text”:”No. The live Zoom session is completely free. You only need to register to receive your link.”}},
{“@type”:”Question”,”name”:”Will my situation be discussed publicly?”,”acceptedAnswer”:{“@type”:”Answer”,”text”:”No. The session covers general concepts. Anyone who wants a personal review can request one privately afterwards – that step is optional and always your call.”}}]}

A CANADIAN PROGRAMME SESSION · FREE LIVE ZOOM · Thursday, September 17, 2026 · 7:30 PM Eastern · Limited live seats

A Canadian programme, for Canadians

Free live session for Ontario buyers

Think you can’t buy because of the down payment? Think again.

The down payment stops more Ontario buyers than any other number. On one free, live Zoom evening, Ryan Anderson & Team walk through legitimate Canadian planning tools – including a federal programme Canadians have trusted since 1992 – and answer the questions you have been afraid to ask.


See why this is real ↓

No pressure. No guaranteed outcome. Just clarity. · Skeptics welcome.

📅 Sep 17, 2026 · 7:30 PM ET · Live on Zoom


Ryan Anderson, Sales Representative

Ryan Anderson & TeamCENTURY 21 Millennium Inc. Brokerage

The live conversation begins in
—Days
—Hours
—Minutes
—Seconds

$60,000Current federal Home Buyers’ Plan withdrawal limit per eligible buyer – subject to conditions and eligibility.
Since 1992Canadians have used the federal Home Buyers’ Plan to help buy their first homes for over three decades.
2026The rules changed. Most buyers have never heard how – or what it could mean for them.
20+ yearsOf combined experience helping people open the door to homeownership.

Figures reference publicly available Government of Canada program rules. Nothing on this page is financial, tax or lending advice; eligibility and outcomes depend entirely on individual circumstances and are never guaranteed. Experience figure reflects the team’s combined experience.

Why this session exists

One number should not end your home search.

Most people never ask about their options – they assume the answer is no and quietly keep renting. This session exists to replace assumptions with a real conversation.

And it is a distinctly Canadian story. For over three decades, Canada has built legitimate tools to help first-time buyers get to the door…

The federal Home Buyers’ Plan has been part of Canadian life since 1992 – long enough that homeowners on your own street may have used it without you ever knowing. In 2026 the rules changed again, and most buyers have simply never had those changes explained in plain language.

That gap – between what exists for Canadians and what Canadians actually know – is exactly why Ryan Anderson & Team host this session. No jargon, no pressure, and no pretending one answer fits every situation.

?

Ask better questions

Leave knowing exactly what to ask any lender, advisor or realtor – and what the answers should sound like when they are honest.

◎

See the wider picture

Your savings balance is one piece of a bigger situation: income, timing, household, goals. See how professionals actually look at it.

→

Choose a next step

You may need more time – or you may discover a path worth exploring. Either way, you decide with clear eyes. Nobody chases you.

The legitimacy question

“This sounds too good to be true.” Good – let’s deal with that first.

Healthy skepticism is welcome here. So let’s be precise about what this session is, and what it absolutely is not.

This is NOT

  • A cash giveaway or “free money”
  • A government grant handed to attendees
  • A promise of approval, financing or a home
  • A high-pressure sales webinar
  • A scheme, a secret, or a loophole

This IS

  • A free, live, educational conversation
  • About established Canadian home-buyer tools
  • Including recent Government of Canada program changes
  • Hosted by a licensed real estate professional and team
  • Followed – only if you ask – by a private individual review

Verify it yourself. The tools discussed are grounded in publicly documented programs such as the federal Home Buyers’ Plan (canada.ca). Eligibility, conditions, timing and suitability differ for every buyer – which is exactly why the details belong in a live conversation, not a social media post.

Still skeptical? Good – that instinct protects you. Here is how to check us, and this programme, in under five minutes…

Step one: look up the federal Home Buyers’ Plan on canada.ca – it is public, documented, and has served Canadians since 1992. Step two: look up Ryan Anderson – a licensed Sales Representative with CENTURY 21 Millennium Inc. Brokerage who works with Ontario buyers every week. Step three: bring your hardest question to the live session and judge the answers for yourself.

Whether any tool fits YOUR situation depends on eligibility and circumstances nobody can assess from a webpage.

The evening, step by step

From barrier to next step – in one hour.

1

The barrier, named

Why the down payment stops more buyers than any other number – and why that is rarely the full story.

2

The tools, explained

The legitimate planning tools and recent program changes most buyers have never had explained to them properly.

3

Your questions, answered

Live Q&A. Ask anything – in chat if you prefer. Hard questions are the point of the evening.

4

Your call, always

Want a private look at your own situation afterwards? Ask for it. If not – no follow-up pressure, ever.

Ryan Anderson
Your host

Ryan Anderson & Team

Ryan is a Sales Representative with CENTURY 21 Millennium Inc. Brokerage. He and his team work with Ontario buyers every week – including the ones who walked in convinced the down payment made ownership impossible.

“The down payment was my wall too. What changed wasn’t my bank balance – it was one honest conversation about what my situation actually allowed. This session is that conversation, offered first.”

Buyer-first · fiduciary duty to you
Confidential · your info stays private
No pressure · education before anything

With over 20 years of combined experience, Ryan and his team have helped people at every starting point – including the ones who were sure they had none…

Two decades of combined experience teaches one thing above all: the buyers who make it are rarely the ones who started with the most – they are the ones who asked the right questions earliest. That is the entire spirit of this session, and of the private reviews offered afterwards to anyone who wants one.

Proudly Canadian. Proudly Ontario. And proudest of the first-time buyers who thought the door was closed – until someone helped them check the handle.

CENTURY 21 Millennium
Century 21 seal

Full transparency

What happens after you register – and what doesn’t.

1

Confirmation + reminders

You instantly get a confirmation email with your Zoom registration link and a calendar invite. We remind you two days before and the day before – that’s it.

2

Attend your way

Camera off is completely fine. Listen from the couch, ask in chat, take notes. Nobody is called on. Nobody is put on the spot.

3

Nothing else – unless you ask

No cold calls. No pressure sequence. A private review of your own situation happens only if you request it. Your inbox, your rules – unsubscribe anytime.

Prefer your phone?

Scan. Register. Done.

Point your phone camera at the code to open the official Zoom registration page directly. Or use the reserve button – it takes about twenty seconds either way, and your seat is held immediately.

Why do Canadians register for this session instead of just googling the programme?…

Because search results explain programmes in general – and nobody buys a home in general. The live session connects the public rules to real situations, lets you ask what a webpage never answers, and does it without pressure or obligation.

Scan to register
QR code - Zoom registration for the free down-payment session

Official Zoom registration · Free · Sep 17, 7:30 PM ET

Straight answers

Frequently asked questions

Is this a government grant or free money?

No. Nothing is handed out. The session explains legitimate, publicly documented Canadian home-buyer planning tools – including recent Government of Canada program changes – and how different buyers may be able to use them. Whether anything applies to you depends on your eligibility and circumstances.

Why can’t you just explain everything here on this page?

Because the honest answer to almost every down-payment question is “it depends on your situation.” Publishing half-explanations creates false hope or false discouragement. The live format lets real questions get real, qualified answers.

Is the session really free? What’s the catch?

Really free. The “catch,” openly stated: some attendees will want a private review of their own situation afterwards, and Ryan’s team offers that. It is entirely optional and only ever happens because you ask for it.

Do I need documents or preparation?

No. Bring nothing but your questions. You will leave knowing what to gather if you decide to take a next step.

What if I’m not sure I even qualify as a first-time buyer?

Come anyway – definitions surprise people. Where you stand depends on your circumstances, and finding out is exactly the kind of question the session is for.

Is this a Canadian programme? Who is it for?

Yes – the session centres on federal Government of Canada home-buyer tools, including a programme Canadians have used since 1992, explained for Ontario buyers. If the down payment is what is holding you back, this evening was built for you.

Who is hosting, and are you licensed?

Ryan Anderson, Sales Representative, and his team at CENTURY 21 Millennium Inc. Brokerage. Questions beforehand are welcome: advisorryananderson@gmail.com or 416-910-7698.

Stop letting the down payment delay your dream home.

Thursday, September 17, 2026 · 7:30 PM Eastern · Live on Zoom · Free · Limited live seats. A Canadian programme, a Canadian team, and the question you have been putting off.

(function(){
“use strict”;
/* ======================= EDIT THIS BLOCK ONLY ======================= */
var RA_CONFIG = {
/* Apps Script /exec URL. Deploying Code_v6 as a NEW VERSION of the EXISTING
deployment keeps this URL valid – no edit needed. Only replace it if you
create a brand-new deployment. */
webAppUrl: “https://script.google.com/macros/s/AKfycbx5bBz_yoeIhKt4pPkmbhTDaX5GTN_jAhMNexl4S86i-fyzrOnDcLY4Hqj1LPGH6CmO/exec”,
/* Zoom REGISTRATION url – the SAME link as the Sep 3 campaign. Zoom has
re-pointed it at “Your Path To A Down Payment”, Sep 17 2026 7:30 PM ET
(verified 2026-09-10), so the printed QR codes remain valid. Registrants
receive their own personal join link by email from Zoom. */
zoomRegistrationUrl: “https://us06web.zoom.us/meeting/register/PgIIazDZRE2fCnWENPUloA”,
/* Fallback only – the generic meeting link (ID 865 8493 6404, no passcode).
Used nowhere on this page; kept here so support staff have it to hand. */
zoomJoinUrl: “https://us06web.zoom.us/j/86584936404”,
eventStart: “2026-09-17T19:30:00-04:00”,
/* HOW SOON THE INVITATION POPUP APPEARS.
v5 opened it after 2.6s, which interrupted people before they had read
anything. It now waits for genuine interest: whichever of these happens
FIRST, and only once per visit.
popupDelayMs – 22000 = 22 seconds of reading time.
popupScrollPercent – or as soon as 45% of the page has been scrolled.
Want it calmer still? Raise popupDelayMs (e.g. 35000) and/or
popupScrollPercent (e.g. 60). Set popupScrollPercent to 101 to switch the
scroll trigger off and rely on the timer alone. */
popupDelayMs: 22000,
popupScrollPercent: 45
};
RA_CONFIG.zoomUrl = RA_CONFIG.zoomRegistrationUrl || RA_CONFIG.zoomJoinUrl;
/* =================================================================== */
var root = document.getElementById(“ra-lp”);
if (!root) return;
/* single source of truth: force every Zoom link on the page to RA_CONFIG,
so changing the url above updates the whole page (buttons, QR caption, FAQ) */
Array.prototype.slice.call(root.querySelectorAll(‘a[href*=”zoom.us”]’))
.forEach(function(a){ a.href = RA_CONFIG.zoomUrl; });
/* mobile viewport self-heal (WordPress themes supply this; standalone preview may not) */
if (!document.querySelector(‘meta[name=”viewport”]’)) {
var vp = document.createElement(“meta”);
vp.name = “viewport”; vp.content = “width=device-width, initial-scale=1”;
(document.head || document.documentElement).appendChild(vp);
}
function $(s){ return root.querySelector(s); }
function $$(s){ return Array.prototype.slice.call(root.querySelectorAll(s)); }
function sget(k){ try{ return sessionStorage.getItem(k); }catch(e){ return null; } }
function sset(k,v){ try{ sessionStorage.setItem(k,v); }catch(e){} }
function lget(k){ try{ return localStorage.getItem(k); }catch(e){ return null; } }
function lset(k,v){ try{ localStorage.setItem(k,v); }catch(e){} }
/* ———- visitor id cookie + visit meta ———- */
function getCookie(name){
var m = document.cookie.match(new RegExp(“(?:^|; )” + name + “=([^;]*)”));
return m ? decodeURIComponent(m[1]) : null;
}
var vid = getCookie(“ra_visitor_id”);
if (!vid) {
vid = “ra-” + Date.now().toString(36) + “-” + Math.random().toString(36).slice(2, 10);
try { document.cookie = “ra_visitor_id=” + encodeURIComponent(vid) + “; max-age=15552000; path=/; SameSite=Lax”; } catch(e){}
}
var visits = parseInt(lget(“ra_visits”) || “0”, 10) + 1;
lset(“ra_visits”, String(visits));
/* ———- first-touch UTM persistence ———- */
var params = new URLSearchParams(window.location.search);
var UTM_KEYS = [“utm_source”,”utm_medium”,”utm_campaign”,”utm_content”,”utm_term”];
var savedUtm = {};
try { savedUtm = JSON.parse(lget(“ra_first_utm”) || “{}”); } catch(e){ savedUtm = {}; }
var hasNewUtm = UTM_KEYS.some(function(k){ return params.get(k); });
if (hasNewUtm ? !savedUtm.utm_source : false) {
UTM_KEYS.forEach(function(k){ savedUtm[k] = params.get(k) || “”; });
savedUtm.landed = window.location.href;
lset(“ra_first_utm”, JSON.stringify(savedUtm));
}
function utmVal(k){ return params.get(k) || savedUtm[k] || “”; }
/* ———- fill hidden tracking fields ———- */
function deviceInfo(){
var ua = navigator.userAgent || “”;
var kind = /Mobi|Android/i.test(ua) ? “mobile” : (/Tablet|iPad/i.test(ua) ? “tablet” : “desktop”);
return kind + ” | visits:” + visits + ” | vid:” + vid;
}
function setTracking(){
UTM_KEYS.forEach(function(k){ var el = $(“#ra_” + k); if (el) el.value = utmVal(k); });
var map = {
“#ra_referrer”: document.referrer || “”,
“#ra_page_url”: window.location.href,
“#ra_user_agent”: navigator.userAgent || “”,
“#ra_device_info”: deviceInfo(),
“#ra_language”: (navigator.language || “”) ,
“#ra_timezone”: (function(){ try { return Intl.DateTimeFormat().resolvedOptions().timeZone || “”; } catch(e){ return “”; } })(),
“#ra_screen”: (window.screen ? window.screen.width + “x” + window.screen.height : “”)
};
Object.keys(map).forEach(function(sel){ var el = $(sel); if (el) el.value = map[sel]; });
}
setTracking();
/* ———- countdown ———- */
var target = new Date(RA_CONFIG.eventStart).getTime();
function pad(n){ return (n 0 ? (h.scrollTop / (h.scrollHeight – h.clientHeight)) * 100 : 0;
if (prog) prog.style.width = pct + “%”;
}, { passive: true });
/* ———- reveal on scroll ———- */
if (“IntersectionObserver” in window) {
var io = new IntersectionObserver(function(entries){
entries.forEach(function(en){ if (en.isIntersecting) { en.target.classList.add(“in”); io.unobserve(en.target); } });
}, { threshold: 0.12 });
$$(“.ra-reveal”).forEach(function(el){ io.observe(el); });
} else {
$$(“.ra-reveal”).forEach(function(el){ el.classList.add(“in”); });
}
/* ———- number count-up ———- */
function animateCount(el){
var end = parseInt(el.getAttribute(“data-ra-countup”), 10) || 0;
var prefix = el.getAttribute(“data-ra-prefix”) || “”;
var suffix = el.getAttribute(“data-ra-suffix”) || “”;
var plain = el.getAttribute(“data-ra-format”) === “plain”;
var dur = 1400, t0 = null;
function frame(t){
if (!t0) t0 = t;
var p = Math.min(1, (t – t0) / dur);
var eased = 1 – Math.pow(1 – p, 3);
var val = Math.round(end * eased);
el.textContent = prefix + (plain ? String(val) : val.toLocaleString(“en-CA”)) + suffix;
if (p 0;
function lockScroll(){
lockedY = window.pageYOffset || document.documentElement.scrollTop || 0;
var b = document.body;
b.style.position = “fixed”; b.style.top = (-lockedY) + “px”;
b.style.left = “0”; b.style.right = “0”; b.style.width = “100%”;
b.style.overflow = “hidden”;
}
function unlockScroll(){
var b = document.body;
b.style.position = “”; b.style.top = “”; b.style.left = “”;
b.style.right = “”; b.style.width = “”; b.style.overflow = “”;
window.scrollTo(0, lockedY);
}
function openModal(source){
if (!modal || modal.classList.contains(“open”)) return;
var ls = $(“#ra_lead_source”); if (ls) ls.value = source || “cta”;
setTracking();
modal.classList.add(“open”); modal.setAttribute(“aria-hidden”, “false”);
root.classList.add(“ra-modal-open”); /* hides sticky CTA + cookie bar */
lockScroll();
modal.scrollTop = 0; /* always show the card top (the X) */
sset(“raModalSeen”, “1”);
/* Do NOT autofocus on touch devices: the on-screen keyboard shrinks the
viewport and used to push the close button out of reach. */
if (!isTouch) setTimeout(function(){ var f = $(“#ra_first_name”); if (f) f.focus(); }, 90);
}
function closeModal(){
if (!modal || !modal.classList.contains(“open”)) return;
modal.classList.remove(“open”); modal.setAttribute(“aria-hidden”, “true”);
root.classList.remove(“ra-modal-open”);
unlockScroll();
sset(“raModalDismissed”, “1”);
}
$$(“[data-ra-open]”).forEach(function(btn){
btn.addEventListener(“click”, function(){ openModal(btn.getAttribute(“data-ra-open”)); });
});
var xBtn = $(“#raClose”), keep = $(“#raKeep”), backdrop = $(“#raBackdrop”);
if (xBtn) xBtn.addEventListener(“click”, closeModal);
if (keep) keep.addEventListener(“click”, closeModal);
if (backdrop) backdrop.addEventListener(“click”, closeModal);
/* tapping any empty space around the card also closes (mobile-friendly) */
if (modal) modal.addEventListener(“click”, function(e){ if (e.target === modal) closeModal(); });
document.addEventListener(“keydown”, function(e){ if (e.key === “Escape” ? modal.classList.contains(“open”) : false) closeModal(); });
/* Invitation popup – deliberately unhurried (see RA_CONFIG above).
Opens at whichever comes first: the reading timer, or the scroll-depth
threshold that shows the visitor is actually engaged. Never re-opens once
it has been seen, dismissed, or the seat has been booked this session. */
var invited = false;
function inviteOnce(source){
if (invited) return;
if (sget(“raModalSeen”) || sget(“raModalDismissed”) || sget(“raLeadDone”)) return;
invited = true;
openModal(source);
}
setTimeout(function(){ inviteOnce(“timed-popup”); }, RA_CONFIG.popupDelayMs);
window.addEventListener(“scroll”, function(){
if (invited) return;
var h = document.documentElement;
var max = h.scrollHeight – h.clientHeight;
if (max > 0 ? (h.scrollTop / max) * 100 >= RA_CONFIG.popupScrollPercent : false) {
inviteOnce(“scroll-depth”);
}
}, { passive: true });
/* exit intent – desktop, once per session */
document.addEventListener(“mouseout”, function(e){
if (isTouch) return; /* phones/tablets fire stray mouseout events */
if (e.clientY > 0) return;
if (e.relatedTarget) return;
if (sget(“raExitShown”)) return;
if (sget(“raLeadDone”)) return;
sset(“raExitShown”, “1”);
if (!modal.classList.contains(“open”)) openModal(“exit-intent”);
});
/* ———- submit via hidden iframe (Apps Script compatible) ———- */
var submitted = false;
form.addEventListener(“submit”, function(e){
if (RA_CONFIG.webAppUrl.indexOf(“PASTE_YOUR”) !== -1) {
e.preventDefault();
status.className = “ra-form-status err”;
status.textContent = “Setup needed: paste your Google Apps Script web-app URL into RA_CONFIG at the top of the page script.”;
return;
}
var fn = $(“#ra_first_name”).value.trim(), ln = $(“#ra_last_name”).value.trim(),
em = $(“#ra_email”).value.trim(), ph = $(“#ra_phone”).value.trim(), ok = $(“#ra_consent”).checked;
if (!fn || !ln || !em || !ph || !ok) {
e.preventDefault();
status.className = “ra-form-status err”;
status.textContent = “Please fill in your first name, last name, email, phone number, and tick the consent box.”;
return;
}
if (ph.replace(/\D/g, “”).length < 10) {
e.preventDefault();
status.className = "ra-form-status err";
status.textContent = "Please enter a valid phone number (at least 10 digits).";
return;
}
form.action = RA_CONFIG.webAppUrl;
submitted = true;
status.className = "ra-form-status ok";
status.textContent = "Saving your seat…";
var z = window.open(RA_CONFIG.zoomUrl, "_blank", "noopener");
setTimeout(function(){
showSuccess();
if (!z) { /* popup blocked – success card offers the Zoom button */ }
}, 600);
});
function showSuccess(){
var wrap = $("#raFormWrap"), sc = $("#raSuccess");
if (wrap) wrap.style.display = "none";
if (sc) sc.style.display = "block";
sset("raLeadDone", "1");
}
window.addEventListener("message", function(ev){
var d = ev ? ev.data : null;
if (!d || d.type !== "RYAN_LEAD_CAPTURE") return;
if (d.ok) {
showSuccess();
} else if (submitted) {
var wrap = $("#raFormWrap"), sc = $("#raSuccess");
if (sc) sc.style.display = "none";
if (wrap) wrap.style.display = "block";
status.className = "ra-form-status err";
status.textContent = d.message || "Something went wrong – please try again or email advisorryananderson@gmail.com.";
}
});
/* ———- read-more toggles ———- */
$$(".ra-rm-btn").forEach(function(btn){
btn.addEventListener("click", function(){
var box = btn.closest(".ra-rm");
if (!box) return;
var open = box.classList.toggle("open");
btn.textContent = open ? (btn.getAttribute("data-less") || "Show less") : (btn.getAttribute("data-more") || "Read more");
});
});
/* ———- cookie notice ———- */
var cn = $("#raCookie");
if (cn ? !lget("ra_cookie_ok") : false) {
setTimeout(function(){ cn.style.display = "block"; }, 1600);
var okBtn = $("#raCookieOk");
if (okBtn) okBtn.addEventListener("click", function(){ cn.style.display = "none"; lset("ra_cookie_ok", "1"); });
}
})();