/* ============================================================ WHY US PAGE – Scroll reveal, Globe, Particles, Card Stack ============================================================ */ (function() { /* Bail if not on the Why Us page */ if (!document.querySelector('.why-us-page')) return; /* ---- SCROLL REVEAL (no Three.js needed) ---- */ function initReveal() { var els = document.querySelectorAll('.why-us-page .reveal'); if (!els.length) return; var observer = new IntersectionObserver(function(entries) { entries.forEach(function(entry) { if (entry.isIntersecting) entry.target.classList.add('visible'); }); }, { threshold: 0.15 }); els.forEach(function(el) { observer.observe(el); }); } /* ---- THREE.JS FEATURES (globe + particles only) ---- */ function initThreeFeatures() { if (typeof THREE === 'undefined') { console.warn('Three.js not loaded – globe and particles disabled.'); return; } initGlobe(); initParticles(); } /* ============================================================ INTERACTIVE 3D GLOBE ============================================================ */ function initGlobe() { var canvas = document.getElementById('globe-canvas'); var section = document.getElementById('why-us-hero'); if (!canvas || !section) return; try { var renderer = new THREE.WebGLRenderer({ canvas: canvas, alpha: true, antialias: true }); renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2)); var scene = new THREE.Scene(); var camera = new THREE.PerspectiveCamera(45, 1, 0.1, 1000); camera.position.z = 4.5; var globeGroup = new THREE.Group(); scene.add(globeGroup); var DOT_COUNT = 4000; var RADIUS = 1.6; var dotGeo = new THREE.BufferGeometry(); var dotPositions = []; var dotColors = []; var goldR = 196/255, goldG = 154/255, goldB = 60/255; var blueR = 77/255, blueG = 152/255, blueB = 255/255; for (var i = 0; i < DOT_COUNT; i++) { var phi = Math.acos(2 * Math.random() - 1); var theta = 2 * Math.PI * Math.random(); var x = RADIUS * Math.sin(phi) * Math.cos(theta); var y = RADIUS * Math.sin(phi) * Math.sin(theta); var z = RADIUS * Math.cos(phi); dotPositions.push(x, y, z); var t = Math.random(); if (t < 0.15) { dotColors.push(goldR, goldG, goldB); } else if (t < 0.25) { dotColors.push(blueR, blueG, blueB); } else { var w = 0.25 + Math.random() * 0.15; dotColors.push(w, w, w); } } dotGeo.setAttribute('position', new THREE.Float32BufferAttribute(dotPositions, 3)); dotGeo.setAttribute('color', new THREE.Float32BufferAttribute(dotColors, 3)); var dotMat = new THREE.PointsMaterial({ size: 0.018, vertexColors: true, transparent: true, opacity: 0.7, sizeAttenuation: true }); globeGroup.add(new THREE.Points(dotGeo, dotMat)); /* Latitude rings */ function createRing(lat, opacity) { var r = RADIUS * Math.cos(lat); var yy = RADIUS * Math.sin(lat); var pts = []; for (var i = 0; i <= 128; i++) { var a = (i / 128) * Math.PI * 2; pts.push(new THREE.Vector3(r * Math.cos(a), yy, r * Math.sin(a))); } var geo = new THREE.BufferGeometry().setFromPoints(pts); return new THREE.Line(geo, new THREE.LineBasicMaterial({ color: 0xC49A3C, transparent: true, opacity: opacity })); } [-0.6, -0.2, 0.2, 0.6].forEach(function(lat) { globeGroup.add(createRing(lat, 0.06)); }); /* Longitude arcs */ function createArc(lng, opacity) { var pts = []; for (var i = 0; i <= 128; i++) { var phi = (i / 128) * Math.PI; pts.push(new THREE.Vector3(RADIUS * Math.sin(phi) * Math.cos(lng), RADIUS * Math.cos(phi), RADIUS * Math.sin(phi) * Math.sin(lng))); } var geo = new THREE.BufferGeometry().setFromPoints(pts); return new THREE.Line(geo, new THREE.LineBasicMaterial({ color: 0xC49A3C, transparent: true, opacity: opacity })); } for (var i = 0; i < 6; i++) { globeGroup.add(createArc((i / 6) * Math.PI, 0.04)); } /* Connection arcs */ function createConnectionArc(p1, p2) { var mid = new THREE.Vector3().addVectors(p1, p2).multiplyScalar(0.5); mid.normalize().multiplyScalar(RADIUS * 1.35); var pts = new THREE.QuadraticBezierCurve3(p1, mid, p2).getPoints(64); var geo = new THREE.BufferGeometry().setFromPoints(pts); return new THREE.Line(geo, new THREE.LineBasicMaterial({ color: 0xC49A3C, transparent: true, opacity: 0.12 })); } var connectionPoints = []; for (var i = 0; i < 12; i++) { var phi = Math.acos(2 * Math.random() - 1); var theta = 2 * Math.PI * Math.random(); connectionPoints.push(new THREE.Vector3(RADIUS * Math.sin(phi) * Math.cos(theta), RADIUS * Math.sin(phi) * Math.sin(theta), RADIUS * Math.cos(phi))); } for (var i = 0; i < connectionPoints.length - 1; i++) { globeGroup.add(createConnectionArc(connectionPoints[i], connectionPoints[i + 1])); } globeGroup.add(createConnectionArc(connectionPoints[connectionPoints.length - 1], connectionPoints[0])); /* Glow nodes */ var glowGeo = new THREE.BufferGeometry(); var glowPos = []; connectionPoints.forEach(function(p) { glowPos.push(p.x, p.y, p.z); }); glowGeo.setAttribute('position', new THREE.Float32BufferAttribute(glowPos, 3)); globeGroup.add(new THREE.Points(glowGeo, new THREE.PointsMaterial({ size: 0.06, color: 0xC49A3C, transparent: true, opacity: 0.6, sizeAttenuation: true }))); /* Outer ring */ var outerPts = []; for (var i = 0; i <= 256; i++) { var a = (i / 256) * Math.PI * 2; outerPts.push(new THREE.Vector3(RADIUS * 1.15 * Math.cos(a), 0, RADIUS * 1.15 * Math.sin(a))); } var outerRing = new THREE.Line(new THREE.BufferGeometry().setFromPoints(outerPts), new THREE.LineBasicMaterial({ color: 0x4D98FF, transparent: true, opacity: 0.06 })); outerRing.rotation.x = Math.PI * 0.5; globeGroup.add(outerRing); /* 6 Interactive Marker Points */ var markerSprites = []; var MARKER_POSITIONS = [ { lat: 0.7, lon: 0.3 }, { lat: -0.3, lon: 1.8 }, { lat: 0.4, lon: 3.2 }, { lat: -0.5, lon: 4.5 }, { lat: 0.1, lon: 5.4 }, { lat: -0.7, lon: 0.9 } ]; function createMarkerTexture(num) { var c = document.createElement('canvas'); c.width = 128; c.height = 128; var ctx = c.getContext('2d'); var grd = ctx.createRadialGradient(64, 64, 20, 64, 64, 64); grd.addColorStop(0, 'rgba(196,154,60,0.25)'); grd.addColorStop(1, 'rgba(196,154,60,0)'); ctx.fillStyle = grd; ctx.fillRect(0, 0, 128, 128); ctx.beginPath(); ctx.arc(64, 64, 28, 0, Math.PI * 2); ctx.fillStyle = 'rgba(5,13,31,0.9)'; ctx.fill(); ctx.beginPath(); ctx.arc(64, 64, 28, 0, Math.PI * 2); ctx.strokeStyle = '#C49A3C'; ctx.lineWidth = 2.5; ctx.stroke(); ctx.fillStyle = '#C49A3C'; ctx.font = 'bold 26px Arial, sans-serif'; ctx.textAlign = 'center'; ctx.textBaseline = 'middle'; ctx.fillText(String(num), 64, 66); var tex = new THREE.CanvasTexture(c); tex.needsUpdate = true; return tex; } function latLonToVec3(lat, lon, r) { var phi = (Math.PI / 2) - lat; return new THREE.Vector3(r * Math.sin(phi) * Math.cos(lon), r * Math.cos(phi), r * Math.sin(phi) * Math.sin(lon)); } MARKER_POSITIONS.forEach(function(pos, i) { var mat = new THREE.SpriteMaterial({ map: createMarkerTexture(i + 1), transparent: true, depthTest: false, sizeAttenuation: true }); var sprite = new THREE.Sprite(mat); sprite.position.copy(latLonToVec3(pos.lat, pos.lon, RADIUS * 1.05)); sprite.scale.set(0.32, 0.32, 1); sprite.userData = { cardIndex: i, baseScale: 0.32 }; globeGroup.add(sprite); markerSprites.push(sprite); }); var raycaster = new THREE.Raycaster(); var mouse = new THREE.Vector2(); raycaster.layers.enableAll(); /* Tilt */ globeGroup.rotation.x = 0.4; globeGroup.rotation.z = 0.1; /* Interaction state (desktop only) */ var isDragging = false; var prevMouse = { x: 0, y: 0 }; var pointerDownPos = { x: 0, y: 0 }; var velocity = { x: 0.002, y: 0 }; var targetRotY = 0; var targetRotX = 0.4; /* Windows touchscreens (Surface etc.) expose ontouchstart AND maxTouchPoints but fire Pointer Events — always use the desktop pointer path on Windows. */ var isTouchDevice = !/Windows/.test(navigator.userAgent) && (('ontouchstart' in window) || navigator.maxTouchPoints > 0); if (isTouchDevice) { canvas.style.pointerEvents = 'none'; section.style.touchAction = 'pan-y'; /* touches land on section – tell iOS to scroll */ var tapStartX = 0, tapStartY = 0; section.addEventListener('touchstart', function(e) { tapStartX = e.touches[0].clientX; tapStartY = e.touches[0].clientY; }, { passive: true }); section.addEventListener('touchend', function(e) { var t = e.changedTouches[0]; var dx = t.clientX - tapStartX; var dy = t.clientY - tapStartY; if (Math.sqrt(dx * dx + dy * dy) < 12) { var rect = canvas.getBoundingClientRect(); if (!rect.width || !rect.height) return; mouse.x = ((t.clientX - rect.left) / rect.width) * 2 - 1; mouse.y = -((t.clientY - rect.top) / rect.height) * 2 + 1; raycaster.setFromCamera(mouse, camera); var hits = raycaster.intersectObjects(markerSprites); if (hits.length > 0) { var idx = hits[0].object.userData.cardIndex; hits[0].object.scale.set(0.5, 0.5, 1); if (window.whyUsGoToCard) window.whyUsGoToCard(idx); var cardSection = document.getElementById('why-us-card-section'); if (cardSection) { window.scrollTo(0, cardSection.getBoundingClientRect().top + window.pageYOffset); } } } }, { passive: true }); } else { canvas.style.touchAction = 'none'; canvas.addEventListener('pointerdown', function(e) { isDragging = true; prevMouse = { x: e.clientX, y: e.clientY }; pointerDownPos = { x: e.clientX, y: e.clientY }; velocity = { x: 0, y: 0 }; }); canvas.addEventListener('pointercancel', function() { isDragging = false; }); window.addEventListener('pointermove', function(e) { var rect = canvas.getBoundingClientRect(); if (rect.width === 0 || rect.height === 0) return; mouse.x = ((e.clientX - rect.left) / rect.width) * 2 - 1; mouse.y = -((e.clientY - rect.top) / rect.height) * 2 + 1; raycaster.setFromCamera(mouse, camera); var hits = raycaster.intersectObjects(markerSprites); canvas.style.cursor = hits.length > 0 ? 'pointer' : (isDragging ? 'grabbing' : 'grab'); markerSprites.forEach(function(s) { var base = s.userData.baseScale; var isHovered = hits.length > 0 && hits[0].object === s; var target = isHovered ? base * 1.4 : base; s.scale.x += (target - s.scale.x) * 0.15; s.scale.y += (target - s.scale.y) * 0.15; }); if (!isDragging) return; var dx = e.clientX - prevMouse.x; var dy = e.clientY - prevMouse.y; velocity.x = dx * 0.003; velocity.y = dy * 0.003; targetRotY += dx * 0.005; targetRotX += dy * 0.003; targetRotX = Math.max(-1.2, Math.min(1.2, targetRotX)); prevMouse = { x: e.clientX, y: e.clientY }; }); window.addEventListener('pointerup', function(e) { if (!isDragging) return; isDragging = false; var dx = e.clientX - pointerDownPos.x; var dy = e.clientY - pointerDownPos.y; if (Math.sqrt(dx * dx + dy * dy) < 6) { var rect = canvas.getBoundingClientRect(); if (rect.width === 0 || rect.height === 0) return; mouse.x = ((e.clientX - rect.left) / rect.width) * 2 - 1; mouse.y = -((e.clientY - rect.top) / rect.height) * 2 + 1; raycaster.setFromCamera(mouse, camera); var hits = raycaster.intersectObjects(markerSprites); if (hits.length > 0) { var idx = hits[0].object.userData.cardIndex; hits[0].object.scale.set(0.5, 0.5, 1); if (window.whyUsGoToCard) window.whyUsGoToCard(idx); var cardSection = document.getElementById('why-us-card-section'); if (cardSection) { window.scrollTo(0, cardSection.getBoundingClientRect().top + window.pageYOffset); } } } }); } /* Resize */ function resize() { var w = section.clientWidth; var h = section.clientHeight; if (w === 0 || h === 0) return; renderer.setSize(w, h); camera.aspect = w / h; camera.updateProjectionMatrix(); } resize(); window.addEventListener('resize', resize); /* Animate */ var autoRotate = 0; function animate() { requestAnimationFrame(animate); if (!isDragging) { autoRotate += 0.0015; velocity.x *= 0.96; velocity.y *= 0.96; } globeGroup.rotation.y = autoRotate + targetRotY + velocity.x; globeGroup.rotation.x += (targetRotX - globeGroup.rotation.x) * 0.05; outerRing.rotation.z += 0.001; markerSprites.forEach(function(s) { var base = s.userData.baseScale; s.scale.x += (base - s.scale.x) * 0.05; s.scale.y += (base - s.scale.y) * 0.05; }); renderer.render(scene, camera); } animate(); } catch(e) { console.warn('Globe init error:', e); } } /* ============================================================ FLOATING PARTICLE FIELD ============================================================ */ function initParticles() { var canvas = document.getElementById('process-canvas'); var section = document.getElementById('why-us-process'); if (!canvas || !section || typeof THREE === 'undefined') return; try { var renderer = new THREE.WebGLRenderer({ canvas: canvas, alpha: true, antialias: false }); renderer.setPixelRatio(Math.min(window.devicePixelRatio, 1.5)); var scene = new THREE.Scene(); var camera = new THREE.PerspectiveCamera(60, 1, 0.1, 100); camera.position.z = 5; var COUNT = 200; var geo = new THREE.BufferGeometry(); var pos = new Float32Array(COUNT * 3); var vel = new Float32Array(COUNT * 3); for (var i = 0; i < COUNT; i++) { pos[i*3] = (Math.random()-0.5)*14; pos[i*3+1] = (Math.random()-0.5)*8; pos[i*3+2] = (Math.random()-0.5)*6; vel[i*3] = (Math.random()-0.5)*0.002; vel[i*3+1] = (Math.random()-0.5)*0.001; vel[i*3+2] = 0; } geo.setAttribute('position', new THREE.Float32BufferAttribute(pos, 3)); scene.add(new THREE.Points(geo, new THREE.PointsMaterial({ size: 0.025, color: 0xC49A3C, transparent: true, opacity: 0.25, sizeAttenuation: true }))); var lineGeo = new THREE.BufferGeometry(); var maxLines = COUNT * 3; var linePos = new Float32Array(maxLines * 6); lineGeo.setAttribute('position', new THREE.Float32BufferAttribute(linePos, 3)); var lines = new THREE.LineSegments(lineGeo, new THREE.LineBasicMaterial({ color: 0xC49A3C, transparent: true, opacity: 0.04 })); scene.add(lines); function resize() { var w = section.clientWidth; var h = section.clientHeight; if (w === 0 || h === 0) return; renderer.setSize(w, h); camera.aspect = w / h; camera.updateProjectionMatrix(); } resize(); window.addEventListener('resize', resize); function animate() { requestAnimationFrame(animate); var positions = geo.attributes.position.array; for (var i = 0; i < COUNT; i++) { positions[i*3] += vel[i*3]; positions[i*3+1] += vel[i*3+1]; if (Math.abs(positions[i*3]) > 7) vel[i*3] *= -1; if (Math.abs(positions[i*3+1]) > 4) vel[i*3+1] *= -1; } geo.attributes.position.needsUpdate = true; var lineIdx = 0; var lp = lineGeo.attributes.position.array; var threshold = 2.0; for (var i = 0; i < COUNT && lineIdx < maxLines; i++) { for (var j = i+1; j < COUNT && lineIdx < maxLines; j++) { var dx = positions[i*3]-positions[j*3]; var dy = positions[i*3+1]-positions[j*3+1]; var dz = positions[i*3+2]-positions[j*3+2]; if (Math.sqrt(dx*dx+dy*dy+dz*dz) < threshold) { lp[lineIdx*6]=positions[i*3]; lp[lineIdx*6+1]=positions[i*3+1]; lp[lineIdx*6+2]=positions[i*3+2]; lp[lineIdx*6+3]=positions[j*3]; lp[lineIdx*6+4]=positions[j*3+1]; lp[lineIdx*6+5]=positions[j*3+2]; lineIdx++; } } } for (var i = lineIdx*6; i < lp.length; i++) lp[i] = 0; lineGeo.attributes.position.needsUpdate = true; lineGeo.setDrawRange(0, lineIdx * 2); renderer.render(scene, camera); } animate(); } catch(e) { console.warn('Particles init error:', e); } } /* ============================================================ INTERACTIVE CARD STACK ============================================================ */ function initCardStack() { var stack = document.getElementById('why-us-card-stack'); if (!stack) return; var cards = Array.prototype.slice.call(stack.querySelectorAll('.why-cards__card')); var counterEl = document.getElementById('why-us-card-counter-current'); var headingEl = document.querySelector('.why-cards__heading'); var descEl = document.querySelector('.why-cards__desc'); var eyebrowEl = document.querySelector('.why-cards__eyebrow'); if (headingEl) { headingEl.style.transition = 'opacity 0.35s ease, transform 0.35s ease'; } if (descEl) { descEl.style.transition = 'opacity 0.35s ease, transform 0.35s ease'; } if (eyebrowEl) { eyebrowEl.style.transition = 'opacity 0.35s ease, transform 0.35s ease'; } var totalCards = cards.length; var currentIndex = 0; var cardData = [ { eyebrow: 'A Global Understanding', heading: 'We Care About The Dental Community', desc: 'Our insurance firm has presented at dental schools, including University of Kentucky, University of Iowa, The Ohio State University, and University of Michigan, educating fourth-year dental students on managing insurance risk after graduation. This work reflects our ongoing commitment to the dental community by equipping future practitioners with the knowledge they need to protect and sustain their practices from day one.' }, { eyebrow: 'Experts', heading: 'We Are Experts in Dental Coverage', desc: 'Our company is a leading dental-focused insurance firm with unmatched experience. For years, we have studied how the insurance industry serves the dental profession, positioning us to understand the specific risks faced by your practice. Rest assured that our agents are CPCU- and AU-compliant, and that 100 percent of our team holds degrees in higher education, enabling us to deliver top-tier risk management.' }, { eyebrow: 'Examination', heading: 'Stronger Together', desc: 'Our company had the pleasure of collaborating with the North Carolina Academy of General Dentistry. At this event, we engaged with both practicing and retired dentists, gaining valuable insight into the evolving needs of the profession. Experiences like this enable us to continuously refine our firm and deliver the highest level of service to dental professionals.' }, { eyebrow: 'Education', heading: 'Knowledge That Protects', desc: 'We have written and published two books on insurance risks that provide essential knowledge for protecting your practice. Each book is reviewed and edited by experienced dental professionals. Additional titles are on the way!' }, { eyebrow: 'Compliance', heading: 'HIPAA & Cyber Liability', desc: 'Insurance by Dentists prides itself on its knowledge of advanced technology, including artificial intelligence. We invest significant time and resources to stay at the forefront of protecting against cyber risks, ensuring that sensitive patient and practice data is safeguarded in compliance with HIPAA regulations. By proactively addressing cybersecurity threats, we help dental practices meet federal requirements for privacy and data security while minimizing the risk of costly breaches.' }, { eyebrow: 'Advisory', heading: 'Guided by Dentists', desc: 'Our firm is advised by 15 dentists located across the United States. These insurance advisors bring a diverse range of dental experience and play a pivotal role in our insurance decisions. They are carefully selected based on their clinical expertise, professional reputation, and academic backgrounds, ensuring that our recommendations for your practice are guided by the very best in the field.' } ]; function fadeOut(el) { el.style.opacity = '0'; el.style.transform = 'translateY(-8px)'; } function fadeIn(el) { el.style.opacity = ''; el.style.transform = ''; } function updateText(cardIndex) { if (!headingEl || !descEl || !eyebrowEl) return; var data = cardData[cardIndex]; if (!data) return; fadeOut(headingEl); fadeOut(descEl); fadeOut(eyebrowEl); setTimeout(function() { headingEl.innerHTML = data.heading; descEl.textContent = data.desc; eyebrowEl.textContent = data.eyebrow; fadeIn(headingEl); fadeIn(descEl); fadeIn(eyebrowEl); }, 350); } function layoutStack() { cards.forEach(function(card, i) { var offset = i - currentIndex; if (offset < 0) { card.style.transform = 'translateX(-120%) rotate(-8deg) scale(0.9)'; card.style.opacity = '0'; card.style.pointerEvents = 'none'; card.style.zIndex = '0'; card.style.filter = 'none'; } else { var shift = offset * 14; var scale = 1 - offset * 0.035; var rotate = offset * 1.2; var brightness = 1 - offset * 0.12; card.style.transform = 'translateX('+shift+'px) translateY('+(offset*8)+'px) rotate('+rotate+'deg) scale('+scale+')'; card.style.opacity = offset > 4 ? '0' : '1'; card.style.zIndex = String(totalCards - offset); card.style.pointerEvents = offset === 0 ? 'auto' : 'none'; card.style.filter = offset === 0 ? 'none' : 'brightness('+brightness+')'; } }); } function dismissTop() { if (currentIndex >= totalCards) { currentIndex = 0; cards.forEach(function(c) { c.style.transition = 'none'; }); layoutStack(); requestAnimationFrame(function() { requestAnimationFrame(function() { cards.forEach(function(c) { c.style.transition = ''; }); }); }); if (counterEl) counterEl.textContent = '1'; return; } var topCard = cards[currentIndex]; topCard.style.transform = 'translateX(-120%) rotate(-8deg) scale(0.9)'; topCard.style.opacity = '0'; topCard.style.pointerEvents = 'none'; currentIndex++; if (currentIndex >= totalCards) { if (counterEl) counterEl.textContent = String(totalCards); setTimeout(function() { currentIndex = 0; cards.forEach(function(c) { c.style.transition = 'none'; }); layoutStack(); requestAnimationFrame(function() { requestAnimationFrame(function() { cards.forEach(function(c) { c.style.transition = ''; }); }); }); if (counterEl) counterEl.textContent = '1'; updateText(0); }, 350); } else { if (counterEl) counterEl.textContent = String(currentIndex + 1); layoutStack(); updateText(currentIndex); } } layoutStack(); window.whyUsGoToCard = function(targetIndex) { currentIndex = targetIndex; cards.forEach(function(c) { c.style.transition = 'none'; }); void stack.offsetHeight; layoutStack(); if (counterEl) counterEl.textContent = String(currentIndex + 1); updateText(currentIndex); requestAnimationFrame(function() { requestAnimationFrame(function() { cards.forEach(function(c) { c.style.transition = ''; }); }); }); }; var tapIcon = document.getElementById('why-us-tap-icon'); stack.addEventListener('touchstart', function() {}, { passive: true }); stack.addEventListener('click', function() { dismissTop(); }); if (tapIcon) { tapIcon.addEventListener('touchstart', function() {}, { passive: true }); tapIcon.addEventListener('click', function() { dismissTop(); }); } stack.setAttribute('tabindex', '0'); stack.addEventListener('keydown', function(e) { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); dismissTop(); } }); var textBlock = document.querySelector('.why-cards__text'); if (textBlock) { textBlock.style.cursor = 'pointer'; textBlock.addEventListener('click', function() { dismissTop(); }); } } /* ============================================================ CARD TEXT TRANSITIONS – polls counter, swaps text with fade ============================================================ */ function initCardTextWatcher() { var cardData = [ { eyebrow: 'A Global Understanding', heading: 'We Care About The Dental Community', desc: 'Our insurance firm has presented at dental schools, including University of Kentucky, University of Iowa, The Ohio State University, and University of Michigan, educating fourth-year dental students on managing insurance risk after graduation. This work reflects our ongoing commitment to the dental community by equipping future practitioners with the knowledge they need to protect and sustain their practices from day one.' }, { eyebrow: 'Experts', heading: 'We Are Experts in Dental Coverage', desc: 'Our company is a leading dental-focused insurance firm with unmatched experience. For years, we have studied how the insurance industry serves the dental profession, positioning us to understand the specific risks faced by your practice. Rest assured that our agents are CPCU- and AU-compliant, and that 100 percent of our team holds degrees in higher education, enabling us to deliver top-tier risk management.' }, { eyebrow: 'Examination', heading: 'Committed to Dentists', desc: 'Our company had the pleasure of collaborating with the North Carolina Academy of General Dentistry. At this event, we engaged with both practicing and retired dentists, gaining valuable insight into the evolving needs of the profession. Experiences like this enable us to continuously refine our firm and deliver the highest level of service to dental professionals.' }, { eyebrow: 'Education', heading: 'Knowledge That Protects', desc: 'We have written and published two books on insurance risks that provide essential knowledge for protecting your practice. Each book is reviewed and edited by experienced dental professionals. Additional titles are on the way!' }, { eyebrow: 'Compliance', heading: 'HIPAA & Cyber Liability', desc: 'Insurance by Dentists prides itself on its knowledge of advanced technology, including artificial intelligence. We invest significant time and resources to stay at the forefront of protecting against cyber risks, ensuring that sensitive patient and practice data is safeguarded in compliance with HIPAA regulations. By proactively addressing cybersecurity threats, we help dental practices meet federal requirements for privacy and data security while minimizing the risk of costly breaches.' }, { eyebrow: 'Advisory', heading: 'Guided by Dentists', desc: 'Our firm is advised by 15 dentists located across the United States. These insurance advisors bring a diverse range of dental experience and play a pivotal role in our insurance decisions. They are carefully selected based on their clinical expertise, professional reputation, and academic backgrounds, ensuring that our recommendations for your practice are guided by the very best in the field.' } ]; var lastNum = 1; var animating = false; setInterval(function() { var counterEl = document.getElementById('why-us-card-counter-current'); if (!counterEl) return; var num = parseInt(counterEl.textContent, 10); if (isNaN(num) || num === lastNum || animating) return; lastNum = num; var data = cardData[num - 1]; if (!data) return; animating = true; var h = document.querySelector('.why-cards__heading'); var d = document.querySelector('.why-cards__desc'); var e = document.querySelector('.why-cards__eyebrow'); if (!h || !d || !e) { animating = false; return; } h.style.transition = 'opacity 0.3s ease, transform 0.3s ease'; d.style.transition = 'opacity 0.3s ease, transform 0.3s ease'; e.style.transition = 'opacity 0.3s ease, transform 0.3s ease'; h.style.opacity = '0'; h.style.transform = 'translateY(-8px)'; d.style.opacity = '0'; d.style.transform = 'translateY(-8px)'; e.style.opacity = '0'; e.style.transform = 'translateY(-8px)'; setTimeout(function() { h.innerHTML = data.heading; d.textContent = data.desc; e.textContent = data.eyebrow; h.style.opacity = '1'; h.style.transform = 'translateY(0)'; d.style.opacity = '1'; d.style.transform = 'translateY(0)'; e.style.opacity = '1'; e.style.transform = 'translateY(0)'; animating = false; }, 300); }, 200); } /* ---- BOOT ---- */ function boot() { initReveal(); initCardStack(); initThreeFeatures(); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', boot); } else { boot(); } })(); https://insurancebydentists.com/post-sitemap.xml 2026-08-19T15:43:12+00:00 https://insurancebydentists.com/page-sitemap.xml 2026-09-05T14:35:53+00:00 https://insurancebydentists.com/solutions-sitemap.xml 2026-03-16T18:27:42+00:00 https://insurancebydentists.com/category-sitemap.xml 2026-08-19T14:21:26+00:00