// screens-legal.jsx — Mentions légales + CGV pages. Exports: LegalScreen (kind: "mentions" | "cgv"). // Company info is centralised in LEGAL_INFO — fill in the [À COMPLÉTER] fields. const LEGAL_INFO = { nom: "Heykal Aissaoui (HIGHKAL ENTREPRISE)", statut: "Entrepreneur individuel (micro-entreprise)", siret: "819 331 190 00028 — RCS Paris 819 331 190", adresse: "60 rue François Ier, 75008 Paris", email: "contact@qleqle.fr", site: "qleqle.com", hebergeur: "Vercel Inc., 440 N Barranca Ave #4133, Covina, CA 91723, États-Unis — vercel.com", }; function LegalBlock({ title, children }) { return React.createElement( "section", { style: { marginTop: 34 } }, React.createElement("h2", { style: { fontSize: 19, fontWeight: 700, margin: "0 0 10px" } }, title), children ); } function LP(props, ...kids) { return React.createElement("p", Object.assign({ className: "muted", style: { fontSize: 15, lineHeight: 1.65, margin: "0 0 10px" } }, props || {}), ...kids); } function MentionsContent() { const I = LEGAL_INFO; return React.createElement(React.Fragment, null, React.createElement(LegalBlock, { title: "Éditeur du site" }, LP(null, I.nom + " — " + I.statut), LP(null, "SIRET : " + I.siret), LP(null, "Adresse : " + I.adresse), LP(null, "Contact : " + I.email), ), React.createElement(LegalBlock, { title: "Hébergement" }, LP(null, "Le site " + I.site + " est hébergé par " + I.hebergeur + "."), ), React.createElement(LegalBlock, { title: "Propriété intellectuelle" }, LP(null, "L'ensemble des contenus du site (textes, visuels, logo, modèles 3D) est la propriété de l'éditeur. Toute reproduction sans autorisation est interdite."), ), React.createElement(LegalBlock, { title: "Données personnelles" }, LP(null, "Les informations saisies pour personnaliser un QR code (nom, téléphone, e-mail, adresses, liens) sont utilisées uniquement pour fabriquer le produit commandé. Elles ne sont ni revendues, ni utilisées à des fins publicitaires."), LP(null, "Le paiement est traité par Stripe ; aucune donnée bancaire ne transite par nos serveurs."), LP(null, "Conformément au RGPD, vous pouvez demander l'accès, la rectification ou la suppression de vos données en écrivant à " + I.email + "."), ), React.createElement(LegalBlock, { title: "Cookies" }, LP(null, "Le site n'utilise pas de cookies de suivi publicitaire. Seul le stockage local du navigateur est utilisé pour conserver votre panier."), ), ); } function CgvContent() { const I = LEGAL_INFO; return React.createElement(React.Fragment, null, React.createElement(LegalBlock, { title: "1. Objet" }, LP(null, "Les présentes conditions générales de vente régissent les commandes passées sur " + I.site + ", édité par " + I.nom + " (" + I.statut + ", SIRET " + I.siret + ")."), ), React.createElement(LegalBlock, { title: "2. Produits" }, LP(null, "Les produits vendus sont des porte-clés QR code personnalisés, imprimés en 3D à la demande selon les choix du client (contenu du QR code, couleurs). Les visuels du site sont des aperçus ; de légères variations de teinte ou de finition peuvent exister, inhérentes à l'impression 3D artisanale."), ), React.createElement(LegalBlock, { title: "3. Prix" }, LP(null, "Les prix sont indiqués en euros, toutes taxes comprises. TVA non applicable, article 293 B du CGI. La livraison en France métropolitaine est offerte."), ), React.createElement(LegalBlock, { title: "4. Commande et paiement" }, LP(null, "Le paiement s'effectue en ligne par carte bancaire via Stripe, plateforme de paiement sécurisée. La commande est ferme à réception du paiement. Un récapitulatif est présenté avant validation ; il appartient au client de vérifier l'exactitude du contenu de son QR code (numéro, e-mail, liens) avant de payer."), ), React.createElement(LegalBlock, { title: "5. Fabrication et livraison" }, LP(null, "Chaque article est imprimé à la demande puis expédié en lettre suivie sous 1 à 2 jours ouvrés. Le délai de livraison constaté est de 2 à 3 jours ouvrés en France métropolitaine. Un numéro de suivi peut être communiqué sur demande à " + I.email + "."), ), React.createElement(LegalBlock, { title: "6. Droit de rétractation" }, LP(null, "Conformément à l'article L221-28 3° du Code de la consommation, le droit de rétractation de 14 jours ne s'applique pas aux biens confectionnés selon les spécifications du consommateur ou nettement personnalisés. Les porte-clés QR code étant fabriqués sur mesure, ils ne peuvent être ni repris ni échangés, sauf défaut."), ), React.createElement(LegalBlock, { title: "7. Produit défectueux — réimpression gratuite" }, LP(null, "Si votre porte-clé arrive cassé, endommagé, ou si le QR code est illisible, nous le réimprimons et le réexpédions gratuitement. Signalez le problème sous 14 jours après réception, photo à l'appui, à " + I.email + ". Le retour de l'article défectueux n'est pas exigé."), LP(null, "Cette garantie commerciale s'ajoute aux garanties légales de conformité (art. L217-3 et suivants du Code de la consommation) et des vices cachés (art. 1641 et suivants du Code civil)."), ), React.createElement(LegalBlock, { title: "8. Responsabilité" }, LP(null, "Le client est seul responsable du contenu encodé dans son QR code et de son exactitude. En cas d'erreur du client dans les informations fournies, une nouvelle commande est nécessaire."), ), React.createElement(LegalBlock, { title: "9. Litiges" }, LP(null, "Les présentes CGV sont soumises au droit français. En cas de litige, une solution amiable sera recherchée en priorité. Le client peut recourir gratuitement au médiateur de la consommation dont relève le vendeur."), ), ); } function LegalScreen({ t, lang, kind, onBack }) { const isCgv = kind === "cgv"; const title = isCgv ? "Conditions générales de vente" : "Mentions légales"; return React.createElement( "div", { className: "screen", "data-screen-label": isCgv ? "CGV" : "Mentions légales" }, React.createElement("section", { className: "section" }, React.createElement("div", { className: "container", style: { maxWidth: 760 } }, React.createElement("button", { className: "btn btn--quiet", style: { marginLeft: -14, marginBottom: 2 }, onClick: onBack }, "‹ " + (lang === "en" ? "Back" : "Retour")), React.createElement("h1", { className: "h2", style: { margin: "6px 0 4px" } }, title), lang === "en" ? React.createElement("p", { className: "muted", style: { fontSize: 14 } }, "This page is provided in French, the legal language of the seller.") : null, isCgv ? React.createElement(CgvContent, null) : React.createElement(MentionsContent, null), ) ) ); } Object.assign(window, { LegalScreen, LEGAL_INFO });