[{"data":1,"prerenderedAt":368},["ShallowReactive",2],{"docs-nav":3,"docs-\u002Fdocs\u002Ffirebase-auth":52,"docs-surround-\u002Fdocs\u002Ffirebase-auth":364},[4],{"title":5,"path":6,"stem":7,"children":8},"Docs","\u002Fdocs","docs",[9,12,16,20,24,28,32,36,40,44,48],{"title":10,"path":6,"stem":11},"Accueil","docs\u002Findex",{"title":13,"path":14,"stem":15},"Suivi","\u002Fdocs\u002Fsuivi","docs\u002F1.suivi",{"title":17,"path":18,"stem":19},"Début découverte","\u002Fdocs\u002Fearly-discovery","docs\u002F10.early-discovery",{"title":21,"path":22,"stem":23},"Idée","\u002Fdocs\u002Fidee","docs\u002F2.idee",{"title":25,"path":26,"stem":27},"Roadmap","\u002Fdocs\u002Froadmap","docs\u002F3.roadmap",{"title":29,"path":30,"stem":31},"Architecture","\u002Fdocs\u002Farchitecture","docs\u002F4.architecture",{"title":33,"path":34,"stem":35},"Gameplay","\u002Fdocs\u002Fgameplay","docs\u002F5.gameplay",{"title":37,"path":38,"stem":39},"Backlog","\u002Fdocs\u002Fbacklog","docs\u002F6.backlog",{"title":41,"path":42,"stem":43},"Changelog","\u002Fdocs\u002Fchangelog","docs\u002F7.changelog",{"title":45,"path":46,"stem":47},"Catalogue","\u002Fdocs\u002Fcatalogue","docs\u002F8.catalogue",{"title":49,"path":50,"stem":51},"Firebase Auth","\u002Fdocs\u002Ffirebase-auth","docs\u002F9.firebase-auth",{"id":53,"title":49,"body":54,"description":356,"extension":357,"meta":358,"navigation":359,"path":50,"seo":360,"status":361,"stem":51,"updated":362,"__hash__":363},"docs\u002Fdocs\u002F9.firebase-auth.md",{"type":55,"value":56,"toc":346},"minimark",[57,62,79,84,137,143,157,161,260,263,273,277,299,303,342],[58,59,61],"h1",{"id":60},"firebase-auth-cloud-save","Firebase Auth & cloud save",[63,64,65,66,70,71,74,75,78],"p",{},"Comptes joueur pour ",[67,68,69],"strong",{},"cloud save"," (Firestore) et futur ",[67,72,73],{},"FCM",". Sans variables Firebase, le jeu reste ",[67,76,77],{},"100 % local"," (Dexie).",[80,81,83],"h2",{"id":82},"console-firebase","Console Firebase",[85,86,87,98,108,119,128],"ol",{},[88,89,90,97],"li",{},[91,92,96],"a",{"href":93,"rel":94},"https:\u002F\u002Fconsole.firebase.google.com\u002F",[95],"nofollow","Firebase Console"," → projet",[88,99,100,103,104,107],{},[67,101,102],{},"Authentication"," → Google + ",[67,105,106],{},"Email link"," (pas mot de passe)",[88,109,110,113,114,118],{},[67,111,112],{},"Authorized domains"," : ",[115,116,117],"code",{},"localhost",", prod, previews",[88,120,121,124,125],{},[67,122,123],{},"Firestore Database"," → créer (mode prod) → déployer ",[115,126,127],{},"firebase\u002Ffirestore.rules",[88,129,130,133,134],{},[67,131,132],{},"Project settings → Web app"," → config SDK → ",[115,135,136],{},".env",[80,138,140,141],{"id":139},"variables-env","Variables ",[115,142,136],{},[63,144,145,146,152,153,156],{},"Voir ",[91,147,149],{"href":148},"\u002F.env.example",[115,150,151],{},".env.example"," (",[115,154,155],{},"NUXT_PUBLIC_FIREBASE_*",").",[80,158,160],{"id":159},"ux-implémentée","UX implémentée",[162,163,164,177],"table",{},[165,166,167],"thead",{},[168,169,170,174],"tr",{},[171,172,173],"th",{},"Entrée",[171,175,176],{},"Comportement",[178,179,180,192,200,208,216,224,232,240,248],"tbody",{},[168,181,182,189],{},[183,184,185,186],"td",{},"Landing → ",[115,187,188],{},"\u002Fplay",[183,190,191],{},"Aucune auth requise",[168,193,194,197],{},[183,195,196],{},"Réglages (HUD)",[183,198,199],{},"« Lier son compte ou se connecter »",[168,201,202,205],{},[183,203,204],{},"Dialogue",[183,206,207],{},"Google · mail (lien magique) · Annuler",[168,209,210,213],{},[183,211,212],{},"Pas de save cloud",[183,214,215],{},"Continue la partie locale + upload auto (retry si échec)",[168,217,218,221],{},[183,219,220],{},"Save cloud + partie neuve",[183,222,223],{},"Reprise cloud auto",[168,225,226,229],{},[183,227,228],{},"Save cloud + partie locale",[183,230,231],{},"Dialogue scores : reprendre compte \u002F garder local (confirm écrasement) \u002F plus tard",[168,233,234,237],{},[183,235,236],{},"Déconnexion",[183,238,239],{},"Dexie conservé sur l’appareil",[168,241,242,245],{},[183,243,244],{},"Sync continue",[183,246,247],{},"Upload auto (3 s après changement, à la fermeture d’onglet, retry 15 s si réseau)",[168,249,250,253],{},[183,251,252],{},"Multi-appareil",[183,254,255,256,259],{},"Listener Firestore ",[115,257,258],{},"onSnapshot"," + poll 60 s : reprise auto si pas de changement local, sinon dialogue conflit",[80,261,29],{"id":262},"architecture",[264,265,271],"pre",{"className":266,"code":268,"language":269,"meta":270},[267],"language-text","HudSettingsMenu → AuthAccountDialog\n               → CloudSaveConflictDialog\nuseAccountSync → reconcile après auth + upload auto + listener Firestore (`onSnapshot`)\napp\u002Flib\u002Ffirebase\u002FcloudSave.ts → Firestore saves\u002F{uid}\n@game\u002F* → inchangé (normalizeGameState à l’import\u002Fexport)\n","text","",[115,272,268],{"__ignoreMap":270},[80,274,276],{"id":275},"dev-console","Dev console",[264,278,282],{"className":279,"code":280,"language":281,"meta":270,"style":270},"language-js shiki shiki-themes github-dark","window.__gearuna.auth\nwindow.__gearuna.game\n","js",[115,283,284,293],{"__ignoreMap":270},[285,286,289],"span",{"class":287,"line":288},"line",1,[285,290,292],{"class":291},"s95oV","window.__gearuna.auth\n",[285,294,296],{"class":287,"line":295},2,[285,297,298],{"class":291},"window.__gearuna.game\n",[80,300,302],{"id":301},"checklist-prod","Checklist prod",[304,305,308,318,324,330,336],"ul",{"className":306},[307],"contains-task-list",[88,309,312,317],{"className":310},[311],"task-list-item",[313,314],"input",{"disabled":315,"type":316},true,"checkbox"," Domaines autorisés",[88,319,321,323],{"className":320},[311],[313,322],{"disabled":315,"type":316}," Règles Firestore déployées",[88,325,327,329],{"className":326},[311],[313,328],{"disabled":315,"type":316}," Email link activé",[88,331,333,335],{"className":332},[311],[313,334],{"disabled":315,"type":316}," Test PWA standalone (popup Google)",[88,337,339,341],{"className":338},[311],[313,340],{"disabled":315,"type":316}," Mentions \u002F confidentialité (données compte)",[343,344,345],"style",{},"html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":270,"searchDepth":347,"depth":347,"links":348},3,[349,350,352,353,354,355],{"id":82,"depth":295,"text":83},{"id":139,"depth":295,"text":351},"Variables .env",{"id":159,"depth":295,"text":160},{"id":262,"depth":295,"text":29},{"id":275,"depth":295,"text":276},{"id":301,"depth":295,"text":302},"Comptes, cloud save Firestore et synchronisation.","md",{},{"title":49},{"title":49,"description":356},"done","2026-08-28","Bj9nl3LuEXa_faU6wKUoVwiEB0eRTmgoLp5JPgMIXuw",[365,367],{"title":45,"path":46,"stem":47,"description":366,"children":-1},"Boutique, recherches et objectifs — guide clair pour Gearuna.",null,1787932110427]