Strategyneer
How It Works — Strategyneer · Four steps, one system tailwind.config = { theme: { extend: { colors: { ink: '#0A0A0A', paper: '#F6F6F3', accent: '#38BDF8', teal: '#2DD4BF' }, fontFamily: { display: ['Fraunces', 'ui-serif', 'Georgia', 'serif'], sans: ['Inter', 'ui-sans-serif', 'system-ui', 'sans-serif'], mono: ['"JetBrains Mono"', 'ui-monospace', 'SFMono-Regular', 'monospace'] }, maxWidth: { shell: '1400px' } } } } :root{ --accent:#38BDF8; --ink:#0A0A0A; --paper:#F6F6F3; --teal:#2DD4BF; --ease-slow: cubic-bezier(.16, 1, .3, 1); --ease-line: cubic-bezier(.2, .7, .25, 1); } html{ scroll-behavior:smooth; } body{ background:var(--paper); color:var(--ink); -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility; overflow-x:hidden; } .font-display, h1, h2, h3, h4{ font-family: 'Fraunces', ui-serif, Georgia, serif; font-optical-sizing: auto; font-variation-settings: 'SOFT' 0, 'WONK' 0; letter-spacing: -0.022em; } .mono-label{ font-family:'JetBrains Mono', ui-monospace, monospace; font-feature-settings:"zero" 1; } html.lenis, html.lenis body{ height:auto; } .lenis.lenis-smooth{ scroll-behavior:auto !important; } .lenis.lenis-stopped{ overflow:hidden; } /* MOBILE HEADER */ .mobile-header{ position:fixed; top:0; left:0; right:0; z-index:60; background:rgba(246,246,243,.92); backdrop-filter:blur(18px) saturate(150%); -webkit-backdrop-filter:blur(18px) saturate(150%); border-bottom:1px solid rgba(10,10,10,.06); } @media (min-width:1024px){ .mobile-header{ display:none; } } #mobileMenu{ max-height:0; overflow:hidden; transition:max-height .5s var(--ease-slow); } #mobileMenu.is-open{ max-height:640px; } .progress-bar{ position:fixed; top:0; left:0; right:0; height:2px; z-index:100; background:transparent; pointer-events:none; } .progress-bar span{ display:block; height:100%; width:0%; background:var(--accent); transition:width .15s linear; } /* REVEALS */ .reveal{ opacity:0; transform:translateY(20px); transition:opacity .8s var(--ease-slow), transform .9s var(--ease-slow); transition-delay:var(--d, 0s); } .reveal.in{ opacity:1; transform:none; } .line-mask{ display:block; overflow:hidden; padding-bottom:.12em; margin-bottom:-.12em; } .line-inner{ display:block; transform:translateY(115%); transform-origin:0% 100%; opacity:0; transition:transform .8s var(--ease-line), opacity .65s ease; transition-delay:calc(var(--i, 0) * 0.08s); } .is-in .line-inner{ transform:translateY(0); opacity:1; } .accent-serif{ font-family:'Fraunces', ui-serif, Georgia, serif; font-style:italic; font-weight:500; font-variation-settings:'SOFT' 40, 'WONK' 0, 'opsz' 144; } .kicker{ font-family:'JetBrains Mono', ui-monospace, monospace; font-size:.72rem; letter-spacing:.24em; text-transform:uppercase; font-weight:500; color:rgba(10,10,10,.42); } /* CHAPTER RAIL */ .chapter{ padding-top:clamp(2.5rem, 6vw, 5rem); } .chapter-inner{ display:flex; align-items:center; gap:1.25rem; opacity:0; transform:translateY(12px); transition:opacity .9s ease, transform 1s var(--ease-slow); } .chapter.in .chapter-inner{ opacity:1; transform:none; } .chapter-idx{ font-family:'Fraunces', ui-serif, Georgia, serif; font-size:1rem; font-weight:600; letter-spacing:-.04em; color:rgba(10,10,10,.35); flex:none; } .chapter-rail{ flex:1; height:1px; background:rgba(10,10,10,.08); position:relative; overflow:hidden; } .chapter-rail i{ position:absolute; inset:0; background:var(--ink); transform:scaleX(0); transform-origin:left center; transition:transform 1.3s var(--ease-slow) .12s; } .chapter.in .chapter-rail i{ transform:scaleX(1); } .chapter-name{ font-family:'JetBrains Mono', monospace; font-size:.7rem; font-weight:500; letter-spacing:.28em; text-transform:uppercase; color:rgba(10,10,10,.32); flex:none; } .chapter--dark .chapter-idx, .chapter--dark .chapter-name{ color:rgba(255,255,255,.4); } .chapter--dark .chapter-rail{ background:rgba(255,255,255,.12); } .chapter--dark .chapter-rail i{ background:#fff; } /* BUTTONS — balanced */ .btn{ display:inline-flex; align-items:center; justify-content:center; gap:0.6rem; padding:0.85rem 1.75rem; border-radius:9999px; font-size:0.9375rem; font-weight:500; line-height:1.2; transition:transform .5s var(--ease-slow), background-color .5s, border-color .5s, color .5s; white-space:nowrap; } .btn--primary{ background:var(--ink); color:#fff; } .btn--primary:hover{ transform:scale(1.02); } .btn--ghost{ background:transparent; border:1px solid rgba(10,10,10,.18); color:var(--ink); } .btn--ghost:hover{ border-color:rgba(10,10,10,.4); background:rgba(255,255,255,.6); } .btn--accent{ background:var(--accent); color:var(--ink); font-weight:600; } .btn--accent:hover{ transform:scale(1.02); } .btn--dark-ghost{ background:rgba(255,255,255,.04); border:1px solid rgba(255,255,255,.15); color:#fff; } .btn--dark-ghost:hover{ border-color:rgba(255,255,255,.35); background:rgba(255,255,255,.08); } .btn-arrow{ display:grid; place-items:center; width:1.75rem; height:1.75rem; border-radius:9999px; flex:none; } /* STRATEGIC CARD */ .card{ position:relative; background:#fff; border:1px solid rgba(10,10,10,.07); border-radius:1.5rem; padding:2rem 1.75rem; transition:transform .7s var(--ease-slow), box-shadow .7s var(--ease-slow), border-color .7s var(--ease-slow); } @media (min-width:640px){ .card{ padding:2.5rem 2.25rem; } } .card:hover{ transform:translateY(-4px); box-shadow:0 30px 60px -45px rgba(10,10,10,.3); border-color:rgba(10,10,10,.12); } /* STEP CARD (numbered) */ .step-card{ position:relative; background:#fff; border:1px solid rgba(10,10,10,.07); border-radius:1.5rem; padding:2.25rem 2rem; display:flex; flex-direction:column; transition:transform .7s var(--ease-slow), box-shadow .7s var(--ease-slow), border-color .7s var(--ease-slow); } @media (min-width:640px){ .step-card{ padding:2.75rem 2.5rem; } } .step-card:hover{ transform:translateY(-4px); box-shadow:0 30px 60px -45px rgba(10,10,10,.3); border-color:rgba(10,10,10,.12); } .step-card--featured{ background:var(--ink); border-color:var(--ink); color:#fff; } .step-card--featured .step-card-num{ color:rgba(255,255,255,.4); } .step-card--featured .step-card-title{ color:#fff; } .step-card--featured .step-card-body{ color:rgba(255,255,255,.6); } .step-card-num{ font-family:'Fraunces', ui-serif, Georgia, serif; font-weight:600; font-size:clamp(2rem, 3.5vw, 2.75rem); line-height:1; letter-spacing:-.06em; color:rgba(10,10,10,.16); font-variation-settings:'SOFT' 0, 'WONK' 0, 'opsz' 96; } .step-card-meta{ display:inline-flex; align-items:center; gap:.5rem; font-size:.75rem; font-weight:500; color:rgba(10,10,10,.5); margin-top:1.5rem; } .step-card--featured .step-card-meta{ color:rgba(255,255,255,.5); } .step-card-meta-dot{ width:5px; height:5px; border-radius:9999px; background:var(--accent); flex:none; } .step-card-title{ margin-top:1.5rem; font-family:'Fraunces', ui-serif, Georgia, serif; font-size:clamp(1.5rem, 2.4vw, 1.85rem); font-weight:600; line-height:1.15; letter-spacing:-.024em; color:var(--ink); } .step-card-body{ margin-top:1rem; font-size:1rem; line-height:1.7; color:rgba(10,10,10,.55); flex:1; } .step-card-foot{ margin-top:2rem; padding-top:1.5rem; border-top:1px solid rgba(10,10,10,.08); display:flex; align-items:center; justify-content:space-between; gap:1rem; } .step-card--featured .step-card-foot{ border-top-color:rgba(255,255,255,.1); } .card-link{ display:inline-flex; align-items:center; gap:1.5rem; font-size:.85rem; font-weight:500; color:var(--ink); transition:color .5s; } .card-link:hover{ color:var(--accent); } .step-card--featured .card-link{ color:#fff; } .step-card--featured .card-link:hover{ color:var(--accent); } .card-link svg{ transition:transform .5s var(--ease-slow); } .card-link:hover svg{ transform:translateX(3px); } /* PHOTO */ .photo-frame{ position:relative; overflow:hidden; border-radius:1.5rem; background:#0A0A0A; } .photo-frame img{ width:100%; height:100%; object-fit:cover; transition:transform 1.8s var(--ease-slow); } .photo-frame:hover img{ transform:scale(1.03); } .photo-frame::after{ content:''; position:absolute; inset:0; background:linear-gradient(180deg, transparent 55%, rgba(10,10,10,.78)); pointer-events:none; } .photo-caption{ position:absolute; left:1.5rem; right:1.5rem; bottom:1.5rem; z-index:2; color:#fff; } .photo-caption-tag{ display:inline-block; font-size:.7rem; font-weight:600; letter-spacing:.22em; text-transform:uppercase; color:rgba(255,255,255,.65); } .photo-caption-title{ margin-top:.6rem; font-family:'Fraunces', ui-serif, Georgia, serif; font-size:1.2rem; font-weight:500; letter-spacing:-.02em; line-height:1.3; } /* LEVER LIST */ .lever{ display:flex; align-items:center; gap:1rem; padding:1.5rem 0; border-bottom:1px solid rgba(10,10,10,.08); transition:padding-left .5s var(--ease-slow); } .lever:last-child{ border-bottom:none; } .lever:hover{ padding-left:.5rem; } .lever-num{ font-family:'Fraunces', ui-serif, Georgia, serif; font-weight:500; font-size:1.15rem; letter-spacing:-.02em; color:rgba(10,10,10,.3); flex:none; min-width:1.75rem; transition:color .5s; } .lever:hover .lever-num{ color:var(--ink); } .lever-body{ flex:1; min-width:0; } .lever-title{ font-family:'Fraunces', ui-serif, Georgia, serif; font-size:1.1rem; font-weight:600; letter-spacing:-.018em; color:var(--ink); } .lever-tag{ font-size:.78rem; color:rgba(10,10,10,.45); margin-top:.2rem; } /* PHASE ROW */ .phase-row{ display:grid; gap:1.25rem; padding:2rem 0; border-bottom:1px solid rgba(10,10,10,.08); align-items:baseline; } .phase-row:last-child{ border-bottom:none; } @media (min-width:900px){ .phase-row{ grid-template-columns:200px minmax(0,1fr); gap:3rem; } } /* CADENCE GRID */ .cadence{ padding:2rem 0; border-top:1px solid rgba(10,10,10,.08); display:grid; gap:1rem; align-items:baseline; } @media (min-width:768px){ .cadence{ grid-template-columns:180px minmax(0,1fr); gap:2.5rem; } } /* LINK STYLES */ .link-inline{ color:var(--ink); text-decoration:none; border-bottom:1px solid rgba(10,10,10,.25); padding-bottom:1px; transition:border-color .5s, color .5s; font-weight:500; } .link-inline:hover{ border-bottom-color:var(--accent); } .link-inline--dark{ color:rgba(255,255,255,.9); border-bottom-color:rgba(255,255,255,.3); } .link-inline--dark:hover{ border-bottom-color:var(--accent); color:#fff; } /* TIMELINE */ .tl-rail{ position:relative; padding-left:2rem; } @media (min-width:640px){ .tl-rail{ padding-left:2.5rem; } } .tl-rail::before{ content:''; position:absolute; left:.5rem; top:1rem; bottom:1rem; width:1.5px; background:rgba(10,10,10,.09); } @media (min-width:640px){ .tl-rail::before{ left:.65rem; } } .tl-progress{ position:absolute; left:.5rem; top:1rem; width:1.5px; height:0; background:var(--accent); transition:height .3s linear; } @media (min-width:640px){ .tl-progress{ left:.65rem; } } .tl-item{ position:relative; padding:1.75rem 0; } .tl-item::before{ content:''; position:absolute; left:-1.5rem; top:2.25rem; width:12px; height:12px; border-radius:9999px; background:#fff; border:2px solid rgba(10,10,10,.2); transition:all .5s var(--ease-slow); } @media (min-width:640px){ .tl-item::before{ left:-2.15rem; } } .tl-item.is-reached::before{ background:var(--accent); border-color:var(--ink); } /* FAQ */ details.faq{ border-bottom:1px solid rgba(10,10,10,.09); transition:background-color .5s ease; } details.faq[open]{ background:rgba(10,10,10,.015); } details.faq summary{ list-style:none; cursor:pointer; display:flex; align-items:flex-start; gap:1rem; padding:1.5rem .25rem; font-family:'Fraunces', serif; font-size:1.1rem; font-weight:500; letter-spacing:-.015em; transition:color .5s ease; } details.faq summary::-webkit-details-marker{ display:none; } details.faq summary:hover{ color:var(--ink); } details.faq .faq-toggle{ flex:none; margin-left:auto; display:grid; place-items:center; width:2rem; height:2rem; border-radius:9999px; border:1px solid rgba(10,10,10,.12); transition:transform .5s var(--ease-slow), background-color .5s, border-color .5s, color .5s; } details.faq[open] .faq-toggle{ transform:rotate(45deg); background:var(--ink); color:var(--accent); border-color:var(--ink); } details.faq .faq-body{ padding:0 3rem 1.75rem 0; font-size:1rem; line-height:1.8; color:rgba(10,10,10,.6); max-width:56rem; animation:faqIn .6s var(--ease-slow) both; } @keyframes faqIn{ from{ opacity:0; transform:translateY(6px); } to{ opacity:1; transform:none; } } @media (max-width:640px){ details.faq .faq-body{ padding:0 0 1.5rem 0; font-size:.95rem; } details.faq summary{ font-size:1rem; } } /* FOOTER LINK */ .footer-link{ color:rgba(10,10,10,.55); font-size:.9rem; transition:color .4s; display:inline-block; padding:.3rem 0; } .footer-link:hover{ color:var(--ink); } .footer-link--dark{ color:rgba(255,255,255,.55); } .footer-link--dark:hover{ color:#fff; } @media (prefers-reduced-motion: reduce){ *{ animation-duration:.001ms !important; transition-duration:.001ms !important; scroll-behavior:auto !important; } .reveal{ opacity:1; transform:none; } .line-inner{ transform:none !important; opacity:1 !important; } .chapter-inner{ opacity:1; transform:none; } .chapter-rail i{ transform:scaleX(1); } }
How it works Four steps

Four steps. One system.

No guesswork. No surprises. We audit your data, define the outcome with you, fix the leaks, and measure the recovery — in a documented path from first contact to measurable results.

Free audit

You send data. We find the leaks.

Paid pilot

One lever. 30 days. Refundable.

Full system

All layers. All connected.

Ongoing growth

We manage. You grow.

At a glance

Four steps. One path.

Every clinic starts at step one and moves through all four. No step is skippable. No step is improvised.

01 5–7 days · Free

Free audit

You send data. We audit everything. You receive a complete report — every leak quantified, prioritised, with solutions.

02 30 days · $2,500

Paid pilot

One lever. Refunded if no outcome. Credited against your first month if we deliver.

03 4–12 weeks

Full system

All nine layers. All connected. All measured. Adapted to your specific situation.

Step 01 · Free audit

You send data. We find the leaks.

Nothing live. Nothing invasive. Just exports and read-only access. We sign an NDA on day one. If our audit does not find 3+ actionable findings, you do not pay.

Time

5–7 days

Cost

Free

Commitment

None

Analytics dashboard during a Strategyneer audit
Step 01

Every gap. Every leak. Quantified.

Step 02 · Paid pilot

One lever. 30 days. Refunded if no results.

You choose one lever from the audit report. We define the outcome together before we start — in writing. If we do not deliver, we refund every dollar. If we do, the $2,500 is credited against your first month.

Pick your lever

  • 01

    Missed call recovery

    Highest impact

  • 02

    Hygiene recall reactivation

    Zero ad spend

  • 03

    No-show reduction

    Fills empty chairs

  • 04

    Unaccepted treatment recovery

    From existing charts

  • 05

    Denial recovery

    69% of appeals pay

30-day pilot timeline

Day 1

Outcome agreed

Signed

Day 15

Mid review

Adjust

Day 30

Decision

Credit or refund

If outcome delivered

$2,500 credited

against your first month

If not delivered

$2,500 refunded

every dollar, no questions

Full terms on the fail-safes and refund policy pages.

Step 03 · Full system

All layers. All measured.

We deploy the complete Patient Lifecycle System in four phases across 4–12 weeks. You approve the plan. We build it. You check progress on your phone.

A modern dental practice with the full patient lifecycle system deployed
Step 03

Phone, booking, recall, denials — all connected.

Phase 01 · Weeks 1–4

Foundations

AI receptionist, missed-call recovery, recall automation, no-show reduction, dashboard setup.

Phase 02 · Weeks 5–8

Revenue recovery

Denial workflow, unaccepted treatment reactivation, speed-to-lead, website & booking.

Phase 03 · Weeks 9–12

Growth channels

SEO & Google Business, paid ads, social media, email/SMS automation, reputation.

Phase 04 · Week 12+

Integration

Full integration, team training, continuous optimisation, monthly reporting.

Step 04 · Ongoing growth

We manage. We optimize. You grow.

What you do: nothing. You focus on clinical care. You review the monthly report. You join the quarterly review. That is it. After the initial term, it is month-to-month.

Daily

Monitor automations · Fix issues · Respond to alerts

Weekly

Review performance · Optimize campaigns · Adjust sequences

Monthly

Full performance report · KPI dashboard update · Strategy call (30 min)

Quarterly

Business review (60 min) · Benchmark comparison · Plan next quarter

Day 1 to 121+

The timeline.

Every clinic follows the same sequence. What changes is your data, your capacity, and your goals — not the process itself.

Day 1–7 · Free audit

You send data. We audit.

We audit every gap, every leak, every broken system. You receive a complete report within 5–7 days.

Day 8–14 · Review

We walk you through the report.

We define the pilot outcome together, in writing. You choose which lever to run first.

Day 15–45 · Paid pilot

We run one lever for 30 days.

We build, measure, report daily, and deliver the agreed outcome — or refund every dollar.

Day 46–60 · Pilot review

We review results together.

If the outcome is delivered, we credit the $2,500 and plan the full system. If not, we refund and part ways.

Day 61–120 · Deployment

We build. We integrate. We train.

Four phases across 4–12 weeks. Everything connected and measured.

Day 121+ · Ongoing

We manage. You grow.

Monthly reports. Quarterly reviews. Month-to-month after the initial term.

The guarantee

We own the outcome.

Every step is built around a single principle: you see it working before you pay for it.

Free growth audit

If our audit does not find 3+ actionable findings, you do not pay.

Paid pilot with refund

$2,500 for the 30-day pilot. If we do not deliver, we refund every dollar.

Delivery guarantee

We stay until the system runs without you.

Ownership guarantee

You own everything — the system, the data, the content.

Full terms on the fail-safes page.

Process questions

Straight answers. No pitch.

If yours is not here, ask directly — we will answer before you commit to anything.

How long does the audit take?
5–7 days from the time we receive your data.
What if I do not have all the data?
Send what you have. We will work with it. If something is missing, we will tell you.
What happens after the pilot?
If the outcome is delivered, the $2,500 is credited against your first month. If not, we refund and part ways.
Can I cancel the full system?
Yes. After the initial term it is month-to-month. You own everything. If you leave, you take it with you.
Do I need to be technical?
No. You do not touch the technology. We handle setup, training, and support.
How do I get started?
Book a demo. We will show you exactly what we find. No commitment. No payment.

The next step

Four steps. One system.
Start with the free audit.

We will identify the revenue sitting unclaimed in your practice and show you exactly how to capture it.

Free audit · Paid pilot with refund · No setup or software fees

(function () { 'use strict'; var REDUCED = window.matchMedia('(prefers-reduced-motion: reduce)').matches; var clamp = function (v, a, b) { return v b ? b : v); }; /* MOBILE MENU */ var menuBtn = document.getElementById('menuBtn'); var mobileMenu = document.getElementById('mobileMenu'); if (menuBtn && mobileMenu) { var bars = menuBtn.querySelectorAll('[data-bar]'); var open = false; menuBtn.addEventListener('click', function () { open = !open; mobileMenu.classList.toggle('is-open', open); mobileMenu.setAttribute('aria-hidden', String(!open)); menuBtn.setAttribute('aria-expanded', String(open)); bars[0].style.transform = open ? 'translateY(5.5px) rotate(45deg)' : ''; bars[1].style.opacity = open ? '0' : '1'; bars[2].style.transform = open ? 'translateY(-5.5px) rotate(-45deg)' : ''; }); mobileMenu.querySelectorAll('a').forEach(function (a) { a.addEventListener('click', function () { if (open) menuBtn.click(); }); }); } /* LENIS */ if (typeof Lenis !== 'undefined' && !REDUCED) { try { var lenis = new Lenis({ duration: 1.25, easing: function (t) { return Math.min(1, 1.001 - Math.pow(2, -10 * t)); }, smoothWheel: true, wheelMultiplier: 0.9, touchMultiplier: 1.5, lerp: 0.09 }); function lenisRaf(t){ lenis.raf(t); window.requestAnimationFrame(lenisRaf); } window.requestAnimationFrame(lenisRaf); document.querySelectorAll('a[href^="#"]').forEach(function (a) { a.addEventListener('click', function (e) { var id = a.getAttribute('href'); if (!id || id === '#') return; var target = document.querySelector(id); if (!target) return; e.preventDefault(); lenis.scrollTo(target, { offset: -24, duration: 1.25 }); }); }); } catch (err) {} } /* LINE REVEALS */ var lineGroups = Array.prototype.slice.call(document.querySelectorAll('[data-lines]')); function revealLines(el){ el.classList.add('is-in'); } if ('IntersectionObserver' in window && !REDUCED) { var lineIO = new IntersectionObserver(function (entries) { entries.forEach(function (e) { if (e.isIntersecting) { revealLines(e.target); lineIO.unobserve(e.target); } }); }, { threshold: 0.15, rootMargin: '0px 0px -6% 0px' }); lineGroups.forEach(function (el) { lineIO.observe(el); }); } else { lineGroups.forEach(function (el) { revealLines(el); }); } var heroHeadline = document.getElementById('heroHeadline'); if (heroHeadline) { window.requestAnimationFrame(function () { setTimeout(function () { revealLines(heroHeadline); }, 60); }); } /* REVEALS */ var revealTargets = document.querySelectorAll('.reveal'); var chapterTargets = document.querySelectorAll('[data-chapter]'); if ('IntersectionObserver' in window && !REDUCED) { var io = new IntersectionObserver(function (entries) { entries.forEach(function (e) { if (e.isIntersecting) { e.target.classList.add('in'); io.unobserve(e.target); } }); }, { threshold: 0.1, rootMargin: '0px 0px -8% 0px' }); revealTargets.forEach(function (el) { io.observe(el); }); chapterTargets.forEach(function (el) { io.observe(el); }); } else { revealTargets.forEach(function (el) { el.classList.add('in'); }); chapterTargets.forEach(function (el) { el.classList.add('in'); }); } /* TIMELINE PROGRESS + REACHED DOTS */ var timelineEl = document.getElementById('mainTimeline'); var progressEl = document.getElementById('tlvProgress'); var tlItems = timelineEl ? timelineEl.querySelectorAll('.tl-item') : []; var progressFill = document.getElementById('progressFill'); var docHeight = 1; var winH = window.innerHeight; var ticking = false; function measure() { winH = window.innerHeight; docHeight = Math.max(1, document.documentElement.scrollHeight - winH); } function render() { ticking = false; var y = window.pageYOffset || document.documentElement.scrollTop; var vh = winH; if (progressFill) progressFill.style.width = clamp((y / docHeight) * 100, 0, 100) + '%'; if (timelineEl && progressEl) { var r = timelineEl.getBoundingClientRect(); var total = r.height; var visible = clamp(vh * 0.55 - r.top, 0, total); progressEl.style.height = (visible / total * 100) + '%'; tlItems.forEach(function (item) { var ir = item.getBoundingClientRect(); item.classList.toggle('is-reached', ir.top < vh * 0.55); }); } } function onScroll(){ if (!ticking) { ticking = true; window.requestAnimationFrame(render); } } measure(); render(); window.addEventListener('scroll', onScroll, { passive: true }); window.addEventListener('resize', function () { measure(); onScroll(); }, { passive: true }); window.addEventListener('load', function () { measure(); onScroll(); }); /* FAQ */ var faqs = document.querySelectorAll('details.faq'); faqs.forEach(function (d) { d.addEventListener('toggle', function () { if (d.open) { faqs.forEach(function (o) { if (o !== d && o.open) o.open = false; }); } }); }); })();
Strategyneer Footer