Clique. Accumule des points. Les points ne servent à rien. C'est magnifique.
0clics inutiles
0clics/sec
x1combo
1best combo
0
points inutiles
Jeu 02
🧠 Memory du Vide
Retrouve les paires. Aucun prix à gagner. Juste ton cerveau qui souffre pour rien.
0tentatives
0/8paires
0stemps
Jeu 03
🔮 Boule de Cristal Nulle
Pose une question existentielle. Reçois une réponse cosmique et absurde.
🔮
Jeu 04
🐍 Snake Sans Fin
Il grandit. Il meurt. Comme nous tous. Comme rien.
0score
0record
1niveau
🐍 Snake
Flèches du clavier ou boutons ci-dessous Mange 🍎 · Évite les murs et toi-même
Jeu 05
🤯 Quiz de l'Inutile
10 questions sans aucun intérêt pratique. Réponses qui valent encore moins.
Question 1/10
Chargement…
Jeu 06
🔨 Whack-a-Rien
Tape les riens qui sortent des trous. 30 secondes. Pourquoi ? On ne sait pas.
0score
30secondes
0ratés
🏆
GG !
Tu as gagné rien. Bravo quand même.
* Usage in HTML: data-i18n="key" | data-i18n-ph="key"
*/
const LOGO_SRC = 'logo-onefornada.png';
// ════════════════════════════════════════════
// LANGUAGES
// ════════════════════════════════════════════
const LANGS={fr:{f:'🇫🇷',n:'Français'},en:{f:'🇬🇧',n:'English'},es:{f:'🇪🇸',n:'Español'},de:{f:'🇩🇪',n:'Deutsch'},it:{f:'🇮🇹',n:'Italiano'},pt:{f:'🇵🇹',n:'Português'},ar:{f:'🇸🇦',n:'العربية'},zh:{f:'🇨🇳',n:'中文'},ja:{f:'🇯🇵',n:'日本語'},ko:{f:'🇰🇷',n:'한국어'},ru:{f:'🇷🇺',n:'Русский'},nl:{f:'🇳🇱',n:'Nederlands'}};
// Browser timezone → country code mapping
const TZ_COUNTRY = {
'Europe/Paris':'fr','Europe/London':'en','Europe/Berlin':'de',
'Europe/Madrid':'es','Europe/Rome':'it','Europe/Lisbon':'pt',
'Europe/Amsterdam':'nl','Europe/Brussels':'fr','Europe/Stockholm':'sv',
'Europe/Warsaw':'pl','Europe/Moscow':'ru','Europe/Istanbul':'tr',
'America/New_York':'en','America/Los_Angeles':'en','America/Chicago':'en',
'America/Toronto':'en','America/Vancouver':'en','America/Mexico_City':'es',
'America/Sao_Paulo':'pt','America/Buenos_Aires':'es','America/Bogota':'es',
'America/Lima':'es','America/Santiago':'es',
'Asia/Tokyo':'ja','Asia/Seoul':'ko','Asia/Shanghai':'zh','Asia/Beijing':'zh',
'Asia/Mumbai':'en','Asia/Kolkata':'en','Asia/Dubai':'ar','Asia/Singapore':'en',
'Asia/Bangkok':'en','Asia/Jakarta':'en','Asia/Manila':'en',
'Asia/Riyadh':'ar','Asia/Tel_Aviv':'en','Asia/Beirut':'ar',
'Africa/Cairo':'ar','Africa/Lagos':'en','Africa/Nairobi':'en',
'Africa/Johannesburg':'en','Africa/Casablanca':'fr',
'Australia/Sydney':'en','Australia/Melbourne':'en','Pacific/Auckland':'en',
};
function detectLang() {
// 1. Check localStorage preference
const saved = localStorage.getItem('rien_lang');
if (saved && LANGS[saved]) return saved;
// 2. Detect from timezone
try {
const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
const tzLang = TZ_COUNTRY[tz];
if (tzLang && LANGS[tzLang]) return tzLang;
} catch(e) {}
// 3. Browser language
const bl = (navigator.language || 'fr').split('-')[0].toLowerCase();
return LANGS[bl] ? bl : 'fr';
}
// ════════════════════════════════════════════
// TRANSLATIONS
// ════════════════════════════════════════════
const T={
fr:{
'band.text':'Registre Mondial des Acheteurs de Rien','band.founded':'Fondé en 2026','band.items':'Produits disponibles : 0','band.delivery':'Délai de livraison : immédiat',
'nav.why':'Pourquoi','nav.plans':'Catalogue','nav.games':'Accès Inutile','nav.funds':'Les Fonds','nav.cta':'Acheter rien — 1€',
'hero.kicker':'Transaction officielle · Certifiée par personne',
'hero.t1':'Félicitations.','hero.t2':'Vous allez dépenser','hero.t3':' pour','hero.t4':'ne rien recevoir.',
'hero.sub':'Transaction sécurisée. Livraison garantie de rien. Satisfait ou... rien. C\'est le concept le plus inutile et le plus grand du monde.',
'hero.btn':'🛒 Acheter rien maintenant — 1€',
'hero.btn.sub':'★★★★★ · 247 avis · Aucun produit retourné car il n\'y a rien à retourner',
'hero.fine':'* Aucun bien matériel ou immatériel ne sera livré. L\'acheteur reconnaît avoir été pleinement informé du contenu de sa commande (rien). Le vendeur décline toute responsabilité concernant le vide existentiel pouvant résulter de cet achat.',
'hero.counter.lbl':'Total dépensé pour rien','hero.buyers':'acheteurs','hero.today':'aujourd\'hui','hero.record':'record/jour','hero.weight':'poids livré',
'hero.sub.btn':'🔁 S\'abonner à rien (1€/sem ou 1€/mois)',
'cert.org':'Registre Mondial des Acheteurs de Rien · Siège Social : Nulle Part · SIREN : 000 000 000',
'cert.title.mini':'Certificat officiel','cert.preview.name':'Votre Nom','cert.preview.body':'Acheteur Certifié de Rien™\nN° #?????? · Livraison : Rien','cert.preview.label':'→ Reçu après l\'achat · Partageable en story',
'map.tag':'Propagation mondiale','map.title':'Le rien se répand partout.','map.collectively':'de rien possédé collectivement',
'map.countries':'pays représentés','map.last':'dernier achat','map.rate':'achats/heure','map.weight2':'poids total livré',
'why.tag':'Le concept','why.title':'Pourquoi acheter rien ?','why.sub':'Bonne question. On n\'a pas de réponse satisfaisante. C\'est justement ça le génie.',
'why.c1h':'Record mondial','why.c1p':'On veut battre tous les records de trucs inutiles. Ta participation compte pour rien, littéralement.',
'why.c2h':'Certificat officiel','why.c2p':'Document officiel d\'acheteur de rien. Tampons, numéro de série, signature. À partager en story.',
'why.c3h':'Finance des projets','why.c3p':'Une grande partie des fonds finance des startups et entrepreneurs en recherche de financement réel.',
'why.c4h':'Reforestation','why.c4p':'Une autre partie soutient des œuvres et des opérations de reforestation à impact concret.',
'wall.tag':'Preuve sociale absurde','wall.title':'Ils ont acheté rien.','wall.sub':'Et ils en sont fiers. Rejoins-les.',
'plans.tag':'Catalogue','plans.title':'Combien de rien voulez-vous ?','plans.sub':'Trois options. Le rien est identique dans chacune.',
'plans.once':'Rien ponctuel','plans.once.p':'· une seule fois ·','plans.once.btn':'Acheter rien',
'plans.week':'Rien hebdo','plans.week.p':'· par semaine ·','plans.week.btn':'S\'abonner à rien',
'plans.month':'Rien mensuel','plans.month.p':'· par mois ·','plans.month.btn':'S\'abonner à rien',
'plans.pop':'Le plus inutile',
'pf1':'Rien reçu à la commande','pf2':'Certificat officiel','pf3':'🎮 Accès immédiat aux 6 jeux inutiles','pf4':'Fierté éternelle','pf5':'Badge Rien Hebdo 🏅','pf6':'Classement acheteurs de rien','pf7':'Badge Rien Mensuel 🥇','pf8':'Newsletter du rien',
'foot.tag':'Le seul endroit où 1€ vous garantit rien.','foot.legal':'Mentions légales','foot.cgv':'CGV','foot.funds':'💰 Les Fonds','foot.games':'Jeux','foot.contact':'Contact',
'bm.tag':'Bon de commande officiel','bm.title':'Commander rien','bm.sub':'Vous êtes sur le point d\'acheter absolument rien pour 1€. Veuillez confirmer ci-dessous.',
'bm.name':'Prénom / pseudo','bm.name.ph':'Ex: Michel le Sage','bm.email.ph':'votre@email.fr',
'bm.display':'Afficher dans les acheteurs ?','bm.yes':'✅ Oui, afficher mon achat de rien','bm.no':'👻 Non, acheter rien discrètement',
'bm.btn':'Payer 1€ · Recevoir rien','bm.sec':'SSL · Aucun abonnement caché · Remboursement de rien',
'sm.tag':'Abonnement récurrent','sm.title':'S\'abonner à rien','sm.sub':'Recevoir rien chaque semaine ou chaque mois. Pour 1€.',
'sm.week':'🔥 Hebdo','sm.month':'🌙 Mensuel','sm.btn':'S\'abonner à rien — 1€','sm.sec':'Résiliable à tout moment',
'post.bar':'Confirmation de commande · OneForNada · Merci pour votre non-achat',
'post.title':'Merci pour votre achat.',
'post.msg1':'Vous avez acheté rien.','post.msg2':'Vous possédez maintenant exactement rien.',
'post.msg3':'La livraison de rien a été effectuée avec succès. Vous ne recevrez rien dans un délai de 0 à 0 jours ouvrés.',
'post.gif':'😂 GIF inutile','post.phil':'🧘 Philosophie','post.shuffle':'Autre chose d\'inutile',
'post.dl':'📥 Télécharger le certificat (Story)',
'post.share.lbl':'Partager · Rendre le monde jaloux',
'post.share.big':'J\'ai acheté rien pour 1€ — à ton tour',
'cert.certifies':'Ce certificat atteste officiellement que',
'cert.title':'— Acheteur Certifié de Rien™ —',
'cert.desc':'a volontairement et en pleine conscience dépensé la somme de 1€ (un euro) pour ne rien recevoir en échange. Ce geste d\'une inutilité remarquable et d\'une grandeur absurde est ici solennellement honoré par les autorités compétentes du Rien.',
'cert.sig':'Le Directeur Général du Rien','cert.signed':'Signé avec un stylo vide','cert.validity':'Valable : éternellement',
'toast.bought':'vient d\'acheter rien','toast.welcome':'Bienvenue dans le club du rien !',
'rank.tag':'Compétition internationale','rank.title':'Quel pays achète le plus rien ?','rank.sub':'Classement en temps réel. Fais monter ton pays. L\'honneur national est en jeu.','rank.h.pos':'#','rank.h.country':'Pays','rank.h.purchases':'Achats','rank.h.total':'Total €','rank.loading':'Chargement du classement…','rank.podium.title':'🏆 Podium mondial','rank.your.title':'Ton pays','rank.your.detecting':'Détection…','rank.your.cta':'🛒 Acheter rien pour mon pays',
},
en:{
'band.text':'World Registry of Nothing Buyers','band.founded':'Founded in 2026','band.items':'Available products: 0','band.delivery':'Delivery time: instant',
'nav.why':'Why','nav.plans':'Catalog','nav.games':'Useless Access','nav.funds':'The Funds','nav.cta':'Buy nothing — 1€',
'hero.kicker':'Official transaction · Certified by nobody',
'hero.t1':'Congratulations.','hero.t2':'You are about to spend','hero.t3':' to','hero.t4':'receive absolutely nothing.',
'hero.sub':'Secure transaction. Guaranteed delivery of nothing. Satisfied or... nothing. It\'s the most useless and greatest concept in the world.',
'hero.btn':'🛒 Buy nothing now — 1€',
'hero.btn.sub':'★★★★★ · 247 reviews · No returns because there\'s nothing to return',
'hero.fine':'* No material or immaterial goods will be delivered. The buyer acknowledges being fully informed of the contents of their order (nothing). The seller declines all responsibility for any existential void resulting from this purchase.',
'hero.counter.lbl':'Total spent on nothing','hero.buyers':'buyers','hero.today':'today','hero.record':'record/day','hero.weight':'weight delivered',
'hero.sub.btn':'🔁 Subscribe to nothing (1€/week or 1€/month)',
'cert.org':'World Registry of Nothing Buyers · HQ: Nowhere · REG: 000 000 000',
'cert.title.mini':'Official certificate','cert.preview.name':'Your Name','cert.preview.body':'Certified Buyer of Nothing™\nN° #?????? · Delivery: Nothing','cert.preview.label':'→ Received after purchase · Shareable as story',
'map.tag':'Global spread','map.title':'Nothing spreads everywhere.','map.collectively':'of nothing owned collectively',
'map.countries':'countries represented','map.last':'last purchase','map.rate':'purchases/hour','map.weight2':'total weight delivered',
'why.tag':'The concept','why.title':'Why buy nothing?','why.sub':'Good question. We don\'t have a satisfying answer. That\'s exactly the genius.',
'why.c1h':'World record','why.c1p':'We want to break every record for useless things. Your participation counts for nothing, literally.',
'why.c2h':'Official certificate','why.c2p':'Official nothing buyer document. Stamps, serial number, signature. Share as a story.',
'why.c3h':'Funds projects','why.c3p':'A large portion of funds finances startups and entrepreneurs looking for real funding.',
'why.c4h':'Reforestation','why.c4p':'Another portion supports charities and real-impact reforestation operations.',
'wall.tag':'Absurd social proof','wall.title':'They bought nothing.','wall.sub':'And they\'re proud of it. Join them.',
'plans.tag':'Catalog','plans.title':'How much nothing do you want?','plans.sub':'Three options. Nothing is identical in each.',
'plans.once':'One-time nothing','plans.once.p':'· just once ·','plans.once.btn':'Buy nothing',
'plans.week':'Weekly nothing','plans.week.p':'· per week ·','plans.week.btn':'Subscribe to nothing',
'plans.month':'Monthly nothing','plans.month.p':'· per month ·','plans.month.btn':'Subscribe to nothing',
'plans.pop':'Most useless',
'pf1':'Nothing received at checkout','pf2':'Official certificate','pf3':'🎮 Immediate access to 6 useless games','pf4':'Eternal pride','pf5':'Weekly Nothing Badge 🏅','pf6':'Nothing buyers ranking','pf7':'Monthly Nothing Badge 🥇','pf8':'The nothing newsletter',
'foot.tag':'The only place where 1€ guarantees you nothing.','foot.legal':'Legal notice','foot.cgv':'Terms','foot.funds':'💰 The Funds','foot.games':'Games','foot.contact':'Contact',
'bm.tag':'Official purchase order','bm.title':'Order nothing','bm.sub':'You are about to buy absolutely nothing for 1€. Please confirm below.',
'bm.name':'First name / nickname','bm.name.ph':'Ex: Mike the Wise','bm.email.ph':'your@email.com',
'bm.display':'Show in buyers list?','bm.yes':'✅ Yes, show my nothing purchase','bm.no':'👻 No, buy nothing quietly',
'bm.btn':'Pay 1€ · Receive nothing','bm.sec':'SSL · No hidden subscription · Nothing refund',
'sm.tag':'Recurring subscription','sm.title':'Subscribe to nothing','sm.sub':'Receive nothing every week or month. For 1€.',
'sm.week':'🔥 Weekly','sm.month':'🌙 Monthly','sm.btn':'Subscribe to nothing — 1€','sm.sec':'Cancel anytime',
'post.bar':'Order confirmation · OneForNada · Thank you for your non-purchase',
'post.title':'Thank you for your purchase.',
'post.msg1':'You bought nothing.','post.msg2':'You now own exactly nothing.',
'post.msg3':'Nothing was delivered successfully. You will receive nothing within 0 to 0 business days.',
'post.gif':'😂 Useless GIF','post.phil':'🧘 Philosophy','post.shuffle':'Something else useless',
'post.dl':'📥 Download certificate (Story)',
'post.share.lbl':'Share · Make the world jealous',
'post.share.big':'I bought nothing for 1€ — your turn',
'cert.certifies':'This certificate officially attests that',
'cert.title':'— Certified Buyer of Nothing™ —',
'cert.desc':'voluntarily and consciously spent the sum of 1€ (one euro) to receive nothing in exchange. This act of remarkable uselessness and absurd greatness is hereby solemnly honored by the competent authorities of Nothing.',
'cert.sig':'Director General of Nothing','cert.signed':'Signed with an empty pen','cert.validity':'Valid: eternally',
'toast.bought':'just bought nothing','toast.welcome':'Welcome to the nothing club!',
'rank.tag':'International competition','rank.title':'Which country buys the most nothing?','rank.sub':'Real-time ranking. Boost your country. National honor is at stake.','rank.h.pos':'#','rank.h.country':'Country','rank.h.purchases':'Purchases','rank.h.total':'Total €','rank.loading':'Loading ranking…','rank.podium.title':'🏆 World Podium','rank.your.title':'Your country','rank.your.detecting':'Detecting…','rank.your.cta':'🛒 Buy nothing for my country',
},
es:{
'band.text':'Registro Mundial de Compradores de Nada','band.founded':'Fundado en 2026','band.items':'Productos disponibles: 0','band.delivery':'Plazo de entrega: inmediato',
'nav.why':'Por qué','nav.plans':'Catálogo','nav.games':'Acceso Inútil','nav.funds':'Los Fondos','nav.cta':'Comprar nada — 1€',
'hero.kicker':'Transacción oficial · Certificada por nadie',
'hero.t1':'Felicitaciones.','hero.t2':'Va a gastar','hero.t3':' para','hero.t4':'no recibir absolutamente nada.',
'hero.sub':'Transacción segura. Entrega garantizada de nada. Satisfecho o... nada.',
'hero.btn':'🛒 Comprar nada ahora — 1€','hero.btn.sub':'★★★★★ · 247 reseñas · Ninguna devolución porque no hay nada que devolver',
'hero.fine':'* No se entregará ningún bien material o inmaterial. El comprador reconoce haber sido plenamente informado del contenido de su pedido (nada).',
'hero.counter.lbl':'Total gastado en nada','hero.buyers':'compradores','hero.today':'hoy','hero.record':'récord/día','hero.weight':'peso entregado',
'hero.sub.btn':'🔁 Suscribirse a nada (1€/sem o 1€/mes)',
'cert.org':'Registro Mundial de Compradores de Nada · Sede: En Ningún Lugar','cert.title.mini':'Certificado oficial','cert.preview.name':'Tu Nombre','cert.preview.body':'Comprador Certificado de Nada™','cert.preview.label':'→ Recibido tras la compra',
'map.tag':'Propagación mundial','map.title':'La nada se extiende por todas partes.','map.collectively':'de nada poseída colectivamente','map.countries':'países representados','map.last':'última compra','map.rate':'compras/hora','map.weight2':'peso total entregado',
'why.tag':'El concepto','why.title':'¿Por qué comprar nada?','why.sub':'Buena pregunta. No tenemos respuesta satisfactoria. Eso es exactamente el genio.',
'why.c1h':'Récord mundial','why.c1p':'Queremos batir todos los récords de cosas inútiles.','why.c2h':'Certificado oficial','why.c2p':'Documento oficial de comprador de nada. Sellos, número de serie, firma.','why.c3h':'Financia proyectos','why.c3p':'Gran parte de los fondos financia startups.','why.c4h':'Reforestación','why.c4p':'Otra parte apoya operaciones de reforestación de impacto real.',
'wall.tag':'Prueba social absurda','wall.title':'Ellos compraron nada.','wall.sub':'Y están orgullosos. Únete a ellos.',
'plans.tag':'Catálogo','plans.title':'¿Cuánta nada quieres?','plans.sub':'Tres opciones. La nada es idéntica en cada una.',
'plans.once':'Nada puntual','plans.once.p':'· solo una vez ·','plans.once.btn':'Comprar nada',
'plans.week':'Nada semanal','plans.week.p':'· por semana ·','plans.week.btn':'Suscribirse a nada',
'plans.month':'Nada mensual','plans.month.p':'· por mes ·','plans.month.btn':'Suscribirse a nada',
'plans.pop':'Lo más inútil','pf1':'Nada recibido al pedir','pf2':'Certificado oficial','pf3':'Acceso a juegos inútiles','pf4':'Orgullo eterno','pf5':'Insignia Nada Semanal 🏅','pf6':'Clasificación','pf7':'Insignia Nada Mensual 🥇','pf8':'Newsletter de la nada',
'foot.tag':'El único lugar donde 1€ te garantiza nada.','foot.legal':'Aviso legal','foot.cgv':'Términos','foot.funds':'💰 Los Fondos','foot.games':'Juegos','foot.contact':'Contacto',
'bm.tag':'Orden de compra oficial','bm.title':'Pedir nada','bm.sub':'Está a punto de comprar absolutamente nada por 1€.','bm.name':'Nombre / apodo','bm.name.ph':'Ej: Miguel el Sabio','bm.email.ph':'tu@email.com','bm.display':'¿Mostrar en compradores?','bm.yes':'✅ Sí, mostrar mi compra de nada','bm.no':'👻 No, comprar nada discretamente','bm.btn':'Pagar 1€ · Recibir nada','bm.sec':'SSL · Sin suscripción oculta',
'sm.tag':'Suscripción recurrente','sm.title':'Suscribirse a nada','sm.sub':'Recibir nada cada semana o mes. Por 1€.','sm.week':'🔥 Semanal','sm.month':'🌙 Mensual','sm.btn':'Suscribirse a nada — 1€','sm.sec':'Cancelar en cualquier momento',
'post.bar':'Confirmación de pedido · OneForNada','post.title':'Gracias por su compra.','post.msg1':'Ha comprado nada.','post.msg2':'Ahora posee exactamente nada.','post.msg3':'La entrega de nada fue exitosa. No recibirá nada en 0 días hábiles.',
'post.gif':'😂 GIF inútil','post.phil':'🧘 Filosofía','post.shuffle':'Otra cosa inútil','post.dl':'📥 Descargar certificado','post.share.lbl':'Compartir · Hacer al mundo envidioso','post.share.big':'Compré nada por 1€ — tu turno',
'cert.certifies':'Este certificado atestigua oficialmente que','cert.title':'— Comprador Certificado de Nada™ —','cert.desc':'ha gastado voluntariamente 1€ para no recibir nada a cambio.','cert.sig':'Director General de la Nada','cert.signed':'Firmado con un bolígrafo vacío','cert.validity':'Válido: eternamente',
'toast.bought':'acaba de comprar nada','toast.welcome':'¡Bienvenido al club de la nada!',
'rank.tag':'Competición internacional','rank.title':'¿Qué país compra más nada?','rank.sub':'Clasificación en tiempo real. Sube a tu país.','rank.h.pos':'#','rank.h.country':'País','rank.h.purchases':'Compras','rank.h.total':'Total €','rank.loading':'Cargando clasificación…','rank.podium.title':'🏆 Podio mundial','rank.your.title':'Tu país','rank.your.detecting':'Detectando…','rank.your.cta':'🛒 Comprar nada por mi país',
},
de:{'band.text':'Weltregister der Nichts-Käufer','band.founded':'Gegründet 2026','band.items':'Verfügbare Produkte: 0','band.delivery':'Lieferzeit: sofort','nav.why':'Warum','nav.plans':'Katalog','nav.games':'Nutzloser Zugang','nav.funds':'Die Fonds','nav.cta':'Nichts kaufen — 1€','hero.kicker':'Offizielle Transaktion · Von niemandem zertifiziert','hero.t1':'Herzlichen Glückwunsch.','hero.t2':'Sie werden','hero.t3':' ausgeben für','hero.t4':'absolut nichts erhalten.','hero.sub':'Sichere Transaktion. Garantierte Lieferung von nichts. Zufrieden oder... nichts.','hero.btn':'🛒 Nichts kaufen — 1€','hero.btn.sub':'★★★★★ · 247 Bewertungen · Keine Rücksendungen, weil es nichts zurückzusenden gibt','hero.fine':'* Es werden keine materiellen oder immateriellen Güter geliefert.','hero.counter.lbl':'Gesamtbetrag für nichts ausgegeben','hero.buyers':'Käufer','hero.today':'heute','hero.record':'Rekord/Tag','hero.weight':'Gewicht geliefert','hero.sub.btn':'🔁 Nichts abonnieren','cert.org':'Weltregister der Nichts-Käufer · Sitz: Nirgendwo','cert.title.mini':'Offizielles Zertifikat','cert.preview.name':'Ihr Name','cert.preview.body':'Zertifizierter Nichts-Käufer™','cert.preview.label':'→ Nach dem Kauf erhalten','map.tag':'Weltweite Ausbreitung','map.title':'Nichts verbreitet sich überall.','map.collectively':'von kollektiv besessenen Nichts','map.countries':'vertretene Länder','map.last':'letzter Kauf','map.rate':'Käufe/Stunde','map.weight2':'Gesamtgewicht geliefert','why.tag':'Das Konzept','why.title':'Warum nichts kaufen?','why.sub':'Gute Frage. Wir haben keine befriedigende Antwort.','why.c1h':'Weltrekord','why.c1p':'Wir wollen alle Rekorde für nutzlose Dinge brechen.','why.c2h':'Offizielles Zertifikat','why.c2p':'Offizielles Nichts-Käufer-Dokument. Stempel, Seriennummer, Unterschrift.','why.c3h':'Projekte finanzieren','why.c3p':'Ein großer Teil der Mittel finanziert Startups.','why.c4h':'Aufforstung','why.c4p':'Ein weiterer Teil unterstützt Aufforstungsaktionen.','wall.tag':'Absurder sozialer Beweis','wall.title':'Sie kauften nichts.','wall.sub':'Und sie sind stolz darauf.','plans.tag':'Katalog','plans.title':'Wie viel Nichts möchten Sie?','plans.sub':'Drei Optionen. Nichts ist in jeder gleich.','plans.once':'Einmaliges Nichts','plans.once.p':'· nur einmal ·','plans.once.btn':'Nichts kaufen','plans.week':'Wöchentliches Nichts','plans.week.p':'· pro Woche ·','plans.week.btn':'Nichts abonnieren','plans.month':'Monatliches Nichts','plans.month.p':'· pro Monat ·','plans.month.btn':'Nichts abonnieren','plans.pop':'Am nutzlosesten','pf1':'Nichts beim Kauf erhalten','pf2':'Offizielles Zertifikat','pf3':'Zugang zu nutzlosen Spielen','pf4':'Ewiger Stolz','pf5':'Wöchentliches Nichts-Abzeichen 🏅','pf6':'Nichts-Käufer-Ranking','pf7':'Monatliches Nichts-Abzeichen 🥇','pf8':'Nichts-Newsletter','foot.tag':'Der einzige Ort, wo 1€ Ihnen nichts garantiert.','foot.legal':'Impressum','foot.cgv':'AGB','foot.funds':'💰 Die Fonds','foot.games':'Spiele','foot.contact':'Kontakt','bm.tag':'Offizieller Kaufauftrag','bm.title':'Nichts bestellen','bm.sub':'Sie sind dabei, absolut nichts für 1€ zu kaufen.','bm.name':'Vorname / Spitzname','bm.name.ph':'Z.B: Max der Weise','bm.email.ph':'sie@email.de','bm.display':'In Käuferliste anzeigen?','bm.yes':'✅ Ja, meinen Nichts-Kauf zeigen','bm.no':'👻 Nein, diskret nichts kaufen','bm.btn':'1€ zahlen · Nichts erhalten','bm.sec':'SSL · Kein verstecktes Abo','sm.tag':'Wiederkehrendes Abo','sm.title':'Nichts abonnieren','sm.sub':'Jede Woche oder jeden Monat nichts erhalten. Für 1€.','sm.week':'🔥 Wöchentlich','sm.month':'🌙 Monatlich','sm.btn':'Nichts abonnieren — 1€','sm.sec':'Jederzeit kündbar','post.bar':'Bestellbestätigung · OneForNada','post.title':'Danke für Ihren Kauf.','post.msg1':'Sie haben nichts gekauft.','post.msg2':'Sie besitzen jetzt genau nichts.','post.msg3':'Nichts wurde erfolgreich geliefert. Sie erhalten nichts in 0 Werktagen.','post.gif':'😂 Nutzloses GIF','post.phil':'🧘 Philosophie','post.shuffle':'Etwas anderes Nutzloses','post.dl':'📥 Zertifikat herunterladen','post.share.lbl':'Teilen · Die Welt neidisch machen','post.share.big':'Ich kaufte nichts für 1€ — du bist dran','cert.certifies':'Dieses Zertifikat bescheinigt offiziell, dass','cert.title':'— Zertifizierter Nichts-Käufer™ —','cert.desc':'freiwillig 1€ ausgegeben hat, um nichts zu erhalten.','cert.sig':'Generaldirektor des Nichts','cert.signed':'Unterzeichnet mit einem leeren Stift','cert.validity':'Gültig: ewig','toast.bought':'hat gerade nichts gekauft','toast.welcome':'Willkommen im Nichts-Club!'},
it:{'band.text':'Registro Mondiale degli Acquirenti di Niente','band.founded':'Fondato nel 2026','band.items':'Prodotti disponibili: 0','band.delivery':'Tempo di consegna: immediato','nav.why':'Perché','nav.plans':'Catalogo','nav.games':'Accesso Inutile','nav.funds':'I Fondi','nav.cta':'Comprare niente — 1€','hero.kicker':'Transazione ufficiale · Certificata da nessuno','hero.t1':'Congratulazioni.','hero.t2':'Sta per spendere','hero.t3':' per','hero.t4':'non ricevere assolutamente niente.','hero.sub':'Transazione sicura. Consegna garantita di niente. Soddisfatti o... niente.','hero.btn':'🛒 Comprare niente ora — 1€','hero.btn.sub':'★★★★★ · 247 recensioni · Nessuna restituzione perché non c\'è niente da restituire','hero.fine':'* Nessun bene materiale o immateriale verrà consegnato.','hero.counter.lbl':'Totale speso per niente','hero.buyers':'acquirenti','hero.today':'oggi','hero.record':'record/giorno','hero.weight':'peso consegnato','hero.sub.btn':'🔁 Abbonarsi a niente','cert.org':'Registro Mondiale degli Acquirenti di Niente · Sede: Da Nessuna Parte','cert.title.mini':'Certificato ufficiale','cert.preview.name':'Il Tuo Nome','cert.preview.body':'Acquirente Certificato di Niente™','cert.preview.label':'→ Ricevuto dopo l\'acquisto','map.tag':'Diffusione mondiale','map.title':'Il niente si diffonde ovunque.','map.collectively':'di niente posseduto collettivamente','map.countries':'paesi rappresentati','map.last':'ultimo acquisto','map.rate':'acquisti/ora','map.weight2':'peso totale consegnato','why.tag':'Il concetto','why.title':'Perché comprare niente?','why.sub':'Buona domanda. Non abbiamo risposta soddisfacente.','why.c1h':'Record mondiale','why.c1p':'Vogliamo battere tutti i record di cose inutili.','why.c2h':'Certificato ufficiale','why.c2p':'Documento ufficiale di acquirente di niente.','why.c3h':'Finanzia progetti','why.c3p':'Gran parte dei fondi finanzia startup.','why.c4h':'Rimboschimento','why.c4p':'Un\'altra parte supporta operazioni di rimboschimento.','wall.tag':'Prova sociale assurda','wall.title':'Hanno comprato niente.','wall.sub':'E ne sono fieri. Unisciti a loro.','plans.tag':'Catalogo','plans.title':'Quanto niente vuoi?','plans.sub':'Tre opzioni. Il niente è identico in ciascuna.','plans.once':'Niente puntuale','plans.once.p':'· solo una volta ·','plans.once.btn':'Comprare niente','plans.week':'Niente settimanale','plans.week.p':'· a settimana ·','plans.week.btn':'Abbonarsi a niente','plans.month':'Niente mensile','plans.month.p':'· al mese ·','plans.month.btn':'Abbonarsi a niente','plans.pop':'Il più inutile','pf1':'Niente ricevuto all\'ordine','pf2':'Certificato ufficiale','pf3':'Accesso ai giochi inutili','pf4':'Orgoglio eterno','pf5':'Badge Niente Settimanale 🏅','pf6':'Classifica acquirenti','pf7':'Badge Niente Mensile 🥇','pf8':'Newsletter del niente','foot.tag':'L\'unico posto dove 1€ ti garantisce niente.','foot.legal':'Note legali','foot.cgv':'Termini','foot.funds':'💰 I Fondi','foot.games':'Giochi','foot.contact':'Contatto','bm.tag':'Ordine di acquisto ufficiale','bm.title':'Ordinare niente','bm.sub':'Sta per comprare assolutamente niente per 1€.','bm.name':'Nome / soprannome','bm.name.ph':'Es: Michele il Saggio','bm.email.ph':'tu@email.it','bm.display':'Mostrare nella lista acquirenti?','bm.yes':'✅ Sì, mostrare il mio acquisto di niente','bm.no':'👻 No, comprare niente discretamente','bm.btn':'Pagare 1€ · Ricevere niente','bm.sec':'SSL · Nessun abbonamento nascosto','sm.tag':'Abbonamento ricorrente','sm.title':'Abbonarsi a niente','sm.sub':'Ricevere niente ogni settimana o mese. Per 1€.','sm.week':'🔥 Settimanale','sm.month':'🌙 Mensile','sm.btn':'Abbonarsi a niente — 1€','sm.sec':'Annulla in qualsiasi momento','post.bar':'Conferma ordine · OneForNada','post.title':'Grazie per il suo acquisto.','post.msg1':'Ha comprato niente.','post.msg2':'Ora possiede esattamente niente.','post.msg3':'Niente è stato consegnato con successo. Non riceverà niente in 0 giorni lavorativi.','post.gif':'😂 GIF inutile','post.phil':'🧘 Filosofia','post.shuffle':'Qualcos\'altro di inutile','post.dl':'📥 Scaricare certificato','post.share.lbl':'Condividere · Rendere il mondo invidioso','post.share.big':'Ho comprato niente per 1€ — tocca a te','cert.certifies':'Questo certificato attesta ufficialmente che','cert.title':'— Acquirente Certificato di Niente™ —','cert.desc':'ha speso volontariamente 1€ per non ricevere niente in cambio.','cert.sig':'Direttore Generale del Niente','cert.signed':'Firmato con una penna vuota','cert.validity':'Valido: eternamente','toast.bought':'ha appena comprato niente','toast.welcome':'Benvenuto nel club del niente!'},
pt:{'band.text':'Registo Mundial de Compradores de Nada','band.founded':'Fundado em 2026','band.items':'Produtos disponíveis: 0','band.delivery':'Prazo de entrega: imediato','nav.why':'Por quê','nav.plans':'Catálogo','nav.games':'Acesso Inútil','nav.funds':'Os Fundos','nav.cta':'Comprar nada — 1€','hero.kicker':'Transação oficial · Certificada por ninguém','hero.t1':'Parabéns.','hero.t2':'Você vai gastar','hero.t3':' para','hero.t4':'não receber absolutamente nada.','hero.sub':'Transação segura. Entrega garantida de nada. Satisfeito ou... nada.','hero.btn':'🛒 Comprar nada agora — 1€','hero.btn.sub':'★★★★★ · 247 avaliações · Sem devoluções porque não há nada para devolver','hero.fine':'* Nenhum bem material ou imaterial será entregue.','hero.counter.lbl':'Total gasto em nada','hero.buyers':'compradores','hero.today':'hoje','hero.record':'recorde/dia','hero.weight':'peso entregue','hero.sub.btn':'🔁 Subscrever nada','cert.org':'Registo Mundial de Compradores de Nada · Sede: Em Lugar Nenhum','cert.title.mini':'Certificado oficial','cert.preview.name':'Seu Nome','cert.preview.body':'Comprador Certificado de Nada™','cert.preview.label':'→ Recebido após a compra','map.tag':'Propagação mundial','map.title':'O nada se espalha por todo o lado.','map.collectively':'de nada possuído coletivamente','map.countries':'países representados','map.last':'última compra','map.rate':'compras/hora','map.weight2':'peso total entregue','why.tag':'O conceito','why.title':'Por que comprar nada?','why.sub':'Boa pergunta. Não temos resposta satisfatória.','why.c1h':'Recorde mundial','why.c1p':'Queremos quebrar todos os recordes de coisas inúteis.','why.c2h':'Certificado oficial','why.c2p':'Documento oficial de comprador de nada.','why.c3h':'Financia projetos','why.c3p':'Grande parte dos fundos financia startups.','why.c4h':'Reflorestamento','why.c4p':'Outra parte apoia operações de reflorestamento.','wall.tag':'Prova social absurda','wall.title':'Eles compraram nada.','wall.sub':'E estão orgulhosos. Junte-se a eles.','plans.tag':'Catálogo','plans.title':'Quanto nada você quer?','plans.sub':'Três opções. O nada é idêntico em cada uma.','plans.once':'Nada pontual','plans.once.p':'· apenas uma vez ·','plans.once.btn':'Comprar nada','plans.week':'Nada semanal','plans.week.p':'· por semana ·','plans.week.btn':'Subscrever nada','plans.month':'Nada mensal','plans.month.p':'· por mês ·','plans.month.btn':'Subscrever nada','plans.pop':'O mais inútil','pf1':'Nada recebido no pedido','pf2':'Certificado oficial','pf3':'Acesso a jogos inúteis','pf4':'Orgulho eterno','pf5':'Emblema Nada Semanal 🏅','pf6':'Ranking compradores','pf7':'Emblema Nada Mensal 🥇','pf8':'Newsletter do nada','foot.tag':'O único lugar onde 1€ garante nada.','foot.legal':'Aviso legal','foot.cgv':'Termos','foot.funds':'💰 Os Fundos','foot.games':'Jogos','foot.contact':'Contato','bm.tag':'Ordem de compra oficial','bm.title':'Pedir nada','bm.sub':'Está prestes a comprar absolutamente nada por 1€.','bm.name':'Nome / apelido','bm.name.ph':'Ex: Miguel o Sábio','bm.email.ph':'você@email.com','bm.display':'Mostrar na lista de compradores?','bm.yes':'✅ Sim, mostrar minha compra de nada','bm.no':'👻 Não, comprar nada discretamente','bm.btn':'Pagar 1€ · Receber nada','bm.sec':'SSL · Sem subscrição oculta','sm.tag':'Subscrição recorrente','sm.title':'Subscrever nada','sm.sub':'Receber nada toda semana ou mês. Por 1€.','sm.week':'🔥 Semanal','sm.month':'🌙 Mensal','sm.btn':'Subscrever nada — 1€','sm.sec':'Cancelar a qualquer momento','post.bar':'Confirmação de pedido · OneForNada','post.title':'Obrigado pela sua compra.','post.msg1':'Você comprou nada.','post.msg2':'Você agora possui exatamente nada.','post.msg3':'Nada foi entregue com sucesso. Você não receberá nada em 0 dias úteis.','post.gif':'😂 GIF inútil','post.phil':'🧘 Filosofia','post.shuffle':'Outra coisa inútil','post.dl':'📥 Baixar certificado','post.share.lbl':'Compartilhar · Deixar o mundo com inveja','post.share.big':'Comprei nada por 1€ — sua vez','cert.certifies':'Este certificado atesta oficialmente que','cert.title':'— Comprador Certificado de Nada™ —','cert.desc':'gastou voluntariamente 1€ para não receber nada em troca.','cert.sig':'Diretor-Geral do Nada','cert.signed':'Assinado com uma caneta vazia','cert.validity':'Válido: eternamente','toast.bought':'acabou de comprar nada','toast.welcome':'Bem-vindo ao clube do nada!'},
};
['ar','zh','ja','ko','ru','nl'].forEach(l=>{T[l]=T.en;});
// Translation for shared nav elements (all pages)
const NAV_T = {
fr: {
'nav.why':'Pourquoi','nav.plans':'Catalogue','nav.games':'Accès Inutile',
'nav.funds':'Les Fonds','nav.cta':'Acheter rien — 1€',
'nav.cgv':'CGV','nav.legal':'Mentions légales','nav.contact':'Contact','nav.privacy':'Politique de conf.',
'band.main':'Registre Mondial des Acheteurs de Rien · Fondé en 2026 · Produits disponibles : 0',
'foot.tag':'Le seul endroit où 1€ vous garantit rien.',
},
en: {
'nav.why':'Why','nav.plans':'Catalog','nav.games':'Useless Access',
'nav.funds':'The Funds','nav.cta':'Buy nothing — 1€',
'nav.cgv':'Terms','nav.legal':'Legal notice','nav.contact':'Contact','nav.privacy':'Politique de conf.',
'band.main':'World Registry of Nothing Buyers · Founded 2026 · Available products: 0',
'foot.tag':'The only place where 1€ guarantees you nothing.',
},
es: {
'nav.why':'Por qué','nav.plans':'Catálogo','nav.games':'Acceso Inútil',
'nav.funds':'Los Fondos','nav.cta':'Comprar nada — 1€',
'nav.cgv':'Términos','nav.legal':'Aviso legal','nav.contact':'Contacto',
'band.main':'Registro Mundial de Compradores de Nada · Fundado 2026 · Productos: 0',
'foot.tag':'El único lugar donde 1€ te garantiza nada.',
},
de: {
'nav.why':'Warum','nav.plans':'Katalog','nav.games':'Nutzloser Zugang',
'nav.funds':'Die Fonds','nav.cta':'Nichts kaufen — 1€',
'nav.cgv':'AGB','nav.legal':'Impressum','nav.contact':'Kontakt','nav.privacy':'Datenschutz',
'band.main':'Weltregister der Nichts-Käufer · Gegründet 2026 · Verfügbare Produkte: 0',
'foot.tag':'Der einzige Ort, wo 1€ Ihnen nichts garantiert.',
},
it: {
'nav.why':'Perché','nav.plans':'Catalogo','nav.games':'Accesso Inutile',
'nav.funds':'I Fondi','nav.cta':'Comprare niente — 1€',
'nav.cgv':'Termini','nav.legal':'Note legali','nav.contact':'Contatto','nav.privacy':'Privacy',
'band.main':'Registro Mondiale degli Acquirenti di Niente · Fondato 2026 · Prodotti: 0',
'foot.tag':'L\'unico posto dove 1€ ti garantisce niente.',
},
pt: {
'nav.why':'Por quê','nav.plans':'Catálogo','nav.games':'Acesso Inútil',
'nav.funds':'Os Fundos','nav.cta':'Comprar nada — 1€',
'nav.cgv':'Termos','nav.legal':'Aviso legal','nav.contact':'Contacto','nav.privacy':'Privacidade',
'band.main':'Registo Mundial de Compradores de Nada · Fundado 2026 · Produtos: 0',
'foot.tag':'O único lugar onde 1€ garante nada.',
},
ja: {
'nav.why':'なぜ','nav.plans':'プラン','nav.games':'Accès Inutile',
'nav.funds':'資金','nav.cta':'何も買わない — 1€',
'nav.cgv':'利用規約','nav.legal':'法的情報','nav.contact':'お問い合わせ','nav.privacy':'プライバシー',
'band.main':'何も購入者の世界レジスター · 2026年設立',
'foot.tag':'1€で何も保証する唯一の場所。',
},
ko: {
'nav.why':'왜','nav.plans':'플랜','nav.games':'Accès Inutile',
'nav.funds':'펀드','nav.cta':'아무것도 구매 — 1€',
'nav.cgv':'이용약관','nav.legal':'법적 고지','nav.contact':'문의','nav.privacy':'개인정보',
'band.main':'아무것도 구매자 세계 레지스터 · 2026년 설립',
'foot.tag':'1€로 아무것도 보장하는 유일한 곳.',
},
zh: {
'nav.why':'为什么','nav.plans':'计划','nav.games':'Accès Inutile',
'nav.funds':'基金','nav.cta':'购买什么都没有 — 1€',
'nav.cgv':'条款','nav.legal':'法律声明','nav.contact':'联系我们','nav.privacy':'隐私政策',
'band.main':'什么都没有买家世界登记处 · 2026年成立',
'foot.tag':'唯一一个1€保证什么都没有的地方。',
},
ar: {
'nav.why':'لماذا','nav.plans':'الفئات','nav.games':'Accès Inutile',
'nav.funds':'الصناديق','nav.cta':'اشترِ لا شيء — 1€',
'nav.cgv':'الشروط','nav.legal':'المعلومات القانونية','nav.contact':'اتصل بنا','nav.privacy':'الخصوصية',
'band.main':'السجل العالمي لمشتري لا شيء · تأسس 2026',
'foot.tag':'المكان الوحيد الذي يضمن لك 1€ لا شيء.',
},
ru: {
'nav.why':'Почему','nav.plans':'Каталог','nav.games':'Accès Inutile',
'nav.funds':'Фонды','nav.cta':'Купить ничего — 1€',
'nav.cgv':'Условия','nav.legal':'Правовая информация','nav.contact':'Контакт','nav.privacy':'Конфиденциальность',
'band.main':'Мировой реестр покупателей ничего · Основан в 2026',
'foot.tag':'Единственное место, где 1€ гарантирует вам ничего.',
},
nl: {
'nav.why':'Waarom','nav.plans':'Catalogus','nav.games':'Accès Inutile',
'nav.funds':'De Fondsen','nav.cta':'Niets kopen — 1€',
'nav.cgv':'Voorwaarden','nav.legal':'Wettelijke informatie','nav.contact':'Contact','nav.privacy':'Politique de conf.',
'band.main':'Wereldregister van Niets-Kopers · Opgericht 2026',
'foot.tag':'De enige plek waar 1€ u niets garandeert.',
},
};
// Fallback all missing langs to EN
['sv','tr','pl'].forEach(l => { NAV_T[l] = NAV_T.en; });
// Fallback to EN for other languages
['ja','ko','zh','ar','ru','nl'].forEach(l => { NAV_T[l] = NAV_T.en; });
function nt(key) {
const lang = window.RIEN_LANG || 'fr';
return (NAV_T[lang] && NAV_T[lang][key]) || (NAV_T.en && NAV_T.en[key]) || key;
}
// ════════════════════════════════════════════
// CURRENCIES
// Prix de base : 1€ — converti dans la devise locale
// La facturation Stripe reste en EUR (1€)
// L'affichage est indicatif et arrondi
// ════════════════════════════════════════════
// Taux de change EUR → devise (1€ = X devise)
// Règle : prix affiché = max(1, ceil(taux)) pour toujours valoir >= 1€
// Si 1 unité locale > 1€ → on garde 1
// Si 1 unité locale < 1€ → on prend le nb d'unités équivalent à 1€ (arrondi au-dessus)
const CURRENCIES = {
// rate = combien d'unités locales pour 1€
// amount = prix affiché (calculé automatiquement ci-dessous)
EUR: { symbol:'€', name:'Euro', flag:'🇪🇺', rate:1, pre:false },
USD: { symbol:'$', name:'US Dollar', flag:'🇺🇸', rate:1.09, pre:true },
GBP: { symbol:'£', name:'British Pound', flag:'🇬🇧', rate:0.86, pre:true },
JPY: { symbol:'¥', name:'Japanese Yen', flag:'🇯🇵', rate:163, pre:true },
CAD: { symbol:'CA$', name:'Canadian Dollar', flag:'🇨🇦', rate:1.48, pre:true },
AUD: { symbol:'A$', name:'Australian Dollar', flag:'🇦🇺', rate:1.65, pre:true },
CHF: { symbol:'Fr', name:'Swiss Franc', flag:'🇨🇭', rate:0.96, pre:false },
SEK: { symbol:'kr', name:'Swedish Krona', flag:'🇸🇪', rate:11.3, pre:false },
NOK: { symbol:'kr', name:'Norwegian Krone', flag:'🇳🇴', rate:11.6, pre:false },
DKK: { symbol:'kr', name:'Danish Krone', flag:'🇩🇰', rate:7.45, pre:false },
BRL: { symbol:'R$', name:'Brazilian Real', flag:'🇧🇷', rate:5.45, pre:true },
MXN: { symbol:'$', name:'Mexican Peso', flag:'🇲🇽', rate:18.9, pre:true },
INR: { symbol:'₹', name:'Indian Rupee', flag:'🇮🇳', rate:90, pre:true },
CNY: { symbol:'¥', name:'Chinese Yuan', flag:'🇨🇳', rate:7.9, pre:true },
KRW: { symbol:'₩', name:'Korean Won', flag:'🇰🇷', rate:1450, pre:true },
SGD: { symbol:'S$', name:'Singapore Dollar', flag:'🇸🇬', rate:1.47, pre:true },
AED: { symbol:'د.إ', name:'UAE Dirham', flag:'🇦🇪', rate:4.0, pre:false },
SAR: { symbol:'﷼', name:'Saudi Riyal', flag:'🇸🇦', rate:4.09, pre:false },
MAD: { symbol:'MAD', name:'Moroccan Dirham', flag:'🇲🇦', rate:10.8, pre:false },
ZAR: { symbol:'R', name:'South African Rand', flag:'🇿🇦', rate:20.2, pre:true },
NGN: { symbol:'₦', name:'Nigerian Naira', flag:'🇳🇬', rate:1650, pre:true },
PLN: { symbol:'zł', name:'Polish Zloty', flag:'🇵🇱', rate:4.25, pre:false },
TRY: { symbol:'₺', name:'Turkish Lira', flag:'🇹🇷', rate:35.5, pre:true },
NZD: { symbol:'NZ$', name:'New Zealand Dollar', flag:'🇳🇿', rate:1.78, pre:true },
CZK: { symbol:'Kč', name:'Czech Koruna', flag:'🇨🇿', rate:25.2, pre:false },
HUF: { symbol:'Ft', name:'Hungarian Forint', flag:'🇭🇺', rate:390, pre:false },
COP: { symbol:'$', name:'Colombian Peso', flag:'🇨🇴', rate:4300, pre:true },
};
// Calcule le montant à afficher pour chaque devise
// Règle : si 1 unité locale >= 1€ → afficher 1 / sinon → nb d'unités = ceil(taux)
function calcAmount(cur) {
if (cur.rate <= 1) return 1; // 1 unité vaut >= 1€ → on garde 1
return Math.ceil(cur.rate); // ex: ¥163, ₹90, ₩1450
}
function formatPrice(code) {
const cur = CURRENCIES[code] || CURRENCIES.EUR;
const n = calcAmount(cur);
return cur.pre ? cur.symbol + n : n + ' ' + cur.symbol;
}
// Timezone → currency mapping
const TZ_CURRENCY = {
'Europe/Paris':'EUR','Europe/Berlin':'EUR','Europe/Madrid':'EUR',
'Europe/Rome':'EUR','Europe/Lisbon':'EUR','Europe/Amsterdam':'EUR',
'Europe/Brussels':'EUR','Europe/Athens':'EUR','Europe/Helsinki':'EUR',
'Europe/Vienna':'EUR','Europe/Warsaw':'PLN','Europe/Prague':'CZK',
'Europe/Budapest':'HUF','Europe/Stockholm':'SEK','Europe/Oslo':'NOK',
'Europe/Copenhagen':'DKK','Europe/Zurich':'CHF','Europe/London':'GBP',
'Europe/Moscow':'EUR','Europe/Istanbul':'TRY',
'America/New_York':'USD','America/Los_Angeles':'USD','America/Chicago':'USD',
'America/Denver':'USD','America/Toronto':'CAD','America/Vancouver':'CAD',
'America/Sao_Paulo':'BRL','America/Mexico_City':'MXN',
'America/Buenos_Aires':'ARS','America/Bogota':'COP',
'Asia/Tokyo':'JPY','Asia/Seoul':'KRW','Asia/Shanghai':'CNY',
'Asia/Beijing':'CNY','Asia/Mumbai':'INR','Asia/Kolkata':'INR',
'Asia/Dubai':'AED','Asia/Singapore':'SGD','Asia/Riyadh':'SAR',
'Asia/Bangkok':'USD','Asia/Jakarta':'USD',
'Africa/Casablanca':'MAD','Africa/Lagos':'NGN',
'Africa/Johannesburg':'ZAR','Africa/Cairo':'EUR',
'Australia/Sydney':'AUD','Australia/Melbourne':'AUD',
'Pacific/Auckland':'NZD','Europe/London':'GBP',
};
// ── State ──
window.RIEN_CURRENCY = 'EUR';
function detectCurrency() {
const saved = localStorage.getItem('rien_currency');
if (saved && CURRENCIES[saved]) return saved;
try {
const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
const tzCur = TZ_CURRENCY[tz];
if (tzCur && CURRENCIES[tzCur]) return tzCur;
} catch(e) {}
return 'EUR';
}
// Price display — 1€ minimum equivalent in local currency
function priceDisplay() {
return formatPrice(window.RIEN_CURRENCY || 'EUR');
}
// ── Currency picker HTML ──
function renderCurrencyPicker() {
return `
`;
}
function buildCurrencyDD() {
const dd = document.getElementById('cur-dd');
if (!dd) return;
dd.innerHTML = Object.entries(CURRENCIES).map(([code, cur]) =>
`
${cur.flag}${formatPrice(code)}${cur.name}
`
).join('');
}
function toggleCurSel() {
document.getElementById('cur-sel')?.classList.toggle('open');
}
function setCurrency(code) {
if (!CURRENCIES[code]) return;
window.RIEN_CURRENCY = code;
localStorage.setItem('rien_currency', code);
const cur = CURRENCIES[code];
const fl = document.getElementById('cur-flag');
const cod = document.getElementById('cur-code');
if (fl) fl.textContent = cur.flag;
if (cod) cod.textContent = formatPrice(code);
document.getElementById('cur-sel')?.classList.remove('open');
buildCurrencyDD();
updateAllPrices();
}
// Met à jour tous les éléments de prix
function updateAllPrices() {
document.querySelectorAll('[data-price]').forEach(el => {
el.textContent = priceDisplay();
});
// Bouton nav
const navCta = document.getElementById('nav-cta');
if (navCta) navCta.textContent = nt('nav.cta').replace('1€', priceDisplay());
// Callback page si défini
if (typeof onCurrencyChange === 'function') onCurrencyChange();
}
// Close currency dropdown on outside click
document.addEventListener('click', e => {
if (!e.target.closest('#cur-sel')) document.getElementById('cur-sel')?.classList.remove('open');
});
// ════════════════════════════════════════════
// TRADUCTIONS PAGES SECONDAIRES
// ════════════════════════════════════════════
const PAGE_T = {
fr: {
// POLITIQUE DE CONFIDENTIALITÉ
'privacy.badge':'🔒 Politique de Confidentialité',
'privacy.title':'Politique de Confidentialité',
'privacy.sub':'Comment nous collectons, utilisons et protégeons vos données personnelles.',
'privacy.updated':'Mise à jour :',
// FONDS
'fonds.tag':'Transparence','fonds.title':'À quoi sert vraiment ton 1€ ?',
'fonds.sub':"Oui, c'est le truc le plus inutile du monde. Mais une grande partie de l'argent collecté sert à quelque chose de concret.",
'fonds.usage.tag':'Usage des fonds','fonds.usage.title':'Où va l'argent ?',
'fonds.usage.sub':'Pas de bullshit. Voici les grandes destinations des fonds collectés.',
'fonds.how.tag':'Le processus','fonds.how.title':'Comment ça marche ?',
'fonds.charter.tag':'Notre engagement','fonds.charter.title':'Ce qu'on te promet.',
'fonds.projects.tag':'Projets financés','fonds.projects.title':'Les premiers projets.',
'fonds.submit.tag':'Soumettre','fonds.submit.title':'Tu as un projet ?',
'fonds.submit.sub':'Remplis le formulaire. On lit tout. Peu importe d'où tu viens.',
'fonds.btn.submit':'🚀 Soumettre mon projet — Gratuit',
'fonds.success.title':'Projet reçu !',
// JEUX
'jeux.gate.tag':'Zone Accès Restreint · Acheteurs de Rien Uniquement',
'jeux.gate.title':'Accès exclusif',
'jeux.gate.sub':'Ces jeux ne servent absolument à rien. C'est pourquoi ils sont réservés aux personnes ayant officiellement acheté rien pour 1€.',
'jeux.gate.btn':'🛒 Acheter rien — Accès immédiat',
'jeux.code.ph':'Code d'accès (reçu par email)',
'jeux.code.btn':'Entrer',
'jeux.header.badge':'✓ Acheteur Certifié de Rien™',
'jeux.header.title':'🎮 Jeux Inutiles',
// CONTACT
'contact.tag':'Nous contacter',
'contact.title':'Une question ?',
'contact.sub':'On lit tous les messages. On ne répond pas toujours vite — on est occupés à ne rien faire.',
'contact.form.title':'Envoyer un message',
'contact.send':'📨 Envoyer le message',
'contact.success.title':'Message envoyé !',
// MENTIONS
'legal.badge':'⚖️ Document légal','legal.title':'Mentions Légales',
// CGV
'cgv.badge':'📋 Document contractuel','cgv.title':'Conditions Générales de Vente',
},
en: {
// PRIVACY POLICY
'privacy.badge':'🔒 Privacy Policy',
'privacy.title':'Privacy Policy',
'privacy.sub':'How we collect, use and protect your personal data.',
'privacy.updated':'Last updated:',
'fonds.tag':'Transparency','fonds.title':'What does your 1€ actually do?',
'fonds.sub':'Yes, it's the most useless thing in the world. But a large part of the money collected serves something concrete.',
'fonds.usage.tag':'Fund usage','fonds.usage.title':'Where does the money go?',
'fonds.usage.sub':'No bullshit. Here are the main destinations of the funds collected.',
'fonds.how.tag':'The process','fonds.how.title':'How does it work?',
'fonds.charter.tag':'Our commitment','fonds.charter.title':'What we promise.',
'fonds.projects.tag':'Funded projects','fonds.projects.title':'The first projects.',
'fonds.submit.tag':'Submit','fonds.submit.title':'Got a project?',
'fonds.submit.sub':'Fill out the form. We read everything. No matter where you're from.',
'fonds.btn.submit':'🚀 Submit my project — Free',
'fonds.success.title':'Project received!',
'jeux.gate.tag':'Restricted Access Zone · Nothing Buyers Only',
'jeux.gate.title':'Exclusive access',
'jeux.gate.sub':'These games are absolutely useless. That's why they're reserved for people who have officially bought nothing for 1€.',
'jeux.gate.btn':'🛒 Buy nothing — Instant access',
'jeux.code.ph':'Access code (received by email)',
'jeux.code.btn':'Enter',
'jeux.header.badge':'✓ Certified Buyer of Nothing™',
'jeux.header.title':'🎮 Useless Games',
'contact.tag':'Contact us',
'contact.title':'Got a question?',
'contact.sub':'We read all messages. We don't always reply fast — we're busy doing nothing.',
'contact.form.title':'Send a message',
'contact.send':'📨 Send message',
'contact.success.title':'Message sent!',
'legal.badge':'⚖️ Legal document','legal.title':'Legal Notice',
'cgv.badge':'📋 Legal document','cgv.title':'Terms and Conditions',
},
es: {
'privacy.badge':'🔒 Política de Privacidad',
'privacy.title':'Política de Privacidad',
'privacy.sub':'Cómo recopilamos, usamos y protegemos sus datos personales.',
'privacy.updated':'Actualizado:',
'fonds.tag':'Transparencia','fonds.title':'¿Para qué sirve tu 1€?',
'fonds.sub':'Sí, es lo más inútil del mundo. Pero gran parte del dinero sirve para algo concreto.',
'fonds.usage.tag':'Uso de fondos','fonds.usage.title':'¿Adónde va el dinero?',
'fonds.usage.sub':'Sin rodeos. Aquí están los principales destinos de los fondos.',
'fonds.how.tag':'El proceso','fonds.how.title':'¿Cómo funciona?',
'fonds.charter.tag':'Nuestro compromiso','fonds.charter.title':'Lo que prometemos.',
'fonds.projects.tag':'Proyectos financiados','fonds.projects.title':'Los primeros proyectos.',
'fonds.submit.tag':'Enviar','fonds.submit.title':'¿Tienes un proyecto?',
'fonds.submit.sub':'Rellena el formulario. Leemos todo. No importa de dónde seas.',
'fonds.btn.submit':'🚀 Enviar mi proyecto — Gratis',
'fonds.success.title':'¡Proyecto recibido!',
'jeux.gate.tag':'Zona de Acceso Restringido · Solo Compradores de Nada',
'jeux.gate.title':'Acceso exclusivo',
'jeux.gate.sub':'Estos juegos no sirven para nada. Por eso están reservados a quienes compraron nada.',
'jeux.gate.btn':'🛒 Comprar nada — Acceso inmediato',
'jeux.code.ph':'Código de acceso (recibido por email)',
'jeux.code.btn':'Entrar',
'jeux.header.badge':'✓ Comprador Certificado de Nada™',
'jeux.header.title':'🎮 Juegos Inútiles',
'contact.tag':'Contáctanos','contact.title':'¿Una pregunta?',
'contact.sub':'Leemos todos los mensajes. No siempre respondemos rápido.',
'contact.form.title':'Enviar un mensaje','contact.send':'📨 Enviar','contact.success.title':'¡Mensaje enviado!',
'legal.badge':'⚖️ Documento legal','legal.title':'Aviso Legal',
'cgv.badge':'📋 Documento legal','cgv.title':'Términos y Condiciones',
},
de: {
'privacy.badge':'🔒 Datenschutzerklärung',
'privacy.title':'Datenschutzerklärung',
'privacy.sub':'Wie wir Ihre personenbezogenen Daten erheben, verwenden und schützen.',
'privacy.updated':'Aktualisiert:',
'fonds.tag':'Transparenz','fonds.title':'Wofür ist dein 1€ wirklich gut?',
'fonds.sub':'Ja, es ist das Nutzloseste der Welt. Aber ein großer Teil des Geldes dient etwas Konkretem.',
'fonds.usage.tag':'Mittelverwendung','fonds.usage.title':'Wohin geht das Geld?',
'fonds.usage.sub':'Kein Bullshit. Hier sind die wichtigsten Verwendungszwecke.',
'fonds.how.tag':'Der Prozess','fonds.how.title':'Wie funktioniert es?',
'fonds.charter.tag':'Unser Engagement','fonds.charter.title':'Was wir versprechen.',
'fonds.projects.tag':'Geförderte Projekte','fonds.projects.title':'Die ersten Projekte.',
'fonds.submit.tag':'Einreichen','fonds.submit.title':'Hast du ein Projekt?',
'fonds.submit.sub':'Fülle das Formular aus. Wir lesen alles. Egal woher du kommst.',
'fonds.btn.submit':'🚀 Mein Projekt einreichen — Kostenlos',
'fonds.success.title':'Projekt erhalten!',
'jeux.gate.tag':'Gesperrte Zone · Nur für Nichts-Käufer',
'jeux.gate.title':'Exklusiver Zugang',
'jeux.gate.sub':'Diese Spiele sind absolut nutzlos. Deshalb sind sie nur für Personen reserviert, die offiziell nichts für 1€ gekauft haben.',
'jeux.gate.btn':'🛒 Nichts kaufen — Sofortzugang',
'jeux.code.ph':'Zugangscode (per E-Mail erhalten)',
'jeux.code.btn':'Eingeben',
'jeux.header.badge':'✓ Zertifizierter Nichts-Käufer™',
'jeux.header.title':'🎮 Nutzlose Spiele',
'contact.tag':'Kontakt','contact.title':'Eine Frage?',
'contact.sub':'Wir lesen alle Nachrichten. Wir antworten nicht immer schnell.',
'contact.form.title':'Nachricht senden','contact.send':'📨 Senden','contact.success.title':'Nachricht gesendet!',
'legal.badge':'⚖️ Rechtliches Dokument','legal.title':'Impressum',
'cgv.badge':'📋 Rechtliches Dokument','cgv.title':'AGB',
},
it: {
'fonds.tag':'Trasparenza','fonds.title':'A cosa serve davvero il tuo 1€?',
'fonds.sub':'Sì, è la cosa più inutile del mondo. Ma una grande parte del denaro serve a qualcosa di concreto.',
'fonds.usage.tag':'Uso dei fondi','fonds.usage.title':'Dove va il denaro?',
'fonds.usage.sub':'Nessuna bugia. Ecco le principali destinazioni dei fondi.',
'fonds.how.tag':'Il processo','fonds.how.title':'Come funziona?',
'fonds.charter.tag':'Il nostro impegno','fonds.charter.title':'Cosa promettiamo.',
'fonds.projects.tag':'Progetti finanziati','fonds.projects.title':'I primi progetti.',
'fonds.submit.tag':'Invia','fonds.submit.title':'Hai un progetto?',
'fonds.submit.sub':'Compila il modulo. Leggiamo tutto. Non importa da dove vieni.',
'fonds.btn.submit':'🚀 Invia il mio progetto — Gratis',
'fonds.success.title':'Progetto ricevuto!',
'jeux.gate.tag':'Zona Accesso Limitato · Solo Acquirenti di Niente',
'jeux.gate.title':'Accesso esclusivo',
'jeux.gate.sub':'Questi giochi non servono assolutamente a niente.',
'jeux.gate.btn':'🛒 Comprare niente — Accesso immediato',
'jeux.code.ph':'Codice di accesso (ricevuto via email)',
'jeux.code.btn':'Entra',
'jeux.header.badge':'✓ Acquirente Certificato di Niente™',
'jeux.header.title':'🎮 Giochi Inutili',
'contact.tag':'Contattaci','contact.title':'Una domanda?',
'contact.sub':'Leggiamo tutti i messaggi.',
'contact.form.title':'Invia un messaggio','contact.send':'📨 Invia','contact.success.title':'Messaggio inviato!',
'legal.badge':'⚖️ Documento legale','legal.title':'Note Legali',
'cgv.badge':'📋 Documento legale','cgv.title':'Termini e Condizioni',
},
pt: {
'fonds.tag':'Transparência','fonds.title':'Para que serve o teu 1€?',
'fonds.sub':'Sim, é a coisa mais inútil do mundo. Mas grande parte do dinheiro serve para algo concreto.',
'fonds.usage.tag':'Uso dos fundos','fonds.usage.title':'Para onde vai o dinheiro?',
'fonds.usage.sub':'Sem mentiras. Aqui estão os principais destinos dos fundos.',
'fonds.how.tag':'O processo','fonds.how.title':'Como funciona?',
'fonds.charter.tag':'Nosso compromisso','fonds.charter.title':'O que prometemos.',
'fonds.projects.tag':'Projetos financiados','fonds.projects.title':'Os primeiros projetos.',
'fonds.submit.tag':'Enviar','fonds.submit.title':'Tem um projeto?',
'fonds.submit.sub':'Preencha o formulário. Lemos tudo. Não importa de onde você é.',
'fonds.btn.submit':'🚀 Enviar meu projeto — Grátis',
'fonds.success.title':'Projeto recebido!',
'jeux.gate.tag':'Zona de Acesso Restrito · Somente Compradores de Nada',
'jeux.gate.title':'Acesso exclusivo',
'jeux.gate.sub':'Estes jogos não servem absolutamente para nada.',
'jeux.gate.btn':'🛒 Comprar nada — Acesso imediato',
'jeux.code.ph':'Código de acesso (recebido por email)',
'jeux.code.btn':'Entrar',
'jeux.header.badge':'✓ Comprador Certificado de Nada™',
'jeux.header.title':'🎮 Jogos Inúteis',
'contact.tag':'Contate-nos','contact.title':'Uma pergunta?',
'contact.sub':'Lemos todas as mensagens.',
'contact.form.title':'Enviar mensagem','contact.send':'📨 Enviar','contact.success.title':'Mensagem enviada!',
'legal.badge':'⚖️ Documento legal','legal.title':'Aviso Legal',
'cgv.badge':'📋 Documento legal','cgv.title':'Termos e Condições',
},
};
// Fallback to EN for other languages
['ja','ko','zh','ar','ru','nl'].forEach(l => { PAGE_T[l] = PAGE_T.en; });
// Extended t() that also checks PAGE_T
function tp(key) {
const lang = window.RIEN_LANG || 'fr';
return (PAGE_T[lang] && PAGE_T[lang][key])
|| (PAGE_T.en && PAGE_T.en[key])
|| t(key)
|| key;
}
// ════════════════════════════════════════════
// SHARED NAV HTML
// Injected into every page via renderNav()
// ════════════════════════════════════════════
function renderNav(activePage) {
const pages = [
{ key:'index', href:'index.html', nt:'nav.why' },
{ key:'fonds', href:'fonds.html', nt:'nav.funds' },
{ key:'jeux', href:'index.html#plans', nt:'nav.games' },
];
return `
Registre Mondial des Acheteurs de Rien · Fondé en 2026 · Produits disponibles : 0OneForNada — Achetez officiellement rien
`;
}
// ════════════════════════════════════════════
// SHARED FOOTER HTML
// ════════════════════════════════════════════
function renderFooter() {
return `
`;
}
// ════════════════════════════════════════════
// LANG SELECTOR
// ════════════════════════════════════════════
function buildDD() {
const dd = document.getElementById('ldd');
if (!dd) return;
dd.innerHTML = Object.entries(LANGS).map(([code, info]) =>
`
${info.f} ${info.n}
`
).join('');
}
function toggleLS() {
document.getElementById('ls')?.classList.toggle('open');
}
function setLang(code) {
if (!LANGS[code]) return;
window.RIEN_LANG = code;
localStorage.setItem('rien_lang', code);
document.documentElement.lang = code;
document.documentElement.dir = code === 'ar' ? 'rtl' : 'ltr';
const lf = document.getElementById('lf');
const lc = document.getElementById('lc');
if (lf) lf.textContent = LANGS[code].f;
if (lc) lc.textContent = code.toUpperCase();
document.getElementById('ls')?.classList.remove('open');
buildDD();
applyAllTranslations();
if (typeof applyT === 'function') applyT(); // page-specific translations
}
// Close dropdown when clicking outside
document.addEventListener('click', e => {
if (!e.target.closest('#ls')) document.getElementById('ls')?.classList.remove('open');
});
// ════════════════════════════════════════════
// APPLY TRANSLATIONS
// Handles both data-i18n (page translations)
// and data-nt (nav/shared translations)
// ════════════════════════════════════════════
function t(key) {
const lang = window.RIEN_LANG || 'fr';
return (T[lang] && T[lang][key]) || (T.en && T.en[key]) || key;
}
function applyAllTranslations() {
const lang = window.RIEN_LANG || 'fr';
// data-i18n — traductions (page + shared)
document.querySelectorAll('[data-i18n]').forEach(el => {
const val = tp(el.dataset.i18n);
if (val && val !== el.dataset.i18n) el.textContent = val;
});
document.querySelectorAll('[data-i18n-ph]').forEach(el => {
const val = t(el.dataset.i18nPh);
if (val) el.placeholder = val;
});
// data-nt — traductions nav/footer partagés
document.querySelectorAll('[data-nt]').forEach(el => {
const val = nt(el.dataset.nt);
if (val && val !== el.dataset.nt) el.textContent = val;
});
// Bouton achat nav — met à jour avec le prix local
const navCta = document.getElementById('nav-cta');
if (navCta) {
const baseText = nt('nav.cta');
navCta.textContent = baseText.replace('1€', priceDisplay());
}
// RTL pour l'arabe
document.documentElement.dir = lang === 'ar' ? 'rtl' : 'ltr';
}
// ════════════════════════════════════════════
// INIT — called automatically when script loads
// ════════════════════════════════════════════
function initShared(activePage) {
// ── 1. Langue & devise ──
window.RIEN_LANG = detectLang();
window.RIEN_CURRENCY = detectCurrency();
// ── 2. Inject top-band ──
const band = document.createElement('div');
band.id = 'shared-band-wrap';
band.innerHTML = `
Registre Mondial des Acheteurs de Rien · Fondé en 2026 · Produits disponibles : 0OneForNada
`;
document.body.appendChild(banner);
requestAnimationFrame(() => requestAnimationFrame(() => banner.classList.add('visible')));
}
function hideCookieBanner() {
const b = document.getElementById('cookie-banner');
if (b) { b.classList.remove('visible'); setTimeout(() => b.remove(), 400); }
}
function acceptAllCookies() {
setCookieConsent({ functional:true, analytics:false, accepted:true });
hideCookieBanner();
}
function refuseCookies() {
setCookieConsent({ functional:true, analytics:false, accepted:false });
hideCookieBanner();
}
function showCookieModal() {
injectCookieCSS();
const lang = window.RIEN_LANG || 'fr';
const prefs = getCookieConsent() || { functional:true };
const texts = {
fr: { title:'Préférences cookies', sub:'Gérez vos préférences. Les cookies fonctionnels sont requis pour le bon fonctionnement du site.', save:'Enregistrer', acceptAll:'Tout accepter',
c1t:'Cookies fonctionnels', c1d:'Mémorisent vos préférences (langue, devise, accès jeux après achat). Requis.',
c2t:'Cookies analytiques', c2d:'Nous n'utilisons pas de cookies analytiques. Aucun Google Analytics, aucun tracking.' },
en: { title:'Cookie preferences', sub:'Manage your preferences. Functional cookies are required for the site to work properly.', save:'Save', acceptAll:'Accept all',
c1t:'Functional cookies', c1d:'Remember your preferences (language, currency, games access after purchase). Required.',
c2t:'Analytics cookies', c2d:'We do not use analytics cookies. No Google Analytics, no tracking.' },
};
const tx = texts[lang] || texts.en;
if (document.getElementById('cookie-modal')) document.getElementById('cookie-modal').remove();
const modal = document.createElement('div');
modal.id = 'cookie-modal';
modal.innerHTML = `
${tx.title}
${tx.sub}
${tx.c1t}
${tx.c1d}
${tx.c2t}
${tx.c2d}
`;
modal.addEventListener('click', e => { if (e.target === modal) modal.classList.remove('open'); });
document.body.appendChild(modal);
requestAnimationFrame(() => requestAnimationFrame(() => modal.classList.add('open')));
hideCookieBanner();
}
// Auto-show banner if no consent yet
function initCookieBanner() {
const consent = getCookieConsent();
if (!consent) {
setTimeout(showCookieBanner, 1200);
}
}
function toggleMobileMenu(){var m=document.getElementById('nav-mobile-menu'),b=document.getElementById('nav-hamburger');if(!m)return;m.classList.toggle('open');b.classList.toggle('open');document.body.style.overflow=m.classList.contains('open')?'hidden':'';}
function closeMobileMenu(){var m=document.getElementById('nav-mobile-menu'),b=document.getElementById('nav-hamburger');if(m)m.classList.remove('open');if(b)b.classList.remove('open');document.body.style.overflow='';}
function buildMobileLang(){var el=document.getElementById('nav-mobile-lang');if(!el||typeof LANGS==='undefined')return;el.innerHTML=Object.entries(LANGS).map(function(e){return'';}).join('');}
);