Showing source for: https://domcavalo.com/pt
Duration: 0.324776s
Server: cloudflare
<!DOCTYPE html>
<html lang="pt" itemscope itemtype="https://schema.org/WebPage">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="shortcut icon" href="/images/upload/favicon-32x32.png" type="image/png" />
<meta name="csrf-token" content="CwAYsx0CnbL6HqKHiINjg8BpDLDxmA2rMQhWkND1">
<link rel="sitemap" type="application/xml" title="Sitemap" href="https://domcavalo.com/sitemap.xml" />
<meta name="author" content="criativatek.com">
<meta name="robots" content="index, follow">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="application-name" content="Dom Cavalo">
<meta name="googlebot" content="index, follow">
<meta name="HandheldFriendly" content="True">
<meta name="googlebot-news" content="index, follow">
<meta name="googlebot-video" content="index, follow">
<meta http-equiv="content-language" content="pt">
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "WebSite",
"url": "https://domcavalo.com",
"name": "Dom Cavalo",
"description": "Clube Hípico e Escola de Equitação"
}
</script>
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "Organization",
"name": "Dom Cavalo",
"url": "https://domcavalo.com",
"logo": "https://domcavalo.com/themes/criativatek-shop-9/images/logo.png",
"description": ""
}
</script>
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "LocalBusiness",
"name": "Dom Cavalo",
"image": "https://domcavalo.com/themes/criativatek-shop-9/images/banners/banner-1.jpg",
"priceRange": "$",
"address": {
"@type": "PostalAddress",
"streetAddress": "",
"addressLocality": "Monte Real",
"addressRegion": "Leiria",
"postalCode": "2425-065",
"addressCountry": "PT"
},
"telephone": "",
"url": "https://domcavalo.com",
"description": "Clube Hípico e Escola de Equitação"
}
</script>
<title>Dom Cavalo</title>
<link rel="alternate" hreflang="pt" href="https://domcavalo.com/pt">
<link rel="alternate" hreflang="en" href="https://domcavalo.com/en">
<link rel="alternate" hreflang="x-default" href="https://domcavalo.com/pt">
<meta name="description" content="Clube Hípico e Escola de Equitação" />
<meta name="keywords" content="" />
<link rel="canonical" href="https://domcavalo.com/pt" />
<meta property="og:title" content="Dom Cavalo" />
<meta property="og:locale" content="pt" />
<meta property="og:type" content="website" />
<meta property="og:site_name" content="Dom Cavalo" />
<meta property="og:description" content="Clube Hípico e Escola de Equitação" />
<meta property="og:image" content="https://domcavalo.com/themes/criativatek-shop-9/images/banners/banner-1.jpg" />
<meta property="og:image:secure_url" content="https://domcavalo.com/themes/criativatek-shop-9/images/banners/banner-1.jpg">
<meta property="og:image:alt" content="Dom Cavalo">
<meta property="og:url" content="https://domcavalo.com/pt" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="https://domcavalo.com/pt" />
<meta name="twitter:title" content="Dom Cavalo" />
<meta name="twitter:description" content="Clube Hípico e Escola de Equitação" />
<meta name="twitter:image" content="https://domcavalo.com/themes/criativatek-shop-9/images/banners/banner-1.jpg" />
<link href="/themes/criativatek-shop-9/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.min.css">
<link href="/themes/criativatek-shop-9/css/slicknav.min.css" rel="stylesheet">
<link rel="stylesheet" href="/themes/criativatek-shop-9/css/swiper-bundle.min.css">
<link href="/themes/criativatek-shop-9/css/all.min.css" rel="stylesheet">
<link href="/themes/criativatek-shop-9/css/animate.css" rel="stylesheet">
<link rel="stylesheet" href="/themes/criativatek-shop-9/css/magnific-popup.css">
<link rel="stylesheet" href="/themes/criativatek-shop-9/css/mousecursor.css">
<link href="/themes/criativatek-shop-9/css/custom.css?v=1792073703" rel="stylesheet">
<link rel="stylesheet" href="/themes/criativatek-shop-9/css/horse-access.css?v=1778685284">
</head>
<body class="bg-white">
<div class="preloader">
<div class="loading-container">
<div class="loading"></div>
<div id="loading-icon">
<img src="https://domcavalo.com/themes/criativatek-shop-9/images/logo.png" alt="" loading="eager" decoding="async">
</div>
</div>
</div>
<header class="main-header active-sticky-header">
<div class="header-sticky bg-section">
<nav class="navbar navbar-expand-lg">
<div class="container">
<a class="navbar-brand" href="/">
<img src="https://domcavalo.com/themes/criativatek-shop-9/images/logo.png" alt="Dom Cavalo" style="width: 100px;" loading="eager" decoding="async">
</a>
<div class="collapse navbar-collapse main-menu">
<div class="nav-menu-wrapper">
<ul class="navbar-nav mr-auto" id="menu">
<li class="active">
<a href="https://domcavalo.com/pt" >
Home
</a>
</li>
<li class="submenu submenu-mega ">
<a href="https://domcavalo.com/pt" >
Cavalos
</a>
<div class="mega-dropdown" data-parent-preview="https://domcavalo.com/images/upload/jackpot4.jpg">
<div class="mega-dropdown-preview">
<img src="https://domcavalo.com/images/upload/jackpot4.jpg" alt="Preview" loading="eager" decoding="async" width="1200" height="800">
</div>
<div class="container">
<div class="mega-dropdown-links">
<span class="mega-dropdown-eyebrow">Cavalos</span>
<a href="https://domcavalo.com/pt/cavalos-a-venda"
class="mega-dropdown-item "
data-preview="https://domcavalo.com/images/upload/4m0a6370.jpg"
>
<span class="mega-dropdown-label">Venda de Cavalos</span>
</a>
<a href="https://domcavalo.com/pt/pos-venda"
class="mega-dropdown-item "
data-preview="https://domcavalo.com/images/upload/girl-rides-horse.jpg"
>
<span class="mega-dropdown-label">Serviços de Venda</span>
</a>
</div>
</div>
</div>
</li>
<li class="submenu submenu-mega ">
<a href="https://domcavalo.com/pt" >
Montar a Cavalo
</a>
<div class="mega-dropdown" data-parent-preview="https://domcavalo.com/images/upload/site.jpeg">
<div class="mega-dropdown-preview">
<img src="https://domcavalo.com/images/upload/site.jpeg" alt="Preview" loading="lazy" decoding="async" width="1350" height="1080">
</div>
<div class="container">
<div class="mega-dropdown-links">
<span class="mega-dropdown-eyebrow">Montar a Cavalo</span>
<a href="https://domcavalo.com/pt/servicos"
class="mega-dropdown-item "
data-preview="https://domcavalo.com/images/upload/captura-de-ecra-2024-04-02-as-16_6.png"
>
<span class="mega-dropdown-label">Serviços</span>
</a>
<a href="https://domcavalo.com/pt/representantes"
class="mega-dropdown-item "
data-preview="https://domcavalo.com/images/upload/1010007.png"
>
<span class="mega-dropdown-label">Representantes</span>
</a>
<a href="https://domcavalo.com/pt/eventos"
class="mega-dropdown-item "
data-preview="https://domcavalo.com/images/upload/1.png"
>
<span class="mega-dropdown-label">Notícias</span>
</a>
</div>
</div>
</div>
</li>
<li class="submenu submenu-mega ">
<a href="https://domcavalo.com/pt" >
Turismo Lusitano
</a>
<div class="mega-dropdown" data-parent-preview="https://domcavalo.com/themes/criativatek-shop-9/images/services/turismo.jpg">
<div class="mega-dropdown-preview">
<img src="https://domcavalo.com/themes/criativatek-shop-9/images/services/turismo.jpg" alt="Preview" loading="lazy" decoding="async">
</div>
<div class="container">
<div class="mega-dropdown-links">
<span class="mega-dropdown-eyebrow">Turismo Lusitano</span>
<a href="https://domcavalo.com/pt/alojamentos"
class="mega-dropdown-item "
data-preview="https://domcavalo.com/images/upload/dc-accomodation-apartment_3.jpg"
>
<span class="mega-dropdown-label">Alojamento</span>
</a>
<a href="https://domcavalo.com/pt/alojamentos/leiria"
class="mega-dropdown-item mega-dropdown-subitem "
data-preview="https://domcavalo.com/images/upload/dc-apart-quarto.jpg"
>
<span class="mega-dropdown-label">Leiria</span>
</a>
<a href="https://domcavalo.com/pt/alojamentos/onzenas"
class="mega-dropdown-item mega-dropdown-subitem "
data-preview="https://domcavalo.com/images/upload/onzenas-suite.webp"
>
<span class="mega-dropdown-label">Coruche</span>
</a>
<a href="https://domcavalo.com/pt/cavalos"
class="mega-dropdown-item "
data-preview="https://domcavalo.com/images/upload/img-20250501-wa0019.jpg"
>
<span class="mega-dropdown-label">Cavalos</span>
</a>
<a href="https://domcavalo.com/pt/alojamentos/atividades"
class="mega-dropdown-item "
data-preview="https://domcavalo.com/images/upload/img-20260522-wa0029_2.jpg"
>
<span class="mega-dropdown-label">Outras Atividades</span>
</a>
</div>
</div>
</div>
</li>
<li class="">
<a href="https://domcavalo.com/pt/contactos" >
Contacto
</a>
</li>
</ul>
</div>
<div class="col-auto hdr-right" style="display:flex; align-items:center; gap:0; margin-left:auto;">
<div id="navbarNavLang" style="display:flex; align-items:center;">
<ul class="navbar-nav navbar-left d-block" style="width:auto;">
<li class="nav-item dropdown submenu">
<a href="#" class="nav-link text-uppercase p-0 fs-14 fw-500 text-nowrap d-flex align-items-center ">
<img src="/images/flags/portugal.png" class="rounded-1 me-5px mb-0 h-15px w-15px object-fit-contain me-2" alt="PT" width="15px" height="15px" loading="lazy" decoding="async">
<span>PT</span>
</a>
<div class="dropdown-menu submenu-content2 ps-20px pe-20px pt-20px pb-20px dropdown-menu-end">
<div class="d-lg-flex mega-menu2 m-auto flex-column">
<div class="md-mb-25px">
<a href="https://domcavalo.com/locale/pt" class="mb-5px pb-0 d-flex align-items-center">
<img src="/images/flags/portugal.png" class="rounded-1 me-2 mb-0" width="15px" loading="lazy" alt="Português" decoding="async">
<span class="btn-text text-dark-gray">Português</span>
</a>
</div>
<div class="md-mb-25px">
<a href="https://domcavalo.com/locale/en" class="mb-5px pb-0 d-flex align-items-center">
<img src="/images/flags/united-states.svg" class="rounded-1 me-2 mb-0" width="15px" loading="lazy" alt="Inglês" decoding="async">
<span class="btn-text text-dark-gray">Inglês</span>
</a>
</div>
</div>
</div>
</li>
</ul>
</div>
<div class="hdr-user" id="hdr-user-wrap">
<button type="button" class="hdr-user__btn" id="hdr-user-btn" aria-haspopup="true" aria-expanded="false" aria-label="Conta">
<svg class="hdr-user__icon" width="18" height="18" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
<path d="M12 12c2.7 0 4.8-2.1 4.8-4.8S14.7 2.4 12 2.4 7.2 4.5 7.2 7.2 9.3 12 12 12zm0 2.4c-3.2 0-9.6 1.6-9.6 4.8v2.4h19.2v-2.4c0-3.2-6.4-4.8-9.6-4.8z"/>
</svg>
<span class="hdr-user__guest-links">
<span class="hdr-user__glink">Entrar</span>
</span>
</button>
<div class="hdr-user__dropdown" id="hdr-user-dropdown" role="menu">
<a href="https://domcavalo.com/pt/login" class="hdr-user__item" role="menuitem">
<svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4"/><polyline points="10 17 15 12 10 7"/><line x1="15" y1="12" x2="3" y2="12"/></svg>
Iniciar Sessão
</a>
<a href="https://domcavalo.com/pt/register" class="hdr-user__item" role="menuitem">
<svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4.418 3.582-8 8-8s8 3.582 8 8"/></svg>
Criar conta
</a>
</div>
</div>
</div>
</div>
<button type="button" class="mobile-menu-toggle" aria-label="Menu" aria-expanded="false" aria-controls="mobile-menu">
<span></span>
<span></span>
<span></span>
</button>
</div>
</nav>
<div class="mobile-menu" id="mobile-menu" aria-hidden="true">
<div class="mobile-menu-inner">
<ul class="mobile-menu-list">
<li class="mobile-menu-item ">
<a href="https://domcavalo.com/pt" class="mobile-menu-link" >
Home
</a>
</li>
<li class="mobile-menu-item has-children">
<div class="mobile-menu-row">
<a href="https://domcavalo.com/pt" class="mobile-menu-link" >
Cavalos
</a>
<button type="button" class="mobile-menu-expand" aria-label="Expandir" aria-expanded="false">
<i class="fa fa-angle-down"></i>
</button>
</div>
<ul class="mobile-submenu">
<li>
<a href="https://domcavalo.com/pt/cavalos-a-venda" >
Venda de Cavalos
</a>
</li>
<li>
<a href="https://domcavalo.com/pt/pos-venda" >
Serviços de Venda
</a>
</li>
</ul>
</li>
<li class="mobile-menu-item has-children">
<div class="mobile-menu-row">
<a href="https://domcavalo.com/pt" class="mobile-menu-link" >
Montar a Cavalo
</a>
<button type="button" class="mobile-menu-expand" aria-label="Expandir" aria-expanded="false">
<i class="fa fa-angle-down"></i>
</button>
</div>
<ul class="mobile-submenu">
<li>
<a href="https://domcavalo.com/pt/servicos" >
Serviços
</a>
</li>
<li>
<a href="https://domcavalo.com/pt/representantes" >
Representantes
</a>
</li>
<li>
<a href="https://domcavalo.com/pt/eventos" >
Notícias
</a>
</li>
</ul>
</li>
<li class="mobile-menu-item has-children">
<div class="mobile-menu-row">
<a href="https://domcavalo.com/pt" class="mobile-menu-link" >
Turismo Lusitano
</a>
<button type="button" class="mobile-menu-expand" aria-label="Expandir" aria-expanded="false">
<i class="fa fa-angle-down"></i>
</button>
</div>
<ul class="mobile-submenu">
<li>
<a href="https://domcavalo.com/pt/alojamentos" >
Alojamento
</a>
</li>
<li class="mobile-submenu-sub">
<a href="https://domcavalo.com/pt/alojamentos/leiria" >
Leiria
</a>
</li>
<li class="mobile-submenu-sub">
<a href="https://domcavalo.com/pt/alojamentos/onzenas" >
Coruche
</a>
</li>
<li>
<a href="https://domcavalo.com/pt/cavalos" >
Cavalos
</a>
</li>
<li>
<a href="https://domcavalo.com/pt/alojamentos/atividades" >
Outras Atividades
</a>
</li>
</ul>
</li>
<li class="mobile-menu-item ">
<a href="https://domcavalo.com/pt/contactos" class="mobile-menu-link" >
Contacto
</a>
</li>
</ul>
<div class="mobile-menu-lang">
<a href="https://domcavalo.com/locale/pt" class="mobile-lang-item">
<img src="/images/flags/portugal.png" alt="Português" width="18" loading="lazy" decoding="async">
<span>Português</span>
</a>
<a href="https://domcavalo.com/locale/en" class="mobile-lang-item">
<img src="/images/flags/united-states.svg" alt="Inglês" width="18" loading="lazy" decoding="async">
<span>Inglês</span>
</a>
</div>
<div class="mobile-menu-auth">
<a href="https://domcavalo.com/pt/login" class="mobile-auth-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4"/><polyline points="10 17 15 12 10 7"/><line x1="15" y1="12" x2="3" y2="12"/></svg>
Iniciar Sessão
</a>
<a href="https://domcavalo.com/pt/register" class="mobile-auth-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4.418 3.582-8 8-8s8 3.582 8 8"/></svg>
Criar conta
</a>
</div>
</div>
</div>
<div class="mobile-menu-backdrop"></div>
</div>
</header>
<div class="mega-dropdown-overlay"></div>
<section class="hero hero-slider-layout bg-section dark-section">
<div class="swiper">
<div class="swiper-wrapper">
<div class="swiper-slide">
<div class="hero-slide">
<picture class="hero-bg-picture" aria-hidden="true">
<img class="hero-bg-img" src="/images/upload/img-6731_4.jpg" alt="Adquira o Cavalo Lusitano dos seus Sonhos" width="1280" height="848" fetchpriority="high" loading="lazy" decoding="async">
</picture>
<div class="hero-bg-overlay" aria-hidden="true"></div>
<div class="container" style="position: relative;">
<div class="row align-items-center justify-content-center pt-5" style="height: 100vh;">
<div class="col-lg-8 col-md-8">
<div class="hero-content text-center">
<div class="section-title mb-0">
<h3 class="wow fadeInUp rounded-0 mb-4 bg-dark text-base-color">Puro Sangue Lusitano</h3>
<h1 class="text-anime-style-2 text-uppercase" data-cursor="-opaque">
Adquira o Cavalo Lusitano dos seus Sonhos
</h1>
<p class="wow w-80 mx-auto mt-3 fadeInUp" data-wow-delay="0.2s">
28 anos de experiência a vender cavalos lusitanos para todo o mundo. Encontre o seu par perfeito!
</p>
<div class="hero-chat-cta wow fadeInUp" data-wow-delay="0.3s" hidden>
<button type="button" class="hero-chat-btn" data-open-ai-chat>
Falar com o nosso assistente
<svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
<path d="M5 12h14M13 6l6 6-6 6"/>
</svg>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<style id="ctk-responsive"></style>
<!-- ===================== A NOSSA ESSÊNCIA ===================== -->
<section class="our-milestones">
<div class="container">
<div class="row align-items-center justify-content-between">
<div class="col-lg-6 order-lg-1 order-2 pe-0">
<div class="about-us-images pe-5 sm-pe-0 me-0 border-end-primary">
<figure class="rounded-0">
<img src="/images/upload/4m0a8358.jpg" alt="A nossa essência" width="800" height="525" loading="lazy" class="object-fit-cover" spellcheck="false" decoding="async">
</figure>
</div>
</div>
<div class="col-lg-6 order-lg-2 order-1 ps-0">
<div class="our-milestones-content">
<div class="section-title ps-5 sm-ps-0">
<h3 class="rounded-0 text-base-color">A nossa essência</h3>
<h2 spellcheck="false"><span style="font-family: "Playfair Display", serif;">Cavalos Lusitanos</span><div spellcheck="false">Tradição & PAIXÃO <br></div></h2>
<p>Desde 1998 a formar cavaleiros e a criar laços inesquecíveis entre pessoas e cavalos.</p>
</div>
<div class="milestones-counter-box ps-5 sm-ps-0 mb-4">
<div class="milestone-counter-item"><h2><span class="counter">600</span>+</h2><p>Cavalos Vendidos</p></div>
<div class="milestone-counter-item"><h2><span class="counter">40</span>+</h2><p>Países</p></div>
<div class="milestone-counter-item"><h2><span class="counter">25</span>+</h2><p>Anos de Legado</p></div>
</div>
<div class="our-milestones-btn ps-5 sm-ps-0 mt-0">
<a href="/pt/sobre-nos" class="btn-default w-100">Conhecer a nossa história</a>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="our-services horses-slider">
<div class="container">
<div class="row section-row align-items-end mb-4 pb-4 border-bottom">
<div class="col-lg-6">
<div class="section-title">
<h3 class="wow fadeInUp">Seleção exclusiva</h3>
<h2 class="text-anime-style-2" data-cursor="-opaque">Cavalos em
<span>destaque</span>
</h2>
</div>
</div>
<div class="col-lg-6">
<div class="section-btn wow fadeInUp d-flex align-items-center justify-content-lg-end gap-3" data-wow-delay="0.2s">
<div class="horses-nav d-none d-md-flex">
<button type="button" class="horses-button-prev" aria-label="Ver todos">
<i class="fa-solid fa-chevron-left"></i>
</button>
<button type="button" class="horses-button-next" aria-label="Ver todos">
<i class="fa-solid fa-chevron-right"></i>
</button>
</div>
<a href="https://domcavalo.com/pt/cavalos-a-venda" class="btn-default">Ver todos</a>
</div>
</div>
</div>
<div class="swiper horses-swiper">
<div class="swiper-wrapper">
<div class="swiper-slide">
<article class="shop-card wow fadeInUp mb-3 shop-card--restricted"
data-wow-delay="0s">
<a href="https://domcavalo.com/pt/cavalo/osmar"
data-horse-access-open
data-product-id="1"
data-product-name="Osmar"
data-product-slug="osmar"
>
<div class="shop-card-img">
<img src="https://domcavalo.com/images/upload/osmar1.jpg" alt="Osmar" loading="lazy" decoding="async" width="1081" height="1080">
</div>
<span class="shop-card-badge shop-card-badge--lock" aria-label="Acesso Restrito">
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<rect x="3" y="11" width="18" height="11" rx="2" ry="2"/>
<path d="M7 11V7a5 5 0 0 1 10 0v4"/>
</svg>
</span>
<div class="shop-card-body">
<h3 class="shop-card-name">Osmar</h3>
<p class="shop-card-sub">Lusitano</p>
<div class="sc-info-tags">
<span class="sc-tag">6 anos</span> <span class="sc-tag">1.68mm</span> <span class="sc-tag sc-tag-accent">Calmo e meigo</span> </div>
</div>
</a>
</article>
</div>
<div class="swiper-slide">
<article class="shop-card wow fadeInUp mb-3 shop-card--restricted"
data-wow-delay="0.05s">
<a href="https://domcavalo.com/pt/cavalo/poejo"
data-horse-access-open
data-product-id="3"
data-product-name="Poejo"
data-product-slug="poejo"
>
<div class="shop-card-img">
<img src="https://domcavalo.com/images/upload/00002poej.png" alt="Poejo" loading="lazy" decoding="async" width="620" height="612">
</div>
<span class="shop-card-badge shop-card-badge--lock" aria-label="Acesso Restrito">
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<rect x="3" y="11" width="18" height="11" rx="2" ry="2"/>
<path d="M7 11V7a5 5 0 0 1 10 0v4"/>
</svg>
</span>
<div class="shop-card-body">
<h3 class="shop-card-name">Poejo</h3>
<p class="shop-card-sub">Lusitana</p>
<div class="sc-info-tags">
<span class="sc-tag">7 anos</span> <span class="sc-tag">1,57mm</span> <span class="sc-tag">Ensino/Dressage</span><span class="sc-tag">Lazer</span> <span class="sc-tag sc-tag-accent">Equilibrado</span> </div>
</div>
</a>
</article>
</div>
<div class="swiper-slide">
<article class="shop-card wow fadeInUp mb-3 shop-card--restricted"
data-wow-delay="0.1s">
<a href="https://domcavalo.com/pt/cavalo/quiroga"
data-horse-access-open
data-product-id="4"
data-product-name="Quiroga"
data-product-slug="quiroga"
>
<div class="shop-card-img">
<img src="https://domcavalo.com/images/upload/4m0a2577.jpg" alt="Quiroga" loading="lazy" decoding="async" width="1350" height="1080">
</div>
<span class="shop-card-badge shop-card-badge--lock" aria-label="Acesso Restrito">
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<rect x="3" y="11" width="18" height="11" rx="2" ry="2"/>
<path d="M7 11V7a5 5 0 0 1 10 0v4"/>
</svg>
</span>
<div class="shop-card-body">
<h3 class="shop-card-name">Quiroga</h3>
<p class="shop-card-sub">Lusitano</p>
<div class="sc-info-tags">
<span class="sc-tag">6 anos</span> <span class="sc-tag">1,65mm</span> <span class="sc-tag">Ensino/Dressage</span> <span class="sc-tag sc-tag-accent">Calmo e boa cabeça</span> </div>
</div>
</a>
</article>
</div>
<div class="swiper-slide">
<article class="shop-card wow fadeInUp mb-3 shop-card--restricted"
data-wow-delay="0.15s">
<a href="https://domcavalo.com/pt/cavalo/rio"
data-horse-access-open
data-product-id="5"
data-product-name="Rio"
data-product-slug="rio"
>
<div class="shop-card-img">
<img src="https://domcavalo.com/images/upload/img-5380.jpg" alt="Rio" loading="lazy" decoding="async" width="1201" height="1080">
</div>
<span class="shop-card-badge shop-card-badge--lock" aria-label="Acesso Restrito">
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<rect x="3" y="11" width="18" height="11" rx="2" ry="2"/>
<path d="M7 11V7a5 5 0 0 1 10 0v4"/>
</svg>
</span>
<div class="shop-card-body">
<h3 class="shop-card-name">Rio</h3>
<p class="shop-card-sub">Lusitano</p>
<div class="sc-info-tags">
<span class="sc-tag">5 anos</span> <span class="sc-tag">1.58mm</span> <span class="sc-tag sc-tag-accent">Calmo e Dócil</span> </div>
</div>
</a>
</article>
</div>
<div class="swiper-slide">
<article class="shop-card wow fadeInUp mb-3 shop-card--restricted"
data-wow-delay="0s">
<a href="https://domcavalo.com/pt/cavalo/podium"
data-horse-access-open
data-product-id="6"
data-product-name="Podium"
data-product-slug="podium"
>
<div class="shop-card-img">
<img src="https://domcavalo.com/images/upload/4m0a3545.jpg" alt="Podium" loading="lazy" decoding="async" width="1350" height="1080">
</div>
<span class="shop-card-badge shop-card-badge--lock" aria-label="Acesso Restrito">
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<rect x="3" y="11" width="18" height="11" rx="2" ry="2"/>
<path d="M7 11V7a5 5 0 0 1 10 0v4"/>
</svg>
</span>
<div class="shop-card-body">
<h3 class="shop-card-name">Podium</h3>
<p class="shop-card-sub">Lusitana</p>
<div class="sc-info-tags">
<span class="sc-tag">7 anos</span> <span class="sc-tag">1.57mm</span> <span class="sc-tag sc-tag-accent">Calmo e Dócil</span> </div>
</div>
</a>
</article>
</div>
<div class="swiper-slide">
<article class="shop-card wow fadeInUp mb-3 shop-card--restricted"
data-wow-delay="0.05s">
<a href="https://domcavalo.com/pt/cavalo/eliseo"
data-horse-access-open
data-product-id="7"
data-product-name="Eliseo"
data-product-slug="eliseo"
>
<div class="shop-card-img">
<img src="https://domcavalo.com/images/upload/16y-gey-schoolmaster2.jpeg" alt="Eliseo" loading="lazy" decoding="async" width="1080" height="1080">
</div>
<span class="shop-card-badge shop-card-badge--lock" aria-label="Acesso Restrito">
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<rect x="3" y="11" width="18" height="11" rx="2" ry="2"/>
<path d="M7 11V7a5 5 0 0 1 10 0v4"/>
</svg>
</span>
<div class="shop-card-body">
<h3 class="shop-card-name">Eliseo</h3>
<p class="shop-card-sub">Lusitana</p>
<div class="sc-info-tags">
<span class="sc-tag">17 anos</span> <span class="sc-tag">1.65mm</span> <span class="sc-tag sc-tag-accent">Calmo e super cabeça</span> </div>
</div>
</a>
</article>
</div>
<div class="swiper-slide">
<article class="shop-card wow fadeInUp mb-3 shop-card--restricted"
data-wow-delay="0.1s">
<a href="https://domcavalo.com/pt/cavalo/retinto"
data-horse-access-open
data-product-id="8"
data-product-name="Retinto"
data-product-slug="retinto"
>
<div class="shop-card-img">
<img src="https://domcavalo.com/images/upload/img-3933_6aad127d7c27d.jpg" alt="Retinto" loading="lazy" decoding="async" width="1080" height="1080">
</div>
<span class="shop-card-badge shop-card-badge--lock" aria-label="Acesso Restrito">
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<rect x="3" y="11" width="18" height="11" rx="2" ry="2"/>
<path d="M7 11V7a5 5 0 0 1 10 0v4"/>
</svg>
</span>
<div class="shop-card-body">
<h3 class="shop-card-name">Retinto</h3>
<p class="shop-card-sub">Lusitana</p>
<div class="sc-info-tags">
<span class="sc-tag">5 anos</span> <span class="sc-tag">1.62mm</span> <span class="sc-tag sc-tag-accent">Calmo e super cabeça</span> </div>
</div>
</a>
</article>
</div>
<div class="swiper-slide">
<article class="shop-card wow fadeInUp mb-3 shop-card--restricted"
data-wow-delay="0.15s">
<a href="https://domcavalo.com/pt/cavalo/romeu"
data-horse-access-open
data-product-id="12"
data-product-name="Romeu"
data-product-slug="romeu"
>
<div class="shop-card-img">
<img src="https://domcavalo.com/images/upload/4m0a5185_6ac4d3722e77f.jpg" alt="Romeu" loading="lazy" decoding="async" width="720" height="1080">
</div>
<span class="shop-card-badge shop-card-badge--lock" aria-label="Acesso Restrito">
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<rect x="3" y="11" width="18" height="11" rx="2" ry="2"/>
<path d="M7 11V7a5 5 0 0 1 10 0v4"/>
</svg>
</span>
<div class="shop-card-body">
<h3 class="shop-card-name">Romeu</h3>
<p class="shop-card-sub">Lusitana</p>
<div class="sc-info-tags">
<span class="sc-tag">5 anos</span> <span class="sc-tag">1,71mm</span> <span class="sc-tag sc-tag-accent">Calmo</span> </div>
</div>
</a>
</article>
</div>
</div>
<div class="horses-slider-pagination swiper-pagination"></div>
</div>
</div>
</section>
<!-- ===================== O QUE NÓS FAZEMOS ===================== -->
<section class="what-we-do dark-section">
<div class="container">
<div class="row align-items-center">
<div class="col-lg-6">
<div class="what-we-do-image">
<div class="what-we-do-img">
<figure>
<img src="/images/upload/captura-de-ecra-2024-04-02-as-165258-1.png" alt="Junta-te a nós" loading="lazy" width="1080" height="1080" data-ph-fallback="1" spellcheck="false" style="opacity: 1 !important; object-fit: cover !important;" decoding="async">
</figure>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="what-we-content">
<div class="section-title">
<h3>Junta-te a nós</h3>
<h2 class="mb-3" spellcheck="false">Mais do que um desporto.<div><span>A lifetime passion.</span></div></h2>
<p>Natureza, respeito pelos animais e vontade de evoluir a cada treino. Isso é a Dom Cavalo.</p>
</div>
<div class="what-we-body">
<div class="what-we-body-list" spellcheck="false">
<div class="what-we-body-item">
<div class="what-we-body-header"><div class="what-we-body-title"><h3>Serviço de Excelência</h3></div></div>
<div class="what-we-body-content"><p spellcheck="false">Treinos intensivos, personalizados e adaptados à sua medida, Competição, Estágios e Passeios únicos e variados no centro de Portugal.</p></div>
</div>
<div class="what-we-body-item">
<div class="what-we-body-header"><div class="what-we-body-title"><h3 spellcheck="false">O treino do cavalo lusitano</h3></div></div>
<div class="what-we-body-content"><p spellcheck="false">A nobreza, elegância, versatilidade e doçura desta raça é acompanhada diariamente e treinada por uma equipa de profissionais.</p></div>
</div>
<div class="what-we-body-divider"></div>
<div class="what-we-body-item">
<div class="what-we-body-header"><div class="what-we-body-title"><h3 spellcheck="true">O que nos distingue?</h3></div></div>
<div class="what-we-body-content"><p spellcheck="false">A experiência e dedicação de mais de duas décadas ao cavalo lusitano e ao cavaleiro, seja para lazer, competição ou no processo de juntar o conjunto perfeito.</p></div>
</div>
<div class="what-we-body-item">
<div class="what-we-body-header"><div class="what-we-body-title"><h3 spellcheck="false">Principal objetivo?</h3></div></div>
<div class="what-we-body-content"><p spellcheck="false">Criar uma simbiose perfeita entre cavalo e cavaleiro, respeitando sempre os seus objetivos e níveis mas em coordenação plena e sem esforço, aumentando a autoconfiança.</p></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- ===================== OS NOSSOS SERVIÇOS ===================== -->
<section class="our-benefits pb-3">
<div class="container">
<div class="row justify-content-between">
<div class="col-lg-6">
<div class="benefits-content">
<div class="section-title mb-5" spellcheck="false">
<h3>Os nossos serviços</h3>
<h2 spellcheck="false">A essência da DOM CAVALO </h2>
<div class="dc-richtext">
<p>Experiência, técnica e paixão fundem-se em cada serviço que oferecemos — sempre com foco no cavaleiro, no cavalo e na evolução harmoniosa do binómio.</p>
<p><strong>O que nos diferencia</strong></p>
<ul>
<li>Equipa experiente e certificada em múltiplas áreas da equitação</li>
<li>Ambiente seguro, acolhedor e preparado para todos os níveis</li>
</ul>
</div>
</div>
<div class="benefits-btn">
<a href="/pt/servicos" class="btn-default w-100">Saiba mais sobre os nossos serviços</a>
</div>
</div>
</div>
<div class="col-lg-5">
<div class="benefits-box">
<div class="benefits-item-list">
<div class="benefits-item"><div class="benefits-item-content"><h3>Lições Avançadas e para todos os níveis</h3><p spellcheck="false">Acompanhamento técnico e foco na segurança e confiança para cavaleiros que desejam evoluir mas também para ganhar precisão e alcançar novos objetivos.</p></div></div>
<div class="benefits-item"><div class="benefits-item-content"><h3>Treino |ntensivo Vs Competição</h3><p spellcheck="false"> Foco e gestão de treinos personalizados e adaptados à sua medida ocm a possibilidade de competir em Portugal.</p></div></div>
<div class="benefits-item"><div class="benefits-item-content"><h3>Estágios com Cavalos Lusitanos</h3><p spellcheck="false">Com base no trabalho diário com esta raça, venha aprender tudo sobre o seu treino e integre a nossa equipa com a aquisição de novos conhecimentos e novas experiências, dedicados à técnica, disciplina e ligação com o cavalo e equipa de profissionais.</p></div></div>
<div class="benefits-item"><div class="benefits-item-content"><h3>Passeios a cavalo únicos</h3><p spellcheck="false">Conheça lugares incríveis e crie memórias únicas através dos nossos passeios diferenciados: pela floresta, com monumentos ou até na praia.</p></div></div>
</div>
</div>
</div>
</div>
</div>
</section><section style="padding:100px 0; background:#fff;">
<div class="container">
<div class="row justify-content-center mb-5"><div class="col-lg-8 text-center">
<p style="color:var(--accent-color); font-size:.78rem; font-weight:700; letter-spacing:3px; text-transform:uppercase; margin-bottom:14px;">FAQ</p>
<h2 style="font-family:var(--default-font); color:var(--primary-color); font-size:2.2rem; font-weight:600;">Perguntas <em style="font-family:'Playfair Display',serif; color:var(--accent-color); font-style:italic;">frequentes</em></h2>
</div></div>
<div class="row justify-content-center"><div class="col-lg-9">
<div class="faq-accordion" id="faqCatalog">
<div class="accordion-item">
<h2 class="accordion-header" id="fcH1"><button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#fcC1" aria-expanded="true" aria-controls="fcC1">O que é o Cavalo Puro-Sangue Lusitano (PSL) e qual a sua origem?</button></h2>
<div id="fcC1" class="accordion-collapse collapse show" aria-labelledby="fcH1" data-bs-parent="#faqCatalog"><div class="accordion-body"><p>O Cavalo Puro-Sangue Lusitano (PSL) é uma raça equina de origem portuguesa, considerado o cavalo de sela mais antigo do mundo, com raízes na Península Ibérica e uma forte ligação histórica à guerra, à equitação clássica e ao toureio. É extremamente dócil, corajoso, inteligente e muito ligado ao ser humano, sendo em simultâneo atlético, ágil, de crinas sedosas e perfil convexo ou subconvexo. A sua pelagem é maioritariamente ruça ou castanha mas existe ainda em muitas outras cores.</p></div></div>
</div>
<div class="accordion-item">
<h2 class="accordion-header" id="fcH2"><button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#fcC2" aria-expanded="false" aria-controls="fcC2">Como saber a idade de um cavalo Lusitano através da regra de nomeação por letras do ano no Stud Book?</button></h2>
<div id="fcC2" class="accordion-collapse collapse" aria-labelledby="fcH2" data-bs-parent="#faqCatalog"><div class="accordion-body"><p>A idade de um cavalo Lusitano determina-se pela primeira letra do seu nome de registo. A regra segue o alfabeto português (excluindo K, W e Y) de forma sequencial por ano, sabendo-se que A corresponde a 1982, e que o ano de 2026 corresponde à letra X.</p></div></div>
</div>
<div class="accordion-item">
<h2 class="accordion-header" id="fcH3"><button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#fcC3" aria-expanded="false" aria-controls="fcC3">Como é feito o transporte e a transição de registo de propriedade a nível nacional ou internacional?</button></h2>
<div id="fcC3" class="accordion-collapse collapse" aria-labelledby="fcH3" data-bs-parent="#faqCatalog"><div class="accordion-body"><p>O transporte e a transição de registo de propriedade do cavalo Lusitano exigem a circulação obrigatória com o Passaporte (DIE/Livro Azul), o preenchimento de formulários de mudança de titularidade na APSL (Associação Portuguesa de Criadores do Cavalo Puro Sangue Lusitano) e o averbamento oficial na DGAV (Direção-Geral de Alimentação e Veterinária). Nós podemos ajudá-lo e acompanhar este processo.</p></div></div>
</div>
<div class="accordion-item">
<h2 class="accordion-header" id="fcH4"><button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#fcC4" aria-expanded="false" aria-controls="fcC4">Como posso adquirir o cavalo lusitano dos meus sonhos?</button></h2>
<div id="fcC4" class="accordion-collapse collapse" aria-labelledby="fcH4" data-bs-parent="#faqCatalog"><div class="accordion-body"><p>Conte com a nossa experiência e conhecimento nesta área, não só como criadores, vendedores e consultores mas também treinadores desta magnífica raça autóctone. Deve definir o seu objetivo (lazer, competição ou ambos, bem como se para passeio, ensino ou equitação de trabalho) Teste o animal pessoalmente ou com o seu treinador e valide se a documentação oficial está conforme.</p></div></div>
</div>
<div class="accordion-item">
<h2 class="accordion-header" id="fcH5"><button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#fcC5" aria-expanded="false" aria-controls="fcC5">Ao adquirir o cavalo lusitano dos meus sonhos que tipo de suporte posso ter?</button></h2>
<div id="fcC5" class="accordion-collapse collapse" aria-labelledby="fcH5" data-bs-parent="#faqCatalog"><div class="accordion-body"><p>Ao comprar-nos um cavalo lusitano, garantimos apoio pós venda, seja conselhos veterinários ou mesmo de maneio habitual e mais indicado para o cavalo em questão.</p></div></div>
</div>
<div class="accordion-item">
<h2 class="accordion-header" id="fcH6"><button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#fcC6" aria-expanded="false" aria-controls="fcC6">Quais as características que mais se destacam no cavalo lusitano?</button></h2>
<div id="fcC6" class="accordion-collapse collapse" aria-labelledby="fcH6" data-bs-parent="#faqCatalog"><div class="accordion-body"><p>Resposta à terceira pergunta. Edite este texto.</p></div></div>
</div>
</div>
</div></div>
</div>
</section><section style="padding:100px 0; background:#ebe7df; position:relative; overflow:hidden;">
<div class="container" style="position:relative; z-index:2;">
<div class="row align-items-center justify-content-between gy-4">
<div class="col-lg-7 text-center text-lg-start">
<p style="color:var(--accent-color); font-size:11px; font-weight:700; letter-spacing:3px; text-transform:uppercase; margin-bottom:14px;">Deseja saber mais sobre os nossos serviços?</p>
<h2 style="font-family:var(--default-font); color:var(--primary-color); font-size:clamp(1.8rem,3.2vw,2.4rem); font-weight:600; line-height:1.3; margin-bottom:16px;">Dúvidas, <em style="font-family:'Playfair Display',serif; color:var(--accent-color); font-style:italic;">contacte-nos</em>?</h2>
<p style="color:var(--text-color); font-size:.95rem; max-width:540px; margin:0 auto 0 0; line-height:1.8;">Não perca a nossa variedade de serviços de excelência e personalizados em torno do cavalo lusitano e do cavaleiro. Transformamos sonhos em realidade e experiências em memórias que perduram no tempo.</p>
</div>
<div class="col-lg-4 text-center text-lg-end">
<div class="d-flex flex-column gap-3 align-items-center align-items-lg-end">
<a href="/pt/contactos" style="display:inline-block; background:var(--accent-color); color:var(--primary-color); padding:16px 40px; border-radius:6px; font-weight:700; font-size:.85rem; letter-spacing:1.5px; text-transform:uppercase; text-decoration:none;">Contactar</a>
</div>
</div>
</div>
</div>
</section>
<div class="our-faqs">
<div class="container">
<div class="row section-row align-items-end mb-4 pb-4 border-bottom">
<div class="col-lg-6">
<div class="section-title">
<h3 class="wow fadeInUp">FAQs | Perguntas frequentes</h3>
<h2 class="text-anime-style-2" data-cursor="-opaque">Respostas úteis para novos <span>e experientes cavaleiros</span></h2>
</div>
</div>
<div class="col-lg-6">
<div class="section-btn wow fadeInUp" data-wow-delay="0.2s">
<a href="https://domcavalo.com/pt/contactos" class="btn-default">
Mais Duvidas Contacte
</a>
</div>
</div>
</div>
<div class="row align-items-center">
<div class="col-lg-6">
<div class="faqs-images">
<div class="faqs-image-box-1">
<div class="faqs-img">
<figure class="image-anime reveal">
<img src="/images/upload/puro2.jpg"
alt="FAQ Imagem 1"
loading="lazy" decoding="async" width="720" height="1080">
</figure>
</div>
<div class="faqs-img">
<figure class="image-anime reveal">
<img src="/images/upload/puro4_3.jpg"
alt="FAQ Imagem 2"
loading="lazy" decoding="async" width="736" height="860">
</figure>
</div>
</div>
<div class="faqs-image-box-2">
<div class="faqs-img">
<figure class="image-anime reveal">
<img src="/images/upload/puro.jpg"
alt="FAQ Imagem"
loading="lazy" decoding="async" width="510" height="636">
</figure>
</div>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="faq-accordion" id="faqaccordion">
<div class="accordion-item wow fadeInUp">
<h2 class="accordion-header" id="heading1">
<button class="accordion-button " type="button"
data-bs-toggle="collapse"
data-bs-target="#collapse1"
aria-expanded="true"
aria-controls="collapse1">
1. Preciso de experiência prévia para me inscrever?
</button>
</h2>
<div id="collapse1"
class="accordion-collapse collapse show "
aria-labelledby="heading1"
data-bs-parent="#faqaccordion">
<div class="accordion-body">
<p>Não precisa de experiência! Temos programas de equitação para iniciantes absolutos, bem como para cavaleiros experientes que desejam aperfeiçoar as suas técnicas.</p>
</div>
</div>
</div>
<div class="accordion-item wow fadeInUp">
<h2 class="accordion-header" id="heading2">
<button class="accordion-button collapsed " type="button"
data-bs-toggle="collapse"
data-bs-target="#collapse2"
aria-expanded="false"
aria-controls="collapse2">
2. Que faixas etárias aceitam?
</button>
</h2>
<div id="collapse2"
class="accordion-collapse collapse "
aria-labelledby="heading2"
data-bs-parent="#faqaccordion">
<div class="accordion-body">
<p>Oferecemos programas de equitação para crianças a partir dos 6 anos, além de sessões para adolescentes e adultos. O nosso Pónei Clube é especialmente concebido para os mais novos!</p>
</div>
</div>
</div>
<div class="accordion-item wow fadeInUp">
<h2 class="accordion-header" id="heading3">
<button class="accordion-button collapsed " type="button"
data-bs-toggle="collapse"
data-bs-target="#collapse3"
aria-expanded="false"
aria-controls="collapse3">
3. O que devo vestir para a primeira aula?
</button>
</h2>
<div id="collapse3"
class="accordion-collapse collapse "
aria-labelledby="heading3"
data-bs-parent="#faqaccordion">
<div class="accordion-body">
<p>Recomendamos roupa confortável, se possível elástica e fornecemos o Toque (capacete) de segurança para as primeiras aulas.</p>
</div>
</div>
</div>
<div class="accordion-item wow fadeInUp">
<h2 class="accordion-header" id="heading4">
<button class="accordion-button collapsed " type="button"
data-bs-toggle="collapse"
data-bs-target="#collapse4"
aria-expanded="false"
aria-controls="collapse4">
4. Os vossos instrutores são certificados?
</button>
</h2>
<div id="collapse4"
class="accordion-collapse collapse "
aria-labelledby="heading4"
data-bs-parent="#faqaccordion">
<div class="accordion-body">
<p>Sim, todos os nossos instrutores são qualificados e possuem certificação para garantir a segurança e a melhor aprendizagem possível para todos os alunos.</p>
</div>
</div>
</div>
<div class="accordion-item wow fadeInUp">
<h2 class="accordion-header" id="heading5">
<button class="accordion-button collapsed " type="button"
data-bs-toggle="collapse"
data-bs-target="#collapse5"
aria-expanded="false"
aria-controls="collapse5">
5. Disponibilizam serviços de penso/alojamento de cavalos?
</button>
</h2>
<div id="collapse5"
class="accordion-collapse collapse "
aria-labelledby="heading5"
data-bs-parent="#faqaccordion">
<div class="accordion-body">
<p>Sim, oferecemos serviço completo de penso para cavalos, com excelentes instalações (em boxes ou padock), alimentação de qualidade, cuidados diários atentos, inclusive maneio diário do cavalo.</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<footer class="main-footer bg-section dark-section">
<div class="container">
<div class="d-flex flex-column flex-lg-row justify-content-between align-items-center align-items-lg-end border-bottom-light mb-4 pb-5 text-center text-lg-start">
<div class="footer-logo mb-0 mb-lg-0">
<img src="https://domcavalo.com/themes/criativatek-shop-9/images/logo.png" alt="Dom Cavalo" class="mb-3" loading="lazy" decoding="async">
<p class="text-white footer-logo-text mb-4">
Coudelaria de excelência no coração de Portugal. Cavalos Lusitanos de pura raça, equitação clássica e experiências equestres inesquecíveis.
</p>
<div class="footer-contact-item d-flex flex-lg-row align-items-center align-items-lg-center mt-4 mt-lg-0">
<p class="mt-0 me-0 me-lg-4 mb-0 mb-lg-0">
<a href="/cdn-cgi/l/email-protection#345d5a525b74505b5957554255585b1a575b59">
<i class="fa-solid fa-envelope"></i>
<span class="__cf_email__" data-cfemail="dbb2b5bdb49bbfb4b6b8baadbab7b4f5b8b4b6">[email protected]</span>
</a>
</p>
</div>
</div>
<div class="footer-newsletter-form mb-0">
<!-- Footer Social Links Start -->
<div class="footer-social-links justify-content-center justify-content-lg-end">
<ul>
<li><a href="https://www.instagram.com/dom.cavalo/" target="_blank" rel="noopener" aria-label="Instagram"><i class="fa-brands fa-instagram"></i></a></li>
<li><a href="https://www.facebook.com/escolacavalos" target="_blank" rel="noopener" aria-label="Facebook"><i class="fa-brands fa-facebook-f"></i></a></li>
</ul>
</div>
</div>
</div>
<div class="row align-items-end">
<div class="col-lg-12">
<div class="footer-about mb-0 d-flex flex-column flex-lg-row align-items-center justify-content-between gap-4">
<div class="footer-menu">
<ul class="d-flex justify-content-center justify-content-lg-start">
<li><a href="https://domcavalo.com/pt">Home</a></li>
<li><a href="https://domcavalo.com/pt/cavalos-a-venda">Cavalos</a></li>
<li><a href="https://domcavalo.com/pt/servicos">Montar a Cavalo</a></li>
<li><a href="https://domcavalo.com/pt/alojamentos">Turismo Lusitano</a></li>
<li><a href="https://domcavalo.com/pt/contactos">Contacto</a></li>
<li><a href="https://domcavalo.com/pt/sobre-nos">Sobre Nós</a></li>
</ul>
</div>
<a href="https://domcavalo.com/documentos/FichaProjeto_DomCavalo.pdf" target="_blank" rel="noopener"
class="footer-financiamento-link" data-descarregar="FichaProjeto_DomCavalo.pdf"
title="Ficha do projeto cofinanciado (PDF)">
<img src="https://domcavalo.com/themes/criativatek-shop-9/images/financiamento/barra-financiamento-prr.jpg"
alt="PRR – Plano de Recuperação e Resiliência, República Portuguesa e Financiado pela União Europeia – NextGenerationEU" width="1510" height="150"
loading="lazy" decoding="async">
</a>
</div>
</div>
<div class="col-lg-12">
<div class="footer-copyright mt-4 d-flex flex-column flex-lg-row align-items-center justify-content-between">
<div class="footer-copyright-text mb-2 mb-lg-0">
<p>Copyright © 2025 Todos os direitos reservados à Dom Cavalo | Criativatek</p>
</div>
<div class="footer-privacy-policy text-center text-lg-end">
<ul>
<li><a href="#">Política de Privacidade</a></li>
<li><a href="#">Termos e condições</a></li>
<li><a href="#">Política de cookies</a></li>
<li><a href="#">Livro de reclamações</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
</footer>
<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script src="/themes/criativatek-shop-9/js/jquery-3.7.1.min.js" defer></script>
<script src="/themes/criativatek-shop-9/js/bootstrap.min.js" defer></script>
<script src="/themes/criativatek-shop-9/js/validator.min.js" defer></script>
<script src="/themes/criativatek-shop-9/js/jquery.slicknav.js" defer></script>
<script src="/themes/criativatek-shop-9/js/swiper-bundle.min.js" defer></script>
<script src="/themes/criativatek-shop-9/js/jquery.waypoints.min.js" defer></script>
<script src="/themes/criativatek-shop-9/js/jquery.counterup.min.js" defer></script>
<script src="/themes/criativatek-shop-9/js/jquery.magnific-popup.min.js" defer></script>
<script src="/themes/criativatek-shop-9/js/SmoothScroll.js" defer></script>
<script src="/themes/criativatek-shop-9/js/gsap.min.js" defer></script>
<script src="/themes/criativatek-shop-9/js/magiccursor.js" defer></script>
<script src="/themes/criativatek-shop-9/js/SplitText.js" defer></script>
<script src="/themes/criativatek-shop-9/js/ScrollTrigger.min.js" defer></script>
<script src="/themes/criativatek-shop-9/js/jquery.mb.YTPlayer.min.js" defer></script>
<script src="/themes/criativatek-shop-9/js/wow.min.js" defer></script>
<script src="/themes/criativatek-shop-9/js/function.js?v=1789658454" defer></script>
<script src="/themes/criativatek-shop-9/js/header.js?v=1783599165" defer></script>
<script src="/themes/criativatek-shop-9/js/horse-access.js?v=1778685284" defer></script>
<script>
// O widget do AI Chat é injetado por middleware em todas as páginas quando está
// activo no backoffice. Este CTA do hero apenas clica na bolha do widget — não
// duplica nada nem depende dos internos dele. Se o chat estiver desligado, a
// bolha não existe e o botão fica escondido.
document.addEventListener('DOMContentLoaded', function () {
// querySelectorAll e não querySelector: o hero desenha um CTA por banner,
// e com dois ou mais banners na homepage só o primeiro ficaria ligado.
var ctas = document.querySelectorAll('.hero-chat-cta');
if (! ctas.length) return;
function bolha() { return document.querySelector('.ai-chat-fab-btn'); }
function mostrarSeHouverChat(tentativa) {
if (bolha()) {
ctas.forEach(function (cta) { cta.hidden = false; });
return;
}
// O widget monta com Alpine, que pode arrancar depois deste script.
if (tentativa < 20) setTimeout(function () { mostrarSeHouverChat(tentativa + 1); }, 250);
}
ctas.forEach(function (cta) {
var botao = cta.querySelector('[data-open-ai-chat]');
if (botao) botao.addEventListener('click', function () {
var b = bolha();
if (b) b.click();
});
});
mostrarSeHouverChat(0);
});
</script>
<script>
// Links com data-descarregar (a ficha do projeto no rodapé): o href abre o
// PDF num separador novo e este <a download> temporário, criado no mesmo
// clique, guarda-o também no computador com o nome indicado.
document.addEventListener('click', function (e) {
var link = e.target.closest('[data-descarregar]');
if (!link) return;
var descarga = document.createElement('a');
descarga.href = link.href;
descarga.download = link.dataset.descarregar;
document.body.appendChild(descarga);
descarga.click();
descarga.remove();
});
</script>
<div class="horse-access-modal"
id="horseAccessModal"
data-state="request"
aria-hidden="true"
role="dialog"
aria-modal="true"
aria-labelledby="horseAccessModalTitle">
<div class="horse-access-modal__overlay" data-ha-close></div>
<div class="horse-access-modal__dialog">
<div class="horse-access-modal__top"></div>
<button type="button" class="horse-access-modal__close" data-ha-close aria-label="Fechar">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">
<line x1="18" y1="6" x2="6" y2="18"/>
<line x1="6" y1="6" x2="18" y2="18"/>
</svg>
</button>
<div class="horse-access-modal__body">
<p class="horse-access-modal__eyebrow">Acesso Restrito</p>
<h2 class="horse-access-modal__title" id="horseAccessModalTitle">
<span data-ha-product-name>Cavalo</span>
</h2>
<div class="horse-access-modal__panel" data-ha-panel="request">
<p class="horse-access-modal__lead">
A ficha deste cavalo está protegida. Preencha os seus dados para receber um código de acesso único por email.
</p>
<form id="horseAccessRequestForm" class="ha-form" novalidate>
<input type="hidden" name="_token" value="CwAYsx0CnbL6HqKHiINjg8BpDLDxmA2rMQhWkND1" autocomplete="off"> <input type="hidden" name="product_id" data-ha-product-id>
<div class="ha-honeypot" aria-hidden="true">
<label for="ha-company">Empresa (deixe em branco)</label>
<input type="text" id="ha-company" name="company" tabindex="-1" autocomplete="off">
</div>
<div class="ha-field">
<label class="ha-field__label" for="ha-name">Nome Completo</label>
<input class="ha-field__input" id="ha-name" name="name" type="text" required>
<p class="ha-field__error">Por favor indique o seu nome.</p>
</div>
<div class="ha-field">
<label class="ha-field__label" for="ha-email">Email</label>
<input class="ha-field__input" id="ha-email" name="email" type="email" required>
<p class="ha-field__error">Email inválido.</p>
</div>
<div class="ha-field">
<label class="ha-field__label" for="ha-phone">Telefone <span class="ha-field__opt">(opcional)</span></label>
<input class="ha-field__input" id="ha-phone" name="phone" type="tel">
<p class="ha-field__error"></p>
</div>
<div class="ha-field">
<label class="ha-field__label" for="ha-message">Mensagem <span class="ha-field__opt">(opcional)</span></label>
<textarea class="ha-field__input ha-field__input--textarea" id="ha-message" name="message" rows="3" maxlength="2000"></textarea>
<p class="ha-field__error"></p>
</div>
<button type="submit" class="ha-btn ha-btn--primary">
Pedir código de acesso
</button>
<button type="button" class="ha-link" data-ha-switch="code">
Já tenho um código
</button>
</form>
</div>
<div class="horse-access-modal__panel" data-ha-panel="code" hidden>
<p class="horse-access-modal__lead">
Introduza o código de 12 caracteres que recebeu por email.
</p>
<form id="horseAccessCodeForm" class="ha-form" novalidate>
<input type="hidden" name="_token" value="CwAYsx0CnbL6HqKHiINjg8BpDLDxmA2rMQhWkND1" autocomplete="off"> <input type="hidden" name="product_id" data-ha-product-id>
<div class="ha-field">
<label class="ha-field__label" for="ha-code">Código de acesso</label>
<input class="ha-field__input ha-field__input--code"
id="ha-code" name="code" type="text"
maxlength="12" minlength="12"
autocomplete="off" spellcheck="false"
required>
<p class="ha-field__error">Código inválido.</p>
</div>
<button type="submit" class="ha-btn ha-btn--primary">
Desbloquear cavalo
</button>
<button type="button" class="ha-link" data-ha-switch="request">
Pedir um novo código
</button>
</form>
</div>
<div class="horse-access-modal__panel ha-success" data-ha-panel="request-success" hidden>
<div class="ha-success__icon">
<svg width="36" height="36" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/>
<polyline points="22 4 12 14.01 9 11.01"/>
</svg>
</div>
<h3>Pedido Enviado</h3>
<p>Recebemos o seu pedido. Em breve receberá um email com o código de acesso.</p>
<button type="button" class="ha-link" data-ha-switch="code">
Já recebi o código
</button>
</div>
</div>
</div>
</div>
<!-- Back to Top -->
<button id="back-to-top" aria-label="Voltar ao topo"
style="position:fixed;bottom:32px;right:32px;z-index:100000;width:48px;height:48px;border-radius:50%;border:1.5px solid var(--accent-color);background:#fff;color:var(--primary-color);display:flex;align-items:center;justify-content:center;cursor:pointer;opacity:0;transform:translateY(12px);transition:opacity .35s,transform .35s,background .25s,border-color .25s;pointer-events:none;box-shadow:0 4px 20px rgba(0,0,0,0.08);">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><line x1="12" y1="19" x2="12" y2="5"/><polyline points="5 12 12 5 19 12"/></svg>
</button>
<style>
/* ─── Reset & base ─────────────────────────────────────────── */
.ai-chat-fab,
.ai-chat-drawer,
.ai-chat-drawer * {
box-sizing: border-box;
}
/* ─── FAB button ───────────────────────────────────────────── */
.ai-chat-fab {
position: fixed;
right: 24px;
bottom: 24px;
z-index: 9999;
display: flex;
flex-direction: column;
align-items: flex-end;
gap: 10px;
}
.ai-chat-fab-btn {
width: 56px;
height: 56px;
border-radius: 50%;
background: #423a34;
border: none;
cursor: pointer;
box-shadow: 0 4px 20px rgba(0,0,0,0.22), 0 1px 4px rgba(0,0,0,0.12);
display: flex;
align-items: center;
justify-content: center;
transition: transform 0.18s cubic-bezier(.34,1.56,.64,1), box-shadow 0.18s ease;
color: white;
position: relative;
}
.ai-chat-fab-btn:hover {
transform: scale(1.1);
box-shadow: 0 8px 28px rgba(0,0,0,0.26), 0 2px 6px rgba(0,0,0,0.14);
}
.ai-chat-fab-btn:active {
transform: scale(0.96);
}
/* ─── Drawer ───────────────────────────────────────────────── */
.ai-chat-drawer {
position: fixed;
right: 24px;
bottom: 24px;
z-index: 9999;
width: 368px;
max-height: 560px;
background: #ffffff;
border-radius: 20px;
box-shadow: 0 12px 48px rgba(0,0,0,0.16), 0 2px 8px rgba(0,0,0,0.08);
display: flex;
flex-direction: column;
overflow: hidden;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
font-size: 14px;
border: 1px solid rgba(0,0,0,0.06);
}
/* ─── Header ───────────────────────────────────────────────── */
.ai-chat-header {
background: #423a34;
padding: 16px 18px;
display: flex;
align-items: center;
gap: 12px;
flex-shrink: 0;
position: relative;
}
.ai-chat-header-avatar {
width: 40px;
height: 40px;
border-radius: 50%;
background: rgba(255,255,255,0.2);
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
color: white;
}
.ai-chat-header-info {
flex: 1;
min-width: 0;
}
.ai-chat-header-title {
font-weight: 700;
font-size: 15px;
color: white;
line-height: 1.2;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.ai-chat-header-status {
display: flex;
align-items: center;
gap: 5px;
margin-top: 2px;
}
.ai-chat-status-dot {
width: 7px;
height: 7px;
border-radius: 50%;
background: #4ade80;
box-shadow: 0 0 0 2px rgba(74,222,128,0.3);
flex-shrink: 0;
}
.ai-chat-header-status-text {
font-size: 12px;
color: rgba(255,255,255,0.82);
font-weight: 400;
}
.ai-chat-close-btn {
background: rgba(255,255,255,0.15);
border: none;
color: white;
cursor: pointer;
width: 30px;
height: 30px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
transition: background 0.15s ease;
line-height: 1;
}
.ai-chat-close-btn:hover {
background: rgba(255,255,255,0.28);
}
/* ─── Messages area ────────────────────────────────────────── */
.ai-chat-messages {
flex: 1;
overflow-y: auto;
padding: 16px;
display: flex;
flex-direction: column;
gap: 8px;
background: #f8f9fb;
scroll-behavior: smooth;
}
.ai-chat-messages::-webkit-scrollbar {
width: 4px;
}
.ai-chat-messages::-webkit-scrollbar-track {
background: transparent;
}
.ai-chat-messages::-webkit-scrollbar-thumb {
background: rgba(0,0,0,0.12);
border-radius: 4px;
}
/* ─── Bubbles ──────────────────────────────────────────────── */
.ai-chat-bubble {
max-width: 80%;
padding: 10px 14px;
border-radius: 16px;
line-height: 1.5;
word-break: break-word;
white-space: pre-wrap;
font-size: 14px;
animation: ai-chat-bubble-in 0.18s ease-out both;
}
@keyframes ai-chat-bubble-in {
from { opacity: 0; transform: translateY(6px) scale(0.97); }
to { opacity: 1; transform: translateY(0) scale(1); }
}
.ai-chat-bubble-user {
align-self: flex-end;
background: #423a34;
color: white;
border-bottom-right-radius: 4px;
}
.ai-chat-bubble-assistant {
align-self: flex-start;
background: #ffffff;
color: #111827;
border-bottom-left-radius: 4px;
box-shadow: 0 1px 3px rgba(0,0,0,0.07), 0 0 0 1px rgba(0,0,0,0.04);
}
/* Link inline (assistente de loja) */
.ai-chat-link { color: #4F46E5; font-weight: 600; text-decoration: underline; }
/* Cartões de produto recomendados pelo assistente de loja */
.ai-chat-products { display: flex; flex-direction: column; gap: 8px; margin-top: 10px; }
.ai-chat-product {
display: flex; align-items: center; gap: 10px;
padding: 8px; border: 1px solid rgba(0,0,0,0.08); border-radius: 10px;
background: #fbfbfd; text-decoration: none; color: inherit;
transition: background .15s ease, box-shadow .15s ease;
}
.ai-chat-product:hover { background: #f3f4f6; box-shadow: 0 1px 4px rgba(0,0,0,0.08); }
.ai-chat-product-img { width: 46px; height: 46px; object-fit: cover; border-radius: 8px; flex-shrink: 0; background: #eee; }
.ai-chat-product-info { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.ai-chat-product-name { font-size: 13px; font-weight: 600; line-height: 1.25; }
.ai-chat-product-price { font-size: 13px; color: #4F46E5; font-weight: 700; }
.ai-chat-product-stock { font-size: 11px; color: #b91c1c; }
/* Blinking cursor while streaming */
.ai-chat-bubble-streaming::after {
content: '▋';
display: inline-block;
animation: ai-chat-blink 0.65s step-end infinite;
font-size: 0.78em;
margin-left: 2px;
vertical-align: baseline;
color: rgba(0,0,0,0.3);
}
@keyframes ai-chat-blink {
0%, 100% { opacity: 1; }
50% { opacity: 0; }
}
/* ─── Typing indicator ─────────────────────────────────────── */
.ai-chat-typing {
align-self: flex-start;
background: #ffffff;
padding: 10px 14px;
border-radius: 16px;
border-bottom-left-radius: 4px;
box-shadow: 0 1px 3px rgba(0,0,0,0.07), 0 0 0 1px rgba(0,0,0,0.04);
display: flex;
align-items: center;
gap: 4px;
animation: ai-chat-bubble-in 0.18s ease-out both;
}
.ai-chat-typing-dot {
width: 6px;
height: 6px;
border-radius: 50%;
background: #9ca3af;
animation: ai-chat-typing-bounce 1.2s ease-in-out infinite;
}
.ai-chat-typing-dot:nth-child(2) { animation-delay: 0.16s; }
.ai-chat-typing-dot:nth-child(3) { animation-delay: 0.32s; }
@keyframes ai-chat-typing-bounce {
0%, 60%, 100% { transform: translateY(0); }
30% { transform: translateY(-5px); }
}
/* ─── Lead capture form ────────────────────────────────────── */
.ai-chat-lead-form {
padding: 14px 16px;
border-top: 1px solid #f0f0f0;
background: #fff;
flex-shrink: 0;
}
.ai-chat-lead-title {
font-weight: 600;
font-size: 13px;
color: #111827;
margin-bottom: 10px;
line-height: 1.4;
}
.ai-chat-lead-form input {
width: 100%;
padding: 9px 12px;
border: 1px solid #e5e7eb;
border-radius: 10px;
font-size: 13px;
font-family: inherit;
margin-bottom: 7px;
outline: none;
background: #f9fafb;
color: #111827;
transition: border-color 0.15s, background 0.15s;
}
.ai-chat-lead-form input:focus {
border-color: #423a34;
background: #fff;
}
.ai-chat-lead-form input::placeholder {
color: #9ca3af;
}
.ai-chat-lead-submit {
width: 100%;
padding: 10px;
background: #423a34;
color: white;
border: none;
border-radius: 10px;
cursor: pointer;
font-weight: 600;
font-size: 13px;
font-family: inherit;
transition: opacity 0.15s;
letter-spacing: 0.01em;
}
.ai-chat-lead-submit:hover { opacity: 0.88; }
/* ─── Handoff humano ───────────────────────────────────────── */
.ai-chat-escalate-row {
display: flex;
justify-content: center;
padding: 6px 14px 0;
}
.ai-chat-escalate-btn {
display: inline-flex;
align-items: center;
gap: 5px;
padding: 5px 12px;
background: transparent;
color: #6b7280;
border: 1px solid #e5e7eb;
border-radius: 999px;
cursor: pointer;
font-size: 12px;
font-weight: 600;
font-family: inherit;
transition: color 0.15s, border-color 0.15s, background 0.15s;
}
.ai-chat-escalate-btn:hover {
color: #423a34;
border-color: #423a34;
background: rgba(0,0,0,0.02);
}
/* ─── Input bar ────────────────────────────────────────────── */
.ai-chat-input-bar {
display: flex;
align-items: center;
gap: 8px;
padding: 12px 14px;
border-top: 1px solid #f0f0f0;
background: #fff;
flex-shrink: 0;
}
.ai-chat-input {
flex: 1;
padding: 10px 14px;
border: 1px solid #e5e7eb;
border-radius: 24px;
outline: none;
font-size: 14px;
font-family: inherit;
background: #f9fafb;
color: #111827;
transition: border-color 0.15s, background 0.15s, box-shadow 0.15s;
}
.ai-chat-input:focus {
border-color: #423a34;
background: #fff;
box-shadow: 0 0 0 3px #423a341a;
}
.ai-chat-input::placeholder { color: #9ca3af; }
.ai-chat-input:disabled { opacity: 0.5; }
.ai-chat-send-btn {
width: 38px;
height: 38px;
border-radius: 50%;
background: #423a34;
color: white;
border: none;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
transition: transform 0.15s cubic-bezier(.34,1.56,.64,1), opacity 0.15s;
}
.ai-chat-send-btn:hover:not(:disabled) {
transform: scale(1.1);
}
.ai-chat-send-btn:active:not(:disabled) {
transform: scale(0.94);
}
.ai-chat-send-btn:disabled { opacity: 0.35; cursor: default; }
/* ─── Responsive (mobile) ──────────────────────────────────── */
@media (max-width: 480px) {
.ai-chat-drawer {
width: calc(100vw - 32px);
max-height: 70vh;
right: 16px;
bottom: 16px;
}
.ai-chat-fab {
right: 16px;
bottom: 16px;
}
}
</style>
<div x-data="aiChatWidget()" x-init="init()">
<div class="ai-chat-fab" x-show="!isOpen"
x-transition:enter="transition ease-out duration-200"
x-transition:enter-start="opacity-0 scale-90"
x-transition:enter-end="opacity-100 scale-100"
x-transition:leave="transition ease-in duration-150"
x-transition:leave-start="opacity-100 scale-100"
x-transition:leave-end="opacity-0 scale-90">
<button class="ai-chat-fab-btn" @click="openChat()" aria-label="Abrir chat">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20 2H4C2.9 2 2 2.9 2 4V22L6 18H20C21.1 18 22 17.1 22 16V4C22 2.9 21.1 2 20 2Z" fill="currentColor"/>
</svg>
</button>
</div>
<div class="ai-chat-drawer"
x-show="isOpen"
x-transition:enter="transition ease-out duration-220"
x-transition:enter-start="opacity-0 translate-y-3 scale-96"
x-transition:enter-end="opacity-100 translate-y-0 scale-100"
x-transition:leave="transition ease-in duration-160"
x-transition:leave-start="opacity-100 translate-y-0 scale-100"
x-transition:leave-end="opacity-0 translate-y-2 scale-97">
<div class="ai-chat-header">
<div class="ai-chat-header-avatar">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none">
<path d="M12 2C6.48 2 2 6.48 2 12C2 13.54 2.36 14.99 3 16.28L2 22L7.72 21C9.01 21.64 10.46 22 12 22C17.52 22 22 17.52 22 12C22 6.48 17.52 2 12 2Z" fill="white" fill-opacity="0.9"/>
<path d="M8 11.5C8 10.67 8.67 10 9.5 10C10.33 10 11 10.67 11 11.5C11 12.33 10.33 13 9.5 13C8.67 13 8 12.33 8 11.5ZM13 11.5C13 10.67 13.67 10 14.5 10C15.33 10 16 10.67 16 11.5C16 12.33 15.33 13 14.5 13C13.67 13 13 12.33 13 11.5Z" fill="#423a34"/>
</svg>
</div>
<div class="ai-chat-header-info">
<div class="ai-chat-header-title">Assistente Virtual</div>
<div class="ai-chat-header-status">
<span class="ai-chat-status-dot"></span>
<span class="ai-chat-header-status-text">Online — responde em segundos</span>
</div>
</div>
<button class="ai-chat-close-btn" @click="isOpen = false" aria-label="Fechar">
<svg width="14" height="14" viewBox="0 0 14 14" fill="none">
<path d="M1 1L13 13M13 1L1 13" stroke="white" stroke-width="2" stroke-linecap="round"/>
</svg>
</button>
</div>
<div class="ai-chat-messages" x-ref="messagesContainer">
<template x-for="msg in messages" :key="msg.id">
<div :class="{
'ai-chat-bubble': true,
'ai-chat-bubble-user': msg.role === 'user',
'ai-chat-bubble-assistant': msg.role === 'assistant',
'ai-chat-bubble-streaming': msg.isStreaming
}" x-html="renderMessage(msg)">
</div>
</template>
<div class="ai-chat-typing" x-show="isTyping">
<span class="ai-chat-typing-dot"></span>
<span class="ai-chat-typing-dot"></span>
<span class="ai-chat-typing-dot"></span>
</div>
</div>
<div class="ai-chat-input-bar" x-show="!showLeadForm">
<input type="text" class="ai-chat-input"
x-model="inputMessage"
@keyup.enter="sendMessage()"
:disabled="isTyping || !sessionId"
placeholder="Ola! Sou o assistente da Dom Cavalo. Posso ajudar com cavalos lusitanos a venda, aulas, alojamento em Leiria e Coruche, packs e atividades. O que procura?"
autocomplete="off">
<button class="ai-chat-send-btn" @click="sendMessage()" :disabled="isTyping || !inputMessage.trim() || !sessionId" aria-label="Enviar">
<svg width="15" height="15" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M2 21L23 12L2 3V10L17 12L2 14V21Z" fill="currentColor"/>
</svg>
</button>
</div>
</div>
</div>
<script>
(function() {
// Load Alpine.js if not already present
if (typeof Alpine === 'undefined') {
var alpineScript = document.createElement('script');
alpineScript.src = 'https://cdn.jsdelivr.net/npm/alpinejs@3/dist/cdn.min.js';
alpineScript.defer = true;
document.head.appendChild(alpineScript);
}
function aiChatWidget() {
return {
isOpen: false,
messages: [],
inputMessage: '',
isTyping: false,
sessionId: null,
showLeadForm: false,
leadSubmitted: false,
escalated: false,
lead: { name: '', email: '', phone: '' },
// Render seguro: escapa SEMPRE o HTML (anti-XSS de input do utilizador
// e de output do LLM); só nas mensagens do assistente converte links
// markdown [texto](url) em <a> clicáveis (assistente de loja) + quebras
// de linha. Sem outro HTML cru.
renderMessage(msg) {
var escapeHtml = function (text) {
return String(text || '').replace(/[&<>"']/g, function (character) {
return ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' })[character];
});
};
var html = escapeHtml(msg.content);
if (msg.role === 'assistant') {
html = html.replace(/\[([^\]]+)\]\((https?:\/\/[^\s)]+|\/[^\s)]+)\)/g, function (match, label, url) {
return '<a href="' + url + '" target="_blank" rel="noopener noreferrer" class="ai-chat-link">' + label + '</a>';
});
}
html = html.replace(/\n/g, '<br>');
// Cartões de produto (assistente de loja) — todos os campos escapados.
if (msg.role === 'assistant' && Array.isArray(msg.products) && msg.products.length) {
var cards = msg.products.map(function (product) {
var image = product.image ? '<img src="' + escapeHtml(product.image) + '" alt="" class="ai-chat-product-img" loading="lazy">' : '';
var price = product.price ? '<span class="ai-chat-product-price">' + escapeHtml(product.price) + '</span>' : '';
var stock = product.in_stock ? '' : '<span class="ai-chat-product-stock">esgotado</span>';
return '<a class="ai-chat-product" href="' + escapeHtml(product.url) + '" target="_blank" rel="noopener noreferrer" data-pid="' + escapeHtml(String(product.id)) + '">'
+ image
+ '<span class="ai-chat-product-info"><span class="ai-chat-product-name">' + escapeHtml(product.name) + '</span>' + price + stock + '</span>'
+ '</a>';
}).join('');
html += '<div class="ai-chat-products">' + cards + '</div>';
}
return html;
},
init() {
this.sessionId = sessionStorage.getItem('ai_chat_session_id') || null;
this.leadSubmitted = sessionStorage.getItem('ai_chat_lead_submitted') === '1';
// Tracking de cliques nos cartões de produto (delegação — o HTML
// dos cartões é injectado via x-html, fora do binding do Alpine).
var self = this;
document.addEventListener('click', function (event) {
var card = event.target && event.target.closest ? event.target.closest('.ai-chat-product') : null;
if (card && card.dataset && card.dataset.pid) {
self.trackProductClick(card.dataset.pid);
}
});
},
// Regista (best-effort) o clique num produto recomendado pelo chat.
trackProductClick(productId) {
if (!this.sessionId || !productId) { return; }
try {
fetch('/api/ai-chat/product-click', {
method: 'POST',
headers: this.headers(),
body: JSON.stringify({ session_id: this.sessionId, product_id: productId }),
keepalive: true,
}).catch(function () {});
} catch (e) { /* nunca bloquear a navegação */ }
},
async openChat() {
this.isOpen = true;
if (!this.sessionId) {
await this.startSession();
}
this.$nextTick(() => this.scrollToBottom());
},
async startSession() {
try {
const response = await fetch('/api/ai-chat/start', {
method: 'POST',
headers: this.headers(),
body: JSON.stringify({ page_url: window.location.href }),
});
const data = await response.json();
if (data.session_id) {
this.sessionId = data.session_id;
sessionStorage.setItem('ai_chat_session_id', this.sessionId);
}
} catch (startError) {
console.warn('AI Chat: failed to start session', startError);
}
},
async sendMessage() {
const message = this.inputMessage.trim();
if (!message || this.isTyping || !this.sessionId) return;
this.inputMessage = '';
this.messages.push({ id: Date.now(), role: 'user', content: message, isStreaming: false });
this.isTyping = true;
this.scrollToBottom();
const assistantMsgId = Date.now() + 1;
try {
const response = await fetch('/api/ai-chat/stream', {
method: 'POST',
headers: this.headers(),
body: JSON.stringify({ session_id: this.sessionId, message: message }),
});
if (response.status === 429) {
this.isTyping = false;
this.messages.push({ id: assistantMsgId, role: 'assistant', content: 'Enviou demasiadas mensagens. Aguarde um momento e tente novamente.', isStreaming: false });
this.scrollToBottom();
return;
}
if (!response.ok || !response.body) {
this.isTyping = false;
this.messages.push({ id: assistantMsgId, role: 'assistant', content: 'Não foi possível obter uma resposta de momento.', isStreaming: false });
this.scrollToBottom();
return;
}
const reader = response.body.getReader();
const decoder = new TextDecoder();
let buffer = '';
let gotFirstToken = false;
let assistantIdx = -1;
let pendingProducts = null;
while (true) {
const { done, value } = await reader.read();
if (done) break;
buffer += decoder.decode(value, { stream: true });
const lines = buffer.split('\n');
buffer = lines.pop() ?? '';
for (const line of lines) {
const trimmedLine = line.trim();
if (!trimmedLine.startsWith('data: ')) continue;
const dataStr = trimmedLine.slice(6);
if (dataStr === '[DONE]') break;
let parsed;
try { parsed = JSON.parse(dataStr); } catch { continue; }
if (parsed.error) {
this.isTyping = false;
if (assistantIdx >= 0) {
this.messages[assistantIdx].content += '\n\n[' + parsed.error + ']';
this.messages[assistantIdx].isStreaming = false;
} else {
this.messages.push({ id: assistantMsgId, role: 'assistant', content: parsed.error, isStreaming: false });
}
this.scrollToBottom();
break;
}
if (parsed.products) {
if (assistantIdx >= 0) {
this.messages[assistantIdx].products = parsed.products;
} else {
pendingProducts = parsed.products;
}
continue;
}
if (parsed.token) {
if (!gotFirstToken) {
gotFirstToken = true;
this.isTyping = false;
assistantIdx = this.messages.length;
this.messages.push({ id: assistantMsgId, role: 'assistant', content: parsed.token, isStreaming: true, products: pendingProducts || [] });
} else {
this.messages[assistantIdx].content += parsed.token;
}
this.scrollToBottom();
}
}
}
if (assistantIdx >= 0) {
this.messages[assistantIdx].isStreaming = false;
}
if (!gotFirstToken) {
this.messages.push({ id: assistantMsgId, role: 'assistant', content: 'Não foi possível obter uma resposta de momento.', isStreaming: false });
this.scrollToBottom();
}
} catch (fetchError) {
this.messages.push({ id: assistantMsgId, role: 'assistant', content: 'Erro de ligação. Verifique a sua ligação à internet e tente novamente.', isStreaming: false });
this.scrollToBottom();
} finally {
this.isTyping = false;
}
},
async submitLead() {
if (!this.sessionId) return;
try {
await fetch('/api/ai-chat/lead', {
method: 'POST',
headers: this.headers(),
body: JSON.stringify({
session_id: this.sessionId,
name: this.lead.name,
email: this.lead.email,
phone: this.lead.phone,
}),
});
} catch (submitError) {
console.warn('AI Chat: failed to submit lead', submitError);
} finally {
this.showLeadForm = false;
this.leadSubmitted = true;
sessionStorage.setItem('ai_chat_lead_submitted', '1');
this.messages.push({ id: Date.now(), role: 'assistant', content: 'Obrigado! Os seus dados foram recebidos. Entraremos em contacto em breve.', isStreaming: false });
this.scrollToBottom();
}
},
async escalate() {
if (!this.sessionId || this.escalated) return;
this.escalated = true;
// Última mensagem do utilizador como contexto do pedido.
let lastUserMessage = '';
for (let index = this.messages.length - 1; index >= 0; index--) {
if (this.messages[index].role === 'user') { lastUserMessage = this.messages[index].content; break; }
}
try {
await fetch('/api/ai-chat/escalate', {
method: 'POST',
headers: this.headers(),
body: JSON.stringify({
session_id: this.sessionId,
name: this.lead.name,
email: this.lead.email,
phone: this.lead.phone,
message: lastUserMessage,
}),
});
} catch (escalateError) {
console.warn('AI Chat: failed to escalate', escalateError);
} finally {
this.messages.push({ id: Date.now(), role: 'assistant', content: 'Pedimos a uma pessoa da equipa para continuar. Se deixou contacto, responderemos em breve.', isStreaming: false });
this.scrollToBottom();
}
},
headers() {
const csrfToken = document.querySelector('meta[name="csrf-token"]')?.content ?? '';
return {
'Content-Type': 'application/json',
'X-CSRF-TOKEN': csrfToken,
};
},
scrollToBottom() {
this.$nextTick(() => {
const container = this.$refs.messagesContainer;
if (container) container.scrollTop = container.scrollHeight;
});
},
};
}
if (typeof Alpine !== 'undefined') {
Alpine.data('aiChatWidget', aiChatWidget);
} else {
document.addEventListener('alpine:init', () => {
Alpine.data('aiChatWidget', aiChatWidget);
});
}
})();
</script>
</body>
</html>
| # |
Url |
Url |
Source |
Date |
| 1 |
https://domcavalo.com/pt |
|
2026-10-16 17:10:27 |
| 2 |
https://www.texarkanatwins.com/%25… |
|
2026-10-16 17:10:27 |
| 3 |
https://www.texarkanatwins.com/%25… |
|
2026-10-16 17:10:26 |
| 4 |
https://www.texarkanatwins.com/%25… |
|
2026-10-16 17:10:26 |
| 5 |
https://auth.mediacorp.sg/u/login?… |
|
2026-10-16 17:10:26 |
| 6 |
https://www.texarkanatwins.com/%25… |
|
2026-10-16 17:10:26 |
| 7 |
https://www.texarkanatwins.com/%25… |
|
2026-10-16 17:10:26 |
| 8 |
https://www.texarkanatwins.com/%25… |
|
2026-10-16 17:10:25 |
| 9 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-16 17:10:25 |
| 10 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-16 17:10:25 |
| 11 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-16 17:10:24 |
| 12 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-16 17:10:24 |
| 13 |
https://www.texarkanatwins.com/%25… |
|
2026-10-16 17:10:23 |
| 14 |
https://www.texarkanatwins.com/%25… |
|
2026-10-16 17:10:23 |
| 15 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-16 17:10:23 |
| 16 |
https://www.texarkanatwins.com/%25… |
|
2026-10-16 17:10:22 |
| 17 |
https://www.texarkanatwins.com/%25… |
|
2026-10-16 17:10:22 |
| 18 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-16 17:10:22 |
| 19 |
https://www.texarkanatwins.com/%25… |
|
2026-10-16 17:10:22 |
| 20 |
https://www.texarkanatwins.com/%25… |
|
2026-10-16 17:10:22 |