From 899b40132bdd005a2e4df631927aca7a00d987e4 Mon Sep 17 00:00:00 2001 From: meseb Date: Mon, 9 Mar 2026 14:03:37 +0100 Subject: [PATCH 01/32] Add basic GitHub Actions CI --- .github/workflows/ci.yml | 54 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..2d4415c --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,54 @@ +name: CI + +on: + push: + branches: + - main + - integration/humansafe-core-recovery + pull_request: + branches: + - main + workflow_dispatch: + +jobs: + basic-ci: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.11" + + - name: Validate required files + run: | + test -f index.html + test -f lifenet_game.html + test -d game-data + + - name: Validate JSON scenarios + run: | + python - <<'PY' + import json + from pathlib import Path + + files = sorted(Path("game-data").glob("scenario_*.json")) + assert files, "Nessun file scenario_*.json trovato in game-data/" + + for f in files: + with open(f, "r", encoding="utf-8") as fh: + json.load(fh) + + print(f"OK: validati {len(files)} file JSON") + PY + + - name: Check UTF-8 meta tag in index + run: | + grep -qi '' index.html || (echo "Manca meta charset UTF-8 in index.html" && exit 1) + + - name: Check UTF-8 meta tag in lifenet + run: | + grep -qi '' lifenet_game.html || (echo "Manca meta charset UTF-8 in lifenet_game.html" && exit 1) \ No newline at end of file From 4762110ce9627c76aebbacf099e18d1d6be52c07 Mon Sep 17 00:00:00 2001 From: meseb Date: Mon, 9 Mar 2026 14:31:22 +0100 Subject: [PATCH 02/32] Add UTF-8 meta tags to HTML files --- index.html | 1 + lifenet_game.html | 1 + 2 files changed, 2 insertions(+) diff --git a/index.html b/index.html index 74ae473..428640d 100644 --- a/index.html +++ b/index.html @@ -1,6 +1,7 @@  + HUMANSAFE CORE | Simulatore Diagnostico diff --git a/lifenet_game.html b/lifenet_game.html index 583cf02..a64b660 100644 --- a/lifenet_game.html +++ b/lifenet_game.html @@ -1,6 +1,7 @@ + LIFENET | The Humansafe Simulator From a2b3595204c7b7741548ada35ce0de72fe79b829 Mon Sep 17 00:00:00 2001 From: meseb Date: Mon, 9 Mar 2026 16:51:28 +0100 Subject: [PATCH 03/32] Add humansafe structure dreaft --- struttura-humansafe.txt | Bin 0 -> 2162 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 struttura-humansafe.txt diff --git a/struttura-humansafe.txt b/struttura-humansafe.txt new file mode 100644 index 0000000000000000000000000000000000000000..a5b2131f99f49dfb4196c695d340070b0a39b45b GIT binary patch literal 2162 zcmbW2-BQ|66ovP7XZjA@cgXmI?bJK5icGaIqSs6mgg_LVM5%qGK4jZ(ox>Re25Oy5 zPEK<6+I#Ka{P}%ksSWMUu5D&D8?aA#-t)}dx6Ja=iDYYhk2x)ztpDQWYnC|lBZ$-< z?AA$ltY=?1$!%)y?VWvFoMa2V2^w=}FLCmLLs`o{GF#TL&$eTA+qOOX#GAAo+P+0@ z_X`|oDgU3tjBr` zO6ZQAyIqrShxQe8$66KW1TOOI2WMm0-4Y@353E!8-f(`$U7&eHj1|9i(laDx$c{zgmM#qoeFobi0=S&qdFJq6bTyOn2P^26MT$zS-2wtb#}^V zf_=^CstS9ZEzN1wp(3bUs*hqap?Lgnb(VRD30HTyRhFwb=J=qgsO%@$?DHSkCJXA< z8Q))v*?9wI_YIiFKQQG8C{w;0V!YHJOZBSECB!=PyS%RUQ<2ehRBq Date: Mon, 9 Mar 2026 17:01:28 +0100 Subject: [PATCH 04/32] Delete .github/workflows/ci.yml Signed-off-by: meseb --- .github/workflows/ci.yml | 54 ---------------------------------------- 1 file changed, 54 deletions(-) delete mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 2d4415c..0000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,54 +0,0 @@ -name: CI - -on: - push: - branches: - - main - - integration/humansafe-core-recovery - pull_request: - branches: - - main - workflow_dispatch: - -jobs: - basic-ci: - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: "3.11" - - - name: Validate required files - run: | - test -f index.html - test -f lifenet_game.html - test -d game-data - - - name: Validate JSON scenarios - run: | - python - <<'PY' - import json - from pathlib import Path - - files = sorted(Path("game-data").glob("scenario_*.json")) - assert files, "Nessun file scenario_*.json trovato in game-data/" - - for f in files: - with open(f, "r", encoding="utf-8") as fh: - json.load(fh) - - print(f"OK: validati {len(files)} file JSON") - PY - - - name: Check UTF-8 meta tag in index - run: | - grep -qi '' index.html || (echo "Manca meta charset UTF-8 in index.html" && exit 1) - - - name: Check UTF-8 meta tag in lifenet - run: | - grep -qi '' lifenet_game.html || (echo "Manca meta charset UTF-8 in lifenet_game.html" && exit 1) \ No newline at end of file From be6ca89b553d3ef012eaea97703691f53ae8ae2e Mon Sep 17 00:00:00 2001 From: meseb Date: Tue, 10 Mar 2026 22:20:11 +0100 Subject: [PATCH 05/32] refactor: move secondary modules into modules directory --- {franchising-sociale => modules/franchising-sociale}/README.md | 0 .../franchising-sociale}/roi_ambassador_calculator.py | 0 .../iself-smart-contract}/ISELF_Token.sol | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename {franchising-sociale => modules/franchising-sociale}/README.md (100%) rename {franchising-sociale => modules/franchising-sociale}/roi_ambassador_calculator.py (100%) rename {iself-smart-contract => modules/iself-smart-contract}/ISELF_Token.sol (100%) diff --git a/franchising-sociale/README.md b/modules/franchising-sociale/README.md similarity index 100% rename from franchising-sociale/README.md rename to modules/franchising-sociale/README.md diff --git a/franchising-sociale/roi_ambassador_calculator.py b/modules/franchising-sociale/roi_ambassador_calculator.py similarity index 100% rename from franchising-sociale/roi_ambassador_calculator.py rename to modules/franchising-sociale/roi_ambassador_calculator.py diff --git a/iself-smart-contract/ISELF_Token.sol b/modules/iself-smart-contract/ISELF_Token.sol similarity index 100% rename from iself-smart-contract/ISELF_Token.sol rename to modules/iself-smart-contract/ISELF_Token.sol From 4ab3dfefa001ed1139d2f1bae724c7745362a778 Mon Sep 17 00:00:00 2001 From: meseb Date: Tue, 10 Mar 2026 22:36:43 +0100 Subject: [PATCH 06/32] docs: reorganize documentation into thematic folders --- docs/README.md | 39 +++++++++++++++++++ .../04_Cognitive_Framework.md | 0 .../06_Lifenet_Game_Design.md | 0 docs/architecture/README.md | 0 docs/{ => legal}/02_Global_Charter.md | 0 docs/legal/README.md | 0 docs/{ => manifesto}/01_Manifesto.md | 0 docs/manifesto/README.md | 0 docs/{ => pitch}/05_Public_Report.md | 0 docs/pitch/README.md | 0 docs/{ => strategy}/03_B2B_Standard.md | 0 docs/strategy/README.md | 0 12 files changed, 39 insertions(+) rename docs/{ => architecture}/04_Cognitive_Framework.md (100%) rename docs/{ => architecture}/06_Lifenet_Game_Design.md (100%) create mode 100644 docs/architecture/README.md rename docs/{ => legal}/02_Global_Charter.md (100%) create mode 100644 docs/legal/README.md rename docs/{ => manifesto}/01_Manifesto.md (100%) create mode 100644 docs/manifesto/README.md rename docs/{ => pitch}/05_Public_Report.md (100%) create mode 100644 docs/pitch/README.md rename docs/{ => strategy}/03_B2B_Standard.md (100%) create mode 100644 docs/strategy/README.md diff --git a/docs/README.md b/docs/README.md index e39af6b..0d44507 100644 --- a/docs/README.md +++ b/docs/README.md @@ -46,3 +46,42 @@ Tenere separate queste due cose evita confusione strategica e comunicativa. --- Per partnership, documenti formali, impaginati o versioni PDF istituzionali, usare questa cartella come sorgente madre. + + + +# Documentazione HUMANSAFE + +Questa cartella raccoglie la documentazione principale del progetto HUMANSAFE, organizzata per aree funzionali. + +## Struttura + +### `manifesto/` +Documenti fondativi, visione, missione e principi del progetto. + +### `architecture/` +Struttura concettuale e tecnica dell’ecosistema, framework cognitivi e design dei moduli. + +### `strategy/` +Strategie operative, modelli di diffusione, standard di implementazione e sviluppo. + +### `pitch/` +Materiali di presentazione, report pubblici e documenti utili per comunicazione e partnership. + +### `legal/` +Documenti legati a charter, tutela, governance, principi normativi e struttura etica. + +## Obiettivo + +L’obiettivo di questa documentazione è rendere HUMANSAFE: + +- leggibile +- trasmissibile +- sviluppabile +- presentabile +- difendibile + +## Stato attuale + +La documentazione è in fase di consolidamento e riorganizzazione come base per il primo MVP pubblico dell’ecosistema. + + diff --git a/docs/04_Cognitive_Framework.md b/docs/architecture/04_Cognitive_Framework.md similarity index 100% rename from docs/04_Cognitive_Framework.md rename to docs/architecture/04_Cognitive_Framework.md diff --git a/docs/06_Lifenet_Game_Design.md b/docs/architecture/06_Lifenet_Game_Design.md similarity index 100% rename from docs/06_Lifenet_Game_Design.md rename to docs/architecture/06_Lifenet_Game_Design.md diff --git a/docs/architecture/README.md b/docs/architecture/README.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/02_Global_Charter.md b/docs/legal/02_Global_Charter.md similarity index 100% rename from docs/02_Global_Charter.md rename to docs/legal/02_Global_Charter.md diff --git a/docs/legal/README.md b/docs/legal/README.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/01_Manifesto.md b/docs/manifesto/01_Manifesto.md similarity index 100% rename from docs/01_Manifesto.md rename to docs/manifesto/01_Manifesto.md diff --git a/docs/manifesto/README.md b/docs/manifesto/README.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/05_Public_Report.md b/docs/pitch/05_Public_Report.md similarity index 100% rename from docs/05_Public_Report.md rename to docs/pitch/05_Public_Report.md diff --git a/docs/pitch/README.md b/docs/pitch/README.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/03_B2B_Standard.md b/docs/strategy/03_B2B_Standard.md similarity index 100% rename from docs/03_B2B_Standard.md rename to docs/strategy/03_B2B_Standard.md diff --git a/docs/strategy/README.md b/docs/strategy/README.md new file mode 100644 index 0000000..e69de29 From 4236c92ecc371b9f855e9cf2e79d0cc784e3ffc2 Mon Sep 17 00:00:00 2001 From: meseb Date: Tue, 10 Mar 2026 22:45:42 +0100 Subject: [PATCH 07/32] docs: add section readmes for organized documentation --- docs/architecture/README.md | 32 ++++++++++++++++++++++++++++++++ docs/legal/README.md | 30 ++++++++++++++++++++++++++++++ docs/manifesto/README.md | 30 ++++++++++++++++++++++++++++++ docs/pitch/README.md | 30 ++++++++++++++++++++++++++++++ docs/strategy/README.md | 30 ++++++++++++++++++++++++++++++ 5 files changed, 152 insertions(+) diff --git a/docs/architecture/README.md b/docs/architecture/README.md index e69de29..a192c3d 100644 --- a/docs/architecture/README.md +++ b/docs/architecture/README.md @@ -0,0 +1,32 @@ +\# Architettura HUMANSAFE + + + +Questa sezione descrive la struttura concettuale e tecnica del progetto. + + + +\## Contenuti + + + +\- framework cognitivi + +\- design del sistema + +\- architettura dei moduli + +\- logica della simulazione + +\- direzione tecnica del progetto + + + +\## File presenti + + + +\- `04\_Cognitive\_Framework.md` → impianto cognitivo del sistema + +\- `06\_Lifenet\_Game\_Design.md` → design del modulo LIFENET + diff --git a/docs/legal/README.md b/docs/legal/README.md index e69de29..607b499 100644 --- a/docs/legal/README.md +++ b/docs/legal/README.md @@ -0,0 +1,30 @@ +\# Area Legale HUMANSAFE + + + +Questa sezione raccoglie i materiali legati alla tutela, alla governance e alla struttura etica del progetto. + + + +\## Contenuti + + + +\- charter globale + +\- tutela del progetto + +\- governance + +\- principi normativi + +\- struttura etica e regolativa + + + +\## File presenti + + + +\- `02\_Global\_Charter.md` → carta globale e principi fondativi di tutela + diff --git a/docs/manifesto/README.md b/docs/manifesto/README.md index e69de29..b4d37ab 100644 --- a/docs/manifesto/README.md +++ b/docs/manifesto/README.md @@ -0,0 +1,30 @@ +\# Manifesto HUMANSAFE + + + +Questa sezione raccoglie i documenti fondativi del progetto HUMANSAFE. + + + +\## Contenuti + + + +\- visione del progetto + +\- principi etici + +\- missione + +\- rapporto tra tecnologia e sicurezza umana + +\- orientamento valoriale dell’ecosistema + + + +\## File presenti + + + +\- `01\_Manifesto.md` → testo fondativo del progetto + diff --git a/docs/pitch/README.md b/docs/pitch/README.md index e69de29..2428b98 100644 --- a/docs/pitch/README.md +++ b/docs/pitch/README.md @@ -0,0 +1,30 @@ +\# Pitch HUMANSAFE + + + +Questa sezione raccoglie i materiali di presentazione pubblica del progetto. + + + +\## Contenuti + + + +\- report sintetici + +\- materiali introduttivi + +\- presentazioni per partner + +\- documenti per enti e collaboratori + +\- strumenti di comunicazione pubblica + + + +\## File presenti + + + +\- `05\_Public\_Report.md` → report pubblico sintetico del progetto + diff --git a/docs/strategy/README.md b/docs/strategy/README.md index e69de29..7f7e021 100644 --- a/docs/strategy/README.md +++ b/docs/strategy/README.md @@ -0,0 +1,30 @@ +\# Strategia HUMANSAFE + + + +Questa sezione raccoglie la strategia operativa e di sviluppo dell’ecosistema. + + + +\## Contenuti + + + +\- standard di implementazione + +\- diffusione del progetto + +\- roadmap operativa + +\- modelli di attivazione + +\- priorità strategiche + + + +\## File presenti + + + +\- `03\_B2B\_Standard.md` → standard operativo per sviluppo e relazioni B2B + From d3d6ebf2811e6bdd624814e7b932bb01f6282a79 Mon Sep 17 00:00:00 2001 From: meseb Date: Tue, 10 Mar 2026 23:08:15 +0100 Subject: [PATCH 08/32] feat: replace index with cleaned Humansafe cognitive quiz --- index.html | 381 +++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 310 insertions(+), 71 deletions(-) diff --git a/index.html b/index.html index 428640d..a2dc73e 100644 --- a/index.html +++ b/index.html @@ -1,48 +1,79 @@  - - HUMANSAFE CORE | Simulatore Diagnostico + HUMANSAFE CORE | Quiz di Sicurezza Cognitiva +
-
HUMANSAFE CORE · Nodo Zero
-

Simulatore Diagnostico di Sicurezza Cognitiva

-

- Questo prototipo rileva pattern di distrazione, reattività e lucidità. - Non è un oracolo magico, per fortuna: è uno strumento di auto-osservazione strutturata. -

+
+
HUMANSAFE CORE · Nodo Zero
+ Apri LIFENET → +
+ +

Quiz di Sicurezza Cognitiva

+ +
+

+ Questo prototipo HUMANSAFE ti aiuta a osservare il tuo rapporto con distrazione, + reattività e lucidità nel mondo digitale. +

+

+ Non è una diagnosi clinica e non pretende di leggerti l’anima come una sfera + mistica con il Wi-Fi: è uno strumento di auto-osservazione strutturata. +

+

+ HUMANSAFE nasce come ecosistema etico e culturale per usare la tecnologia come + ponte tra consapevolezza, crescita personale e comunità. Questo quiz è uno dei suoi primi moduli pratici. +

+
+ +
-
+
Domanda 1 di 7
+

Caricamento domanda...

+
@@ -230,8 +456,8 @@

Archetipi

] }, { - title: "Hai 10 minuti liberi e il telefono è in mano.", - hint: "La tua tendenza spontanea è...", + title: "Hai 10 minuti liberi e il telefono è in mano.", + hint: "La tua tendenza spontanea è...", answers: [ { label: "Scroll infinito senza uno scopo preciso.", empathy: 2, responsibility: 2, distraction: 9 }, { label: "Controllo un paio di cose e poi mi perdo.", empathy: 4, responsibility: 5, distraction: 6 }, @@ -240,7 +466,7 @@

Archetipi

}, { title: "Qualcuno visualizza un tuo messaggio importante e non risponde.", - hint: "La tua reazione principale è...", + hint: "La tua reazione principale è...", answers: [ { label: "Controllo ossessivamente chat e accessi.", empathy: 2, responsibility: 2, distraction: 8 }, { label: "Mi agito ma provo a distrarmi.", empathy: 4, responsibility: 4, distraction: 6 }, @@ -260,17 +486,17 @@

Archetipi

title: "Un amico ti parla davvero mentre tu stai usando il telefono.", hint: "Cosa accade nella pratica?", answers: [ - { label: "Ascolto a metà: lo schermo resta il centro.", empathy: 2, responsibility: 3, distraction: 8 }, + { label: "Ascolto a metà: lo schermo resta il centro.", empathy: 2, responsibility: 3, distraction: 8 }, { label: "Lo metto via dopo qualche secondo.", empathy: 5, responsibility: 5, distraction: 5 }, { label: "Sposto via il telefono e do presenza piena.", empathy: 9, responsibility: 8, distraction: 1 } ] }, { title: "Hai sonno ma continui a usare il telefono.", - hint: "Perché vai avanti?", + hint: "Perché vai avanti?", answers: [ { label: "Per inerzia, dopamina e fuga mentale.", empathy: 2, responsibility: 2, distraction: 9 }, - { label: "Perché voglio finire un paio di cose.", empathy: 4, responsibility: 5, distraction: 6 }, + { label: "Perché voglio finire un paio di cose.", empathy: 4, responsibility: 5, distraction: 6 }, { label: "Di solito riconosco il limite e chiudo.", empathy: 7, responsibility: 8, distraction: 2 } ] }, @@ -279,14 +505,18 @@

Archetipi

hint: "Il digitale diventa...", answers: [ { label: "Un rifugio per non sentire.", empathy: 2, responsibility: 2, distraction: 9 }, - { label: "Una pausa temporanea che però mi confonde.", empathy: 4, responsibility: 5, distraction: 6 }, + { label: "Una pausa temporanea che però mi confonde.", empathy: 4, responsibility: 5, distraction: 6 }, { label: "Uno strumento secondario: prima sento, poi agisco.", empathy: 8, responsibility: 9, distraction: 2 } ] } ]; let currentIndex = 0; - let totals = { empathy: 0, responsibility: 0, distraction: 0 }; + let totals = { + empathy: 0, + responsibility: 0, + distraction: 0 + }; const progressBar = document.getElementById("progressBar"); const counter = document.getElementById("counter"); @@ -296,15 +526,17 @@

Archetipi

function renderQuestion() { const q = questions[currentIndex]; + counter.textContent = `Domanda ${currentIndex + 1} di ${questions.length}`; questionTitle.textContent = q.title; questionHint.textContent = q.hint; - progressBar.style.width = `${((currentIndex) / questions.length) * 100}%`; + progressBar.style.width = `${(currentIndex / questions.length) * 100}%`; optionsWrap.innerHTML = ""; - q.answers.forEach(answer => { + q.answers.forEach((answer) => { const btn = document.createElement("button"); btn.className = "option"; + btn.type = "button"; btn.textContent = answer.label; btn.onclick = () => handleAnswer(answer); optionsWrap.appendChild(btn); @@ -338,28 +570,31 @@

Archetipi

archetype: "Cellula Dormiente", zone: "Zona Rossa", zoneClass: "zone-red", - diagnosis: "Usi spesso il digitale come anestetico. Il problema non è il telefono in sé, ma il suo uso come rifugio automatico.", + diagnosis: "Usi spesso il digitale come anestetico. Il problema non è il telefono in sé, ma il suo uso come rifugio automatico.", action: "Applica la Regola del Vuoto: 15 minuti al giorno senza schermo, senza musica, senza fuga." }; } + if (hsi <= 55) { return { archetype: "Cellula Reattiva", zone: "Zona Grigia", zoneClass: "zone-gray", - diagnosis: "Hai coscienza della manipolazione ma vieni ancora risucchiato da urgenza, controllo e attrito emotivo.", + diagnosis: "Hai coscienza della manipolazione, ma vieni ancora risucchiato da urgenza, controllo e attrito emotivo.", action: "Applica la regola delle 24 ore prima di rispondere a contenuti o messaggi ad alta carica emotiva." }; } + if (hsi <= 70) { return { archetype: "Cellula Osservatrice", zone: "Zona Grigia", zoneClass: "zone-gray", - diagnosis: "Sei più lucido della media, ma alterni osservazione e dispersione. La struttura ancora traballa.", + diagnosis: "Sei più lucido della media, ma alterni osservazione e dispersione. La struttura ancora traballa.", action: "Introduci un blocco quotidiano di 30 minuti di presenza reale senza notifiche." }; } + if (hsi <= 85) { return { archetype: "Cellula in Risveglio", @@ -369,11 +604,12 @@

Archetipi

action: "Trasforma una tua pratica sana in rituale stabile e condividila con almeno una persona." }; } + return { archetype: "Nucleo Sovrano", zone: "Zona Verde", zoneClass: "zone-green", - diagnosis: "Hai una buona capacità di reggere vuoto, impulso e frizione. La tecnologia non domina il tuo baricentro.", + diagnosis: "Hai una buona capacità di reggere vuoto, impulso e frizione. La tecnologia non domina il tuo baricentro.", action: "Diventa nodo attivo: crea contesti, conversazioni e micro-azioni che proteggano anche gli altri." }; } @@ -397,7 +633,12 @@

Archetipi

function restartQuiz() { currentIndex = 0; - totals = { empathy: 0, responsibility: 0, distraction: 0 }; + totals = { + empathy: 0, + responsibility: 0, + distraction: 0 + }; + document.getElementById("quizView").classList.remove("hidden"); document.getElementById("resultView").classList.add("hidden"); renderQuestion(); @@ -405,7 +646,5 @@

Archetipi

renderQuestion(); - - - + \ No newline at end of file From 6a96e8cb3b158a49ec19fa8fab822ca0c3a83446 Mon Sep 17 00:00:00 2001 From: meseb Date: Tue, 10 Mar 2026 23:16:33 +0100 Subject: [PATCH 09/32] refactor: organize game data into structured directories --- game-data/README.md | 54 ++++++++++++++++++++++ game-data/{ => scenarios}/scenario_01.json | 0 game-data/{ => scenarios}/scenario_02.json | 0 game-data/{ => scenarios}/scenario_03.json | 0 game-data/{ => scenarios}/scenario_04.json | 0 5 files changed, 54 insertions(+) create mode 100644 game-data/README.md rename game-data/{ => scenarios}/scenario_01.json (100%) rename game-data/{ => scenarios}/scenario_02.json (100%) rename game-data/{ => scenarios}/scenario_03.json (100%) rename game-data/{ => scenarios}/scenario_04.json (100%) diff --git a/game-data/README.md b/game-data/README.md new file mode 100644 index 0000000..bfa3c74 --- /dev/null +++ b/game-data/README.md @@ -0,0 +1,54 @@ +\# HUMANSAFE Game Data + + + +Questa cartella contiene i dati strutturati usati dai prototipi interattivi HUMANSAFE. + + + +\## Struttura + + + +\### `scenarios/` + +Scenari narrativi e situazioni interattive del sistema. + + + +\### `profiles/` + +Profili utente, archetipi, stati cognitivi e configurazioni identitarie. + + + +\### `missions/` + +Missioni, azioni guidate e compiti associati all’evoluzione dell’utente. + + + +\### `signals/` + +Segnali cognitivi, pattern comportamentali e indicatori simbolici usati nei moduli HUMANSAFE. + + + +\## Obiettivo + + + +Organizzare i dati del progetto in forma leggibile, espandibile e riutilizzabile per: + + + +\- quiz + +\- simulazioni + +\- moduli narrativi + +\- sistemi di coaching + +\- strumenti diagnostici etici + diff --git a/game-data/scenario_01.json b/game-data/scenarios/scenario_01.json similarity index 100% rename from game-data/scenario_01.json rename to game-data/scenarios/scenario_01.json diff --git a/game-data/scenario_02.json b/game-data/scenarios/scenario_02.json similarity index 100% rename from game-data/scenario_02.json rename to game-data/scenarios/scenario_02.json diff --git a/game-data/scenario_03.json b/game-data/scenarios/scenario_03.json similarity index 100% rename from game-data/scenario_03.json rename to game-data/scenarios/scenario_03.json diff --git a/game-data/scenario_04.json b/game-data/scenarios/scenario_04.json similarity index 100% rename from game-data/scenario_04.json rename to game-data/scenarios/scenario_04.json From c1e529d5c9f4cb8bb9f9b0633a4ec304bc828857 Mon Sep 17 00:00:00 2001 From: meseb Date: Tue, 10 Mar 2026 23:26:32 +0100 Subject: [PATCH 10/32] feat: add reusable archetypes profile data --- game-data/profiles/archetypes.json | 69 ++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 game-data/profiles/archetypes.json diff --git a/game-data/profiles/archetypes.json b/game-data/profiles/archetypes.json new file mode 100644 index 0000000..9352468 --- /dev/null +++ b/game-data/profiles/archetypes.json @@ -0,0 +1,69 @@ +{ + "archetypes": [ + { + "id": "cellula_dormiente", + "name": "Cellula Dormiente", + "zone": "Zona Rossa", + "description": "Usa spesso il digitale come anestetico o rifugio automatico. Tende a fuggire il vuoto, la frizione e la presenza reale.", + "traits": [ + "alta distrazione", + "bassa regolazione", + "evasione automatica", + "fragile presenza mentale" + ], + "recommended_action": "Applica la Regola del Vuoto: 15 minuti al giorno senza schermo, senza musica, senza fuga." + }, + { + "id": "cellula_reattiva", + "name": "Cellula Reattiva", + "zone": "Zona Grigia", + "description": "Ha coscienza della manipolazione digitale, ma viene ancora trascinata da urgenza, controllo e attrito emotivo.", + "traits": [ + "impulsività", + "controllo compulsivo", + "sensibilità ai trigger", + "consapevolezza instabile" + ], + "recommended_action": "Applica la regola delle 24 ore prima di rispondere a contenuti o messaggi ad alta carica emotiva." + }, + { + "id": "cellula_osservatrice", + "name": "Cellula Osservatrice", + "zone": "Zona Grigia", + "description": "È più lucida della media e riconosce molti meccanismi, ma alterna osservazione e dispersione.", + "traits": [ + "auto-osservazione", + "lucidità intermittente", + "struttura fragile", + "buon potenziale evolutivo" + ], + "recommended_action": "Introduci un blocco quotidiano di 30 minuti di presenza reale senza notifiche." + }, + { + "id": "cellula_in_risveglio", + "name": "Cellula in Risveglio", + "zone": "Zona Verde", + "description": "Sta recuperando spazio mentale e usa la tecnologia con intenzione crescente.", + "traits": [ + "presenza crescente", + "migliore regolazione", + "autonomia in sviluppo", + "uso più consapevole del digitale" + ], + "recommended_action": "Trasforma una tua pratica sana in rituale stabile e condividila con almeno una persona." + }, + { + "id": "nucleo_sovrano", + "name": "Nucleo Sovrano", + "zone": "Zona Verde", + "description": "Ha una buona capacità di reggere vuoto, impulso e frizione. La tecnologia non domina il suo baricentro.", + "traits": [ + "alta presenza", + "regolazione forte", + "lucidità stabile", + "capacità di proteggere sé e gli altri" + ], + "recommended_action": "Diventa nodo attivo: crea contesti, conversazioni e micro-azioni che proteggano anche gli altri." + } + ] +} \ No newline at end of file From 22174716444b1421d304b8f40cd4629612ba505b Mon Sep 17 00:00:00 2001 From: meseb Date: Tue, 10 Mar 2026 23:28:37 +0100 Subject: [PATCH 11/32] feat: add HSI zones signal definition --- game-data/signals/hsi_zones.json | 97 ++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 game-data/signals/hsi_zones.json diff --git a/game-data/signals/hsi_zones.json b/game-data/signals/hsi_zones.json new file mode 100644 index 0000000..dd2022f --- /dev/null +++ b/game-data/signals/hsi_zones.json @@ -0,0 +1,97 @@ +{ + "metric": "HSI", + "name": "Humansafe Signal Index", + "description": "Indice simbolico usato nei prototipi HUMANSAFE per rappresentare il livello di equilibrio tra attenzione, reattività, responsabilità e presenza mentale nel rapporto con il digitale.", + "scale": { + "min": 0, + "max": 100 + }, + "zones": [ + { + "id": "zona_rossa", + "name": "Zona Rossa", + "range": { + "min": 0, + "max": 35 + }, + "color": "red", + "meaning": "Il digitale tende a dominare il baricentro mentale dell'utente. La persona usa spesso lo schermo come fuga, anestesia o reazione impulsiva.", + "characteristics": [ + "alta distrazione", + "bassa presenza", + "reattività elevata", + "uso compensativo del digitale", + "fragilità nella regolazione" + ], + "priority": "Ridurre il rumore, interrompere gli automatismi e ricostruire spazio mentale reale." + }, + { + "id": "zona_grigia_bassa", + "name": "Zona Grigia Bassa", + "range": { + "min": 36, + "max": 55 + }, + "color": "amber", + "meaning": "L'utente comincia a riconoscere i meccanismi che lo influenzano, ma resta ancora spesso intrappolato in urgenza, controllo e dispersione.", + "characteristics": [ + "consapevolezza instabile", + "controllo compulsivo", + "oscillazione tra lucidità e ricaduta", + "vulnerabilità ai trigger emotivi" + ], + "priority": "Stabilizzare la consapevolezza e introdurre regole semplici ma costanti." + }, + { + "id": "zona_grigia_alta", + "name": "Zona Grigia Alta", + "range": { + "min": 56, + "max": 70 + }, + "color": "yellow", + "meaning": "L'utente possiede una buona capacità di osservazione, ma non ha ancora consolidato del tutto la propria struttura interna.", + "characteristics": [ + "buona lucidità", + "presenza intermittente", + "potenziale evolutivo alto", + "disciplina non ancora stabile" + ], + "priority": "Trasformare le intuizioni in pratiche quotidiane stabili." + }, + { + "id": "zona_verde_media", + "name": "Zona Verde", + "range": { + "min": 71, + "max": 85 + }, + "color": "green", + "meaning": "L'utente sta recuperando baricentro mentale e usa la tecnologia con intenzione crescente e maggiore responsabilità.", + "characteristics": [ + "presenza crescente", + "regolazione migliore", + "uso più consapevole del digitale", + "maggiore autonomia" + ], + "priority": "Consolidare le pratiche sane e iniziare a diventare punto di riferimento per altri." + }, + { + "id": "zona_verde_alta", + "name": "Zona Verde Alta", + "range": { + "min": 86, + "max": 100 + }, + "color": "emerald", + "meaning": "L'utente mantiene un buon equilibrio tra impulso, attenzione e presenza. La tecnologia non domina il suo centro decisionale.", + "characteristics": [ + "alta lucidità", + "forte presenza mentale", + "buona capacità di regolazione", + "attitudine protettiva verso sé e altri" + ], + "priority": "Diffondere cultura di presenza, protezione e lucidità nella propria rete umana." + } + ] +} \ No newline at end of file From 3be9c3cf109916afd561dcad3cae5b737aa173f6 Mon Sep 17 00:00:00 2001 From: meseb Date: Tue, 10 Mar 2026 23:51:29 +0100 Subject: [PATCH 12/32] feat: redesign lifenet with social links and updated scenario paths --- lifenet_game.html | 378 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 330 insertions(+), 48 deletions(-) diff --git a/lifenet_game.html b/lifenet_game.html index a64b660..0883d18 100644 --- a/lifenet_game.html +++ b/lifenet_game.html @@ -1,46 +1,99 @@ - LIFENET | The Humansafe Simulator +
-
LIFENET · Simulatore Narrativo
+
+
+
LIFENET · Simulatore Narrativo
+
+ ← Torna a HUMANSAFE CORE +
+

Allenamento alla Sovranità Cognitiva

- LIFENET non misura solo ciò che pensi. Misura come reagisci quando il mondo ti pizzica i nervi. - Ogni scenario aggiorna parametri invisibili e attiva l'HUMANSAFE ORACLE. + LIFENET non misura solo ciò che pensi. Esplora come reagisci quando il mondo + ti pizzica i nervi, ti spinge all’impulso o ti invita alla fuga.

+

+ Ogni scenario aggiorna parametri invisibili e attiva l’HUMANSAFE ORACLE: + non per giudicarti, ma per aiutarti a vedere meglio il tuo stile di risposta. +

+

+ Questo modulo fa parte dell’ecosistema HUMANSAFE: strumenti etici e interattivi + per osservare, proteggere e far crescere la lucidità umana nel rapporto con la tecnologia e la vita reale. +

+ + + +
@@ -138,15 +377,21 @@

Allenamento alla Sovranità Cognitiva

Scenario 1

Caricamento...

+
+

+ +
- + Torna al simulatore diagnostico
@@ -155,8 +400,17 @@

@@ -164,14 +418,15 @@

Profilo invisibile

- + \ No newline at end of file From 8a934e9f15f9679d979ecb6214fa733ff32e49cf Mon Sep 17 00:00:00 2001 From: meseb Date: Wed, 11 Mar 2026 00:35:03 +0100 Subject: [PATCH 13/32] docs: add HUMANSAFE OS architecture overview --- docs/architecture/HUMANSAFE_OS.md | 584 ++++++++++++++++++++++++++++++ 1 file changed, 584 insertions(+) create mode 100644 docs/architecture/HUMANSAFE_OS.md diff --git a/docs/architecture/HUMANSAFE_OS.md b/docs/architecture/HUMANSAFE_OS.md new file mode 100644 index 0000000..0238ee2 --- /dev/null +++ b/docs/architecture/HUMANSAFE_OS.md @@ -0,0 +1,584 @@ +\# HUMANSAFE OS + + + +\## Definizione + + + +HUMANSAFE OS è l’architettura centrale dell’ecosistema HUMANSAFE. + + + +Non è un sistema operativo nel senso tradizionale del termine, ma un sistema coordinato di strumenti, dati, percorsi e protezioni progettato per aiutare l’essere umano a vivere con maggiore lucidità, sicurezza, continuità e consapevolezza nell’era digitale. + + + +HUMANSAFE OS unisce: + + + +\- diagnosi cognitiva + +\- simulazione narrativa + +\- gamification etica + +\- missioni reali + +\- diario di bordo + +\- profilo evolutivo + +\- community + +\- supporto AI + + + +L’obiettivo non è intrattenere o trattenere l’utente il più a lungo possibile, ma accompagnarlo in un percorso di crescita, auto-osservazione e responsabilità. + + + +--- + + + +\## Visione + + + +HUMANSAFE OS nasce per trasformare la tecnologia da ambiente dispersivo a infrastruttura di protezione e sviluppo umano. + + + +La sua funzione è creare un ecosistema dove il digitale: + + + +\- non anestetizza, ma chiarisce + +\- non frammenta, ma orienta + +\- non isola, ma connette in modo sano + +\- non assorbe la vita reale, ma la rafforza + + + +--- + + + +\## Missione + + + +La missione di HUMANSAFE OS è offrire un sistema pratico e progressivo che aiuti persone, comunità e futuri collaboratori a: + + + +\- comprendere il proprio stato cognitivo e relazionale + +\- allenare presenza, lucidità e responsabilità + +\- tradurre intuizioni digitali in azioni reali + +\- crescere attraverso un percorso etico e cooperativo + +\- costruire continuità tra sé, gli altri e il mondo + + + +--- + + + +\## Moduli principali + + + +\### 1. HSI Scan + +Modulo iniziale di diagnosi simbolica e cognitiva. + + + +Funzioni: + +\- valutazione dello stato di attenzione e reattività + +\- assegnazione della zona HSI + +\- identificazione dell’archetipo iniziale + +\- suggerimento di una micro-azione concreta + + + +Implementazione attuale: + +\- `index.html` + + + +--- + + + +\### 2. LIFENET + +Simulatore narrativo basato su scenari, scelte e conseguenze. + + + +Funzioni: + +\- presentare situazioni ad attrito emotivo e cognitivo + +\- osservare il comportamento dell’utente nelle scelte + +\- aggiornare i parametri del profilo invisibile + +\- attivare interventi dell’HUMANSAFE ORACLE + + + +Implementazione attuale: + +\- `lifenet\_game.html` + + + +--- + + + +\### 3. Scenario Engine + +Motore che gestisce scenari e conseguenze. + + + +Funzioni: + +\- caricare scenari JSON + +\- applicare cambiamenti ai parametri + +\- aggiornare l’esperienza narrativa + +\- supportare la progressione del percorso + + + +Implementazione attuale: + +\- `game-data/scenarios/` + + + +--- + + + +\### 4. Archetype Engine + +Motore che gestisce gli archetipi evolutivi dell’utente. + + + +Funzioni: + +\- descrivere il profilo simbolico dell’utente + +\- collegare i risultati diagnostici a una forma leggibile + +\- orientare l’esperienza successiva + +\- rendere visibile il cambiamento del percorso + + + +Implementazione attuale: + +\- `game-data/profiles/archetypes.json` + + + +--- + + + +\### 5. Signal Engine + +Motore che interpreta zone e segnali cognitivi. + + + +Funzioni: + +\- classificare l’HSI + +\- definire zone di lettura + +\- fornire significato ai punteggi + +\- trasformare i dati in linguaggio umano + + + +Implementazione attuale: + +\- `game-data/signals/hsi\_zones.json` + + + +--- + + + +\### 6. Mission Layer + +Ponte tra esperienza digitale e realtà vissuta. + + + +Funzioni: + +\- proporre missioni offline, relazionali e riflessive + +\- trasformare il gioco in comportamento + +\- premiare azioni concrete + +\- rinforzare la continuità del percorso + + + +Implementazione prevista: + +\- `game-data/missions/` + + + +--- + + + +\### 7. Progression Layer + +Motore di gamification etica. + + + +Funzioni: + +\- gestire XP simbolici + +\- definire livelli + +\- assegnare badge + +\- rendere visibile il progresso senza creare dipendenza tossica + + + +Implementazione prevista: + +\- `game-data/progression/` + + + +--- + + + +\### 8. Journal Layer + +Sistema di memoria ed evoluzione personale. + + + +Funzioni: + +\- salvare scelte, missioni e progressi + +\- costruire una timeline personale + +\- trasformare l’esperienza in continuità + +\- rendere il cambiamento osservabile nel tempo + + + +Implementazione prevista: + +\- `user-data/` + +\- future pagine `journal.html` e `profile.html` + + + +--- + + + +\### 9. AI Coach / ORACLE Layer + +Livello di accompagnamento e interpretazione. + + + +Funzioni: + +\- rileggere il percorso + +\- suggerire missioni o riflessioni + +\- spiegare pattern comportamentali + +\- supportare lucidità e orientamento + + + +Vincoli: + +\- non sostituisce terapeuti o medici + +\- non manipola l’utente + +\- non deve creare dipendenza + +\- agisce come guida, non come padrone + + + +--- + + + +\### 10. Community Layer + +Spazio cooperativo dell’ecosistema. + + + +Funzioni: + +\- creare continuità tra utenti + +\- sostenere missioni collettive + +\- rendere possibile la cooperazione + +\- creare nodi umani locali e digitali + + + +Prime forme realistiche: + +\- canale Telegram + +\- gruppo Telegram + +\- future stanze cooperative HUMANSAFE + + + +--- + + + +\## Flusso utente + + + +\### Fase 1 — Ingresso + +L’utente entra in HUMANSAFE tramite il modulo diagnostico. + + + +\### Fase 2 — Lettura iniziale + +Il sistema restituisce: + +\- HSI + +\- zona + +\- archetipo + +\- micro-azione iniziale + + + +\### Fase 3 — Simulazione + +L’utente entra in LIFENET e affronta scenari. + + + +\### Fase 4 — Aggiornamento profilo + +Il sistema aggiorna: + +\- parametri interni + +\- XP + +\- livello + +\- eventuali badge + +\- missioni consigliate + + + +\### Fase 5 — Azione reale + +L’utente esegue una missione nella vita reale. + + + +\### Fase 6 — Diario + +Il sistema registra il percorso e la sua evoluzione. + + + +\### Fase 7 — Community + +L’utente può entrare in una rete cooperativa e condividere il proprio cammino. + + + +--- + + + +\## Principi di design + + + +HUMANSAFE OS deve essere: + + + +\- etico + +\- non manipolativo + +\- cooperativo + +\- progressivo + +\- leggibile + +\- modulare + +\- sicuro + +\- orientato alla realtà + + + +Il sistema non deve funzionare come una piattaforma che assorbe attenzione, ma come una struttura che restituisce capacità di scelta. + + + +--- + + + +\## Gamification etica + + + +La gamification di HUMANSAFE OS non è competitiva ma cooperativa. + + + +Elementi principali: + +\- stelline + +\- badge etici + +\- livelli + +\- XP simbolici + +\- missioni reali + +\- avanzamento per maturazione, non per ossessione + + + +Valori premiati: + +\- empatia + +\- coraggio + +\- collaborazione + +\- cura + +\- presenza + +\- chiarezza + +\- responsabilità + +\- contatto con la realtà + + + +--- + + + +\## Struttura del repository collegata a HUMANSAFE OS + + + +```text + +Humansafe-Core/ + +├── index.html + +├── lifenet\_game.html + +├── docs/ + +│ └── architecture/ + +│ └── HUMANSAFE\_OS.md + +├── game-data/ + +│ ├── scenarios/ + +│ ├── profiles/ + +│ ├── signals/ + +│ ├── missions/ + +│ ├── progression/ + +│ └── journal-templates/ + +├── user-data/ + +├── assets/ + +├── tools/ + +├── core-algorithm/ + +└── modules/ + From c079b5fd0c3f49e6c3029fe3bd71b8f350fcc697 Mon Sep 17 00:00:00 2001 From: meseb Date: Wed, 11 Mar 2026 00:39:15 +0100 Subject: [PATCH 14/32] feat: add progression levels and initial mission pack --- game-data/missions/missions_01.json | 51 +++++++++++++++++++++++++++++ game-data/progression/levels.json | 41 +++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 game-data/missions/missions_01.json create mode 100644 game-data/progression/levels.json diff --git a/game-data/missions/missions_01.json b/game-data/missions/missions_01.json new file mode 100644 index 0000000..8cfb5aa --- /dev/null +++ b/game-data/missions/missions_01.json @@ -0,0 +1,51 @@ +{ + "system": "HUMANSAFE Mission Layer", + "description": "Pacchetto iniziale di missioni etiche e reali per il primo MVP di HUMANSAFE OS.", + "missions": [ + { + "id": "missione_01", + "title": "10 minuti senza schermo", + "type": "offline", + "reward_xp": 5, + "reward_traits": ["presence", "reality"], + "description": "Resta per 10 minuti senza schermo, musica o distrazioni digitali.", + "ethical_value": "presenza" + }, + { + "id": "missione_02", + "title": "Una risposta non impulsiva", + "type": "behavioral", + "reward_xp": 8, + "reward_traits": ["clarity", "courage"], + "description": "Aspetta prima di rispondere a un messaggio o contenuto che ti attiva emotivamente.", + "ethical_value": "coraggio" + }, + { + "id": "missione_03", + "title": "Conversazione piena", + "type": "relational", + "reward_xp": 10, + "reward_traits": ["empathy", "presence"], + "description": "Fai una conversazione reale senza toccare il telefono.", + "ethical_value": "empatia" + }, + { + "id": "missione_04", + "title": "Camminata lucida", + "type": "offline", + "reward_xp": 6, + "reward_traits": ["reality", "clarity"], + "description": "Cammina per 15 minuti senza notifiche né contenuti in cuffia.", + "ethical_value": "realtà" + }, + { + "id": "missione_05", + "title": "Riflessione scritta", + "type": "reflective", + "reward_xp": 7, + "reward_traits": ["clarity", "presence"], + "description": "Scrivi tre righe vere su cosa usi per fuggire quando senti attrito o disagio.", + "ethical_value": "chiarezza" + } + ] +} \ No newline at end of file diff --git a/game-data/progression/levels.json b/game-data/progression/levels.json new file mode 100644 index 0000000..47072d3 --- /dev/null +++ b/game-data/progression/levels.json @@ -0,0 +1,41 @@ +{ + "system": "HUMANSAFE Progression Layer", + "description": "Sistema base di livelli per la gamification etica di HUMANSAFE OS.", + "levels": [ + { + "level": 1, + "id": "segnale_debole", + "name": "Segnale Debole", + "xp_required": 0, + "description": "L'utente inizia a osservare i propri automatismi senza ancora dominarli." + }, + { + "level": 2, + "id": "cellula_attiva", + "name": "Cellula Attiva", + "xp_required": 20, + "description": "L'utente ha iniziato a reagire con maggiore consapevolezza e presenza." + }, + { + "level": 3, + "id": "osservatore_lucido", + "name": "Osservatore Lucido", + "xp_required": 50, + "description": "L'utente sviluppa una capacità più stabile di auto-osservazione e regolazione." + }, + { + "level": 4, + "id": "nodo_consapevole", + "name": "Nodo Consapevole", + "xp_required": 90, + "description": "L'utente consolida il proprio baricentro mentale e diventa punto di riferimento." + }, + { + "level": 5, + "id": "custode_humansafe", + "name": "Custode Humansafe", + "xp_required": 140, + "description": "L'utente ha sviluppato una presenza forte e una capacità di protezione verso sé e gli altri." + } + ] +} \ No newline at end of file From 5b94a59d2543fbb8e7b93c6492c5b1c84f9c4fd0 Mon Sep 17 00:00:00 2001 From: meseb Date: Wed, 11 Mar 2026 10:51:28 +0100 Subject: [PATCH 15/32] upgrade: integrate progression system and missions into lifenet --- lifenet_game.html | 281 ++++++++++++++++++++++++++++++---------------- 1 file changed, 184 insertions(+), 97 deletions(-) diff --git a/lifenet_game.html b/lifenet_game.html index 0883d18..25d3f57 100644 --- a/lifenet_game.html +++ b/lifenet_game.html @@ -3,10 +3,10 @@ - LIFENET | The Humansafe Simulator + LIFENET | HUMANSAFE OS + + +
+
+
+
HUMANSAFE Journal · Diario di Bordo
+ ← Torna a HUMANSAFE CORE +
+ +

Memoria del percorso

+

+ Il Diario di Bordo HUMANSAFE raccoglie tracce, missioni, riflessioni e progressi. + Non serve a giudicarti: serve a rendere il cambiamento visibile. +

+

+ Qui la simulazione smette di essere un evento isolato e diventa continuità. +

+ + +
+ +
+
+

Profilo evolutivo

+
+
+ Nome profilo + Caricamento... +
+
+ Archetipo + Caricamento... +
+
+ Zona HSI + Caricamento... +
+
+ XP totale + 0 +
+
+ Livello + Caricamento... +
+
+ Ultima scansione + Caricamento... +
+
+ +
+

Badge simbolici

+
+
+ +
+

Missioni completate

+
+
+
+ +
+

Diario e timeline

+ +
+

Riflessioni recenti

+
+
+ +
+

Timeline del percorso

+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/user-data/demo_profile.json b/user-data/demo_profile.json new file mode 100644 index 0000000..24ddccf --- /dev/null +++ b/user-data/demo_profile.json @@ -0,0 +1,56 @@ +{ + "name": "Messoud Demo Profile", + "archetype": "Cellula in Risveglio", + "hsi_zone": "Zona Verde", + "xp_total": 64, + "level_name": "Osservatore Lucido", + "last_update": "2026-03-11", + "badges": [ + "Primo Risveglio", + "Specchio Pulito", + "Presenza Reale" + ], + "completed_missions": [ + { + "id": "missione_01", + "title": "10 minuti senza schermo", + "description": "Resta per 10 minuti senza schermo, musica o distrazioni digitali.", + "reward_xp": 5, + "ethical_value": "presenza" + }, + { + "id": "missione_03", + "title": "Conversazione piena", + "description": "Fai una conversazione reale senza toccare il telefono.", + "reward_xp": 10, + "ethical_value": "empatia" + } + ], + "reflections": [ + { + "date": "2026-03-10", + "text": "Quando sento attrito, la tentazione di rifugiarmi nel telefono arriva prima del pensiero. Ma adesso riesco a vederla." + }, + { + "date": "2026-03-11", + "text": "La presenza reale non è assenza di caos. È capacità di restare anche quando vorrei fuggire." + } + ], + "timeline": [ + { + "date": "2026-03-09", + "title": "Prima scansione HSI", + "description": "Avvio del percorso con lettura iniziale del profilo cognitivo." + }, + { + "date": "2026-03-10", + "title": "Ingresso in LIFENET", + "description": "Primi scenari completati e primo contatto con HUMANSAFE ORACLE." + }, + { + "date": "2026-03-11", + "title": "Missione reale completata", + "description": "Prima azione offline registrata nel Diario di Bordo." + } + ] +} \ No newline at end of file From 55775e44f0e1c83b5ee0dc00d04a2b0fc273908e Mon Sep 17 00:00:00 2001 From: meseb Date: Wed, 11 Mar 2026 12:03:25 +0100 Subject: [PATCH 17/32] feat: connect Humansafe OS core modules --- index.html | 11 +++++++---- journal.html | 9 +++++---- lifenet_game.html | 11 ++++++----- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/index.html b/index.html index a2dc73e..03b2f4e 100644 --- a/index.html +++ b/index.html @@ -349,10 +349,13 @@

Quiz di Sicurezza Cognitiva

- +
diff --git a/journal.html b/journal.html index 249d83d..23145bc 100644 --- a/journal.html +++ b/journal.html @@ -266,10 +266,11 @@

Memoria del percorso

Qui la simulazione smette di essere un evento isolato e diventa continuità.

- +
diff --git a/lifenet_game.html b/lifenet_game.html index 25d3f57..9f77313 100644 --- a/lifenet_game.html +++ b/lifenet_game.html @@ -352,11 +352,12 @@

- - Torna al simulatore diagnostico -
+ + Torna al simulatore diagnostico + Apri Journal +
From cf2b494cc0b97e8f10217eb29de123aef7b5280e Mon Sep 17 00:00:00 2001 From: meseb Date: Wed, 11 Mar 2026 12:17:12 +0100 Subject: [PATCH 18/32] feat: add Humansafe Circle and connect core modules --- index.html | 6 +- lifenet_game.html | 5 +- social.html | 476 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 482 insertions(+), 5 deletions(-) create mode 100644 social.html diff --git a/index.html b/index.html index 03b2f4e..9a1aa58 100644 --- a/index.html +++ b/index.html @@ -349,13 +349,13 @@

Quiz di Sicurezza Cognitiva

-
diff --git a/lifenet_game.html b/lifenet_game.html index 9f77313..17ef5d2 100644 --- a/lifenet_game.html +++ b/lifenet_game.html @@ -351,13 +351,14 @@

- diff --git a/social.html b/social.html new file mode 100644 index 0000000..aec8efc --- /dev/null +++ b/social.html @@ -0,0 +1,476 @@ + + + + + + HUMANSAFE Circle | Community Layer + + + + +
+
+
+
HUMANSAFE Circle · Community Layer
+ ← Torna a HUMANSAFE CORE +
+ +

Condivisione etica del percorso

+

+ HUMANSAFE Circle non è un social classico. È uno spazio per condividere missioni, + riflessioni, checkpoint e segnali di crescita senza trasformare tutto in gara o rumore. +

+

+ Qui la condivisione serve a costruire continuità, sostegno reciproco e lucidità collettiva. +

+ + +
+ +
+
+

Condividi nel Circle

+ +
+
+ + +
+ +
+ + +
+ +
+ + +
+ + +
+ +
+
+ +

Oggi ho visto il mio impulso

+

+ Prima di aprire il telefono mi sono fermato un secondo. + Non l'ho fatto per disciplina, ma perché ho visto davvero il mio automatismo. +

+
+ 4 segnali di supporto + lucidità +
+
+
Nodo Attivo
+

Vedere l'impulso è già una forma di libertà. Bel passaggio.

+
+
+ +
+ +

Conversazione piena completata

+

+ Ho lasciato il telefono in tasca per tutta la conversazione. + All'inizio sentivo il riflesso di controllarlo, poi è sparito. +

+
+ 7 segnali di supporto + presenza reale +
+
+
Custode Humansafe
+

Queste micro-vittorie sono la vera infrastruttura del cambiamento.

+
+
+
+
+ + +
+
+ + + + \ No newline at end of file From 96ed6fcb5ba65f9c41ec57a9edb05fbc1e47571a Mon Sep 17 00:00:00 2001 From: meseb Date: Wed, 11 Mar 2026 15:27:40 +0100 Subject: [PATCH 19/32] feat: add Humansafe access layer with login gateway --- index.html | 14 +++- login.html | 199 +++++++++++++++++++++++++++++++++++++++++++++ manifest.json | 21 +++++ manifest.json.save | 23 ++++++ service-worker.js | 23 ++++++ 5 files changed, 278 insertions(+), 2 deletions(-) create mode 100644 login.html create mode 100644 manifest.json create mode 100644 manifest.json.save create mode 100644 service-worker.js diff --git a/index.html b/index.html index 9a1aa58..3e0c0f4 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,9 @@ HUMANSAFE CORE | Quiz di Sicurezza Cognitiva - + + @@ -324,6 +326,12 @@ } +
@@ -354,6 +362,8 @@

Quiz di Sicurezza Cognitiva

Vai a LIFENET Apri Journal Apri Community + Accedi a HUMANSAFE + Apri Circle
@@ -650,4 +660,4 @@

Scopo del prototipo

renderQuestion(); - \ No newline at end of file + diff --git a/login.html b/login.html new file mode 100644 index 0000000..2e920a7 --- /dev/null +++ b/login.html @@ -0,0 +1,199 @@ + + + + + + HUMANSAFE Login | Accesso Ecosistema + + + + +
+
+
HUMANSAFE Access Layer
+

Accedi all’ecosistema HUMANSAFE

+

+ Questa è la porta di ingresso a HUMANSAFE OS: diagnosi, simulazione, diario e community. +

+

+ Per ora i pulsanti sono un gateway demo. Nel prossimo step potranno essere collegati + a sistemi di autenticazione reali. +

+ + + +
+ HUMANSAFE usa la community esterna come ponte di diffusione, ma il cuore del sistema + resta indipendente: HSI Scan, LIFENET, Journal e Circle. +
+ + + + +
+
+ + diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..2ad7583 --- /dev/null +++ b/manifest.json @@ -0,0 +1,21 @@ +{ + "name": "HUMANSAFE OS", + "short_name": "HUMANSAFE", + "start_url": "index.html", + "display": "standalone", + "background_color": "#0d1117", + "theme_color": "#4ea1ff", + "orientation": "portrait", + "icons": [ + { + "src": "logo_humansafe.jpg", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "logo_humansafe.jpg", + "sizes": "512x512", + "type": "image/png" + } + ] +} diff --git a/manifest.json.save b/manifest.json.save new file mode 100644 index 0000000..45b988c --- /dev/null +++ b/manifest.json.save @@ -0,0 +1,23 @@ +{ + "name": "HUMANSAFE OS", + "short_name": "HUMANSAFE", + "start_url": "index.html", + "display": "standalone", + "background_color": "#0d1117", + "theme_color": "#4ea1ff", + "orientation": "portrait", + "icons": [ + { + "src": "logo_humansafe.jpg", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "logo_humansafe.jpg", + "sizes": "512x512", + "type": "image/png" + } + ] + +} + diff --git a/service-worker.js b/service-worker.js new file mode 100644 index 0000000..868d38e --- /dev/null +++ b/service-worker.js @@ -0,0 +1,23 @@ +const CACHE_NAME = "humansafe-cache-v1"; + +const urlsToCache = [ + "/", + "/index.html", + "/lifenet_game.html", + "/journal.html", + "/social.html" +]; + +self.addEventListener("install", event => { + event.waitUntil( + caches.open(CACHE_NAME) + .then(cache => cache.addAll(urlsToCache)) + ); +}); + +self.addEventListener("fetch", event => { + event.respondWith( + caches.match(event.request) + .then(response => response || fetch(event.request)) + ); +}); From 26f7a13bac8f5f2f9a6a1e224b8249c8f2461142 Mon Sep 17 00:00:00 2001 From: meseb Date: Wed, 11 Mar 2026 23:02:14 +0100 Subject: [PATCH 20/32] feat: add local persistence to Humansafe Circle --- social.html | 176 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 130 insertions(+), 46 deletions(-) diff --git a/social.html b/social.html index aec8efc..ceb2ab1 100644 --- a/social.html +++ b/social.html @@ -421,56 +421,140 @@

Navigazione

- constdiv"); - feed.prepend(post); - - document.getElementById("postTitle").value = ""; - document.getElementById("postContent").value = ""; - } - - \ No newline at end of file + From 7e51a1f43ad862f433968c9b570f19075c721ea3 Mon Sep 17 00:00:00 2001 From: meseb Date: Wed, 11 Mar 2026 23:14:28 +0100 Subject: [PATCH 21/32] feat: add local persistence to Humansafe Journal --- journal.html | 230 +++++++++++++++++++++++++++++---------------------- 1 file changed, 129 insertions(+), 101 deletions(-) diff --git a/journal.html b/journal.html index 23145bc..7249a29 100644 --- a/journal.html +++ b/journal.html @@ -329,123 +329,151 @@

Timeline del percorso

+ + } + + function renderProfile(profile) { + document.getElementById("profileName").textContent = profile.name || "Profilo demo"; + document.getElementById("profileArchetype").textContent = profile.archetype || "N/D"; + document.getElementById("profileZone").textContent = profile.hsi_zone || "N/D"; + document.getElementById("profileXp").textContent = profile.xp_total ?? 0; + document.getElementById("profileLevel").textContent = profile.level_name || "N/D"; + document.getElementById("profileLastUpdate").textContent = profile.last_update || "N/D"; + + renderBadges(safeArray(profile.badges)); + renderMissions(safeArray(profile.completed_missions)); + renderReflections(safeArray(profile.reflections)); + renderTimeline(safeArray(profile.timeline)); + } + + function loadStoredProfile() { + const stored = localStorage.getItem(PROFILE_STORAGE_KEY); + if (!stored) return null; + + try { + return JSON.parse(stored); + } catch (error) { + localStorage.removeItem(PROFILE_STORAGE_KEY); + return null; + } + } + + function saveProfile(profile) { + localStorage.setItem(PROFILE_STORAGE_KEY, JSON.stringify(profile)); + } + + async function loadProfile() { + const storedProfile = loadStoredProfile(); + + if (storedProfile) { + renderProfile(storedProfile); + return; + } + + const response = await fetch(profileFile); + if (!response.ok) { + throw new Error(`Impossibile caricare ${profileFile}`); + } + + const profile = await response.json(); + saveProfile(profile); + renderProfile(profile); + } + + loadProfile().catch((error) => { + document.body.innerHTML = ` +
+

Errore di caricamento Journal

+

${error.message}

+

Controlla che esista il file user-data/demo_profile.json.

+
+ `; + }); + + - \ No newline at end of file + From 6b3afbc1ffe3bcc7c5c60721c8c600631a4e1dd1 Mon Sep 17 00:00:00 2001 From: meseb Date: Thu, 12 Mar 2026 00:11:22 +0100 Subject: [PATCH 22/32] feat: connect lifenet progression to journal profile --- lifenet_game.html | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lifenet_game.html b/lifenet_game.html index 17ef5d2..e4e6feb 100644 --- a/lifenet_game.html +++ b/lifenet_game.html @@ -394,8 +394,6 @@

Profilo invisibile

- - \ No newline at end of file + From b151ccf54c447e4d8a3f382e4646bde1747ca16d Mon Sep 17 00:00:00 2001 From: meseb Date: Thu, 12 Mar 2026 12:17:54 +0100 Subject: [PATCH 23/32] feat: add central profile engine for Humansafe OS --- modules/profile-engine.js | 171 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 modules/profile-engine.js diff --git a/modules/profile-engine.js b/modules/profile-engine.js new file mode 100644 index 0000000..6c6f26d --- /dev/null +++ b/modules/profile-engine.js @@ -0,0 +1,171 @@ +const PROFILE_KEY = "humansafe_user_profile"; + +const DEFAULT_PROFILE = { + id: "demo-user-001", + name: "Messoud Demo Profile", + provider: "demo", + archetype: "Cellula Osservatrice", + hsi_zone: "Zona Grigia", + hsi_value: 50, + xp_total: 0, + level_name: "Segnale Debole", + last_update: "", + badges: [], + completed_missions: [], + reflections: [], + timeline: [], + community_posts: [] +}; + +function cloneDefaultProfile() { + return JSON.parse(JSON.stringify(DEFAULT_PROFILE)); +} + +export function loadProfile() { + const raw = localStorage.getItem(PROFILE_KEY); + + if (!raw) { + const fresh = cloneDefaultProfile(); + saveProfile(fresh); + return fresh; + } + + try { + const parsed = JSON.parse(raw); + return { ...cloneDefaultProfile(), ...parsed }; + } catch (error) { + const fresh = cloneDefaultProfile(); + saveProfile(fresh); + return fresh; + } +} + +export function saveProfile(profile) { + localStorage.setItem(PROFILE_KEY, JSON.stringify(profile)); +} + +export function resetProfile() { + const fresh = cloneDefaultProfile(); + saveProfile(fresh); + return fresh; +} + +export function updateLastUpdate(profile, date = new Date()) { + const iso = + date.getFullYear() + "-" + + String(date.getMonth() + 1).padStart(2, "0") + "-" + + String(date.getDate()).padStart(2, "0"); + + profile.last_update = iso; + return profile; +} + +export function addXP(amount) { + const profile = loadProfile(); + profile.xp_total = Math.max(0, (profile.xp_total || 0) + amount); + updateLastUpdate(profile); + saveProfile(profile); + return profile; +} + +export function setHSI({ hsi_value, hsi_zone, archetype }) { + const profile = loadProfile(); + + if (typeof hsi_value === "number") profile.hsi_value = hsi_value; + if (hsi_zone) profile.hsi_zone = hsi_zone; + if (archetype) profile.archetype = archetype; + + updateLastUpdate(profile); + saveProfile(profile); + return profile; +} + +export function setLevel(level_name) { + const profile = loadProfile(); + profile.level_name = level_name; + updateLastUpdate(profile); + saveProfile(profile); + return profile; +} + +export function addBadge(badge) { + const profile = loadProfile(); + profile.badges = Array.isArray(profile.badges) ? profile.badges : []; + + if (!profile.badges.includes(badge)) { + profile.badges.push(badge); + } + + updateLastUpdate(profile); + saveProfile(profile); + return profile; +} + +export function addMission(mission) { + const profile = loadProfile(); + profile.completed_missions = Array.isArray(profile.completed_missions) + ? profile.completed_missions + : []; + + const exists = profile.completed_missions.some((m) => m.id === mission.id); + + if (!exists) { + profile.completed_missions.unshift(mission); + } + + updateLastUpdate(profile); + saveProfile(profile); + return profile; +} + +export function addReflection(text, date = new Date()) { + const profile = loadProfile(); + profile.reflections = Array.isArray(profile.reflections) ? profile.reflections : []; + + const iso = + date.getFullYear() + "-" + + String(date.getMonth() + 1).padStart(2, "0") + "-" + + String(date.getDate()).padStart(2, "0"); + + profile.reflections.unshift({ + date: iso, + text + }); + + updateLastUpdate(profile, date); + saveProfile(profile); + return profile; +} + +export function addTimelineEvent(title, description, date = new Date()) { + const profile = loadProfile(); + profile.timeline = Array.isArray(profile.timeline) ? profile.timeline : []; + + const iso = + date.getFullYear() + "-" + + String(date.getMonth() + 1).padStart(2, "0") + "-" + + String(date.getDate()).padStart(2, "0"); + + profile.timeline.unshift({ + date: iso, + title, + description + }); + + updateLastUpdate(profile, date); + saveProfile(profile); + return profile; +} + +export function addCommunityPost(post) { + const profile = loadProfile(); + profile.community_posts = Array.isArray(profile.community_posts) + ? profile.community_posts + : []; + + profile.community_posts.unshift(post); + + updateLastUpdate(profile); + saveProfile(profile); + return profile; +} From efec74eee14c089528f382493814a67c3bcecb8f Mon Sep 17 00:00:00 2001 From: meseb Date: Thu, 12 Mar 2026 12:38:53 +0100 Subject: [PATCH 24/32] feat: rebuild profile layer with central engine integration --- profile.html | 435 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 435 insertions(+) create mode 100644 profile.html diff --git a/profile.html b/profile.html new file mode 100644 index 0000000..8111c56 --- /dev/null +++ b/profile.html @@ -0,0 +1,435 @@ + + + + + + HUMANSAFE Profile | Profile Layer + + + + +
+
+
+
HUMANSAFE Profile Layer
+ ← Torna a HUMANSAFE CORE +
+ +

Centro identitario del percorso

+

+ Il Profile Layer raccoglie lo stato evolutivo complessivo dell’utente: + identità, livello, badge, missioni, riflessioni e segnali principali. +

+ + + +
+ Prossimi upgrade del Profile Layer +

+ Nome modificabile, reset percorso, avatar, statistiche avanzate, + sincronizzazione cloud, autenticazione reale, livelli globali e dashboard completa. +

+
+
+ +
+
+

Stato utente

+
+
+ Nome profilo + Caricamento... +
+
+ Archetipo + Caricamento... +
+
+ Zona HSI + Caricamento... +
+
+ HSI + Caricamento... +
+
+ XP Totale + 0 +
+
+ Livello + Caricamento... +
+
+ Provider + Caricamento... +
+
+ Ultimo aggiornamento + Caricamento... +
+
+ +
+

Badge globali

+
+
+ +
+

Missioni completate

+
+
+
+ +
+

Attività recente

+ +
+

Ultime riflessioni

+
+
+ +
+

Eventi recenti

+
+
+
+
+
+ + + + From 360252a8b736613fe7769e5c44e858404d3afeee Mon Sep 17 00:00:00 2001 From: meseb Date: Thu, 12 Mar 2026 12:45:54 +0100 Subject: [PATCH 25/32] feat: rebuild journal layer with central profile engine --- journal.html | 405 +++++++++++++++++++++++---------------------------- 1 file changed, 182 insertions(+), 223 deletions(-) diff --git a/journal.html b/journal.html index 7249a29..55451b5 100644 --- a/journal.html +++ b/journal.html @@ -1,3 +1,4 @@ + @@ -6,7 +7,7 @@ HUMANSAFE Journal | Diario di Bordo - - -
-
-
-
LIFENET · HUMANSAFE OS
- ← Torna a HUMANSAFE CORE -
- -

Allenamento alla Sovranità Cognitiva

-

- LIFENET è il simulatore narrativo di HUMANSAFE OS. Qui non “vinci” contro qualcuno: - osservi come reagisci quando la realtà ti graffia un po’. -

-

- Ogni scenario modifica il tuo profilo invisibile, genera XP etici, aggiorna il tuo livello - e ti propone una missione reale. -

- - -
- -
-
-
-
Scenario 1
-

Caricamento...

-

- -
- -

-
- - - - - - -
-
- - -
-
- - "game-data/scenarios/scenario_01.json", - "game-data/scenarios/scenario_02.json", - "game-data/scenarios/scenario_03.json", - "game-data/scenarios/scenario_04.json" - ]; - - const levelsFile = "game-data/progression/levels.json"; - const missionsFile = "game-data/missions/missions_01.json"; - - let scenarios = []; - let levels = []; - let missions = []; - let currentScenarioIndex = 0; - let xpTotal = 0; - - let stats = { - impulsivita: 0, - resilienza_emotiva: 0, - empatia: 0, - consapevolezza: 0, - sovranita_cognitiva: 0, - fuga_realta: 0, - capacita_comunicativa: 0, - fiducia_in_se: 0 - }; - - function formatStatLabel(key) { - return key - .replaceAll("_", " ") - .replace(/\b\w/g, char => char.toUpperCase()); - } - - function renderStats() { - const wrap = document.getElementById("statsWrap"); - wrap.innerHTML = ""; - - Object.entries(stats).forEach(([key, value]) => { - const item = document.createElement("div"); - item.className = "stat"; - item.innerHTML = ` - ${formatStatLabel(key)} - ${value > 0 ? "+" + value : value} - `; - wrap.appendChild(item); - }); - } - - function getCurrentLevel(xp) { - let current = levels[0]; - - for (const level of levels) { - if (xp >= level.xp_required) { - current = level; - } - } - - return current; - } - - function getNextLevel(xp) { - return levels.find(level => level.xp_required > xp) || null; - } - - function renderProgression() { - const xpEl = document.getElementById("xpValue"); - const levelNameEl = document.getElementById("levelName"); - const levelMetaEl = document.getElementById("levelMeta"); - const progressBar = document.getElementById("levelProgressBar"); - - const currentLevel = getCurrentLevel(xpTotal); - const nextLevel = getNextLevel(xpTotal); - - xpEl.textContent = xpTotal; - levelNameEl.textContent = currentLevel ? currentLevel.name : "Nessun livello"; - - if (!currentLevel) { - levelMetaEl.textContent = "Sistema livelli non disponibile."; - progressBar.style.width = "0%"; - return; - } - - if (!nextLevel) { - levelMetaEl.textContent = "Livello massimo attuale raggiunto."; - progressBar.style.width = "100%"; - return; - } - - const currentFloor = currentLevel.xp_required; - const nextFloor = nextLevel.xp_required; - const span = nextFloor - currentFloor; - const progress = ((xpTotal - currentFloor) / span) * 100; - - levelMetaEl.textContent = `${xpTotal}/${nextFloor} XP · Prossimo livello: ${nextLevel.name}`; - progressBar.style.width = `${Math.max(0, Math.min(100, progress))}%`; - } - - function getSuggestedMission() { - if (!missions.length) return null; - return missions[currentScenarioIndex % missions.length]; - } - - function renderMissionSuggestion() { - const mission = getSuggestedMission(); - const box = document.getElementById("missionBox"); - const text = document.getElementById("missionText"); - const meta = document.getElementById("missionMeta"); - - if (!mission) { - box.style.display = "none"; - return; - } - - text.textContent = mission.description; - meta.textContent = `${mission.title} · +${mission.reward_xp} XP · Valore etico: ${mission.ethical_value}`; - box.style.display = "block"; - } - - async function loadScenarios() { - const loadedScenarios = await Promise.all( - scenarioFiles.map(async (file) => { - const response = await fetch(file); - if (!response.ok) { - throw new Error(`Impossibile caricare ${file}`); - } - return response.json(); - }) - ); - - const levelsResponse = await fetch(levelsFile); - if (!levelsResponse.ok) { - throw new Error(`Impossibile caricare ${levelsFile}`); - } - const levelsData = await levelsResponse.json(); - - const missionsResponse = await fetch(missionsFile); - if (!missionsResponse.ok) { - throw new Error(`Impossibile caricare ${missionsFile}`); - } - const missionsData = await missionsResponse.json(); - - scenarios = loadedScenarios; - levels = levelsData.levels || []; - missions = missionsData.missions || []; - - renderScenario(); - renderProgression(); - } - - function renderScenario() { - const scenario = scenarios[currentScenarioIndex]; - - document.getElementById("scenarioCounter").textContent = - `Scenario ${currentScenarioIndex + 1} di ${scenarios.length}`; - document.getElementById("scenarioTitle").textContent = scenario.title; - document.getElementById("scenarioTheme").textContent = scenario.theme; - document.getElementById("questionText").textContent = scenario.question; - - const setupWrap = document.getElementById("setupWrap"); - setupWrap.innerHTML = ""; - - scenario.setup.forEach((line) => { - const div = document.createElement("div"); - div.className = "setup-line"; - div.textContent = line; - setupWrap.appendChild(div); - }); - - const choicesWrap = document.getElementById("choicesWrap"); - choicesWrap.innerHTML = ""; - - document.getElementById("oracleBox").style.display = "none"; - document.getElementById("missionBox").style.display = "none"; - document.getElementById("nextBtn").style.display = "none"; - - scenario.choices.forEach((choice) => { - const btn = document.createElement("button"); - btn.className = "choice"; - btn.innerHTML = `${choice.action_name}
${choice.text}`; - btn.onclick = () => applyChoice(choice); - choicesWrap.appendChild(btn); - }); - - renderStats(); - renderProgression(); - } - - function calculateChoiceXP(choice) { - const values = Object.values(choice.stat_changes || {}); - return values.reduce((sum, value) => sum + Math.max(0, value), 0); - } - - function applyChoice(choice) { - for (const [key, value] of Object.entries(choice.stat_changes)) { - stats[key] = (stats[key] || 0) + value; - } - - xpTotal += calculateChoiceXP(choice); - - document.getElementById("oracleText").textContent = choice.oracle_intervention; - document.getElementById("oracleBox").style.display = "block"; - document.getElementById("choicesWrap").innerHTML = ""; - document.getElementById("nextBtn").style.display = "inline-flex"; - - renderStats(); - renderProgression(); - renderMissionSuggestion(); - } - - function nextScenario() { - currentScenarioIndex += 1; - - if (currentScenarioIndex >= scenarios.length) { - const currentLevel = getCurrentLevel(xpTotal); - - document.getElementById("scenarioView").innerHTML = ` -

Sessione completata

-

- Hai attraversato ${scenarios.length} scenari. Il punto non è “vincere”, - ma capire il tuo stile di risposta quando l’attrito chiama. -

-
- HUMANSAFE ORACLE -

- La maturità non consiste nell’assenza di impulso, - ma nella capacità di non lasciargli il volante. -

-
-
- Esito del percorso -

XP totale: ${xpTotal}

-

Livello raggiunto: ${currentLevel ? currentLevel.name : "N/D"}

-
-
- - Torna a HUMANSAFE CORE -
- `; - renderStats(); - renderProgression(); - return; - } - - renderScenario(); - } - - function restartGame() { - currentScenarioIndex = 0; - xpTotal = 0; - stats = { - impulsivita: 0, - resilienza_emotiva: 0, - empatia: 0, - consapevolezza: 0, - sovranita_cognitiva: 0, - fuga_realta: 0, - capacita_comunicativa: 0, - fiducia_in_se: 0 - }; - - location.reload(); - } - - loadScenarios().catch((error) => { - document.getElementById("scenarioView").innerHTML = ` -

Errore di caricamento

-

${error.message}

-

- Controlla che i file JSON siano presenti nelle cartelle corrette del progetto. -

- `; - }); - - - From bfbbfa5bcfdb9d51fd11a6df6284b6b112f33a49 Mon Sep 17 00:00:00 2001 From: meseb Date: Thu, 12 Mar 2026 13:47:08 +0100 Subject: [PATCH 28/32] feat: rebuild central Humansafe home hub --- index.html | 734 ++++++++++++++++++----------------------------------- 1 file changed, 249 insertions(+), 485 deletions(-) diff --git a/index.html b/index.html index 3e0c0f4..50791ae 100644 --- a/index.html +++ b/index.html @@ -1,38 +1,34 @@ - + - HUMANSAFE CORE | Quiz di Sicurezza Cognitiva - - - HUMANSAFE OS | Home Hub + + + -
+
-
HUMANSAFE CORE · Nodo Zero
- Apri LIFENET → +
HUMANSAFE OS · Home Hub
+ Accesso →
-

Quiz di Sicurezza Cognitiva

+

Tecnologia etica per lucidità, memoria, comunità e crescita umana.

-
-

- Questo prototipo HUMANSAFE ti aiuta a osservare il tuo rapporto con distrazione, - reattività e lucidità nel mondo digitale. -

-

- Non è una diagnosi clinica e non pretende di leggerti l’anima come una sfera - mistica con il Wi-Fi: è uno strumento di auto-osservazione strutturata. -

-

- HUMANSAFE nasce come ecosistema etico e culturale per usare la tecnologia come - ponte tra consapevolezza, crescita personale e comunità. Questo quiz è uno dei suoi primi moduli pratici. -

-
+

+ HUMANSAFE OS è un ecosistema che unisce simulazione narrativa, riflessione, missioni reali, + diario evolutivo e community etica per aiutare l’utente a sviluppare più presenza e più sovranità cognitiva. +

+ +

+ Non è un social classico. Non è solo un quiz. Non è solo un gioco. + È un sistema unico che trasforma l’esperienza digitale in percorso. +

-
- Inizia il quiz - Vai a LIFENET - Apri Journal - Apri Community - Accedi a HUMANSAFE - Apri Circle + +
+ Formula del sistema +

+ diagnosi → simulazione → missione → memoria → evoluzione → comunità +

+
-
-
-
-
-
Domanda 1 di 7
- -
-

Caricamento domanda...

-

-
- -
-
- -
- - From 675dc1b5f0db69819fceff17658b19109a64f912 Mon Sep 17 00:00:00 2001 From: meseb Date: Thu, 12 Mar 2026 13:56:28 +0100 Subject: [PATCH 29/32] feat: rebuild access layer for Humansafe OS --- login.html | 192 ++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 132 insertions(+), 60 deletions(-) diff --git a/login.html b/login.html index 2e920a7..3b05a90 100644 --- a/login.html +++ b/login.html @@ -3,27 +3,25 @@ - HUMANSAFE Login | Accesso Ecosistema + HUMANSAFE OS | Access Layer
+
-
HUMANSAFE Access Layer
-

Accedi all’ecosistema HUMANSAFE

-

- Questa è la porta di ingresso a HUMANSAFE OS: diagnosi, simulazione, diario e community. +

+
HUMANSAFE OS · Access Layer
+ ← Torna alla Home +
+ +

Entra nell’ecosistema HUMANSAFE

+ +

+ Questa è la porta di ingresso al sistema: simulazione, profilo, diario, community e crescita etica.

+

- Per ora i pulsanti sono un gateway demo. Nel prossimo step potranno essere collegati - a sistemi di autenticazione reali. + Per ora l’accesso è un gateway demo coerente con il prototipo. + Nei prossimi aggiornamenti potrà essere collegato ad autenticazione reale.

- HUMANSAFE usa la community esterna come ponte di diffusione, ma il cuore del sistema - resta indipendente: HSI Scan, LIFENET, Journal e Circle. + Il cuore dell’identità utente resta interno a HUMANSAFE. + I provider esterni sono solo porte di ingresso, non il centro del sistema.
+
- +
+

Ingressi rapidi

-
+
+ From beb63dea7876ff01555428c757af6550ec19db42 Mon Sep 17 00:00:00 2001 From: meseb Date: Thu, 12 Mar 2026 18:19:57 +0100 Subject: [PATCH 30/32] feat: recreate lifenet simulation layer --- lifenet_game.html | 660 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 660 insertions(+) create mode 100644 lifenet_game.html diff --git a/lifenet_game.html b/lifenet_game.html new file mode 100644 index 0000000..babdbc7 --- /dev/null +++ b/lifenet_game.html @@ -0,0 +1,660 @@ + + + + + + HUMANSAFE LIFENET | Simulation Layer + + + + +
+
+
+
HUMANSAFE LIFENET · Simulation Layer
+ ← Torna a HUMANSAFE CORE +
+ +

Allenamento alla sovranità cognitiva

+

+ LIFENET è il simulatore narrativo di HUMANSAFE OS. Qui attraversi scenari, + fai scelte, ricevi riflessioni ORACLE e trasformi l’esperienza in progresso reale. +

+ + +
+ +
+
+
+
Scenario 1
+

Caricamento...

+

+ +
+ +

+
+ + + + + +
+ + Apri Journal + Apri Profilo +
+
+
+ + +
+
+ + + + From 98e31b16cde80de31f7014cb3a56c0de15586263 Mon Sep 17 00:00:00 2001 From: meseb Date: Sun, 15 Mar 2026 00:46:15 +0100 Subject: [PATCH 31/32] docs: add Humansafe ecosystem architecture and roadmap --- docs/README.md | 105 ++++--- .../architecture/HUMANSAFE_CORE_REAL_STATE.md | 268 ++++++++++++++++++ docs/architecture/HUMANSAFE_DATA_FLOW.md | 226 +++++++++++++++ .../HUMANSAFE_ECOSYSTEM_MASTER.md | 168 +++++++++++ docs/architecture/HUMANSAFE_MODULE_MAP.md | 153 ++++++++++ .../architecture/HUMANSAFE_ONBOARDING_FLOW.md | 144 ++++++++++ docs/architecture/README.md | 42 ++- docs/manifesto/HUMANSAFE_IDENTITY_SYSTEM.md | 183 ++++++++++++ docs/manifesto/README.md | 35 +-- docs/strategy/HUMANSAFE_FUTURE_EXPANSION.md | 221 +++++++++++++++ docs/strategy/HUMANSAFE_MVP_ROADMAP.md | 195 +++++++++++++ docs/strategy/README.md | 36 +-- hsi.html | 126 ++++++++ modules/hsi-engine.js | 179 ++++++++++++ modules/profile-engine.js | 234 +++++++-------- 15 files changed, 2077 insertions(+), 238 deletions(-) create mode 100644 docs/architecture/HUMANSAFE_CORE_REAL_STATE.md create mode 100644 docs/architecture/HUMANSAFE_DATA_FLOW.md create mode 100644 docs/architecture/HUMANSAFE_ECOSYSTEM_MASTER.md create mode 100644 docs/architecture/HUMANSAFE_MODULE_MAP.md create mode 100644 docs/architecture/HUMANSAFE_ONBOARDING_FLOW.md create mode 100644 docs/manifesto/HUMANSAFE_IDENTITY_SYSTEM.md create mode 100644 docs/strategy/HUMANSAFE_FUTURE_EXPANSION.md create mode 100644 docs/strategy/HUMANSAFE_MVP_ROADMAP.md create mode 100644 hsi.html create mode 100644 modules/hsi-engine.js diff --git a/docs/README.md b/docs/README.md index 0d44507..4f0f9a3 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,87 +1,84 @@ -# HUMANSAFE OFFICIAL DOCUMENTATION +# HUMANSAFE Documentation -Benvenuto nell'archivio centrale dell'ecosistema HUMANSAFE. -Questa cartella raccoglie i **6 asset fondativi** del progetto, depositati e organizzati come base filosofica, strategica, metodologica e istituzionale. +Questa cartella è l'archivio documentale di riferimento di `Humansafe-Core`. -> Nota di ordine: in alcune versioni precedenti del progetto si parlava di “5 pilastri”. -> Per chiarezza operativa, in questo repository adottiamo la formula corretta: **6 asset fondativi**. +Serve a tenere insieme tre piani diversi ma collegati: -## I 6 asset fondativi +- documenti fondativi dell'identità HUMANSAFE +- architettura reale del repository e del prototipo HUMANSAFE OS +- strategia di convergenza verso MVP, PWA e futura espansione ecosistemica -### 1. [HUMANSAFE MANIFESTO](01_Manifesto.md) -La costituzione etica del Nuovo Umanesimo. +## 1. Asset fondativi -### 2. [HUMANSAFE GLOBAL CHARTER](02_Global_Charter.md) -La carta dei diritti cognitivi dell'essere umano. +I 6 asset fondativi restano il nucleo culturale e istituzionale del progetto: -### 3. [HUMANSAFE STANDARD (B2B)](03_B2B_Standard.md) -Il protocollo di medicina organizzativa per aziende, enti e reti professionali. +1. `manifesto/01_Manifesto.md` +2. `legal/02_Global_Charter.md` +3. `strategy/03_B2B_Standard.md` +4. `architecture/04_Cognitive_Framework.md` +5. `pitch/05_Public_Report.md` +6. `architecture/06_Lifenet_Game_Design.md` -### 4. [HUMANSAFE COGNITIVE FRAMEWORK](04_Cognitive_Framework.md) -Il manuale tecnico sugli archetipi, le micro-azioni e la metodologia di attivazione. +Nota di coerenza: -### 5. [HUMANSAFE PUBLIC REPORT](05_Public_Report.md) -Il libro bianco istituzionale per scuole, comuni, sanità pubblica e terzo settore. +- `6 asset fondativi` = corpus documentale +- `5 archetipi` = modello umano -### 6. [LIFENET: THE HUMANSAFE SIMULATOR](06_Lifenet_Game_Design.md) -Il Game Design Document del simulatore narrativo HUMANSAFE. +## 2. Documenti architetturali e strategici aggiornati -## Uso della cartella +### Manifesto -Questa directory serve a tre scopi: +- [HUMANSAFE Identity System](./manifesto/HUMANSAFE_IDENTITY_SYSTEM.md) -1. **Fondazione** → chiarisce la visione del progetto -2. **Validazione** → rende leggibile il metodo verso partner e istituzioni -3. **Produzione** → alimenta sito, pitch, certificazioni, training e sviluppi software +### Architecture -## Regola di coerenza +- [HUMANSAFE Ecosystem Master](./architecture/HUMANSAFE_ECOSYSTEM_MASTER.md) +- [HUMANSAFE Core Real State](./architecture/HUMANSAFE_CORE_REAL_STATE.md) +- [HUMANSAFE Module Map](./architecture/HUMANSAFE_MODULE_MAP.md) +- [HUMANSAFE Data Flow](./architecture/HUMANSAFE_DATA_FLOW.md) +- [HUMANSAFE Onboarding Flow](./architecture/HUMANSAFE_ONBOARDING_FLOW.md) -Nel progetto HUMANSAFE distinguiamo chiaramente: +### Strategy -- **6 asset fondativi** → documenti del repository -- **5 archetipi** → modello umano del framework cognitivo +- [HUMANSAFE MVP Roadmap](./strategy/HUMANSAFE_MVP_ROADMAP.md) +- [HUMANSAFE Future Expansion](./strategy/HUMANSAFE_FUTURE_EXPANSION.md) -Tenere separate queste due cose evita confusione strategica e comunicativa. - ---- - -Per partnership, documenti formali, impaginati o versioni PDF istituzionali, usare questa cartella come sorgente madre. - - - -# Documentazione HUMANSAFE - -Questa cartella raccoglie la documentazione principale del progetto HUMANSAFE, organizzata per aree funzionali. - -## Struttura +## 3. Struttura della cartella ### `manifesto/` -Documenti fondativi, visione, missione e principi del progetto. + +Visione, missione, identità e principi etici. ### `architecture/` -Struttura concettuale e tecnica dell’ecosistema, framework cognitivi e design dei moduli. + +Architettura dichiarata e architettura realmente implementata del core. ### `strategy/` -Strategie operative, modelli di diffusione, standard di implementazione e sviluppo. + +Roadmap, priorità, stato MVP e traiettoria di espansione. ### `pitch/` -Materiali di presentazione, report pubblici e documenti utili per comunicazione e partnership. + +Materiali di presentazione e public narrative per istituzioni e partner. ### `legal/` -Documenti legati a charter, tutela, governance, principi normativi e struttura etica. -## Obiettivo +Charter, principi di tutela e standard etico-politici del progetto. -L’obiettivo di questa documentazione è rendere HUMANSAFE: +## 4. Scopo di questa documentazione -- leggibile -- trasmissibile -- sviluppabile -- presentabile -- difendibile +Questa documentazione deve rendere HUMANSAFE: -## Stato attuale +- leggibile per nuovi contributori +- credibile per partner e stakeholder +- sviluppabile senza rifare da zero il progetto +- coerente fra visione, codice e roadmap -La documentazione è in fase di consolidamento e riorganizzazione come base per il primo MVP pubblico dell’ecosistema. +## 5. Regola editoriale +Quando visione e codice divergono, i documenti di questa cartella devono dichiararlo esplicitamente usando quattro stati: +- implementato +- parziale +- pianificato +- concettuale diff --git a/docs/architecture/HUMANSAFE_CORE_REAL_STATE.md b/docs/architecture/HUMANSAFE_CORE_REAL_STATE.md new file mode 100644 index 0000000..514c662 --- /dev/null +++ b/docs/architecture/HUMANSAFE_CORE_REAL_STATE.md @@ -0,0 +1,268 @@ +# HUMANSAFE Core Real State + +Ultimo aggiornamento: 2026-03-15 + +Vedi anche: +- [HUMANSAFE Ecosystem Master](./HUMANSAFE_ECOSYSTEM_MASTER.md) +- [HUMANSAFE Module Map](./HUMANSAFE_MODULE_MAP.md) +- [HUMANSAFE Data Flow](./HUMANSAFE_DATA_FLOW.md) +- [HUMANSAFE MVP Roadmap](../strategy/HUMANSAFE_MVP_ROADMAP.md) + +## 1. Sintesi + +`Humansafe-Core` è oggi un repository ibrido: + +- documentazione fondativa molto sviluppata +- prototipo web statico navigabile +- data layer JSON riusabile +- moduli JS ancora in convergenza +- espansioni territoriali e blockchain solo come seme concettuale o proof of concept + +## 2. Struttura reale del repository + +| Percorso | Ruolo reale | Stato | +|---|---|---| +| `index.html` | Home Hub / landing del prototipo | Implementato | +| `login.html` | Access Layer demo | Implementato | +| `hsi.html` | HSI Diagnostic page | Presente ma work in progress | +| `lifenet_game.html` | Simulation Layer | Implementato | +| `journal.html` | Journal Layer | Implementato | +| `profile.html` | Profile Layer | Implementato | +| `social.html` | Circle / Community Layer | Implementato | +| `modules/profile-engine.js` | Motore profilo condiviso | Presente ma incoerente | +| `modules/hsi-engine.js` | Motore HSI web | Presente ma work in progress | +| `game-data/` | Dati di scenari, livelli, missioni, archetipi, zone | Implementato | +| `core-algorithm/` | Modello HSI Python e documento formula | Implementato come riferimento tecnico | +| `interactive-simulation/` | CLI diagnostica più vecchia | Legacy/prototipo | +| `user-data/demo_profile.json` | Profilo demo offline/documentale | Non usato dal frontend live | +| `manifest.json` | Manifest PWA | Abbozzato | +| `service-worker.js` | Cache offline base | Abbozzato | +| `modules/franchising-sociale/` | Radici Umane | Concettuale + script | +| `modules/iself-smart-contract/` | Proof of concept ISELF | Concettuale/POC | +| `tools/generate_scenarios.py` | Generatore scenari AI | Utility sperimentale | +| `docs/` | Base documentale fondativa e strategica | Ricca ma disallineata in punti chiave | + +## 3. Stato del worktree corrente + +Il repository non è in uno stato neutro. + +Il worktree corrente mostra modifiche non ancora consolidate proprio sui moduli più centrali: + +- `hsi.html` è presente come file aggiunto +- `modules/hsi-engine.js` è presente come file aggiunto +- `modules/profile-engine.js` contiene marker di merge non risolti + +Questa informazione è importante perché influenza la fotografia architetturale: + +- l'idea del nuovo onboarding HSI esiste +- ma non è ancora una base stabile da considerare "implementata" + +## 4. Architettura implementata oggi + +### Home Hub + +`index.html` funge da hub principale e presenta HUMANSAFE OS come sistema composto da: + +- login +- LIFENET +- journal +- profile +- circle +- data layer +- profile engine +- PWA + +Valutazione reale: + +- la navigazione esiste +- la rappresentazione dello stato è più ottimistica della realtà runtime + +### Access Layer + +`login.html` è un gateway demo: + +- nessuna autenticazione reale +- provider esterni simulati come pulsanti verso `profile.html` +- link a Telegram e HUMANSYNC Facebook + +Valutazione reale: + +- modulo utile come placeholder di visione +- non è ancora un vero auth layer + +### LIFENET + +`lifenet_game.html` è il modulo software più solido del prototipo. + +Fa realmente queste cose: + +- carica scenari da `game-data/scenarios/*.json` +- carica livelli da `game-data/progression/levels.json` +- carica missioni da `game-data/missions/missions_01.json` +- aggiorna XP sessione +- aggiorna badge, missioni, riflessioni e timeline tramite profile engine + +Limiti: + +- dipende dal motore profilo instabile +- non usa ancora un motore scenari separato +- non salva ancora statistiche invisibili come entità persistenti canoniche + +### Journal, Profile, Circle + +Questi tre moduli esistono come interfacce leggibili e coerenti con la visione. + +Dipendono però tutti dallo stesso motore profilo. + +Conseguenza: + +- sono moduli concettualmente centrati +- ma tecnicamente fragili finché il contratto dati del profilo non viene stabilizzato + +### HSI Diagnostic + +Il modulo HSI esiste in forma emergente con `hsi.html` e `modules/hsi-engine.js`, ma il suo stato attuale non è stabile per tre motivi: + +1. non è integrato nel flusso principale della home +2. il file HTML contiene artefatti di scrittura shell nel worktree attuale +3. il motore profilo da cui dipende è in conflitto + +## 5. Divergenze architetturali principali + +### 5.1 Profile Engine non canonico + +È il problema più serio. + +Nel file `modules/profile-engine.js` convivono due versioni incompatibili: + +- una API "storica" usata da `lifenet_game.html`, `journal.html`, `profile.html` e `social.html` +- una API "nuova" pensata per HSI, con schema diverso e nomi funzione diversi + +Differenze concrete: + +- `loadProfile` vs `getUserProfile` +- `saveProfile` vs `saveUserProfile` +- badge come stringhe vs badge come oggetti +- riflessioni con `date` vs `created_at` +- timeline con `date/title/description` vs `id/type/title/description/created_at` +- zone e archetipi italiani vs inglesi + +### 5.2 HSI non allineato in tutto il repository + +Esistono almeno tre versioni del modello HSI: + +- `core-algorithm/hsi_calculator.py`: formula B2B con zone rosso/grigio/verde +- `game-data/signals/hsi_zones.json`: cinque zone più granulari +- `modules/hsi-engine.js`: zone `grey/amber/blue/gold` e archetipi `observer/guardian/builder/explorer` + +Conclusione: + +- HSI è concettualmente centrale +- ma non esiste ancora un'unica semantica condivisa + +### 5.3 Onboarding reale diverso da onboarding dichiarato + +La formula ufficiale del sistema parte dalla diagnosi. + +Il flusso realmente esposto dalla home invece privilegia: + +- accesso demo +- LIFENET +- journal +- profile +- circle + +Risultato: + +- la diagnosi esiste come idea e pagina +- ma non è ancora la porta principale del sistema + +### 5.4 Documentazione e codice non sempre coincidono + +Esempi: + +- `docs/architecture/06_Lifenet_Game_Design.md` parla di React Native / Expo, mentre il prodotto reale è oggi una web app statica +- `docs/architecture/HUMANSAFE_OS.md` marca journal/profile come futuri, ma oggi esistono +- `README.md` e `struttura-humansafe.txt` riportano strutture cartella non più aggiornate +- `docs/README.md` conteneva testo duplicato e livelli di documentazione sovrapposti + +### 5.5 Tooling non allineato al repository corrente + +`tools/generate_scenarios.py` scrive e legge `game-data/scenario_*.json`, ma gli scenari attuali risiedono in `game-data/scenarios/`. + +Quindi: + +- l'idea del generatore è utile +- l'utility non è allineata al path reale del dataset + +### 5.6 PWA solo nominalmente pronta + +`manifest.json` e `service-worker.js` esistono, ma: + +- il manifest usa `logo_humansafe.jpg` dichiarandolo come `image/png` +- il service worker cachea solo alcune pagine +- non include moduli JS, JSON, login/profile/hsi o risorse dati +- usa percorsi assoluti che possono essere fragili in deploy sotto sottopath + +## 6. Stato MVP reale + +### Ciò che già qualifica il progetto come MVP concettualmente leggibile + +- identità forte e differenziata +- hub navigabile +- simulazione narrativa funzionante +- data pack iniziale di scenari, missioni, livelli, archetipi e zone +- journal/profile/circle come estensioni del percorso + +### Ciò che blocca un MVP stabile + +- profile engine non risolto +- contratto dati non canonico +- HSI non integrato e semanticamente incoerente +- PWA incompleta +- assenza di auth reale e sync + +## 7. Moduli classificati per stato + +### Implementato + +- Home Hub +- Access demo +- LIFENET +- Journal UI +- Profile UI +- Circle UI +- Data packs JSON +- HSI Python reference + +### Parziale + +- Profile Engine +- HSI web diagnostic +- PWA +- community persistence +- scenario generation tooling + +### Concettuale + +- HUMANSAFE LIFE come prodotto separato +- backend +- mobile app +- centri HUMANSAFE +- Quaderno di Sessione +- rivista e collane editoriali +- moduli terze parti AI-guided + +## 8. Lettura architetturale finale + +La realtà del repository non smentisce la visione HUMANSAFE. + +La conferma però in una forma molto precisa: + +- la visione è più avanti del software +- il software ha già un nucleo autentico +- il punto da consolidare non è la creatività del progetto, ma la sua convergenza tecnica + +Il repository non va rifatto da zero. + +Va portato da "prototipo identitariamente forte ma incoerente nei contratti" a "MVP coerente con una fonte dati canonica". diff --git a/docs/architecture/HUMANSAFE_DATA_FLOW.md b/docs/architecture/HUMANSAFE_DATA_FLOW.md new file mode 100644 index 0000000..b7c6b2b --- /dev/null +++ b/docs/architecture/HUMANSAFE_DATA_FLOW.md @@ -0,0 +1,226 @@ +# HUMANSAFE Data Flow + +Ultimo aggiornamento: 2026-03-15 + +Vedi anche: +- [HUMANSAFE Module Map](./HUMANSAFE_MODULE_MAP.md) +- [HUMANSAFE Core Real State](./HUMANSAFE_CORE_REAL_STATE.md) +- [HUMANSAFE MVP Roadmap](../strategy/HUMANSAFE_MVP_ROADMAP.md) + +## 1. Flusso dati reale oggi + +Il prototipo HUMANSAFE usa due famiglie di dati: + +### Dati strutturali di sistema + +Provengono da file statici in `game-data/`. + +Esempi: + +- scenari +- missioni +- livelli +- archetipi +- zone HSI + +### Dati utente runtime + +Sono pensati per vivere nel browser, soprattutto in `localStorage`, attraverso `modules/profile-engine.js`. + +Esempi: + +- nome profilo +- archetipo +- zona HSI +- HSI value +- XP totale +- livello +- badge +- missioni completate +- riflessioni +- timeline +- community posts + +## 2. Diagramma del flusso attuale + +```text +game-data/*.json +|- scenarios ------> lifenet_game.html +|- missions -------^ +|- levels ----------^ +|- archetypes ------> reference only / partial integration +`- hsi_zones -------> reference only / partial integration + +hsi.html ---------> hsi-engine.js ---------\ +lifenet_game.html --------------------------> profile-engine.js -> localStorage +journal.html -------------------------------/ +profile.html ------------------------------/ +social.html -------------------------------/ +``` + +## 3. Origine dei dati per modulo + +| Modulo | Input principali | Output principali | +|---|---|---| +| `hsi.html` | risposte utente | HSI, zona, archetipo, badge, missione, timeline | +| `lifenet_game.html` | scenari, missioni, livelli, scelte utente | XP, badge, missioni, riflessione, timeline | +| `journal.html` | profilo centralizzato | render di missioni, riflessioni, timeline | +| `profile.html` | profilo centralizzato | render di stato, badge, missioni | +| `social.html` | profilo centralizzato, input utente | community posts, riflessioni, timeline, badge | + +## 4. Stato attuale della "single source of truth" + +In teoria la fonte unica dei dati utente dovrebbe essere `modules/profile-engine.js`. + +In pratica non è ancora una single source of truth affidabile perché contiene due modelli concorrenti. + +### Modello A: storico, compatibile con UI attuale + +Campi principali: + +- `name` +- `provider` +- `archetype` +- `hsi_zone` +- `hsi_value` +- `xp_total` +- `level_name` +- `last_update` +- `badges` come array di stringhe +- `completed_missions` +- `reflections` con `{ date, text }` +- `timeline` con `{ date, title, description }` +- `community_posts` + +Compatibilità: + +- coerente con `profile.html` +- coerente con `journal.html` +- coerente con `social.html` +- coerente con `lifenet_game.html` + +### Modello B: nuovo, pensato per HSI evoluto + +Campi aggiuntivi o differenti: + +- `diagnostic_summary` +- `diagnostic_completed_at` +- `schema_version` +- `created_at` +- `updated_at` +- badge come oggetti +- riflessioni con `created_at` +- timeline con `type` e `created_at` + +Compatibilità: + +- coerente con il nuovo `modules/hsi-engine.js` +- non coerente con le UI attuali senza adapter + +## 5. Incoerenze dati principali + +### 5.1 Badge + +- UI attuali: stringhe semplici +- nuova branch HSI: oggetti con `id`, `name`, `description` + +### 5.2 Riflessioni + +- UI attuali: `{ date, text }` +- nuovo HSI: `{ id, text, created_at }` + +### 5.3 Timeline + +- UI attuali: `{ date, title, description }` +- nuovo HSI: `{ id, type, title, description, created_at }` + +### 5.4 HSI zone + +Nel repository convivono: + +- `Zona Rossa / Zona Grigia / Zona Verde` +- cinque zone granulari in `hsi_zones.json` +- `grey / amber / blue / gold` + +### 5.5 Archetipi + +Nel repository convivono: + +- `Cellula Dormiente`, `Cellula Reattiva`, `Cellula Osservatrice`, `Cellula in Risveglio`, `Nucleo Sovrano` +- `observer`, `guardian`, `builder`, `explorer` +- versione CLI a tre archetipi + +## 6. `user-data/demo_profile.json`: cosa rappresenta davvero + +`user-data/demo_profile.json` è utile come: + +- esempio di shape dati desiderata +- materiale documentale +- possibile seed manuale + +Non è però la fonte runtime dei moduli web attuali. + +Il frontend non lo carica. + +## 7. Valutazione per entità + +| Entità | Stato | Fonte reale | +|---|---|---| +| Scenari | Coerente | `game-data/scenarios/*.json` | +| Missioni | Coerente | `game-data/missions/missions_01.json` | +| Livelli | Coerente | `game-data/progression/levels.json` | +| HSI formula | Non canonica | Python/docs/JS in disaccordo | +| Profilo utente | Centrale ma non canonico | `localStorage` via `profile-engine.js` | +| Timeline | Presente ma non standardizzata | `profile-engine.js` | +| Badge | Presenti ma non standardizzati | `profile-engine.js` | +| Community posts | Demo locale | `profile-engine.js` | + +## 8. Contratto dati consigliato per la convergenza + +Il passo più sicuro non è reinventare la struttura, ma stabilizzare il modello storico e arricchirlo gradualmente. + +Direzione consigliata: + +- mantenere i campi usati dalle UI attuali +- aggiungere metadati nuovi in modo backward compatible +- introdurre adapter, non rotture + +Esempio di direzione sicura: + +```text +profile +|- id +|- name +|- provider +|- archetype_id +|- archetype_label +|- hsi_zone_id +|- hsi_zone_label +|- hsi_value +|- xp_total +|- level_id +|- level_name +|- badges[] +|- completed_missions[] +|- reflections[] +|- timeline[] +|- community_posts[] +|- diagnostic_summary +|- created_at +`- updated_at +``` + +Nota importante: + +- `badges`, `missions`, `reflections` e `timeline` dovrebbero diventare oggetti strutturati +- ma con rendering compatibile anche con il formato legacy + +## 9. Prima del backend + +Prima di introdurre API o sync cloud, il progetto deve chiudere tre punti: + +1. schema profilo unico +2. vocabolario HSI unico +3. passaggio dati unico fra HSI, LIFENET, journal, profile e circle + +Se questo non avviene prima del backend, la complessità verrà solo spostata lato server. diff --git a/docs/architecture/HUMANSAFE_ECOSYSTEM_MASTER.md b/docs/architecture/HUMANSAFE_ECOSYSTEM_MASTER.md new file mode 100644 index 0000000..aec5b33 --- /dev/null +++ b/docs/architecture/HUMANSAFE_ECOSYSTEM_MASTER.md @@ -0,0 +1,168 @@ +# HUMANSAFE Ecosystem Master + +Ultimo aggiornamento: 2026-03-15 + +Vedi anche: +- [HUMANSAFE Identity System](../manifesto/HUMANSAFE_IDENTITY_SYSTEM.md) +- [HUMANSAFE Core Real State](./HUMANSAFE_CORE_REAL_STATE.md) +- [HUMANSAFE Module Map](./HUMANSAFE_MODULE_MAP.md) +- [HUMANSAFE MVP Roadmap](../strategy/HUMANSAFE_MVP_ROADMAP.md) + +## 1. Executive summary + +Il repository `Humansafe-Core` contiene un ecosistema in cui la visione è già ampia, ma il software implementato è ancora un prototipo locale e modulare. + +Il progetto reale si può leggere così: + +```text +HUMANSAFE +|- HUMANSAFE LIFE +| |- orientamento +| |- layer editoriale e culturale +| |- relazioni, rivista, quaderni, supporto umano +| +|- HUMANSAFE OS +| |- accesso +| |- diagnosi HSI +| |- simulazione LIFENET +| |- journal +| |- profile +| |- circle/community +| |- PWA +| |- futuro backend/mobile +| +`- Nodi di espansione + |- Radici Umane + |- ISELF accountability layer + |- futuri centri HUMANSAFE + `- moduli per enti allineati +``` + +## 2. Filosofia di sistema + +La formula che il repository esprime con maggiore coerenza è: + +```text +diagnosi -> simulazione -> riflessione -> missione -> memoria -> evoluzione -> community +``` + +Non è solo una sequenza UX. È la definizione operativa del prodotto. + +### Perché HUMANSAFE non è un game o un social tradizionale + +- La diagnosi non serve a segmentare per advertising ma a orientare il percorso. +- La simulazione non serve a intrattenere all'infinito ma a rendere leggibili automatismi e scelte. +- Le missioni spingono fuori dallo schermo, non dentro. +- Il journal serve come memoria evolutiva, non come feed. +- La community è progettata come Circle etico, non come arena di status. + +## 3. Stato per layer + +| Layer | Ruolo | Stato nel repo | +|---|---|---| +| HUMANSAFE identity | Visione, etica, narrazione madre | Forte e documentata | +| HUMANSAFE LIFE | Editoriale, orientamento, rivista, supporto | Concettuale, non separato come prodotto | +| HUMANSAFE OS | Sistema software web/PWA | Parzialmente implementato | +| Access Layer | Porta di ingresso | Implementato come demo gateway | +| HSI Diagnostic | Lettura iniziale | Presente ma instabile e non integrato nel flusso principale | +| LIFENET | Simulazione narrativa | Implementato e funzionante come modulo più maturo | +| Journal | Memoria e riflessioni | Implementato come viewer del profilo | +| Profile | Centro identitario | Implementato come viewer del profilo | +| Circle | Community etica | Implementato in forma locale demo | +| Profile/Data Engine | Fonte unica dei dati utente | Parziale e attualmente incoerente | +| PWA Layer | Installabilità e cache | Abbozzato | +| Backend | Sync, auth, cloud, multi-device | Non implementato | +| Mobile packaging | Android/native bridge | Non implementato | +| Radici Umane | Nodo territoriale | Concettuale con script di supporto | +| ISELF | Accountability layer | Proof of concept non integrato | + +## 4. Dove il repository è forte + +Il repository è forte in quattro aree: + +- identità culturale e posizione etica +- qualità del linguaggio di prodotto +- struttura modulare per pagine e dataset +- chiarezza della direzione futura + +## 5. Dove il repository è fragile + +Il repository è fragile in quattro aree: + +- assenza di un contratto dati canonico fra HSI, profilo, journal, circle e livelli +- drift tra documentazione concettuale e codice eseguibile +- onboarding reale non allineato alla formula diagnosi-prima +- PWA e stato utente non ancora pronti per esperienza stabile multipagina + +## 6. Perimetro reale di `Humansafe-Core` + +Il repository oggi copre tre categorie diverse, che è essenziale non confondere: + +### A. Implementato + +- pagine web statiche navigabili +- caricamento dati da JSON +- persistenza locale browser-side prevista tramite `localStorage` +- prime logiche di XP, badge, missioni, riflessioni e timeline + +### B. Parziale + +- HSI web diagnostic +- profile engine +- PWA installabile e offline +- accesso reale +- community persistente + +### C. Concettuale o futuro + +- HUMANSAFE LIFE come prodotto distinto +- rivista "La Solita Attesa" +- serie letteraria "La Cellula di Messoud Sebbahi" +- Quaderno di Sessione / Session Report PDF +- centri HUMANSAFE +- moduli per associazioni o enti allineati +- backend e mobile app completi + +## 7. Modello ecosistemico consigliato + +Per mantenere il progetto leggibile anche quando crescerà, HUMANSAFE va pensato come sistema a cerchi concentrici: + +### Cerchio 1: Core experience + +- accesso +- HSI +- LIFENET +- journal +- profile +- circle + +### Cerchio 2: Infrastructure and trust + +- profile engine +- data contracts +- PWA +- futuro backend +- futuro auth layer + +### Cerchio 3: Cultural and territorial expansion + +- HUMANSAFE LIFE +- magazine +- quaderni +- centri +- partnership +- moduli white-label o AI-guided per realtà allineate + +## 8. Conclusione architetturale + +HUMANSAFE non va ripensato come app generica. + +Va invece consolidato come: + +- ecosistema etico con identità forte +- prototipo software già leggibile +- piattaforma modulare ancora in convergenza + +La priorità non è aggiungere altro. + +La priorità è far convergere il software attuale sulla promessa già espressa dalla visione. diff --git a/docs/architecture/HUMANSAFE_MODULE_MAP.md b/docs/architecture/HUMANSAFE_MODULE_MAP.md new file mode 100644 index 0000000..b879173 --- /dev/null +++ b/docs/architecture/HUMANSAFE_MODULE_MAP.md @@ -0,0 +1,153 @@ +# HUMANSAFE Module Map + +Ultimo aggiornamento: 2026-03-15 + +Vedi anche: +- [HUMANSAFE Core Real State](./HUMANSAFE_CORE_REAL_STATE.md) +- [HUMANSAFE Data Flow](./HUMANSAFE_DATA_FLOW.md) +- [HUMANSAFE Onboarding Flow](./HUMANSAFE_ONBOARDING_FLOW.md) + +## 1. Mappa dei moduli live nel repository + +| Modulo | File principali | Funzione | Stato | Note | +|---|---|---|---|---| +| Home Hub | `index.html` | Hub di ingresso e mappa del sistema | Implementato | Non espone ancora HSI come entry primaria | +| Access Layer | `login.html` | Gateway demo e ponte verso community esterne | Implementato | Nessuna auth reale | +| HSI Diagnostic | `hsi.html`, `modules/hsi-engine.js` | Diagnosi iniziale e aggiornamento profilo | Parziale | Worktree sporco e non integrato | +| LIFENET | `lifenet_game.html` | Simulazione narrativa con XP, missioni, ORACLE | Implementato | Modulo più vicino al cuore MVP | +| Journal Layer | `journal.html` | Memoria del percorso, riflessioni, timeline | Implementato | Viewer dipendente dal profilo | +| Profile Layer | `profile.html` | Identità evolutiva, livelli, badge, stato utente | Implementato | Viewer dipendente dal profilo | +| Circle Layer | `social.html` | Community etica locale/demo | Implementato | Persistenza locale, nessun backend | +| Profile Engine | `modules/profile-engine.js` | Stato utente condiviso | Parziale/critico | Merge conflict e schema non canonico | +| PWA Layer | `manifest.json`, `service-worker.js` | Installabilità e cache offline | Abbozzato | Copertura incompleta | +| Core Algorithm | `core-algorithm/*` | Riferimento matematico HSI | Implementato | Non ancora allineato al JS | +| Game Data | `game-data/*` | Scenari, missioni, livelli, archetipi, zone | Implementato | Buona base contenutistica | +| Demo User Data | `user-data/demo_profile.json` | Profilo dimostrativo | Documentale | Non usato dai moduli live | + +## 2. Data packs + +### Scenari + +File: + +- `game-data/scenarios/scenario_01.json` +- `game-data/scenarios/scenario_02.json` +- `game-data/scenarios/scenario_03.json` +- `game-data/scenarios/scenario_04.json` + +Uso reale: + +- caricati in `lifenet_game.html` +- ogni scenario contiene `setup`, `question`, `choices`, `oracle_intervention`, `stat_changes` + +Valutazione: + +- dataset coerente con l'identità HUMANSAFE +- base già riutilizzabile per espansione + +### Missioni + +File: + +- `game-data/missions/missions_01.json` + +Uso reale: + +- missioni suggerite da LIFENET +- collegate a reward XP e valore etico + +### Livelli + +File: + +- `game-data/progression/levels.json` + +Uso reale: + +- progression symbolica dal livello 1 al 5 +- integrata nella UI di LIFENET e Profile + +### Archetipi + +File: + +- `game-data/profiles/archetypes.json` + +Uso reale: + +- dataset di riferimento concettuale +- non ancora integrato in modo consistente con il nuovo HSI web + +### Zone HSI + +File: + +- `game-data/signals/hsi_zones.json` + +Uso reale: + +- base semantica importante +- non ancora la fonte canonica del motore HSI web + +## 3. Moduli concettuali o satelliti + +| Modulo | File | Stato | Ruolo | +|---|---|---|---| +| Radici Umane | `modules/franchising-sociale/*` | Concettuale + script | Nodo territoriale, peace business, ambassador model | +| ISELF | `modules/iself-smart-contract/ISELF_Token.sol` | Proof of concept | Accountability layer non speculativo | +| Interactive Simulation CLI | `interactive-simulation/cell_awakening.py` | Legacy/prototipo | Primo test diagnostico da terminale | +| Scenario Generator | `tools/generate_scenarios.py` | Sperimentale | Futuro authoring assistito da AI | + +## 4. Moduli orfani o legacy + +### `assets/js/share-quiz.js` + +È un asset legacy che aggancia una funzione `showResults()` non presente nei moduli correnti. + +Interpretazione: + +- probabile residuo di una versione precedente del quiz +- non parte del percorso principale attuale + +### `manifest.json.save` + +È un backup o artefatto manuale, non una parte del runtime. + +### `struttura-humansafe.txt` + +È una fotografia vecchia della struttura repo e non corrisponde più all'albero reale. + +## 5. Moduli futuri già leggibili nella visione + +Anche se non hanno ancora file dedicati, la repo rende già evidente la futura necessità di questi moduli: + +- HUMANSAFE LIFE come layer editoriale e relazionale +- Quaderno di Sessione / Session Report PDF +- rivista "La Solita Attesa" +- collana "La Cellula di Messoud Sebbahi" +- backend sync/auth +- packaging Android o native bridge +- moduli esterni per enti e associazioni allineate + +## 6. Relazioni operative tra i moduli live + +```text +index +|- login +|- lifenet_game -> profile-engine -> localStorage +|- journal -> profile-engine -> localStorage +|- profile -> profile-engine -> localStorage +`- social -> profile-engine -> localStorage + +hsi -> hsi-engine -> profile-engine -> localStorage + +lifenet_game -> fetch(game-data/scenarios, missions, levels) +``` + +## 7. Lettura finale + +Il repository non è un insieme casuale di pagine. È già una mappa modulare credibile. + +La criticità non è la mancanza di moduli. + +La criticità è che i moduli software centrali esistono, ma non sono ancora tutti connessi a una grammatica dati unica. diff --git a/docs/architecture/HUMANSAFE_ONBOARDING_FLOW.md b/docs/architecture/HUMANSAFE_ONBOARDING_FLOW.md new file mode 100644 index 0000000..99e18d0 --- /dev/null +++ b/docs/architecture/HUMANSAFE_ONBOARDING_FLOW.md @@ -0,0 +1,144 @@ +# HUMANSAFE Onboarding Flow + +Ultimo aggiornamento: 2026-03-15 + +Vedi anche: +- [HUMANSAFE Identity System](../manifesto/HUMANSAFE_IDENTITY_SYSTEM.md) +- [HUMANSAFE Data Flow](./HUMANSAFE_DATA_FLOW.md) +- [HUMANSAFE MVP Roadmap](../strategy/HUMANSAFE_MVP_ROADMAP.md) + +## 1. Flusso ideale dichiarato dal progetto + +La formula madre del progetto è: + +```text +diagnosi -> simulazione -> riflessione -> missione -> memoria -> evoluzione -> community +``` + +Tradotta in journey: + +1. l'utente entra +2. completa una prima lettura HSI +3. riceve un orientamento +4. entra in LIFENET +5. riceve missioni e riflessioni +6. ritrova tutto nel journal e nel profilo +7. se vuole, condivide nel Circle + +## 2. Flusso reale esposto oggi dal repository + +```text +index.html +|- login.html +|- lifenet_game.html +|- journal.html +|- profile.html +`- social.html + +login.html +|- profile.html +|- lifenet_game.html +|- journal.html +`- social.html + +hsi.html +`- lifenet_game.html +``` + +Conclusione: + +- il modulo HSI esiste +- ma non è ancora il primo passo del percorso pubblico + +## 3. Cosa succede davvero oggi + +### Ingresso + +L'utente atterra su `index.html`, legge la promessa del sistema e può: + +- accedere +- aprire direttamente LIFENET +- aprire direttamente journal, profile o circle + +### Accesso + +`login.html` non crea identità reale. + +Serve piuttosto come: + +- gateway demo +- simulazione di futuro accesso federato +- ponte verso community esterne + +### Diagnosi + +`hsi.html` potrebbe essere la vera fase iniziale del sistema, ma oggi non è collegata in modo forte dal percorso principale. + +### Simulazione + +LIFENET è il punto in cui la promessa HUMANSAFE diventa più concreta: + +- scenari +- scelte +- ORACLE +- missioni suggerite +- XP +- aggiornamento del profilo + +### Memoria + +Journal e Profile visualizzano la memoria accumulata. + +### Community + +Circle permette una forma di condivisione etica locale, ma ancora senza rete sociale reale o backend. + +## 4. Gap fra onboarding ideale e onboarding reale + +| Fase | Ideale | Stato reale | +|---|---|---| +| Accesso | account persistente | demo gateway | +| Diagnosi iniziale | primo step obbligatorio o fortemente consigliato | pagina esistente ma laterale | +| Simulazione | subito dopo la diagnosi | accessibile anche senza diagnosi | +| Missione | generata e tracciata | suggerita da LIFENET, tracciata localmente | +| Memoria | profilo continuo | esiste ma dipende dal motore profilo instabile | +| Community | condivisione etica persistente | demo locale | + +## 5. Onboarding minimo raccomandato prima del backend + +Il flusso più sicuro da portare a coerenza, senza rifare il progetto, è questo: + +```text +index -> login/demo access -> hsi -> lifenet -> journal -> profile -> circle +``` + +Perché è il flusso più sicuro: + +- rispetta la filosofia già dichiarata +- riusa tutti i moduli esistenti +- non richiede ancora backend reale +- rafforza il ruolo del profile engine come centro del sistema + +## 6. Cosa manca per renderlo stabile + +Mancano soprattutto: + +- un contratto dati unico per HSI e profilo +- un entrypoint chiaro da home verso HSI +- uno stato profilo coerente anche senza login reale +- una gestione robusta di primo avvio / utente demo / ripresa sessione + +## 7. Decisione architetturale suggerita + +HUMANSAFE dovrebbe considerare l'onboarding non come "login first", ma come "orientation first". + +Formula: + +- accesso leggero +- diagnosi significativa +- simulazione contestuale +- memoria crescente + +In questo modo il login smette di essere il centro. + +Il centro torna a essere il percorso umano. diff --git a/docs/architecture/README.md b/docs/architecture/README.md index a192c3d..8c39a1e 100644 --- a/docs/architecture/README.md +++ b/docs/architecture/README.md @@ -1,32 +1,28 @@ -\# Architettura HUMANSAFE +# Architettura HUMANSAFE +Questa sezione tiene insieme due cose: +- l'architettura concettuale del progetto +- la fotografia reale di ciò che il repository implementa oggi -Questa sezione descrive la struttura concettuale e tecnica del progetto. +## Documenti principali +- [HUMANSAFE Ecosystem Master](./HUMANSAFE_ECOSYSTEM_MASTER.md) +- [HUMANSAFE Core Real State](./HUMANSAFE_CORE_REAL_STATE.md) +- [HUMANSAFE Module Map](./HUMANSAFE_MODULE_MAP.md) +- [HUMANSAFE Data Flow](./HUMANSAFE_DATA_FLOW.md) +- [HUMANSAFE Onboarding Flow](./HUMANSAFE_ONBOARDING_FLOW.md) +## Documenti fondativi collegati -\## Contenuti +- `04_Cognitive_Framework.md` -> impianto cognitivo e modello umano +- `06_Lifenet_Game_Design.md` -> visione storica del modulo LIFENET +- `HUMANSAFE_OS.md` -> definizione concettuale del sistema operativo HUMANSAFE +## Regola di lettura +Per capire il progetto senza confondere visione e runtime: -\- framework cognitivi - -\- design del sistema - -\- architettura dei moduli - -\- logica della simulazione - -\- direzione tecnica del progetto - - - -\## File presenti - - - -\- `04\_Cognitive\_Framework.md` → impianto cognitivo del sistema - -\- `06\_Lifenet\_Game\_Design.md` → design del modulo LIFENET - +1. leggere `HUMANSAFE_ECOSYSTEM_MASTER.md` +2. verificare `HUMANSAFE_CORE_REAL_STATE.md` +3. usare `HUMANSAFE_DATA_FLOW.md` e `HUMANSAFE_MODULE_MAP.md` come riferimento operativo diff --git a/docs/manifesto/HUMANSAFE_IDENTITY_SYSTEM.md b/docs/manifesto/HUMANSAFE_IDENTITY_SYSTEM.md new file mode 100644 index 0000000..d9d213d --- /dev/null +++ b/docs/manifesto/HUMANSAFE_IDENTITY_SYSTEM.md @@ -0,0 +1,183 @@ +# HUMANSAFE Identity System + +Ultimo aggiornamento: 2026-03-15 + +Vedi anche: +- [HUMANSAFE Ecosystem Master](../architecture/HUMANSAFE_ECOSYSTEM_MASTER.md) +- [HUMANSAFE Core Real State](../architecture/HUMANSAFE_CORE_REAL_STATE.md) +- [HUMANSAFE Future Expansion](../strategy/HUMANSAFE_FUTURE_EXPANSION.md) + +## 1. Identità madre + +HUMANSAFE è un ecosistema etico e umano-centrico progettato per sviluppare: + +- awareness +- sovranità cognitiva +- resilienza emotiva +- comportamento digitale etico +- relazioni reali significative + +HUMANSAFE non nasce come prodotto single-purpose. È una matrice comune che tiene insieme tecnologia, cultura, orientamento, infrastrutture territoriali e futuri nodi modulari. + +Principio interno: + +> One soul, many possible nodes. + +Nel linguaggio HUMANSAFE questo significa: + +- una sola identità etica e simbolica +- più formati operativi +- più moduli +- più contesti di utilizzo +- più nodi territoriali o non territoriali + +## 2. Cosa HUMANSAFE è + +HUMANSAFE è: + +- un ecosistema di diagnosi, simulazione, riflessione, missione, memoria, evoluzione e community +- una tecnologia orientativa, non anestetica +- una piattaforma di educazione alla presenza e alla responsabilità +- un sistema modulare che può vivere come web app, PWA, prodotto editoriale, toolkit territoriale e futura infrastruttura per partner allineati + +## 3. Cosa HUMANSAFE non è + +HUMANSAFE non è: + +- un social network classico basato su engagement tossico +- un gioco dopaminico fondato su compulsione, ranking o dipendenza +- una semplice piattaforma di quiz +- un sostituto di supporto clinico, psicologico o medico +- una tech company che monetizza paura, sorveglianza o fragilità umana + +## 4. HUMANSAFE vs HUMANSAFE LIFE vs HUMANSAFE OS + +### HUMANSAFE + +È l'identità madre. + +Funzione: + +- custodire missione, filosofia, coerenza etica e visione di lungo periodo +- rendere riconoscibile l'ecosistema a utenti, partner, centri e collaboratori + +Nel repository attuale HUMANSAFE esiste in modo trasversale: + +- nel manifesto +- nella charter +- nella terminologia di interfaccia +- nella logica anti-social, anti-dipendenza e orientata alla presenza + +### HUMANSAFE LIFE + +È il layer editoriale, relazionale e orientativo. + +Funzione: + +- introdurre le persone al senso del progetto +- offrire linguaggio, contenuti, supporto e orientamento culturale +- collegare il software alla vita reale, alla rivista, ai quaderni, alla comunità e ai futuri centri + +Stato nel repository: + +- non esiste ancora come modulo software separato +- è presente solo in forma implicita nella scrittura dei testi, nei documenti fondativi, nel tono delle pagine e nella direzione strategica + +Conclusione: + +- HUMANSAFE LIFE è concettualmente forte +- è debolmente implementato come prodotto distinto + +### HUMANSAFE OS + +È il layer software e sistemico. + +Funzione: + +- trasformare la visione in esperienza interattiva +- coordinare diagnosi, simulazione, memoria, missioni, profilo e community + +Stato nel repository: + +- è il nucleo più chiaramente rappresentato +- vive nelle pagine HTML, nei moduli JS, nel data layer JSON, nel manifest e nel service worker + +## 5. Missione e stance etica + +Missione operativa: + +- restituire lucidità a persone immerse in ecosistemi digitali dispersivi +- allenare la capacità di non reagire automaticamente +- trasformare il digitale da macchina di consumo a infrastruttura di orientamento +- rafforzare relazioni vive, reali e non filtrate + +Stance etica: + +- privacy-first come direzione, anche se non ancora implementata con backend reale +- anti-manipolazione +- anti-dipendenza progettata +- cooperazione invece di competizione tossica +- continuità tra vita digitale e vita reale + +## 6. Filosofia sistemica + +La sequenza madre di HUMANSAFE è: + +1. diagnosi +2. simulazione +3. riflessione +4. missione +5. memoria +6. evoluzione +7. community + +Questa sequenza è il motivo per cui HUMANSAFE non coincide né con un quiz né con un gioco né con un social. + +Il valore del sistema non sta nel singolo touchpoint, ma nella continuità fra: + +- lettura iniziale di sé +- stress test narrativo +- interpretazione +- micro-azione reale +- tracciamento del percorso +- relazione con altri nodi umani + +## 7. Identità del repository rispetto all'ecosistema + +`Humansafe-Core` non contiene ancora tutto l'ecosistema HUMANSAFE in forma completa. + +Contiene però: + +- il nucleo documentale fondativo +- il primo prototipo di HUMANSAFE OS +- i semi di espansione verso infrastruttura territoriale e accountability layer + +In pratica il repository oggi rappresenta soprattutto: + +- HUMANSAFE OS come prototipo locale browser-based +- HUMANSAFE come visione e cornice etica +- HUMANSAFE LIFE come layer concettuale ancora da strutturare in prodotto + +## 8. Regole di coerenza identitaria + +Per preservare l'identità del progetto nelle prossime iterazioni, ogni modulo futuro dovrebbe rispettare queste regole: + +- non premiare l'uso compulsivo +- non trattare l'utente come merce +- non separare esperienza digitale e realtà vissuta +- non ridurre HUMANSAFE a wellness generico o startup app indistinta +- mantenere leggibile il passaggio da individuo a nodo +- far emergere il principio di responsabilità senza moralismo punitivo + +## 9. Implicazioni pratiche per i contributori + +Chi contribuisce al progetto deve leggere HUMANSAFE non come una singola app ma come un sistema a tre livelli: + +- identità madre: HUMANSAFE +- layer editoriale/relazionale: HUMANSAFE LIFE +- layer software/simulativo: HUMANSAFE OS + +Il repository attuale chiede quindi due tipi di disciplina: + +- disciplina architetturale, per non rompere il nucleo modulare +- disciplina identitaria, per non appiattire HUMANSAFE in un prodotto generico diff --git a/docs/manifesto/README.md b/docs/manifesto/README.md index b4d37ab..19367dd 100644 --- a/docs/manifesto/README.md +++ b/docs/manifesto/README.md @@ -1,30 +1,15 @@ -\# Manifesto HUMANSAFE +# Manifesto HUMANSAFE +Questa sezione raccoglie il nucleo identitario e valoriale del progetto. +## Documenti principali -Questa sezione raccoglie i documenti fondativi del progetto HUMANSAFE. +- `01_Manifesto.md` -> testo fondativo del progetto +- [HUMANSAFE Identity System](./HUMANSAFE_IDENTITY_SYSTEM.md) -> distinzione fra HUMANSAFE, HUMANSAFE LIFE e HUMANSAFE OS +## Focus della sezione - -\## Contenuti - - - -\- visione del progetto - -\- principi etici - -\- missione - -\- rapporto tra tecnologia e sicurezza umana - -\- orientamento valoriale dell’ecosistema - - - -\## File presenti - - - -\- `01\_Manifesto.md` → testo fondativo del progetto - +- missione +- principi etici +- postura verso tecnologia, dati e relazioni +- coerenza dell'identità madre nel tempo diff --git a/docs/strategy/HUMANSAFE_FUTURE_EXPANSION.md b/docs/strategy/HUMANSAFE_FUTURE_EXPANSION.md new file mode 100644 index 0000000..c304182 --- /dev/null +++ b/docs/strategy/HUMANSAFE_FUTURE_EXPANSION.md @@ -0,0 +1,221 @@ +# HUMANSAFE Future Expansion + +Ultimo aggiornamento: 2026-03-15 + +Vedi anche: +- [HUMANSAFE Identity System](../manifesto/HUMANSAFE_IDENTITY_SYSTEM.md) +- [HUMANSAFE Ecosystem Master](../architecture/HUMANSAFE_ECOSYSTEM_MASTER.md) +- [HUMANSAFE MVP Roadmap](./HUMANSAFE_MVP_ROADMAP.md) + +## 1. Obiettivo di questo documento + +Questo documento non descrive feature già implementate. + +Descrive invece il perimetro di espansione che il repository rende plausibile e coerente con la visione HUMANSAFE, distinguendo fra: + +- semi già presenti nel repo +- elementi pianificabili a medio termine +- livelli ancora concettuali + +## 2. Espansione HUMANSAFE LIFE + +HUMANSAFE LIFE è il layer editoriale, relazionale e orientativo dell'ecosistema. + +Nel repository non esiste ancora come prodotto separato, ma è chiaramente implicato da: + +- tono e copy del sistema +- documenti manifesto/charter/report +- idea di accompagnamento umano e culturale + +### Componenti consigliate + +- sito editoriale e orientativo +- pagina di presentazione dei percorsi +- area supporto e accompagnamento +- accesso a rivista, quaderni, materiali formativi + +## 3. Magazine: "La Solita Attesa" + +Stato: + +- concettuale +- non presente con file dedicati nel repository attuale + +Ruolo ecosistemico: + +- dare voce al layer HUMANSAFE LIFE +- creare continuità editoriale +- offrire un ponte fra cultura, testimonianza e software + +Uso futuro consigliato: + +- formato web magazine +- raccolta trimestrale +- innesto con journal, percorsi e nodi territoriali + +## 4. Collana: "La Cellula di Messoud Sebbahi" + +Stato: + +- concettuale, ma simbolicamente preparata dal manifesto e dal lessico della "cellula" + +Ruolo: + +- consolidare la base filosofica e narrativa del progetto +- offrire profondità culturale ai nodi HUMANSAFE +- sostenere la coerenza identitaria del sistema + +## 5. Quaderno di Sessione / Session Report PDF + +Stato: + +- non implementato +- fortemente coerente con l'attuale architettura dati + +Perché è un'estensione naturale: + +- il sistema già genera timeline, riflessioni, missioni, badge, livelli, HSI +- questi elementi possono essere composti in un report umano leggibile + +Valore: + +- restituzione personale del percorso +- materiale per facilitatori, centri o percorsi formativi +- ponte fra esperienza digitale e documentazione concreta + +## 6. Centri HUMANSAFE + +Stato: + +- concettuale, ma supportato da documenti strategici e dal modulo Radici Umane + +Funzione prevista: + +- creare nodi fisici di presenza, prevenzione e relazione +- ospitare laboratori, sessioni, orientamento, attività territoriali +- trasformare HUMANSAFE da software a infrastruttura culturale e sociale + +## 7. Radici Umane come primo nodo territoriale + +Il repository contiene già un seme concreto in `modules/franchising-sociale/`. + +Questo modulo suggerisce: + +- modello ambassador +- economia etica "peace business" +- raccolta fondi per infrastruttura umana e tecnologica +- replica territoriale per centri o presidi + +Stato: + +- non è integrato nel software core +- ma è una vera estensione strategica del sistema + +## 8. ISELF come accountability layer + +Il modulo `modules/iself-smart-contract/ISELF_Token.sol` mostra una direzione chiara: + +- token soulbound +- funzione non speculativa +- valore come certificazione o tracciabilità + +Stato: + +- proof of concept +- non integrato nel percorso utente corrente + +Uso futuro prudente: + +- solo se serve davvero come layer di accountability o certificazione +- mai come gimmick crypto o leva di crescita artificiale + +## 9. Moduli per enti, associazioni e organizzazioni allineate + +Il repository contiene abbastanza materiale per immaginare una futura offerta modulare HUMANSAFE verso terzi: + +- audit HSI +- simulazioni verticali +- reportistica +- moduli di orientamento etico +- toolkit per scuole, comuni, APS, reti territoriali o organizzazioni culturali + +Stato: + +- concettuale, ma coerente con `03_B2B_Standard.md` e `05_Public_Report.md` + +## 10. AI-guided web modules per realtà allineate + +Direzione possibile: + +- moduli web verticali basati su HUMANSAFE OS +- adattati a contesti specifici +- con guida AI etica e non sostitutiva dell'umano + +Vincoli: + +- niente manipolazione +- niente pseudo-terapia automatica +- niente estrazione opaca di dati intimi +- centralità della presenza umana e della responsabilità + +## 11. Evoluzione tecnica: backend e mobile + +### Backend + +Ruolo futuro: + +- sync multi-device +- autenticazione reale +- persistenza cloud +- reportistica +- gestione nodi o facilitatori + +Condizione per partire: + +- schema dati unico già chiuso a livello locale + +### Mobile + +Ruolo futuro: + +- packaging PWA +- eventuale native bridge +- eventuale app dedicata + +Condizione per partire: + +- PWA già coerente +- onboarding chiuso +- stato utente affidabile + +## 12. Modello di espansione consigliato + +L'espansione più sicura di HUMANSAFE non è "aggiungere feature ovunque". + +È costruire quattro cerchi coerenti: + +### Cerchio 1 + +Core OS stabile + +### Cerchio 2 + +HUMANSAFE LIFE come layer editoriale e relazionale + +### Cerchio 3 + +Session Report, centri, facilitatori, nodi territoriali + +### Cerchio 4 + +moduli partner, AI-guided web modules, account federati, ecosystem platform + +## 13. Regola di espansione + +Ogni futura estensione deve poter rispondere a tre domande: + +1. rafforza la sovranità cognitiva o la diluisce? +2. spinge verso la realtà o verso altro rumore? +3. appartiene a HUMANSAFE LIFE, HUMANSAFE OS o a un nodo ecosistemico? + +Se queste tre risposte non sono chiare, l'espansione è prematura. diff --git a/docs/strategy/HUMANSAFE_MVP_ROADMAP.md b/docs/strategy/HUMANSAFE_MVP_ROADMAP.md new file mode 100644 index 0000000..459f263 --- /dev/null +++ b/docs/strategy/HUMANSAFE_MVP_ROADMAP.md @@ -0,0 +1,195 @@ +# HUMANSAFE MVP Roadmap + +Ultimo aggiornamento: 2026-03-15 + +Vedi anche: +- [HUMANSAFE Core Real State](../architecture/HUMANSAFE_CORE_REAL_STATE.md) +- [HUMANSAFE Data Flow](../architecture/HUMANSAFE_DATA_FLOW.md) +- [HUMANSAFE Onboarding Flow](../architecture/HUMANSAFE_ONBOARDING_FLOW.md) +- [HUMANSAFE Future Expansion](./HUMANSAFE_FUTURE_EXPANSION.md) + +## 1. Definizione di MVP per HUMANSAFE + +Per questo repository, MVP non significa "app completa". + +Significa: + +- percorso coerente da orientamento iniziale a simulazione e memoria +- profilo utente locale stabile +- moduli principali navigabili senza rotture +- identità HUMANSAFE leggibile senza riduzione a quiz o social +- base PWA abbastanza solida da essere installabile in modo credibile + +## 2. Cosa è già MVP-capable + +Questi elementi sono già abbastanza maturi da appartenere a un MVP: + +- Home Hub come presentazione del sistema +- LIFENET come simulatore narrativo +- data pack iniziale di scenari, missioni e livelli +- Journal e Profile come memoria leggibile +- Circle come mock realistico di community etica + +## 3. Cosa blocca un MVP stabile + +### Blocco 1: schema profilo non canonico + +È il blocco principale. + +Senza un profilo unico e stabile: + +- HSI non converge +- journal/profile/circle restano fragili +- il backend futuro partirebbe da fondamenta incoerenti + +### Blocco 2: onboarding non chiuso + +Oggi il percorso dichiarato è più coerente del percorso effettivamente esposto. + +### Blocco 3: HSI semanticamente frammentato + +Python, JSON e JS non descrivono ancora la stessa grammatica diagnostica. + +### Blocco 4: PWA incompleta + +Il progetto è installabile solo a livello nominale, non come esperienza coerente offline o quasi-offline. + +## 4. Cosa fare prima del backend + +Ordine consigliato: + +1. fissare lo schema profilo unico +2. risolvere il merge e le API del profile engine +3. allineare HSI data contract e vocabolario +4. chiudere il flusso onboarding +5. rifinire PWA e deploy statico + +Motivo: + +- il backend deve amplificare un modello già chiaro +- non deve diventare il luogo in cui si nascondono incoerenze locali + +## 5. Cosa fare prima del packaging Android + +Prima di qualsiasi bridge mobile o packaging Android, il progetto deve avere: + +- manifest e icone corretti +- service worker robusto +- caching coerente delle risorse chiave +- navigazione stabile fra i moduli +- stato utente persistente affidabile + +Se si confeziona troppo presto: + +- si porta su mobile un prototipo ancora non convergente + +## 6. Roadmap pratica + +### Fase immediata + +- convergenza del profile engine +- definizione del contratto dati +- pulizia del worktree HSI/Profile + +### Breve termine + +- integrazione HSI nel flusso home/login +- adapter dati per journal/profile/circle +- revisione PWA minima + +### Medio termine + +- auth reale opzionale +- sync cloud +- export Session Report / Quaderno di Sessione +- stabilizzazione di HUMANSAFE LIFE come layer editoriale separato ma integrato + +## 7. Strategia di migrazione sicura + +La migrazione più sicura è incrementale. + +### Regola 1 + +Non rifare i moduli UI da zero. + +### Regola 2 + +Stabilizzare prima il modello dati e poi gli adapter. + +### Regola 3 + +Usare LIFENET come driver di test del profilo centrale. + +### Regola 4 + +Rendere HSI un entrypoint, non una branch parallela incompatibile. + +## 8. Rischi da evitare + +### Errore 1 + +Introdurre backend o database prima di aver chiuso il contratto dati locale. + +### Errore 2 + +Rifare l'intero prodotto come app mobile generica perdendo il layering HUMANSAFE/HUMANSAFE LIFE/HUMANSAFE OS. + +### Errore 3 + +Moltiplicare feature editoriali o community senza avere una memoria profilo stabile. + +## 9. Recommended Next Build Sequence + +### Step 1 + +Rendere `modules/profile-engine.js` la fonte unica di verità, risolvendo il merge e definendo uno schema profilo backward compatible con le UI attuali. + +### Step 2 + +Allineare il vocabolario HSI fra Python, JSON e JS, scegliendo una sola tassonomia per: + +- zone +- archetipi +- campi profilo +- payload timeline/reflections/badges + +### Step 3 + +Chiudere l'onboarding reale nel percorso: + +`index -> login/demo -> hsi -> lifenet -> journal/profile -> circle` + +senza introdurre ancora backend. + +### Step 4 + +Rendere la PWA coerente: + +- manifest corretto +- icone corrette +- cache completa delle risorse essenziali +- percorsi deploy-safe + +### Step 5 + +Solo dopo la stabilizzazione locale, introdurre: + +- sync cloud / backend +- account reale +- Session Report PDF +- packaging mobile +- moduli ecosistemici aggiuntivi + +## 10. Priorità finali + +### Singolo problema architetturale più urgente + +L'assenza di un contratto dati canonico per il profilo utente e per HSI. + +### Target di implementazione più sicuro + +Stabilizzare il profile engine e adattare a esso HSI, LIFENET, Journal, Profile e Circle. + +### Errore a più alto rischio da evitare + +Costruire backend, Android packaging o nuove feature editoriali sopra un modello profilo ancora diviso in due semantiche incompatibili. diff --git a/docs/strategy/README.md b/docs/strategy/README.md index 7f7e021..7305179 100644 --- a/docs/strategy/README.md +++ b/docs/strategy/README.md @@ -1,30 +1,20 @@ -\# Strategia HUMANSAFE +# Strategia HUMANSAFE +Questa sezione raccoglie la traiettoria operativa del progetto: cosa consolidare adesso, cosa espandere dopo e in quale ordine farlo senza snaturare HUMANSAFE. +## Documenti principali -Questa sezione raccoglie la strategia operativa e di sviluppo dell’ecosistema. +- [HUMANSAFE MVP Roadmap](./HUMANSAFE_MVP_ROADMAP.md) +- [HUMANSAFE Future Expansion](./HUMANSAFE_FUTURE_EXPANSION.md) +## Documento fondativo collegato +- `03_B2B_Standard.md` -> standard strategico e direzione organizzativa/B2B -\## Contenuti - - - -\- standard di implementazione - -\- diffusione del progetto - -\- roadmap operativa - -\- modelli di attivazione - -\- priorità strategiche - - - -\## File presenti - - - -\- `03\_B2B\_Standard.md` → standard operativo per sviluppo e relazioni B2B +## Focus della sezione +- stato MVP reale +- sequenza di build sicura +- migrazione verso PWA coerente +- condizioni per backend e mobile +- espansione editoriale, territoriale e partner ecosystem diff --git a/hsi.html b/hsi.html new file mode 100644 index 0000000..5ccea0b --- /dev/null +++ b/hsi.html @@ -0,0 +1,126 @@ +@' + + + + + + HUMANSAFE | HSI Diagnostic + + + +
+
+

HSI Diagnostic

+

Una prima scansione per comprendere il tuo orientamento cognitivo, emotivo ed etico nel sistema HUMANSAFE.

+

Diagnosis → Simulation → Reflection → Mission → Memory → Evolution → Community

+
+ +
+

+ Rispondi con sincerità. Non è un test clinico, ma una mappa iniziale + per personalizzare simulazione, riflessione e missioni. +

+
+ +
+
+ +
+ + +
+ + + + +'@ | Set-Content .\hsi.html -Encoding UTF8 diff --git a/modules/hsi-engine.js b/modules/hsi-engine.js new file mode 100644 index 0000000..e46ff7b --- /dev/null +++ b/modules/hsi-engine.js @@ -0,0 +1,179 @@ +@' +import { + updateHSIProfile, + addTimelineEvent, + addBadge, + addMission +} from "./profile-engine.js"; + +const HSI_QUESTIONS = [ + { id: "awareness_1", text: "Riesco a riconoscere con chiarezza ciò che provo prima di reagire.", axis: "awareness" }, + { id: "awareness_2", text: "Mi fermo a riflettere prima di prendere decisioni importanti.", axis: "awareness" }, + { id: "awareness_3", text: "Mi accorgo quando sto vivendo in automatico.", axis: "awareness" }, + + { id: "sovereignty_1", text: "So distinguere tra ciò che penso davvero e ciò che assorbo dall’esterno.", axis: "sovereignty" }, + { id: "sovereignty_2", text: "Resisto alla pressione di conformarmi digitalmente o socialmente.", axis: "sovereignty" }, + { id: "sovereignty_3", text: "Metto in discussione contenuti e stimoli prima di accettarli.", axis: "sovereignty" }, + + { id: "resilience_1", text: "Riesco a regolare le emozioni senza esserne travolto.", axis: "resilience" }, + { id: "resilience_2", text: "Costruisco relazioni che mi fanno crescere invece di svuotarmi.", axis: "resilience" }, + { id: "resilience_3", text: "Cerco di agire in modo coerente con i miei valori.", axis: "resilience" } +]; + +const form = document.getElementById("hsi-form"); +const submitBtn = document.getElementById("submit-hsi"); +const resultBox = document.getElementById("hsi-result"); +const resultContent = document.getElementById("hsi-result-content"); +const continueBtn = document.getElementById("continue-btn"); + +function renderQuestions() { + form.innerHTML = HSI_QUESTIONS.map((q, index) => ` +
+

${index + 1}. ${q.text}

+
+ ${[1, 2, 3, 4, 5].map(value => ` + + `).join("")} +
+
+ `).join(""); +} + +function collectAnswers() { + const answers = []; + + for (const question of HSI_QUESTIONS) { + const checked = document.querySelector(`input[name="${question.id}"]:checked`); + if (!checked) return null; + + answers.push({ + id: question.id, + axis: question.axis, + value: Number(checked.value) + }); + } + + return answers; +} + +function normalizeScore(rawScore, min = 9, max = 45) { + return Math.round(((rawScore - min) / (max - min)) * 100); +} + +function getHSIZone(score) { + if (score <= 25) return "grey"; + if (score <= 50) return "amber"; + if (score <= 75) return "blue"; + return "gold"; +} + +function getAxisScores(answers) { + return { + awareness: answers.filter(a => a.axis === "awareness").reduce((sum, a) => sum + a.value, 0), + sovereignty: answers.filter(a => a.axis === "sovereignty").reduce((sum, a) => sum + a.value, 0), + resilience: answers.filter(a => a.axis === "resilience").reduce((sum, a) => sum + a.value, 0) + }; +} + +function getArchetype(axisScores) { + const dominantAxis = Object.entries(axisScores).sort((a, b) => b[1] - a[1])[0][0]; + + switch (dominantAxis) { + case "awareness": + return "observer"; + case "sovereignty": + return "guardian"; + case "resilience": + return "builder"; + default: + return "explorer"; + } +} + +function buildDiagnosticSummary(zone, archetype) { + const zoneText = { + grey: "Ti trovi in una fase di possibile dispersione o automatismo.", + amber: "Sei in una soglia di transizione che richiede consolidamento.", + blue: "Hai una buona base di lucidità e presenza.", + gold: "Mostri una forte integrazione tra visione, etica e presenza." + }; + + const archetypeText = { + observer: "Il tuo archetipo iniziale è Observer.", + guardian: "Il tuo archetipo iniziale è Guardian.", + builder: "Il tuo archetipo iniziale è Builder.", + explorer: "Il tuo archetipo iniziale è Explorer." + }; + + return `${zoneText[zone]} ${archetypeText[archetype]}`; +} + +function showResult(data) { + resultContent.innerHTML = ` +

HSI Score: ${data.hsi_value}

+

Zona: ${data.hsi_zone}

+

Archetipo: ${data.archetype}

+

${data.diagnostic_summary}

+ `; + resultBox.classList.remove("hidden"); +} + +submitBtn?.addEventListener("click", () => { + const answers = collectAnswers(); + + if (!answers) { + alert("Compila tutte le domande prima di continuare."); + return; + } + + const rawScore = answers.reduce((sum, answer) => sum + answer.value, 0); + const hsi_value = normalizeScore(rawScore); + const hsi_zone = getHSIZone(hsi_value); + const axisScores = getAxisScores(answers); + const archetype = getArchetype(axisScores); + const diagnostic_summary = buildDiagnosticSummary(hsi_zone, archetype); + const diagnostic_completed_at = new Date().toISOString(); + + updateHSIProfile({ + hsi_value, + hsi_zone, + archetype, + diagnostic_summary, + diagnostic_completed_at + }); + + addTimelineEvent({ + type: "diagnostic_completed", + title: "HSI completato", + description: `Zona ${hsi_zone}, archetipo ${archetype}, score ${hsi_value}.` + }); + + addBadge({ + id: "first_scan", + name: "Prima Scansione", + description: "Hai completato il tuo primo orientamento HSI." + }); + + addMission({ + id: "observe_automation", + title: "Osserva il tuo automatismo", + description: "Per 12 ore, nota un momento in cui reagisci senza riflettere e annotalo nel Journal." + }); + + showResult({ + hsi_value, + hsi_zone, + archetype, + diagnostic_summary + }); +}); + +continueBtn?.addEventListener("click", () => { + window.location.href = "./lifenet_game.html"; +}); + +renderQuestions(); +'@ | Set-Content .\modules\hsi-engine.js -Encoding UTF8 diff --git a/modules/profile-engine.js b/modules/profile-engine.js index 6c6f26d..f1df4b9 100644 --- a/modules/profile-engine.js +++ b/modules/profile-engine.js @@ -1,171 +1,179 @@ -const PROFILE_KEY = "humansafe_user_profile"; +@' +const STORAGE_KEY = "humansafe_user_profile"; const DEFAULT_PROFILE = { - id: "demo-user-001", - name: "Messoud Demo Profile", + name: "Explorer", provider: "demo", - archetype: "Cellula Osservatrice", - hsi_zone: "Zona Grigia", + archetype: "observer", + hsi_zone: "grey", hsi_value: 50, xp_total: 0, - level_name: "Segnale Debole", - last_update: "", + level_name: "seed", badges: [], completed_missions: [], reflections: [], timeline: [], - community_posts: [] + community_posts: [], + diagnostic_summary: "", + diagnostic_completed_at: null, + schema_version: "1.1.0", + created_at: null, + updated_at: null }; -function cloneDefaultProfile() { - return JSON.parse(JSON.stringify(DEFAULT_PROFILE)); +export function getDefaultProfile() { + const now = new Date().toISOString(); + return { + ...DEFAULT_PROFILE, + created_at: now, + updated_at: now + }; } -export function loadProfile() { - const raw = localStorage.getItem(PROFILE_KEY); +export function getUserProfile() { + const raw = localStorage.getItem(STORAGE_KEY); if (!raw) { - const fresh = cloneDefaultProfile(); - saveProfile(fresh); - return fresh; + const profile = getDefaultProfile(); + saveUserProfile(profile); + return profile; } try { const parsed = JSON.parse(raw); - return { ...cloneDefaultProfile(), ...parsed }; + + return { + ...getDefaultProfile(), + ...parsed + }; } catch (error) { - const fresh = cloneDefaultProfile(); - saveProfile(fresh); - return fresh; + console.error("Errore parsing profilo:", error); + const fallback = getDefaultProfile(); + saveUserProfile(fallback); + return fallback; } } -export function saveProfile(profile) { - localStorage.setItem(PROFILE_KEY, JSON.stringify(profile)); -} +export function saveUserProfile(profile) { + const updatedProfile = { + ...profile, + updated_at: new Date().toISOString() + }; -export function resetProfile() { - const fresh = cloneDefaultProfile(); - saveProfile(fresh); - return fresh; + localStorage.setItem(STORAGE_KEY, JSON.stringify(updatedProfile)); + return updatedProfile; } -export function updateLastUpdate(profile, date = new Date()) { - const iso = - date.getFullYear() + "-" + - String(date.getMonth() + 1).padStart(2, "0") + "-" + - String(date.getDate()).padStart(2, "0"); - - profile.last_update = iso; +export function resetUserProfile() { + const profile = getDefaultProfile(); + saveUserProfile(profile); return profile; } -export function addXP(amount) { - const profile = loadProfile(); - profile.xp_total = Math.max(0, (profile.xp_total || 0) + amount); - updateLastUpdate(profile); - saveProfile(profile); - return profile; -} - -export function setHSI({ hsi_value, hsi_zone, archetype }) { - const profile = loadProfile(); +export function updateUserProfile(partialData) { + const profile = getUserProfile(); - if (typeof hsi_value === "number") profile.hsi_value = hsi_value; - if (hsi_zone) profile.hsi_zone = hsi_zone; - if (archetype) profile.archetype = archetype; + const updated = { + ...profile, + ...partialData, + updated_at: new Date().toISOString() + }; - updateLastUpdate(profile); - saveProfile(profile); - return profile; + saveUserProfile(updated); + return updated; } -export function setLevel(level_name) { - const profile = loadProfile(); - profile.level_name = level_name; - updateLastUpdate(profile); - saveProfile(profile); - return profile; +export function updateHSIProfile(data) { + return updateUserProfile({ + hsi_value: data.hsi_value, + hsi_zone: data.hsi_zone, + archetype: data.archetype, + diagnostic_summary: data.diagnostic_summary, + diagnostic_completed_at: data.diagnostic_completed_at + }); } -export function addBadge(badge) { - const profile = loadProfile(); - profile.badges = Array.isArray(profile.badges) ? profile.badges : []; +export function addTimelineEvent(event) { + const profile = getUserProfile(); - if (!profile.badges.includes(badge)) { - profile.badges.push(badge); - } + const timelineEvent = { + id: `evt_${Date.now()}`, + type: event.type || "generic", + title: event.title || "Evento", + description: event.description || "", + created_at: new Date().toISOString() + }; - updateLastUpdate(profile); - saveProfile(profile); - return profile; + const updatedTimeline = [timelineEvent, ...(profile.timeline || [])]; + + return updateUserProfile({ + timeline: updatedTimeline + }); } -export function addMission(mission) { - const profile = loadProfile(); - profile.completed_missions = Array.isArray(profile.completed_missions) - ? profile.completed_missions - : []; +export function addBadge(badge) { + const profile = getUserProfile(); + const badges = profile.badges || []; - const exists = profile.completed_missions.some((m) => m.id === mission.id); + const exists = badges.some(b => b.id === badge.id); + if (exists) return profile; - if (!exists) { - profile.completed_missions.unshift(mission); - } + const newBadge = { + id: badge.id, + name: badge.name, + description: badge.description || "", + created_at: new Date().toISOString() + }; - updateLastUpdate(profile); - saveProfile(profile); - return profile; + return updateUserProfile({ + badges: [newBadge, ...badges] + }); } -export function addReflection(text, date = new Date()) { - const profile = loadProfile(); - profile.reflections = Array.isArray(profile.reflections) ? profile.reflections : []; +export function addMission(mission) { + const profile = getUserProfile(); + const missions = profile.completed_missions || []; - const iso = - date.getFullYear() + "-" + - String(date.getMonth() + 1).padStart(2, "0") + "-" + - String(date.getDate()).padStart(2, "0"); + const exists = missions.some(m => m.id === mission.id); + if (exists) return profile; - profile.reflections.unshift({ - date: iso, - text - }); + const newMission = { + id: mission.id, + title: mission.title, + description: mission.description || "", + created_at: new Date().toISOString() + }; - updateLastUpdate(profile, date); - saveProfile(profile); - return profile; + return updateUserProfile({ + completed_missions: [newMission, ...missions] + }); } -export function addTimelineEvent(title, description, date = new Date()) { - const profile = loadProfile(); - profile.timeline = Array.isArray(profile.timeline) ? profile.timeline : []; +export function addReflection(reflectionText) { + const profile = getUserProfile(); - const iso = - date.getFullYear() + "-" + - String(date.getMonth() + 1).padStart(2, "0") + "-" + - String(date.getDate()).padStart(2, "0"); + const reflection = { + id: `refl_${Date.now()}`, + text: reflectionText, + created_at: new Date().toISOString() + }; - profile.timeline.unshift({ - date: iso, - title, - description + return updateUserProfile({ + reflections: [reflection, ...(profile.reflections || [])] }); - - updateLastUpdate(profile, date); - saveProfile(profile); - return profile; } export function addCommunityPost(post) { - const profile = loadProfile(); - profile.community_posts = Array.isArray(profile.community_posts) - ? profile.community_posts - : []; + const profile = getUserProfile(); - profile.community_posts.unshift(post); + const communityPost = { + id: `post_${Date.now()}`, + text: post.text || "", + created_at: new Date().toISOString() + }; - updateLastUpdate(profile); - saveProfile(profile); - return profile; + return updateUserProfile({ + community_posts: [communityPost, ...(profile.community_posts || [])] + }); } +'@ | Set-Content .\modules\profile-engine.js -Encoding UTF8 From 7ed4920fbc7da0242d47930aad69e662b01afce9 Mon Sep 17 00:00:00 2001 From: meseb Date: Sun, 15 Mar 2026 14:31:06 +0100 Subject: [PATCH 32/32] feat: run HUMANSAFE OS on physical Android device --- android/.gitignore | 101 ++ android/app/.gitignore | 2 + android/app/build.gradle | 54 + android/app/capacitor.build.gradle | 19 + android/app/proguard-rules.pro | 21 + .../myapp/ExampleInstrumentedTest.java | 26 + android/app/src/main/AndroidManifest.xml | 41 + .../java/it/humansafe/os/MainActivity.java | 5 + .../main/res/drawable-land-hdpi/splash.png | Bin 0 -> 7705 bytes .../main/res/drawable-land-mdpi/splash.png | Bin 0 -> 4040 bytes .../main/res/drawable-land-xhdpi/splash.png | Bin 0 -> 9251 bytes .../main/res/drawable-land-xxhdpi/splash.png | Bin 0 -> 13984 bytes .../main/res/drawable-land-xxxhdpi/splash.png | Bin 0 -> 17683 bytes .../main/res/drawable-port-hdpi/splash.png | Bin 0 -> 7934 bytes .../main/res/drawable-port-mdpi/splash.png | Bin 0 -> 4096 bytes .../main/res/drawable-port-xhdpi/splash.png | Bin 0 -> 9875 bytes .../main/res/drawable-port-xxhdpi/splash.png | Bin 0 -> 13346 bytes .../main/res/drawable-port-xxxhdpi/splash.png | Bin 0 -> 17489 bytes .../drawable-v24/ic_launcher_foreground.xml | 34 + .../res/drawable/ic_launcher_background.xml | 170 +++ android/app/src/main/res/drawable/splash.png | Bin 0 -> 4040 bytes .../app/src/main/res/layout/activity_main.xml | 12 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2786 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 3450 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 4341 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1869 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 2110 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2725 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3981 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 5036 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 6593 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6644 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 9793 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10455 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9441 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 15529 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 15916 bytes .../res/values/ic_launcher_background.xml | 4 + android/app/src/main/res/values/strings.xml | 7 + android/app/src/main/res/values/styles.xml | 22 + android/app/src/main/res/xml/file_paths.xml | 5 + .../getcapacitor/myapp/ExampleUnitTest.java | 18 + android/build.gradle | 29 + android/capacitor.settings.gradle | 3 + android/gradle.properties | 22 + android/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43764 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 + android/gradlew | 251 ++++ android/gradlew.bat | 94 ++ android/settings.gradle | 5 + android/variables.gradle | 16 + build-mobile.ps1 | 29 + capacitor.config.json | 5 + dist-mobile/assets/js/share-quiz.js | 147 +++ dist-mobile/game-data/README.md | 54 + .../game-data/missions/missions_01.json | 51 + .../game-data/profiles/archetypes.json | 69 ++ dist-mobile/game-data/progression/levels.json | 41 + .../game-data/scenarios/scenario_01.json | 60 + .../game-data/scenarios/scenario_02.json | 60 + .../game-data/scenarios/scenario_03.json | 59 + .../game-data/scenarios/scenario_04.json | 60 + dist-mobile/game-data/signals/hsi_zones.json | 97 ++ dist-mobile/hsi.html | 126 ++ dist-mobile/index.html | 427 +++++++ dist-mobile/journal.html | 438 +++++++ dist-mobile/lifenet_game.html | 660 ++++++++++ dist-mobile/login.html | 271 +++++ dist-mobile/logo_humansafe.jpg | Bin 0 -> 156724 bytes dist-mobile/manifest.json | 21 + .../modules/franchising-sociale/README.md | 25 + .../roi_ambassador_calculator.py | 40 + dist-mobile/modules/hsi-engine.js | 179 +++ .../iself-smart-contract/ISELF_Token.sol | 51 + dist-mobile/modules/profile-engine.js | 179 +++ dist-mobile/profile.html | 435 +++++++ dist-mobile/service-worker.js | 23 + dist-mobile/social.html | 518 ++++++++ dist-mobile/user-data/demo_profile.json | 56 + package-lock.json | 1074 +++++++++++++++++ package.json | 16 + 83 files changed, 6249 insertions(+) create mode 100644 android/.gitignore create mode 100644 android/app/.gitignore create mode 100644 android/app/build.gradle create mode 100644 android/app/capacitor.build.gradle create mode 100644 android/app/proguard-rules.pro create mode 100644 android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java create mode 100644 android/app/src/main/AndroidManifest.xml create mode 100644 android/app/src/main/java/it/humansafe/os/MainActivity.java create mode 100644 android/app/src/main/res/drawable-land-hdpi/splash.png create mode 100644 android/app/src/main/res/drawable-land-mdpi/splash.png create mode 100644 android/app/src/main/res/drawable-land-xhdpi/splash.png create mode 100644 android/app/src/main/res/drawable-land-xxhdpi/splash.png create mode 100644 android/app/src/main/res/drawable-land-xxxhdpi/splash.png create mode 100644 android/app/src/main/res/drawable-port-hdpi/splash.png create mode 100644 android/app/src/main/res/drawable-port-mdpi/splash.png create mode 100644 android/app/src/main/res/drawable-port-xhdpi/splash.png create mode 100644 android/app/src/main/res/drawable-port-xxhdpi/splash.png create mode 100644 android/app/src/main/res/drawable-port-xxxhdpi/splash.png create mode 100644 android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 android/app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 android/app/src/main/res/drawable/splash.png create mode 100644 android/app/src/main/res/layout/activity_main.xml create mode 100644 android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 android/app/src/main/res/values/ic_launcher_background.xml create mode 100644 android/app/src/main/res/values/strings.xml create mode 100644 android/app/src/main/res/values/styles.xml create mode 100644 android/app/src/main/res/xml/file_paths.xml create mode 100644 android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java create mode 100644 android/build.gradle create mode 100644 android/capacitor.settings.gradle create mode 100644 android/gradle.properties create mode 100644 android/gradle/wrapper/gradle-wrapper.jar create mode 100644 android/gradle/wrapper/gradle-wrapper.properties create mode 100644 android/gradlew create mode 100644 android/gradlew.bat create mode 100644 android/settings.gradle create mode 100644 android/variables.gradle create mode 100644 build-mobile.ps1 create mode 100644 capacitor.config.json create mode 100644 dist-mobile/assets/js/share-quiz.js create mode 100644 dist-mobile/game-data/README.md create mode 100644 dist-mobile/game-data/missions/missions_01.json create mode 100644 dist-mobile/game-data/profiles/archetypes.json create mode 100644 dist-mobile/game-data/progression/levels.json create mode 100644 dist-mobile/game-data/scenarios/scenario_01.json create mode 100644 dist-mobile/game-data/scenarios/scenario_02.json create mode 100644 dist-mobile/game-data/scenarios/scenario_03.json create mode 100644 dist-mobile/game-data/scenarios/scenario_04.json create mode 100644 dist-mobile/game-data/signals/hsi_zones.json create mode 100644 dist-mobile/hsi.html create mode 100644 dist-mobile/index.html create mode 100644 dist-mobile/journal.html create mode 100644 dist-mobile/lifenet_game.html create mode 100644 dist-mobile/login.html create mode 100644 dist-mobile/logo_humansafe.jpg create mode 100644 dist-mobile/manifest.json create mode 100644 dist-mobile/modules/franchising-sociale/README.md create mode 100644 dist-mobile/modules/franchising-sociale/roi_ambassador_calculator.py create mode 100644 dist-mobile/modules/hsi-engine.js create mode 100644 dist-mobile/modules/iself-smart-contract/ISELF_Token.sol create mode 100644 dist-mobile/modules/profile-engine.js create mode 100644 dist-mobile/profile.html create mode 100644 dist-mobile/service-worker.js create mode 100644 dist-mobile/social.html create mode 100644 dist-mobile/user-data/demo_profile.json create mode 100644 package-lock.json create mode 100644 package.json diff --git a/android/.gitignore b/android/.gitignore new file mode 100644 index 0000000..48354a3 --- /dev/null +++ b/android/.gitignore @@ -0,0 +1,101 @@ +# Using Android gitignore template: https://github.com/github/gitignore/blob/HEAD/Android.gitignore + +# Built application files +*.apk +*.aar +*.ap_ +*.aab + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ +# Uncomment the following line in case you need and you don't have the release build type files in your app +# release/ + +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files +*.log + +# Android Studio Navigation editor temp files +.navigation/ + +# Android Studio captures folder +captures/ + +# IntelliJ +*.iml +.idea/workspace.xml +.idea/tasks.xml +.idea/gradle.xml +.idea/assetWizardSettings.xml +.idea/dictionaries +.idea/libraries +# Android Studio 3 in .gitignore file. +.idea/caches +.idea/modules.xml +# Comment next line if keeping position of elements in Navigation Editor is relevant for you +.idea/navEditor.xml + +# Keystore files +# Uncomment the following lines if you do not want to check your keystore files in. +#*.jks +#*.keystore + +# External native build folder generated in Android Studio 2.2 and later +.externalNativeBuild +.cxx/ + +# Google Services (e.g. APIs or Firebase) +# google-services.json + +# Freeline +freeline.py +freeline/ +freeline_project_description.json + +# fastlane +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots +fastlane/test_output +fastlane/readme.md + +# Version control +vcs.xml + +# lint +lint/intermediates/ +lint/generated/ +lint/outputs/ +lint/tmp/ +# lint/reports/ + +# Android Profiling +*.hprof + +# Cordova plugins for Capacitor +capacitor-cordova-android-plugins + +# Copied web assets +app/src/main/assets/public + +# Generated Config files +app/src/main/assets/capacitor.config.json +app/src/main/assets/capacitor.plugins.json +app/src/main/res/xml/config.xml diff --git a/android/app/.gitignore b/android/app/.gitignore new file mode 100644 index 0000000..043df80 --- /dev/null +++ b/android/app/.gitignore @@ -0,0 +1,2 @@ +/build/* +!/build/.npmkeep diff --git a/android/app/build.gradle b/android/app/build.gradle new file mode 100644 index 0000000..af45439 --- /dev/null +++ b/android/app/build.gradle @@ -0,0 +1,54 @@ +apply plugin: 'com.android.application' + +android { + namespace = "it.humansafe.os" + compileSdk = rootProject.ext.compileSdkVersion + defaultConfig { + applicationId "it.humansafe.os" + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + versionCode 1 + versionName "1.0" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + aaptOptions { + // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps. + // Default: https://android.googlesource.com/platform/frameworks/base/+/282e181b58cf72b6ca770dc7ca5f91f135444502/tools/aapt/AaptAssets.cpp#61 + ignoreAssetsPattern = '!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~' + } + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +repositories { + flatDir{ + dirs '../capacitor-cordova-android-plugins/src/main/libs', 'libs' + } +} + +dependencies { + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion" + implementation "androidx.coordinatorlayout:coordinatorlayout:$androidxCoordinatorLayoutVersion" + implementation "androidx.core:core-splashscreen:$coreSplashScreenVersion" + implementation project(':capacitor-android') + testImplementation "junit:junit:$junitVersion" + androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion" + androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion" + implementation project(':capacitor-cordova-android-plugins') +} + +apply from: 'capacitor.build.gradle' + +try { + def servicesJSON = file('google-services.json') + if (servicesJSON.text) { + apply plugin: 'com.google.gms.google-services' + } +} catch(Exception e) { + logger.info("google-services.json not found, google-services plugin not applied. Push Notifications won't work") +} diff --git a/android/app/capacitor.build.gradle b/android/app/capacitor.build.gradle new file mode 100644 index 0000000..bbfb44f --- /dev/null +++ b/android/app/capacitor.build.gradle @@ -0,0 +1,19 @@ +// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN + +android { + compileOptions { + sourceCompatibility JavaVersion.VERSION_21 + targetCompatibility JavaVersion.VERSION_21 + } +} + +apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle" +dependencies { + + +} + + +if (hasProperty('postBuildExtras')) { + postBuildExtras() +} diff --git a/android/app/proguard-rules.pro b/android/app/proguard-rules.pro new file mode 100644 index 0000000..f1b4245 --- /dev/null +++ b/android/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java b/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java new file mode 100644 index 0000000..f2c2217 --- /dev/null +++ b/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.getcapacitor.myapp; + +import static org.junit.Assert.*; + +import android.content.Context; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.platform.app.InstrumentationRegistry; +import org.junit.Test; +import org.junit.runner.RunWith; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + + @Test + public void useAppContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + + assertEquals("com.getcapacitor.app", appContext.getPackageName()); + } +} diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..b06ddbf --- /dev/null +++ b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android/app/src/main/java/it/humansafe/os/MainActivity.java b/android/app/src/main/java/it/humansafe/os/MainActivity.java new file mode 100644 index 0000000..599e387 --- /dev/null +++ b/android/app/src/main/java/it/humansafe/os/MainActivity.java @@ -0,0 +1,5 @@ +package it.humansafe.os; + +import com.getcapacitor.BridgeActivity; + +public class MainActivity extends BridgeActivity {} diff --git a/android/app/src/main/res/drawable-land-hdpi/splash.png b/android/app/src/main/res/drawable-land-hdpi/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..e31573b4fc93e60d171f4046c0220e1463075d9e GIT binary patch literal 7705 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 wKmFJ0_JHhk1&0B>;%YXATM literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-land-mdpi/splash.png b/android/app/src/main/res/drawable-land-mdpi/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..f7a64923ea1a0565d25fa139c176d6bf42184e48 GIT binary patch literal 4040 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 XyOn+%7f`N3b2T^T3uj5+eShz7v)7qy literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-land-xhdpi/splash.png b/android/app/src/main/res/drawable-land-xhdpi/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..807725501bdd92e94e51e7b2b0006f69e0083a0b GIT binary patch literal 9251 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-land-xxhdpi/splash.png b/android/app/src/main/res/drawable-land-xxhdpi/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..14c6c8fe39fcd51a0414866ad28cbe8ff3acb060 GIT binary patch literal 13984 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®q@N z14_H8ofW)l{|J8q+a)eH)I0r)>WXdzV%7J>PA~6_J)KLT90iYa^K=Wz7D!OybzqSru=f4?|KFl;Y)gP_H6V4x`~kZ6fE(xM1&;?72-TZNk+0 zr+Crr5yl%Iy@vfmt3eYFl!jIvPGFz^8Ek+2`48O1_pCX3xNWh-zBa{rIcc%+=|XVj zANYTg&s}TKb#OztQrCW(Xk?V^i{`q~%HtcveTxq(_HKeC9GzrtguMT4Nvs@KakPTA z9>*8bBZmLz`lK5=l)=b|=dT3a5ag^a1^znZyx5QKfUb1b9yacArRp%3@QWo(hrsCU z-K!-=jDmv!zb7XT>)r|-Z0Ry}lk2;dk-ECqMwr_nKN#x*X6~B5hVIN>6$1HwBz3Of z=Pk){AL5*=d90f17_qZEJLm;Q%WMdX=*N&!ki@E&cy7?>{1ssAH(tACtp*r@d^til z)x(1#6(kPD+joSF&J3sxJU@{-sWCS+pZq{Gsx=?z4wP;>?)1yHv0?X?VP{}cX4~aH zxeBPKw_rgW8rvewS1W2#^y+c>-183iMbJCqc38RN_o~__9-n|jcd&oA`m7*&Fqqpc z;Tev*0LS-ZK47Sq1unfvP1S43uA12P?PJmI8BeTYPr~R*tYUm^0;U%Hmu?bSZHEK6 zPjsW=E67Kq-&trmf;)UkmRABH2U)V)-eRT$j(%G12lLMsThSsU10iP#{)ZnvjzN$d z*K%P3`}oqyvpWP~venr>3viH8^`)Ma*=B31hw*Q+tqE>i2y7w!(o^lI^Yss^=tHW( z;cnCT(%B1gLz+TRGW9roFjI1EQTu-u`(f#RmZ8;FSN(bsC1J;+(i_R6mrW=yYx$cy z#%QKVrEx~kVMg~yo?^N28Wnk6x%L;J8i|*|ANEiNjq(Vhzuzl3ikpA*G!Z}kLAzAI z9qnySo%D|AuJj12%h;Otqjs(>LPj?rNdeU8so>P(C>XMzlho94ZD#w=cCOOU;=3&^ zsqAG!i{~lY271D|m>ztPV`)X@FO_;`wPjppYNQpM+ncvtz1lZjN>!Q^*I}T%uP78Z7tbV2$q3W_)14=kLFyJ z1GqL6T>ClgeZorL!}xP4f%OB_EsmJ`uw7dGWNV9OLlhb|UMpVhc{4@Bhh`tO!ZqzD zhusd<=K^ah!L@gQ?6dOpI-ge^e>S5W9eII57Zu16eU?GRbgKTeVk9yS{iK|O(zLR> zheb?;jwGCHS80NCn=jKxgJ>}qu4l%5NPihjzazGv#J?Jcyl;<#IW&x4mm>nrW8>}C z3U@aeD~)*F(0o^2{GnKVm$Jr#aZE ztl~TOkM^SdzJapQ((!-i8b!RkVQBKkL`2ZCBuy!qI1L{3Er526plVols~68U-^9Px zR(3{j;Z9RHX^muc0dUywJ|`yyZFf=k&-Gb#m4u73Lm5Ks%BfHj%2|gjn#i> zLC5pO$2Em9H;qoKQmMtl<@wgtPF1%2HariD5O~u>8=^*J&au~JH%Ih@&2Uging3U_ z0bzfKucW$ZHSx}!#buB?+-J)%RQbbXM-!BJTS&#dU_@lxU6>te2O+9 z@F{F{Nb!;{Cd`Gx+$G?11aB~S#wIH%D=*=7f7H@D@%B1)&bF$@t3JDq4l*%(wJTlh zo`?uMq{YilKUewPNaC)GuOr<8j9&ofqRU__BRUX^x8Cj3a;a$rXzgXqW>LR#CUn%~m)t zYC&ol(gAkbc^fd`xWU&bk5vT6KbFmsR=O78Bn%t7 znbw&=c+|T&#r+bls5rU6D#HMvqA<|;)BV%jOMonkm^p$7Vcel-Wwn$=uAJv&(8W>% z9))Fxpl*(%E#wFm_m!U~2HqgZs^2vaGeY(UfYKrSHV}w^D0N6!se5Ewy)Yy-!(2

aKj2hWG7>znxs|SE zN4rHtiSPqLskWp(?(_YYwgq+1@8v+~8As|(bC>$D(atG3ZE8-ZM3SVcg|vHQz$I=!(A`k`5= zOqR>&%G)$)k*QLz7MTB9wleWpv&N9Sta64wy}3Ytd?x!Ja8z>(z~(3UNFu^eFmn#6 zw!!gUxOuZi$PQIs*ixfZR3iLyADJ z5&s%tPfk>V!x|A-;oq%1!yk9H$UBP0ToA*EDtz(^!_AnF1bBQ7joj|? z5b)gSI8c8O$PYFE!vXJ<4gebg*9G9P2wcB{#kv0FItc5T@PDNo)}Rh4Us}L{e}xzW zhwt`)j`M)mP=G6H0;^&q=I0{jU%bIRkF#uLF;{vVC&H|_uc literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-land-xxxhdpi/splash.png b/android/app/src/main/res/drawable-land-xxxhdpi/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..244ca2506dbe0fd8f6a05520ac7d1a629ea81438 GIT binary patch literal 17683 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-port-xxhdpi/splash.png b/android/app/src/main/res/drawable-port-xxhdpi/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..bfabe6871a17a5e95b78fb30d49b7d2b4d2fe4c0 GIT binary patch literal 13346 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

VwO4Hu8X}%XHUAz_J@50rzbkIsat>4oWtQt< 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-port-xxxhdpi/splash.png b/android/app/src/main/res/drawable-port-xxxhdpi/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..6929071268eb03ee0f088142b6523566b78550e2 GIT binary patch literal 17489 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 KR&><$`~L^lv%S~= literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..c7bd21d --- /dev/null +++ b/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/android/app/src/main/res/drawable/ic_launcher_background.xml b/android/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..d5fccc5 --- /dev/null +++ b/android/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android/app/src/main/res/drawable/splash.png b/android/app/src/main/res/drawable/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..f7a64923ea1a0565d25fa139c176d6bf42184e48 GIT binary patch literal 4040 zcmcJSdsNct*2lF|+LV`0O<9`gWHmXNI_0HMG^Z5J?4q936dm(MrI-mKAX+&`r@Sy` z-UWRJFO`aw_bX%OB?%BsNembv6+|Tjydip+nRU)OtOyZ-=Ql zg+^ZsGj@v#jtKJ%3l2raybiNhQ`5cScGk%|o;Ax>Wil|!;(O3Lf_3Bc!SfzKS@3G9SN2|L z(ZlkChqH{!k{zKhLYD}HO7W>_PR28&-#hB8$hv^aHfYWp(-yZ&PjRKna1=pP?I``1 zJhjuO|72XMzS&A`ll~v(jzN{Frmn5>s?4oWm3ilm#y^>=Z7T0(E0y>~Ztr2SKReA#x9s@PM3fJO!ntA?b_8IZah%-bwM9 zrPWDVzQJ#=jNs2JFaIztcQ0f(1C!QIp9S=|i`TgeU6oCJEYl!NZt9;kr`?c*G`gYL z@F{~wLcg{AeYsJqL5a^oqb2fgiQdIWwT6hBG)j6WGHI;BDLJKtg?9`plfFIyj9vratv!=oN|3q^M@s8E4;aM>14uu(qdH(aO2!g1QL;0` zlk6jmGqw0V8qtS}{yIbU zy>D2IV8n93+k-43)t5 zHoV3wwoE0fvlt-)6(+qv+gtyLBU{6AXwX3cO?Q8$*rCK+@|S(B)0&f&O%^8)h~IhY zd<#&uT#;hk(*&kL^^?ZTCQ4SZMdMql`iAzYYlk5dzXx_IzRNCBVl5Zt19LadD879-yI@>5F^1WV)eBIqfUF-~YTRMM0GDHk}LbSxo2oUVHJpMmlGI z3rByWH)H!8qah9gR@k*d-eyg+Ut|QQuRXEs=h1?GQkAwt(nNpN>BVlOppy1v**<~L ziAz`NGRMEZ%FOBu;ffb*Dd;A6ga;1r!6aMIM#@+UoE(3-Ev!2+(8oW?Jh1}V97M=? z?=$ovd^ECvJRP5aXbm{nv}4kKb(%lr!R}n2+m15~9wFR_pYW~@n#SC_lQPi8*+FhQ zWgalxc8^I4BGJ$9lX*4_2*@b(JtjHCy?trm@T7^ssR!kDcf$tTh3>JEO3mDbfLp#- z!w1chv6Z|o;mH%@=_g$(dgr`>qPQ9bHA7BFa^-tsN`hJ9mNtmx&rLyKj!clpb<|Hk=?iJB z!5J1+q2QQJk%f_G+bkf_kJf73rWyYHiYk|l#{AKMCW^wd#GI}}R-9g|^3&9}dLw2a zV0)s_`5Eso3~`Al@ed**cogwQ#F(S~oILZoU?$)eNMBpO7Xxpbh#2)}W;Kieqe8oo)a3m%oR62^N?_yPVJ_d;Kw;*5!k>Up)ElRob1s7hf z`rXQ9f^~cJpwXVC#@jID+`HIoJQTbv)|UmPNvCosIgIY9G2XEOsTP&!r(T^LzUBHT zm@Z$0!Sv28U0}l;@o=n+c4iWl!X6L^Y|;UkG+t#x^70!S5%F8zowq~^O7?ac(QZcl zQB#=(-;Q!Z*wH1_x*I72kb0u=t+^ZnScg3>(xrY7}&B;VVl=w*X`WI$%U!?jW zN+#A9P#}F19q9fw^74?^NNZ+f=r%@)bG_b9A}}^?LIj*zi2s=MR0$kH^uuDyIhV?@ z!zGYiC2Kv+6Wh3Z(oY)mz!6nFw2tAx@t5Q5O$0H%a!RyV!@e{4oTo9bt}Til)3?xvCcCTz{dKU{5DE9= zymnZ!hKWvDY{DGWHsUdT=bNcxt&f@Up+fU)dk_0P&q;iSi7+r9B_gI7IRiHs7Ck_$ zhIZj!=8Z1&+GbjBY3WF?ea!5Trx;Lk%c3etM&1ob@qK5xfauZL)Mh=RX%I;MYW*Wn zn68mApKv@5>sWIZc6C9}^UI3Q_Bzg8(~crtJvLDxR#5VKDt|jV*Z8rL{^#`(Nf?9R zq_tx7Z(Y-R#`6WqkLg~f2g1R)BDMiejUO!YRL79;y3}l&!G`BHu*e!N5r(tIXJsP8kkHvgQnkK z;LoY%c0tQB!(F1uJQraFEtAGdK0fD=Zkzh2t_VVj`c@aUd1ri7Gvt*rwFoPAc@S&E zdg8_Jlq@tyNjHPgalY&O)F>3OQ|_3f(h>l2h{m+k(_Ju|uH@S4!di|e%7>cgd8+=4 zjI7M8*CHw|8y3AlzQl^lPPpuMohI2ak2T}3ez?AuooV@CUD0)vm!eIrlqVYM0y2lY z1zer{@-toIhXWlqYWR~8yQoB`({<;Rv21+Zm$VLT+d}hV!V_Klm0xmVy2DIr2MOH^ zp4OthWo_zd%>6Fu`v*M7PE54w>=>*bnqTXez|}21$7?KfU7`UHkQbceUz@%Z5SPh( zf|1c?s;d{FU2)&wGjtkEWYEo4?Vd;u_CU>;tL^5+QK(f~;dr=m{U{Aj3jwwE3!GRq z$F!^t>%w%vBNRx8O))O@a~7`k--n$qj^O)$*-$by@_t2Wz_&HW{*@Uy#TY@Qn6z<6 zl4svmjF*uxvQ*COHRGd&VR7vwK$7|T{20gdieL1R%Z|)8$MRd0-L=KE8fE2Elq|C8 zo%yOJtr2+_EPaEqd8HcW?zYwESN~L7r5D~hLZxo$uo@H0Wq3ETe;(%m-GEFGx^HTR zHp|&GLrSk-%Cu!43@kQf+9m&4(>o(RqyWb~WetoKY~aneh!p0yATpfC6w`@ydruv@ zIjhr+Z2#6_F?VKjj3w{RRYob&FfF=7U&vtVx80!jDr|adJ7Of!mkHYmqu}X|yKZel z_M$tF@824GU3I%1GEUQtH1m2PWH2Dds+kVlwV5GQJGd!t|8O!gV5c1^OVz`cZa9Me zD{3^lL1;fjtU?%eb36r6d9Uz81=4cr^3G@JpjEuc%j>ZNryed0SQ4PgnNBP&e=hn+ z?SbFgG`|$Ahr&u9R>YFQ;%c;PG0nr~Bt74$ZViOq8}pjQJct(ouyK1+1JlPjW_U)a zy6-~`zPs8Vg!6BS>;D>d{v&bym$>#R?0gQ_e#giEjkx|xT>Fm|{8JLY+??3hvR93~ XyOn+%7f`N3b2T^T3uj5+eShz7v)7qy literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/layout/activity_main.xml b/android/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..b5ad138 --- /dev/null +++ b/android/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,12 @@ + + + + + diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..036d09b --- /dev/null +++ b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..036d09b --- /dev/null +++ b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..c023e50595074292c7361183a64de08cf9686c9c GIT binary patch literal 2786 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..2127973b2d318df7085734d236d0ec649a2b0292 GIT binary patch literal 3450 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d1e077104cd61e6a4c3707e87363b523077245a GIT binary patch literal 3981 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 nm0GElTB(&OnKI&V600000NkvXXu0mjff+~0a literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..df0f15880bee46332dfc6622583215194f948b0f GIT binary patch literal 5036 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..6cdf97c1196d48e9833487ff6de7c4cfc4e1232d GIT binary patch literal 6644 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..2960cbb6104b915c84760f889deed9bff2b3e17a GIT binary patch literal 9793 zcmdUV`#+Qa|G!gCjaEh@IaSOdZIn}5PD?GP&H0qfv2s2uqokQjcu9*K8WTAd#^exb zMh><1PL2^OdgYKq4K4a!Uf;js<2Ju+&(rmMobLDg<4Uu$v6K*(6X)aOlelo+0?)_C zZ?XF?Dhz((_1&_Ek55(ff`zF=-1ySuzd7=(hr(fh(=XlT_l}A?OZdmP;A^8qO6PK- z%S8RP%RafIE=Vsev9ybpDM#L=@kz|qom@=TcT&ojTYU7eqwShzb!%&N^}_3#_Nl?^ zkI3RGL3vKss*<)l9=bj}yUCxdB>I2;Gh}6_o6~pnd1uSP#pMkF`?1L%md^|&y$T47 z7^AM3>e9t|2~z3w)bEgYig(X=yMEShdhs$M3-Lmf<=)fo~dr#~g6?Sx}|xlCy-eQ4d(O_jy^2 zCtSPqyeKo;5W-IoG_kU~tHC-GxwNjZA10eJA&2s?s1H8Oa`hWszM6DggF@2)hnbrc zmOTGZgT=-Aov+0g2Ex_KGHHOGtdbto!hMNei{+do!89=M;p69Uetx3RL!z^0W#7Vi zL3_>J5jI+cz`dBmaDi^&F+b@Hpn0B#c2Fm1;5LmPixU?iK8YWG=TtTRi!c@V(o1w1cq{^X$ z$b1|H;P5GmN;D+8kv)WR$RMyyz@zZf))B4ACH+{AG{muF^b}dyM2P&B!G7vpA%Gb{ z-pABWWTE8cUWGw-Y?LHd^Ah=9-obJlA%5cl&ZwGn0$YHz_zV0YDCmcX2}cpK-~c@J zK>!52Y$n8qEY7*L*x1HzXXX9;Ga90T_?@hL0`R;@nYsM?^i2cFyUL81TeML4Tb%qs z2D?1wdr2~_NU!A#6RKo%vhshvFd{2#KZ}LsI78Cy8c+G>ZL1_3NWRh0mtZwPS;yI^ z!E4lJV_CJY;3*H~vFdy)1ZE8wi{%#(4H~O$O-@KT+ho-gqTP>=*D#%*%2T?M=BI3a zPQCGdKB_8c(L187$Ip6fojEb@`IU{fXL;-Xd4Wei$NJsVi&tx>S})#X>Za`pm-ozD z(gns)%nIVv${|)%L7{&6H%-!of|?t-@>5MzXfF;*#MB20_;u>8$gtYQU{st|zKOTx z+;INV|a5fZediODWH;H-D6;fFWRL+{q?5x|k&*9K@}IF`qhGe0Z+#;dPs z*N$ye5a%9RbH!M)B<9+fZ_L?xu~V+F1!EPlaAUq~v$E0gr7OMfo^V}#ue^CD2*ZrX zHgH{qS*-QPQj`y_QCNR3q^z{q4K2*!pGKLaPs;b6VU~K5N%e{pyJ_Ca6lt z!Vb=}2IeQ@*+y0gEvTu&-=B;;FdHXKxJzKm0qqo8Rqv{Y8IC1|pmST!Mu?dAsoBLm zx#90rQb7>BMEmqAq>o+ zJPNJu5ovpr^yIta%PL}N$0{LeV<=1(?s3@AtqZUmlrbHy%~oB1YQGzN;=pNe*;pFu z0ALh5RUT#hU7l6K7^(A=)wXT?Noiz5pOh$lH>-!3dud{T)XV=`)SqRAT^2Q;x^P6A zqSAc@Nv^_u>3XLM9F{=f(fjR0fbt1n&Yo`#yFVI`tL$K1?{cx6JD+imwAUIZHG>9 z#_a&i0H2i4sNPwB#Fh~DFicr;wNBTfg68tX`l(rXssW%)K-?z$Pqhs%+fNe>C#N<= zFCN57V5BMD%7BHMn@3Nbq`|sg{FkGoXuFi%D94+FY401h?3*A-H}2ermC>%c!z%Wgrz4drk!jd$b;!zOIhEqAV3oA>!zL`T>GK(qFY&u`LZxh+9@@gq!Z_V%KFsC9BLob>O&XYA@Z^31LGk&v7PZ)*g;5;6c@Y3A(; zLCm8u-%sQ7`sHv{XE_T++@GLv)c};0GobisT@kz_PN1*h8AkAf-%8rG5uMC;h1`uyHtu zDoaXzE36AWXg7E}95`ZLzn}!h5IXF7=FFlI&QpE(3e^)#^VdZQMcCaGqp|NdXA-SO zQD!0qP%Tv&EC`_O2xwm0124xJS3V`i>^HypO`WWQs7jE}dLi?R`*6E0sr8JQBz3R9 z(gWJ2X(Hv@0RY0ZWa@2Ms(r48uo|vrHxpx|!D%S6@e(~VAg9t95CflMpPz}x&DHHS z?n52$NSR3EQ!g}3{wUk>5=Lwx{Iq$c9%)=+Sw&>2a2p~fc}X7jp5pzx%B=pXakdVi z=?bx3bxb>3QvpjK4;TRpE0}hk5%ub?Sr4H#4b+-1@jkj%z{dV^hrb^+h(L>G`kLIe z`w~putHH7qvuQ*^lGbeQP7At1?U6g@alA!A5?{TtQaR4oC!w6N(%`5rT*-a-LWjBX z1j78%Z;oXswn4YvMj5iJ9| zI@hRUh4e649a?jILVSD3()Z%^cREMj-pq3#xu(w1**i__F-xc{@XV<=E=2@0l_tZa zv+4aSQT*gWib^PNP@AiDa^kp1js{s*i6M@(Dt*4}%JcYXtasXJlL7%8KM-VC=E=5= zd4Zq{ikL%^5{x<;lw_LTHfgeim^WNvZW{;@7}naC%4cnP9??!e0~_uV9C- zg>b*T%LeAFKXu5MC3;}l=IcglZE+d@BVSBvsvwb?tmE{h^+&VVdU59E5~3ua$%@>{ zIZnyZItDrzidCTlNm@34l546}1#7`+xx6G67wc%5)u&r-Kqr&{!t=Yd8%y+W48Iy; z;;)N4!>-q@aI4yeH9E%KNMn1*Y}TizaC@z51(6yoxcSZ}DZN;en%mFqrI=+X5Q8H6 zoq%X=*xi8fCkX5ydhhW*+)3Ub(m3yOT)8|;WKSzsq+QkS5G-u6~JTtQrV4R@ZprFyX^+wSHza z{nn>kMA(Ft1Byyjul^AN3Pa64tdEu!VsQ&n$4>=NLsj7&_5uWcVBfI3y|GeS$wh?f z28eXzEk3~gL;uk;g*k@WbiGF__SrNP>gw|fFK@m+tqx7UtR-g;3#3XxoQH=d9q!}q z{`j^1?NTb30W0>JA3(@7vRh-mKWt*lskwbGevLFWc=FW-x-n?2dt zz^U-dulJrCjqUI(Kpa+N%r=_70R{H9J{$DTYeE zs(Q6pppa(Mh%m~WzH<>ps=1o*b5b5Upusu-8}O%EJCZOI0$T}i+(34R3t3FS^Ur0! zcyl&MS4^Q3E|it@T7waelrJEzN6UmN%78v(H2ae?7(G3ij9vA-g{?0p`m@a@UWS$6 zPY$8iKej=8`Jt7U1I001v~3D}=dO32hcfV&`@sMXKbL)GZo`e0M{q5RtMli1+@Xb) z<=G!=@Qetl8SAXHYGk)>Xmu+qT!rVGtadjmle`z6^AYgsiGCgUyRm%_ozf0|Kf{Tr z=uxFNARZk5$nccSuYs-m=kU`?OUNbKu+n~H_ez>Nsjn$zHaEsj%ky63r39<`?`bl} zDYFkZUB9uH-?vpp6(f?BO`?<>K&GN{gR1rfeojf%S*B;-{F3gqfZ8T@A)TEn)GS#& ziSD$|BqS?O981OfRnUq48*?N+5+7&g&R9puYh=P&1X3`ZzbB~70JC~Fq*qFj5kRFQ z6^4;KExbC~1IdZ_$AF}viQ(=UKn5)VlQ~ckB{vKRk7Y@mXmt@*`kv!IVXW*uFt41C zMq2Lb0D~T>SvmF)y3$<9YkPIKV5(v6 z7kQb&z<8@VV&c(ti-D4j$tsAS2AIEwL$*r}ftc=8F}z#%#vXltysSb20q&WbiyI84 zUev%uEUmW`qQJC`7|P+Z5wHI!up1{_6LH@pm79r<)8`!}^-o z^N>vSauZ*8>!|9;6{@56E-Q?I(FYXZq~2#F5MLAuW~GeU&Z9)0j@E3qo8Pd!)p%; z7#S+rq>ICX8`(aYx2rRU#^T#(cwhI_XwuXT1NXj_ZMTbCbT(+atG&p0g*JV06gBK0UkS%1h|j zxhF3j(6~u1kp%Iw$w|Qbz!Y~Y?~4&eoHA?1OE8^9baA=S`awrcfN>h8Eq z?^gU^L13lX>IDVZ#bJ$mLDa}cfre3;rTB!--yZ{VC*~Xa?JUbg!}(~^kjRPoYSz*^ zr;xi<@iI^4PBdUlXJeZsBir$X&Lq#Bs~!h-0e`J`UI_J~nj6-xM&7>N;yKYNZI+jq zp+4M&1e4YquIwz79ca8NXU-X$FTF=+!(>7=$BxYluCgYc?s_CxXLgyv3CeZ^u_vq& z->!k=4W`es)&i)t4E8|-4HkV(#JQ!;2DgW#BXt}cYcz8rG6Mk^*$9D^|C#hN+?V{o z7WptLXU&KcK+QV;h_jYw?gMC`1{v(bHZbK(K_BvBuB;>QxqbvbXVdsvtFI5uOQ=tv zeT_aC(}#;Xx3`JwDng1L5BQHF@ci&ssMdwjlbU%%Z6XcRWwDns7BKVv&s8+XtOP%l zHUnXyym*jZx={WOUGTE*>V?ejy?-id>|yytZ8`g>pjCz#1hc!`XhVT3FNhz*FwpCH zS16;xMl0rw9-9wWSz6ar@d2TcE?f3EV>}=SzQ*|f>_KmQ-jFnR*5J%r)&ymVZbAus zK}4Te$@^rOrt7BF#MVO=HnVfSt>-wao5@=q^e+ga20M_-D6^-C>CKfvI=uWoH8)6U zAXvw_EvNa&=$mk7;P*s;I2@ay9^n8OXKmq(XB~bSVWiTV)i37-Q{RK64lGQQOOYuv z4~q0$ukZ%j`m{hFjwqUqUqxXG+*5I{!YYZ6Kuh(8LvygWXr9%6W>wk)A886r3vd{p zKO(u@ZoQw`4q7{okM^A#pQ$`KU!fV>H{+3M|I1=;-P3S@uuk(395r=z3JTwk`;wp2zT|?l#)PRLgU-F6GLwU zWt|-W@tCPZs~K%WZEx}gX9s`AzE-uGSA*VP`VOsWyzy}U?t@%2*nkEm7aaEJw#x@}vvCC^K7i_{ zpECV0P`2&)dQ3(%aN=OG0kdv0n!9t$0379@&N$PJYz7sP)xOrHb&MN`&nyO%vul~< zNdJidMI;FD`BCXK+u#Q9`&EEz7;Ckvvs%mS`S4`xa3wF#OANTcTigqxcvB@+L}KT# z6XkvKIv%UKX{TkVkB`Um96?u$h@H|l*x1T&_n!E8I4<(6X`%24p{Dq?c0*=0-uIPX9p}S-COVRQY({+<=d|;LQo)eOm>gyZH);r zv(|9N+J+nzfJV101VP#&HFPRp%ep`M# z1EVSdv(<8s0{fWna!c{2{9KUVPzVu>U&vRp0vnw>0vyubgw;`kXml4emZ3f z?bU_GkNZ+JSQFlUn}42|t_=O!tg=`=^7ewvoduYpTJmhQG~&SE@-tPOOVS!`i(OzxCE;O?r22ek_6$MU+rQvynpx$i+p@~7%iS(pN$z-ouEdu;j z1(f9_sy&4+zq-mz<$`Qay?i2|2##;1u7MGdnH+e)TzqN$JB%5CPJ5;W*e11m97j8n zR7A*&tDQ-|%~r_o+qYpSIA=@!;2qOH&K?%}`|HE&(Q7fsr))7G#1S!Vyfw3^x?B(n zva(KZc%qz_ZBl*~;S$BgRb6HftqTeL;hTBnc@K&c@i6p)WLfW@(Se}lMUjHqkU9p~ z3yA*hk30DhoeL(6!-5=D(q4qzZ~wnWx4jR;sIwmT)(1|KYKM5o4KkM^C?#@K&odHX3Sy!$$mH4AC;RI}S)Q|q{us?&klmK%>bHp}&#Y^%S65&Y z7{&O6b9H!!J0(LF1JY@?tM8#$?m7KjSB6ehE&hJxE+%ZeF7?btlX(&}zqkY7_ZheX z8PhflB9^X=;V?eH9fZuF$=@4dKozQR+k-{{!*+L4gcMtY$u7@@0Q#G%Ziz2w3>{FA z$r96^ntMcibP2*T7L2-lzKQ5`XSey$6G|Y>3{X=)xQWi})!c#)gVO$m%n(S+L;xne zIkyL9Pa$~7#x#1Lm%vc|L+?LTcdon1o`aV^rD@cQv*r!l0vH!FGxc0!z=C}tb9&et z2NG~6Qti|1jjL_Mr6W=4WZyE@IyPzOBXMT*@E1z&GaXIzWrS7O2vA*|jM~GD1k3EOXl< zv>!7}+VMYN`g-_K17j@8s)@brP*8LI4^&CO!UwME-J9C+GhPgkHgIZUJ0L->@k~8& zFcg?g3zcc!&cZDUNqwG2+a^b6Am%b;3HUuqM(HyGfc^lk=Dm?FWK4MfmmTeswf4Rv z)Xu)Mf_|q>IXT#RFP&So2y;;ovi`d4Qs3<9$Ma~=ns1?ewcLi2f-dYEODoGqJUDFm z5~+3Zf9SSM0@X)Pb}yZu7D@3ADRcQB8Wh(PvIG5IpXPbYf1H>4v{sa!W!xl#;jVX~y?10~OcpWxfs8mt$OVjzyipx|x!>y^C*r6i13cq`kw|G9&# zxHDkr1E_UUPFqY}=MARO05!Wh)0!uodO0fA4>68bqq7%3wM<4FWF9S=Il4K2LiM85 z@pvDgVONNd8J~~4V3Sp?BM*^QP)2s|7npkd%zITG19`s`Id)H;`?vP`&6&j?NQ>22 zWx$W8{^*a>60d0tO~=-I+Nt+9_I*V#T5jFhRoc0tvzM8M7Y*2Z@BvPFpD!cY*g1@;9;6ve z^ZuB~r}{sXf{DoBhT@CkaJ)Ya0l^WDyg?1Hn&p$1u;FbVP+SaK@I-fb&{)PBt|8cK zJfi#TP3Fr#-`YYNqx1ICmoy?`tEJlio}Ik>Oc%+`XW03Qy#LhFe1ypN018M`70I8c zjk1lkc8>#qx> zvHU>>CNF|J2zVyLf0GC}zt_4c#iwgMn-DUNq((b=ehWntu%()XBy|+KILiKZP+udQ z=La_y13NQO{N^LLFSQW$;?a8+V5*%!n1P+R`xuTK>AvD=)G&|XFk*oh`UoF0UGm((%Mv>wlnEz zafO_DKZSM`VqGd4ZY*5?UHH@)byTn2C-1o-J70Lnm6!jh0IkTAX)4{T^4+vUAD;Br zecJ}FL7#NrZYX2s0MK>@r1Kw&0|lA9LpR(s&95TzU;QHhyclCd9XaxB!0zMd_&%>r z5is4$ABY{9m}=@98V>-w+7{WhmFWJrQ^o*hXvj#H7qJ%DD0F zlAyi77DM_|$71-2+OcC9CEwE?1kb{&EO1d|)>IzN1M~u8A=E=_nXQ)t#c*d*$mNPE z{Kp6(b7{oz3;oeN1$T?!eJpL0AS1F)*5?lo1H((Koib(_KJfm#Kl*JtTx(&?EF5Uc zTNN~ESfy}J&Zgj;3Mu;UTNOyG(c2EMY-~8G~dM^3645O>B=6KeEQ<+L!iN%1tbDRK3dWTQ~3z@FME0R2^H54oHU$_u& zpKdvN-a@gEn1mYa`1GcT_zX2j+uYt}F#6v~gA3eN%Ae{wmTzr?Mlx~lQi4c|a*SF> zsi_}I+jj!O0#pFd$$L!}4^4dz9ac@HlvH|V2diDlDOgDqxoEE9pNqqpgNGENy%oDp z>qmCg1<_cR5H*Ro&Uh(=UQe2O2^etvxDlJcT665 zf73hwHqg;8KJjzzZ0La3DunmTMP{SZF@VOsC8Eq;#lc)1hAp@vV-?cZMx&Xo`j zuPN4vlE6%f!FH!H&q;JN|JUZVIeGbcO7~5f0~1SE3XC~F6U9pME{`gHGxQ&J2G+A7-qze9UP%f&tx zt#U=BWl)qMU`S*X5(p#=2@paULlOdnOlO|G% z8E87|0fzj4AZZgwn?~A8q{xHtz`#49{Id@S5tm8Kgswla{GcOLt#M; z7(oFP1`yF`^AamWKqL|n8F_z90j>!7i~uV}C{YQhlcX&o?LOrV&|#IF2TzO6rGoYa z(hdVCZf{Tocw+Lw0AmU)T1^0m{H8!8e~!Et;2{8vF+kCCQ-bL*y@p}xo1|mJodeE9 z(*8-BS5mh`qqsZ)0-i{O-uug-s_b#RIAsb6iiC0^U`aY*a0NIz)@1wzmv8} zdHa&VjJQ00AwVd?Dd3m|kz{!Q9)HltcQVVQyewSfclG+A<1nUk;@ZINkK98#I9nx# ziM|kGO>V!KD)7YVED4A_gi6s&es@d*NVw*ERa&n@A0+{gQdDNbtV7p8-zc<=7>NiX zz!MCm4m?IIk=vt7TV`5BC6qvInOc3+acEc_JSUy_2lD7*Js1o{1n3+92hEjY%cBV* ze<%(jg|CutqlNJHx=p5II3H*u2@g!Sd8M`oxANpGX8yn*)e}sGgipU4xgW<GR>F?NC`Am1iSsoY`U;aZ`N zD?SCmo)cg^O8#zASe=+AcvQ3n5CKpr7%<%i%JL`#vr-c|{M#{wHEIflLXT+g z{K3%tL{>-XZE0y9{13oNwIu>T+&Xa{uPrwV1Emihr6qEC{3+8!O4hLWJ4pkR_6I80|CF zYYap+RaI5vE^81m6G|@TR`UE370Y40PJz|ARPQxJTL~?Zi!X>0WYtYrB7Pv!usoU| zA{M{y^y$;LUzT*Hpe@YVIhPDP5o&o5Bs4=4dLZHvC*ql&;6-O~%cBpT79jHZd^Lv; zAHKZkjJc6bO-1pJGKT8H4bc#!|JR$wNjR&34EWXjZ+{-_!Zp#u`usp3m6p2K{ z%F1(DWNbRA#;V;>SDMEc_zSEDO-+bagM^Z>PBEQH=?QPp@pw|RB{CZI4%z&@aHPJ$ zEml`oFTfbJJ1S!;p8(?_$pZ*Q5Fw6fnQAlhdE^cZ+NP6Wk~mR3&f^QFEG5!xiG;-9 zv3X8%C?OzaJv<(dc>MVBDecNLV`wHki$GyL70p8PN(P~|U=D`FV>cl8Ogj|)&ds z77j;)pXN1&*>cdO~91S-;re;YwSY^NBE4_4V~)QBl#iF^1c>Z|~Ap)YXZY z#XWj+dX#Y<3_8SfDzoBxZR4q^`1F>jxa5!^2EuI*9zQvUkB>&hAFqpwD~=Elgq-#6 z7?lyPY(E*p^psN>qb_n1v-PMe5|8sJW)fNqq$Q#=Gk0q+5*4?djfzigii%TnqT)|; zqvEnsLL0%h0}lYajDY4R>!ae2)h~YMv9t%LPEsu(m zvt;nF221o=nf$tg5pJoP$b}0R8aHg%a3cj#r&MX5PUK|Y*P^aO(@>R`h}YB$w*fCI zLco!8Ix7Brb5wkS0A^aQ0z@0-|9x=SI(1m3t>wh>JVLm^$v(GvR#xeBFd#NQkP1b38p^AkO3CNN0)C9wBlUZ?7blXDb29 z7cy8{fr!%C3Zg?iq10F&famcIGI&^10tgMX1`z34B0Jzw3hLV0+9(my&I@X4;yMwx zeJx@YfnX$}we-deZ@WBvGTwS|qOF9se!VR!PX9t~i9j@iytb4Ktdn#GZL^Nh){nDf zEA!CW#2~_ZKxb-A#Onrx6$%D}VtILa4q`)&(HOHnjg5`>QR<4ZnS}B5M8M)qLXUkq z6Ifvb3ZgK%Yd2L8Z;OEEr<>$v1VqzwWe|Bo4$)RA5z54}JiJZ@M=KDmk(*i*L0B`2 zo3NhK!SG$7r)WVr?1qjJ79&%%E~r7 zVuhIXsjI7-pbQ!+XA;^05Cc&YED?teDLLmC=j;%~CpXIgY5}4znn5%@i6(-ujtG3f zvzpM>qr~z&k|hJkD2UXSsIbD3#RHNSI)DDWn46n>A9pLnJg;y#yjW>{Sb9Q=`GC#> zd=j2k?=ChCwTV#K7Zrl|D`J5(L1d85@V{jc)|CxDPq`s5-aBJTSYJGrWH5Ad0V1r=HG+Q?dq9f@p>Yh^8kI z*2@Wqf?;dmSwk$()a+*P!~tXiM30i!mK~NgloJ|A85cTx_H5Jp@4r6^W4>zDs?NNk z&Yiqo@9!k=5bKjD&V$!{9Oz7n6PaDBu8IfY^BYe`ZCfHnXJ(?q80=4v5$!@;^~vky z_T%*`Ag$8?(Ylr(!fR`eIp>8b4FHChI7wnbLBUHH^L_jFrSr&np>-jy`#zLzM@_;+ zS#>sl*B@|Z{*K->RFBRyRCGM^#;ky7ngT@24boYFSihCzz0)_!x@YowZ4hZ%A%!JE zoCxtE2jf7kXbjU|j~zR9h>Ur68l6tFt$k{1YbQxF{3T$7V@A*{$As)!q9CQSB(#+z zmV~%Y7NN6W8lba8AOf916D5ihVX)VqkZJ4D4Ya92l%)+KC6FMP0Um$YSS*bbh$Jz6 z;lc$mJ3IS+jJ+)}O-)#5LSG9II7F#AbHP17$2rY{tvSq~GgzWua}d^gX%7tcC&X2s zk}Xr$V;hWtNDU;!iI5{RlM8ckqBGDKroI*x6}^kGw@hP5NUdQq0ZzytTc$BaUnfsi+!qW<72qw4GqdxclXZ~CMn)f&DC?9lO_b0( z%WY13NFLt_IWhZ_Y#BgG5It%TM0o9!qseK@X%MlPP*zsf|FTSD^g~_h8k+tui~ZP9 z_&n&$LptbCjbCiCxz-$mzUi!e?+j^=j|hnVRVqIRb)mHakpVh`#r^va77+~eFim4D?{)Ct!5fh?rSui!adB4T zMBA#P;@xzFVg;XT#EHxX8$n%UCMIUrc|)A;I2RRvN5J!&opJ++W)l$QRtS*a~GklKNLj8-{#3p2_jgctyT8t?*K%wL{Hn)L{l{Yqy&-DGXrg{ zDCKW?tO{#3&zwz%fewN@ziZd7{|_t})dP;*f!e?m(H+WI{K z&&>R00BM0JyCP~ki;vGk6B&vVzIMJ>P z#M{~%6`$Efn+Aw}qXN-f^1f|V_AQZ=_Bg2uHg2+Mi70^ZzmJbPPg`a{q_;g4w$lRp zR99C=KKS5+ZvhkUz4uZ&FadEgX54j7r6T$ok0-jk!G|$?V7({AI zG>g)iT}{L*?V$wG^c*=ymTJqBh|Ut#8=%?w7=-ld)vKQZCJYH_3ZSlab#>3Pxj(76 zFwC+$dNCmWv4~L8ZVDg^Ac7{^#(~cC(jHb^e8h?Vc_i8{R>88O7g%ndC=~<%!FDt? zHHn)yZ+;D!Fa#j_rfx2m>uo0mv{qIfYt=tJMO^khGKgkd1QF3v#=fNGt6zV^jNC?O}SK4_YqIfOjT@LLsrRun?2&ds1v9KED0!Z{tlp1A)L^ z2xuoMOm9nVFV;>GmwK*A5dB7n&O#2QJFD3`UL?4Qcv_#ei zZd#X7qek@&hr?w~1IRoL1)ieu|#6->cB9SVmVnE5Jp(-b6t>;8%n=9=LYgn?)RMsx+DWo`kQaQGlG0kol^kPqAlGE!^#G7=l`z2 zrm&`TX7|nyB};pJVSKd*=*&sa%*ggsNkAk4==AB+4bMFD%x%Di5dd}l@WT&pCST@p zB8X_ECL!nyAo~4Y1&DUF1kp@`nrI`(w1=*+{=!(WaXO{5VAwg@GFvWBNoOpWSW!{o z{nMZRbf;kek;k!aZ!kbtU&Of5mc`v`e3Z_fY?%s;sOGzVgZ|_W&CS0YpR9@b|})FAB+JQ$jIbaUQ#sIHa{!r?ly8R$HY#c&zrI zD_|o6FDq| zGaF?Wp9$+(7G3;VdCsOiOvj0G_!PO~Q4U$5Rb$XkXV0Du8v+nDPu-R-T{?~c$WPt) znAOUtGHr#VyMgCgZZD-XyAf-r(;ij|I;dBBSgISzZ*Q_#AQ%zL%1;L7&6@`b>-LLZ z{31OmfZl!g-CM~QxS1Dbb+;H^^$_(mh%!#3Wr=1Q^v*W(N_(8-6Ku3nn_6pdiB*;ZzLbSq;%uWfGD1xaCqZcX%%QiVmfO9qI_*SGnbn4Wp`f1bt&+SP8#AYHs`Q($=heDxNlgZc=fJ7h?*sjH%)NFmt z(jLESM`@3ZXY5Z(n~|G5?ZIr zObn#hNI0!EjhHCB>6(UyhINUibEqwm)BB_w4K_+?j|6l!(?p!esns4>AXLT-TX-hRDQCixwapOjmy}O!XBjL)7v^jI;U@2?A^78T*l1*u4 zBJNVX$0;ws+V%lVR2SHzvss+tL`l;g28A^?h`}yH*s3Z;0E%K)pHDvdJ0*))sqc-lh;L{D#(H;Rc{v=H6WJR&#=pcst-1)qEFx$grLGiJ=_o)kdT z&+m2bz4s0y0_u#~69Z7Bc_Ut}8EkC>B3Pb{1U&PKWa^qr+Z+uLS&dkyEbXBZ*4Q9s zyGD>x+S1(Z9Eg|;UtC;VJ#O4M#DIF;dFP$!$pD0-b4Er+FY=ht*x0z40!T0#=Sel4 zNqc~ui;BN5B;eUgn;wXETUaub=TO?iz-kX{5QANYlJ5a4IO&05Y4g_x4<6i;?X#Nf z=rnoqX&PqseK7A6LfQA=buB zEKp1s0#Mom4?F-N-EZ#Pxpzb&k$S3mqE=4C?Er`vZ9PZ9qilvjRA4_k(^V99f{ zC4%MITw!NRbAek9thBVWY1*`D-vkzD5YbSTvNVXL{{8#+CC`VPKVQ28)D@Ao25Y;W zmX+YiC3pWH_Y-%$NNz0vlmtY~JH!9%P6gqa_Q*XgNE^g_SrygIeI@-KLT60`L}B}u zC<^_vdGj`uxVr&ZFe;$qLVDuFiG9f9pndy_=VNA~o%Lb7=uEOaH3U2dWb4BKWEMn- z6Cs1YI#Jpq-{5>A4rvcT+V(pr7FYYFLZbHSYKLvbiC6&f!i8FK$%ji9!Up1Yk+49p{;rQW$>_;5JZKoL4?0SfA~JO+Jj5l z!^Ub4mQ@#`e4LLUrL%|y5F!2(3Jc=FlB2?lFTOYx7$EdzSU|^VY}BYx&_P#|mPyoj z36E8(RzZZp{(=bR|2#-Mu6=TggQ%z_h?GE5TcQ_=WUnnG=&$y$S{1}f+CytTPlW9? z!U0507KAnVT(rK?L)`bB$H>@YH|MJ<7EBczmo`|LG-=W`&_PFz99hU~nX{E5o7*XE zJ-?qe4G=w-gwF6hr!uNpl#{LYn7haR;zcuQ551+`yo$3!ST~sv)-vb<(c0Qe;<9DS zmSF7fx#u2KtM6hKKuR5S-J5T|`2Z2oAzlj&jSA}kwLC8#kg03l{+1wmE`cTby#h#x z6G1zLgv43=tTTL;Q5#w9k!;alv$eLDqz)lYWFYM!d2vlX)Dy!}<}mTVAH&#N(LZq= zgc)dk`t-RLGYN9%iSdqGmKY{>$@Z@QLPm;egx{ zfk+J`1|U4&Ty0L5s8@TKO2Dep9-B1cM2RYr=y_<#s@d9!6S2fBridVBjNsur@4Pb~ zV?JTR1OO=A3Vp?CY|NN3P~g`QB|g5Xsp&lLf(vR(6c^0J&EQE2qW!Hc5iAe$wyb!3 zSrz6NFKW?QPKB)F1RHah}$Fgb|kY0w!2cdpIMd3?18hluso zN$Wbb_>!jLp&LWXN1IhkKnTcA)l63@J^UAq>O=SR@7?qQd{ zT8L?)g&?MfzWVB`KXSX>5uPr+GPnrWJ(p^r79dJOXFO=j&T0=W5MhHDWttA zR;|j#*wQg(lgGFKh>7X0Lx&E96}sWKzy0k4b#-+IWZQA{-chtMw|$*2U56wK(e$4zysP!Hj@xk=H{@LF1~e^ z-i@deiDsS`w)kGUbSXS9;wz29rYgO7iDylho+9*yyU0;lS$U4u(u+DZwF8z2bf(rs z_#45-P#dg-g{E11T4)s~!Ui$eWyp9HupqZR-!-;tiVJ0(th}^rIX^%D!uavyQ9SB~ z!Gi}6;NiL_bm@Umiqw%SSFU^k>RtBgoz2GQD(DQ4UsSj4#w92MwT^&@3F|-Xk-=kz zN`)xDdICy1lPdmWa+zCuav7bn8a;XPq_|+gg1=xaowhzLv=CDKJ$m%Go;==MQc|*$ zQdz{w`9J|W9|)EQkAXJc^@ag^)k#5ou}Iz=&xwNTRyOgImYeG&P$_jqaO1CEzrK)+ z;VpD5uXaNF=z3(CnVEwSGx+(>fBqj;RaJhf?xRl5NJK0J!A6%i)aKw}t-%u%OE1_@ zGjP~xS=MO5P<$sIz3HlWEG#SxOp%522&X)+L{5pfdyo8(lt0I3rG^-W{7wS3Q3GxcK+K z|NU6mu9Dg_6#LQ)-}e*OBP1pckNckkYUN)Ae|jMu6R1|Al}h<|Szf=Fv= zH)tck0Yp~fL~>T$*FrD@M6BqAGT*g&_3Au~86CU+bSzV1eOd|X0RslW{EZwtcI-W6 zWo6ZvPa@alR--(GXe zEw}s|#*B>J;8Y0bWP-XMqq3J@e)&n_+D9qPM4bXpD+`xG5HZ@)8(ds_D(Ot7Er2JI zDD4pq5LzoPE{@KbGw0VBE24W~efp(BI47erB;BqZI&|nLn8oGGm;d$Tsk2yK60?&l zlfYwOc?$1!XJ%;2%tpf2EKy=QGqU=EX4+#1iVukk7yj+<7$Z7X*D4aGX;-z;5vMXt zKXtgO#hUA%bFa;_|y<77K6_yCsU`G=rN_((rsCt%1se39a zD#VXI`e;4IhK|v7ZAo2vRMw|w&z^(nQjoEPYq!_c)kzm%#qyY4)8wQj@>-13;2L-c zYjvEcnYM(a;6Z_?RjXFzlQBV^=No(U=z&yJpSGkfEi2TChQO~T$1rd#Y2$b8+O;16 zD+I2LSQDePm8|GCPfKLClrC>N3mBs)ij!p&DDx@McP&E z^VEnDBPL-i=$Q0x54tCr9zsNO02OMtOq@9JJ_4fC%o6Eq9)5+AWDo^ySt6e4h4^AY z8*~<=S#^kby#ilK@Z{#^p1td?yZ#+xK*j>HVgMbRF6|LKEoLuLfi{qNW&lxsetx-@ zCgKgAmUJeANU-8&THKCvMrYWk2ShP!PqO0#B=o?j|e|BDWr|a|P2`oXDsp(u?y*`;ka-B6({{ z^eNVKtzNylWccvm-=yHVk$POcQ<IuQGi zMH9K9JS~wC5b>t1MCSxh&@Dwxr6<&r(hwv>oaglE)8fjND|eDU{vYUT+UFT`4AR@1 zXg2DZb)^?DXuyC0xS(6f1&&{_@{>;w9X=|C!(qu9IbZXbf+&Ho<|UZTxcG@C#_Odg z)RYAf?mti>E?KfCDS%j(-77ytFBj(J`NtgA1g_P`Sag+3w?^drG1=nxr0XwMBw3p-Me=m-oJnU zG35EU*|TT=EH5vw5>ac+ki%31C#{jz=4?*v^k*kdlqfyH=3Jq#pd~kL+Eo4Y(@*~j z;6a~~z8ygYbMN*PDCDV$dQo@shCzb{0YqaFr&zOQ%~s4&!BQbTSD(Kn3byI?R9bN& z09h|R!CZ7amX(!Z3G$bjnVH{0A6|d`^|zrPlMGMEz;a`C090XhVhDre=jVIhc;k(Q z=ri;ky%DdcecJO%1dmp*5z$aoKO5YqPoJBvx#pU&FvAZ$^w9s#%F4_1FJv=gyr~aQA6VA}MafBh8_tEr&O(HN4zdqAeEDr{O+RfU32=U#sK`TV=z{q92=R%a0Hs~%Un-Z5*9 zy3yDLJc*&*x^=thy6dhR2X`NxICbjO$5*agxseEMAIv&*0feOydh_~|msUxoC6XqC zx%{z6L|Wk|tq?tT?i^w|zGcgn_<~WQd17XYZS&evn*oN=6V3@~iQ2j*v9hXKJb3V+ z59j{pKmYkJ0|ySA#4HZ35!XtAGl=#MT_3c$;l}xE-nthd%Jk4UIGF!PH{ldRhiIEF{Ymc&4{ltOQie``khfFU?`X+ zOLMleO59aY7|71vSb}qX_~C~i$GOvZjzm?|;$+fm?N6`0o5DTs01pQsNfrsZfC$U6 z#4`c4N%V$H^y7~|{=|ZXe|!7mRiEzKy?ggX#FQ{E7*q$Xp*Yw;3kp#lWgs9{D~e3F z#}|nIPx(6CKSZG7H_E;gU;tfXuU?b?*S{`&o9MWol5@O^o-4en+i?w4 z<1mZEfYZGLIQ)Usop$aube;=@&;KN$I~N8Pln0Loz`}w%TK7>2Fv)sBfFtAG{J)s=UM!%*XR$3d1n{X-r?BqI zh2Ow$;Wy{ZnKNt5m@(g{mImiE9_NU2#W~~L=`~zOuc^c0qzFh|Y1qCm^-R7-b3r2+ zm=u;N4k*&T@tyB{=SQ<=&z?Dd{`}XMELpO2#flZ#>({R@*t&IV>CT-y&lD6CR1-J4 zmVlxD(4j+(hYlTX+_QII{qBOI+P!=CR_EpAo!+)>Tj_=k8wx)D_~UGR$Lp`ZJ|EwS z@9xs2%RThB?x4RdSsDdsM$&Wr8a?-Z^jf-h04KFT>P$TnW|jIWz=Yh;a6%2Ei734d zgGU~jZc>Bl>(oNrg~1;(WXOHQYTQ3z!h|1Anl$M_G&~SeU1yfHNc)Oa4(}7f|4xtud7#(bA zk&zgDSPTGxwp(etg@R)=1;|MHnc?(1uBYEQi2g=@`kQ^|Idp*LG6hp-I%w%soc5qG zmEKf8F<@OwsbwG)v>6l(%9cT28%W=KtpX^0>38;`ztN5UW)~Gbb%5qF2b2<23|L+1 zfOn^Z--B8Wt;SyOPCwIC0Td-zIso$(0hJnDom4EieCzHDrL)0!XDtSdd`n5O^#-%xwSq_}C)t@WLB>Tca{I&q74)0g)Bl1f^e5ah?aW7!5 zDEa4&&;aY5n$NrBD(9c(eAkXHYCcu+RJ<3I??aZv%tL%*Zt%EO3SH0cH5=}B$fJs4 zOt@!!1Eamd%1gg;k8$*mWY2pJzlYD}b*Z94ysIkjjrs3|eBJSp8vf?e{Ao0B`2+oz znf)dIlcj(YzZ$cW1m%3ppPcs-k(qDJJZ}6B_GeVGE!yZZrgduSu5ZjIn*B3o^|m_U zQlgx&=x#R6xPjajnzbwwL&~qQaG2bYj6SFF|E`F=kvL5U&g$DM+S?nZ4~96a1bu+R zA4kKGH+N4$=MA{hmGU!P*-P%Ibr}{N-Kp^SdqnXXKAb`Ba>j1uVc!4Q7}^`$@^F6U zt%Hy#Q@FBJm!EJ7?B%U-o$Miz*Ty+(R)#2O`E^%Xv+U2G^r-wV2X2a=Q2tA@W0N=_sEjJbM%~8DL zoeYI``|@q?jxak&BX6;fL&Jt2ph}&>i~vbLSAg zMt;2T6fU4~ggC>^TO-cRR2?j9A7*FE0psPClmPp?lHWtY`dlhdt!wD`YKBk7XNvF* zEsw4tGSFG>i`~KoaOb%afloA=f|9ZT@@&e2`0AK!a7R!72gT-;Z4Z2FLqiDZCrG{Q z?dwj)EpJ!&&S~#fRND|cI1Y{IwevM00y6ald5$N$d3!dCTx! z&r8iXy|}Cjs)R!OW1p0G9`BZh(t}QfVHoG9gI=EJ{ev_B#dQ>jXm|1`*aW^4lPtaLfDF!zV{bI!XO#!ugS(0k%+R@9je_~bD#U-UN z&9HmA3jU2Yri&yv8+r{67b9?#Tw$aFtcNu4LxNtlL#{opjd3gZlcRb1q?}@rsXCmm zBNqwn*O(0U`4lJMK$HF8sLpFodJmXnUZGZ<1CQvKl?~p zQ9w5<>tV}|0TA&wt>BE>)pL8cp~s0F=SG7=VobvZ>4811jq#*A9X2pVZ$Iri9>FGa zliDC{eOB5!BWMy=!flbor>E?eD()kb(%<}~{2P|FIaNPzf2 z4eqEjnt~ywuEIv(Dol{c5H`%+tu5WLJ&5v9gbo0gk!S2m7u8fq&YCR|Sdi@@e&D_6 zLyufP^b_5a(mp*#ev#!DoJK&tri0qD1>(V==N!-IKKPee`=SIVC zRvUSn^wZVD%^3<@etv!@pb>@gx+6A9U$>#aPD-`WaMaet>7FIrL-b4h z3g#nDQ{X=2N1XWmQx~AXVMW*E*m$YA9%%WU1&Ta=+B%kDHMp02Ceh^Nn5#0MK=jo} z`QfI3h_|Vys&z01Ue$mSkq%vhRcV$|1-sSU7ovXJntHxtT?H7v##U!XQE%+9DWJ;H zAKZdBMQpyJZBolKk8R6N>s@t21o~?u8P|JA=(3d`#J5((pR*8UJQI)(b^I2sD32YL z4g|t8nk4&5S7sW)j8|{S327dqNobW*v=MJBa4i)~DJ&6``r5wQ-0xEc8uI@P#^^xR$U+RC8($Uenj@uZHEzjT>-taAW?3pU-B?yZ|J+O7Pg5WD!A zMorX0y7zE`b(Lr+BOk5$VL7Dj_9e06;+cyuv_8#hWf`+B&yDEknHGF)kjLX7 zOa+EtR@Vvd+BPI4L}ti9=sm?OS{P`4WM3M{??wI$GQF&(gxFpxohy3(jcMF2O^ZQvr2#Ei7aNjXcF~{>g-F38yBUfmf;ML(j0Vs>Oq_k1TpsSjS{u3 zWG|oBE+v)}8d*SSIaePurkM$Rp#PCaepL~A!{F6Io;-850Pc^af#*fVI<2piRCtBW z7S8S-Nhd`bg1QKmHrh48M(!VSVsP|8K!Kf^pTD+ak>9s*$b>{wm!tU)NtDsA{qk9L zmxvn|9^;e1aKu;+E~AYMFWHZl7+m-RZzaPQp%TYPq6Mny4q?MgmlOF_Kz%0}zzNOV8tqSdgy~$U0zUFG z2R<=_KzuF_pWo|kKEK|ONp(5B-h{4y9N=F7v_$&!qBO}>`U2M=s_|kAwe5sl#82aL3##CN;L`T$E zx)G{j=r;cXKke~RQXCM?en`Uk;nnCa+n10$vBboh-R))j@(rk68+ z@OHF4I*XK1sfvA4JDN8xICakkx2dshIsg!MN$#QP_ERj0gHqL~$V6RP(_$jcDe2rj z7=-`wINA)HzmbwHHqQ{r#}W`OuA?ASMzc7T2F{zXZMy-pyvzT3214#T0ovQG;@5vVZ zVCApv7k1EKwYO$IYcNzt=#G}|nR5`?a0eye-^)UuRmi2r4}yZ)^n5c)X5U5adm^;I zvlodaFSG2e@dlbex2G645izmatw=I_^xd;LfAW)V@lpkJJQ+C5np8-RbbfuFPC>YR z#@b7I@{CyqeK;ON2^s1NO6m~rPFZbyUZJ>PH4n7Wf-2=8tPU(P+ut`I>j1Nnk-4K} zMpdl0J4G1qu!&&jB8jEf_xK_9Yw#YOHk8jPM079uNF;Qe0v8|yxfYJEoLXM6jW6J_ zM;lwCfV;+yr^L!yO2Fsyv07K#4Ju|Z_PjGn>y^r{`Y+jrADIL+zKM4W%R|=sxaBW? zq9WJ;8HlYd)0_Y)Y zY(F}vcG5u#mjM(S%%Luj@MhZMIxj?Egpx* zxt*$Z+Z+~b*YNkgCRefHiP0$1eR6_&_oPT)?CC+SBV1O!%;dMfYl|YNK<@3-a%>8asGau0!o9|jK2GceD+V6!a4_cv;3OrZ&`R7(=YXR{|uoZf$#au2PQRf372cnXn}TAeI#{WgC-U(X6SQI58C2(NGv*H-d~E9 zPvaWc&J(M>n2-FD1VK5+-v#Y*iS}CEXv{s`+=ieacrF;u?l9(%qOtUieD{^6I3RI5 zHK>TnLxg0m%n}wq$s@J7#$1@(f^x9b8}+5$WR}-y`5^ zL2l}3c$N>BT{-I-Rv+dCtVDv}z{}=JQx%Gjytll8#h68BdLS$u+}p{W2owKO)-*CC z0F{ipS{&QT97=t$`2rtfxtypIAhzD}AR zL)^490Ze(UHowRg6Bm%`73%P61`X*r*GrI8+yVL&653R2EHJ6yubDW=O^av^C4Nc* z!x$quz+LUL8g4sgei zIzLs>KK9@H+L=E|X-mr9`l1*z^}Ko>F@6t z%D?ZC9KM_(1^zP{mLSzUcI5nq02RO=@lnV@q>mFm`^|%{Aq>w&MS|56F>jt|XFN<; zpvKoqL;(Ql-_l(uTDnyzBF3Gkt4A!ko*``LC%r0V4~v5Qs<}-A|I|FXpDg6Ov*2F} z$i>Ng<`@6~M)5z~owj9!XJ((!^%-RNkDdq>c)D=z7tl^G(vNR4AyP7Qa;owXhB*D6 zfASZkL$jmHA&(|XtTcGP`gfW@JoVLNGeNa8w?u-u1_lw_0qUe-__nURXx9$a>)N4W z_@H14>pLOdI24!IC~IAAUv=KDMEAnplynsrD|k| zvl$T@3q5F*>#hR&$SKBgiaptp^&w#fLum4~Z%1r=l;}Rj@iMRV`S^&M&agkbufi?^ zg2bkG?i|3{*;nM)zi4Zwn{BTtCEi_}!DuEfu#!(t8Ms6@KEJgd+ot1t&lnMTe)vFu zXv1h_^VENPI72MeX`iN2kwbo(TKsn*9rYW&q&3p5+YL8|zT6lO>{Jo45Kg_BHrv#3HTUs%h}48;)e1kC?1;YQ_byqP)0 zIo6%-XX)cra3Bm=_Zt4b%OIy{AxZtN#;P}*;Fxk8U7z7Z4aqPY{L@h`7GbB#*CBWO zJ{XI^A$2->SrUJDAfpxkCOA>d)%K}4gy|+Jf;KrAOl??qg+~a8jf!`XbzxarTKwNM z?n%J_CV=+V{Yr&4^O!}SDb(df4%Umy6w22j&?7l zDyJ|fE?MX%&hDFLR5chB9|=QVa*#0rX(;VwmP3PNy3gF^YwHNvuAy!+XtxD`y*du2 zUvr+}uLi!_yB`RL%%S{bWXRxD*vNibf02Yzv9%kOR&(&y-@7y{5Vsulyce)FZQrVt zqItF4*8d{LDcMmE-JhVoyCEtzQsS?#%w3Zn7K2uNAPCQRHXDBRZptal77;U(vIfK5 zM2wPn%}Niz&rFL4yc1htz@g5^zDT}$sfWyN-Xv4^`!HjnN`H=l2(tLga=WW_$s&cm z5>b1gbAUwQnG63e;7$<|Gkq3BXA!r%Phz%WY+ z^WU9#UO)-$)@>hnT^nYiNQQEIB6FqI?lIW2AX+Ja6k~^C0k6BK{3G3zjiOU9{3!Dw zO+i{x9ay$)$u&GnLtT|LQNYGMOQvfA)1D&UME*5-S2pjM>vNYk7)}9-lS}_Mi@xUa z0t^Y7!eE(^mnBMCg`uTa?siy*kUbVF_4hBPQhzST?#_4g$K%L@$LePR&~|_%8pi^q zejRM98g**>trKz9Z9}B-7qrjjpg_X!lF!>W5$vLn9T5 zPm@|7)EJ3UNIfR~AHzfB?RuHmB0nMIuQ|)>07=y+?p8cws&hw1%HMA>ao+Z$2-%_E zF%!4-SBdd(S3y>Xmx@#7uPqevXl`vqR0(vT%OI$c%UQRS5K95FMcCIAYG6VKu>G2J zy#kePc90Mr>J-k_xZ=VOX%OGmNlDy6$QmY&|C}P!!|zM9dOa=Jzxf~h3HK3%4yt+< zhw1x<2{FixH?d(2e88qEn%`j!TbAwi+9m#YO%@JT_H#{7__tnrL7GU2^wAk|8DUbHt1 z9tj8TpjoQ_QaHR?-(Y0mZ25V5@D05EB6ZB-1pd+N!#9~ulmO8#v?G-x^T@nl9fW7Y zq0*q81&JZ=onQU^CZ}v!Jaq~?OSacD?taM+!7gV3yuFB|d*!m1_^ccdG`3AZ9s*Z9 zY5ZJBc%|7WR9`JzZD{9`ln1vPCFQIcRm7~Z)Fg>fzZkboAl>YOo!-wv0G))#jn>_NhxE#Az3Y1h~G1horrQ z;DUmbH1mVIV>N0iupH75FPG&H9C|Oi}-bKhji>p(T zPl2k{M_ma|Xz)Da4kdO582<4i?Kd5Nz{*(Y(nr2 zj0wyKdl_O0F@Pycogu+5VIfZ}(7@f3tj)ymFs#D(UMv}*Xn<9-;$8ERH znR3W~&^5aI%g;@^1!?dl0r#1r+kTPwAGg#RPMGo!YqS&^Lt{X8^RHgjb+9$}PUCSu zVVT>befOnuKbVj~p5KAC3Do~!YAqCyVC#ulg_YH)+iMzdU);`c`sZ=wk3?)@d2bb4 zNpxNrX%)qnSQ*ZdJ_m)n;#PwP-#0Zi1upkXbn+KINac;Os`wCcC2Hg0LPXN4Yl8!na2q`x8g(v~aZ<~Q`9GyJ}+$~k#k{;_+<=#E6>z}G>9XpM`aZLKM|vsryq zKva?{!csHp?&Gdec5W6pA#p*kdDv{|pr1i9k95^?ZDx@?Qb4n6i>(Dq={r3FqF}~Ihv+!xuJ$(-9#!##IpAZ`%5^lPg1ma(>}boLVyAY1MY*EZZ@`ZEHGB)_IQz0+j3VE z(#1IGpK~I`NfCI#^W7)ay5J}Ys?k6U4uRi|hl}nyaMZXY%P=W< z4}Z&Ot3EFMzH$-|CnaUA2b+Z5T+$g9vqUfY#b623zkEJr+dd153BsV_O}g(JdZDw` zQ6mJ$>_MT6k4d}fn0Odo6*f7R?V9DP_i`kO4#|)%R#*vXRLZ9=dHhM>_UrH@xLc3s zlfAz%#=H{&+E1!3_d;Igq@G-XjovxJ;8o4$ z&H5rsK?$~wKdPF?zv1@w6GamauU%EV=SD7JP{#kD@_`DHP%7v1r7G?m+CA=|H#EX?=KU;*e_`#*XXZpwHTa+eSC}Knx{?eb z*c5AYxjQ8hpQ4OjNOTvX;`h4yO|grLw%TL<_V5_ZIC(mtGW^$L4!lJfFSE0;_G+%X z#^9OFno%lE<*5>QGPzd5@X9&=5d`q!P0t+7pAqj!^q7o<`h{3QM;I^P(s=7@_T6&r zW!>P1b~mFpSb)2JYxMK;c5AQ=9is#wO3UTqg;>)T1NQ*BOvd^BizQm!?y)qdNletT ziOm!YC}O`|A-I-OqNPBq7QE#Jfr_f+F4V-@9YY4bzpkakZMCnOOD{>B zVux8OKQDXZQ9HC)&@RD(2HG7a-t;KdsxS;3R9#jM(q_o{X93fQlTTA8xVWz!GJ005 z<}Hn_B%3i&VQ0Vu6r;E3)eh_}Ici4P?W}%#kTG>NiuON_=n)}pY16!E+j1uH@3mQZZVAi% zWfwaCR7dj?`|s}`gO$>jU2gxU&HX@)@U)MG4X!lXyTJnvy!>I?>qRFP{6(lwg;2S zip@RKb@-|y&QB(ayXUDb6b@(oT%r%eLBN)T@_w;l9u#0#3?{XHg-Mq&&1AB}gc2QD zS4`F0+=KU-#t?S#wk(jxzEBo`l8znKdcNfys_IZX?(9f~OB882;;pa0g8dkzCi>up z53d)i!%gFE*^^qB{ql1bwTDQE@F1652b;r=5eo$NS{{t}eXupt_dN1!MUGIF_+R73 zsxSx$oJ^7!Qbgzxez>Z*4CO0Xx=Wd)-xwk@bLc!a@0Rt1E_WXPc!Kgu)s2ypbY9~a zm91%&S5(y7=sdYTHeL|bZJ=`g@Baomr`umxKLuPIuNS~9YNWD+fMn%g zZ_^Ay4!we4m4!Cuz)TEBGz<8srd;qH=c z!~Yh=4276zLC$<;!xW8g`(*o-wB4|a!{n1^H;!JQE^N<#n|Y|}5{j?FP$ajiz_dkf zz7*g*{d)LEkqQ8u$!#%ToJ_P{6kNs6FQO^wbNH{N49Fu}L2ldb_rx~uaX*#f z(&dZv)Z4gwmttRP<0#l+WUTXLZ^nQ}_jL)|A{IvD(Latu#rS`(CWA*ErSAJ};MwK< zi=4mcY=FcqQTk<0c3lNu{rw@_vLx)Wa^(DKN#?D6t!q5%&Cfy7k-Q}o0{yS6v;puzqM|28p%F} zTA!C_+zA-nb(f;;cQh7c>}?4@?HwM59}jp()HuvHg#<+fs;bv!4px88klX9=K+0wu zsK_nFAe6&qAN5!RTrmf&R`othO#%gBzWRnk)z(Tx(`R0s?8dd;3l**ZMs%+Seke_@ zt%|IX7L`qReWg#PZee?g;-J60{-@Q!@9)BQ715%7@9T_#&o=YDChN`F*ryYu@>}fH zTTjlY|7e9iejKQ@+ld$&C{T$6jeWC?a#mF!T-_chFV-8p*uDpd`wOTxF*O}b)wo1% zBuNYcsUUnS;e18Hx&P=NbL&x;ZewF(MeA-iTPshsZIJauP{p6$373~P6Z;(BCtNQo zDvnw)1Ak&7Zk}6PTlYnBdCK4^lp}Y$vT*#WY=mpWRIU`C$gWp^_Q#i(Uv;T32MW!W ze}Pp!ZK!b`kl*?D!|;-23;5c@LQ_rj^7uMR;eYi>H~IqMsXx$LeZ&ga%ZBdET38{j-SDufm~13WNNo8VY3r)o%*8 zPt!LBT_RG;V^=&q**!g+v=pcpXrufzU)sl2J5Ld39-gWbmG|XCFKQm@_xlVSd5T1+ zz~3w2Qmg|%@XH$<-65oey9fP0-~36fyQDnqc3CE>V~nOGY0G35}bj za7nq!TAvaIX*Coh8BvIS=k|Mkf5oro>3MpZd(J)gea?G%z22{b9JM(tyL`j)dGqGU zT3H^jn>TNM3GsL7V(>qWHu^gA=9!(bI$+@t)-xg)PTklb@ECM2OBma4X{m3jQnL5z zn6jDIb>Gg>v0s&@6hRoIjDSx?q2xG)ks-)gCP%(aEa+a|jka$JV^UqT&2cb_BQ z(ZhDhFP3VQ-;iG*h-t;IpzWa^i{4 z?%(O_oMtu~AAtL25v*cU^NJXYK$#UJ_TdO*${#i9?Rs0PZ8-%E`9ot|#3EGw_gq}A=cThN zLN3%ST&{&eUAP!tSaB2%z06Dd-;s~C%`II}%CFr&M=sT2SXJ)a?rW`Jno>x48KXZV zZ3#)kmQ^cT7cVyA{@nbI?+y!Qr7bIBVs^$Hq)QU(plaPmxOz)VDm0#5u^+LT-J(wx z3W7+{Dr$yTp|l_1_Y%Bf_l?vaP>L&yKI-Z0gM^U(E@IIk#HbLvLvMW;VuO&JLO5IX zSL>EshU6h!UJ6ITC{%4|9L4Tf zQMg@B4ZtpSEB>zPKdA6HY<oqp462k=<~Vg+MOF zHgHI)lFS0(!U_j?0jFBNh0l~1JC@^j_N=n~$L1hZ=wH7W{Jf~s2QfOvadi@yH;=@Hyo z+rX%Cix7sCm+l&B8T@+StGHuW?%AImYKH4xsm#`0O-=g+(W6I+DYgnfLGo1LJCDgf zUMCiRw%+);&y~y6CSAc+lK9&cu3&NW)>QDlH~f|0$9wMJ8|eWQp<}<}9elBo%6&;k z_}wH?tp_J^H5q(c<-=DmUnEx_MihAKq|LT#P-s7^fnGG6jjdkS4~ZV(W;<7hSimx; z*-oUw#h-Tf^TJKehChtQmeT^f3e}FYmTUkPY}D0vr!gYk{AK72S!`4oaBYeE;&%~u z{SHiQz9%Px#ZDc4Z8w@dy+y~GMb;+#p`=a={k`CHSd!Yr(IU8`r2*L#c;e5$d!k0a z1xb)c-5d>Jv4q&P10JuS6tmUW=>b0``f97){E^Gj<@vJpG0dKXcJoGZ1m#Ibl2u?% zc*&yy(#PE!7kB%Evy-_ZAR9LmiELAGhqKoGA^)zwk(5@6DZVfK{{1+u6~l}lDs^Ed zMtzcv0^{wvzz{Zz23q!-Eu{z497jg*X7bnJ99+^&UPbcJ6Bdv3%PNOpu^iy)F~KpH zN$lQKsL&D~_p84onLn*Za_X;NL-KKFwLpaxxcOTNqowfl?8|N2F4@OS*}?U3G>Vz0 z8l4q?u21pdg!?&;E!@yT|G7D6ls~h1fOvcEGRkq-e{%pzrNh;HY1}H27t*&M=ImKH z(t%}t_To6Y!3T*zQy|ka-c)Htsz|YCanq`k^KnT_;XUYPi~rFt@9P^^<}NELCK;23 zFDyRJkNExj_zHS!$M*9#>6FtPo*S$Zq(B94<1H-;BvpL2WW|#z+V4TZHCIfk|2z9| zH$*0bMB8!-Ty9=WR$8oie2buvnY&|Gdkwf1n4Vibbvr zIrvQS7F3YjU#@Q8>1#5*h3dTE%*{Mmw^ZhOuz^Pl>N0fDzGQL7V#IMG_?6%H4CXO$ z?(7y1E%ZS@I0@%sjI3eDrotwuaC$HsA?5W?SRi8FL)@6gRg$@Md|~HW#8FqMK`Xj{ z>yiesIsxs^yCR6}0`~coeA;zr`0xqaR4hXst$O^&S_{3`(o%-syFrXyG?0q3eMwFa zv5YMS+V4Ye(TnaGQG2068ZlOh8KJMdG*#5x!(YmoqM%LL4W_VpnJ9>Ma=gs5GyHDU zs={OtY}Uw(=i+bX<==OAb{5c+FCT$YrX#a>X-go})f&RpA>``mS<&6^!|;j4Yh+UN z&@(+}LLFGIz8+BL3o&(mg&cH~+r{6>x!iu`lx|U+y=2Y0tMa0Y_(C_y&gz%`CV}hR z<>l3`X1gL&=Z4EpAR{Yug(w#EGGDf^DsB-Gx!d*>w5*eSk}h9EHi#i<)L`d_cO|Q9 zRAF3f)ig5d*$sh6a8@S84z3oQ;2b1XnDdyopz$i~Jk+bW#h_bUUeH%!+YsK^xKeeI zA{D*2r?Rm8{&o(Mn)W|vycjG}^rQ?k{-?=5SVuT}DXLgy;ktB-qPm=09||!W+<~EUNj|}!w~HNvkn&vY)A>zYu<~^uPt^gldbjvzguQTB9OR*7fFXWJZCWfQA-ay zl5v*t#@X-WU6z|8NU0+CPWGkf>Q339Vsrqw^4$1<&G%O2z7Ov-#EyrE7kkE7r7*Rq zJ!OUi z%N=}O`V*w?jwOZbe7>zk4r$UxYu;J1gbDo{r9LsA>kv?^r4|r`0%-{d+Wo z*ArQPh6Vq!5v%UNFZYNE((67!g%`HiB&WJVg^zIuPNW*Q%faL0aJU*0a)YVSbyys- zQ&sqV0<}eE!xIQEVGw(gxx7dZ$!#K6-T&-}I8qE8Su|Gce$GMnc4%fZiGPeGr`}lj z4H_@U9{hcLMSun>SC}Nqiot#-Gbc!S&BHhCIhTcx>a+|lNvB5+*r`|%(Y-b`)dqIC z4IKH3-9p7x_{S04+p6^ttCq)fgl_V>3ieV<79zHAa1f(~OlLW!rX_b3FK#01865J_ zvi9(%Q?6quN_H({0ng|mWcN& z6qj5-r0(dA1ePBFp;t#9jEu7kpqe>Gjn)-x>2ZKhwb8AW&38hn7aA7jkk=GiL0CGu3B=vh!n@_yKp zvnip;U!x?gQE|D1n~rC&;E!dVT0%z5v1ZC?B=B2VA$av04Sg5HaVzyPEkM=aCS)(2 zesLE|%vz>F72r0c$BcaWo33!Fbb7*p_1JhV^Ql8l3$b}o)RW4A8B{)zzYX$iX~(h}*Rf=^M|-FBl+~#UYXaeR)wb{sK7F+U~CrH%%Ro z$oJ#Wik9Kpf|74^h*^Z2`Q zyB}!LESgptv4U+*!^K8SXa)%iY@^|S;yA$k?7TP$ffe3Qp9IFYSV4GlUt?Cy2)v6^WSdKr)q_^>FwfCD840=EN+ssWAXD8tSd5}u03ry7$B36W@ zybL&zzbpTN!h>w#WBzcSDm|qu`~AWvE}>VFT#%nAC~c}1@hf^unoZFNJ@oQSTON6~ z=2h>+`0x~I(xaK16BHc#b$%U0mpnUPf5?@E$g~&5_Bo%hrg+DG`e@7PW8VCed60Vk zfX6(eW#9lkY!6kY=^AK5%6B#%C|c-w9PZgrnr35``59lej5q~zw&IB2JDMPu3|fSq zmsjk_1yQv63Wl}vJ!#y2WUKyNTMy%xpsZai&YhZRr%AH!)}1$En{a4jPs)7pm09wp z>ixSwtbESO0F$kaiG2Gn{%s~?a>2_ydt^-d+N!9H^sI3uZ$$w6R%$~qC`_;5KGDJ_ z3i`X_A=6X4a+yEg9+|6tg1h+ zOD1@$up(9Dae)?B1n5pwZP*5FG@f}tgwOr?15&%_cem_3e%@qg zn)_<&TPJKnDOB3Z7>h+RhTVZ83Nm7nDw4#dRyX{qp}~9XN$gGrT)AqV-Wdh@F_1a@ zHH2SUPHY(4k*Gt_5jI9UwO`>h7mg5?%Uxcyk~5`lpycw$jq99w$q!LTw~6>(HuWq~ z?aHvHcb}xFdHAC`=OF8+FGG9am>hj~!#i6}c_qk&+1q2<#O3Zelzm8`(F430b1mJG z$z>)D;zcUw6R%3<_bJYNeU_-QQ-`p`)bCH^f~T)fF&^$8tHtc&9%u2pGG@LG7+W%C zYYn&U*On>V2TpnK4Q+HnhGbmr(C*3kN}~XSO62C7!%SH2BrA3!Pt>c%nVtCJKh=La zpDL)!dbnB?JmpW(d7zeLe!3DfUJ8y0$&>bU_X>|HJ|I<`I(D@F`#%ZG zD+YSGqF08~OR|cONc6*OiY$==>4mT#KcjUlSjUmww`x(Z$qV;Iis4=DR|0iVK-D}q zq+V(oLgKs3ak%5QJr4@gm*H zyxw7X^}KKE!~Kh^V&C0#fDJhbQ7=12P1Ou{$}{s1ai&yJ07!z{$ffw3`WHL$KAo#U z)ttPlj0}`WlQvpHr2!fG+H_AOQg!e={CZWxz2-uMq^K+W&OUX>=ZtE}?)g$_4M7XF z8lk~_WmB78w`+dqw+_$;AbatI`yuz|`RNsqdV(t&_kpVaOu@>g ziP()OeJaVvnE=d71CIQQVK+pv!AKjm>Ft_es{xChf|HL-Uv(?aT$49l<<|*P`J9G^ zFddKbKMLC?iM7$9SV4#E%hSb8mCGCRAs23!lz;@4i#pd(Kz%WBz$)Ne-shRnic1~U z(x5OFQ{MC;rpKlXj=VVhG-1k0F+z0=8alS_%%kj4I$be?<9D+Hani|b?OU{%Q zT1F&2OONo)jr0r1$mW%oqN8rB{Ql{`#NzPl349re?;i?xetf)04_`@_++r#7y1FZ| zRW&zUJxie$sC#_z%edXA+3ZiYo?>wd{(wNxK`|j_$*FIk;cLwwmpoQpe2cSd-Qy^B zjmpL!-mBQV+s=PNWk~!=4WBbX@DI54aw>v9pi%aF6vWOuk}rFDDL?fDl1?B~SDA5J zRy?JEC&`Aq5 zBN)9njV6CTujhhuM9{l_SUmB?k~O4|%1o{UnevvxqazZFUWhJw<4HD9j?ukJ*$;|1 z^VF^f_&qW@_hr!Z2;h^n$`WeNlGyo~kiD{T)VicDhKHYOd{KM>G~D#o^RX+e-7C4? zljRX@@+WTQ;8*Q4=$JgAiHSP|bl|>>&qq1Ko86JxP=w?O&mh z7Zes19x3|a9&bkrI9q=RjRv&J7X9a>PDgQwnyTV?hC)xM3;d zVL|=mE_DB~c4Pyx`^|Uh@#M66DA*Br>1yUOQpJwGlC!EB!jnkDLB0v^i$9XPXou6hQl~{`>el=8L z&s6EjU6;iZCEF1aBJpb?Degf(XNnyu9BM-=@Y(`=KlP4#LrzdwkQc{~9?k*{VX_$^4ah@<+s4D7S5s+(Qg2Bl&DW z3Addu6MPh)_qaxXD-R{ZJoylRSeQ0q<3M762nGf)4awV!2%5(-nHMn!PTyWuC5{pJa}=A+2K}pxswW*QM$!W$J4bzyO(%ocHuC9TtC$0*eg5lw`Ho@t`>FlCUPp z+8Grr1_uC_>%7xHZP3$q;o_x5+c_gIn#lzkPoeOfe~b*;7yK{8SJV8n1+qH;0KEI~ zuFTImit2ol(Bc5A9ydZC5ai10v>0shCC{O~W@LlDjI<`>@ID9liM`~OVy)@eAaE@| z7YVP7k|%$i`OW44JRr{P71{cLN^pTpd!zsET)>>&EJhmg6jZtbzA?2*;-{@Q8T)Ep zaD%VhG%W&WG@mOfK+0Cx!#2%yD!K|p8jS+%d^=L%4<7_z4CD_DiA4gmXJk44Soa-0RA?ZH{pz5)v0KI}PYiA*d^6}>F y3vD~Wi9;mL_v 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..a40d73e9c68ea638c28c7b13e4bcd1e179a3a102 GIT binary patch literal 15916 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 + + #FFFFFF + \ No newline at end of file diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..9e1e8a6 --- /dev/null +++ b/android/app/src/main/res/values/strings.xml @@ -0,0 +1,7 @@ + + + HUMANSAFE OS + HUMANSAFE OS + it.humansafe.os + it.humansafe.os + diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..be874e5 --- /dev/null +++ b/android/app/src/main/res/values/styles.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/android/app/src/main/res/xml/file_paths.xml b/android/app/src/main/res/xml/file_paths.xml new file mode 100644 index 0000000..bd0c4d8 --- /dev/null +++ b/android/app/src/main/res/xml/file_paths.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java b/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java new file mode 100644 index 0000000..0297327 --- /dev/null +++ b/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java @@ -0,0 +1,18 @@ +package com.getcapacitor.myapp; + +import static org.junit.Assert.*; + +import org.junit.Test; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + + @Test + public void addition_isCorrect() throws Exception { + assertEquals(4, 2 + 2); + } +} diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 0000000..f8f0e43 --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,29 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + + repositories { + google() + mavenCentral() + } + dependencies { + classpath 'com.android.tools.build:gradle:8.13.0' + classpath 'com.google.gms:google-services:4.4.4' + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +apply from: "variables.gradle" + +allprojects { + repositories { + google() + mavenCentral() + } +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/android/capacitor.settings.gradle b/android/capacitor.settings.gradle new file mode 100644 index 0000000..9a5fa87 --- /dev/null +++ b/android/capacitor.settings.gradle @@ -0,0 +1,3 @@ +// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN +include ':capacitor-android' +project(':capacitor-android').projectDir = new File('../node_modules/@capacitor/android/capacitor') diff --git a/android/gradle.properties b/android/gradle.properties new file mode 100644 index 0000000..2e87c52 --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,22 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx1536m + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true + +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app's APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..1b33c55baabb587c669f562ae36f953de2481846 GIT binary patch literal 43764 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 '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH="\\\"\\\"" + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/android/gradlew.bat b/android/gradlew.bat new file mode 100644 index 0000000..db3a6ac --- /dev/null +++ b/android/gradlew.bat @@ -0,0 +1,94 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH= + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/android/settings.gradle b/android/settings.gradle new file mode 100644 index 0000000..3b4431d --- /dev/null +++ b/android/settings.gradle @@ -0,0 +1,5 @@ +include ':app' +include ':capacitor-cordova-android-plugins' +project(':capacitor-cordova-android-plugins').projectDir = new File('./capacitor-cordova-android-plugins/') + +apply from: 'capacitor.settings.gradle' \ No newline at end of file diff --git a/android/variables.gradle b/android/variables.gradle new file mode 100644 index 0000000..ee4ba41 --- /dev/null +++ b/android/variables.gradle @@ -0,0 +1,16 @@ +ext { + minSdkVersion = 24 + compileSdkVersion = 36 + targetSdkVersion = 36 + androidxActivityVersion = '1.11.0' + androidxAppCompatVersion = '1.7.1' + androidxCoordinatorLayoutVersion = '1.3.0' + androidxCoreVersion = '1.17.0' + androidxFragmentVersion = '1.8.9' + coreSplashScreenVersion = '1.2.0' + androidxWebkitVersion = '1.14.0' + junitVersion = '4.13.2' + androidxJunitVersion = '1.3.0' + androidxEspressoCoreVersion = '3.7.0' + cordovaAndroidVersion = '14.0.1' +} \ No newline at end of file diff --git a/build-mobile.ps1 b/build-mobile.ps1 new file mode 100644 index 0000000..f02b6c2 --- /dev/null +++ b/build-mobile.ps1 @@ -0,0 +1,29 @@ +$dest = ".\dist-mobile" + +if (Test-Path $dest) { + Remove-Item $dest -Recurse -Force +} + +New-Item -ItemType Directory -Force -Path $dest | Out-Null + +# File HTML principali +Copy-Item .\index.html $dest +Copy-Item .\login.html $dest -ErrorAction SilentlyContinue +Copy-Item .\hsi.html $dest -ErrorAction SilentlyContinue +Copy-Item .\lifenet_game.html $dest +Copy-Item .\journal.html $dest +Copy-Item .\profile.html $dest -ErrorAction SilentlyContinue +Copy-Item .\social.html $dest + +# File app/PWA +Copy-Item .\manifest.json $dest -ErrorAction SilentlyContinue +Copy-Item .\service-worker.js $dest -ErrorAction SilentlyContinue +Copy-Item .\logo_humansafe.jpg $dest -ErrorAction SilentlyContinue + +# Cartelle runtime +Copy-Item .\assets $dest -Recurse -Force -ErrorAction SilentlyContinue +Copy-Item .\modules $dest -Recurse -Force +Copy-Item .\game-data $dest -Recurse -Force +Copy-Item .\user-data $dest -Recurse -Force -ErrorAction SilentlyContinue + +Write-Host "Build mobile completata in dist-mobile" diff --git a/capacitor.config.json b/capacitor.config.json new file mode 100644 index 0000000..658b104 --- /dev/null +++ b/capacitor.config.json @@ -0,0 +1,5 @@ +{ + "appId": "it.humansafe.os", + "appName": "HUMANSAFE OS", + "webDir": "dist-mobile" +} diff --git a/dist-mobile/assets/js/share-quiz.js b/dist-mobile/assets/js/share-quiz.js new file mode 100644 index 0000000..af4f46f --- /dev/null +++ b/dist-mobile/assets/js/share-quiz.js @@ -0,0 +1,147 @@ +(function () { + if (window.__HUMANSAFE_SHARE_PATCH__) return; + window.__HUMANSAFE_SHARE_PATCH__ = true; + + function injectStyle() { + if (document.getElementById("humansafe-share-style")) return; + + var style = document.createElement("style"); + style.id = "humansafe-share-style"; + style.textContent = + ".share-box{margin-top:24px;padding:18px;border:1px solid rgba(255,255,255,.12);border-radius:18px;background:rgba(255,255,255,.04)}" + + ".share-row{display:flex;gap:12px;flex-wrap:wrap;margin-top:12px}" + + ".btn-share{display:inline-block;text-decoration:none;padding:12px 16px;border-radius:12px;border:1px solid rgba(255,255,255,.12);background:#1b2a3a;color:#fff;cursor:pointer;font-weight:600}" + + ".btn-share:hover{opacity:.92}" + + ".share-hidden{display:none!important}"; + document.head.appendChild(style); + } + + function txt(selector) { + var el = document.querySelector(selector); + return el && el.textContent ? el.textContent.trim() : ""; + } + + function getHost() { + return document.querySelector("main") || document.body; + } + + function ensureShareUI() { + var box = document.getElementById("shareBox"); + if (box) return box; + + box = document.createElement("div"); + box.id = "shareBox"; + box.className = "share-box share-hidden"; + box.innerHTML = + '

Condividi il tuo risultato

' + + '

' + + ''; + + getHost().appendChild(box); + return box; + } + + function readResult() { + var archetype = + txt("#archetypeName") || + txt("#archetype") || + txt("#profileName") || + txt("#resultArchetype") || + "Profilo Humansafe"; + + var hsi = + txt("#hsiValue") || + txt("#hsiScore") || + txt("#scoreValue") || + txt("#score"); + + return { archetype: archetype, hsi: hsi }; + } + + function buildLinks(data) { + var encodedText = encodeURIComponent(data.text); + var encodedUrl = encodeURIComponent(data.url); + + return { + native: { title: data.title, text: data.text, url: data.url }, + x: "https://twitter.com/intent/tweet?text=" + encodedText + "&url=" + encodedUrl + }; + } + + function renderShareBox(data) { + var box = ensureShareUI(); + var message = document.getElementById("shareMessage"); + var nativeBtn = document.getElementById("nativeShareBtn"); + var xBtn = document.getElementById("shareX"); + var copyBtn = document.getElementById("copyShareBtn"); + var links = buildLinks(data); + + box.classList.remove("share-hidden"); + message.textContent = data.text; + xBtn.href = links.x; + + nativeBtn.onclick = async function () { + try { + if (navigator.share && (!navigator.canShare || navigator.canShare(links.native))) { + await navigator.share(links.native); + } else { + window.open(links.x, "_blank", "width=600,height=500"); + } + } catch (err) { + console.log("Condivisione annullata o non disponibile:", err); + } + }; + + copyBtn.onclick = async function () { + try { + await navigator.clipboard.writeText(data.url); + copyBtn.textContent = "Link copiato"; + setTimeout(function () { + copyBtn.textContent = "Copia link"; + }, 1600); + } catch (err) { + console.log("Copia non disponibile:", err); + } + }; + } + + function mountShare() { + var data = readResult(); + var shareUrl = location.origin + location.pathname + "?type=quiz&archetipo=" + encodeURIComponent(data.archetype); + var shareText = data.hsi + ? 'Ho completato il test HUMANSAFE. Il mio profilo attuale è "' + data.archetype + '" con HSI ' + data.hsi + '.' + : 'Ho completato il test HUMANSAFE. Il mio profilo attuale è "' + data.archetype + '".'; + + renderShareBox({ + title: "HUMANSAFE | " + data.archetype, + text: shareText, + url: shareUrl + }); + } + + function hookShowResults() { + if (typeof window.showResults !== "function") { + console.warn("showResults() non trovata."); + return; + } + + var originalShowResults = window.showResults; + + window.showResults = function () { + var result = originalShowResults.apply(this, arguments); + try { + mountShare(); + } catch (err) { + console.error("Errore share patch:", err); + } + return result; + }; + } + + injectStyle(); + hookShowResults(); +})(); diff --git a/dist-mobile/game-data/README.md b/dist-mobile/game-data/README.md new file mode 100644 index 0000000..bfa3c74 --- /dev/null +++ b/dist-mobile/game-data/README.md @@ -0,0 +1,54 @@ +\# HUMANSAFE Game Data + + + +Questa cartella contiene i dati strutturati usati dai prototipi interattivi HUMANSAFE. + + + +\## Struttura + + + +\### `scenarios/` + +Scenari narrativi e situazioni interattive del sistema. + + + +\### `profiles/` + +Profili utente, archetipi, stati cognitivi e configurazioni identitarie. + + + +\### `missions/` + +Missioni, azioni guidate e compiti associati all’evoluzione dell’utente. + + + +\### `signals/` + +Segnali cognitivi, pattern comportamentali e indicatori simbolici usati nei moduli HUMANSAFE. + + + +\## Obiettivo + + + +Organizzare i dati del progetto in forma leggibile, espandibile e riutilizzabile per: + + + +\- quiz + +\- simulazioni + +\- moduli narrativi + +\- sistemi di coaching + +\- strumenti diagnostici etici + diff --git a/dist-mobile/game-data/missions/missions_01.json b/dist-mobile/game-data/missions/missions_01.json new file mode 100644 index 0000000..8cfb5aa --- /dev/null +++ b/dist-mobile/game-data/missions/missions_01.json @@ -0,0 +1,51 @@ +{ + "system": "HUMANSAFE Mission Layer", + "description": "Pacchetto iniziale di missioni etiche e reali per il primo MVP di HUMANSAFE OS.", + "missions": [ + { + "id": "missione_01", + "title": "10 minuti senza schermo", + "type": "offline", + "reward_xp": 5, + "reward_traits": ["presence", "reality"], + "description": "Resta per 10 minuti senza schermo, musica o distrazioni digitali.", + "ethical_value": "presenza" + }, + { + "id": "missione_02", + "title": "Una risposta non impulsiva", + "type": "behavioral", + "reward_xp": 8, + "reward_traits": ["clarity", "courage"], + "description": "Aspetta prima di rispondere a un messaggio o contenuto che ti attiva emotivamente.", + "ethical_value": "coraggio" + }, + { + "id": "missione_03", + "title": "Conversazione piena", + "type": "relational", + "reward_xp": 10, + "reward_traits": ["empathy", "presence"], + "description": "Fai una conversazione reale senza toccare il telefono.", + "ethical_value": "empatia" + }, + { + "id": "missione_04", + "title": "Camminata lucida", + "type": "offline", + "reward_xp": 6, + "reward_traits": ["reality", "clarity"], + "description": "Cammina per 15 minuti senza notifiche né contenuti in cuffia.", + "ethical_value": "realtà" + }, + { + "id": "missione_05", + "title": "Riflessione scritta", + "type": "reflective", + "reward_xp": 7, + "reward_traits": ["clarity", "presence"], + "description": "Scrivi tre righe vere su cosa usi per fuggire quando senti attrito o disagio.", + "ethical_value": "chiarezza" + } + ] +} \ No newline at end of file diff --git a/dist-mobile/game-data/profiles/archetypes.json b/dist-mobile/game-data/profiles/archetypes.json new file mode 100644 index 0000000..9352468 --- /dev/null +++ b/dist-mobile/game-data/profiles/archetypes.json @@ -0,0 +1,69 @@ +{ + "archetypes": [ + { + "id": "cellula_dormiente", + "name": "Cellula Dormiente", + "zone": "Zona Rossa", + "description": "Usa spesso il digitale come anestetico o rifugio automatico. Tende a fuggire il vuoto, la frizione e la presenza reale.", + "traits": [ + "alta distrazione", + "bassa regolazione", + "evasione automatica", + "fragile presenza mentale" + ], + "recommended_action": "Applica la Regola del Vuoto: 15 minuti al giorno senza schermo, senza musica, senza fuga." + }, + { + "id": "cellula_reattiva", + "name": "Cellula Reattiva", + "zone": "Zona Grigia", + "description": "Ha coscienza della manipolazione digitale, ma viene ancora trascinata da urgenza, controllo e attrito emotivo.", + "traits": [ + "impulsività", + "controllo compulsivo", + "sensibilità ai trigger", + "consapevolezza instabile" + ], + "recommended_action": "Applica la regola delle 24 ore prima di rispondere a contenuti o messaggi ad alta carica emotiva." + }, + { + "id": "cellula_osservatrice", + "name": "Cellula Osservatrice", + "zone": "Zona Grigia", + "description": "È più lucida della media e riconosce molti meccanismi, ma alterna osservazione e dispersione.", + "traits": [ + "auto-osservazione", + "lucidità intermittente", + "struttura fragile", + "buon potenziale evolutivo" + ], + "recommended_action": "Introduci un blocco quotidiano di 30 minuti di presenza reale senza notifiche." + }, + { + "id": "cellula_in_risveglio", + "name": "Cellula in Risveglio", + "zone": "Zona Verde", + "description": "Sta recuperando spazio mentale e usa la tecnologia con intenzione crescente.", + "traits": [ + "presenza crescente", + "migliore regolazione", + "autonomia in sviluppo", + "uso più consapevole del digitale" + ], + "recommended_action": "Trasforma una tua pratica sana in rituale stabile e condividila con almeno una persona." + }, + { + "id": "nucleo_sovrano", + "name": "Nucleo Sovrano", + "zone": "Zona Verde", + "description": "Ha una buona capacità di reggere vuoto, impulso e frizione. La tecnologia non domina il suo baricentro.", + "traits": [ + "alta presenza", + "regolazione forte", + "lucidità stabile", + "capacità di proteggere sé e gli altri" + ], + "recommended_action": "Diventa nodo attivo: crea contesti, conversazioni e micro-azioni che proteggano anche gli altri." + } + ] +} \ No newline at end of file diff --git a/dist-mobile/game-data/progression/levels.json b/dist-mobile/game-data/progression/levels.json new file mode 100644 index 0000000..47072d3 --- /dev/null +++ b/dist-mobile/game-data/progression/levels.json @@ -0,0 +1,41 @@ +{ + "system": "HUMANSAFE Progression Layer", + "description": "Sistema base di livelli per la gamification etica di HUMANSAFE OS.", + "levels": [ + { + "level": 1, + "id": "segnale_debole", + "name": "Segnale Debole", + "xp_required": 0, + "description": "L'utente inizia a osservare i propri automatismi senza ancora dominarli." + }, + { + "level": 2, + "id": "cellula_attiva", + "name": "Cellula Attiva", + "xp_required": 20, + "description": "L'utente ha iniziato a reagire con maggiore consapevolezza e presenza." + }, + { + "level": 3, + "id": "osservatore_lucido", + "name": "Osservatore Lucido", + "xp_required": 50, + "description": "L'utente sviluppa una capacità più stabile di auto-osservazione e regolazione." + }, + { + "level": 4, + "id": "nodo_consapevole", + "name": "Nodo Consapevole", + "xp_required": 90, + "description": "L'utente consolida il proprio baricentro mentale e diventa punto di riferimento." + }, + { + "level": 5, + "id": "custode_humansafe", + "name": "Custode Humansafe", + "xp_required": 140, + "description": "L'utente ha sviluppato una presenza forte e una capacità di protezione verso sé e gli altri." + } + ] +} \ No newline at end of file diff --git a/dist-mobile/game-data/scenarios/scenario_01.json b/dist-mobile/game-data/scenarios/scenario_01.json new file mode 100644 index 0000000..119f909 --- /dev/null +++ b/dist-mobile/game-data/scenarios/scenario_01.json @@ -0,0 +1,60 @@ +{ + "scenario_id": "01", + "title": "Il Silenzio Rombante", + "theme": "Dipendenza da validazione, ansia digitale, gestione del rifiuto.", + "trigger": "Vulnerabilità esposta.", + "setup": [ + "Sono le 22:15. Tre ore fa hai inviato un messaggio vocale molto personale a una persona a cui tieni.", + "Apri la chat. Sotto il tuo messaggio ci sono le due spunte blu. Visualizzato alle 19:30.", + "In alto, sotto il suo nome, c'è scritto 'Online'.", + "Fissi lo schermo. Per un secondo appare la scritta 'sta scrivendo...', ma poi scompare. Di nuovo, solo 'Online'.", + "Il tuo stomaco si stringe in una morsa di imbarazzo e rabbia. Senti di aver sbagliato a esporti." + ], + "question": "Cosa fai?", + "choices": [ + { + "id": "A", + "action_name": "L'Attacco Passivo-Aggressivo", + "text": "Gli scrivi: 'Tutto bene? Vedo che leggi ma non rispondi. Se disturbavo potevi dirlo.'", + "stat_changes": { + "impulsivita": 2, + "resilienza_emotiva": -1, + "empatia": -1 + }, + "oracle_intervention": "Hai trasformato la tua vulnerabilità in rabbia. Pretendere una risposta immediata non nasce dalla tua forza, ma dalla paura dell'abbandono. L'altro è diventato un ostaggio della tua ansia. Ricorda: il tempo degli altri non ti appartiene." + }, + { + "id": "B", + "action_name": "La Cancellazione", + "text": "Usi 'Elimina per tutti' sul vocale, cancellando la tua vulnerabilità.", + "stat_changes": { + "fiducia_in_se": -2, + "capacita_comunicativa": -1, + "consapevolezza": 0 + }, + "oracle_intervention": "Hai cancellato le tue parole per proteggerti dalla vergogna. Ma nascondendo la tua fragilità, hai cancellato anche la tua autenticità. Chi non ha il coraggio di esporsi al silenzio dell'altro, non conoscerà mai la profondità di un legame reale." + }, + { + "id": "C", + "action_name": "L'Anestesia Algoritmica", + "text": "Chiudi la chat. Apri TikTok/Instagram e scorri velocemente per non sentire il nodo allo stomaco.", + "stat_changes": { + "fuga_realta": 2, + "consapevolezza": -2, + "resilienza_emotiva": -1 + }, + "oracle_intervention": "Hai sentito dolore e hai subito cercato l'anestetico. L'algoritmo ti ha accolto a braccia aperte. Ma il nodo allo stomaco è ancora lì, solo sepolto. Finché fuggirai dal vuoto, sarai sempre schiavo di chi promette di riempirlo." + }, + { + "id": "D", + "action_name": "La Sospensione (La Sovranità)", + "text": "Riconosci il bruciore dell'ansia. Spegni lo schermo, metti il telefono a faccia in giù e vai a bere un bicchiere d'acqua.", + "stat_changes": { + "resilienza_emotiva": 2, + "consapevolezza": 2, + "sovranita_cognitiva": 3 + }, + "oracle_intervention": "Il silenzio fa male, e tu hai scelto di sentirlo. Non hai attaccato, non sei fuggito. Hai restituito all'altro il suo tempo e a te stesso il tuo spazio. Questa è la Sovranità Cognitiva. Ti stai rafforzando." + } + ] +} diff --git a/dist-mobile/game-data/scenarios/scenario_02.json b/dist-mobile/game-data/scenarios/scenario_02.json new file mode 100644 index 0000000..97ab52d --- /dev/null +++ b/dist-mobile/game-data/scenarios/scenario_02.json @@ -0,0 +1,60 @@ +{"share_title": "Ho affrontato il contesto Ghosting", +"share_text": "Su LIFENET ho osservato come reagisco al silenzio digitale.", + "scenario_id": "02", + "title": "La Frattura del Turno", + "theme": "Burnout, reperibilità continua, confini lavoro-vita.", + "trigger": "Richiesta urgente fuori orario.", + "setup": [ + "Sono le 22:47. Hai finito da poco una giornata pesante.", + "Il telefono vibra: un responsabile scrive nel gruppo lavoro 'Serve questa cosa per stanotte'.", + "Sai che domani dovrai alzarti presto, ma senti anche paura di sembrare poco disponibile.", + "Apri la chat. Tutti hanno visualizzato. Nessuno risponde." + ], + "question": "Come reagisci?", + "choices": [ + { + "id": "A", + "action_name": "La Sottomissione Silenziosa", + "text": "Ti rimetti al computer anche se sei esausto e fai il lavoro in risentimento.", + "stat_changes": { + "resilienza_emotiva": -1, + "sovranita_cognitiva": -2, + "fiducia_in_se": -1 + }, + "oracle_intervention": "Hai confuso disponibilità con auto-abbandono. Quando non metti confini, il sistema impara che può consumarti." + }, + { + "id": "B", + "action_name": "Lo Scoppio Passivo", + "text": "Rispondi in modo secco e aggressivo nel gruppo, facendo uscire tutta la frustrazione accumulata.", + "stat_changes": { + "impulsivita": 2, + "capacita_comunicativa": -1, + "resilienza_emotiva": -1 + }, + "oracle_intervention": "Hai trasformato un confine necessario in una detonazione. Il confine senza forma diventa solo attrito." + }, + { + "id": "C", + "action_name": "La Fuga Nascosta", + "text": "Non rispondi e spegni tutto, ma passi la notte in colpa e agitazione.", + "stat_changes": { + "fuga_realta": 1, + "fiducia_in_se": -1, + "consapevolezza": 0 + }, + "oracle_intervention": "Se sparisci senza decidere, il tuo corpo resta comunque al lavoro. Il silenzio non sempre è riposo." + }, + { + "id": "D", + "action_name": "Il Confine Sovrano", + "text": "Rispondi con rispetto: confermi presa visione, dichiari che interverrai domani in orario utile e chiudi il telefono.", + "stat_changes": { + "sovranita_cognitiva": 3, + "capacita_comunicativa": 2, + "resilienza_emotiva": 2 + }, + "oracle_intervention": "Hai protetto il tuo sistema senza umiliare nessuno. Il vero professionismo include la custodia dei limiti." + } + ] +} diff --git a/dist-mobile/game-data/scenarios/scenario_03.json b/dist-mobile/game-data/scenarios/scenario_03.json new file mode 100644 index 0000000..097a2dc --- /dev/null +++ b/dist-mobile/game-data/scenarios/scenario_03.json @@ -0,0 +1,59 @@ +{ + "scenario_id": "03", + "title": "Il Pozzo Senza Fondo", + "theme": "Doomscrolling, ansia sociale, dipendenza da informazione tossica.", + "trigger": "Notizia disturbante + scroll compulsivo.", + "setup": [ + "Apri il telefono per controllare un messaggio e ti ritrovi davanti a una notizia scioccante.", + "Scorri i commenti. Poi altri contenuti. Poi altri ancora.", + "Ti senti sempre più agitato, ma il pollice continua a muoversi da solo.", + "Il tuo corpo è fermo. La tua mente no." + ], + "question": "Cosa fai?", + "choices": [ + { + "id": "A", + "action_name": "L'Immersione Totale", + "text": "Continui a scrollare per 'capire meglio', anche se stai peggio di minuto in minuto.", + "stat_changes": { + "fuga_realta": 2, + "consapevolezza": -2, + "resilienza_emotiva": -1 + }, + "oracle_intervention": "Hai chiamato informazione ciò che in realtà era esposizione continua al veleno. Capire non significa saturarsi." + }, + { + "id": "B", + "action_name": "La Condivisione Reattiva", + "text": "Rilanci subito la notizia a tutti, senza verificare davvero, per scaricare l'ansia.", + "stat_changes": { + "impulsivita": 2, + "empatia": -1, + "consapevolezza": -1 + }, + "oracle_intervention": "L'ansia condivisa senza filtro diventa contagio. Non ogni allarme diffuso è responsabilità: spesso è solo eco." + }, + { + "id": "C", + "action_name": "La Sospensione Critica", + "text": "Chiudi il flusso, fai tre respiri, verifichi una sola fonte affidabile e poi esci.", + "stat_changes": { + "consapevolezza": 2, + "sovranita_cognitiva": 2, + "resilienza_emotiva": 1 + }, + "oracle_intervention": "Hai ridotto il rumore e recuperato criterio. Il cervello non guarisce dall'overload con altro overload." + }, + { + "id": "D", + "action_name": "Il Ritorno al Corpo", + "text": "Posi il telefono, fai due minuti di camminata lenta e torni alla realtà sensibile.", + "stat_changes": { + "sovranita_cognitiva": 3, + "resilienza_emotiva": 2, + "fuga_realta": -1 + }, + "oracle_intervention": "Hai ricordato al tuo sistema nervoso che il mondo non è solo lo schermo. Il corpo è una tecnologia antica e ancora superiore." + } + ] +} diff --git a/dist-mobile/game-data/scenarios/scenario_04.json b/dist-mobile/game-data/scenarios/scenario_04.json new file mode 100644 index 0000000..3414396 --- /dev/null +++ b/dist-mobile/game-data/scenarios/scenario_04.json @@ -0,0 +1,60 @@ +{ + "scenario_id": "04", + "title": "Il Branco Silenzioso", + "theme": "Esclusione sociale, conformismo digitale, responsabilità relazionale.", + "trigger": "Derisione in chat di gruppo.", + "setup": [ + "Sei in una chat di gruppo. Un ragazzo del gruppo viene preso in giro con meme e allusioni.", + "Nessuno interviene davvero. Alcuni mettono reaction divertite.", + "Tu senti disagio, ma anche la paura di esporti e diventare il prossimo bersaglio.", + "Lo schermo aspetta il tuo piccolo voto morale." + ], + "question": "Cosa scegli?", + "choices": [ + { + "id": "A", + "action_name": "La Complicità Leggera", + "text": "Metti una reaction ironica per non esporti troppo ma restare dentro il gruppo.", + "stat_changes": { + "empatia": -2, + "fiducia_in_se": -1, + "sovranita_cognitiva": -1 + }, + "oracle_intervention": "Hai barattato integrità con appartenenza. A volte la crudeltà moderna indossa la maschera della leggerezza." + }, + { + "id": "B", + "action_name": "Il Silenzio Vigliacco", + "text": "Non fai nulla. Resti a guardare e aspetti che passi.", + "stat_changes": { + "empatia": -1, + "consapevolezza": 0, + "fiducia_in_se": -1 + }, + "oracle_intervention": "Non colpire non basta sempre. Quando il danno è davanti a te, anche l'inerzia educa il gruppo." + }, + { + "id": "C", + "action_name": "La Difesa Privata", + "text": "Scrivi in privato alla persona esclusa, ma non intervieni pubblicamente.", + "stat_changes": { + "empatia": 2, + "capacita_comunicativa": 1, + "sovranita_cognitiva": 0 + }, + "oracle_intervention": "Hai protetto la ferita ma non hai toccato il meccanismo. È un gesto umano, ma ancora incompleto." + }, + { + "id": "D", + "action_name": "L'Intervento Sobrio", + "text": "Intervieni nella chat con tono fermo e semplice: fermi il gioco e riporti il gruppo alla realtà.", + "stat_changes": { + "empatia": 3, + "sovranita_cognitiva": 3, + "capacita_comunicativa": 2, + "fiducia_in_se": 1 + }, + "oracle_intervention": "Hai rischiato disapprovazione per difendere dignità. È così che una cellula smette di adattarsi al danno e inizia a guarire l'organismo." + } + ] +} diff --git a/dist-mobile/game-data/signals/hsi_zones.json b/dist-mobile/game-data/signals/hsi_zones.json new file mode 100644 index 0000000..dd2022f --- /dev/null +++ b/dist-mobile/game-data/signals/hsi_zones.json @@ -0,0 +1,97 @@ +{ + "metric": "HSI", + "name": "Humansafe Signal Index", + "description": "Indice simbolico usato nei prototipi HUMANSAFE per rappresentare il livello di equilibrio tra attenzione, reattività, responsabilità e presenza mentale nel rapporto con il digitale.", + "scale": { + "min": 0, + "max": 100 + }, + "zones": [ + { + "id": "zona_rossa", + "name": "Zona Rossa", + "range": { + "min": 0, + "max": 35 + }, + "color": "red", + "meaning": "Il digitale tende a dominare il baricentro mentale dell'utente. La persona usa spesso lo schermo come fuga, anestesia o reazione impulsiva.", + "characteristics": [ + "alta distrazione", + "bassa presenza", + "reattività elevata", + "uso compensativo del digitale", + "fragilità nella regolazione" + ], + "priority": "Ridurre il rumore, interrompere gli automatismi e ricostruire spazio mentale reale." + }, + { + "id": "zona_grigia_bassa", + "name": "Zona Grigia Bassa", + "range": { + "min": 36, + "max": 55 + }, + "color": "amber", + "meaning": "L'utente comincia a riconoscere i meccanismi che lo influenzano, ma resta ancora spesso intrappolato in urgenza, controllo e dispersione.", + "characteristics": [ + "consapevolezza instabile", + "controllo compulsivo", + "oscillazione tra lucidità e ricaduta", + "vulnerabilità ai trigger emotivi" + ], + "priority": "Stabilizzare la consapevolezza e introdurre regole semplici ma costanti." + }, + { + "id": "zona_grigia_alta", + "name": "Zona Grigia Alta", + "range": { + "min": 56, + "max": 70 + }, + "color": "yellow", + "meaning": "L'utente possiede una buona capacità di osservazione, ma non ha ancora consolidato del tutto la propria struttura interna.", + "characteristics": [ + "buona lucidità", + "presenza intermittente", + "potenziale evolutivo alto", + "disciplina non ancora stabile" + ], + "priority": "Trasformare le intuizioni in pratiche quotidiane stabili." + }, + { + "id": "zona_verde_media", + "name": "Zona Verde", + "range": { + "min": 71, + "max": 85 + }, + "color": "green", + "meaning": "L'utente sta recuperando baricentro mentale e usa la tecnologia con intenzione crescente e maggiore responsabilità.", + "characteristics": [ + "presenza crescente", + "regolazione migliore", + "uso più consapevole del digitale", + "maggiore autonomia" + ], + "priority": "Consolidare le pratiche sane e iniziare a diventare punto di riferimento per altri." + }, + { + "id": "zona_verde_alta", + "name": "Zona Verde Alta", + "range": { + "min": 86, + "max": 100 + }, + "color": "emerald", + "meaning": "L'utente mantiene un buon equilibrio tra impulso, attenzione e presenza. La tecnologia non domina il suo centro decisionale.", + "characteristics": [ + "alta lucidità", + "forte presenza mentale", + "buona capacità di regolazione", + "attitudine protettiva verso sé e altri" + ], + "priority": "Diffondere cultura di presenza, protezione e lucidità nella propria rete umana." + } + ] +} \ No newline at end of file diff --git a/dist-mobile/hsi.html b/dist-mobile/hsi.html new file mode 100644 index 0000000..5ccea0b --- /dev/null +++ b/dist-mobile/hsi.html @@ -0,0 +1,126 @@ +@' + + + + + + HUMANSAFE | HSI Diagnostic + + + +
+
+

HSI Diagnostic

+

Una prima scansione per comprendere il tuo orientamento cognitivo, emotivo ed etico nel sistema HUMANSAFE.

+

Diagnosis → Simulation → Reflection → Mission → Memory → Evolution → Community

+
+ +
+

+ Rispondi con sincerità. Non è un test clinico, ma una mappa iniziale + per personalizzare simulazione, riflessione e missioni. +

+
+ +
+
+ +
+ + +
+ + + + +'@ | Set-Content .\hsi.html -Encoding UTF8 diff --git a/dist-mobile/index.html b/dist-mobile/index.html new file mode 100644 index 0000000..50791ae --- /dev/null +++ b/dist-mobile/index.html @@ -0,0 +1,427 @@ + + + + + + HUMANSAFE OS | Home Hub + + + + + + +
+ +
+
+
HUMANSAFE OS · Home Hub
+ Accesso → +
+ +

Tecnologia etica per lucidità, memoria, comunità e crescita umana.

+ +

+ HUMANSAFE OS è un ecosistema che unisce simulazione narrativa, riflessione, missioni reali, + diario evolutivo e community etica per aiutare l’utente a sviluppare più presenza e più sovranità cognitiva. +

+ +

+ Non è un social classico. Non è solo un quiz. Non è solo un gioco. + È un sistema unico che trasforma l’esperienza digitale in percorso. +

+ + + +
+ Formula del sistema +

+ diagnosi → simulazione → missione → memoria → evoluzione → comunità +

+
+
+ +
+

Perché esiste HUMANSAFE

+
+
+

Il problema

+

+ Gli ecosistemi digitali spingono spesso reattività, distrazione e frammentazione. + L’essere umano si ritrova connesso ovunque, ma poco presente a sé stesso. +

+
+
+

La risposta

+

+ HUMANSAFE usa il digitale come infrastruttura etica: uno specchio, un laboratorio + e una memoria del percorso, non una macchina che divora attenzione. +

+
+
+
+ +
+

I moduli del sistema

+
+ +
+
Access Layer
+

Login

+

Porta di ingresso al sistema e ponte verso community esterne.

+ Apri login +
+ +
+
Simulation Layer
+

LIFENET

+

Scenari, scelte, XP, missioni, ORACLE e progressione etica.

+ Apri LIFENET +
+ +
+
Journal Layer
+

Journal

+

Missioni, riflessioni, timeline e continuità del percorso.

+ Apri Journal +
+ +
+
Profile Layer
+

Profilo

+

Centro identitario con XP, archetipo, badge e stato utente.

+ Apri Profilo +
+ +
+
Community Layer
+

Circle

+

Condivisione etica, supporto reciproco e community non tossica.

+ Apri Circle +
+ +
+
Data Layer
+

Game Data

+

Scenari, missioni, livelli, segnali e archetipi del sistema.

+
+ +
+
Core Layer
+

Profile Engine

+

Motore unico che collega profilo, timeline, missioni e badge.

+
+ +
+
PWA Layer
+

App installabile

+

Manifest e service worker preparano HUMANSAFE come app mobile.

+
+ +
+
+ +
+

Stato attuale del prototipo

+

+ Il nucleo di HUMANSAFE OS è già attivo come prototipo coerente e navigabile. +

+ +
+ Profile Engine attivo + LIFENET attivo + Journal attivo + Profile attivo + Circle attivo + Auth reale da completare + Packaging Android da completare +
+ + +
+ +
+

Ingresso rapido

+

+ Se vuoi iniziare subito, entra nel simulatore oppure apri il profilo centrale del percorso. +

+ + +
+ +
+ + + + diff --git a/dist-mobile/journal.html b/dist-mobile/journal.html new file mode 100644 index 0000000..55451b5 --- /dev/null +++ b/dist-mobile/journal.html @@ -0,0 +1,438 @@ + + + + + + + HUMANSAFE Journal | Diario di Bordo + + + + +
+
+
+
HUMANSAFE Journal Layer
+ ← Torna a HUMANSAFE CORE +
+ +

Diario di bordo del percorso

+

+ Il Journal trasforma eventi, missioni, riflessioni e passaggi evolutivi + in memoria leggibile. Non serve a giudicarti: serve a darti continuità. +

+ + +
+ +
+
+

Stato sintetico

+
+
+ Nome profilo + Caricamento... +
+
+ Archetipo + Caricamento... +
+
+ Zona HSI + Caricamento... +
+
+ XP Totale + 0 +
+
+ +
+

Badge attivi

+
+
+ +
+

Missioni completate

+
+
+
+ +
+

Memoria del percorso

+ +
+

Riflessioni recenti

+
+
+ +
+

Timeline evolutiva

+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dist-mobile/lifenet_game.html b/dist-mobile/lifenet_game.html new file mode 100644 index 0000000..babdbc7 --- /dev/null +++ b/dist-mobile/lifenet_game.html @@ -0,0 +1,660 @@ + + + + + + HUMANSAFE LIFENET | Simulation Layer + + + + +
+
+
+
HUMANSAFE LIFENET · Simulation Layer
+ ← Torna a HUMANSAFE CORE +
+ +

Allenamento alla sovranità cognitiva

+

+ LIFENET è il simulatore narrativo di HUMANSAFE OS. Qui attraversi scenari, + fai scelte, ricevi riflessioni ORACLE e trasformi l’esperienza in progresso reale. +

+ + +
+ +
+
+
+
Scenario 1
+

Caricamento...

+

+ +
+ +

+
+ + + + + +
+ + Apri Journal + Apri Profilo +
+
+
+ + +
+
+ + + + diff --git a/dist-mobile/login.html b/dist-mobile/login.html new file mode 100644 index 0000000..3b05a90 --- /dev/null +++ b/dist-mobile/login.html @@ -0,0 +1,271 @@ + + + + + + HUMANSAFE OS | Access Layer + + + + +
+ +
+
+
HUMANSAFE OS · Access Layer
+ ← Torna alla Home +
+ +

Entra nell’ecosistema HUMANSAFE

+ +

+ Questa è la porta di ingresso al sistema: simulazione, profilo, diario, community e crescita etica. +

+ +

+ Per ora l’accesso è un gateway demo coerente con il prototipo. + Nei prossimi aggiornamenti potrà essere collegato ad autenticazione reale. +

+ + + +
+ Il cuore dell’identità utente resta interno a HUMANSAFE. + I provider esterni sono solo porte di ingresso, non il centro del sistema. +
+
+ +
+

Ingressi rapidi

+ +
+
+

Comunità esterna

+

+ Usa i nodi esterni per diffusione, contatto e community iniziale. +

+ +
+ +
+

Moduli interni

+

+ Accedi direttamente ai moduli centrali già attivi nel prototipo. +

+ +
+
+ +

+ Futuri step: autenticazione reale, sincronizzazione cloud, onboarding guidato, account persistente multi-dispositivo. +

+
+ +
+ + + diff --git a/dist-mobile/logo_humansafe.jpg b/dist-mobile/logo_humansafe.jpg new file mode 100644 index 0000000000000000000000000000000000000000..80320c2ccef8136e7c9b6c943f05129e339d7c2d GIT binary patch literal 156724 zcmeFZcQo7a|34a|HbGH4YS!MhquQb`|j?mD*zO zgd!#4=JUJjocq_k_mAKG-gCasoL5fHJMVYi??+zGJjdhpc;{yBW)(oMtEHm_AR;0H zydpdRHw%DA021Q=*ngf$2u4aq`X8epBfCXLNkK(LNkK_TMFXUvqNby!q@-n_r32E_ zGtg7fFy3aQzfE{e|DO*b`p=Ohq!fe$>8UBH30wak+D#XLfr1o33Lqik1rRe3kuVV5 z^Z`Hs0MRYN)&A##|2HEdCLz5=MovLVMNQbDksd%yI5#mV$*o(Yq=dbL3GV|)8E!G& zmDV7;ZDdQ%>%}A!mRdl;_pr8`*?0oYFZ=pkI3*R!9ac7W0YRaA!Xk3=_Z1YClpj6T z)Y5*Uqigc~g{j#~a|^pS_HP{=ot(XWeEs~P0f7;bQPDB)W8>1&KV)QPef*SNSX5l{ zrL?TPqOQK7v8nlcOKVSWU;n`1(2wECsp*;DvvYsu*HG&ln_JsEyL*_E)4ylu7ubK7 z|G`B>!1=%1{|fB?f{THGit>0xR? zZ8s&KtTCGT^}7iw7Jj)k0nC4({SRdS_ke}}ze4tZ0Q*02%>!sihzOHM!T?YQT$>ce z-2?ph`0wxFzkT4pec*qZ4-^Hx=W|OlWUoDVNn(YF#Y@8k(E20h*m0D9lpN(0N8yZo ze2^I%8|RbNzq}PvAC?NM^*-3OsZfb_%hxP)p6mQ7adby2I4TGP?QZG)g6BO%y5x1< z0KyaDBP@Fsg9GeM`PwcaKxfWt$_Vn)>W{0^CNm~ki=+1O1;99$WANufoyfRG66{} zD%0A31j5-ThWSL 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

mYYYX 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 {MRN~WCp?_3P*}NLs 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 "Buongiorno. Sono un Ambasciatore di HUMANSAFE, un'infrastruttura sociale che si occupa di prevenire la dipendenza digitale e l'isolamento dei giovani. +> Oggi siamo tutti schiavi degli schermi, e stiamo perdendo la capacità di guardarci negli occhi. Per finanziare l'apertura dei nostri centri fisici e creare lavoro locale, stiamo distribuendo queste piante. +> Una pianta è l'opposto di un telefono: ha bisogno di cura e attenzione reale. Prendendo questa pianta, lei finanzia i laboratori per i ragazzi della nostra città e mi aiuta a sostenermi onestamente. Troverà anche un QR code per testare il suo livello di ansia digitale gratuitamente. Posso contare sul suo supporto per questa rivoluzione?" diff --git a/dist-mobile/modules/franchising-sociale/roi_ambassador_calculator.py b/dist-mobile/modules/franchising-sociale/roi_ambassador_calculator.py new file mode 100644 index 0000000..14cb5b1 --- /dev/null +++ b/dist-mobile/modules/franchising-sociale/roi_ambassador_calculator.py @@ -0,0 +1,40 @@ +def calcola_distribuzione_fondi(prezzo_pianta, quantita_vendute, costo_ingrosso_singolo): + """ + Calcola in totale trasparenza la distribuzione dei fondi + generati dalla campagna territoriale "Radici Umane". + """ + # 1. Calcolo del ricavo totale e dei costi vivi + ricavo_totale = prezzo_pianta * quantita_vendute + costi_totali = costo_ingrosso_singolo * quantita_vendute + margine_netto = ricavo_totale - costi_totali + + # 2. Modello Peace Business (Distribuzione Etica 50/50) + # Il 50% va all'Ambasciatore per il suo lavoro e la sua dignità + compenso_ambasciatore = margine_netto * 0.50 + # Il 50% va all'ecosistema Humansafe (APS) per aprire i centri e gestire la tech + fondo_humansafe = margine_netto * 0.50 + + return { + "Ricavo Totale": ricavo_totale, + "Costi Vivi (Piante/Vasi)": costi_totali, + "Margine Netto Generato": margine_netto, + "Compenso Ambasciatore": compenso_ambasciatore, + "Fondo Ecosistema Humansafe": fondo_humansafe + } + +# --- SIMULAZIONE DELLA GIORNATA DI UN AMBASCIATORE --- +if __name__ == "__main__": + print("=== SIMULATORE PEACE BUSINESS: RADICI UMANE ===") + + # Esempio: L'ambasciatore distribuisce 20 piante a 15€ l'una. Costo all'ingrosso 4€. + risultato = calcola_distribuzione_fondi(prezzo_pianta=15, quantita_vendute=20, costo_ingrosso_singolo=4) + + print(f"Piante distribuite: 20") + print(f"Ricavo Totale: € {risultato['Ricavo Totale']:.2f}") + print(f"Costi Vivi (Materiale): € {risultato['Costi Vivi (Piante/Vasi)']:.2f}") + print("-" * 40) + print(f"MARGINE NETTO: € {risultato['Margine Netto Generato']:.2f}") + print("-" * 40) + print(f"💰 Compenso Ambasciatore (Dignità): € {risultato['Compenso Ambasciatore']:.2f}") + print(f"🏛️ Fondo Humansafe APS (Strutture): € {risultato['Fondo Ecosistema Humansafe']:.2f}") + print("\n[SISTEMA]: Modello economico sostenibile. Il Peace Business è attivo.") diff --git a/dist-mobile/modules/hsi-engine.js b/dist-mobile/modules/hsi-engine.js new file mode 100644 index 0000000..e46ff7b --- /dev/null +++ b/dist-mobile/modules/hsi-engine.js @@ -0,0 +1,179 @@ +@' +import { + updateHSIProfile, + addTimelineEvent, + addBadge, + addMission +} from "./profile-engine.js"; + +const HSI_QUESTIONS = [ + { id: "awareness_1", text: "Riesco a riconoscere con chiarezza ciò che provo prima di reagire.", axis: "awareness" }, + { id: "awareness_2", text: "Mi fermo a riflettere prima di prendere decisioni importanti.", axis: "awareness" }, + { id: "awareness_3", text: "Mi accorgo quando sto vivendo in automatico.", axis: "awareness" }, + + { id: "sovereignty_1", text: "So distinguere tra ciò che penso davvero e ciò che assorbo dall’esterno.", axis: "sovereignty" }, + { id: "sovereignty_2", text: "Resisto alla pressione di conformarmi digitalmente o socialmente.", axis: "sovereignty" }, + { id: "sovereignty_3", text: "Metto in discussione contenuti e stimoli prima di accettarli.", axis: "sovereignty" }, + + { id: "resilience_1", text: "Riesco a regolare le emozioni senza esserne travolto.", axis: "resilience" }, + { id: "resilience_2", text: "Costruisco relazioni che mi fanno crescere invece di svuotarmi.", axis: "resilience" }, + { id: "resilience_3", text: "Cerco di agire in modo coerente con i miei valori.", axis: "resilience" } +]; + +const form = document.getElementById("hsi-form"); +const submitBtn = document.getElementById("submit-hsi"); +const resultBox = document.getElementById("hsi-result"); +const resultContent = document.getElementById("hsi-result-content"); +const continueBtn = document.getElementById("continue-btn"); + +function renderQuestions() { + form.innerHTML = HSI_QUESTIONS.map((q, index) => ` +
    +

    ${index + 1}. ${q.text}

    +
    + ${[1, 2, 3, 4, 5].map(value => ` + + `).join("")} +
    +
    + `).join(""); +} + +function collectAnswers() { + const answers = []; + + for (const question of HSI_QUESTIONS) { + const checked = document.querySelector(`input[name="${question.id}"]:checked`); + if (!checked) return null; + + answers.push({ + id: question.id, + axis: question.axis, + value: Number(checked.value) + }); + } + + return answers; +} + +function normalizeScore(rawScore, min = 9, max = 45) { + return Math.round(((rawScore - min) / (max - min)) * 100); +} + +function getHSIZone(score) { + if (score <= 25) return "grey"; + if (score <= 50) return "amber"; + if (score <= 75) return "blue"; + return "gold"; +} + +function getAxisScores(answers) { + return { + awareness: answers.filter(a => a.axis === "awareness").reduce((sum, a) => sum + a.value, 0), + sovereignty: answers.filter(a => a.axis === "sovereignty").reduce((sum, a) => sum + a.value, 0), + resilience: answers.filter(a => a.axis === "resilience").reduce((sum, a) => sum + a.value, 0) + }; +} + +function getArchetype(axisScores) { + const dominantAxis = Object.entries(axisScores).sort((a, b) => b[1] - a[1])[0][0]; + + switch (dominantAxis) { + case "awareness": + return "observer"; + case "sovereignty": + return "guardian"; + case "resilience": + return "builder"; + default: + return "explorer"; + } +} + +function buildDiagnosticSummary(zone, archetype) { + const zoneText = { + grey: "Ti trovi in una fase di possibile dispersione o automatismo.", + amber: "Sei in una soglia di transizione che richiede consolidamento.", + blue: "Hai una buona base di lucidità e presenza.", + gold: "Mostri una forte integrazione tra visione, etica e presenza." + }; + + const archetypeText = { + observer: "Il tuo archetipo iniziale è Observer.", + guardian: "Il tuo archetipo iniziale è Guardian.", + builder: "Il tuo archetipo iniziale è Builder.", + explorer: "Il tuo archetipo iniziale è Explorer." + }; + + return `${zoneText[zone]} ${archetypeText[archetype]}`; +} + +function showResult(data) { + resultContent.innerHTML = ` +

    HSI Score: ${data.hsi_value}

    +

    Zona: ${data.hsi_zone}

    +

    Archetipo: ${data.archetype}

    +

    ${data.diagnostic_summary}

    + `; + resultBox.classList.remove("hidden"); +} + +submitBtn?.addEventListener("click", () => { + const answers = collectAnswers(); + + if (!answers) { + alert("Compila tutte le domande prima di continuare."); + return; + } + + const rawScore = answers.reduce((sum, answer) => sum + answer.value, 0); + const hsi_value = normalizeScore(rawScore); + const hsi_zone = getHSIZone(hsi_value); + const axisScores = getAxisScores(answers); + const archetype = getArchetype(axisScores); + const diagnostic_summary = buildDiagnosticSummary(hsi_zone, archetype); + const diagnostic_completed_at = new Date().toISOString(); + + updateHSIProfile({ + hsi_value, + hsi_zone, + archetype, + diagnostic_summary, + diagnostic_completed_at + }); + + addTimelineEvent({ + type: "diagnostic_completed", + title: "HSI completato", + description: `Zona ${hsi_zone}, archetipo ${archetype}, score ${hsi_value}.` + }); + + addBadge({ + id: "first_scan", + name: "Prima Scansione", + description: "Hai completato il tuo primo orientamento HSI." + }); + + addMission({ + id: "observe_automation", + title: "Osserva il tuo automatismo", + description: "Per 12 ore, nota un momento in cui reagisci senza riflettere e annotalo nel Journal." + }); + + showResult({ + hsi_value, + hsi_zone, + archetype, + diagnostic_summary + }); +}); + +continueBtn?.addEventListener("click", () => { + window.location.href = "./lifenet_game.html"; +}); + +renderQuestions(); +'@ | Set-Content .\modules\hsi-engine.js -Encoding UTF8 diff --git a/dist-mobile/modules/iself-smart-contract/ISELF_Token.sol b/dist-mobile/modules/iself-smart-contract/ISELF_Token.sol new file mode 100644 index 0000000..adec351 --- /dev/null +++ b/dist-mobile/modules/iself-smart-contract/ISELF_Token.sol @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +/** + * @title HUMANSELF (ISELF) - Accountability Token + * @dev Questo è un "Soulbound Token" (SBT). Non è trasferibile né vendibile. + * Serve esclusivamente come layer di tracciabilità per l'ecosistema Humansafe. + * Certifica: Azioni preventive, superamento audit cognitivi, empatia sociale. + */ + +contract ISELF_Token { + string public name = "Humanself Accountability Token"; + string public symbol = "ISELF"; + + address public humansafeSystemAdmin; + + // Mappatura che associa l'indirizzo dell'utente al suo "Credito Formativo" + mapping(address => uint256) public preventiveCredits; + + // Eventi registrati pubblicamente e in modo immutabile sulla blockchain + event EvolutionRewarded(address indexed user, uint256 amount, string reason); + event TransferAttemptBlocked(address indexed from, address indexed to); + + constructor() { + humansafeSystemAdmin = msg.sender; // Il sistema Humansafe governa l'emissione + } + + // Solo i facilitatori certificati Humansafe possono validare e coniare il token + modifier onlyAdmin() { + require(msg.sender == humansafeSystemAdmin, "Azione non autorizzata. Solo Humansafe puo certificare l'evoluzione."); + _; + } + + /** + * @dev Eroga ISELF a una "Cellula" che ha completato un'azione di disintossicazione + * o ha superato un Audit B2B. + */ + function rewardCell(address _cellAddress, uint256 _amount, string memory _reason) public onlyAdmin { + preventiveCredits[_cellAddress] += _amount; + emit EvolutionRewarded(_cellAddress, _amount, _reason); + } + + /** + * @dev FUNZIONE SOULBOUND: Blocca qualsiasi tentativo di vendita o trasferimento. + * La consapevolezza e la sicurezza cognitiva non si possono comprare, si conquistano. + */ + function transfer(address _to, uint256 _amount) public returns (bool) { + emit TransferAttemptBlocked(msg.sender, _to); + revert("Trasferimento negato: ISELF e' un token legato alla tua identita' (Soulbound). Non ha valore speculativo."); + } +} diff --git a/dist-mobile/modules/profile-engine.js b/dist-mobile/modules/profile-engine.js new file mode 100644 index 0000000..f1df4b9 --- /dev/null +++ b/dist-mobile/modules/profile-engine.js @@ -0,0 +1,179 @@ +@' +const STORAGE_KEY = "humansafe_user_profile"; + +const DEFAULT_PROFILE = { + name: "Explorer", + provider: "demo", + archetype: "observer", + hsi_zone: "grey", + hsi_value: 50, + xp_total: 0, + level_name: "seed", + badges: [], + completed_missions: [], + reflections: [], + timeline: [], + community_posts: [], + diagnostic_summary: "", + diagnostic_completed_at: null, + schema_version: "1.1.0", + created_at: null, + updated_at: null +}; + +export function getDefaultProfile() { + const now = new Date().toISOString(); + return { + ...DEFAULT_PROFILE, + created_at: now, + updated_at: now + }; +} + +export function getUserProfile() { + const raw = localStorage.getItem(STORAGE_KEY); + + if (!raw) { + const profile = getDefaultProfile(); + saveUserProfile(profile); + return profile; + } + + try { + const parsed = JSON.parse(raw); + + return { + ...getDefaultProfile(), + ...parsed + }; + } catch (error) { + console.error("Errore parsing profilo:", error); + const fallback = getDefaultProfile(); + saveUserProfile(fallback); + return fallback; + } +} + +export function saveUserProfile(profile) { + const updatedProfile = { + ...profile, + updated_at: new Date().toISOString() + }; + + localStorage.setItem(STORAGE_KEY, JSON.stringify(updatedProfile)); + return updatedProfile; +} + +export function resetUserProfile() { + const profile = getDefaultProfile(); + saveUserProfile(profile); + return profile; +} + +export function updateUserProfile(partialData) { + const profile = getUserProfile(); + + const updated = { + ...profile, + ...partialData, + updated_at: new Date().toISOString() + }; + + saveUserProfile(updated); + return updated; +} + +export function updateHSIProfile(data) { + return updateUserProfile({ + hsi_value: data.hsi_value, + hsi_zone: data.hsi_zone, + archetype: data.archetype, + diagnostic_summary: data.diagnostic_summary, + diagnostic_completed_at: data.diagnostic_completed_at + }); +} + +export function addTimelineEvent(event) { + const profile = getUserProfile(); + + const timelineEvent = { + id: `evt_${Date.now()}`, + type: event.type || "generic", + title: event.title || "Evento", + description: event.description || "", + created_at: new Date().toISOString() + }; + + const updatedTimeline = [timelineEvent, ...(profile.timeline || [])]; + + return updateUserProfile({ + timeline: updatedTimeline + }); +} + +export function addBadge(badge) { + const profile = getUserProfile(); + const badges = profile.badges || []; + + const exists = badges.some(b => b.id === badge.id); + if (exists) return profile; + + const newBadge = { + id: badge.id, + name: badge.name, + description: badge.description || "", + created_at: new Date().toISOString() + }; + + return updateUserProfile({ + badges: [newBadge, ...badges] + }); +} + +export function addMission(mission) { + const profile = getUserProfile(); + const missions = profile.completed_missions || []; + + const exists = missions.some(m => m.id === mission.id); + if (exists) return profile; + + const newMission = { + id: mission.id, + title: mission.title, + description: mission.description || "", + created_at: new Date().toISOString() + }; + + return updateUserProfile({ + completed_missions: [newMission, ...missions] + }); +} + +export function addReflection(reflectionText) { + const profile = getUserProfile(); + + const reflection = { + id: `refl_${Date.now()}`, + text: reflectionText, + created_at: new Date().toISOString() + }; + + return updateUserProfile({ + reflections: [reflection, ...(profile.reflections || [])] + }); +} + +export function addCommunityPost(post) { + const profile = getUserProfile(); + + const communityPost = { + id: `post_${Date.now()}`, + text: post.text || "", + created_at: new Date().toISOString() + }; + + return updateUserProfile({ + community_posts: [communityPost, ...(profile.community_posts || [])] + }); +} +'@ | Set-Content .\modules\profile-engine.js -Encoding UTF8 diff --git a/dist-mobile/profile.html b/dist-mobile/profile.html new file mode 100644 index 0000000..8111c56 --- /dev/null +++ b/dist-mobile/profile.html @@ -0,0 +1,435 @@ + + + + + + HUMANSAFE Profile | Profile Layer + + + + +
    +
    +
    +
    HUMANSAFE Profile Layer
    + ← Torna a HUMANSAFE CORE +
    + +

    Centro identitario del percorso

    +

    + Il Profile Layer raccoglie lo stato evolutivo complessivo dell’utente: + identità, livello, badge, missioni, riflessioni e segnali principali. +

    + + + +
    + Prossimi upgrade del Profile Layer +

    + Nome modificabile, reset percorso, avatar, statistiche avanzate, + sincronizzazione cloud, autenticazione reale, livelli globali e dashboard completa. +

    +
    +
    + +
    +
    +

    Stato utente

    +
    +
    + Nome profilo + Caricamento... +
    +
    + Archetipo + Caricamento... +
    +
    + Zona HSI + Caricamento... +
    +
    + HSI + Caricamento... +
    +
    + XP Totale + 0 +
    +
    + Livello + Caricamento... +
    +
    + Provider + Caricamento... +
    +
    + Ultimo aggiornamento + Caricamento... +
    +
    + +
    +

    Badge globali

    +
    +
    + +
    +

    Missioni completate

    +
    +
    +
    + +
    +

    Attività recente

    + +
    +

    Ultime riflessioni

    +
    +
    + +
    +

    Eventi recenti

    +
    +
    +
    +
    +
    + + + + diff --git a/dist-mobile/service-worker.js b/dist-mobile/service-worker.js new file mode 100644 index 0000000..868d38e --- /dev/null +++ b/dist-mobile/service-worker.js @@ -0,0 +1,23 @@ +const CACHE_NAME = "humansafe-cache-v1"; + +const urlsToCache = [ + "/", + "/index.html", + "/lifenet_game.html", + "/journal.html", + "/social.html" +]; + +self.addEventListener("install", event => { + event.waitUntil( + caches.open(CACHE_NAME) + .then(cache => cache.addAll(urlsToCache)) + ); +}); + +self.addEventListener("fetch", event => { + event.respondWith( + caches.match(event.request) + .then(response => response || fetch(event.request)) + ); +}); diff --git a/dist-mobile/social.html b/dist-mobile/social.html new file mode 100644 index 0000000..342a6b6 --- /dev/null +++ b/dist-mobile/social.html @@ -0,0 +1,518 @@ + + + + + + HUMANSAFE Circle | Community Layer + + + + +
    +
    +
    +
    HUMANSAFE Circle Layer
    + ← Torna a HUMANSAFE CORE +
    + +

    Condivisione etica del percorso

    +

    + HUMANSAFE Circle non è un social classico. È uno spazio per condividere missioni, + riflessioni, checkpoint e richieste di aiuto senza trasformare tutto in rumore o gara. +

    + + +
    + +
    +
    +

    Condividi nel Circle

    + +
    +
    + + +
    + +
    + + +
    + +
    + + +
    + + +
    + +
    +
    + + +
    +
    + + + + diff --git a/dist-mobile/user-data/demo_profile.json b/dist-mobile/user-data/demo_profile.json new file mode 100644 index 0000000..24ddccf --- /dev/null +++ b/dist-mobile/user-data/demo_profile.json @@ -0,0 +1,56 @@ +{ + "name": "Messoud Demo Profile", + "archetype": "Cellula in Risveglio", + "hsi_zone": "Zona Verde", + "xp_total": 64, + "level_name": "Osservatore Lucido", + "last_update": "2026-03-11", + "badges": [ + "Primo Risveglio", + "Specchio Pulito", + "Presenza Reale" + ], + "completed_missions": [ + { + "id": "missione_01", + "title": "10 minuti senza schermo", + "description": "Resta per 10 minuti senza schermo, musica o distrazioni digitali.", + "reward_xp": 5, + "ethical_value": "presenza" + }, + { + "id": "missione_03", + "title": "Conversazione piena", + "description": "Fai una conversazione reale senza toccare il telefono.", + "reward_xp": 10, + "ethical_value": "empatia" + } + ], + "reflections": [ + { + "date": "2026-03-10", + "text": "Quando sento attrito, la tentazione di rifugiarmi nel telefono arriva prima del pensiero. Ma adesso riesco a vederla." + }, + { + "date": "2026-03-11", + "text": "La presenza reale non è assenza di caos. È capacità di restare anche quando vorrei fuggire." + } + ], + "timeline": [ + { + "date": "2026-03-09", + "title": "Prima scansione HSI", + "description": "Avvio del percorso con lettura iniziale del profilo cognitivo." + }, + { + "date": "2026-03-10", + "title": "Ingresso in LIFENET", + "description": "Primi scenari completati e primo contatto con HUMANSAFE ORACLE." + }, + { + "date": "2026-03-11", + "title": "Missione reale completata", + "description": "Prima azione offline registrata nel Diario di Bordo." + } + ] +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..fccb158 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1074 @@ +{ + "name": "humansafe-core", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "humansafe-core", + "version": "1.0.0", + "dependencies": { + "@capacitor/android": "^7.0.0", + "@capacitor/cli": "^7.0.0", + "@capacitor/core": "^7.0.0" + } + }, + "node_modules/@capacitor/android": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@capacitor/android/-/android-7.6.0.tgz", + "integrity": "sha512-xpfAOGcgeQnTw8C0E9nLjW15lQ6TL2ccieZks93hNiQYknnQT8FQaH2paMYkLYrQ0JfRImdBXbQ1u6sZ4kVa3w==", + "license": "MIT", + "peerDependencies": { + "@capacitor/core": "^7.6.0" + } + }, + "node_modules/@capacitor/cli": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-7.6.0.tgz", + "integrity": "sha512-3PL8xIgXLj1037NqmuzoKXNOi80AdY7eSCnX6/A7RfjFqT8TEiCL+PlHsHtg6/BSZGSmmxGGBjH3nXrNCRoFhw==", + "license": "MIT", + "dependencies": { + "@ionic/cli-framework-output": "^2.2.8", + "@ionic/utils-subprocess": "^3.0.1", + "@ionic/utils-terminal": "^2.3.5", + "commander": "^12.1.0", + "debug": "^4.4.0", + "env-paths": "^2.2.0", + "fs-extra": "^11.2.0", + "kleur": "^4.1.5", + "native-run": "^2.0.3", + "open": "^8.4.0", + "plist": "^3.1.0", + "prompts": "^2.4.2", + "rimraf": "^6.0.1", + "semver": "^7.6.3", + "tar": "^7.5.3", + "tslib": "^2.8.1", + "xml2js": "^0.6.2" + }, + "bin": { + "cap": "bin/capacitor", + "capacitor": "bin/capacitor" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@capacitor/core": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-7.6.0.tgz", + "integrity": "sha512-K6LEvgxW6Nd6uNWHj3U512hUtB4kln71TvVgdvwJRFMLySpUrWwb/A8Q7c3QGogvPvgOjN1U65onkyRTihPGwA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@ionic/cli-framework-output": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@ionic/cli-framework-output/-/cli-framework-output-2.2.8.tgz", + "integrity": "sha512-TshtaFQsovB4NWRBydbNFawql6yul7d5bMiW1WYYf17hd99V6xdDdk3vtF51bw6sLkxON3bDQpWsnUc9/hVo3g==", + "license": "MIT", + "dependencies": { + "@ionic/utils-terminal": "2.3.5", + "debug": "^4.0.0", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@ionic/utils-array": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@ionic/utils-array/-/utils-array-2.1.6.tgz", + "integrity": "sha512-0JZ1Zkp3wURnv8oq6Qt7fMPo5MpjbLoUoa9Bu2Q4PJuSDWM8H8gwF3dQO7VTeUj3/0o1IB1wGkFWZZYgUXZMUg==", + "license": "MIT", + "dependencies": { + "debug": "^4.0.0", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@ionic/utils-fs": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@ionic/utils-fs/-/utils-fs-3.1.7.tgz", + "integrity": "sha512-2EknRvMVfhnyhL1VhFkSLa5gOcycK91VnjfrTB0kbqkTFCOXyXgVLI5whzq7SLrgD9t1aqos3lMMQyVzaQ5gVA==", + "license": "MIT", + "dependencies": { + "@types/fs-extra": "^8.0.0", + "debug": "^4.0.0", + "fs-extra": "^9.0.0", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@ionic/utils-fs/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@ionic/utils-object": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@ionic/utils-object/-/utils-object-2.1.6.tgz", + "integrity": "sha512-vCl7sl6JjBHFw99CuAqHljYJpcE88YaH2ZW4ELiC/Zwxl5tiwn4kbdP/gxi2OT3MQb1vOtgAmSNRtusvgxI8ww==", + "license": "MIT", + "dependencies": { + "debug": "^4.0.0", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@ionic/utils-process": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@ionic/utils-process/-/utils-process-2.1.12.tgz", + "integrity": "sha512-Jqkgyq7zBs/v/J3YvKtQQiIcxfJyplPgECMWgdO0E1fKrrH8EF0QGHNJ9mJCn6PYe2UtHNS8JJf5G21e09DfYg==", + "license": "MIT", + "dependencies": { + "@ionic/utils-object": "2.1.6", + "@ionic/utils-terminal": "2.3.5", + "debug": "^4.0.0", + "signal-exit": "^3.0.3", + "tree-kill": "^1.2.2", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@ionic/utils-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@ionic/utils-stream/-/utils-stream-3.1.7.tgz", + "integrity": "sha512-eSELBE7NWNFIHTbTC2jiMvh1ABKGIpGdUIvARsNPMNQhxJB3wpwdiVnoBoTYp+5a6UUIww4Kpg7v6S7iTctH1w==", + "license": "MIT", + "dependencies": { + "debug": "^4.0.0", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@ionic/utils-subprocess": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@ionic/utils-subprocess/-/utils-subprocess-3.0.1.tgz", + "integrity": "sha512-cT4te3AQQPeIM9WCwIg8ohroJ8TjsYaMb2G4ZEgv9YzeDqHZ4JpeIKqG2SoaA3GmVQ3sOfhPM6Ox9sxphV/d1A==", + "license": "MIT", + "dependencies": { + "@ionic/utils-array": "2.1.6", + "@ionic/utils-fs": "3.1.7", + "@ionic/utils-process": "2.1.12", + "@ionic/utils-stream": "3.1.7", + "@ionic/utils-terminal": "2.3.5", + "cross-spawn": "^7.0.3", + "debug": "^4.0.0", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@ionic/utils-terminal": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@ionic/utils-terminal/-/utils-terminal-2.3.5.tgz", + "integrity": "sha512-3cKScz9Jx2/Pr9ijj1OzGlBDfcmx7OMVBt4+P1uRR0SSW4cm1/y3Mo4OY3lfkuaYifMNBW8Wz6lQHbs1bihr7A==", + "license": "MIT", + "dependencies": { + "@types/slice-ansi": "^4.0.0", + "debug": "^4.0.0", + "signal-exit": "^3.0.3", + "slice-ansi": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "tslib": "^2.0.1", + "untildify": "^4.0.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@types/fs-extra": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.5.tgz", + "integrity": "sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz", + "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/@types/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-+OpjSaq85gvlZAYINyzKpLeiFkSC4EsC6IIiT6v6TLSU5k5U83fHGj9Lel8oKEXM0HqgrMVCjXPDPVICtxF7EQ==", + "license": "MIT" + }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz", + "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "license": "Unlicense", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/bplist-parser": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz", + "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==", + "license": "MIT", + "dependencies": { + "big-integer": "1.6.x" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/elementtree": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz", + "integrity": "sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg==", + "license": "Apache-2.0", + "dependencies": { + "sax": "1.1.4" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fs-extra": { + "version": "11.3.4", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", + "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/lru-cache": { + "version": "11.2.7", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", + "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/minimatch": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/native-run": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/native-run/-/native-run-2.0.3.tgz", + "integrity": "sha512-U1PllBuzW5d1gfan+88L+Hky2eZx+9gv3Pf6rNBxKbORxi7boHzqiA6QFGSnqMem4j0A9tZ08NMIs5+0m/VS1Q==", + "license": "MIT", + "dependencies": { + "@ionic/utils-fs": "^3.1.7", + "@ionic/utils-terminal": "^2.3.4", + "bplist-parser": "^0.3.2", + "debug": "^4.3.4", + "elementtree": "^0.1.7", + "ini": "^4.1.1", + "plist": "^3.1.0", + "split2": "^4.2.0", + "through2": "^4.0.2", + "tslib": "^2.6.2", + "yauzl": "^2.10.0" + }, + "bin": { + "native-run": "bin/native-run" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "license": "MIT" + }, + "node_modules/plist": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", + "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", + "license": "MIT", + "dependencies": { + "@xmldom/xmldom": "^0.8.8", + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" + }, + "engines": { + "node": ">=10.4.0" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prompts/node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/rimraf": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.1.3.tgz", + "integrity": "sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "glob": "^13.0.3", + "package-json-from-dist": "^1.0.1" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/sax": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz", + "integrity": "sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg==", + "license": "ISC" + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar": { + "version": "7.5.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.11.tgz", + "integrity": "sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "license": "MIT", + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "license": "MIT" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/xml2js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xml2js/node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "license": "MIT", + "engines": { + "node": ">=8.0" + } + }, + "node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..dbd76b8 --- /dev/null +++ b/package.json @@ -0,0 +1,16 @@ +{ + "name": "humansafe-core", + "version": "1.0.0", + "private": true, + "description": "HUMANSAFE OS mobile wrapper and build tools", + "scripts": { + "build:mobile": "powershell -ExecutionPolicy Bypass -File .\\build-mobile.ps1", + "cap:sync": "npx cap sync android", + "mobile:prepare": "npm run build:mobile && npm run cap:sync" + }, + "dependencies": { + "@capacitor/android": "^7.0.0", + "@capacitor/cli": "^7.0.0", + "@capacitor/core": "^7.0.0" + } +}