/* listgetbuy — Buyer scroll story (scroll-position driven, hız bağımsız) */ const { useState, useEffect, useRef } = React; const clamp = (v, a = 0, b = 1) => Math.max(a, Math.min(b, v)); const lerp = (a, b, t) => a + (b - a) * t; const easeIO = (t) => (t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2); const TL = (n) => '€' + Math.round(n).toLocaleString('de-DE'); const BUDGET = 950; const LOW = 790; const TH = [0.04, 0.30, 0.58, 0.86]; // offer i appears at this t within offer band const B = { introEnd: 0.12, offEnd: 0.50, dealEnd: 0.66, payEnd: 0.84 }; const STEPS_LANG = { tr: [ { k: '01', t: 'İlanını aç, bütçeni koy', s: 'Aramak yok. Ne istediğini yaz, satıcılar sana gelsin.' }, { k: '02', t: 'Teklifler düşerek gelir', s: 'Satıcılar teklifleriyle yarışır. Sen izlersin, fiyat düşer.' }, { k: '03', t: 'Süre dolar, en ucuz kazanır', s: 'Pazarlık yok, kovalamaca yok. En düşük teklif anlaşmayı alır.' }, { k: '04', t: 'Tek dokunuşla güvenli öde', s: 'Anlaş, öde, bitir. Para satıcıya teslimde geçer.' }, { k: '05', t: 'Bütçenin altında aldın', s: 'İşte eksiltme: zahmetsiz, ucuza. Aradaki fark cebinde kalır.' }, ], en: [ { k: '01', t: 'Open your listing, set budget', s: 'No searching. Just write what you need, let sellers come to you.' }, { k: '02', t: 'Offers come dropping down', s: 'Each new seller underbids the previous one. Watch the price drop.' }, { k: '03', t: 'Time expires, cheapest wins', s: 'No bargaining, no chasing. The lowest offer secures the deal.' }, { k: '04', t: 'One-tap secure payment', s: 'Agree, pay, finish. Funds are transferred to the seller upon delivery.' }, { k: '05', t: 'You bought below budget', s: 'That\'s the reverse auction: effortless, cheap. The difference stays in your pocket.' }, ], de: [ { k: '01', t: 'Inserat erstellen, Budget festlegen', s: 'Kein Suchen. Schreibe, was du brauchst, lass Verkäufer zu dir kommen.' }, { k: '02', t: 'Angebote sinken automatisch', s: 'Jeder neue Verkäufer unterbietet den vorherigen. Sieh zu, wie der Preis fällt.' }, { k: '03', t: 'Zeit läuft ab, der Günstigste gewinnt', s: 'Kein Feilschen, kein Hinterherjagen. Das niedrigste Angebot erhält den Zuschlag.' }, { k: '04', t: 'Sichere Zahlung per Klick', s: 'Einigen, bezahlen, fertig. Das Geld geht erst bei Lieferung an den Verkäufer.' }, { k: '05', t: 'Unter dem Budget gekauft', s: 'Das ist die Rückwärtsauktion: mühelos, günstig. Die Differenz bleibt in deiner Tasche.' }, ], }; const L_LABELS = { tr: { budget: 'Bütçe', timeUp: 'Süre doldu', paidUp: 'ÖDENEN', lowestOffer: 'EN DÜŞÜK TEKLİF', initialBudget: 'BAŞLANGIÇ BÜTÇESİ', dropped: 'düştü', willBeat: 'Satıcılar bunu kırmaya çalışacak', livePending: 'İlanın yayında. Teklifler düşmeye başlamak üzere…', shop: 'MAĞAZA', lowest: 'EN DÜŞÜK', outbid: 'GEÇİLDİ', dealSecured: 'Anlaşma sağlandı', lowestGiver: 'En düşük teklifi verdi', securePay: 'Güvenli ödeme', payDesc: 'Para, ürün eline geçince satıcıya aktarılır.', amount: 'Tutar', makePay: 'Ödemeyi yap', confirming: 'Onaylanıyor…', paid: 'ödendi', below: 'altında', city: 'İstanbul', notes: { elif: 'Faturalı, temiz cihaz', burak: 'Deep Purple, kutulu', mert: 'Pil %91, çiziksiz', tekno: 'Kutulu · faturalı · 8 ay garanti' } }, en: { budget: 'Budget', timeUp: 'Time expired', paidUp: 'PAID', lowestOffer: 'LOWEST OFFER', initialBudget: 'INITIAL BUDGET', dropped: 'dropped', willBeat: 'Sellers will try to beat this', livePending: 'Your listing is live. Offers are about to start dropping…', shop: 'STORE', lowest: 'LOWEST', outbid: 'OUTBID', dealSecured: 'Deal secured', lowestGiver: 'Gave the lowest offer', securePay: 'Secure payment', payDesc: 'Funds are released to the seller upon delivery.', amount: 'Amount', makePay: 'Make payment', confirming: 'Confirming…', paid: 'paid', below: 'below', city: 'Istanbul', notes: { elif: 'Invoice included, clean device', burak: 'Deep Purple, boxed', mert: 'Battery 91%, scratchless', tekno: 'Boxed · Invoice · 8mo warranty' } }, de: { budget: 'Budget', timeUp: 'Abgelaufen', paidUp: 'BEZAHLT', lowestOffer: 'NIEDRIGSTES ANGEBOT', initialBudget: 'STARTBUDGET', dropped: 'gesunken', willBeat: 'Verkäufer werden dies unterbieten', livePending: 'Ihr Inserat ist live. Angebote starten in Kürze…', shop: 'SHOP', lowest: 'BESTES', outbid: 'ÜBERBOTEN', dealSecured: 'Deal gesichert', lowestGiver: 'Hat das niedrigste Angebot abgegeben', securePay: 'Sichere Zahlung', payDesc: 'Geld wird erst bei Lieferung freigegeben.', amount: 'Betrag', makePay: 'Zahlung tätigen', confirming: 'Bestätigen…', paid: 'bezahlt', below: 'unter', city: 'Istanbul', notes: { elif: 'Mit Rechnung, sauberes Gerät', burak: 'Deep Purple, mit OVP', mert: 'Batterie 91%, kratzfrei', tekno: 'Mit OVP · Rechnung · 8 Monate Garantie' } } }; function Avatar({ o, size = 38 }) { const url = o.avatar || o.avatar_url; return (
{step.s}