Spaces:
Sleeping
Sleeping
Upload 16 files
Browse files- 1d_similarity_visualization.html +0 -0
- Dockerfile +21 -0
- README.md +5 -4
- app.py +486 -0
- chunks.json +114 -0
- closest_chunk.txt +3 -0
- embeddings.pkl +3 -0
- rag_utils.py +31 -0
- religions_corpus.txt +196 -0
- requirements.txt +4 -0
- static/landing.css +455 -0
- static/script.js +316 -0
- static/style.css +641 -0
- templates/index.html +146 -0
- templates/landing.html +113 -0
- tsne_visualization.html +0 -0
1d_similarity_visualization.html
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
Dockerfile
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
FROM python:3.9
|
| 2 |
+
|
| 3 |
+
RUN useradd -m -u 1000 user
|
| 4 |
+
USER user
|
| 5 |
+
ENV PATH="/home/user/.local/bin:$PATH"
|
| 6 |
+
|
| 7 |
+
WORKDIR /app
|
| 8 |
+
|
| 9 |
+
COPY --chown=user ./requirements.txt requirements.txt
|
| 10 |
+
RUN pip install --no-cache-dir --upgrade -r requirements.txt
|
| 11 |
+
|
| 12 |
+
COPY --chown=user . /app
|
| 13 |
+
|
| 14 |
+
# Install Flask
|
| 15 |
+
RUN pip install flask gunicorn pymupdf tiktoken
|
| 16 |
+
|
| 17 |
+
# Expose default port
|
| 18 |
+
EXPOSE 7860
|
| 19 |
+
|
| 20 |
+
# Run with Gunicorn
|
| 21 |
+
CMD ["gunicorn", "-w", "1", "-b", "0.0.0.0:7860", "app:app"]
|
README.md
CHANGED
|
@@ -1,10 +1,11 @@
|
|
| 1 |
---
|
| 2 |
-
title:
|
| 3 |
-
emoji:
|
| 4 |
-
colorFrom:
|
| 5 |
-
colorTo:
|
| 6 |
sdk: docker
|
| 7 |
pinned: false
|
|
|
|
| 8 |
---
|
| 9 |
|
| 10 |
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
|
|
|
| 1 |
---
|
| 2 |
+
title: Spiritual Path Assessment Tool
|
| 3 |
+
emoji: π
|
| 4 |
+
colorFrom: yellow
|
| 5 |
+
colorTo: green
|
| 6 |
sdk: docker
|
| 7 |
pinned: false
|
| 8 |
+
license: apache-2.0
|
| 9 |
---
|
| 10 |
|
| 11 |
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
app.py
ADDED
|
@@ -0,0 +1,486 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Concept: Flask + HTML Integration - Spiritual Path Assessment Tool
|
| 3 |
+
This app helps users discover which religious or spiritual path aligns with their
|
| 4 |
+
beliefs, values, lifestyle, and background through an interactive questionnaire.
|
| 5 |
+
"""
|
| 6 |
+
# cSpell:ignore jsonify werkzeug dotenv puja moksha sikhism jainism shintoism paganism wicca
|
| 7 |
+
|
| 8 |
+
from flask import Flask, render_template, request, jsonify, session, redirect, url_for
|
| 9 |
+
from werkzeug.security import generate_password_hash, check_password_hash
|
| 10 |
+
import json
|
| 11 |
+
import os
|
| 12 |
+
from dotenv import load_dotenv
|
| 13 |
+
from together import Together
|
| 14 |
+
from rag_utils import load_religions_from_csv, prepare_religion_rag_context
|
| 15 |
+
|
| 16 |
+
load_dotenv()
|
| 17 |
+
|
| 18 |
+
app = Flask(__name__)
|
| 19 |
+
app.secret_key = 'spiritual-journey-finder-2024'
|
| 20 |
+
|
| 21 |
+
# Session configuration for production deployment
|
| 22 |
+
app.config['SESSION_COOKIE_SECURE'] = False # For HTTP
|
| 23 |
+
app.config['SESSION_COOKIE_HTTPONLY'] = True
|
| 24 |
+
app.config['SESSION_COOKIE_SAMESITE'] = 'Lax'
|
| 25 |
+
app.config['PERMANENT_SESSION_LIFETIME'] = 3600 # 1 hour
|
| 26 |
+
|
| 27 |
+
# File to store user data - defaults to current directory (writable in Docker)
|
| 28 |
+
USERS_FILE = os.getenv("USERS_FILE", "users_data.json")
|
| 29 |
+
|
| 30 |
+
# Together API for chatbot
|
| 31 |
+
TOGETHER_API_KEY = os.getenv("TOGETHER_API_KEY")
|
| 32 |
+
client = Together(api_key=TOGETHER_API_KEY) if TOGETHER_API_KEY else None
|
| 33 |
+
|
| 34 |
+
# Load detailed religion data at startup
|
| 35 |
+
RELIGIONS_CSV = load_religions_from_csv('religions.csv')
|
| 36 |
+
|
| 37 |
+
# Assessment Questions
|
| 38 |
+
QUESTIONS = [
|
| 39 |
+
{
|
| 40 |
+
"id": 1,
|
| 41 |
+
"question": "What is your view on the nature of the divine?",
|
| 42 |
+
"options": {
|
| 43 |
+
"One supreme God who created everything": {"christianity": 3, "islam": 3, "judaism": 3},
|
| 44 |
+
"Multiple gods and goddesses": {"hinduism": 3, "paganism": 3},
|
| 45 |
+
"A universal energy or force": {"buddhism": 2, "taoism": 3, "new_age": 3},
|
| 46 |
+
"No divine being, focus on human potential": {"humanism": 3, "atheism": 3},
|
| 47 |
+
"Uncertain or unknowable": {"agnosticism": 3}
|
| 48 |
+
}
|
| 49 |
+
},
|
| 50 |
+
{
|
| 51 |
+
"id": 2,
|
| 52 |
+
"question": "How do you prefer to connect with spirituality?",
|
| 53 |
+
"options": {
|
| 54 |
+
"Through organized worship and community": {"christianity": 2, "islam": 2, "judaism": 2},
|
| 55 |
+
"Through personal meditation and reflection": {"buddhism": 3, "hinduism": 2, "taoism": 2},
|
| 56 |
+
"Through nature and natural cycles": {"paganism": 3, "indigenous": 3},
|
| 57 |
+
"Through reason and philosophy": {"humanism": 2, "stoicism": 3},
|
| 58 |
+
"I don't feel the need for spiritual connection": {"atheism": 3}
|
| 59 |
+
}
|
| 60 |
+
},
|
| 61 |
+
{
|
| 62 |
+
"id": 3,
|
| 63 |
+
"question": "What is your belief about the afterlife?",
|
| 64 |
+
"options": {
|
| 65 |
+
"Heaven or Hell based on faith/deeds": {"christianity": 3, "islam": 3},
|
| 66 |
+
"Reincarnation until enlightenment": {"hinduism": 3, "buddhism": 3},
|
| 67 |
+
"Ancestral realm or spiritual world": {"indigenous": 2, "paganism": 2},
|
| 68 |
+
"No afterlife, this life is all there is": {"atheism": 3, "humanism": 2},
|
| 69 |
+
"Unsure or open to possibilities": {"agnosticism": 2, "new_age": 2}
|
| 70 |
+
}
|
| 71 |
+
},
|
| 72 |
+
{
|
| 73 |
+
"id": 4,
|
| 74 |
+
"question": "What guides your moral and ethical decisions?",
|
| 75 |
+
"options": {
|
| 76 |
+
"Sacred texts and religious teachings": {"christianity": 3, "islam": 3, "judaism": 3},
|
| 77 |
+
"Universal principles of compassion and mindfulness": {"buddhism": 3, "jainism": 3},
|
| 78 |
+
"Harmony with nature and balance": {"taoism": 3, "indigenous": 2},
|
| 79 |
+
"Reason, empathy, and human rights": {"humanism": 3, "secularism": 3},
|
| 80 |
+
"Personal intuition and inner wisdom": {"new_age": 2, "spiritualism": 3}
|
| 81 |
+
}
|
| 82 |
+
},
|
| 83 |
+
{
|
| 84 |
+
"id": 5,
|
| 85 |
+
"question": "What role does ritual or practice play in your life?",
|
| 86 |
+
"options": {
|
| 87 |
+
"Regular prayer and worship are essential": {"islam": 3, "christianity": 2, "judaism": 2},
|
| 88 |
+
"Daily meditation or mindfulness practice": {"buddhism": 3, "hinduism": 2, "zen": 3},
|
| 89 |
+
"Seasonal celebrations and ceremonies": {"paganism": 3, "wicca": 3},
|
| 90 |
+
"Minimal to no ritual, prefer intellectual engagement": {"humanism": 2, "deism": 2},
|
| 91 |
+
"Flexible, whatever feels meaningful to me": {"new_age": 2, "spiritual_not_religious": 3}
|
| 92 |
+
}
|
| 93 |
+
},
|
| 94 |
+
{
|
| 95 |
+
"id": 6,
|
| 96 |
+
"question": "How do you view the relationship between humans and nature?",
|
| 97 |
+
"options": {
|
| 98 |
+
"Humans are stewards of God's creation": {"christianity": 2, "islam": 2, "judaism": 2},
|
| 99 |
+
"All life is interconnected and sacred": {"buddhism": 2, "hinduism": 2, "jainism": 3},
|
| 100 |
+
"Nature itself is divine": {"paganism": 3, "pantheism": 3, "indigenous": 3},
|
| 101 |
+
"Nature follows natural laws we can understand": {"atheism": 2, "humanism": 2},
|
| 102 |
+
"We should live in harmony with natural flow": {"taoism": 3, "shintoism": 2}
|
| 103 |
+
}
|
| 104 |
+
},
|
| 105 |
+
{
|
| 106 |
+
"id": 7,
|
| 107 |
+
"question": "What is your view on suffering and its purpose?",
|
| 108 |
+
"options": {
|
| 109 |
+
"A test of faith or part of God's plan": {"christianity": 2, "islam": 2},
|
| 110 |
+
"Result of attachment and desire": {"buddhism": 3, "stoicism": 2},
|
| 111 |
+
"Karma from past actions": {"hinduism": 3, "sikhism": 2},
|
| 112 |
+
"Random or result of natural causes": {"atheism": 3, "secular": 2},
|
| 113 |
+
"An opportunity for growth and learning": {"new_age": 2, "spiritualism": 2}
|
| 114 |
+
}
|
| 115 |
+
},
|
| 116 |
+
{
|
| 117 |
+
"id": 8,
|
| 118 |
+
"question": "How important is community in your spiritual life?",
|
| 119 |
+
"options": {
|
| 120 |
+
"Very important, prefer group worship": {"christianity": 2, "islam": 2, "sikhism": 3},
|
| 121 |
+
"Somewhat important, but personal practice matters more": {"buddhism": 2, "hinduism": 2},
|
| 122 |
+
"Community of like-minded seekers": {"paganism": 2, "unitarian": 3},
|
| 123 |
+
"Not important, spirituality is personal": {"spiritual_not_religious": 3, "deism": 2},
|
| 124 |
+
"Prefer secular community over religious": {"humanism": 2, "atheism": 2}
|
| 125 |
+
}
|
| 126 |
+
}
|
| 127 |
+
]
|
| 128 |
+
|
| 129 |
+
# Religion Descriptions
|
| 130 |
+
RELIGIONS = {
|
| 131 |
+
"christianity": {"name": "Christianity", "description": "Faith in Jesus Christ emphasizing love, forgiveness, and salvation through grace.", "practices": "Prayer, Bible study, church, communion", "core_beliefs": "Trinity, salvation through Christ, eternal life"},
|
| 132 |
+
"islam": {"name": "Islam", "description": "Submission to Allah through Prophet Muhammad's teachings and the Quran.", "practices": "Five daily prayers, Ramadan fasting, charity, Mecca pilgrimage", "core_beliefs": "One God (Allah), Muhammad as prophet, Day of Judgment"},
|
| 133 |
+
"buddhism": {"name": "Buddhism", "description": "Path to enlightenment through mindfulness and compassion.", "practices": "Meditation, mindfulness, Eightfold Path", "core_beliefs": "Four Noble Truths, impermanence, ending suffering"},
|
| 134 |
+
"hinduism": {"name": "Hinduism", "description": "Ancient tradition embracing diverse paths to spiritual realization.", "practices": "Yoga, meditation, puja, festivals", "core_beliefs": "Dharma, karma, reincarnation, moksha, multiple paths"},
|
| 135 |
+
"judaism": {"name": "Judaism", "description": "Covenant with God through Torah and Jewish community.", "practices": "Shabbat, Torah study, prayer, kosher", "core_beliefs": "One God, Torah as divine law, ethical monotheism"},
|
| 136 |
+
"taoism": {"name": "Taoism", "description": "Living in harmony with the Tao - the natural order.", "practices": "Meditation, tai chi, wu wei, simplicity", "core_beliefs": "Yin-yang balance, harmony with nature"},
|
| 137 |
+
"paganism": {"name": "Modern Paganism", "description": "Nature-based spirituality honoring seasonal cycles.", "practices": "Seasonal celebrations, rituals, nature work", "core_beliefs": "Nature as sacred, multiple deities"},
|
| 138 |
+
"humanism": {"name": "Secular Humanism", "description": "Ethics emphasizing human values and reason without supernatural beliefs.", "practices": "Critical thinking, ethical living, community service", "core_beliefs": "Human dignity, reason, science, secular ethics"},
|
| 139 |
+
"atheism": {"name": "Atheism", "description": "Lack of belief in deities with naturalistic worldview.", "practices": "Evidence-based thinking, secular community", "core_beliefs": "No gods, natural explanations, this-life focus"},
|
| 140 |
+
"agnosticism": {"name": "Agnosticism", "description": "Divine existence is unknown or unknowable.", "practices": "Philosophical inquiry, ethical living", "core_beliefs": "Uncertainty about divine, questions over answers"},
|
| 141 |
+
"new_age": {"name": "New Age Spirituality", "description": "Eclectic approach emphasizing personal growth.", "practices": "Meditation, energy work, crystals, yoga", "core_beliefs": "Personal transformation, universal consciousness"},
|
| 142 |
+
"spiritual_not_religious": {"name": "Spiritual But Not Religious", "description": "Personal spirituality without organized religion.", "practices": "Personal practices, meditation, self-reflection", "core_beliefs": "Individual journey, authenticity, diverse wisdom"},
|
| 143 |
+
"sikhism": {"name": "Sikhism", "description": "One God emphasizing service, equality, and meditation.", "practices": "Prayer, meditation, community service, 5 Ks", "core_beliefs": "One God, equality, honest living, sharing"},
|
| 144 |
+
"indigenous": {"name": "Indigenous Spirituality", "description": "Traditional practices honoring ancestors and land.", "practices": "Ceremonies, storytelling, seasonal rituals", "core_beliefs": "Land connection, ancestor veneration, reciprocity"}
|
| 145 |
+
}
|
| 146 |
+
|
| 147 |
+
def load_users():
|
| 148 |
+
"""Load users from JSON file"""
|
| 149 |
+
try:
|
| 150 |
+
if os.path.exists(USERS_FILE):
|
| 151 |
+
with open(USERS_FILE, 'r') as f:
|
| 152 |
+
return json.load(f)
|
| 153 |
+
except Exception as e:
|
| 154 |
+
print(f"Error loading users: {e}")
|
| 155 |
+
return {}
|
| 156 |
+
|
| 157 |
+
def save_users(users):
|
| 158 |
+
"""Save users to JSON file"""
|
| 159 |
+
try:
|
| 160 |
+
# Ensure parent directory exists
|
| 161 |
+
os.makedirs(os.path.dirname(USERS_FILE) if os.path.dirname(USERS_FILE) else '.', exist_ok=True)
|
| 162 |
+
with open(USERS_FILE, 'w') as f:
|
| 163 |
+
json.dump(users, f, indent=2)
|
| 164 |
+
return True
|
| 165 |
+
except Exception as e:
|
| 166 |
+
print(f"Error saving users: {e}")
|
| 167 |
+
return False
|
| 168 |
+
|
| 169 |
+
def initialize_default_user():
|
| 170 |
+
"""Create default test user if no users exist"""
|
| 171 |
+
users = load_users()
|
| 172 |
+
if not users: # Only create if no users exist
|
| 173 |
+
users['test'] = {
|
| 174 |
+
'password': generate_password_hash('test'),
|
| 175 |
+
'answers': [],
|
| 176 |
+
'results': []
|
| 177 |
+
}
|
| 178 |
+
save_users(users)
|
| 179 |
+
print("β
Default test user created (username: test, password: test)")
|
| 180 |
+
|
| 181 |
+
def calculate_results(answers):
|
| 182 |
+
"""Calculate which spiritual paths align with user's answers"""
|
| 183 |
+
scores = {}
|
| 184 |
+
|
| 185 |
+
for answer in answers:
|
| 186 |
+
question = next((q for q in QUESTIONS if q["id"] == answer["question_id"]), None)
|
| 187 |
+
if question and answer["answer"] in question["options"]:
|
| 188 |
+
points = question["options"][answer["answer"]]
|
| 189 |
+
for religion, score in points.items():
|
| 190 |
+
scores[religion] = scores.get(religion, 0) + score
|
| 191 |
+
|
| 192 |
+
# Sort by score
|
| 193 |
+
sorted_scores = sorted(scores.items(), key=lambda x: x[1], reverse=True)
|
| 194 |
+
|
| 195 |
+
# Get top 3 recommendations
|
| 196 |
+
recommendations = []
|
| 197 |
+
for religion_key, score in sorted_scores[:3]:
|
| 198 |
+
if religion_key in RELIGIONS:
|
| 199 |
+
religion_info = RELIGIONS[religion_key].copy()
|
| 200 |
+
religion_info["score"] = score
|
| 201 |
+
religion_info["percentage"] = round((score / (len(answers) * 3)) * 100)
|
| 202 |
+
recommendations.append(religion_info)
|
| 203 |
+
|
| 204 |
+
return recommendations
|
| 205 |
+
|
| 206 |
+
@app.route("/")
|
| 207 |
+
def landing():
|
| 208 |
+
return render_template('landing.html')
|
| 209 |
+
|
| 210 |
+
@app.route("/assessment")
|
| 211 |
+
def assessment():
|
| 212 |
+
if 'username' not in session:
|
| 213 |
+
return redirect(url_for('login'))
|
| 214 |
+
|
| 215 |
+
users = load_users()
|
| 216 |
+
user_data = users.get(session['username'], {})
|
| 217 |
+
has_results = 'results' in user_data and user_data['results']
|
| 218 |
+
|
| 219 |
+
return render_template(
|
| 220 |
+
"index.html",
|
| 221 |
+
title="Spiritual Path Finder",
|
| 222 |
+
message=f"Welcome, {session['username']}! π",
|
| 223 |
+
username=session['username'],
|
| 224 |
+
logged_in=True,
|
| 225 |
+
questions=QUESTIONS,
|
| 226 |
+
has_results=has_results,
|
| 227 |
+
results=user_data.get('results', []) if has_results else []
|
| 228 |
+
)
|
| 229 |
+
|
| 230 |
+
@app.route("/login", methods=["GET", "POST"])
|
| 231 |
+
def login():
|
| 232 |
+
if request.method == "POST":
|
| 233 |
+
try:
|
| 234 |
+
data = request.get_json()
|
| 235 |
+
if not data:
|
| 236 |
+
return jsonify({"success": False, "message": "Invalid request"}), 400
|
| 237 |
+
|
| 238 |
+
username = data.get('username', '').strip()
|
| 239 |
+
password = data.get('password', '')
|
| 240 |
+
|
| 241 |
+
if not username or not password:
|
| 242 |
+
return jsonify({"success": False, "message": "Username and password required"}), 400
|
| 243 |
+
|
| 244 |
+
users = load_users()
|
| 245 |
+
if username in users:
|
| 246 |
+
stored = users[username]['password']
|
| 247 |
+
|
| 248 |
+
# 1) Try hash-based verification (works for any Werkzeug scheme)
|
| 249 |
+
try:
|
| 250 |
+
if check_password_hash(stored, password):
|
| 251 |
+
session['username'] = username
|
| 252 |
+
return jsonify({"success": True})
|
| 253 |
+
except Exception:
|
| 254 |
+
pass # if stored isn't a hash string, we'll try plaintext next
|
| 255 |
+
|
| 256 |
+
# 2) Legacy plaintext fallback β upgrade to a hash
|
| 257 |
+
if stored == password:
|
| 258 |
+
users[username]['password'] = generate_password_hash(password)
|
| 259 |
+
if not save_users(users):
|
| 260 |
+
return jsonify({"success": False, "message": "Error saving data"}), 500
|
| 261 |
+
session['username'] = username
|
| 262 |
+
return jsonify({"success": True})
|
| 263 |
+
|
| 264 |
+
return jsonify({"success": False, "message": "Invalid credentials"})
|
| 265 |
+
except Exception as e:
|
| 266 |
+
print(f"Login error: {e}")
|
| 267 |
+
return jsonify({"success": False, "message": "Server error"}), 500
|
| 268 |
+
|
| 269 |
+
return render_template("index.html", logged_in=False, is_signup=False)
|
| 270 |
+
|
| 271 |
+
@app.route("/signup", methods=["GET", "POST"])
|
| 272 |
+
def signup():
|
| 273 |
+
if request.method == "POST":
|
| 274 |
+
try:
|
| 275 |
+
data = request.get_json()
|
| 276 |
+
if not data:
|
| 277 |
+
return jsonify({"success": False, "message": "Invalid request"}), 400
|
| 278 |
+
|
| 279 |
+
username = data.get('username', '').strip()
|
| 280 |
+
password = data.get('password', '')
|
| 281 |
+
|
| 282 |
+
if not username or not password:
|
| 283 |
+
return jsonify({"success": False, "message": "Username and password required"}), 400
|
| 284 |
+
|
| 285 |
+
users = load_users()
|
| 286 |
+
|
| 287 |
+
if username in users:
|
| 288 |
+
return jsonify({"success": False, "message": "Username already exists"})
|
| 289 |
+
|
| 290 |
+
# Create new user with hashed password
|
| 291 |
+
users[username] = {
|
| 292 |
+
'password': generate_password_hash(password),
|
| 293 |
+
'answers': [],
|
| 294 |
+
'results': []
|
| 295 |
+
}
|
| 296 |
+
|
| 297 |
+
if not save_users(users):
|
| 298 |
+
return jsonify({"success": False, "message": "Error saving user data"}), 500
|
| 299 |
+
|
| 300 |
+
session['username'] = username
|
| 301 |
+
return jsonify({"success": True})
|
| 302 |
+
except Exception as e:
|
| 303 |
+
print(f"Signup error: {e}")
|
| 304 |
+
return jsonify({"success": False, "message": "Server error"}), 500
|
| 305 |
+
|
| 306 |
+
return render_template("index.html", logged_in=False, is_signup=True)
|
| 307 |
+
|
| 308 |
+
@app.route("/logout")
|
| 309 |
+
def logout():
|
| 310 |
+
session.pop('username', None)
|
| 311 |
+
return redirect(url_for('login'))
|
| 312 |
+
|
| 313 |
+
@app.route("/submit_assessment", methods=["POST"])
|
| 314 |
+
def submit_assessment():
|
| 315 |
+
if 'username' not in session:
|
| 316 |
+
return jsonify({"success": False, "message": "Not logged in"})
|
| 317 |
+
|
| 318 |
+
data = request.json
|
| 319 |
+
answers = data.get('answers', [])
|
| 320 |
+
|
| 321 |
+
if len(answers) != len(QUESTIONS):
|
| 322 |
+
return jsonify({"success": False, "message": "Please answer all questions!"})
|
| 323 |
+
|
| 324 |
+
# Calculate results
|
| 325 |
+
results = calculate_results(answers)
|
| 326 |
+
|
| 327 |
+
# Save to user data
|
| 328 |
+
users = load_users()
|
| 329 |
+
if session['username'] in users:
|
| 330 |
+
users[session['username']]['answers'] = answers
|
| 331 |
+
users[session['username']]['results'] = results
|
| 332 |
+
save_users(users)
|
| 333 |
+
|
| 334 |
+
return jsonify({"success": True, "results": results})
|
| 335 |
+
|
| 336 |
+
return jsonify({"success": False, "message": "User not found"})
|
| 337 |
+
|
| 338 |
+
@app.route("/reset_assessment", methods=["POST"])
|
| 339 |
+
def reset_assessment():
|
| 340 |
+
if 'username' not in session:
|
| 341 |
+
return jsonify({"success": False, "message": "Not logged in"})
|
| 342 |
+
|
| 343 |
+
users = load_users()
|
| 344 |
+
if session['username'] in users:
|
| 345 |
+
users[session['username']]['answers'] = []
|
| 346 |
+
users[session['username']]['results'] = []
|
| 347 |
+
save_users(users)
|
| 348 |
+
return jsonify({"success": True})
|
| 349 |
+
|
| 350 |
+
return jsonify({"success": False, "message": "User not found"})
|
| 351 |
+
|
| 352 |
+
@app.route("/chat", methods=["POST"])
|
| 353 |
+
def chat():
|
| 354 |
+
"""
|
| 355 |
+
RAG-enhanced chat endpoint for spiritual guidance
|
| 356 |
+
Uses retrieval-augmented generation with religion-specific context
|
| 357 |
+
"""
|
| 358 |
+
if 'username' not in session:
|
| 359 |
+
return jsonify({"success": False, "message": "Not logged in"})
|
| 360 |
+
|
| 361 |
+
if not client:
|
| 362 |
+
return jsonify({"success": False, "message": "Chat service not configured. Please set TOGETHER_API_KEY."})
|
| 363 |
+
|
| 364 |
+
data = request.json
|
| 365 |
+
user_message = data.get('message', '').strip()
|
| 366 |
+
religion_name = data.get('religion', '')
|
| 367 |
+
chat_history = data.get('history', [])
|
| 368 |
+
|
| 369 |
+
if not user_message or not religion_name:
|
| 370 |
+
return jsonify({"success": False, "message": "Message and religion required"})
|
| 371 |
+
|
| 372 |
+
# Find religion in CSV data first, fallback to basic RELIGIONS
|
| 373 |
+
religion_data = None
|
| 374 |
+
religion_key = None
|
| 375 |
+
|
| 376 |
+
for key, value in RELIGIONS.items():
|
| 377 |
+
if value['name'] == religion_name:
|
| 378 |
+
religion_key = key
|
| 379 |
+
# Use CSV data if available
|
| 380 |
+
if key in RELIGIONS_CSV:
|
| 381 |
+
religion_data = RELIGIONS_CSV[key]
|
| 382 |
+
else:
|
| 383 |
+
religion_data = value
|
| 384 |
+
break
|
| 385 |
+
|
| 386 |
+
if not religion_data:
|
| 387 |
+
return jsonify({"success": False, "message": "Religion not found"})
|
| 388 |
+
|
| 389 |
+
# Build RAG context using rag_utils
|
| 390 |
+
if religion_key in RELIGIONS_CSV:
|
| 391 |
+
# Rich context from CSV using RAG utilities
|
| 392 |
+
csv_data = RELIGIONS_CSV[religion_key]
|
| 393 |
+
context_chunks = prepare_religion_rag_context(csv_data, use_chunks=False)
|
| 394 |
+
context = f"""REFERENCE DATA FOR {csv_data['name']}:
|
| 395 |
+
|
| 396 |
+
{context_chunks[0]}"""
|
| 397 |
+
else:
|
| 398 |
+
# Fallback to basic data
|
| 399 |
+
basic_context = prepare_religion_rag_context(religion_data, use_chunks=False)
|
| 400 |
+
context = f"""REFERENCE DATA FOR {religion_data['name']}:
|
| 401 |
+
|
| 402 |
+
{basic_context[0]}"""
|
| 403 |
+
|
| 404 |
+
system_prompt = f"""You're a knowledgeable spiritual guide. Use the reference data below to answer questions.
|
| 405 |
+
|
| 406 |
+
{context}
|
| 407 |
+
|
| 408 |
+
INSTRUCTIONS:
|
| 409 |
+
- Keep responses concise, minimal. 30-60 words, depending on the context
|
| 410 |
+
- ALWAYS complete your sentences - never cut off mid-sentence
|
| 411 |
+
- Be respectful and accurate
|
| 412 |
+
- If unsure, say so
|
| 413 |
+
- Use * for bullet points if listing
|
| 414 |
+
- End responses with complete thoughts, not incomplete phrases
|
| 415 |
+
- If you need to cut information, end with "..." but complete the current sentence"""
|
| 416 |
+
|
| 417 |
+
# Build conversation
|
| 418 |
+
messages = [{"role": "system", "content": system_prompt}]
|
| 419 |
+
|
| 420 |
+
# Add recent chat history
|
| 421 |
+
for msg in chat_history[-4:]:
|
| 422 |
+
messages.append({"role": msg["role"], "content": msg["content"]})
|
| 423 |
+
|
| 424 |
+
messages.append({"role": "user", "content": user_message})
|
| 425 |
+
|
| 426 |
+
try:
|
| 427 |
+
response = client.chat.completions.create(
|
| 428 |
+
model="meta-llama/Meta-Llama-3-8B-Instruct-Lite",
|
| 429 |
+
messages=messages,
|
| 430 |
+
max_tokens=200,
|
| 431 |
+
temperature=0.7,
|
| 432 |
+
)
|
| 433 |
+
|
| 434 |
+
bot_response = response.choices[0].message.content
|
| 435 |
+
|
| 436 |
+
return jsonify({
|
| 437 |
+
"success": True,
|
| 438 |
+
"response": bot_response
|
| 439 |
+
})
|
| 440 |
+
|
| 441 |
+
except Exception as e:
|
| 442 |
+
return jsonify({
|
| 443 |
+
"success": False,
|
| 444 |
+
"message": f"Chat error: {str(e)}"
|
| 445 |
+
})
|
| 446 |
+
|
| 447 |
+
@app.route("/debug")
|
| 448 |
+
def debug():
|
| 449 |
+
"""
|
| 450 |
+
Debug endpoint to check API configuration and environment
|
| 451 |
+
"""
|
| 452 |
+
return jsonify({
|
| 453 |
+
"api_key_set": bool(TOGETHER_API_KEY),
|
| 454 |
+
"client_available": client is not None,
|
| 455 |
+
"environment": os.environ.get("ENVIRONMENT", "unknown"),
|
| 456 |
+
"together_api_key_length": len(TOGETHER_API_KEY) if TOGETHER_API_KEY else 0,
|
| 457 |
+
"flask_debug": app.debug,
|
| 458 |
+
"users_file": USERS_FILE
|
| 459 |
+
})
|
| 460 |
+
|
| 461 |
+
@app.route("/session-debug")
|
| 462 |
+
def session_debug():
|
| 463 |
+
"""
|
| 464 |
+
Debug endpoint to check session and user data
|
| 465 |
+
"""
|
| 466 |
+
users = load_users()
|
| 467 |
+
return jsonify({
|
| 468 |
+
"session_data": dict(session),
|
| 469 |
+
"username_in_session": 'username' in session,
|
| 470 |
+
"current_username": session.get('username', 'None'),
|
| 471 |
+
"users_file_exists": os.path.exists(USERS_FILE),
|
| 472 |
+
"users_file_path": os.path.abspath(USERS_FILE),
|
| 473 |
+
"users_count": len(users),
|
| 474 |
+
"user_list": list(users.keys()),
|
| 475 |
+
"session_cookie_config": {
|
| 476 |
+
"secure": app.config.get('SESSION_COOKIE_SECURE'),
|
| 477 |
+
"httponly": app.config.get('SESSION_COOKIE_HTTPONLY'),
|
| 478 |
+
"samesite": app.config.get('SESSION_COOKIE_SAMESITE')
|
| 479 |
+
}
|
| 480 |
+
})
|
| 481 |
+
|
| 482 |
+
# Initialize default test user on startup
|
| 483 |
+
initialize_default_user()
|
| 484 |
+
|
| 485 |
+
if __name__ == "__main__":
|
| 486 |
+
app.run(debug=True, port=5003)
|
chunks.json
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
"============================================================\nReligion: Christianity\n============================================================\n\nDescription: Christianity is a major monotheistic religion originating from the life, teachings, and death of Jesus of Nazareth in the 1st century CE.",
|
| 3 |
+
"death of Jesus of Nazareth in the 1st century CE. It is the world's largest religion with over two billion adherents, emphasizing faith in Jesus Christ as the Son of God who offers salvation through his death and resurrection.",
|
| 4 |
+
"fers salvation through his death and resurrection. The religion has profoundly influenced global culture, ethics, and institutions, evolving through historical interactions with diverse civilizations and adapting to various contexts while maintaining a focus on redemption and community.",
|
| 5 |
+
"maintaining a focus on redemption and community.\n\nPractices: Key practices include prayer (personal and communal communication with God), Bible study (reading and interpreting sacred scriptures), attending church services (worship, preaching, and fellowship), and sacraments such as communion (commem",
|
| 6 |
+
"lowship), and sacraments such as communion (commemorating Jesus' Last Supper) and baptism (symbolizing spiritual rebirth). Other observances involve fasting, charity, mission work, and celebrating holidays like Christmas (Jesus' birth) and Easter (resurrection).",
|
| 7 |
+
"hristmas (Jesus' birth) and Easter (resurrection). Practices vary by denomination, from liturgical rituals in Catholicism to charismatic worship in Pentecostalism.",
|
| 8 |
+
"licism to charismatic worship in Pentecostalism.\n\nCore Beliefs: Central beliefs include the Trinity (one God in three persons: Father, Son, Holy Spirit), salvation through faith in Jesus Christ (who atoned for humanity's sins), the resurrection and eternal life, original sin (humanity's fallen state",
|
| 9 |
+
"ternal life, original sin (humanity's fallen state), and the authority of the Bible. Additional doctrines encompass grace (God's unmerited favor), the church as the body of believers, eschatology (end times and judgment), and ethical living based on love, forgiveness, and justice.",
|
| 10 |
+
"al living based on love, forgiveness, and justice. Monotheism is foundational, rejecting polytheism and atheism.\n\nCommon Questions: Common questions include: Why does God allow evil and suffering? Is faith irrational or opposed to science? Why is Jesus the only way to heaven? Can one lose salvation?",
|
| 11 |
+
"us the only way to heaven? Can one lose salvation? Why are there hypocrites in Christianity? How to take the Bible literally? How should Christians respond to issues like LGBTQ+ rights, racism, and injustice? Interesting facts: Christianity emerged from Judaism; not all ministers wear special attire",
|
| 12 |
+
"rom Judaism; not all ministers wear special attire; churches are communities, not just buildings; over 2 billion followers worldwide; the Bible has no contradictions claimed by believers but debated by skeptics.\n\n\n\n============================================================\nReligion: Islam",
|
| 13 |
+
"=================================\nReligion: Islam\n============================================================\n\nDescription: Islam is a monotheistic religion founded in 7th-century Arabia by the Prophet Muhammad, emphasizing submission to the will of Allah (God) as revealed in the Quran.",
|
| 14 |
+
"the will of Allah (God) as revealed in the Quran. With over 1.5 billion adherents worldwide, it integrates spiritual devotion with social, legal, and ethical guidelines, fostering a sense of global community (ummah) and influencing diverse cultures through conquests, trade, and mysticism.",
|
| 15 |
+
"cultures through conquests, trade, and mysticism. It promotes justice, compassion, and personal accountability in both individual and communal life.\n\nPractices: Core practices, known as the Five Pillars, include Shahada (profession of faith), Salat (five daily prayers), Zakat (charity to the needy)",
|
| 16 |
+
"(five daily prayers), Zakat (charity to the needy), Sawm (fasting during Ramadan), and Hajj (pilgrimage to Mecca). Additional observances involve Halal dietary laws, ethical business conduct, community service, and Sufi mysticism (meditation, dhikr remembrance of God).",
|
| 17 |
+
"mysticism (meditation, dhikr remembrance of God). Practices emphasize discipline, social equity, and spiritual purification, varying between Sunni and Shia traditions.",
|
| 18 |
+
"tion, varying between Sunni and Shia traditions.\n\nCore Beliefs: Fundamental beliefs are Tawhid (oneness of Allah), prophethood (Muhammad as the final prophet completing revelations from Adam to Jesus), angels, holy books (Quran as ultimate scripture), Day of Judgment (accountability for deeds), and",
|
| 19 |
+
", Day of Judgment (accountability for deeds), and predestination (Allah's will). Sources include Quran, Sunnah (Prophet's traditions), Ijma (consensus), and Ijtihad (reasoned interpretation).",
|
| 20 |
+
"consensus), and Ijtihad (reasoned interpretation). Ethics stress justice, mercy, and community, with variations in Sunni (Hadith-focused) and Shia (Imam-guided) interpretations.",
|
| 21 |
+
"focused) and Shia (Imam-guided) interpretations.\n\nCommon Questions: Common questions: Why is Islam perceived as violent? What are the Five Pillars? Who was Muhammad? Do Muslims believe in Jesus? What is the difference between Sunni and Shia? Why do Muslims fast during Ramadan? What is Jihad? Interes",
|
| 22 |
+
"uslims fast during Ramadan? What is Jihad? Interesting facts: Islam recognizes previous prophets like Abraham and Jesus; the Quran contains scientific facts ahead of its time; Muslims believe in one God without partners; major festivals include Eid al-Fitr and Eid al-Adha; over 1.",
|
| 23 |
+
"ivals include Eid al-Fitr and Eid al-Adha; over 1.8 billion followers worldwide; emphasizes charity and community.\n\n\n\n============================================================\nReligion: Buddhism\n============================================================",
|
| 24 |
+
"================================================\n\nDescription: Buddhism is a philosophy and religion founded by Siddhartha Gautama (the Buddha) in northeastern India between the 6th and 4th centuries BCE, focusing on overcoming suffering through enlightenment.",
|
| 25 |
+
"ing on overcoming suffering through enlightenment. With global influence in Asia and beyond, it emphasizes ethical living, meditation, and wisdom, adapting to diverse cultures while promoting compassion and mindfulness as paths to nirvana (liberation from rebirth).",
|
| 26 |
+
"s as paths to nirvana (liberation from rebirth).\n\nPractices: Core practices include meditation (vipassana for insight, samatha for calm), mindfulness (awareness in daily life), following the Eightfold Path (right view, intention, speech, action, livelihood, effort, mindfulness, concentration), and o",
|
| 27 |
+
"lihood, effort, mindfulness, concentration), and observing precepts (ethical guidelines like non-violence). Rituals vary: Theravada focuses on monastic discipline, Mahayana on bodhisattva vows and chants, Vajrayana on tantric rituals and mantras.",
|
| 28 |
+
"chants, Vajrayana on tantric rituals and mantras. Lay practices involve offerings, festivals, and pilgrimage.\n\nCore Beliefs: Key beliefs are the Four Noble Truths (suffering, its cause in desire, cessation through detachment, path to end it), Three Jewels (Buddha, Dharma teachings, Sangha community",
|
| 29 |
+
"Jewels (Buddha, Dharma teachings, Sangha community), karma (actions' consequences), samsara (cycle of rebirth), nirvana (enlightenment), and impermanence (anicca).",
|
| 30 |
+
"irvana (enlightenment), and impermanence (anicca). Variations: Theravada emphasizes individual liberation, Mahayana universal salvation via bodhisattvas, Vajrayana rapid enlightenment through esoteric methods. Rejects a creator god, focusing on self-reliance.",
|
| 31 |
+
"ejects a creator god, focusing on self-reliance.\n\nCommon Questions: Common questions: Who was the Buddha? Is Buddhism a religion or philosophy? Do Buddhists believe in God? What is karma and reincarnation? How does one achieve enlightenment? Why is suffering central? Interesting facts: Originated 2,",
|
| 32 |
+
"uffering central? Interesting facts: Originated 2,500 years ago in India; about 535 million followers; no creator god; focuses on ending suffering; diverse schools like Theravada, Mahayana; mindfulness practices influence modern psychology; Buddha means 'awakened one'; no single holy book but many s",
|
| 33 |
+
"ans 'awakened one'; no single holy book but many scriptures.\n\n\n\n============================================================\nReligion: Hinduism\n============================================================",
|
| 34 |
+
"================================================\n\nDescription: Hinduism is an ancient, diverse tradition originating in the Indian subcontinent around the 2nd millennium BCE, encompassing varied philosophies, rituals, and beliefs aimed at spiritual realization.",
|
| 35 |
+
"tuals, and beliefs aimed at spiritual realization. As the world's oldest living religion with nearly one billion adherents, it adapts regionally and emphasizes dharma (duty), karma (actions' effects), and moksha (liberation), influencing art, ethics, and society globally through texts and practices.",
|
| 36 |
+
"and society globally through texts and practices.\n\nPractices: Practices include yoga (physical and meditative disciplines), meditation (for inner peace), puja (worship with offerings), festivals (Diwali, Holi), pilgrimage (to sacred sites like Varanasi), and rites of passage (samskaras like marriag",
|
| 37 |
+
"asi), and rites of passage (samskaras like marriage). Daily routines involve mantra chanting, vegetarianism for some, and community service. Variations span devotional bhakti, philosophical jnana, and action-oriented karma paths.",
|
| 38 |
+
"sophical jnana, and action-oriented karma paths.\n\nCore Beliefs: Core beliefs include dharma (cosmic order and duty), karma (cause and effect across lives), samsara (rebirth cycle), moksha (liberation), and Brahman (ultimate reality). Deities represent aspects of the divine (e.g.",
|
| 39 |
+
"ty). Deities represent aspects of the divine (e.g., Vishnu, Shiva, Devi), with paths like bhakti (devotion), jnana (knowledge), and yoga. Scriptures: Vedas, Upanishads, epics like Ramayana. Emphasizes pluralism, with regional variations in worship and philosophy.",
|
| 40 |
+
"h regional variations in worship and philosophy.\n\nCommon Questions: Common questions: Why so many gods? Do Hindus believe in reincarnation? What is karma? Why worship cows? Is Hinduism a religion or way of life? Interesting facts: Oldest religion, over 1.",
|
| 41 |
+
"life? Interesting facts: Oldest religion, over 1.1 billion followers mostly in India; no single founder; diverse schools of philosophy; Vedas are ancient scriptures; emphasizes ahimsa (non-violence); multiple paths to truth; polytheistic yet monistic; festivals like Diwali celebrate light over dark",
|
| 42 |
+
"c; festivals like Diwali celebrate light over darkness.\n\n\n\n============================================================\nReligion: Judaism\n============================================================",
|
| 43 |
+
"================================================\n\nDescription: Judaism is a monotheistic religion developed among ancient Hebrews, centered on a covenant with God revealed through prophets like Abraham and Moses.",
|
| 44 |
+
"revealed through prophets like Abraham and Moses. With about 14 million adherents, it integrates theology, law, and culture, emphasizing ethical living and community while adapting through history, influencing Western civilization profoundly.",
|
| 45 |
+
"ry, influencing Western civilization profoundly.\n\nPractices: Practices include Shabbat observance (weekly rest and prayer), Torah study (scriptural learning), daily prayer (three times), kosher dietary laws, and life-cycle events (bar/bat mitzvah, circumcision).",
|
| 46 |
+
"life-cycle events (bar/bat mitzvah, circumcision). Holidays: Passover, Rosh Hashanah, Yom Kippur. Community involvement via synagogue services and charity (tzedakah). Variations in Orthodox (strict), Conservative (balanced), Reform (modern).",
|
| 47 |
+
"rict), Conservative (balanced), Reform (modern).\n\nCore Beliefs: Beliefs include one transcendent God, Torah as divine law, covenant with Israel, ethical monotheism, messianic hope, resurrection, and free will. Prophets guide moral response; history reveals God's purpose.",
|
| 48 |
+
"ide moral response; history reveals God's purpose. Emphasizes justice, peace, and human responsibility. Denominations differ in interpretation but share core ethical-historical monotheism.",
|
| 49 |
+
"on but share core ethical-historical monotheism.\n\nCommon Questions: Common questions: Why write G-d? What is the Wailing Wall? Is Judaism a religion or ethnicity? Why kosher laws? What are the branches (Orthodox, Reform)? Interesting facts: Based on Torah; one God; 613 mitzvot; emerged 4,000 years a",
|
| 50 |
+
"Torah; one God; 613 mitzvot; emerged 4,000 years ago; Jews, Israelites, Hebrews same; no proselytizing; emphasis on deeds over beliefs; guardian angels in tradition; diverse customs like not climbing trees on Shabbat.\n\n\n\n============================================================\nReligion: Taoism",
|
| 51 |
+
"================================\nReligion: Taoism\n============================================================\n\nDescription: Taoism (Daoism) is an indigenous Chinese tradition over 2,000 years old, emphasizing harmony with the Tao (the Way), a fundamental force underlying reality.",
|
| 52 |
+
"(the Way), a fundamental force underlying reality. It balances yielding, joyful attitudes with metaphysical exploration, influencing Asian cultures through philosophy, religion, and folk practices.",
|
| 53 |
+
"hrough philosophy, religion, and folk practices.\n\nPractices: Practices include meditation (for inner harmony), tai chi (movement for energy flow), wu wei (effortless action), simplicity in living, and rituals like Tao worship or alchemy.",
|
| 54 |
+
"n living, and rituals like Tao worship or alchemy. Religious aspects involve priestly ceremonies; philosophical focus on contemplation. Blends with Confucianism and Buddhism in folk traditions.",
|
| 55 |
+
"th Confucianism and Buddhism in folk traditions.\n\nCore Beliefs: Core beliefs: Tao as the natural order, yin-yang balance (complementary forces), harmony with nature, metaphysical engagement. Texts: Tao Te Ching, Zhuangzi. Variations: philosophical (mystical ideas) vs. religious (ritual worship).",
|
| 56 |
+
"l (mystical ideas) vs. religious (ritual worship). Rejects ego-dissolution, affirms reality's nature.\n\nCommon Questions: Common questions: What is the Tao? Who was Lao Tzu? Is Taoism a religion or philosophy? What is wu wei? How to apply Taoism daily? Interesting facts: Over 2,000 years old; influen",
|
| 57 |
+
"? Interesting facts: Over 2,000 years old; influences Chinese medicine; yin-yang symbol; no absolutes; monasteries called Gong and Guan; ethics based on charity, thrift; Tao indefinable; self-cultivation goal.\n\n\n\n============================================================\nReligion: Modern Paganism",
|
| 58 |
+
"=======================\nReligion: Modern Paganism\n============================================================\n\nDescription: Modern Paganism (Neopaganism) is a contemporary revival of pre-Christian, nature-based spiritualities, emerging in the 20th century amid environmental and feminist movements.",
|
| 59 |
+
"century amid environmental and feminist movements. It honors ancient traditions while adapting to modern contexts, emphasizing sacredness in nature and personal empowerment, with diverse, decentralized communities worldwide.",
|
| 60 |
+
"th diverse, decentralized communities worldwide.\n\nPractices: Practices include seasonal celebrations (solstices, equinoxes), rituals (circle casting, offerings), nature work (environmental activism, herbalism), divination (tarot, runes), and meditation.",
|
| 61 |
+
"alism), divination (tarot, runes), and meditation. Group covens or solitary paths; festivals like Beltane. Eclectic, drawing from Celtic, Norse, or Wiccan traditions.",
|
| 62 |
+
"rawing from Celtic, Norse, or Wiccan traditions.\n\nCore Beliefs: Beliefs: Nature as sacred, polytheism or pantheism (multiple deities or divine in all), cycles of life/death/rebirth, personal responsibility, magic as natural force. Rejects dogma; emphasizes harmony, diversity, and ethical living.",
|
| 63 |
+
"emphasizes harmony, diversity, and ethical living. Variations: Wicca (witchcraft-focused), Druidry (Celtic-inspired), Heathenry (Norse).\n\nCommon Questions: Common questions: What is Paganism? Is it witchcraft? Do Pagans worship Satan? How does it differ from ancient paganism? Interesting facts: Umbr",
|
| 64 |
+
"fer from ancient paganism? Interesting facts: Umbrella term for non-mainstream religions; revival, not continuous; includes Wicca, Druidry; nature-centric; no central authority; eclectic practices; influenced by 19th-20th century movements; celebrates Wheel of the Year; rejects dogma; modern inventi",
|
| 65 |
+
"s Wheel of the Year; rejects dogma; modern invention with ancient inspirations.\n\n\n\n============================================================\nReligion: Secular Humanism\n============================================================",
|
| 66 |
+
"================================================\n\nDescription: Secular Humanism is a modern ethical philosophy emphasizing human reason, values, and dignity without supernatural beliefs, rooted in Renaissance humanism but distinct in its non-theistic focus.",
|
| 67 |
+
"e humanism but distinct in its non-theistic focus. It promotes rational inquiry, science, and social justice as paths to fulfillment and societal improvement.",
|
| 68 |
+
"s paths to fulfillment and societal improvement.\n\nPractices: Practices include critical thinking (evidence-based decision-making), ethical living (compassion, justice), community service (volunteering, activism), and secular ceremonies (humanist weddings, namings).",
|
| 69 |
+
"d secular ceremonies (humanist weddings, namings). Education and dialogue foster personal growth; no rituals, but celebrations of life milestones.\n\nCore Beliefs: Beliefs: Human dignity and potential, reason and science as guides, secular ethics (morality from empathy, not divine command), rejection",
|
| 70 |
+
"lity from empathy, not divine command), rejection of supernaturalism. Anthropocentric focus on this life; variations like pragmatic or Christian humanism, but secular emphasizes autonomy and progress.",
|
| 71 |
+
"m, but secular emphasizes autonomy and progress.\n\nCommon Questions: Common questions: Is humanism a religion? What is secularism? Why focus on reason? Can humanists have morals without God? Interesting facts: Man-centered ethics; no supernatural; based on naturalism; promotes science; history from R",
|
| 72 |
+
"ed on naturalism; promotes science; history from Renaissance; emphasizes human agency; not anti-religion but non-theistic; goal is self-remediation; positive worldview.\n\n\n\n============================================================\nReligion: Atheism",
|
| 73 |
+
"===============================\nReligion: Atheism\n============================================================\n\nDescription: Atheism is the absence of belief in gods or spiritual beings, emphasizing empirical evidence and rational critique of metaphysical claims.",
|
| 74 |
+
"ence and rational critique of metaphysical claims. It promotes a naturalistic worldview focused on human experience and ethics, often in opposition to religious doctrines, with historical roots in philosophy and science.",
|
| 75 |
+
"with historical roots in philosophy and science.\n\nPractices: Practices involve evidence-based thinking (scientific inquiry, skepticism), secular community (atheist groups, discussions), and ethical activism (human rights, separation of church/state).",
|
| 76 |
+
"tivism (human rights, separation of church/state). No rituals; focus on rational discourse, education, and living meaningfully without faith.\n\nCore Beliefs: Beliefs: No gods exist (or low probability), natural explanations for phenomena, focus on this life.",
|
| 77 |
+
"al explanations for phenomena, focus on this life. Rejects spiritual beings; variations: fallibilistic (open to evidence), incoherence-based (God concepts illogical). Emphasizes burden of proof on theists, empirical reliability.",
|
| 78 |
+
"rden of proof on theists, empirical reliability.\n\nCommon Questions: Common questions: Why no God? Where does morality come from? Do atheists have faith? What about afterlife? Why be moral? Interesting facts: Not a religion, lack of belief; mostly men and young in U.S.",
|
| 79 |
+
"gion, lack of belief; mostly men and young in U.S.; 98% say religion unimportant; doubled in popularity; face discrimination; symbol is atomic whirl; no founder; can pray (meditate); smarter on average per some studies.\n\n\n\n============================================================",
|
| 80 |
+
"=================================================\nReligion: Agnosticism\n============================================================\n\nDescription: Agnosticism holds that the existence of gods or ultimate realities is unknowable, prioritizing evidence and reason while suspending judgment on metaphysi",
|
| 81 |
+
"and reason while suspending judgment on metaphysical claims. Coined by T.H. Huxley in 1869, it fosters intellectual humility amid scientific and philosophical debates.",
|
| 82 |
+
"ility amid scientific and philosophical debates.\n\nPractices: Practices include rigorous inquiry (following evidence, Clifford's ethics against insufficient belief), critical reflection (questioning claims), and openness to data.",
|
| 83 |
+
"ection (questioning claims), and openness to data. No formal rituals; involves ethical living based on reason, potentially contemplative for personal growth.\n\nCore Beliefs: Beliefs: Unknowability of gods/transcendent realities, method over creed (pursue reason, recognize limits).",
|
| 84 |
+
"thod over creed (pursue reason, recognize limits). Variations: secular (nonreligious skepticism), religious (minimal doctrine with evidence), philosophical (Hume/Kant unknowables). Distinguishes from atheism by not denying, but suspending belief.",
|
| 85 |
+
"m atheism by not denying, but suspending belief.\n\nCommon Questions: Common questions: How differs from atheism? Can agnostics be religious? Is it a middle ground? What after death? Interesting facts: Absence of knowledge about gods; coined 1869; honest approach to big questions; can overlap with ath",
|
| 86 |
+
"st approach to big questions; can overlap with atheism; views existence as unknowable; promotes humility; no certain evidence for gods; kids' view: 'not sure' about big questions.\n\n\n\n============================================================\nReligion: New Age Spirituality",
|
| 87 |
+
"==================\nReligion: New Age Spirituality\n============================================================\n\nDescription: New Age Spirituality is an eclectic movement from the 1970s-80s, blending esotericism, theosophy, and mysticism to anticipate an era of peace through personal transformation.",
|
| 88 |
+
"e an era of peace through personal transformation. Rooted in 19th-century theosophy, it promotes holistic growth and global awakening, influencing wellness and alternative therapies.",
|
| 89 |
+
"influencing wellness and alternative therapies.\n\nPractices: Practices include meditation (energy work, channeling), energy healing (crystals, reiki), yoga, astrology, and rituals (affirmations, vision boards). Eclectic: tarot, shamanism, nature communion.",
|
| 90 |
+
"ds). Eclectic: tarot, shamanism, nature communion. Focus on self-transformation and sharing divine energy.\n\nCore Beliefs: Beliefs: Imminent New Age of enlightenment (Aquarian shift), personal spiritual transformation (sadhana path), interconnectedness, reincarnation, Ascended Masters.",
|
| 91 |
+
"terconnectedness, reincarnation, Ascended Masters. Variations: theosophical (Maitreya focus), psychedelic-influenced. Emphasizes active manifestation over passive waiting.",
|
| 92 |
+
"sizes active manifestation over passive waiting.\n\nCommon Questions: Common questions: What is channeling? Why use crystals? Is yoga New Age? Do they believe in reincarnation? What is the Aquarian Age? Interesting facts: Umbrella for contemporary movement; not organized religion; planetary transforma",
|
| 93 |
+
"ment; not organized religion; planetary transformation; integrates astrology, tarot; spiritual healing; influenced by Western esotericism; emblematic universities like Naropa; focuses on human potential.\n\n\n\n============================================================",
|
| 94 |
+
"=================================================\nReligion: Spiritual But Not Religious\n============================================================\n\nDescription: Spiritual But Not Religious (SBNR) is a stance prioritizing personal spirituality over organized religion, focusing on individual well-be",
|
| 95 |
+
"organized religion, focusing on individual well-being and exploration. Emerging in the 1960s-2000s amid deinstitutionalization, it appeals to unaffiliated seekers valuing autonomy and eclecticism.",
|
| 96 |
+
"liated seekers valuing autonomy and eclecticism.\n\nPractices: Practices include meditation (mindfulness, TM), nature connection, eclectic rituals (Tarot, I Ching), and self-reflection. Therapeutic: yoga, journaling for emotional support. Avoids communal worship; experimental and as-needed.",
|
| 97 |
+
"ds communal worship; experimental and as-needed.\n\nCore Beliefs: Beliefs: Spirituality as private empowerment, anti-dogmatic (religion as rigid), focus on mind-body-spirit harmony. Variations: dissenters (reject religion), explorers (wanderlust), seekers (looking for home).",
|
| 98 |
+
"xplorers (wanderlust), seekers (looking for home). Emphasizes curiosity, intellectual freedom, personal path.\n\nCommon Questions: Common questions: What does SBNR mean? Do they believe in God? Why reject religion? What practices? Interesting facts: Connected to true self; most Americans spiritual; ad",
|
| 99 |
+
"nnected to true self; most Americans spiritual; addresses evil/misery; values ethical values; personal divine experience; anti-dogma; hunger for ritual without structure; integrates with other beliefs.\n\n\n\n============================================================\nReligion: Sikhism",
|
| 100 |
+
"===============================\nReligion: Sikhism\n============================================================\n\nDescription: Sikhism is a monotheistic faith founded by Guru Nanak in 15th-century Punjab, emphasizing equality, service, and devotion.",
|
| 101 |
+
"njab, emphasizing equality, service, and devotion. With 25 million adherents, it follows 10 Gurus' teachings, now in the Guru Granth Sahib, promoting ethical living and community amid historical independence from Hinduism.",
|
| 102 |
+
"nity amid historical independence from Hinduism.\n\nPractices: Practices include daily prayer/meditation (Nitnem), community service (seva), langar (free meals), wearing 5 Ks (kesh, kangha, kara, kachera, kirpan), and gurdwara attendance. Festivals: Vaisakhi, Diwali.",
|
| 103 |
+
"gurdwara attendance. Festivals: Vaisakhi, Diwali. Focus on honest living and sharing.\n\nCore Beliefs: Beliefs: One formless God, equality of all, Gurmat (Guru's way), liberation via devotion, rejection of caste/rituals. Scriptures: Guru Granth Sahib.",
|
| 104 |
+
"n of caste/rituals. Scriptures: Guru Granth Sahib. Influences: Sant (nirgun devotion), Nath (meditation ascent). Emphasizes ethical monotheism, service.",
|
| 105 |
+
"ascent). Emphasizes ethical monotheism, service.\n\nCommon Questions: Common questions: What do Sikhs teach about other religions? Who are the Gurus? Why wear turbans/5 Ks? What is langar? Interesting facts: Founded 1469 by Guru Nanak; 27 million followers; originated in Punjab; equality of men/women;",
|
| 106 |
+
"wers; originated in Punjab; equality of men/women; no caste; daily prayer; emblem Khanda; greets with Sat Sri Akal; emphasizes humanity and charity.\n\n\n\n============================================================\nReligion: Indigenous Spirituality",
|
| 107 |
+
"===============\nReligion: Indigenous Spirituality\n============================================================\n\nDescription: Indigenous Spirituality encompasses diverse traditional beliefs of native peoples worldwide, deeply connected to land, ancestors, and nature.",
|
| 108 |
+
", deeply connected to land, ancestors, and nature. Rooted in ancient oral histories, it emphasizes holistic well-being, resilience, and reciprocity, varying by community but sharing themes of interconnectedness and cultural identity.",
|
| 109 |
+
"mes of interconnectedness and cultural identity.\n\nPractices: Practices include ceremonies (sweat lodges, vision quests), storytelling, seasonal rituals (harvest dances), and healing (herbal medicine, shamanic journeys). Community-focused: elder guidance, sacred sites pilgrimage.",
|
| 110 |
+
"-focused: elder guidance, sacred sites pilgrimage. Emphasizes respect for nature and ancestors.\n\nCore Beliefs: Beliefs: Interconnectedness of all (humans, animals, spirits), land as sacred, ancestor veneration, balance/harmony.",
|
| 111 |
+
"d as sacred, ancestor veneration, balance/harmony. Variations: Native American (Great Spirit, totemism), Aboriginal (Dreamtime, kinship). Holistic: mind-body-spirit integration; resilience through cultural practices.",
|
| 112 |
+
"egration; resilience through cultural practices.\n\nCommon Questions: Common questions: What is Indigenous spirituality? Do they have a Great Spirit? How linked to land? Myths about 'having it easy'? Interesting facts: Diverse, no single belief; spirituality in daily life; no division spiritual/secula",
|
| 113 |
+
"uality in daily life; no division spiritual/secular; kinship with nature; ceremonies vary by tribe; addresses appropriation; hunger for rituals; combined with other faiths sometimes."
|
| 114 |
+
]
|
closest_chunk.txt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
s as paths to nirvana (liberation from rebirth).
|
| 2 |
+
|
| 3 |
+
Practices: Core practices include meditation (vipassana for insight, samatha for calm), mindfulness (awareness in daily life), following the Eightfold Path (right view, intention, speech, action, livelihood, effort, mindfulness, concentration), and o
|
embeddings.pkl
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:a70efdf0c758156daf495242a3a19c1bccfce1e38e307720c81ebd16b90f3ed8
|
| 3 |
+
size 172195
|
rag_utils.py
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Simple RAG utilities for loading religion data"""
|
| 2 |
+
import csv
|
| 3 |
+
|
| 4 |
+
def load_religions_from_csv(csv_path):
|
| 5 |
+
"""Load religion data from CSV file"""
|
| 6 |
+
try:
|
| 7 |
+
religions = {}
|
| 8 |
+
with open(csv_path, 'r', encoding='utf-8') as f:
|
| 9 |
+
reader = csv.DictReader(f)
|
| 10 |
+
for row in reader:
|
| 11 |
+
religions[row['key']] = row
|
| 12 |
+
print(f"β
Loaded {len(religions)} religions from CSV")
|
| 13 |
+
return religions
|
| 14 |
+
except Exception as e:
|
| 15 |
+
print(f"β οΈ Error loading religions CSV: {e}")
|
| 16 |
+
return {}
|
| 17 |
+
|
| 18 |
+
def prepare_religion_rag_context(religion_data, use_chunks=True):
|
| 19 |
+
"""Prepare context string from religion data"""
|
| 20 |
+
parts = []
|
| 21 |
+
|
| 22 |
+
if 'description' in religion_data:
|
| 23 |
+
parts.append(f"Description: {religion_data['description']}")
|
| 24 |
+
if 'practices' in religion_data:
|
| 25 |
+
parts.append(f"Practices: {religion_data['practices']}")
|
| 26 |
+
if 'core_beliefs' in religion_data:
|
| 27 |
+
parts.append(f"Core Beliefs: {religion_data['core_beliefs']}")
|
| 28 |
+
if 'common_curiosities' in religion_data:
|
| 29 |
+
parts.append(f"Common Questions: {religion_data['common_curiosities']}")
|
| 30 |
+
|
| 31 |
+
return ['\n\n'.join(parts)] if not use_chunks else parts
|
religions_corpus.txt
ADDED
|
@@ -0,0 +1,196 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
|
| 3 |
+
============================================================
|
| 4 |
+
Religion: Christianity
|
| 5 |
+
============================================================
|
| 6 |
+
|
| 7 |
+
Description: Christianity is a major monotheistic religion originating from the life, teachings, and death of Jesus of Nazareth in the 1st century CE. It is the world's largest religion with over two billion adherents, emphasizing faith in Jesus Christ as the Son of God who offers salvation through his death and resurrection. The religion has profoundly influenced global culture, ethics, and institutions, evolving through historical interactions with diverse civilizations and adapting to various contexts while maintaining a focus on redemption and community.
|
| 8 |
+
|
| 9 |
+
Practices: Key practices include prayer (personal and communal communication with God), Bible study (reading and interpreting sacred scriptures), attending church services (worship, preaching, and fellowship), and sacraments such as communion (commemorating Jesus' Last Supper) and baptism (symbolizing spiritual rebirth). Other observances involve fasting, charity, mission work, and celebrating holidays like Christmas (Jesus' birth) and Easter (resurrection). Practices vary by denomination, from liturgical rituals in Catholicism to charismatic worship in Pentecostalism.
|
| 10 |
+
|
| 11 |
+
Core Beliefs: Central beliefs include the Trinity (one God in three persons: Father, Son, Holy Spirit), salvation through faith in Jesus Christ (who atoned for humanity's sins), the resurrection and eternal life, original sin (humanity's fallen state), and the authority of the Bible. Additional doctrines encompass grace (God's unmerited favor), the church as the body of believers, eschatology (end times and judgment), and ethical living based on love, forgiveness, and justice. Monotheism is foundational, rejecting polytheism and atheism.
|
| 12 |
+
|
| 13 |
+
Common Questions: Common questions include: Why does God allow evil and suffering? Is faith irrational or opposed to science? Why is Jesus the only way to heaven? Can one lose salvation? Why are there hypocrites in Christianity? How to take the Bible literally? How should Christians respond to issues like LGBTQ+ rights, racism, and injustice? Interesting facts: Christianity emerged from Judaism; not all ministers wear special attire; churches are communities, not just buildings; over 2 billion followers worldwide; the Bible has no contradictions claimed by believers but debated by skeptics.
|
| 14 |
+
|
| 15 |
+
|
| 16 |
+
|
| 17 |
+
============================================================
|
| 18 |
+
Religion: Islam
|
| 19 |
+
============================================================
|
| 20 |
+
|
| 21 |
+
Description: Islam is a monotheistic religion founded in 7th-century Arabia by the Prophet Muhammad, emphasizing submission to the will of Allah (God) as revealed in the Quran. With over 1.5 billion adherents worldwide, it integrates spiritual devotion with social, legal, and ethical guidelines, fostering a sense of global community (ummah) and influencing diverse cultures through conquests, trade, and mysticism. It promotes justice, compassion, and personal accountability in both individual and communal life.
|
| 22 |
+
|
| 23 |
+
Practices: Core practices, known as the Five Pillars, include Shahada (profession of faith), Salat (five daily prayers), Zakat (charity to the needy), Sawm (fasting during Ramadan), and Hajj (pilgrimage to Mecca). Additional observances involve Halal dietary laws, ethical business conduct, community service, and Sufi mysticism (meditation, dhikr remembrance of God). Practices emphasize discipline, social equity, and spiritual purification, varying between Sunni and Shia traditions.
|
| 24 |
+
|
| 25 |
+
Core Beliefs: Fundamental beliefs are Tawhid (oneness of Allah), prophethood (Muhammad as the final prophet completing revelations from Adam to Jesus), angels, holy books (Quran as ultimate scripture), Day of Judgment (accountability for deeds), and predestination (Allah's will). Sources include Quran, Sunnah (Prophet's traditions), Ijma (consensus), and Ijtihad (reasoned interpretation). Ethics stress justice, mercy, and community, with variations in Sunni (Hadith-focused) and Shia (Imam-guided) interpretations.
|
| 26 |
+
|
| 27 |
+
Common Questions: Common questions: Why is Islam perceived as violent? What are the Five Pillars? Who was Muhammad? Do Muslims believe in Jesus? What is the difference between Sunni and Shia? Why do Muslims fast during Ramadan? What is Jihad? Interesting facts: Islam recognizes previous prophets like Abraham and Jesus; the Quran contains scientific facts ahead of its time; Muslims believe in one God without partners; major festivals include Eid al-Fitr and Eid al-Adha; over 1.8 billion followers worldwide; emphasizes charity and community.
|
| 28 |
+
|
| 29 |
+
|
| 30 |
+
|
| 31 |
+
============================================================
|
| 32 |
+
Religion: Buddhism
|
| 33 |
+
============================================================
|
| 34 |
+
|
| 35 |
+
Description: Buddhism is a philosophy and religion founded by Siddhartha Gautama (the Buddha) in northeastern India between the 6th and 4th centuries BCE, focusing on overcoming suffering through enlightenment. With global influence in Asia and beyond, it emphasizes ethical living, meditation, and wisdom, adapting to diverse cultures while promoting compassion and mindfulness as paths to nirvana (liberation from rebirth).
|
| 36 |
+
|
| 37 |
+
Practices: Core practices include meditation (vipassana for insight, samatha for calm), mindfulness (awareness in daily life), following the Eightfold Path (right view, intention, speech, action, livelihood, effort, mindfulness, concentration), and observing precepts (ethical guidelines like non-violence). Rituals vary: Theravada focuses on monastic discipline, Mahayana on bodhisattva vows and chants, Vajrayana on tantric rituals and mantras. Lay practices involve offerings, festivals, and pilgrimage.
|
| 38 |
+
|
| 39 |
+
Core Beliefs: Key beliefs are the Four Noble Truths (suffering, its cause in desire, cessation through detachment, path to end it), Three Jewels (Buddha, Dharma teachings, Sangha community), karma (actions' consequences), samsara (cycle of rebirth), nirvana (enlightenment), and impermanence (anicca). Variations: Theravada emphasizes individual liberation, Mahayana universal salvation via bodhisattvas, Vajrayana rapid enlightenment through esoteric methods. Rejects a creator god, focusing on self-reliance.
|
| 40 |
+
|
| 41 |
+
Common Questions: Common questions: Who was the Buddha? Is Buddhism a religion or philosophy? Do Buddhists believe in God? What is karma and reincarnation? How does one achieve enlightenment? Why is suffering central? Interesting facts: Originated 2,500 years ago in India; about 535 million followers; no creator god; focuses on ending suffering; diverse schools like Theravada, Mahayana; mindfulness practices influence modern psychology; Buddha means 'awakened one'; no single holy book but many scriptures.
|
| 42 |
+
|
| 43 |
+
|
| 44 |
+
|
| 45 |
+
============================================================
|
| 46 |
+
Religion: Hinduism
|
| 47 |
+
============================================================
|
| 48 |
+
|
| 49 |
+
Description: Hinduism is an ancient, diverse tradition originating in the Indian subcontinent around the 2nd millennium BCE, encompassing varied philosophies, rituals, and beliefs aimed at spiritual realization. As the world's oldest living religion with nearly one billion adherents, it adapts regionally and emphasizes dharma (duty), karma (actions' effects), and moksha (liberation), influencing art, ethics, and society globally through texts and practices.
|
| 50 |
+
|
| 51 |
+
Practices: Practices include yoga (physical and meditative disciplines), meditation (for inner peace), puja (worship with offerings), festivals (Diwali, Holi), pilgrimage (to sacred sites like Varanasi), and rites of passage (samskaras like marriage). Daily routines involve mantra chanting, vegetarianism for some, and community service. Variations span devotional bhakti, philosophical jnana, and action-oriented karma paths.
|
| 52 |
+
|
| 53 |
+
Core Beliefs: Core beliefs include dharma (cosmic order and duty), karma (cause and effect across lives), samsara (rebirth cycle), moksha (liberation), and Brahman (ultimate reality). Deities represent aspects of the divine (e.g., Vishnu, Shiva, Devi), with paths like bhakti (devotion), jnana (knowledge), and yoga. Scriptures: Vedas, Upanishads, epics like Ramayana. Emphasizes pluralism, with regional variations in worship and philosophy.
|
| 54 |
+
|
| 55 |
+
Common Questions: Common questions: Why so many gods? Do Hindus believe in reincarnation? What is karma? Why worship cows? Is Hinduism a religion or way of life? Interesting facts: Oldest religion, over 1.1 billion followers mostly in India; no single founder; diverse schools of philosophy; Vedas are ancient scriptures; emphasizes ahimsa (non-violence); multiple paths to truth; polytheistic yet monistic; festivals like Diwali celebrate light over darkness.
|
| 56 |
+
|
| 57 |
+
|
| 58 |
+
|
| 59 |
+
============================================================
|
| 60 |
+
Religion: Judaism
|
| 61 |
+
============================================================
|
| 62 |
+
|
| 63 |
+
Description: Judaism is a monotheistic religion developed among ancient Hebrews, centered on a covenant with God revealed through prophets like Abraham and Moses. With about 14 million adherents, it integrates theology, law, and culture, emphasizing ethical living and community while adapting through history, influencing Western civilization profoundly.
|
| 64 |
+
|
| 65 |
+
Practices: Practices include Shabbat observance (weekly rest and prayer), Torah study (scriptural learning), daily prayer (three times), kosher dietary laws, and life-cycle events (bar/bat mitzvah, circumcision). Holidays: Passover, Rosh Hashanah, Yom Kippur. Community involvement via synagogue services and charity (tzedakah). Variations in Orthodox (strict), Conservative (balanced), Reform (modern).
|
| 66 |
+
|
| 67 |
+
Core Beliefs: Beliefs include one transcendent God, Torah as divine law, covenant with Israel, ethical monotheism, messianic hope, resurrection, and free will. Prophets guide moral response; history reveals God's purpose. Emphasizes justice, peace, and human responsibility. Denominations differ in interpretation but share core ethical-historical monotheism.
|
| 68 |
+
|
| 69 |
+
Common Questions: Common questions: Why write G-d? What is the Wailing Wall? Is Judaism a religion or ethnicity? Why kosher laws? What are the branches (Orthodox, Reform)? Interesting facts: Based on Torah; one God; 613 mitzvot; emerged 4,000 years ago; Jews, Israelites, Hebrews same; no proselytizing; emphasis on deeds over beliefs; guardian angels in tradition; diverse customs like not climbing trees on Shabbat.
|
| 70 |
+
|
| 71 |
+
|
| 72 |
+
|
| 73 |
+
============================================================
|
| 74 |
+
Religion: Taoism
|
| 75 |
+
============================================================
|
| 76 |
+
|
| 77 |
+
Description: Taoism (Daoism) is an indigenous Chinese tradition over 2,000 years old, emphasizing harmony with the Tao (the Way), a fundamental force underlying reality. It balances yielding, joyful attitudes with metaphysical exploration, influencing Asian cultures through philosophy, religion, and folk practices.
|
| 78 |
+
|
| 79 |
+
Practices: Practices include meditation (for inner harmony), tai chi (movement for energy flow), wu wei (effortless action), simplicity in living, and rituals like Tao worship or alchemy. Religious aspects involve priestly ceremonies; philosophical focus on contemplation. Blends with Confucianism and Buddhism in folk traditions.
|
| 80 |
+
|
| 81 |
+
Core Beliefs: Core beliefs: Tao as the natural order, yin-yang balance (complementary forces), harmony with nature, metaphysical engagement. Texts: Tao Te Ching, Zhuangzi. Variations: philosophical (mystical ideas) vs. religious (ritual worship). Rejects ego-dissolution, affirms reality's nature.
|
| 82 |
+
|
| 83 |
+
Common Questions: Common questions: What is the Tao? Who was Lao Tzu? Is Taoism a religion or philosophy? What is wu wei? How to apply Taoism daily? Interesting facts: Over 2,000 years old; influences Chinese medicine; yin-yang symbol; no absolutes; monasteries called Gong and Guan; ethics based on charity, thrift; Tao indefinable; self-cultivation goal.
|
| 84 |
+
|
| 85 |
+
|
| 86 |
+
|
| 87 |
+
============================================================
|
| 88 |
+
Religion: Modern Paganism
|
| 89 |
+
============================================================
|
| 90 |
+
|
| 91 |
+
Description: Modern Paganism (Neopaganism) is a contemporary revival of pre-Christian, nature-based spiritualities, emerging in the 20th century amid environmental and feminist movements. It honors ancient traditions while adapting to modern contexts, emphasizing sacredness in nature and personal empowerment, with diverse, decentralized communities worldwide.
|
| 92 |
+
|
| 93 |
+
Practices: Practices include seasonal celebrations (solstices, equinoxes), rituals (circle casting, offerings), nature work (environmental activism, herbalism), divination (tarot, runes), and meditation. Group covens or solitary paths; festivals like Beltane. Eclectic, drawing from Celtic, Norse, or Wiccan traditions.
|
| 94 |
+
|
| 95 |
+
Core Beliefs: Beliefs: Nature as sacred, polytheism or pantheism (multiple deities or divine in all), cycles of life/death/rebirth, personal responsibility, magic as natural force. Rejects dogma; emphasizes harmony, diversity, and ethical living. Variations: Wicca (witchcraft-focused), Druidry (Celtic-inspired), Heathenry (Norse).
|
| 96 |
+
|
| 97 |
+
Common Questions: Common questions: What is Paganism? Is it witchcraft? Do Pagans worship Satan? How does it differ from ancient paganism? Interesting facts: Umbrella term for non-mainstream religions; revival, not continuous; includes Wicca, Druidry; nature-centric; no central authority; eclectic practices; influenced by 19th-20th century movements; celebrates Wheel of the Year; rejects dogma; modern invention with ancient inspirations.
|
| 98 |
+
|
| 99 |
+
|
| 100 |
+
|
| 101 |
+
============================================================
|
| 102 |
+
Religion: Secular Humanism
|
| 103 |
+
============================================================
|
| 104 |
+
|
| 105 |
+
Description: Secular Humanism is a modern ethical philosophy emphasizing human reason, values, and dignity without supernatural beliefs, rooted in Renaissance humanism but distinct in its non-theistic focus. It promotes rational inquiry, science, and social justice as paths to fulfillment and societal improvement.
|
| 106 |
+
|
| 107 |
+
Practices: Practices include critical thinking (evidence-based decision-making), ethical living (compassion, justice), community service (volunteering, activism), and secular ceremonies (humanist weddings, namings). Education and dialogue foster personal growth; no rituals, but celebrations of life milestones.
|
| 108 |
+
|
| 109 |
+
Core Beliefs: Beliefs: Human dignity and potential, reason and science as guides, secular ethics (morality from empathy, not divine command), rejection of supernaturalism. Anthropocentric focus on this life; variations like pragmatic or Christian humanism, but secular emphasizes autonomy and progress.
|
| 110 |
+
|
| 111 |
+
Common Questions: Common questions: Is humanism a religion? What is secularism? Why focus on reason? Can humanists have morals without God? Interesting facts: Man-centered ethics; no supernatural; based on naturalism; promotes science; history from Renaissance; emphasizes human agency; not anti-religion but non-theistic; goal is self-remediation; positive worldview.
|
| 112 |
+
|
| 113 |
+
|
| 114 |
+
|
| 115 |
+
============================================================
|
| 116 |
+
Religion: Atheism
|
| 117 |
+
============================================================
|
| 118 |
+
|
| 119 |
+
Description: Atheism is the absence of belief in gods or spiritual beings, emphasizing empirical evidence and rational critique of metaphysical claims. It promotes a naturalistic worldview focused on human experience and ethics, often in opposition to religious doctrines, with historical roots in philosophy and science.
|
| 120 |
+
|
| 121 |
+
Practices: Practices involve evidence-based thinking (scientific inquiry, skepticism), secular community (atheist groups, discussions), and ethical activism (human rights, separation of church/state). No rituals; focus on rational discourse, education, and living meaningfully without faith.
|
| 122 |
+
|
| 123 |
+
Core Beliefs: Beliefs: No gods exist (or low probability), natural explanations for phenomena, focus on this life. Rejects spiritual beings; variations: fallibilistic (open to evidence), incoherence-based (God concepts illogical). Emphasizes burden of proof on theists, empirical reliability.
|
| 124 |
+
|
| 125 |
+
Common Questions: Common questions: Why no God? Where does morality come from? Do atheists have faith? What about afterlife? Why be moral? Interesting facts: Not a religion, lack of belief; mostly men and young in U.S.; 98% say religion unimportant; doubled in popularity; face discrimination; symbol is atomic whirl; no founder; can pray (meditate); smarter on average per some studies.
|
| 126 |
+
|
| 127 |
+
|
| 128 |
+
|
| 129 |
+
============================================================
|
| 130 |
+
Religion: Agnosticism
|
| 131 |
+
============================================================
|
| 132 |
+
|
| 133 |
+
Description: Agnosticism holds that the existence of gods or ultimate realities is unknowable, prioritizing evidence and reason while suspending judgment on metaphysical claims. Coined by T.H. Huxley in 1869, it fosters intellectual humility amid scientific and philosophical debates.
|
| 134 |
+
|
| 135 |
+
Practices: Practices include rigorous inquiry (following evidence, Clifford's ethics against insufficient belief), critical reflection (questioning claims), and openness to data. No formal rituals; involves ethical living based on reason, potentially contemplative for personal growth.
|
| 136 |
+
|
| 137 |
+
Core Beliefs: Beliefs: Unknowability of gods/transcendent realities, method over creed (pursue reason, recognize limits). Variations: secular (nonreligious skepticism), religious (minimal doctrine with evidence), philosophical (Hume/Kant unknowables). Distinguishes from atheism by not denying, but suspending belief.
|
| 138 |
+
|
| 139 |
+
Common Questions: Common questions: How differs from atheism? Can agnostics be religious? Is it a middle ground? What after death? Interesting facts: Absence of knowledge about gods; coined 1869; honest approach to big questions; can overlap with atheism; views existence as unknowable; promotes humility; no certain evidence for gods; kids' view: 'not sure' about big questions.
|
| 140 |
+
|
| 141 |
+
|
| 142 |
+
|
| 143 |
+
============================================================
|
| 144 |
+
Religion: New Age Spirituality
|
| 145 |
+
============================================================
|
| 146 |
+
|
| 147 |
+
Description: New Age Spirituality is an eclectic movement from the 1970s-80s, blending esotericism, theosophy, and mysticism to anticipate an era of peace through personal transformation. Rooted in 19th-century theosophy, it promotes holistic growth and global awakening, influencing wellness and alternative therapies.
|
| 148 |
+
|
| 149 |
+
Practices: Practices include meditation (energy work, channeling), energy healing (crystals, reiki), yoga, astrology, and rituals (affirmations, vision boards). Eclectic: tarot, shamanism, nature communion. Focus on self-transformation and sharing divine energy.
|
| 150 |
+
|
| 151 |
+
Core Beliefs: Beliefs: Imminent New Age of enlightenment (Aquarian shift), personal spiritual transformation (sadhana path), interconnectedness, reincarnation, Ascended Masters. Variations: theosophical (Maitreya focus), psychedelic-influenced. Emphasizes active manifestation over passive waiting.
|
| 152 |
+
|
| 153 |
+
Common Questions: Common questions: What is channeling? Why use crystals? Is yoga New Age? Do they believe in reincarnation? What is the Aquarian Age? Interesting facts: Umbrella for contemporary movement; not organized religion; planetary transformation; integrates astrology, tarot; spiritual healing; influenced by Western esotericism; emblematic universities like Naropa; focuses on human potential.
|
| 154 |
+
|
| 155 |
+
|
| 156 |
+
|
| 157 |
+
============================================================
|
| 158 |
+
Religion: Spiritual But Not Religious
|
| 159 |
+
============================================================
|
| 160 |
+
|
| 161 |
+
Description: Spiritual But Not Religious (SBNR) is a stance prioritizing personal spirituality over organized religion, focusing on individual well-being and exploration. Emerging in the 1960s-2000s amid deinstitutionalization, it appeals to unaffiliated seekers valuing autonomy and eclecticism.
|
| 162 |
+
|
| 163 |
+
Practices: Practices include meditation (mindfulness, TM), nature connection, eclectic rituals (Tarot, I Ching), and self-reflection. Therapeutic: yoga, journaling for emotional support. Avoids communal worship; experimental and as-needed.
|
| 164 |
+
|
| 165 |
+
Core Beliefs: Beliefs: Spirituality as private empowerment, anti-dogmatic (religion as rigid), focus on mind-body-spirit harmony. Variations: dissenters (reject religion), explorers (wanderlust), seekers (looking for home). Emphasizes curiosity, intellectual freedom, personal path.
|
| 166 |
+
|
| 167 |
+
Common Questions: Common questions: What does SBNR mean? Do they believe in God? Why reject religion? What practices? Interesting facts: Connected to true self; most Americans spiritual; addresses evil/misery; values ethical values; personal divine experience; anti-dogma; hunger for ritual without structure; integrates with other beliefs.
|
| 168 |
+
|
| 169 |
+
|
| 170 |
+
|
| 171 |
+
============================================================
|
| 172 |
+
Religion: Sikhism
|
| 173 |
+
============================================================
|
| 174 |
+
|
| 175 |
+
Description: Sikhism is a monotheistic faith founded by Guru Nanak in 15th-century Punjab, emphasizing equality, service, and devotion. With 25 million adherents, it follows 10 Gurus' teachings, now in the Guru Granth Sahib, promoting ethical living and community amid historical independence from Hinduism.
|
| 176 |
+
|
| 177 |
+
Practices: Practices include daily prayer/meditation (Nitnem), community service (seva), langar (free meals), wearing 5 Ks (kesh, kangha, kara, kachera, kirpan), and gurdwara attendance. Festivals: Vaisakhi, Diwali. Focus on honest living and sharing.
|
| 178 |
+
|
| 179 |
+
Core Beliefs: Beliefs: One formless God, equality of all, Gurmat (Guru's way), liberation via devotion, rejection of caste/rituals. Scriptures: Guru Granth Sahib. Influences: Sant (nirgun devotion), Nath (meditation ascent). Emphasizes ethical monotheism, service.
|
| 180 |
+
|
| 181 |
+
Common Questions: Common questions: What do Sikhs teach about other religions? Who are the Gurus? Why wear turbans/5 Ks? What is langar? Interesting facts: Founded 1469 by Guru Nanak; 27 million followers; originated in Punjab; equality of men/women; no caste; daily prayer; emblem Khanda; greets with Sat Sri Akal; emphasizes humanity and charity.
|
| 182 |
+
|
| 183 |
+
|
| 184 |
+
|
| 185 |
+
============================================================
|
| 186 |
+
Religion: Indigenous Spirituality
|
| 187 |
+
============================================================
|
| 188 |
+
|
| 189 |
+
Description: Indigenous Spirituality encompasses diverse traditional beliefs of native peoples worldwide, deeply connected to land, ancestors, and nature. Rooted in ancient oral histories, it emphasizes holistic well-being, resilience, and reciprocity, varying by community but sharing themes of interconnectedness and cultural identity.
|
| 190 |
+
|
| 191 |
+
Practices: Practices include ceremonies (sweat lodges, vision quests), storytelling, seasonal rituals (harvest dances), and healing (herbal medicine, shamanic journeys). Community-focused: elder guidance, sacred sites pilgrimage. Emphasizes respect for nature and ancestors.
|
| 192 |
+
|
| 193 |
+
Core Beliefs: Beliefs: Interconnectedness of all (humans, animals, spirits), land as sacred, ancestor veneration, balance/harmony. Variations: Native American (Great Spirit, totemism), Aboriginal (Dreamtime, kinship). Holistic: mind-body-spirit integration; resilience through cultural practices.
|
| 194 |
+
|
| 195 |
+
Common Questions: Common questions: What is Indigenous spirituality? Do they have a Great Spirit? How linked to land? Myths about 'having it easy'? Interesting facts: Diverse, no single belief; spirituality in daily life; no division spiritual/secular; kinship with nature; ceremonies vary by tribe; addresses appropriation; hunger for rituals; combined with other faiths sometimes.
|
| 196 |
+
|
requirements.txt
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Flask + HTML Integration with Chatbot
|
| 2 |
+
Flask>=2.0.0
|
| 3 |
+
python-dotenv>=0.19.0
|
| 4 |
+
together>=0.2.0
|
static/landing.css
ADDED
|
@@ -0,0 +1,455 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
* {
|
| 2 |
+
margin: 0;
|
| 3 |
+
padding: 0;
|
| 4 |
+
box-sizing: border-box;
|
| 5 |
+
}
|
| 6 |
+
|
| 7 |
+
:root {
|
| 8 |
+
--primary: #6366f1;
|
| 9 |
+
--primary-dark: #4f46e5;
|
| 10 |
+
--secondary: #8b5cf6;
|
| 11 |
+
--accent: #ec4899;
|
| 12 |
+
--text-dark: #1e293b;
|
| 13 |
+
--text-light: #64748b;
|
| 14 |
+
--bg-white: #ffffff;
|
| 15 |
+
--bg-light: #f8fafc;
|
| 16 |
+
}
|
| 17 |
+
|
| 18 |
+
body {
|
| 19 |
+
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
| 20 |
+
line-height: 1.6;
|
| 21 |
+
color: var(--text-dark);
|
| 22 |
+
background: var(--bg-white);
|
| 23 |
+
overflow-x: hidden;
|
| 24 |
+
}
|
| 25 |
+
|
| 26 |
+
/* Animated Gradient Background */
|
| 27 |
+
.gradient-bg {
|
| 28 |
+
position: fixed;
|
| 29 |
+
top: 0;
|
| 30 |
+
left: 0;
|
| 31 |
+
width: 100%;
|
| 32 |
+
height: 100vh;
|
| 33 |
+
background: linear-gradient(135deg, #667eea 0%, #764ba2 50%, #f093fb 100%);
|
| 34 |
+
opacity: 0.05;
|
| 35 |
+
z-index: -1;
|
| 36 |
+
animation: gradientShift 15s ease infinite;
|
| 37 |
+
}
|
| 38 |
+
|
| 39 |
+
@keyframes gradientShift {
|
| 40 |
+
0%, 100% { transform: scale(1) rotate(0deg); }
|
| 41 |
+
50% { transform: scale(1.1) rotate(5deg); }
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
/* Navigation */
|
| 45 |
+
.navbar {
|
| 46 |
+
position: fixed;
|
| 47 |
+
top: 0;
|
| 48 |
+
left: 0;
|
| 49 |
+
right: 0;
|
| 50 |
+
background: rgba(255, 255, 255, 0.8);
|
| 51 |
+
backdrop-filter: blur(10px);
|
| 52 |
+
border-bottom: 1px solid rgba(0, 0, 0, 0.05);
|
| 53 |
+
z-index: 1000;
|
| 54 |
+
padding: 1rem 0;
|
| 55 |
+
}
|
| 56 |
+
|
| 57 |
+
.nav-container {
|
| 58 |
+
max-width: 1200px;
|
| 59 |
+
margin: 0 auto;
|
| 60 |
+
padding: 0 2rem;
|
| 61 |
+
display: flex;
|
| 62 |
+
justify-content: space-between;
|
| 63 |
+
align-items: center;
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
.logo {
|
| 67 |
+
font-size: 1.25rem;
|
| 68 |
+
font-weight: 700;
|
| 69 |
+
color: var(--text-dark);
|
| 70 |
+
}
|
| 71 |
+
|
| 72 |
+
.nav-cta {
|
| 73 |
+
padding: 0.625rem 1.5rem;
|
| 74 |
+
background: var(--primary);
|
| 75 |
+
color: white;
|
| 76 |
+
text-decoration: none;
|
| 77 |
+
border-radius: 8px;
|
| 78 |
+
font-weight: 600;
|
| 79 |
+
font-size: 0.9rem;
|
| 80 |
+
transition: all 0.3s ease;
|
| 81 |
+
}
|
| 82 |
+
|
| 83 |
+
.nav-cta:hover {
|
| 84 |
+
background: var(--primary-dark);
|
| 85 |
+
transform: translateY(-2px);
|
| 86 |
+
box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);
|
| 87 |
+
}
|
| 88 |
+
|
| 89 |
+
/* Main Content */
|
| 90 |
+
.main-content {
|
| 91 |
+
padding-top: 80px;
|
| 92 |
+
}
|
| 93 |
+
|
| 94 |
+
/* Hero Section */
|
| 95 |
+
.hero-section {
|
| 96 |
+
padding: 6rem 2rem 4rem;
|
| 97 |
+
text-align: center;
|
| 98 |
+
position: relative;
|
| 99 |
+
}
|
| 100 |
+
|
| 101 |
+
.hero-container {
|
| 102 |
+
max-width: 1000px;
|
| 103 |
+
margin: 0 auto;
|
| 104 |
+
}
|
| 105 |
+
|
| 106 |
+
.badge {
|
| 107 |
+
display: inline-block;
|
| 108 |
+
padding: 0.5rem 1rem;
|
| 109 |
+
background: linear-gradient(135deg, rgba(99, 102, 241, 0.1), rgba(139, 92, 246, 0.1));
|
| 110 |
+
border: 1px solid rgba(99, 102, 241, 0.2);
|
| 111 |
+
border-radius: 50px;
|
| 112 |
+
font-size: 0.875rem;
|
| 113 |
+
font-weight: 600;
|
| 114 |
+
color: var(--primary);
|
| 115 |
+
margin-bottom: 2rem;
|
| 116 |
+
animation: fadeInUp 0.6s ease;
|
| 117 |
+
}
|
| 118 |
+
|
| 119 |
+
.hero-title {
|
| 120 |
+
font-size: 4.5rem;
|
| 121 |
+
font-weight: 800;
|
| 122 |
+
line-height: 1.1;
|
| 123 |
+
margin-bottom: 1.5rem;
|
| 124 |
+
color: var(--text-dark);
|
| 125 |
+
animation: fadeInUp 0.6s ease 0.1s both;
|
| 126 |
+
}
|
| 127 |
+
|
| 128 |
+
.gradient-text {
|
| 129 |
+
background: linear-gradient(135deg, var(--primary), var(--secondary), var(--accent));
|
| 130 |
+
-webkit-background-clip: text;
|
| 131 |
+
-webkit-text-fill-color: transparent;
|
| 132 |
+
background-clip: text;
|
| 133 |
+
}
|
| 134 |
+
|
| 135 |
+
.hero-subtitle {
|
| 136 |
+
font-size: 1.25rem;
|
| 137 |
+
color: var(--text-light);
|
| 138 |
+
max-width: 700px;
|
| 139 |
+
margin: 0 auto 3rem;
|
| 140 |
+
line-height: 1.8;
|
| 141 |
+
animation: fadeInUp 0.6s ease 0.2s both;
|
| 142 |
+
}
|
| 143 |
+
|
| 144 |
+
.cta-buttons {
|
| 145 |
+
animation: fadeInUp 0.6s ease 0.3s both;
|
| 146 |
+
}
|
| 147 |
+
|
| 148 |
+
.btn-primary, .btn-secondary {
|
| 149 |
+
display: inline-flex;
|
| 150 |
+
align-items: center;
|
| 151 |
+
gap: 0.5rem;
|
| 152 |
+
padding: 1rem 2.5rem;
|
| 153 |
+
font-size: 1.125rem;
|
| 154 |
+
font-weight: 600;
|
| 155 |
+
text-decoration: none;
|
| 156 |
+
border-radius: 12px;
|
| 157 |
+
transition: all 0.3s ease;
|
| 158 |
+
cursor: pointer;
|
| 159 |
+
}
|
| 160 |
+
|
| 161 |
+
.btn-primary {
|
| 162 |
+
background: linear-gradient(135deg, var(--primary), var(--secondary));
|
| 163 |
+
color: white;
|
| 164 |
+
box-shadow: 0 10px 30px rgba(99, 102, 241, 0.3);
|
| 165 |
+
}
|
| 166 |
+
|
| 167 |
+
.btn-primary:hover {
|
| 168 |
+
transform: translateY(-3px);
|
| 169 |
+
box-shadow: 0 15px 40px rgba(99, 102, 241, 0.4);
|
| 170 |
+
}
|
| 171 |
+
|
| 172 |
+
.btn-primary .arrow {
|
| 173 |
+
transition: transform 0.3s ease;
|
| 174 |
+
}
|
| 175 |
+
|
| 176 |
+
.btn-primary:hover .arrow {
|
| 177 |
+
transform: translateX(5px);
|
| 178 |
+
}
|
| 179 |
+
|
| 180 |
+
.assessment-meta {
|
| 181 |
+
display: flex;
|
| 182 |
+
justify-content: center;
|
| 183 |
+
gap: 2rem;
|
| 184 |
+
margin-top: 2rem;
|
| 185 |
+
font-size: 0.9rem;
|
| 186 |
+
color: var(--text-light);
|
| 187 |
+
}
|
| 188 |
+
|
| 189 |
+
/* Hero Visual */
|
| 190 |
+
.hero-visual {
|
| 191 |
+
position: relative;
|
| 192 |
+
height: 400px;
|
| 193 |
+
margin-top: 5rem;
|
| 194 |
+
max-width: 900px;
|
| 195 |
+
margin-left: auto;
|
| 196 |
+
margin-right: auto;
|
| 197 |
+
}
|
| 198 |
+
|
| 199 |
+
.floating-card {
|
| 200 |
+
position: absolute;
|
| 201 |
+
background: white;
|
| 202 |
+
padding: 1.25rem 1.75rem;
|
| 203 |
+
border-radius: 16px;
|
| 204 |
+
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.1);
|
| 205 |
+
display: flex;
|
| 206 |
+
align-items: center;
|
| 207 |
+
gap: 0.75rem;
|
| 208 |
+
animation: float 6s ease-in-out infinite;
|
| 209 |
+
white-space: nowrap;
|
| 210 |
+
}
|
| 211 |
+
|
| 212 |
+
.floating-card .card-icon {
|
| 213 |
+
font-size: 1.75rem;
|
| 214 |
+
flex-shrink: 0;
|
| 215 |
+
}
|
| 216 |
+
|
| 217 |
+
.floating-card .card-text {
|
| 218 |
+
font-weight: 600;
|
| 219 |
+
color: var(--text-dark);
|
| 220 |
+
font-size: 0.95rem;
|
| 221 |
+
}
|
| 222 |
+
|
| 223 |
+
.card-1 {
|
| 224 |
+
left: 5%;
|
| 225 |
+
top: 10%;
|
| 226 |
+
animation-delay: 0s;
|
| 227 |
+
}
|
| 228 |
+
|
| 229 |
+
.card-2 {
|
| 230 |
+
right: 5%;
|
| 231 |
+
top: 50%;
|
| 232 |
+
animation-delay: 2s;
|
| 233 |
+
}
|
| 234 |
+
|
| 235 |
+
.card-3 {
|
| 236 |
+
left: 50%;
|
| 237 |
+
transform: translateX(-50%);
|
| 238 |
+
bottom: 10%;
|
| 239 |
+
animation-delay: 4s;
|
| 240 |
+
}
|
| 241 |
+
|
| 242 |
+
@keyframes float {
|
| 243 |
+
0%, 100% {
|
| 244 |
+
transform: translateY(0px);
|
| 245 |
+
}
|
| 246 |
+
50% {
|
| 247 |
+
transform: translateY(-20px);
|
| 248 |
+
}
|
| 249 |
+
}
|
| 250 |
+
|
| 251 |
+
/* Fix for card-3 animation to maintain centering */
|
| 252 |
+
.card-3 {
|
| 253 |
+
animation: floatCenter 6s ease-in-out infinite;
|
| 254 |
+
}
|
| 255 |
+
|
| 256 |
+
@keyframes floatCenter {
|
| 257 |
+
0%, 100% {
|
| 258 |
+
transform: translate(-50%, 0px);
|
| 259 |
+
}
|
| 260 |
+
50% {
|
| 261 |
+
transform: translate(-50%, -20px);
|
| 262 |
+
}
|
| 263 |
+
}
|
| 264 |
+
|
| 265 |
+
@keyframes fadeInUp {
|
| 266 |
+
from {
|
| 267 |
+
opacity: 0;
|
| 268 |
+
transform: translateY(30px);
|
| 269 |
+
}
|
| 270 |
+
to {
|
| 271 |
+
opacity: 1;
|
| 272 |
+
transform: translateY(0);
|
| 273 |
+
}
|
| 274 |
+
}
|
| 275 |
+
|
| 276 |
+
/* Features Section */
|
| 277 |
+
.features-section {
|
| 278 |
+
padding: 6rem 2rem;
|
| 279 |
+
background: var(--bg-light);
|
| 280 |
+
}
|
| 281 |
+
|
| 282 |
+
.section-container {
|
| 283 |
+
max-width: 1200px;
|
| 284 |
+
margin: 0 auto;
|
| 285 |
+
}
|
| 286 |
+
|
| 287 |
+
.section-header {
|
| 288 |
+
text-align: center;
|
| 289 |
+
margin-bottom: 4rem;
|
| 290 |
+
}
|
| 291 |
+
|
| 292 |
+
.section-header h2 {
|
| 293 |
+
font-size: 3rem;
|
| 294 |
+
font-weight: 800;
|
| 295 |
+
color: var(--text-dark);
|
| 296 |
+
margin-bottom: 1rem;
|
| 297 |
+
}
|
| 298 |
+
|
| 299 |
+
.section-header p {
|
| 300 |
+
font-size: 1.25rem;
|
| 301 |
+
color: var(--text-light);
|
| 302 |
+
}
|
| 303 |
+
|
| 304 |
+
.features-grid {
|
| 305 |
+
display: grid;
|
| 306 |
+
grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
|
| 307 |
+
gap: 2rem;
|
| 308 |
+
}
|
| 309 |
+
|
| 310 |
+
.feature-card {
|
| 311 |
+
background: white;
|
| 312 |
+
padding: 2.5rem;
|
| 313 |
+
border-radius: 20px;
|
| 314 |
+
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.05);
|
| 315 |
+
transition: all 0.3s ease;
|
| 316 |
+
}
|
| 317 |
+
|
| 318 |
+
.feature-card:hover {
|
| 319 |
+
transform: translateY(-8px);
|
| 320 |
+
box-shadow: 0 12px 40px rgba(0, 0, 0, 0.1);
|
| 321 |
+
}
|
| 322 |
+
|
| 323 |
+
.feature-icon-wrapper {
|
| 324 |
+
width: 80px;
|
| 325 |
+
height: 80px;
|
| 326 |
+
background: linear-gradient(135deg, rgba(99, 102, 241, 0.1), rgba(139, 92, 246, 0.1));
|
| 327 |
+
border-radius: 20px;
|
| 328 |
+
display: flex;
|
| 329 |
+
align-items: center;
|
| 330 |
+
justify-content: center;
|
| 331 |
+
margin-bottom: 1.5rem;
|
| 332 |
+
}
|
| 333 |
+
|
| 334 |
+
.feature-icon {
|
| 335 |
+
font-size: 2.5rem;
|
| 336 |
+
}
|
| 337 |
+
|
| 338 |
+
.feature-card h3 {
|
| 339 |
+
font-size: 1.5rem;
|
| 340 |
+
font-weight: 700;
|
| 341 |
+
color: var(--text-dark);
|
| 342 |
+
margin-bottom: 1rem;
|
| 343 |
+
}
|
| 344 |
+
|
| 345 |
+
.feature-card p {
|
| 346 |
+
color: var(--text-light);
|
| 347 |
+
line-height: 1.8;
|
| 348 |
+
}
|
| 349 |
+
|
| 350 |
+
/* CTA Section */
|
| 351 |
+
.cta-section {
|
| 352 |
+
padding: 6rem 2rem;
|
| 353 |
+
text-align: center;
|
| 354 |
+
background: linear-gradient(135deg, var(--primary), var(--secondary));
|
| 355 |
+
color: white;
|
| 356 |
+
}
|
| 357 |
+
|
| 358 |
+
.cta-container h2 {
|
| 359 |
+
font-size: 3rem;
|
| 360 |
+
font-weight: 800;
|
| 361 |
+
margin-bottom: 1rem;
|
| 362 |
+
}
|
| 363 |
+
|
| 364 |
+
.cta-container p {
|
| 365 |
+
font-size: 1.25rem;
|
| 366 |
+
margin-bottom: 2.5rem;
|
| 367 |
+
opacity: 0.9;
|
| 368 |
+
}
|
| 369 |
+
|
| 370 |
+
.btn-secondary {
|
| 371 |
+
background: white;
|
| 372 |
+
color: var(--primary);
|
| 373 |
+
}
|
| 374 |
+
|
| 375 |
+
.btn-secondary:hover {
|
| 376 |
+
transform: translateY(-3px);
|
| 377 |
+
box-shadow: 0 15px 40px rgba(255, 255, 255, 0.3);
|
| 378 |
+
}
|
| 379 |
+
|
| 380 |
+
/* Footer */
|
| 381 |
+
.footer {
|
| 382 |
+
background: var(--text-dark);
|
| 383 |
+
color: white;
|
| 384 |
+
padding: 3rem 2rem;
|
| 385 |
+
text-align: center;
|
| 386 |
+
}
|
| 387 |
+
|
| 388 |
+
.footer-container {
|
| 389 |
+
max-width: 1200px;
|
| 390 |
+
margin: 0 auto;
|
| 391 |
+
}
|
| 392 |
+
|
| 393 |
+
.footer p {
|
| 394 |
+
opacity: 0.7;
|
| 395 |
+
}
|
| 396 |
+
|
| 397 |
+
/* Responsive Design */
|
| 398 |
+
@media (max-width: 1024px) {
|
| 399 |
+
.hero-visual {
|
| 400 |
+
height: 300px;
|
| 401 |
+
}
|
| 402 |
+
|
| 403 |
+
.floating-card {
|
| 404 |
+
padding: 1rem 1.5rem;
|
| 405 |
+
font-size: 0.85rem;
|
| 406 |
+
}
|
| 407 |
+
|
| 408 |
+
.floating-card .card-icon {
|
| 409 |
+
font-size: 1.5rem;
|
| 410 |
+
}
|
| 411 |
+
}
|
| 412 |
+
|
| 413 |
+
@media (max-width: 768px) {
|
| 414 |
+
.nav-container {
|
| 415 |
+
padding: 0 1rem;
|
| 416 |
+
}
|
| 417 |
+
|
| 418 |
+
.hero-section {
|
| 419 |
+
padding: 4rem 1rem 3rem;
|
| 420 |
+
}
|
| 421 |
+
|
| 422 |
+
.hero-title {
|
| 423 |
+
font-size: 2.5rem;
|
| 424 |
+
}
|
| 425 |
+
|
| 426 |
+
.hero-subtitle {
|
| 427 |
+
font-size: 1.1rem;
|
| 428 |
+
}
|
| 429 |
+
|
| 430 |
+
.assessment-meta {
|
| 431 |
+
flex-direction: column;
|
| 432 |
+
gap: 0.5rem;
|
| 433 |
+
}
|
| 434 |
+
|
| 435 |
+
.hero-visual {
|
| 436 |
+
display: none;
|
| 437 |
+
}
|
| 438 |
+
|
| 439 |
+
.section-header h2 {
|
| 440 |
+
font-size: 2rem;
|
| 441 |
+
}
|
| 442 |
+
|
| 443 |
+
.cta-container h2 {
|
| 444 |
+
font-size: 2rem;
|
| 445 |
+
}
|
| 446 |
+
|
| 447 |
+
.features-grid {
|
| 448 |
+
grid-template-columns: 1fr;
|
| 449 |
+
}
|
| 450 |
+
|
| 451 |
+
.btn-primary, .btn-secondary {
|
| 452 |
+
padding: 0.875rem 2rem;
|
| 453 |
+
font-size: 1rem;
|
| 454 |
+
}
|
| 455 |
+
}
|
static/script.js
ADDED
|
@@ -0,0 +1,316 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// Helper function to sanitize religion names for IDs
|
| 2 |
+
function sanitizeReligionName(name) {
|
| 3 |
+
return name.replace(/\s+/g, '-');
|
| 4 |
+
}
|
| 5 |
+
|
| 6 |
+
// ==================== AUTHENTICATION ====================
|
| 7 |
+
|
| 8 |
+
function authenticate() {
|
| 9 |
+
const username = document.getElementById('authUsername').value.trim();
|
| 10 |
+
const password = document.getElementById('authPassword').value;
|
| 11 |
+
|
| 12 |
+
if (!username || !password) {
|
| 13 |
+
document.getElementById('result').innerHTML =
|
| 14 |
+
'<p class="error-msg">β οΈ Please fill in all fields</p>';
|
| 15 |
+
return;
|
| 16 |
+
}
|
| 17 |
+
|
| 18 |
+
const endpoint = window.location.pathname === '/signup' ? '/signup' : '/login';
|
| 19 |
+
|
| 20 |
+
fetch(endpoint, {
|
| 21 |
+
method: 'POST',
|
| 22 |
+
headers: {'Content-Type': 'application/json'},
|
| 23 |
+
body: JSON.stringify({username, password})
|
| 24 |
+
})
|
| 25 |
+
.then(response => response.json())
|
| 26 |
+
.then(data => {
|
| 27 |
+
if (data.success) {
|
| 28 |
+
window.location.href = '/';
|
| 29 |
+
} else {
|
| 30 |
+
document.getElementById('result').innerHTML =
|
| 31 |
+
`<p class="error-msg">${data.message}</p>`;
|
| 32 |
+
}
|
| 33 |
+
});
|
| 34 |
+
}
|
| 35 |
+
|
| 36 |
+
function switchAuth() {
|
| 37 |
+
const newPath = window.location.pathname === '/signup' ? '/login' : '/signup';
|
| 38 |
+
window.location.href = newPath;
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
// ==================== ASSESSMENT ====================
|
| 42 |
+
|
| 43 |
+
var currentQuestion = 1;
|
| 44 |
+
var maxQuestionReached = 1;
|
| 45 |
+
var assessmentDataEl = document.getElementById('assessmentData');
|
| 46 |
+
var totalQuestions = assessmentDataEl ? parseInt(assessmentDataEl.getAttribute('data-total')) : 0;
|
| 47 |
+
var questionIds = assessmentDataEl ? JSON.parse(assessmentDataEl.getAttribute('data-ids')) : [];
|
| 48 |
+
|
| 49 |
+
// Show first question on load
|
| 50 |
+
window.addEventListener('DOMContentLoaded', function() {
|
| 51 |
+
if (assessmentDataEl) {
|
| 52 |
+
showQuestion(1);
|
| 53 |
+
}
|
| 54 |
+
|
| 55 |
+
// Add Enter key listener for password field if it exists
|
| 56 |
+
const passwordField = document.getElementById('authPassword');
|
| 57 |
+
if (passwordField) {
|
| 58 |
+
passwordField.addEventListener('keypress', function(e) {
|
| 59 |
+
if (e.key === 'Enter') authenticate();
|
| 60 |
+
});
|
| 61 |
+
}
|
| 62 |
+
});
|
| 63 |
+
|
| 64 |
+
function showQuestion(questionIndex) {
|
| 65 |
+
if (questionIndex > maxQuestionReached + 1) return;
|
| 66 |
+
if (questionIndex > maxQuestionReached) maxQuestionReached = questionIndex;
|
| 67 |
+
|
| 68 |
+
document.querySelectorAll('.question-block').forEach(function(block) {
|
| 69 |
+
block.classList.remove('active');
|
| 70 |
+
var blockIndex = parseInt(block.getAttribute('data-question-index'));
|
| 71 |
+
if (blockIndex === questionIndex) block.classList.add('active');
|
| 72 |
+
});
|
| 73 |
+
|
| 74 |
+
currentQuestion = questionIndex;
|
| 75 |
+
document.getElementById('questionCounter').textContent = 'Question ' + questionIndex + ' of ' + totalQuestions;
|
| 76 |
+
document.getElementById('progressBar').style.width = (questionIndex / totalQuestions) * 100 + '%';
|
| 77 |
+
updateNavigationButtons();
|
| 78 |
+
}
|
| 79 |
+
|
| 80 |
+
function updateNavigationButtons() {
|
| 81 |
+
// Check if we're on the last question and it's answered
|
| 82 |
+
var currentQuestionId = questionIds[currentQuestion - 1];
|
| 83 |
+
var radioName = 'q' + currentQuestionId;
|
| 84 |
+
var isAnswered = document.querySelector('input[name="' + radioName + '"]:checked') !== null;
|
| 85 |
+
|
| 86 |
+
if (currentQuestion === totalQuestions && isAnswered) {
|
| 87 |
+
document.getElementById('submitBtn').style.display = 'block';
|
| 88 |
+
}
|
| 89 |
+
}
|
| 90 |
+
|
| 91 |
+
function handleAnswer(radioElement) {
|
| 92 |
+
var questionIndex = parseInt(radioElement.getAttribute('data-question-index'));
|
| 93 |
+
|
| 94 |
+
// Only process if this is the current question
|
| 95 |
+
if (questionIndex !== currentQuestion) {
|
| 96 |
+
return;
|
| 97 |
+
}
|
| 98 |
+
|
| 99 |
+
// Auto-advance to next question after selection
|
| 100 |
+
setTimeout(function() {
|
| 101 |
+
if (questionIndex < totalQuestions) {
|
| 102 |
+
showQuestion(questionIndex + 1);
|
| 103 |
+
} else {
|
| 104 |
+
// Last question - show submit button
|
| 105 |
+
document.getElementById('submitBtn').style.display = 'block';
|
| 106 |
+
}
|
| 107 |
+
}, 400);
|
| 108 |
+
}
|
| 109 |
+
|
| 110 |
+
function goToNext() {
|
| 111 |
+
if (currentQuestion < totalQuestions) {
|
| 112 |
+
showQuestion(currentQuestion + 1);
|
| 113 |
+
}
|
| 114 |
+
}
|
| 115 |
+
|
| 116 |
+
function goToPrev() {
|
| 117 |
+
if (currentQuestion > 1) {
|
| 118 |
+
showQuestion(currentQuestion - 1);
|
| 119 |
+
}
|
| 120 |
+
}
|
| 121 |
+
|
| 122 |
+
function submitAssessment() {
|
| 123 |
+
var form = document.getElementById('assessmentForm');
|
| 124 |
+
var answers = [];
|
| 125 |
+
|
| 126 |
+
questionIds.forEach(function(qId) {
|
| 127 |
+
var radioName = 'q' + qId;
|
| 128 |
+
var selectedRadio = form.querySelector('input[name="' + radioName + '"]:checked');
|
| 129 |
+
if (selectedRadio) {
|
| 130 |
+
answers.push({
|
| 131 |
+
question_id: qId,
|
| 132 |
+
answer: selectedRadio.value
|
| 133 |
+
});
|
| 134 |
+
}
|
| 135 |
+
});
|
| 136 |
+
|
| 137 |
+
if (answers.length !== totalQuestions) {
|
| 138 |
+
document.getElementById('errorMsg').innerHTML =
|
| 139 |
+
'<p class="error-msg">β οΈ Please answer all questions</p>';
|
| 140 |
+
return;
|
| 141 |
+
}
|
| 142 |
+
|
| 143 |
+
document.getElementById('submitBtn').disabled = true;
|
| 144 |
+
document.getElementById('submitBtn').textContent = 'β¨ Calculating...';
|
| 145 |
+
|
| 146 |
+
fetch('/submit_assessment', {
|
| 147 |
+
method: 'POST',
|
| 148 |
+
headers: {'Content-Type': 'application/json'},
|
| 149 |
+
body: JSON.stringify({answers: answers})
|
| 150 |
+
})
|
| 151 |
+
.then(function(response) { return response.json(); })
|
| 152 |
+
.then(function(data) {
|
| 153 |
+
if (data.success) {
|
| 154 |
+
window.location.reload();
|
| 155 |
+
} else {
|
| 156 |
+
document.getElementById('errorMsg').innerHTML =
|
| 157 |
+
'<p class="error-msg">' + data.message + '</p>';
|
| 158 |
+
document.getElementById('submitBtn').disabled = false;
|
| 159 |
+
document.getElementById('submitBtn').textContent = 'β¨ Discover Your Path';
|
| 160 |
+
}
|
| 161 |
+
});
|
| 162 |
+
}
|
| 163 |
+
|
| 164 |
+
function resetAssessment() {
|
| 165 |
+
if (!confirm('Are you sure you want to retake the assessment? Your current results will be cleared.')) {
|
| 166 |
+
return;
|
| 167 |
+
}
|
| 168 |
+
|
| 169 |
+
fetch('/reset_assessment', {
|
| 170 |
+
method: 'POST',
|
| 171 |
+
headers: {'Content-Type': 'application/json'}
|
| 172 |
+
})
|
| 173 |
+
.then(function(response) { return response.json(); })
|
| 174 |
+
.then(function(data) {
|
| 175 |
+
if (data.success) {
|
| 176 |
+
window.location.reload();
|
| 177 |
+
}
|
| 178 |
+
});
|
| 179 |
+
}
|
| 180 |
+
|
| 181 |
+
// ==================== CHAT FUNCTIONALITY ====================
|
| 182 |
+
|
| 183 |
+
var chatHistories = {};
|
| 184 |
+
|
| 185 |
+
function formatBotResponse(text) {
|
| 186 |
+
var div = document.createElement('div');
|
| 187 |
+
div.textContent = text;
|
| 188 |
+
var escaped = div.innerHTML;
|
| 189 |
+
|
| 190 |
+
// Check for bullet points
|
| 191 |
+
if (escaped.match(/\*\s+/g) || escaped.match(/β’\s+/g) || escaped.match(/^\s*-\s+/gm)) {
|
| 192 |
+
var lines = escaped.split(/(?:\*|β’|\n-)\s+/);
|
| 193 |
+
if (lines.length > 1) {
|
| 194 |
+
var formatted = lines[0].trim() ? lines[0].trim() + '<br><br>' : '';
|
| 195 |
+
formatted += '<ul style="margin: 0; padding-left: 20px; line-height: 1.8;">';
|
| 196 |
+
for (var i = 1; i < lines.length; i++) {
|
| 197 |
+
if (lines[i].trim()) {
|
| 198 |
+
formatted += '<li style="margin-bottom: 6px;">' + lines[i].trim() + '</li>';
|
| 199 |
+
}
|
| 200 |
+
}
|
| 201 |
+
return formatted + '</ul>';
|
| 202 |
+
}
|
| 203 |
+
}
|
| 204 |
+
return escaped.replace(/\n/g, '<br>');
|
| 205 |
+
}
|
| 206 |
+
|
| 207 |
+
function toggleChat(religionName) {
|
| 208 |
+
var chatId = 'chat-' + sanitizeReligionName(religionName);
|
| 209 |
+
var chatWindow = document.getElementById(chatId);
|
| 210 |
+
|
| 211 |
+
if (chatWindow.classList.contains('open')) {
|
| 212 |
+
chatWindow.classList.remove('open');
|
| 213 |
+
} else {
|
| 214 |
+
chatWindow.classList.add('open');
|
| 215 |
+
var inputId = 'input-' + sanitizeReligionName(religionName);
|
| 216 |
+
setTimeout(function() {
|
| 217 |
+
document.getElementById(inputId).focus();
|
| 218 |
+
}, 300);
|
| 219 |
+
}
|
| 220 |
+
}
|
| 221 |
+
|
| 222 |
+
function sendMessage(religionName) {
|
| 223 |
+
var inputId = 'input-' + sanitizeReligionName(religionName);
|
| 224 |
+
var messagesId = 'messages-' + sanitizeReligionName(religionName);
|
| 225 |
+
var sendBtnId = 'send-' + sanitizeReligionName(religionName);
|
| 226 |
+
|
| 227 |
+
var inputEl = document.getElementById(inputId);
|
| 228 |
+
var messagesEl = document.getElementById(messagesId);
|
| 229 |
+
var sendBtn = document.getElementById(sendBtnId);
|
| 230 |
+
|
| 231 |
+
var message = inputEl.value.trim();
|
| 232 |
+
if (!message) return;
|
| 233 |
+
|
| 234 |
+
// Initialize chat history if not exists
|
| 235 |
+
if (!chatHistories[religionName]) {
|
| 236 |
+
chatHistories[religionName] = [];
|
| 237 |
+
}
|
| 238 |
+
|
| 239 |
+
// Add user message to UI
|
| 240 |
+
var userMsgDiv = document.createElement('div');
|
| 241 |
+
userMsgDiv.className = 'chat-message user';
|
| 242 |
+
userMsgDiv.textContent = message;
|
| 243 |
+
messagesEl.appendChild(userMsgDiv);
|
| 244 |
+
|
| 245 |
+
// Clear input and disable send button
|
| 246 |
+
inputEl.value = '';
|
| 247 |
+
sendBtn.disabled = true;
|
| 248 |
+
|
| 249 |
+
// Show typing indicator
|
| 250 |
+
var typingDiv = document.createElement('div');
|
| 251 |
+
typingDiv.className = 'chat-typing';
|
| 252 |
+
typingDiv.textContent = 'π Thinking...';
|
| 253 |
+
messagesEl.appendChild(typingDiv);
|
| 254 |
+
|
| 255 |
+
// Scroll to bottom
|
| 256 |
+
messagesEl.scrollTop = messagesEl.scrollHeight;
|
| 257 |
+
|
| 258 |
+
// Add to chat history
|
| 259 |
+
chatHistories[religionName].push({
|
| 260 |
+
role: 'user',
|
| 261 |
+
content: message
|
| 262 |
+
});
|
| 263 |
+
|
| 264 |
+
// Send to backend
|
| 265 |
+
fetch('/chat', {
|
| 266 |
+
method: 'POST',
|
| 267 |
+
headers: {'Content-Type': 'application/json'},
|
| 268 |
+
body: JSON.stringify({
|
| 269 |
+
message: message,
|
| 270 |
+
religion: religionName,
|
| 271 |
+
history: chatHistories[religionName]
|
| 272 |
+
})
|
| 273 |
+
})
|
| 274 |
+
.then(function(response) { return response.json(); })
|
| 275 |
+
.then(function(data) {
|
| 276 |
+
messagesEl.removeChild(typingDiv);
|
| 277 |
+
|
| 278 |
+
if (data.success) {
|
| 279 |
+
var botMsgDiv = document.createElement('div');
|
| 280 |
+
botMsgDiv.className = 'chat-message bot';
|
| 281 |
+
|
| 282 |
+
// Format the response with proper bullet points
|
| 283 |
+
var formattedResponse = formatBotResponse(data.response);
|
| 284 |
+
botMsgDiv.innerHTML = formattedResponse;
|
| 285 |
+
|
| 286 |
+
messagesEl.appendChild(botMsgDiv);
|
| 287 |
+
|
| 288 |
+
chatHistories[religionName].push({
|
| 289 |
+
role: 'assistant',
|
| 290 |
+
content: data.response
|
| 291 |
+
});
|
| 292 |
+
} else {
|
| 293 |
+
var errorMsgDiv = document.createElement('div');
|
| 294 |
+
errorMsgDiv.className = 'chat-message bot';
|
| 295 |
+
errorMsgDiv.style.color = '#EF4444';
|
| 296 |
+
errorMsgDiv.textContent = 'β ' + data.message;
|
| 297 |
+
messagesEl.appendChild(errorMsgDiv);
|
| 298 |
+
}
|
| 299 |
+
|
| 300 |
+
sendBtn.disabled = false;
|
| 301 |
+
messagesEl.scrollTop = messagesEl.scrollHeight;
|
| 302 |
+
})
|
| 303 |
+
.catch(function(error) {
|
| 304 |
+
messagesEl.removeChild(typingDiv);
|
| 305 |
+
|
| 306 |
+
var errorMsgDiv = document.createElement('div');
|
| 307 |
+
errorMsgDiv.className = 'chat-message bot';
|
| 308 |
+
errorMsgDiv.style.color = '#EF4444';
|
| 309 |
+
errorMsgDiv.textContent = 'β Connection error';
|
| 310 |
+
messagesEl.appendChild(errorMsgDiv);
|
| 311 |
+
|
| 312 |
+
sendBtn.disabled = false;
|
| 313 |
+
messagesEl.scrollTop = messagesEl.scrollHeight;
|
| 314 |
+
});
|
| 315 |
+
}
|
| 316 |
+
|
static/style.css
ADDED
|
@@ -0,0 +1,641 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
* {
|
| 2 |
+
margin: 0;
|
| 3 |
+
padding: 0;
|
| 4 |
+
box-sizing: border-box;
|
| 5 |
+
}
|
| 6 |
+
|
| 7 |
+
body {
|
| 8 |
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
| 9 |
+
background: #F5F5F5;
|
| 10 |
+
min-height: 100vh;
|
| 11 |
+
display: flex;
|
| 12 |
+
justify-content: center;
|
| 13 |
+
align-items: center;
|
| 14 |
+
padding: 10px;
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
.container {
|
| 18 |
+
background: white;
|
| 19 |
+
border-radius: 16px;
|
| 20 |
+
padding: 20px;
|
| 21 |
+
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
|
| 22 |
+
max-width: 700px;
|
| 23 |
+
width: 100%;
|
| 24 |
+
animation: slideIn 0.4s ease;
|
| 25 |
+
max-height: 95vh;
|
| 26 |
+
overflow-y: auto;
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
/* Mobile Responsive */
|
| 30 |
+
@media (max-width: 768px) {
|
| 31 |
+
.container {
|
| 32 |
+
padding: 15px;
|
| 33 |
+
border-radius: 12px;
|
| 34 |
+
margin: 5px;
|
| 35 |
+
}
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
@keyframes slideIn {
|
| 39 |
+
from { opacity: 0; transform: translateY(20px); }
|
| 40 |
+
to { opacity: 1; transform: translateY(0); }
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
h1 {
|
| 44 |
+
color: #3D3D3D;
|
| 45 |
+
font-size: 28px;
|
| 46 |
+
margin-bottom: 8px;
|
| 47 |
+
text-align: center;
|
| 48 |
+
font-weight: 800;
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
/* Mobile Responsive */
|
| 52 |
+
@media (max-width: 768px) {
|
| 53 |
+
h1 {
|
| 54 |
+
font-size: 24px;
|
| 55 |
+
}
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
h3 {
|
| 59 |
+
text-align: center;
|
| 60 |
+
color: #3D3D3D;
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
p {
|
| 64 |
+
color: #6B7280;
|
| 65 |
+
text-align: center;
|
| 66 |
+
margin-bottom: 30px;
|
| 67 |
+
font-size: 16px;
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
.subtitle {
|
| 71 |
+
color: #9CA3AF;
|
| 72 |
+
font-size: 15px;
|
| 73 |
+
text-align: center;
|
| 74 |
+
margin-bottom: 25px;
|
| 75 |
+
line-height: 1.6;
|
| 76 |
+
}
|
| 77 |
+
|
| 78 |
+
/* Mobile Responsive */
|
| 79 |
+
@media (max-width: 768px) {
|
| 80 |
+
p {
|
| 81 |
+
font-size: 18px;
|
| 82 |
+
}
|
| 83 |
+
|
| 84 |
+
.subtitle {
|
| 85 |
+
font-size: 16px;
|
| 86 |
+
}
|
| 87 |
+
}
|
| 88 |
+
|
| 89 |
+
/* Form Inputs */
|
| 90 |
+
input[type="text"], input[type="password"] {
|
| 91 |
+
width: 100%;
|
| 92 |
+
padding: 14px 18px;
|
| 93 |
+
font-size: 16px;
|
| 94 |
+
border: none;
|
| 95 |
+
background: #F5F5F5;
|
| 96 |
+
border-radius: 10px;
|
| 97 |
+
transition: all 0.2s;
|
| 98 |
+
outline: none;
|
| 99 |
+
}
|
| 100 |
+
|
| 101 |
+
/* Mobile Responsive */
|
| 102 |
+
@media (max-width: 768px) {
|
| 103 |
+
input[type="text"], input[type="password"] {
|
| 104 |
+
padding: 16px 20px;
|
| 105 |
+
font-size: 18px;
|
| 106 |
+
}
|
| 107 |
+
}
|
| 108 |
+
|
| 109 |
+
input:focus {
|
| 110 |
+
background: #EBEBEB;
|
| 111 |
+
box-shadow: 0 0 0 2px #E5E5E5;
|
| 112 |
+
}
|
| 113 |
+
|
| 114 |
+
/* Buttons - Consolidated styles */
|
| 115 |
+
button, .btn, .nav-btn, .submit-btn {
|
| 116 |
+
padding: 14px 28px;
|
| 117 |
+
font-size: 16px;
|
| 118 |
+
background: #3D3D3D;
|
| 119 |
+
color: white;
|
| 120 |
+
border: none;
|
| 121 |
+
border-radius: 10px;
|
| 122 |
+
cursor: pointer;
|
| 123 |
+
transition: all 0.2s;
|
| 124 |
+
font-weight: 600;
|
| 125 |
+
text-decoration: none;
|
| 126 |
+
display: inline-block;
|
| 127 |
+
}
|
| 128 |
+
|
| 129 |
+
/* Mobile Responsive */
|
| 130 |
+
@media (max-width: 768px) {
|
| 131 |
+
button, .btn, .nav-btn, .submit-btn {
|
| 132 |
+
padding: 16px 32px;
|
| 133 |
+
font-size: 18px;
|
| 134 |
+
}
|
| 135 |
+
}
|
| 136 |
+
|
| 137 |
+
button:hover, .btn:hover, .nav-btn:hover, .submit-btn:hover {
|
| 138 |
+
background: #1A1A1A;
|
| 139 |
+
transform: translateY(-1px);
|
| 140 |
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
| 141 |
+
}
|
| 142 |
+
|
| 143 |
+
button:active, .btn:active {
|
| 144 |
+
transform: translateY(0);
|
| 145 |
+
}
|
| 146 |
+
|
| 147 |
+
button:disabled {
|
| 148 |
+
background: #E5E5E5;
|
| 149 |
+
color: #999;
|
| 150 |
+
cursor: not-allowed;
|
| 151 |
+
transform: none;
|
| 152 |
+
}
|
| 153 |
+
|
| 154 |
+
.nav-btn:disabled {
|
| 155 |
+
opacity: 0.3;
|
| 156 |
+
cursor: not-allowed;
|
| 157 |
+
transform: none;
|
| 158 |
+
}
|
| 159 |
+
|
| 160 |
+
/* Secondary Buttons - Consolidated */
|
| 161 |
+
.logout-btn, .reset-btn {
|
| 162 |
+
background: #6B7280;
|
| 163 |
+
padding: 8px 16px;
|
| 164 |
+
font-size: 13px;
|
| 165 |
+
margin-top: 15px;
|
| 166 |
+
}
|
| 167 |
+
|
| 168 |
+
.logout-btn:hover, .reset-btn:hover {
|
| 169 |
+
background: #4B5563;
|
| 170 |
+
box-shadow: 0 4px 12px rgba(107, 114, 128, 0.3);
|
| 171 |
+
}
|
| 172 |
+
|
| 173 |
+
/* Submit Button */
|
| 174 |
+
.submit-btn {
|
| 175 |
+
width: 100%;
|
| 176 |
+
padding: 16px;
|
| 177 |
+
font-size: 16px;
|
| 178 |
+
margin-top: 10px;
|
| 179 |
+
}
|
| 180 |
+
|
| 181 |
+
/* Auth Form */
|
| 182 |
+
.auth-form input {
|
| 183 |
+
width: 100%;
|
| 184 |
+
margin-bottom: 15px;
|
| 185 |
+
}
|
| 186 |
+
|
| 187 |
+
.auth-form button {
|
| 188 |
+
width: 100%;
|
| 189 |
+
}
|
| 190 |
+
|
| 191 |
+
.switch-link {
|
| 192 |
+
color: #3D3D3D;
|
| 193 |
+
text-decoration: none;
|
| 194 |
+
cursor: pointer;
|
| 195 |
+
font-weight: 600;
|
| 196 |
+
margin-top: 15px;
|
| 197 |
+
display: inline-block;
|
| 198 |
+
transition: color 0.2s;
|
| 199 |
+
}
|
| 200 |
+
|
| 201 |
+
.switch-link:hover {
|
| 202 |
+
color: #1A1A1A;
|
| 203 |
+
text-decoration: underline;
|
| 204 |
+
}
|
| 205 |
+
|
| 206 |
+
/* Question Blocks */
|
| 207 |
+
.question-block {
|
| 208 |
+
background: #FAFAFA;
|
| 209 |
+
padding: 25px;
|
| 210 |
+
border-radius: 12px;
|
| 211 |
+
margin-bottom: 20px;
|
| 212 |
+
border: none;
|
| 213 |
+
display: none;
|
| 214 |
+
min-height: 400px;
|
| 215 |
+
}
|
| 216 |
+
|
| 217 |
+
/* Mobile Responsive */
|
| 218 |
+
@media (max-width: 768px) {
|
| 219 |
+
.question-block {
|
| 220 |
+
padding: 20px;
|
| 221 |
+
min-height: 350px;
|
| 222 |
+
}
|
| 223 |
+
}
|
| 224 |
+
|
| 225 |
+
.question-block.active {
|
| 226 |
+
display: block;
|
| 227 |
+
animation: fadeIn 0.3s ease;
|
| 228 |
+
}
|
| 229 |
+
|
| 230 |
+
@keyframes fadeIn {
|
| 231 |
+
from { opacity: 0; transform: translateX(20px); }
|
| 232 |
+
to { opacity: 1; transform: translateX(0); }
|
| 233 |
+
}
|
| 234 |
+
|
| 235 |
+
.question-block h4 {
|
| 236 |
+
color: #3D3D3D;
|
| 237 |
+
margin-bottom: 25px;
|
| 238 |
+
font-weight: 700;
|
| 239 |
+
font-size: 20px;
|
| 240 |
+
line-height: 1.6;
|
| 241 |
+
}
|
| 242 |
+
|
| 243 |
+
/* Mobile Responsive */
|
| 244 |
+
@media (max-width: 768px) {
|
| 245 |
+
.question-block h4 {
|
| 246 |
+
font-size: 22px;
|
| 247 |
+
}
|
| 248 |
+
}
|
| 249 |
+
|
| 250 |
+
.question-number {
|
| 251 |
+
display: inline-block;
|
| 252 |
+
background: #3D3D3D;
|
| 253 |
+
color: #fff;
|
| 254 |
+
width: 32px;
|
| 255 |
+
height: 32px;
|
| 256 |
+
border-radius: 50%;
|
| 257 |
+
text-align: center;
|
| 258 |
+
line-height: 32px;
|
| 259 |
+
margin-right: 12px;
|
| 260 |
+
font-size: 16px;
|
| 261 |
+
}
|
| 262 |
+
|
| 263 |
+
/* Options */
|
| 264 |
+
.option {
|
| 265 |
+
display: block;
|
| 266 |
+
padding: 18px 22px;
|
| 267 |
+
margin-bottom: 14px;
|
| 268 |
+
background: white;
|
| 269 |
+
border: none;
|
| 270 |
+
border-radius: 10px;
|
| 271 |
+
cursor: pointer;
|
| 272 |
+
transition: all 0.2s;
|
| 273 |
+
font-size: 16px;
|
| 274 |
+
color: #3D3D3D;
|
| 275 |
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
|
| 276 |
+
}
|
| 277 |
+
|
| 278 |
+
/* Mobile Responsive */
|
| 279 |
+
@media (max-width: 768px) {
|
| 280 |
+
.option {
|
| 281 |
+
padding: 20px 24px;
|
| 282 |
+
margin-bottom: 16px;
|
| 283 |
+
font-size: 18px;
|
| 284 |
+
}
|
| 285 |
+
}
|
| 286 |
+
|
| 287 |
+
.option:hover {
|
| 288 |
+
background: #F5F5F5;
|
| 289 |
+
transform: translateX(5px);
|
| 290 |
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
|
| 291 |
+
}
|
| 292 |
+
|
| 293 |
+
.option input[type="radio"] {
|
| 294 |
+
margin-right: 14px;
|
| 295 |
+
cursor: pointer;
|
| 296 |
+
width: 20px;
|
| 297 |
+
height: 20px;
|
| 298 |
+
}
|
| 299 |
+
|
| 300 |
+
/* Mobile Responsive */
|
| 301 |
+
@media (max-width: 768px) {
|
| 302 |
+
.option input[type="radio"] {
|
| 303 |
+
width: 22px;
|
| 304 |
+
height: 22px;
|
| 305 |
+
margin-right: 16px;
|
| 306 |
+
}
|
| 307 |
+
}
|
| 308 |
+
|
| 309 |
+
.option input[type="radio"]:disabled {
|
| 310 |
+
cursor: not-allowed;
|
| 311 |
+
opacity: 0.5;
|
| 312 |
+
}
|
| 313 |
+
|
| 314 |
+
.option:has(input[type="radio"]:disabled) {
|
| 315 |
+
opacity: 0.4;
|
| 316 |
+
cursor: not-allowed;
|
| 317 |
+
}
|
| 318 |
+
|
| 319 |
+
.option:has(input[type="radio"]:disabled):hover {
|
| 320 |
+
background: white;
|
| 321 |
+
transform: none;
|
| 322 |
+
}
|
| 323 |
+
|
| 324 |
+
/* Question Counter & Progress */
|
| 325 |
+
.question-counter {
|
| 326 |
+
text-align: center;
|
| 327 |
+
color: #999;
|
| 328 |
+
font-size: 16px;
|
| 329 |
+
margin-bottom: 15px;
|
| 330 |
+
font-weight: 600;
|
| 331 |
+
}
|
| 332 |
+
|
| 333 |
+
/* Mobile Responsive */
|
| 334 |
+
@media (max-width: 768px) {
|
| 335 |
+
.question-counter {
|
| 336 |
+
font-size: 18px;
|
| 337 |
+
}
|
| 338 |
+
}
|
| 339 |
+
|
| 340 |
+
.progress-bar {
|
| 341 |
+
background: #F5F5F5;
|
| 342 |
+
height: 8px;
|
| 343 |
+
border-radius: 4px;
|
| 344 |
+
overflow: hidden;
|
| 345 |
+
margin-bottom: 20px;
|
| 346 |
+
}
|
| 347 |
+
|
| 348 |
+
.progress-fill {
|
| 349 |
+
background: #3D3D3D;
|
| 350 |
+
height: 100%;
|
| 351 |
+
transition: width 0.3s;
|
| 352 |
+
}
|
| 353 |
+
|
| 354 |
+
/* Navigation */
|
| 355 |
+
.nav-buttons {
|
| 356 |
+
display: flex;
|
| 357 |
+
gap: 12px;
|
| 358 |
+
justify-content: flex-start;
|
| 359 |
+
margin-top: 20px;
|
| 360 |
+
}
|
| 361 |
+
|
| 362 |
+
.buttons-row {
|
| 363 |
+
display: flex;
|
| 364 |
+
gap: 10px;
|
| 365 |
+
justify-content: center;
|
| 366 |
+
margin-top: 20px;
|
| 367 |
+
}
|
| 368 |
+
|
| 369 |
+
/* Results */
|
| 370 |
+
.result-card {
|
| 371 |
+
padding: 25px;
|
| 372 |
+
border-radius: 12px;
|
| 373 |
+
margin-bottom: 20px;
|
| 374 |
+
border: none;
|
| 375 |
+
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);
|
| 376 |
+
}
|
| 377 |
+
|
| 378 |
+
.result-card.rank-1 {
|
| 379 |
+
background: #FFFACD;
|
| 380 |
+
}
|
| 381 |
+
|
| 382 |
+
.result-card.rank-2 {
|
| 383 |
+
background: #B4C7E7;
|
| 384 |
+
}
|
| 385 |
+
|
| 386 |
+
.result-card.rank-3 {
|
| 387 |
+
background: #90EE90;
|
| 388 |
+
}
|
| 389 |
+
|
| 390 |
+
.result-header {
|
| 391 |
+
display: flex;
|
| 392 |
+
align-items: center;
|
| 393 |
+
justify-content: space-between;
|
| 394 |
+
margin-bottom: 15px;
|
| 395 |
+
}
|
| 396 |
+
|
| 397 |
+
.result-rank {
|
| 398 |
+
color: #fff;
|
| 399 |
+
width: 40px;
|
| 400 |
+
height: 40px;
|
| 401 |
+
border-radius: 50%;
|
| 402 |
+
display: flex;
|
| 403 |
+
align-items: center;
|
| 404 |
+
justify-content: center;
|
| 405 |
+
font-size: 20px;
|
| 406 |
+
font-weight: 800;
|
| 407 |
+
background: #3D3D3D;
|
| 408 |
+
}
|
| 409 |
+
|
| 410 |
+
.result-title {
|
| 411 |
+
flex: 1;
|
| 412 |
+
margin-left: 15px;
|
| 413 |
+
}
|
| 414 |
+
|
| 415 |
+
.result-title h3 {
|
| 416 |
+
font-size: 22px;
|
| 417 |
+
margin-bottom: 5px;
|
| 418 |
+
color: #3D3D3D;
|
| 419 |
+
}
|
| 420 |
+
|
| 421 |
+
.result-percentage {
|
| 422 |
+
font-size: 24px;
|
| 423 |
+
font-weight: 800;
|
| 424 |
+
color: #3D3D3D;
|
| 425 |
+
}
|
| 426 |
+
|
| 427 |
+
.result-description {
|
| 428 |
+
color: #666;
|
| 429 |
+
line-height: 1.6;
|
| 430 |
+
margin-bottom: 12px;
|
| 431 |
+
font-size: 14px;
|
| 432 |
+
}
|
| 433 |
+
|
| 434 |
+
.result-details {
|
| 435 |
+
background: rgba(255, 255, 255, 0.6);
|
| 436 |
+
border: none;
|
| 437 |
+
padding: 15px;
|
| 438 |
+
border-radius: 8px;
|
| 439 |
+
margin-top: 15px;
|
| 440 |
+
}
|
| 441 |
+
|
| 442 |
+
.result-details h5 {
|
| 443 |
+
color: #3D3D3D;
|
| 444 |
+
font-size: 13px;
|
| 445 |
+
margin-bottom: 8px;
|
| 446 |
+
font-weight: 700;
|
| 447 |
+
}
|
| 448 |
+
|
| 449 |
+
.result-details p {
|
| 450 |
+
color: #666;
|
| 451 |
+
font-size: 13px;
|
| 452 |
+
margin-bottom: 10px;
|
| 453 |
+
text-align: left;
|
| 454 |
+
}
|
| 455 |
+
|
| 456 |
+
/* Icons & Messages */
|
| 457 |
+
.icon {
|
| 458 |
+
font-size: 24px;
|
| 459 |
+
margin-right: 8px;
|
| 460 |
+
}
|
| 461 |
+
|
| 462 |
+
.success-msg {
|
| 463 |
+
color: #3D3D3D;
|
| 464 |
+
font-weight: 600;
|
| 465 |
+
}
|
| 466 |
+
|
| 467 |
+
.error-msg {
|
| 468 |
+
color: #666;
|
| 469 |
+
font-weight: 600;
|
| 470 |
+
text-align: center;
|
| 471 |
+
padding: 10px;
|
| 472 |
+
}
|
| 473 |
+
|
| 474 |
+
/* Chat Interface */
|
| 475 |
+
.chat-toggle-btn {
|
| 476 |
+
background: rgba(255, 255, 255, 0.8);
|
| 477 |
+
color: #3D3D3D;
|
| 478 |
+
border: none;
|
| 479 |
+
padding: 10px 20px;
|
| 480 |
+
border-radius: 8px;
|
| 481 |
+
cursor: pointer;
|
| 482 |
+
font-size: 14px;
|
| 483 |
+
font-weight: 600;
|
| 484 |
+
margin-top: 15px;
|
| 485 |
+
width: 100%;
|
| 486 |
+
transition: background 0.2s, color 0.2s;
|
| 487 |
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
|
| 488 |
+
}
|
| 489 |
+
|
| 490 |
+
.chat-toggle-btn:hover {
|
| 491 |
+
background: #3D3D3D;
|
| 492 |
+
color: #fff;
|
| 493 |
+
}
|
| 494 |
+
|
| 495 |
+
.chat-window {
|
| 496 |
+
display: none;
|
| 497 |
+
background: rgba(255, 255, 255, 0.9);
|
| 498 |
+
border: none;
|
| 499 |
+
border-radius: 10px;
|
| 500 |
+
margin-top: 15px;
|
| 501 |
+
overflow: hidden;
|
| 502 |
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
|
| 503 |
+
}
|
| 504 |
+
|
| 505 |
+
.chat-window.open {
|
| 506 |
+
display: block;
|
| 507 |
+
animation: slideDown 0.3s ease;
|
| 508 |
+
}
|
| 509 |
+
|
| 510 |
+
@keyframes slideDown {
|
| 511 |
+
from { opacity: 0; max-height: 0; }
|
| 512 |
+
to { opacity: 1; max-height: 500px; }
|
| 513 |
+
}
|
| 514 |
+
|
| 515 |
+
.chat-messages {
|
| 516 |
+
height: 250px;
|
| 517 |
+
overflow-y: auto;
|
| 518 |
+
padding: 15px;
|
| 519 |
+
background: transparent;
|
| 520 |
+
}
|
| 521 |
+
|
| 522 |
+
.chat-message {
|
| 523 |
+
margin-bottom: 12px;
|
| 524 |
+
padding: 10px 14px;
|
| 525 |
+
border-radius: 8px;
|
| 526 |
+
max-width: 85%;
|
| 527 |
+
line-height: 1.5;
|
| 528 |
+
font-size: 14px;
|
| 529 |
+
}
|
| 530 |
+
|
| 531 |
+
.chat-message.user {
|
| 532 |
+
background: #3D3D3D;
|
| 533 |
+
color: #fff;
|
| 534 |
+
margin-left: auto;
|
| 535 |
+
text-align: right;
|
| 536 |
+
}
|
| 537 |
+
|
| 538 |
+
.chat-message.bot {
|
| 539 |
+
background: white;
|
| 540 |
+
color: #3D3D3D;
|
| 541 |
+
border: none;
|
| 542 |
+
text-align: left;
|
| 543 |
+
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.04);
|
| 544 |
+
}
|
| 545 |
+
|
| 546 |
+
.chat-message.bot ul {
|
| 547 |
+
margin: 8px 0 0 0;
|
| 548 |
+
padding-left: 20px;
|
| 549 |
+
}
|
| 550 |
+
|
| 551 |
+
.chat-message.bot li {
|
| 552 |
+
margin-bottom: 6px;
|
| 553 |
+
line-height: 1.6;
|
| 554 |
+
}
|
| 555 |
+
|
| 556 |
+
.chat-input-area {
|
| 557 |
+
display: flex;
|
| 558 |
+
gap: 8px;
|
| 559 |
+
padding: 12px;
|
| 560 |
+
background: transparent;
|
| 561 |
+
border-top: none;
|
| 562 |
+
}
|
| 563 |
+
|
| 564 |
+
.chat-input {
|
| 565 |
+
flex: 1;
|
| 566 |
+
padding: 10px 14px;
|
| 567 |
+
border: none;
|
| 568 |
+
background: white;
|
| 569 |
+
border-radius: 8px;
|
| 570 |
+
font-size: 14px;
|
| 571 |
+
outline: none;
|
| 572 |
+
color: #3D3D3D;
|
| 573 |
+
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.04);
|
| 574 |
+
}
|
| 575 |
+
|
| 576 |
+
.chat-input:focus {
|
| 577 |
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
|
| 578 |
+
}
|
| 579 |
+
|
| 580 |
+
.chat-send-btn {
|
| 581 |
+
padding: 10px 20px;
|
| 582 |
+
background: #3D3D3D;
|
| 583 |
+
color: #fff;
|
| 584 |
+
border: none;
|
| 585 |
+
border-radius: 8px;
|
| 586 |
+
cursor: pointer;
|
| 587 |
+
font-weight: 600;
|
| 588 |
+
font-size: 14px;
|
| 589 |
+
transition: background 0.2s;
|
| 590 |
+
}
|
| 591 |
+
|
| 592 |
+
.chat-send-btn:hover {
|
| 593 |
+
background: #1A1A1A;
|
| 594 |
+
color: #fff;
|
| 595 |
+
}
|
| 596 |
+
|
| 597 |
+
.chat-send-btn:disabled {
|
| 598 |
+
background: #F5F5F5;
|
| 599 |
+
color: #999;
|
| 600 |
+
cursor: not-allowed;
|
| 601 |
+
}
|
| 602 |
+
|
| 603 |
+
.chat-typing {
|
| 604 |
+
color: #999;
|
| 605 |
+
font-style: italic;
|
| 606 |
+
font-size: 13px;
|
| 607 |
+
padding: 10px 14px;
|
| 608 |
+
}
|
| 609 |
+
|
| 610 |
+
/* Navigation Header */
|
| 611 |
+
.nav-header {
|
| 612 |
+
padding: 0 0 20px 0;
|
| 613 |
+
margin-bottom: 20px;
|
| 614 |
+
border-bottom: 1px solid #e9ecef;
|
| 615 |
+
}
|
| 616 |
+
|
| 617 |
+
.back-link {
|
| 618 |
+
color: #667eea;
|
| 619 |
+
text-decoration: none;
|
| 620 |
+
font-weight: 600;
|
| 621 |
+
font-size: 14px;
|
| 622 |
+
transition: all 0.3s ease;
|
| 623 |
+
display: inline-flex;
|
| 624 |
+
align-items: center;
|
| 625 |
+
gap: 4px;
|
| 626 |
+
}
|
| 627 |
+
|
| 628 |
+
.back-link:hover {
|
| 629 |
+
color: #5a6fd8;
|
| 630 |
+
transform: translateX(-3px);
|
| 631 |
+
}
|
| 632 |
+
|
| 633 |
+
/* Results description max-width */
|
| 634 |
+
.subtitle {
|
| 635 |
+
max-width: 500px;
|
| 636 |
+
margin: 0 auto;
|
| 637 |
+
}
|
| 638 |
+
|
| 639 |
+
.results-spacing {
|
| 640 |
+
margin-top: 40px;
|
| 641 |
+
}
|
templates/index.html
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html>
|
| 2 |
+
<html>
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="UTF-8">
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
+
<title>{{ title if logged_in else 'Spiritual Path Finder - Login' }}</title>
|
| 7 |
+
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
|
| 8 |
+
</head>
|
| 9 |
+
<body>
|
| 10 |
+
<div class="container">
|
| 11 |
+
<div class="nav-header">
|
| 12 |
+
<a href="/" class="back-link">β Back to Home</a>
|
| 13 |
+
</div>
|
| 14 |
+
{% if not logged_in %}
|
| 15 |
+
<!-- Login/Signup Form -->
|
| 16 |
+
<h1><span class="icon">π</span>Spiritual Path Finder</h1>
|
| 17 |
+
<p>{{ 'Begin your journey of self-discovery' if is_signup else 'Welcome back, seeker!' }}</p>
|
| 18 |
+
|
| 19 |
+
<div class="auth-form">
|
| 20 |
+
<input type="text" id="authUsername" placeholder="Username">
|
| 21 |
+
<input type="password" id="authPassword" placeholder="Password">
|
| 22 |
+
<button onclick="authenticate()">{{ 'Sign Up' if is_signup else 'Sign In' }}</button>
|
| 23 |
+
<div id="result"></div>
|
| 24 |
+
<p class="switch-link" onclick="switchAuth()">
|
| 25 |
+
{{ 'Already have an account? Sign In' if is_signup else 'New here? Sign Up' }}
|
| 26 |
+
</p>
|
| 27 |
+
</div>
|
| 28 |
+
{% else %}
|
| 29 |
+
<!-- Assessment Interface -->
|
| 30 |
+
<h1>{{ title }}</h1>
|
| 31 |
+
<p>{{ message }}</p>
|
| 32 |
+
|
| 33 |
+
{% if not has_results %}
|
| 34 |
+
<p class="subtitle">
|
| 35 |
+
Discover which spiritual or religious path aligns with your beliefs, values, and lifestyle.
|
| 36 |
+
<br> Answer 8 thoughtful questions about your worldview.
|
| 37 |
+
</p>
|
| 38 |
+
|
| 39 |
+
<div class="question-counter" id="questionCounter">Question 1 of {{ questions|length }}</div>
|
| 40 |
+
|
| 41 |
+
<div class="progress-bar">
|
| 42 |
+
<div class="progress-fill" id="progressBar" style="width: 0%"></div>
|
| 43 |
+
</div>
|
| 44 |
+
|
| 45 |
+
<div style="display:none;" id="assessmentData"
|
| 46 |
+
data-total="{{ questions|length }}"
|
| 47 |
+
data-ids="{{ questions|map(attribute='id')|list|tojson|safe }}">
|
| 48 |
+
</div>
|
| 49 |
+
|
| 50 |
+
<form id="assessmentForm">
|
| 51 |
+
{% for question in questions %}
|
| 52 |
+
{% set q_index = loop.index %}
|
| 53 |
+
<div class="question-block" data-question-index="{{ q_index }}" {% if loop.first %}data-active="true"{% endif %}>
|
| 54 |
+
<h4>
|
| 55 |
+
<span class="question-number">{{ q_index }}</span>
|
| 56 |
+
{{ question.question }}
|
| 57 |
+
</h4>
|
| 58 |
+
{% for option in question.options.keys() %}
|
| 59 |
+
<label class="option">
|
| 60 |
+
<input type="radio"
|
| 61 |
+
name="q{{ question.id }}"
|
| 62 |
+
value="{{ option }}"
|
| 63 |
+
data-question-index="{{ q_index }}"
|
| 64 |
+
onchange="handleAnswer(this)">
|
| 65 |
+
{{ option }}
|
| 66 |
+
</label>
|
| 67 |
+
{% endfor %}
|
| 68 |
+
|
| 69 |
+
<div class="nav-buttons">
|
| 70 |
+
<button type="button" class="nav-btn prev" id="prevBtn{{ q_index }}" onclick="goToPrev()" {% if loop.first %}style="visibility: hidden;"{% endif %}>
|
| 71 |
+
β Previous
|
| 72 |
+
</button>
|
| 73 |
+
</div>
|
| 74 |
+
</div>
|
| 75 |
+
{% endfor %}
|
| 76 |
+
|
| 77 |
+
<button type="button" class="submit-btn" onclick="submitAssessment()" id="submitBtn" style="display: none;">
|
| 78 |
+
β¨ Discover Your Path
|
| 79 |
+
</button>
|
| 80 |
+
</form>
|
| 81 |
+
|
| 82 |
+
<div id="errorMsg"></div>
|
| 83 |
+
{% else %}
|
| 84 |
+
<!-- Results Display -->
|
| 85 |
+
<p class="subtitle">
|
| 86 |
+
Based on your responses, here are the spiritual paths that align most closely with your values and beliefs:
|
| 87 |
+
</p>
|
| 88 |
+
|
| 89 |
+
<div id="resultsContainer" class="results-spacing">
|
| 90 |
+
{% for result in results %}
|
| 91 |
+
<div class="result-card rank-{{ loop.index }}">
|
| 92 |
+
<div class="result-header">
|
| 93 |
+
<div class="result-rank">{{ loop.index }}</div>
|
| 94 |
+
<div class="result-title">
|
| 95 |
+
<h3>{{ result.name }}</h3>
|
| 96 |
+
</div>
|
| 97 |
+
<div class="result-percentage">{{ result.percentage }}%</div>
|
| 98 |
+
</div>
|
| 99 |
+
<p class="result-description">{{ result.description }}</p>
|
| 100 |
+
<div class="result-details">
|
| 101 |
+
<h5>πΏ Common Practices:</h5>
|
| 102 |
+
<p>{{ result.practices }}</p>
|
| 103 |
+
<h5>π Core Beliefs:</h5>
|
| 104 |
+
<p>{{ result.core_beliefs }}</p>
|
| 105 |
+
</div>
|
| 106 |
+
|
| 107 |
+
<button class="chat-toggle-btn" onclick="toggleChat('{{ result.name }}')">
|
| 108 |
+
π¬ Ask Questions About {{ result.name }}
|
| 109 |
+
</button>
|
| 110 |
+
|
| 111 |
+
<div class="chat-window" id="chat-{{ result.name|replace(' ', '-') }}">
|
| 112 |
+
<div class="chat-messages" id="messages-{{ result.name|replace(' ', '-') }}">
|
| 113 |
+
<div class="chat-message bot">
|
| 114 |
+
Hi! Ask me anything about {{ result.name }}.<br>
|
| 115 |
+
<span style="color:#7C3AED; font-size:13px;">
|
| 116 |
+
Example: "How do I get started with this path?"
|
| 117 |
+
</span>
|
| 118 |
+
</div>
|
| 119 |
+
</div>
|
| 120 |
+
<div class="chat-input-area">
|
| 121 |
+
<input type="text"
|
| 122 |
+
class="chat-input"
|
| 123 |
+
id="input-{{ result.name|replace(' ', '-') }}"
|
| 124 |
+
placeholder="Ask about {{ result.name }}..."
|
| 125 |
+
onkeypress="if(event.key==='Enter') sendMessage('{{ result.name }}')">
|
| 126 |
+
<button class="chat-send-btn"
|
| 127 |
+
id="send-{{ result.name|replace(' ', '-') }}"
|
| 128 |
+
onclick="sendMessage('{{ result.name }}')">
|
| 129 |
+
Send
|
| 130 |
+
</button>
|
| 131 |
+
</div>
|
| 132 |
+
</div>
|
| 133 |
+
</div>
|
| 134 |
+
{% endfor %}
|
| 135 |
+
</div>
|
| 136 |
+
|
| 137 |
+
<div class="buttons-row">
|
| 138 |
+
<button class="btn reset-btn" onclick="resetAssessment()">π Retake Assessment</button>
|
| 139 |
+
<a href="/logout" class="btn logout-btn">πͺ Sign Out</a>
|
| 140 |
+
</div>
|
| 141 |
+
{% endif %}
|
| 142 |
+
{% endif %}
|
| 143 |
+
</div>
|
| 144 |
+
<script src="{{ url_for('static', filename='script.js') }}"></script>
|
| 145 |
+
</body>
|
| 146 |
+
</html>
|
templates/landing.html
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html>
|
| 2 |
+
<html lang="en">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="UTF-8">
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
+
<title>Spiritual Path Assessment</title>
|
| 7 |
+
<link rel="stylesheet" href="{{ url_for('static', filename='landing.css') }}">
|
| 8 |
+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap" rel="stylesheet">
|
| 9 |
+
</head>
|
| 10 |
+
<body>
|
| 11 |
+
<div class="gradient-bg"></div>
|
| 12 |
+
|
| 13 |
+
<nav class="navbar">
|
| 14 |
+
<div class="nav-container">
|
| 15 |
+
<div class="logo">β¨ Spiritual Path</div>
|
| 16 |
+
<a href="/login" class="nav-cta">Start Assessment</a>
|
| 17 |
+
</div>
|
| 18 |
+
</nav>
|
| 19 |
+
|
| 20 |
+
<main class="main-content">
|
| 21 |
+
<section class="hero-section">
|
| 22 |
+
<div class="hero-container">
|
| 23 |
+
<div class="badge">π Discover Your Path</div>
|
| 24 |
+
<h1 class="hero-title">
|
| 25 |
+
Find Your <span class="gradient-text">Spiritual Journey</span>
|
| 26 |
+
</h1>
|
| 27 |
+
<p class="hero-subtitle">
|
| 28 |
+
A personalized assessment designed to help you explore and understand your unique spiritual path through thoughtful questions and AI-powered insights.
|
| 29 |
+
</p>
|
| 30 |
+
|
| 31 |
+
<div class="cta-buttons">
|
| 32 |
+
<a href="/login" class="btn-primary">
|
| 33 |
+
Begin Your Assessment
|
| 34 |
+
<span class="arrow">β</span>
|
| 35 |
+
</a>
|
| 36 |
+
<div class="assessment-meta">
|
| 37 |
+
<span>β±οΈ 5-10 minutes</span>
|
| 38 |
+
<span>π Completely free</span>
|
| 39 |
+
<span>π§ Personalized insights</span>
|
| 40 |
+
</div>
|
| 41 |
+
</div>
|
| 42 |
+
|
| 43 |
+
<div class="hero-visual" style="display: none;">
|
| 44 |
+
<div class="floating-card card-1">
|
| 45 |
+
<div class="card-icon">π§</div>
|
| 46 |
+
<div class="card-text">Personalized Insights</div>
|
| 47 |
+
</div>
|
| 48 |
+
<div class="floating-card card-2">
|
| 49 |
+
<div class="card-icon">π</div>
|
| 50 |
+
<div class="card-text">Deep Analysis</div>
|
| 51 |
+
</div>
|
| 52 |
+
<div class="floating-card card-3">
|
| 53 |
+
<div class="card-icon">π―</div>
|
| 54 |
+
<div class="card-text">Actionable Guidance</div>
|
| 55 |
+
</div>
|
| 56 |
+
</div>
|
| 57 |
+
</div>
|
| 58 |
+
</section>
|
| 59 |
+
|
| 60 |
+
<section class="features-section">
|
| 61 |
+
<div class="section-container">
|
| 62 |
+
<div class="section-header">
|
| 63 |
+
<h2>What You'll Discover</h2>
|
| 64 |
+
<p>Comprehensive insights into your spiritual journey</p>
|
| 65 |
+
</div>
|
| 66 |
+
|
| 67 |
+
<div class="features-grid">
|
| 68 |
+
<div class="feature-card">
|
| 69 |
+
<div class="feature-icon-wrapper">
|
| 70 |
+
<div class="feature-icon">π</div>
|
| 71 |
+
</div>
|
| 72 |
+
<h3>Your Spiritual Dimensions</h3>
|
| 73 |
+
<p>Understand your current spiritual development across multiple dimensions and uncover hidden aspects of your journey.</p>
|
| 74 |
+
</div>
|
| 75 |
+
|
| 76 |
+
<div class="feature-card">
|
| 77 |
+
<div class="feature-icon-wrapper">
|
| 78 |
+
<div class="feature-icon">π‘</div>
|
| 79 |
+
</div>
|
| 80 |
+
<h3>Personalized Recommendations</h3>
|
| 81 |
+
<p>Get specific guidance tailored to your unique spiritual path, beliefs, and goals for meaningful growth.</p>
|
| 82 |
+
</div>
|
| 83 |
+
|
| 84 |
+
<div class="feature-card">
|
| 85 |
+
<div class="feature-icon-wrapper">
|
| 86 |
+
<div class="feature-icon">π</div>
|
| 87 |
+
</div>
|
| 88 |
+
<h3>Growth Opportunities</h3>
|
| 89 |
+
<p>Identify areas for spiritual growth and receive practical steps to deepen your practice and understanding.</p>
|
| 90 |
+
</div>
|
| 91 |
+
</div>
|
| 92 |
+
</div>
|
| 93 |
+
</section>
|
| 94 |
+
|
| 95 |
+
<section class="cta-section">
|
| 96 |
+
<div class="cta-container">
|
| 97 |
+
<h2>Ready to begin your journey?</h2>
|
| 98 |
+
<p>Start your spiritual path assessment today</p>
|
| 99 |
+
<a href="/login" class="btn-secondary">
|
| 100 |
+
Get Started Now
|
| 101 |
+
<span class="arrow">β</span>
|
| 102 |
+
</a>
|
| 103 |
+
</div>
|
| 104 |
+
</section>
|
| 105 |
+
</main>
|
| 106 |
+
|
| 107 |
+
<footer class="footer">
|
| 108 |
+
<div class="footer-container">
|
| 109 |
+
<p>Β© 2025 Spiritual Path Assessment. Empowering your spiritual journey.</p>
|
| 110 |
+
</div>
|
| 111 |
+
</footer>
|
| 112 |
+
</body>
|
| 113 |
+
</html>
|
tsne_visualization.html
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|