Skip to content
.network-links,.network-grid,.network-card,.network-link,.net-card{display:none!important} Certify Therapy Dog | Understanding Therapy Dogs, Service Dogs & ESAs | TheraPetic /* ======================================== CSS VARIABLES & THEMES ======================================== */ :root { –primary: #0B7A75; –primary-dark: #065955; –primary-light: #E8F5F4; –primary-glow: rgba(11, 122, 117, 0.15); –accent-gold: #C5A54E; –accent-gold-light: #F5F0E1; –accent-coral: #E07A5F; –accent-navy: #1A365D; –font-display: ‘Fraunces’, Georgia, serif; –font-body: ‘DM Sans’, -apple-system, BlinkMacSystemFont, sans-serif; –space-xs: 0.25rem; –space-sm: 0.5rem; –space-md: 1rem; –space-lg: 1.5rem; –space-xl: 2rem; –space-2xl: 3rem; –space-3xl: 4rem; –space-4xl: 6rem; –radius-sm: 8px; –radius-md: 16px; –radius-lg: 24px; –radius-xl: 40px; –radius-full: 9999px; –shadow-sm: 0 2px 8px rgba(0,0,0,0.06); –shadow-md: 0 8px 24px rgba(0,0,0,0.08); –shadow-lg: 0 16px 48px rgba(0,0,0,0.12); –shadow-xl: 0 24px 64px rgba(0,0,0,0.16); –shadow-glow: 0 0 60px var(–primary-glow); –transition-fast: 0.2s cubic-bezier(0.4, 0, 0.2, 1); –transition-base: 0.3s cubic-bezier(0.4, 0, 0.2, 1); –transition-slow: 0.5s cubic-bezier(0.4, 0, 0.2, 1); –transition-bounce: 0.5s cubic-bezier(0.34, 1.56, 0.64, 1); } [data-theme=”light”] { –bg-primary: #FDFCFA; –bg-secondary: #F5F3EF; –bg-tertiary: #FFFFFF; –text-primary: #1A1A1A; –text-secondary: #4A4A4A; –text-muted: #6B6B6B; –border-color: #E5E3DE; –card-bg: #FFFFFF; –header-bg: rgba(253, 252, 250, 0.85); –gradient-hero: linear-gradient(135deg, #F5F3EF 0%, #E8F5F4 50%, #F5F0E1 100%); } [data-theme=”dark”] { –bg-primary: #0F1419; –bg-secondary: #1A1F26; –bg-tertiary: #242B33; –text-primary: #F5F5F5; –text-secondary: #B8C0CC; –text-muted: #8899A6; –border-color: #2F3842; –card-bg: #1A1F26; –header-bg: rgba(15, 20, 25, 0.9); –primary-light: rgba(11, 122, 117, 0.15); –accent-gold-light: rgba(197, 165, 78, 0.1); –gradient-hero: linear-gradient(135deg, #1A1F26 0%, #0F1419 50%, #1A1F26 100%); } /* ======================================== ANIMATIONS ======================================== */ @keyframes fadeInUp { from { opacity: 0; transform: translateY(40px); } to { opacity: 1; transform: translateY(0); } } @keyframes fadeInDown { from { opacity: 0; transform: translateY(-30px); } to { opacity: 1; transform: translateY(0); } } @keyframes fadeInLeft { from { opacity: 0; transform: translateX(-40px); } to { opacity: 1; transform: translateX(0); } } @keyframes fadeInRight { from { opacity: 0; transform: translateX(40px); } to { opacity: 1; transform: translateX(0); } } @keyframes scaleIn { from { opacity: 0; transform: scale(0.9); } to { opacity: 1; transform: scale(1); } } @keyframes float { 0%, 100% { transform: translateY(0px); } 50% { transform: translateY(-15px); } } @keyframes pulse { 0%, 100% { transform: scale(1); opacity: 1; } 50% { transform: scale(1.05); opacity: 0.8; } } @keyframes shimmer { 0% { background-position: -200% 0; } 100% { background-position: 200% 0; } } @keyframes gradientFlow { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } } @keyframes bounceIn { 0% { transform: scale(0); opacity: 0; } 50% { transform: scale(1.1); } 100% { transform: scale(1); opacity: 1; } } .animate-on-scroll { opacity: 0; transform: translateY(40px); transition: opacity 0.6s ease, transform 0.6s ease; } .animate-on-scroll.visible { opacity: 1; transform: translateY(0); } .animate-on-scroll.delay-1 { transition-delay: 0.1s; } .animate-on-scroll.delay-2 { transition-delay: 0.2s; } .animate-on-scroll.delay-3 { transition-delay: 0.3s; } .animate-on-scroll.delay-4 { transition-delay: 0.4s; } /* ======================================== BASE RESET & TYPOGRAPHY ======================================== */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html { scroll-behavior: smooth; } body { font-family: var(–font-body); font-size: 1rem; line-height: 1.65; color: var(–text-primary); background: var(–bg-primary); -webkit-font-smoothing: antialiased; overflow-x: hidden; } h1, h2, h3, h4 { font-family: var(–font-display); font-weight: 500; line-height: 1.2; color: var(–text-primary); } h1 { font-size: clamp(2.25rem, 6vw, 3.5rem); } h2 { font-size: clamp(1.75rem, 4vw, 2.5rem); } h3 { font-size: clamp(1.25rem, 3vw, 1.5rem); } p { color: var(–text-secondary); max-width: 65ch; } a { color: var(–primary); text-decoration: none; transition: var(–transition-fast); } a:hover { color: var(–primary-dark); } img { max-width: 100%; height: auto; display: block; } [data-lang=”en”] .lang-es { display: none !important; } [data-lang=”es”] .lang-en { display: none !important; } .container { width: 100%; max-width: 1200px; margin: 0 auto; padding: 0 var(–space-lg); } .section { padding: var(–space-4xl) 0; position: relative; } /* ======================================== HEADER ======================================== */ .header { position: fixed; top: 0; left: 0; right: 0; z-index: 1000; background: var(–header-bg); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border-bottom: 1px solid var(–border-color); padding: var(–space-md) 0; animation: fadeInDown 0.6s ease; } .header-inner { display: flex; align-items: center; justify-content: space-between; gap: var(–space-lg); } .logo { display: flex; align-items: center; gap: var(–space-sm); text-decoration: none; transition: var(–transition-base); } .logo:hover { transform: scale(1.02); } .logo img { width: 48px; height: 48px; object-fit: contain; } .logo-text { font-family: var(–font-display); font-size: 1.1rem; font-weight: 600; color: var(–text-primary); line-height: 1.2; } .logo-tagline { display: block; font-family: var(–font-body); font-size: 0.7rem; color: var(–text-muted); text-transform: uppercase; letter-spacing: 0.05em; } .nav-desktop { display: none; align-items: center; gap: var(–space-xl); } .nav-link { font-size: 0.9rem; font-weight: 500; color: var(–text-secondary); padding: var(–space-sm) 0; position: relative; transition: var(–transition-base); } .nav-link::after { content: ”; position: absolute; bottom: 0; left: 0; width: 0; height: 2px; background: linear-gradient(90deg, var(–primary), var(–accent-gold)); transition: var(–transition-base); } .nav-link:hover { color: var(–primary); } .nav-link:hover::after { width: 100%; } .header-actions { display: flex; align-items: center; gap: var(–space-sm); } .toggle-btn { display: flex; align-items: center; justify-content: center; width: 42px; height: 42px; border: 1px solid var(–border-color); border-radius: var(–radius-md); background: var(–card-bg); cursor: pointer; transition: var(–transition-base); font-size: 1.1rem; } .toggle-btn:hover { border-color: var(–primary); background: var(–primary-light); transform: translateY(-2px); box-shadow: var(–shadow-md); } .lang-toggle { width: auto; padding: 0 var(–space-sm); font-size: 0.8rem; font-weight: 700; font-family: var(–font-body); color: var(–text-primary); background: var(–card-bg); } .btn { display: inline-flex; align-items: center; justify-content: center; gap: var(–space-sm); padding: var(–space-sm) var(–space-lg); font-family: var(–font-body); font-size: 0.9rem; font-weight: 600; border-radius: var(–radius-md); cursor: pointer; transition: var(–transition-base); text-decoration: none; border: none; position: relative; overflow: hidden; } .btn-primary { background: linear-gradient(135deg, var(–primary) 0%, var(–primary-dark) 100%); color: white; box-shadow: 0 4px 16px rgba(11, 122, 117, 0.3); } .btn-primary::before { content: ”; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent); transition: var(–transition-slow); } .btn-primary:hover { transform: translateY(-3px); box-shadow: 0 8px 24px rgba(11, 122, 117, 0.4); color: white; } .btn-primary:hover::before { left: 100%; } .btn-secondary { background: transparent; color: var(–primary); border: 2px solid var(–primary); } .btn-secondary:hover { background: var(–primary); color: white; transform: translateY(-3px); } .btn-gold { background: linear-gradient(135deg, var(–accent-gold) 0%, #B8983F 100%); color: white; box-shadow: 0 4px 16px rgba(197, 165, 78, 0.3); } .btn-gold:hover { transform: translateY(-3px); box-shadow: 0 8px 24px rgba(197, 165, 78, 0.4); color: white; } .mobile-menu-btn { display: flex; flex-direction: column; gap: 5px; width: 42px; height: 42px; justify-content: center; align-items: center; border: none; background: transparent; cursor: pointer; } .mobile-menu-btn span { width: 24px; height: 2px; background: var(–text-primary); transition: var(–transition-fast); } .mobile-menu { display: none; position: fixed; top: 81px; left: 0; right: 0; bottom: 0; background: var(–bg-primary); padding: var(–space-xl); z-index: 999; animation: fadeInDown 0.3s ease; } .mobile-menu.active { display: block; } .mobile-menu a { display: block; padding: var(–space-md) 0; font-size: 1.1rem; font-weight: 500; color: var(–text-primary); border-bottom: 1px solid var(–border-color); } @media (min-width: 1024px) { .nav-desktop { display: flex; } .mobile-menu-btn { display: none; } } /* ======================================== HERO SECTION ======================================== */ .hero { padding: calc(var(–space-4xl) + 80px) 0 var(–space-4xl); background: var(–gradient-hero); position: relative; overflow: hidden; min-height: 90vh; display: flex; align-items: center; } .hero::before { content: ”; position: absolute; top: -50%; right: -20%; width: 80%; height: 150%; background: radial-gradient(ellipse at center, var(–primary-glow) 0%, transparent 60%); animation: pulse 8s ease-in-out infinite; pointer-events: none; } .hero::after { content: ”; position: absolute; bottom: -20%; left: -10%; width: 50%; height: 80%; background: radial-gradient(ellipse at center, rgba(197, 165, 78, 0.1) 0%, transparent 60%); animation: pulse 10s ease-in-out infinite reverse; pointer-events: none; } .hero-inner { display: grid; grid-template-columns: 1fr; gap: var(–space-3xl); align-items: center; position: relative; z-index: 1; } @media (min-width: 768px) { .hero-inner { grid-template-columns: 1fr 1fr; } } .hero-content { max-width: 600px; } .hero-badge { display: inline-flex; align-items: center; gap: var(–space-sm); padding: var(–space-xs) var(–space-md); background: var(–accent-gold-light); border: 1px solid var(–accent-gold); border-radius: var(–radius-full); font-size: 0.8rem; font-weight: 600; color: var(–accent-gold); margin-bottom: var(–space-lg); animation: fadeInUp 0.6s ease 0.2s both; } .hero h1 { margin-bottom: var(–space-lg); animation: fadeInUp 0.6s ease 0.3s both; } .hero h1 em { font-style: normal; background: linear-gradient(135deg, var(–primary) 0%, var(–accent-gold) 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .hero-description { font-size: 1.15rem; margin-bottom: var(–space-xl); animation: fadeInUp 0.6s ease 0.4s both; } .hero-ctas { display: flex; flex-wrap: wrap; gap: var(–space-md); margin-bottom: var(–space-xl); animation: fadeInUp 0.6s ease 0.5s both; } .hero-trust { display: flex; flex-wrap: wrap; align-items: center; gap: var(–space-lg); padding-top: var(–space-lg); border-top: 1px solid var(–border-color); animation: fadeInUp 0.6s ease 0.6s both; } .trust-item { display: flex; align-items: center; gap: var(–space-sm); font-size: 0.85rem; color: var(–text-muted); } .trust-item svg { color: var(–primary); } .hero-visual { position: relative; animation: fadeInRight 0.8s ease 0.4s both; } .hero-image-wrapper { position: relative; border-radius: var(–radius-xl); overflow: hidden; box-shadow: var(–shadow-xl); transition: var(–transition-base); } .hero-image-wrapper:hover { transform: translateY(-8px) rotate(1deg); box-shadow: var(–shadow-glow), var(–shadow-xl); } .hero-image-wrapper img { width: 100%; height: auto; aspect-ratio: 4/3; object-fit: cover; transition: var(–transition-slow); } .hero-image-wrapper:hover img { transform: scale(1.03); } .hero-float-card { position: absolute; bottom: -20px; left: -20px; background: var(–card-bg); padding: var(–space-md) var(–space-lg); border-radius: var(–radius-lg); box-shadow: var(–shadow-lg); display: flex; align-items: center; gap: var(–space-md); animation: float 4s ease-in-out infinite, bounceIn 0.6s ease 0.8s both; } .float-icon { width: 52px; height: 52px; background: linear-gradient(135deg, var(–primary) 0%, var(–primary-dark) 100%); border-radius: var(–radius-md); display: flex; align-items: center; justify-content: center; font-size: 1.5rem; color: white; } .float-text strong { display: block; font-size: 1.1rem; color: var(–text-primary); } .float-text span { font-size: 0.8rem; color: var(–text-muted); } /* ======================================== ALERT BANNER ======================================== */ .alert-banner { background: linear-gradient(135deg, var(–accent-coral) 0%, #D76A50 100%); color: white; padding: var(–space-xl) 0; position: relative; overflow: hidden; } .alert-banner::before { content: ”; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.1) 50%, transparent 100%); background-size: 200% 100%; animation: shimmer 3s ease-in-out infinite; } .alert-inner { display: flex; flex-direction: column; gap: var(–space-md); align-items: flex-start; position: relative; z-index: 1; } .alert-icon { font-size: 2.5rem; animation: pulse 2s ease-in-out infinite; } .alert-content h3 { color: white; margin-bottom: var(–space-sm); } .alert-content p { color: rgba(255,255,255,0.95); margin: 0; max-width: none; } @media (min-width: 768px) { .alert-inner { flex-direction: row; align-items: center; } } /* ======================================== COMPARISON SECTION ======================================== */ .comparison-section { background: var(–bg-secondary); } .section-header { text-align: center; max-width: 700px; margin: 0 auto var(–space-3xl); } .section-header h2 { margin-bottom: var(–space-md); } .section-header p { margin: 0 auto; font-size: 1.1rem; } .comparison-grid { display: grid; grid-template-columns: 1fr; gap: var(–space-xl); } @media (min-width: 768px) { .comparison-grid { grid-template-columns: repeat(3, 1fr); } } .comparison-card { background: var(–card-bg); border-radius: var(–radius-lg); padding: var(–space-xl); border: 2px solid var(–border-color); transition: var(–transition-base); position: relative; overflow: hidden; } .comparison-card::before { content: ”; position: absolute; top: 0; left: 0; right: 0; height: 4px; background: linear-gradient(90deg, var(–border-color), var(–border-color)); transition: var(–transition-base); } .comparison-card:hover { border-color: var(–primary); transform: translateY(-8px); box-shadow: var(–shadow-lg); } .comparison-card:hover::before { background: linear-gradient(90deg, var(–primary), var(–accent-gold)); } .comparison-card.highlighted { border-color: var(–primary); background: linear-gradient(180deg, var(–primary-light) 0%, var(–card-bg) 30%); } .comparison-card.highlighted::before { background: linear-gradient(90deg, var(–primary), var(–accent-gold)); } .card-badge { display: inline-block; padding: var(–space-xs) var(–space-sm); background: linear-gradient(135deg, var(–primary) 0%, var(–primary-dark) 100%); color: white; font-size: 0.7rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; border-radius: var(–radius-sm); margin-bottom: var(–space-md); } .card-icon { font-size: 3rem; margin-bottom: var(–space-md); transition: var(–transition-base); } .comparison-card:hover .card-icon { transform: scale(1.1); } .comparison-card h3 { margin-bottom: var(–space-xs); } .comparison-card .subtitle { font-size: 0.9rem; color: var(–primary); font-weight: 600; margin-bottom: var(–space-md); } .comparison-card p { font-size: 0.95rem; margin-bottom: var(–space-lg); } .card-list { list-style: none; margin-bottom: var(–space-lg); } .card-list li { display: flex; align-items: flex-start; gap: var(–space-sm); padding: var(–space-sm) 0; font-size: 0.9rem; color: var(–text-secondary); border-bottom: 1px solid var(–border-color); } .card-list li:last-child { border-bottom: none; } .card-list .check { color: var(–primary); font-weight: bold; } .card-list .x { color: var(–accent-coral); font-weight: bold; } /* ======================================== PROCESS SECTION ======================================== */ .process-section { background: var(–bg-primary); } .process-grid { display: grid; grid-template-columns: 1fr; gap: var(–space-xl); position: relative; } @media (min-width: 768px) { .process-grid { grid-template-columns: repeat(3, 1fr); } .process-grid::before { content: ”; position: absolute; top: 32px; left: 20%; width: 60%; height: 4px; background: linear-gradient(90deg, var(–primary), var(–accent-gold), var(–primary)); border-radius: 2px; z-index: 0; } } .process-step { text-align: center; position: relative; z-index: 1; } .step-number { width: 72px; height: 72px; background: linear-gradient(135deg, var(–primary) 0%, var(–primary-dark) 100%); color: white; font-family: var(–font-display); font-size: 1.75rem; font-weight: 700; border-radius: 50%; display: flex; align-items: center; justify-content: center; margin: 0 auto var(–space-lg); box-shadow: 0 8px 24px rgba(11, 122, 117, 0.3); transition: var(–transition-base); } .process-step:hover .step-number { transform: scale(1.1) rotate(5deg); box-shadow: 0 12px 32px rgba(11, 122, 117, 0.4); } .process-step h3 { margin-bottom: var(–space-sm); } .process-step p { margin: 0 auto; font-size: 0.95rem; } /* ======================================== PRICING SECTION ======================================== */ .pricing-section { background: var(–bg-secondary); } .pricing-note { text-align: center; max-width: 600px; margin: 0 auto var(–space-3xl); padding: var(–space-lg); background: var(–card-bg); border-radius: var(–radius-lg); border-left: 4px solid var(–primary); box-shadow: var(–shadow-sm); } .pricing-note p { margin: 0 auto; } .pricing-grid { display: grid; grid-template-columns: 1fr; gap: var(–space-xl); } @media (min-width: 768px) { .pricing-grid { grid-template-columns: repeat(3, 1fr); align-items: stretch; } } .pricing-card { background: var(–card-bg); border-radius: var(–radius-lg); padding: var(–space-xl); border: 2px solid var(–border-color); text-align: center; transition: var(–transition-base); position: relative; display: flex; flex-direction: column; } .pricing-card:hover { transform: translateY(-12px); box-shadow: var(–shadow-xl); } .pricing-card.featured { border-color: var(–primary); transform: scale(1.03); box-shadow: var(–shadow-lg); } .pricing-card.featured:hover { transform: scale(1.03) translateY(-12px); } .pricing-badge { position: absolute; top: -14px; left: 50%; transform: translateX(-50%); background: linear-gradient(135deg, var(–primary) 0%, var(–primary-dark) 100%); color: white; padding: var(–space-xs) var(–space-lg); font-size: 0.75rem; font-weight: 700; text-transform: uppercase; border-radius: var(–radius-full); white-space: nowrap; } .pricing-card h3 { margin-bottom: var(–space-xs); } .pricing-delivery { font-size: 0.85rem; color: var(–text-muted); margin-bottom: var(–space-lg); } .pricing-price { font-family: var(–font-display); font-size: 3.5rem; font-weight: 700; background: linear-gradient(135deg, var(–primary) 0%, var(–accent-gold) 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; margin-bottom: var(–space-lg); } .pricing-price sup { font-size: 1.5rem; vertical-align: super; } .pricing-features { list-style: none; text-align: left; margin-bottom: var(–space-xl); flex-grow: 1; } .pricing-features li { padding: var(–space-sm) 0; font-size: 0.9rem; color: var(–text-secondary); border-bottom: 1px solid var(–border-color); display: flex; align-items: flex-start; gap: var(–space-sm); } .pricing-features li:last-child { border-bottom: none; } .pricing-features .icon { color: var(–primary); flex-shrink: 0; } .pricing-cta { width: 100%; } .pricing-guarantee { text-align: center; margin-top: var(–space-3xl); padding: var(–space-xl); background: var(–card-bg); border-radius: var(–radius-lg); } .guarantee-badges { display: flex; flex-wrap: wrap; justify-content: center; gap: var(–space-xl); margin-top: var(–space-lg); } .guarantee-item { display: flex; align-items: center; gap: var(–space-sm); font-size: 0.9rem; font-weight: 500; color: var(–text-secondary); } .guarantee-item svg { color: var(–primary); } /* ======================================== FAQ SECTION ======================================== */ .faq-section { background: var(–bg-primary); } .faq-grid { max-width: 800px; margin: 0 auto; } .faq-item { border-bottom: 1px solid var(–border-color); overflow: hidden; } .faq-question { display: flex; justify-content: space-between; align-items: center; padding: var(–space-lg) 0; cursor: pointer; font-family: var(–font-display); font-size: 1.1rem; font-weight: 500; color: var(–text-primary); transition: var(–transition-base); } .faq-question:hover { color: var(–primary); } .faq-icon { font-size: 1.5rem; color: var(–primary); transition: var(–transition-base); width: 32px; height: 32px; display: flex; align-items: center; justify-content: center; background: var(–primary-light); border-radius: 50%; } .faq-item.active .faq-icon { transform: rotate(45deg); background: var(–primary); color: white; } .faq-answer { max-height: 0; overflow: hidden; transition: max-height 0.4s ease; } .faq-item.active .faq-answer { max-height: 500px; } .faq-answer-inner { padding-bottom: var(–space-lg); } .faq-answer p { font-size: 0.95rem; } /* ======================================== CONTACT SECTION ======================================== */ .contact-section { background: var(–bg-secondary); } .contact-grid { display: grid; grid-template-columns: 1fr; gap: var(–space-xl); } @media (min-width: 768px) { .contact-grid { grid-template-columns: repeat(3, 1fr); } } .contact-card { background: var(–card-bg); padding: var(–space-xl); border-radius: var(–radius-lg); text-align: center; border: 1px solid var(–border-color); transition: var(–transition-base); } .contact-card:hover { border-color: var(–primary); transform: translateY(-8px); box-shadow: var(–shadow-lg); } .contact-icon { font-size: 2.5rem; margin-bottom: var(–space-md); transition: var(–transition-base); } .contact-card:hover .contact-icon { transform: scale(1.2); } .contact-card h3 { margin-bottom: var(–space-sm); } .contact-card a { font-size: 1.1rem; font-weight: 600; } /* ======================================== REVIEWS SECTION ======================================== */ .reviews-section { background: var(–bg-primary); } .reviews-logos { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: var(–space-lg); } .review-logo { display: flex; flex-direction: column; align-items: center; gap: var(–space-sm); padding: var(–space-lg); background: var(–card-bg); border-radius: var(–radius-lg); border: 1px solid var(–border-color); transition: var(–transition-base); text-decoration: none; min-width: 140px; } .review-logo:hover { border-color: var(–primary); transform: translateY(-8px) scale(1.03); box-shadow: var(–shadow-lg); } .review-logo img { height: 32px; width: auto; } .review-stars { color: var(–accent-gold); font-size: 1.1rem; letter-spacing: 2px; } .review-text { font-size: 0.8rem; color: var(–text-muted); } /* ======================================== CTA SECTION ======================================== */ .cta-section { background: linear-gradient(135deg, var(–primary) 0%, var(–primary-dark) 50%, var(–accent-navy) 100%); background-size: 200% 200%; animation: gradientFlow 8s ease infinite; color: white; padding: var(–space-4xl) 0; text-align: center; position: relative; overflow: hidden; } .cta-section::before { content: ”; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: url(“data:image/svg+xml,%3Csvg width=’60’ height=’60’ viewBox=’0 0 60 60′ xmlns=’http://www.w3.org/2000/svg’%3E%3Cg fill=’none’ fill-rule=’evenodd’%3E%3Cg fill=’%23ffffff’ fill-opacity=’0.03’%3E%3Cpath d=’M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z’/%3E%3C/g%3E%3C/g%3E%3C/svg%3E”); opacity: 0.5; } .cta-section .container { position: relative; z-index: 1; } .cta-section h2 { color: white; margin-bottom: var(–space-md); } .cta-section p { color: rgba(255,255,255,0.9); max-width: 600px; margin: 0 auto var(–space-xl); font-size: 1.15rem; } .cta-buttons { display: flex; flex-wrap: wrap; justify-content: center; gap: var(–space-md); } .cta-section .btn-primary { background: white; color: var(–primary); box-shadow: 0 4px 16px rgba(0,0,0,0.2); } .cta-section .btn-primary:hover { background: var(–accent-gold); color: white; } .cta-section .btn-secondary { border-color: white; color: white; } .cta-section .btn-secondary:hover { background: white; color: var(–primary); } /* ======================================== FOOTER ======================================== */ .footer { background: var(–accent-navy); color: white; padding: var(–space-4xl) 0 var(–space-xl); } .footer-grid { display: grid; grid-template-columns: 1fr; gap: var(–space-xl); margin-bottom: var(–space-3xl); } @media (min-width: 768px) { .footer-grid { grid-template-columns: 2fr 1fr 1fr 1fr; } } .footer-brand { display: flex; align-items: center; gap: var(–space-sm); margin-bottom: var(–space-md); } .footer-brand img { width: 44px; height: 44px; } .footer-brand span { font-family: var(–font-display); font-size: 1.1rem; font-weight: 600; } .footer-about p { color: rgba(255,255,255,0.7); font-size: 0.9rem; max-width: 300px; } .footer-col h4 { color: var(–accent-gold); font-size: 0.85rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; margin-bottom: var(–space-md); } .footer-col a { display: block; color: rgba(255,255,255,0.7); font-size: 0.9rem; padding: var(–space-xs) 0; transition: var(–transition-fast); } .footer-col a:hover { color: white; padding-left: var(–space-sm); } .footer-network { border-top: 1px solid rgba(255,255,255,0.1); padding-top: var(–space-xl); margin-top: var(–space-xl); text-align: center; } .footer-network p { color: rgba(255,255,255,0.6); font-size: 0.85rem; margin-bottom: var(–space-sm); max-width: none; } .footer-network strong { color: var(–accent-gold); } .network-links { display: flex; flex-wrap: wrap; justify-content: center; gap: var(–space-sm); margin-top: var(–space-md); } .network-links a { font-size: 0.8rem; color: rgba(255,255,255,0.6); padding: var(–space-xs) var(–space-md); background: rgba(255,255,255,0.05); border-radius: var(–radius-sm); transition: var(–transition-fast); } .network-links a:hover { background: var(–accent-gold); color: var(–accent-navy); } .network-links a small { opacity: 0.7; } .footer-bottom { border-top: 1px solid rgba(255,255,255,0.1); padding-top: var(–space-lg); margin-top: var(–space-xl); text-align: center; } .footer-bottom p { color: rgba(255,255,255,0.5); font-size: 0.8rem; max-width: none; } .footer-bottom a { color: rgba(255,255,255,0.5); } .footer-bottom a:hover { color: white; } /* Utilities */ .text-center { text-align: center; } .mt-lg { margin-top: var(–space-lg); } @media (min-width: 1024px) { .desktop-only { display: inline-flex !important; } } @media (max-width: 1023px) { .desktop-only { display: none !important; } } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; transition-duration: 0.01ms !important; } }
🤔 Wait — Are You Using the Right Term? Espera — ¿Estás Usando el Término Correcto?

“Therapy Dog” Might Not Be What You Need “Perro de Terapia” Puede No Ser Lo Que Necesitas

Most people searching for “therapy dog certification” actually need something completely different. Therapy dogs help others at hospitals and schools. If you need a dog to help you with anxiety, depression, or PTSD — you’re looking for an ESA or Psychiatric Service Dog. La mayoría de las personas que buscan “certificación de perro de terapia” en realidad necesitan algo completamente diferente. Los perros de terapia ayudan a otros en hospitales. Si necesitas un perro para ayudarte a ti con ansiedad o depresión — necesitas un ESA o Perro de Servicio Psiquiátrico.

50,000+ Helped50,000+ Ayudados
Licensed ProvidersProveedores Licenciados
501(c)(3) Nonprofit501(c)(3) Sin Fines de Lucro
Happy golden retriever service dog
?
Confused?¿Confundido? We’ll help you figure it outTe ayudaremos a entenderlo
💡

Here’s What Most People Don’t KnowEsto Es Lo Que La Mayoría No Sabe

Therapy dogs = Volunteer dogs that comfort other people at hospitals, schools, nursing homes. They have NO special legal rights.

If your dog helps YOU with mental health, housing, or travel — you actually need an ESA letter or PSD documentation. That’s what we provide.
Perros de terapia = Perros voluntarios que consuelan a otras personas en hospitales y escuelas. NO tienen derechos legales especiales.

Si tu perro te ayuda a TI con salud mental, vivienda o viajes — necesitas una carta ESA o documentación PSD.

Therapy Dog vs. Service Dog vs. ESAPerro de Terapia vs. Perro de Servicio vs. ESA

These three categories are often confused but serve completely different purposes under federal law.Estas tres categorías a menudo se confunden pero sirven propósitos completamente diferentes bajo la ley federal.

🏥

Therapy DogPerro de Terapia

For VolunteeringPara Voluntariado

Therapy dogs visit hospitals, nursing homes, and schools to provide comfort to others — not their owner.Los perros de terapia visitan hospitales y escuelas para brindar consuelo a otros — no a su dueño.

  • No public access rightsSin derechos de acceso público
  • No housing protectionsSin protecciones de vivienda
  • No airline cabin accessSin acceso a cabina de avión
  • Volunteer at facilitiesVoluntariado en instalaciones
Most Common NeedMás Común
🏠

Emotional Support AnimalAnimal de Apoyo Emocional

For YOUR Mental HealthPara TU Salud Mental

An ESA provides therapeutic benefit to you through companionship. Requires a letter from a Licensed Clinical Doctor.Un ESA proporciona beneficio terapéutico a ti a través de la compañía.

  • No public accessSin acceso público
  • Housing protection (FHA)Protección de vivienda (FHA)
  • No airline cabin (since 2021)Sin cabina de avión (desde 2021)
  • No pet feesSin tarifas de mascotas
Check If You Qualify →Verifica Si Calificas →
Full Public AccessAcceso Público
🐕‍🦺

Psychiatric Service DogPerro de Servicio Psiquiátrico

Trained Tasks for YOUR DisabilityTareas Entrenadas para TU Discapacidad

A PSD is trained to perform specific tasks related to your mental health disability.Un PSD está entrenado para realizar tareas específicas relacionadas con tu discapacidad de salud mental.

  • Full public access (ADA)Acceso público completo (ADA)
  • Housing protection (FHA)Protección de vivienda (FHA)
  • Airline cabin access (DOT)Acceso a cabina de avión (DOT)
  • No pet feesSin tarifas de mascotas
Check If You Qualify →Verifica Si Calificas →

How Our Process WorksCómo Funciona Nuestro Proceso

Get the documentation you actually need in three simple steps.Obtén la documentación que realmente necesitas en tres simples pasos.

1

Free ScreeningEvaluación Gratuita

Take our anonymous 3-minute screening to see if you may qualify for an Emotional Support Animal or Service Dog letter. No credit card required.Realiza nuestra evaluación anónima de 3 minutos para ver si podrías calificar.

2

Provider ReviewRevisión del Proveedor

A licensed mental health professional reviews your case and conducts a clinical evaluation.Un profesional de salud mental licenciado revisa tu caso y realiza una evaluación clínica.

3

Same-Day DocumentationDocumentación el Mismo Día

If approved, receive your official letter on provider letterhead. Digital delivery is instant.Si eres aprobado, recibe tu carta oficial. La entrega digital es instantánea.

Transparent PricingPrecios Transparentes

No hidden fees. You only pay if approved by a licensed provider.Sin tarifas ocultas. Solo pagas si eres aprobado.

Basic

Electronic DeliveryEntrega Electrónica

$99
  • Clinical evaluation with licensed providerEvaluación clínica con proveedor licenciado
  • ESA or PSD letter on provider letterheadCarta ESA o PSD en papel membretado
  • Digital documents (instant access)Documentos digitales
  • 1 year portal access1 año acceso al portal
  • Email & chat supportSoporte por email y chat
Get StartedComenzar

Premium

Physical Delivery IncludedEntrega Física Incluida

$199
  • Everything in Complete, plus:Todo en Complete, más:
  • Physical identification tagEtiqueta de identificación física
  • Service animal leashCorrea de animal de servicio
  • Printed documents packetPaquete de documentos impresos
  • Physical registration cardTarjeta de registro física
Get StartedComenzar

Our GuaranteesNuestras Garantías

Free ScreeningEvaluación Gratis
Only pay if approvedSolo paga si aprobado
30-day guaranteeGarantía de 30 días

Frequently Asked QuestionsPreguntas Frecuentes

Is there an official “therapy dog certification”?¿Existe una “certificación oficial de perro de terapia”? +

No. There is no federally recognized “therapy dog certification.” Organizations like Pet Partners offer voluntary evaluations, but these are not government credentials. If you need your dog to help YOU with a mental health condition, you need a PSD or ESA letter, not therapy dog “certification.”No. No existe una “certificación de perro de terapia” reconocida federalmente. Si necesitas que tu perro te ayude a TI con una condición de salud mental, necesitas una carta de PSD o ESA.

What’s the difference between a therapy dog and an ESA?¿Cuál es la diferencia entre un perro de terapia y un ESA? +

A therapy dog provides comfort to other people during volunteer visits. An ESA provides therapeutic benefit to its owner through companionship. ESAs have housing protections under the Fair Housing Act; therapy dogs do not.Un perro de terapia proporciona consuelo a otras personas durante visitas voluntarias. Un ESA proporciona beneficio terapéutico a su dueño.

Can I take my ESA or PSD on airplanes?¿Puedo llevar mi ESA o PSD en aviones? +

PSDs: Yes. PSDs fly in the cabin for free on all U.S. airlines under DOT regulations.

ESAs: As of January 2021, the DOT no longer requires airlines to accommodate ESAs. However, ESAs still have full housing protections under the FHA.
PSDs: Sí. Los PSDs vuelan en cabina gratis en todas las aerolíneas de EE.UU.

ESAs: Desde enero de 2021, el DOT ya no requiere que las aerolíneas acomoden ESAs.

Do I qualify for an Emotional Support Animal or Service Dog letter?¿Califico para una carta de ESA o PSD? +

You may qualify if you have a mental health condition such as anxiety, depression, PTSD, panic disorder, or OCD that substantially limits one or more major life activities. Our free screening can help determine if you might be eligible.Puedes calificar si tienes una condición de salud mental como ansiedad, depresión, TEPT, trastorno de pánico o TOC.

Need Help?¿Necesitas Ayuda?

📞

Call UsLlámanos

(800) 851-4390
✉️

Email UsEscríbenos

help@mypsd.org
📍

Our OfficeNuestra Oficina

1030 15th St NW, Suite 170
Washington, DC 20005

Rated #1 Nonprofit for ESA & PSD Letters#1 Sin Fines de Lucro para Cartas ESA y PSD

Ready to Get the Right Documentation?¿Listo para Obtener la Documentación Correcta?

Take our free, confidential screening to see if you qualify for an Emotional Support Animal or Service Dog letter from a Licensed Clinical Doctor.Realiza nuestra evaluación gratuita y confidencial para ver si calificas.

// Theme Toggle function toggleTheme() { const html = document.documentElement; const newTheme = html.dataset.theme === ‘light’ ? ‘dark’ : ‘light’; html.dataset.theme = newTheme; localStorage.setItem(‘theme’, newTheme); document.querySelector(‘.theme-icon’).textContent = newTheme === ‘light’ ? ‘🌙’ : ‘☀️’; } // Language Toggle function toggleLang() { const html = document.documentElement; const newLang = html.dataset.lang === ‘en’ ? ‘es’ : ‘en’; html.dataset.lang = newLang; localStorage.setItem(‘lang’, newLang); } // Mobile Menu function toggleMobileMenu() { document.getElementById(‘mobileMenu’).classList.toggle(‘active’); } // FAQ Toggle function toggleFaq(element) { const faqItem = element.parentElement; const isActive = faqItem.classList.contains(‘active’); document.querySelectorAll(‘.faq-item’).forEach(item => item.classList.remove(‘active’)); if (!isActive) faqItem.classList.add(‘active’); } // Scroll Animation Observer const observerOptions = { threshold: 0.1, rootMargin: ‘0px 0px -50px 0px’ }; const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add(‘visible’); observer.unobserve(entry.target); } }); }, observerOptions); document.querySelectorAll(‘.animate-on-scroll’).forEach(el => observer.observe(el)); // Initialize document.addEventListener(‘DOMContentLoaded’, function() { const savedTheme = localStorage.getItem(‘theme’); if (savedTheme) { document.documentElement.dataset.theme = savedTheme; document.querySelector(‘.theme-icon’).textContent = savedTheme === ‘light’ ? ‘🌙’ : ‘☀️’; } else if (window.matchMedia(‘(prefers-color-scheme: dark)’).matches) { document.documentElement.dataset.theme = ‘dark’; document.querySelector(‘.theme-icon’).textContent = ‘☀️’; } const savedLang = localStorage.getItem(‘lang’); if (savedLang) document.documentElement.dataset.lang = savedLang; document.querySelectorAll(‘.mobile-menu a’).forEach(link => { link.addEventListener(‘click’, () => document.getElementById(‘mobileMenu’).classList.remove(‘active’)); }); }); window.addEventListener(‘resize’, function() { if (window.innerWidth >= 1024) document.getElementById(‘mobileMenu’).classList.remove(‘active’); });