================== STİLLER ==================
/* TÜM İÇERİĞİ KAPSAYAN ALAN */
.xsto-content{
max-width: 960px;
margin: 0 auto;
font-family: Arial, Helvetica, sans-serif;
line-height: 1.85;
color: #222;
font-size: 16px;
}
/* Başlıklar */
.xsto-content h1,.xsto-content h2{ color:#c00000; font-weight:700; }
.xsto-content h1{ font-size:26px; margin:24px 0 10px; }
.xsto-content h2{ font-size:22px; margin:28px 0 10px; }
.xsto-content h3{ color:#333; font-weight:700; font-size:19px; margin:22px 0 10px; }
/* Paragraflar */
.xsto-content p{ margin:0 0 12px; }
/* ÖZET KUTUSU */
.xsto-summary{
border:1px solid #eee;
background: linear-gradient(180deg, #ffffff 0%, #fafafa 100%);
border-radius:12px;
padding:14px 14px;
margin:14px 0 16px;
box-shadow: 0 10px 26px rgba(0,0,0,0.06);
}
.xsto-summary ul{ margin:10px 0 0; padding-left:18px; }
.xsto-summary li{ margin:7px 0; font-size:16px; }
/* CTA */
.xsto-cta-wrap{ display:flex; gap:10px; flex-wrap:wrap; margin:14px 0 4px; }
.xsto-cta{
display:inline-block;
text-decoration:none;
font-weight:700;
border-radius:12px;
padding:12px 14px;
box-shadow: 0 10px 22px rgba(0,0,0,0.10);
}
.xsto-cta.call{ background:#c00000; color:#fff; }
.xsto-cta.wa{ background:#25d366; color:#fff; }
.xsto-cta.link{ background:#0b57d0; color:#fff; }
/* ✅ Showroom kartları CTA: aynı stil, küçük boy */
.xsto-cta.small{
padding:10px 12px;
border-radius:12px;
font-size:14px;
box-shadow: 0 10px 22px rgba(0,0,0,0.10);
}
/* PX12 Blog link kutusu */
.xsto-note{
border-left:4px solid #0b57d0;
background:#f4f8ff;
border-radius:12px;
padding:12px 12px;
margin:12px 0 18px;
box-shadow: 0 10px 24px rgba(11,87,208,0.10);
}
.xsto-note a{ color:#0b57d0; font-weight:700; text-decoration:none; }
/* En ayırt edici özellik bloğu */
.xsto-feature-block{ margin-bottom: 14px; }
.xsto-feature-block h3{ margin-bottom: 12px; }
/* İki sütun ana yapı */
.xsto-two-column{
display: grid;
grid-template-columns: minmax(360px, 1fr) minmax(300px, 460px);
gap: 28px;
align-items: start;
margin: 0;
}
/* TÜM BULLET’LAR */
.xsto-content ul,.xsto-two-column ul{
margin: 12px 0 16px;
padding-left: 20px;
}
.xsto-content ul li,.xsto-two-column ul li,.xsto-content h3 + ul li{
font-size: 16px !important;
line-height: 1.6;
margin: 8px 0;
}
/* Sağ görsel alanı */
.xsto-col-image{ text-align: center; align-self: start; }
/* ================== SPECS TABLE ================== */
.xsto-specs{
overflow-x:auto;
border:1px solid #eee;
border-radius:14px;
background:#fff;
margin-top:10px;
box-shadow: 0 12px 30px rgba(0,0,0,0.06);
}
.xsto-specs table{ width:100%; border-collapse:collapse; font-size:16px; }
.xsto-specs td{
padding:12px;
border-bottom:1px solid #eee;
vertical-align:top;
}
.xsto-specs tr:last-child td{ border-bottom:0; }
.xsto-specs td:first-child{ font-weight:700; width:46%; }
/* ================== CAROUSEL ================== */
.xsto-carousel{
position: relative;
width: 100%;
max-width: 460px;
margin: 0 auto;
touch-action: pan-y;
user-select: none;
box-shadow: 0 14px 34px rgba(0,0,0,0.10);
border-radius: 12px;
}
.xsto-carousel-viewport{ overflow: hidden; border-radius: 12px; }
.xsto-carousel-track{
display: flex;
transition: transform .35s ease;
will-change: transform;
}
.xsto-carousel.is-dragging .xsto-carousel-track{ transition: none; }
.xsto-carousel-slide{
position: relative;
flex: 0 0 100%;
width: 100%;
min-width: 100%;
}
.xsto-carousel-img{
width: 100%;
height: auto;
display: block;
cursor: zoom-in;
-webkit-user-drag: none;
user-drag: none;
pointer-events: auto;
}
/* OKLAR */
.xsto-carousel-btn{
position: absolute;
top: 50%;
transform: translateY(-50%);
border: none;
background: transparent;
color: rgba(255,255,255,0.95);
font-size: 34px;
line-height: 1;
padding: 0;
cursor: pointer;
z-index: 3;
text-shadow: 0 2px 10px rgba(0,0,0,0.55);
}
.xsto-carousel-btn.prev{ left: 10px; }
.xsto-carousel-btn.next{ right: 10px; }
.xsto-carousel-btn:disabled{ opacity: .25; cursor: not-allowed; }
/* Dots */
.xsto-carousel-dots{
display: flex;
gap: 8px;
justify-content: center;
margin-top: 10px;
}
.xsto-carousel-dot{
width: 8px;
height: 8px;
border-radius: 999px;
border: none;
background: rgba(0,0,0,0.25);
cursor: pointer;
}
.xsto-carousel-dot.active{ background: rgba(0,0,0,0.75); }
/* Caption */
.xsto-carousel-caption{
position: absolute;
left: 0;
right: 0;
bottom: 0;
padding: 8px 12px;
font-size: 13px;
line-height: 1.4;
color: #fff;
text-align: left;
background: linear-gradient(to top, rgba(0,0,0,0.62), rgba(0,0,0,0.0));
opacity: 1;
transform: none;
pointer-events: none;
}
/* ================== LIGHTBOX ================== */
#xsto-lightbox{
display: none;
position: fixed;
inset: 0;
z-index: 9999;
background: rgba(0,0,0,0.88);
justify-content: center;
align-items: center;
}
#xsto-lightbox img{
max-width: 90%;
max-height: 90%;
border-radius: 12px;
cursor: zoom-out;
}
/* ================== YOUTUBE VIDEO ================== */
.xsto-video-section{ margin-top: 40px; }
.xsto-video-title{ text-align: center; margin: 0 0 14px; }
.xsto-video-wrapper{
width: 100%;
max-width: 900px;
margin: 0 auto;
aspect-ratio: 16 / 9;
border-radius: 14px;
overflow: hidden;
box-shadow: 0 12px 30px rgba(0,0,0,0.14);
background: #000;
}
.xsto-video-wrapper iframe{
width: 100%;
height: 100%;
border: 0;
display: block;
}
@supports not (aspect-ratio: 16 / 9){
.xsto-video-wrapper{ position: relative; height: 0; padding-top: 56.25%; }
.xsto-video-wrapper iframe{ position: absolute; inset: 0; width: 100%; height: 100%; }
}
/* ================== SHOWROOM KARTLARI (GÜNCEL) ================== */
.xsto-showrooms{
display:flex;
flex-wrap:wrap;
gap:12px;
margin-top:12px;
justify-content:center;
align-items:stretch;
}
.xsto-showrooms .xsto-card{
box-sizing:border-box;
width:100%;
flex: 0 0 calc((100% - 24px) / 3);
border:1px solid rgba(0,0,0,0.06);
border-radius:16px;
padding:14px;
background: linear-gradient(180deg, #ffffff 0%, #f7f9ff 100%);
box-shadow: 0 14px 34px rgba(0,0,0,0.08);
display:flex;
flex-direction:column;
text-align:center;
transition: transform .25s ease, box-shadow .25s ease;
}
.xsto-showrooms .xsto-card:nth-child(2){ background: linear-gradient(180deg, #ffffff 0%, #f5fffb 100%); }
.xsto-showrooms .xsto-card:nth-child(3){ background: linear-gradient(180deg, #ffffff 0%, #fff7f7 100%); }
.xsto-showrooms .xsto-card:nth-child(4){ background: linear-gradient(180deg, #ffffff 0%, #f4f8ff 100%); }
.xsto-showrooms .xsto-card:nth-child(5){ background: linear-gradient(180deg, #ffffff 0%, #fffdf3 100%); }
/* ✅ Hover (yalnız masaüstü) */
@media (hover:hover) and (pointer:fine){
.xsto-showrooms .xsto-card:hover{
transform: translateY(-4px);
box-shadow: 0 20px 40px rgba(0,0,0,0.12);
}
}
.xsto-showrooms .xsto-card-title{
font-size:17px;
font-weight:800;
color:#111;
width:100%;
min-height:48px;
}
/* ✅ Badge renklendirme (Merkez/Premium) */
.xsto-showrooms .xsto-badge{
display:inline-block;
font-size:12px;
font-weight:800;
padding:6px 10px;
border-radius:999px;
margin:10px auto 0;
border:1px solid rgba(0,0,0,0.06);
background: rgba(0,0,0,0.06);
color:#111;
}
/* Merkez */
.xsto-showrooms .xsto-badge.is-center{
background: rgba(192,0,0,0.10);
border-color: rgba(192,0,0,0.18);
color:#c00000;
}
/* Premium (✅ GOLD) */
.xsto-showrooms .xsto-badge.is-premium{
background: rgba(218,165,32,0.18);
border-color: rgba(218,165,32,0.35);
color:#8a5a00;
}
.xsto-showrooms .xsto-card-links{
margin-top:14px;
display:flex;
flex-wrap:wrap;
gap:10px;
justify-content:center;
align-items:stretch;
width:100%;
}
/* ✅ Hemen Ara + WhatsApp: aynı satır, toplam genişlik = alt butonlarla aynı */
.xsto-showrooms .xsto-card-links .xsto-cta.call.small,
.xsto-showrooms .xsto-card-links .xsto-cta.wa.small{
flex: 1 1 calc(50% - 5px);
min-width:0;
box-sizing:border-box;
text-align:center;
}
/* Harita butonu: tam genişlik + alt boşluk */
.xsto-showrooms .xsto-card-links .xsto-cta.link.small{
width:100%;
display:block;
box-sizing:border-box;
text-align:center;
margin-bottom:12px;
}
.xsto-showrooms .xsto-card-bottom{ margin-top:auto; }
.xsto-showrooms .xsto-card-bottom .xsto-cta.call.small{
width:100%;
display:block;
box-sizing:border-box;
text-align:center;
}
/* 2 sütun */
@media (max-width:940px){
.xsto-showrooms .xsto-card{
flex: 0 0 calc((100% - 12px) / 2);
}
}
/* Mobil: tek sütun */
@media (max-width:600px){
.xsto-showrooms .xsto-card{
flex: 0 0 100%;
}
}
/* Mobil (genel) */
@media (max-width: 768px){
.xsto-two-column{ grid-template-columns: 1fr; }
.xsto-col-image{ order: -1; }
.xsto-content{ max-width: 100%; padding:0 10px; }
.xsto-content ul li,.xsto-two-column ul li{ font-size: 15px !important; }
.xsto-carousel{ max-width: 100%; }
.xsto-carousel-caption{ font-size: 12px; padding: 6px 10px; }
.xsto-cta.small{
width:100%;
text-align:center;
padding:12px 14px;
font-size:15px;
}
}
================== SCHEMA ==================
{
"@context":"https://schema.org",
"@graph":[
{
"@type":"BreadcrumbList",
"@id":"https://poylin.com.tr/#breadcrumb",
"itemListElement":[
{"@type":"ListItem","position":1,"name":"Ana Sayfa","item":"https://poylin.com.tr/"},
{"@type":"ListItem","position":2,"name":"Ürün Tanıtımı","item":"https://poylin.com.tr/blog"},
{"@type":"ListItem","position":3,"name":"XSTO X12","item":"https://poylin.com.tr/"}
]
},
{
"@type":"Product",
"@id":"https://poylin.com.tr/#xsto-x12",
"name":"XSTO X12",
"brand":{"@type":"Brand","name":"XSTO"},
"category":"Akülü tekerlekli sandalye / mobilite aracı",
"description":"XSTO X12, XSTO M4 Pro temel platformunu palet sistemi ve merdiven kabiliyetiyle genişleten; AWD, palet ve merdiven modu sunan gelişmiş bir akülü mobilite çözümüdür.",
"image":[
"https://poylin.com.tr/image/catalog/multiple-modes-3.png",
"https://poylin.com.tr/image/catalog/multiple-modes-1.png",
"https://poylin.com.tr/image/catalog/multiple-modes-2.png"
]
},
{
"@type":"VideoObject",
"@id":"https://poylin.com.tr/#x12-video",
"name":"XSTO X12 ürün tanıtım videosu",
"description":"XSTO X12 modları ve genel kullanım yaklaşımını gösteren tanıtım videosu.",
"thumbnailUrl":"https://img.youtube.com/vi/I0_2l3O0jkw/hqdefault.jpg",
"embedUrl":"https://www.youtube.com/embed/I0_2l3O0jkw",
"uploadDate":"2025-01-01"
},
{
"@type":"FAQPage",
"@id":"https://poylin.com.tr/#x12-faq",
"mainEntity":[
{
"@type":"Question",
"name":"Merdiven modu her merdivende aynı sonucu verir mi?",
"acceptedAnswer":{"@type":"Answer","text":"Performans; merdiven geometrisi, basamak ölçüsü, zemin durumu ve kullanıcı profiline bağlıdır. En iyi deneyim için showroomda ölçü ve senaryo değerlendirmesi ile ilerlemek önerilir."}
},
{
"@type":"Question",
"name":"Koltuğun yere paralel kalması ne anlama gelir?",
"acceptedAnswer":{"@type":"Answer","text":"Sistem, merdiven geçişi sırasında hareketi sürekli ölçerek oturma hissini mümkün olduğunca stabil ve kontrollü tutmayı hedefler. Bu yaklaşım, geçişin daha güvenli algılanmasına yardımcı olur."}
},
{
"@type":"Question",
"name":"Eğitim gerekir mi?",
"acceptedAnswer":{"@type":"Answer","text":"Merdiven gibi kritik senaryolarda kısa bir kullanım anlatımı ve uygunluk değerlendirmesi önemlidir. Poylin showroomlarında kullanım senaryonuza göre yönlendirme yapılır."}
},
{
"@type":"Question",
"name":"Dış mekânda kullanıma uygun mudur?",
"acceptedAnswer":{"@type":"Answer","text":"X12, iç ve dış mekân senaryoları için tasarlanmış bir yapıyı hedefler. Satın alma öncesi showroom teyidi önerilir."}
},
{
"@type":"Question",
"name":"Batarya menzili nasıl planlanmalı?",
"acceptedAnswer":{"@type":"Answer","text":"Menzil; kullanıcı ağırlığı, zemin, eğim, hava sıcaklığı ve sürüş moduna göre değişebilir. Günlük rota ve şarj alışkanlığına göre planlama yapılması önerilir."}
},
{
"@type":"Question",
"name":"Kimler için ideal olabilir?",
"acceptedAnswer":{"@type":"Answer","text":"Bağımsız hareket hedefi olan, farklı zeminlerde aktif kullanım isteyen kullanıcılar için güçlü bir alternatiftir. En doğru karar, kullanıcı profili ve ortam değerlendirmesi ile verilir."}
}
]
}
]
}
================== İÇERİK ==================
XSTO X12 – Yeni Nesil Mobilite ile Bağımsızlığı Büyüten Teknoloji
XSTO X12, XSTO’nun M4 Pro platformu üzerine geliştirilen; palet sistemi ve buna bağlı yeni teknolojilerle
yetenekleri genişletilmiş, hem günlük kullanım performansı hem de merdiven kabiliyetiyle öne çıkan güçlü bir akülü mobilite çözümüdür.
M4 Pro’nun güçlü sürüş karakterini korurken; X12, doğru senaryoda erişilebilirliği ciddi şekilde artırmayı hedefler.
Hızlı Özet
- 3 sürüş modu: AWD, Palet, Merdiven modu
- Denge odaklı geçiş yaklaşımı: İnerken ve çıkarken daha stabil oturma hissi hedefi
- Günlük kullanım gücü: M4 Pro temel performansını taşır
- Türkiye’de ilk ve tek: Kullanıcı kontrolünü merkeze alan merdiven kabiliyetiyle benzersiz çözüm
Hemen Ara
WhatsApp
Showroom ve Yol Tarifi
Daha detaylı teknik açıklama, kullanım senaryoları ve seçim kriterleri için
PX12 detaylı rehber sayfasına göz atabilirsiniz.
En Ayırt Edici Özellik: 3 Farklı Mod ile Tek Cihazda Daha Fazla Özgürlük
Günlük hayat tek zeminden ibaret değil. Apartman girişi, site içi yollar, kaldırım geçişleri, rampa, merdiven, taşlı zemin…
X12’nin iddiası şu: Tek bir cihazla daha çok senaryoda daha rahat hareket edebilmek.
Bu yüzden X12’de üç farklı sürüş modu yer alır.
AWD modu, günlük sürüşte çekiş ve yol tutuş hissini artırmayı hedefler.
Düz zeminlerde daha akıcı sürüş, dönüşlerde daha stabil his ve daha kontrollü ilerleme için tasarlanır.
Palet modu, bazı zeminlerde temas alanını artırır. Basit anlatımla:
“Tekerlekle zorlanacağınız yerde palet devreye girer, tutunma artar.”
Bu da kullanıcının kontrol hissini yükseltir.
Merdiven modu, X12’yi Türkiye’de ilk ve tek yapan noktadır.
Bu modda amaç; merdiven geçişini “korku anı” olmaktan çıkarıp kademeli, ölçülü, yönetilebilir bir sürece çevirmektir.
Kullanıcı yön ve hız kontrolünü joystick ile yönetir; sistem ise denge ve geçiş hissini destekler.
Eğim dengeleme ve yere paralel oturma hissi ne işe yarar
En basit anlatımıyla: Merdivende veya eğimde ilerlerken oturduğunuz yerin “bir anda öne arkaya düşüyormuş gibi” hissettirmemesi hedeflenir.
Sistem, hareketi sürekli ölçüp ayarlayarak daha dengeli bir oturma hissi oluşturmayı amaçlar.
Bu yaklaşım, kullanıcı için geçişi daha anlaşılır ve yönetilebilir hale getirir.
- ✅ Daha az panik ve daha fazla güven hissi
- ✅ Daha kontrollü ilerleme ve daha “yönetilebilir” bir geçiş deneyimi
- ✅ Aile için daha az stres, kullanıcı için daha çok cesaret
X12’nin güzelliği şu: Bu sadece bir “merdiven cihazı” değil.
M4 Pro’nun güçlü yapısını taşır, üstüne palet ve merdiven kabiliyeti ekleyerek günlük hayatın sınırlarını genişletir.
‹
AWD modu dengeli günlük sürüş
Palet modu bazı zeminlerde daha stabil ilerleme
Merdiven modu kontrollü geçiş desteği
›
Performans ve teknik değerler
Aşağıdaki değerler kullanım şartlarına göre değişebilir. En doğru eşleşme için showroomda kullanıcı profili ve ortam koşulları üzerinden
değerlendirme yapılması önerilir.
| Maksimum hız | 12 km sa |
| Menzil | Yaklaşık 35 km |
| Batarya | 24V 44.8Ah |
| Maksimum kullanıcı ağırlığı | 120 kg |
| Ürün ağırlığı net | 100 kg |
| Denge yaklaşımı | 360 derece denge desteği |
| Eğim desteği | Artı eksi 15 derece aralıkta denge kontrol hedefi |
| Dayanıklılık | IPX5 suya dayanıklılık seviyesi |
Daha detaylı anlatım, örnek senaryolar ve doğru seçim kriterleri için
PX12 detaylı rehber sayfasına göz atabilirsiniz.
XSTO X12 ürün tanıtım videosu
Sıkça Sorulan Sorular (SSS) – XSTO X12
Merdiven modu her merdivende aynı sonucu verir mi?
Performans; merdiven geometrisi, basamak ölçüsü, zemin durumu ve kullanıcı profiline bağlıdır. En iyi deneyim için showroomda ölçü ve senaryo değerlendirmesi ile ilerlemek önerilir.
Koltuğun yere paralel kalması ne anlama gelir?
Sistem, merdiven geçişi sırasında hareketi sürekli ölçerek oturma hissini mümkün olduğunca stabil ve kontrollü tutmayı hedefler. Bu yaklaşım, geçişin daha güvenli algılanmasına yardımcı olur.
Eğitim gerekir mi?
Merdiven gibi kritik senaryolarda kısa bir kullanım anlatımı ve uygunluk değerlendirmesi önemlidir. Poylin showroomlarında kullanım senaryonuza göre yönlendirme yapılır.
Dış mekânda kullanıma uygun mudur?
X12, iç ve dış mekân senaryoları için tasarlanmış bir yapıyı hedefler. Satın alma öncesi showroom teyidi önerilir.
Batarya menzili nasıl planlanmalı?
Menzil; kullanıcı ağırlığı, zemin, eğim, hava sıcaklığı ve sürüş moduna göre değişebilir. Günlük rota ve şarj alışkanlığına göre planlama yapılması önerilir.
Kimler için ideal olabilir?
Bağımsız hareket hedefi olan, farklı zeminlerde aktif kullanım isteyen kullanıcılar için güçlü bir alternatiftir. En doğru karar, kullanıcı profili ve ortam değerlendirmesi ile verilir.
Garanti ve servis bilgilendirmesi
Bu ürün grubunda garanti ve servis süreçleri, fatura ve garanti belgesindeki şartlara göre yürütülür. Satın alma öncesi netleştirmek için
WhatsApp hattımızdan hızlıca bilgi alabilirsiniz.
- ✅ Garanti süresi ve kapsam: Ürün/tedarik koşullarına göre belirlenir (satın alma sırasında teyit edilir).
- ✅ Garanti süresi içinde fabrika kaynaklı arızalarda süreç, anlaşmalı kargo ve servis planına göre yönetilir.
- ✅ Kullanıcı kaynaklı hasar/arıza durumlarında onarım ve lojistik süreçleri farklı ilerleyebilir.
Showroomlarımız telefon WhatsApp ve yol tarifi
Ürünü yerinde görmek, kullanım senaryonuza göre doğru eşleşmeyi yapmak ve hızlı bilgi almak için showroomlara bekleriz.
WhatsApp hattımız Merkez WhatsApp üzerinden tek numara ile yönetilir.
1 Merkez
Poylin Merkez Showroom
Beylikdüzü
Merkez
Hemen Ara
WhatsApp
Harita
Mağaza Sayfası
2 Kadıköy
Poylin Premium Kadıköy
Showroom
Premium
Hemen Ara
WhatsApp
Harita
Mağaza Sayfası
3 Beylikdüzü Premium
Poylin Premium Beylikdüzü
Showroom
Premium
Hemen Ara
WhatsApp
Harita
Mağaza Sayfası
4 Bahçeşehir
Poylin Premium Bahçeşehir
Showroom
Premium
Hemen Ara
WhatsApp
Harita
Mağaza Sayfası
5 Kocaeli
Poylin Premium Kocaeli İzmit
Showroom
Premium
Hemen Ara
WhatsApp
Harita
Mağaza Sayfası
================== LIGHTBOX ==================
================== JAVASCRIPT (Carousel Fix) ==================
/* Lightbox: ESC ile kapatma + scroll kilidi */
function openXstoLightbox(src){
const lb = document.getElementById('xsto-lightbox');
const img = document.getElementById('xsto-lightbox-img');
img.src = src;
lb.style.display = 'flex';
document.documentElement.style.overflow = 'hidden';
document.body.style.overflow = 'hidden';
}
function closeXstoLightbox(){
const lb = document.getElementById('xsto-lightbox');
lb.style.display = 'none';
document.documentElement.style.overflow = '';
document.body.style.overflow = '';
}
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape'){
const lb = document.getElementById('xsto-lightbox');
if (lb && lb.style.display === 'flex') closeXstoLightbox();
}
});
/* ✅ Carousel: geç yüklenen içerikte de init edilsin */
function initXstoCarousels(root){
const scope = root || document;
const carousels = scope.querySelectorAll ? scope.querySelectorAll('.xsto-carousel') : [];
carousels.forEach((carousel) => {
if (carousel.dataset.xstoInit === '1') return;
carousel.dataset.xstoInit = '1';
const viewport = carousel.querySelector('.xsto-carousel-viewport');
const track = carousel.querySelector('.xsto-carousel-track');
const slides = Array.from(carousel.querySelectorAll('.xsto-carousel-slide'));
const prevBtn = carousel.querySelector('.xsto-carousel-btn.prev');
const nextBtn = carousel.querySelector('.xsto-carousel-btn.next');
const dotsWrap = carousel.querySelector('.xsto-carousel-dots');
if (!viewport || !track || slides.length === 0 || !prevBtn || !nextBtn || !dotsWrap) return;
let autoplayTimer = null;
const autoplayEnabled = carousel.dataset.autoplay === 'true';
const intervalMs = Number(carousel.dataset.interval || 4500);
let startX = 0;
let currentX = 0;
let isTouching = false;
let moved = false;
const threshold = 35;
function viewportWidth(){
return (viewport.clientWidth || carousel.clientWidth || 1);
}
function setIndex(i){
const max = slides.length - 1;
const index = ((i % (max + 1)) + (max + 1)) % (max + 1);
carousel.dataset.index = String(index);
const x = -index * viewportWidth();
track.style.transform = 'translate3d(' + x + 'px,0,0)';
dotsWrap.querySelectorAll('.xsto-carousel-dot').forEach((d, di) => {
d.classList.toggle('active', di === index);
});
}
function next(){ setIndex(Number(carousel.dataset.index || 0) + 1); }
function prev(){ setIndex(Number(carousel.dataset.index || 0) - 1); }
function startAutoplay(){
if (!autoplayEnabled || slides.length <= 1) return;
stopAutoplay();
autoplayTimer = setInterval(next, intervalMs);
}
function stopAutoplay(){
if (autoplayTimer){
clearInterval(autoplayTimer);
autoplayTimer = null;
}
}
function restartAutoplay(){
if (!autoplayEnabled) return;
startAutoplay();
}
// Dots yeniden üret
dotsWrap.innerHTML = '';
slides.forEach((_, i) => {
const b = document.createElement('button');
b.type = 'button';
b.className = 'xsto-carousel-dot' + (i === 0 ? ' active' : '');
b.setAttribute('aria-label', 'Görsel ' + (i+1));
b.addEventListener('click', () => { setIndex(i); restartAutoplay(); });
dotsWrap.appendChild(b);
});
prevBtn.addEventListener('click', () => { prev(); restartAutoplay(); });
nextBtn.addEventListener('click', () => { next(); restartAutoplay(); });
carousel.addEventListener('mouseenter', stopAutoplay);
carousel.addEventListener('mouseleave', startAutoplay);
carousel.addEventListener('touchstart', (e) => {
if (!e.touches || e.touches.length !== 1) return;
stopAutoplay();
isTouching = true;
moved = false;
carousel.classList.add('is-dragging');
startX = e.touches[0].clientX;
currentX = startX;
}, {passive: true});
carousel.addEventListener('touchmove', (e) => {
if (!isTouching || !e.touches || e.touches.length !== 1) return;
currentX = e.touches[0].clientX;
const dx = currentX - startX;
if (Math.abs(dx) > 6) moved = true;
const idx = Number(carousel.dataset.index || 0);
const x = (-idx * viewportWidth()) + dx;
track.style.transform = 'translate3d(' + x + 'px,0,0)';
}, {passive: true});
carousel.addEventListener('touchend', () => {
if (!isTouching) return;
isTouching = false;
carousel.classList.remove('is-dragging');
const dx = currentX - startX;
const idx = Number(carousel.dataset.index || 0);
if (Math.abs(dx) >= threshold){
if (dx < 0) setIndex(idx + 1);
else setIndex(idx - 1);
} else {
setIndex(idx);
}
startAutoplay();
});
carousel.querySelectorAll('.xsto-carousel-img').forEach((img) => {
img.addEventListener('click', (e) => {
if (moved) e.preventDefault();
});
});
window.addEventListener('resize', () => {
setIndex(Number(carousel.dataset.index || 0));
});
// İlk kurulum
requestAnimationFrame(() => setIndex(0));
setTimeout(() => { setIndex(Number(carousel.dataset.index || 0)); startAutoplay(); }, 60);
});
}
// İlk yükleme
document.addEventListener('DOMContentLoaded', () => {
initXstoCarousels(document);
setTimeout(() => initXstoCarousels(document), 300);
});
// Sonradan yüklenen içerikler için
(function(){
const obs = new MutationObserver(() => initXstoCarousels(document));
obs.observe(document.documentElement, { childList: true, subtree: true });
})();