# Fichier: python_cheats/cheatsheets/stripe.txt
# Cheatsheet Stripe - Guide Ultra-Détaillé pour Grands Débutants


[OK] CONCEPTS FONDAMENTAUX (EXPLICATIONS TRÈS DÉTAILLÉES)

# === QU'EST-CE QUE STRIPE ? ===

# Imagine que tu crées une boutique en ligne ou une app qui vend un service
# Les utilisateurs veulent payer avec leur carte bancaire
# Mais comment recevoir ces paiements?

# Solution classique (TRÈS compliquée):
# 1. Créer un compte dans une banque commerçante
# 2. Négocier des taux avec la banque
# 3. Implémenter la sécurité PCI-DSS (très complexe!)
# 4. Gérer les remboursements, fraudes, etc.
# 5. S'intégrer avec différents réseaux de cartes (Visa, Mastercard...)
# = CAUCHEMAR TECHNIQUE ET LÉGAL! Peut prendre 6 mois+

# STRIPE = Plateforme qui gère tout ça pour toi!
# Tu ne fais que:
# 1. Créer un compte Stripe (gratuit)
# 2. Copier 10 lignes de code dans ton app
# 3. BOOM! Tu peux accepter des paiements
# 4. L'argent arrive sur ton compte bancaire automatiquement

# Stripe est une API (Application Programming Interface)
# = Un ensemble de fonctions que tu appelles depuis ton code
# Exemple: stripe.Charge.create(amount=1000, currency='eur')
# = "Stripe, charge 10€ sur cette carte svp"

# === VOCABULAIRE STRIPE (TRÈS IMPORTANT!) ===

# CUSTOMER (Client)
# = Une personne qui achète quelque chose
# = Stripe stocke ses infos: email, nom, historique d'achats
# = Tu peux sauvegarder sa carte pour des paiements futurs
# Exemple: Jean Dupont, jean@email.com, a acheté 3 fois

# CHARGE (Transaction)
# = Un paiement unique
# = Tu débites une carte bancaire une fois
# Exemple: Le client achète un produit à 50€ -> 1 charge de 50€
# IMPORTANT: Une fois créé, un charge est définitif (sauf remboursement)

# PAYMENT INTENT (Intention de paiement)
# = Version moderne et plus sécurisée du Charge
# = Gère automatiquement l'authentification 3D Secure (SCA)
# = Recommandé depuis 2019 (nouvelles réglementations européennes)
# Processus:
#   1. Tu crées un PaymentIntent avec un montant
#   2. Le client entre sa carte
#   3. Stripe vérifie avec la banque (peut demander un code SMS)
#   4. Paiement confirmé ou refusé

# SUBSCRIPTION (Abonnement)
# = Paiement récurrent automatique
# Exemples:
#   - Netflix: 13€/mois tous les mois
#   - Spotify: 10€/mois
#   - Ton SaaS: 29€/mois
# Stripe débite automatiquement chaque période (mensuel, annuel, etc.)

# PRODUCT (Produit)
# = Ce que tu vends
# Exemples:
#   - "Abonnement Premium"
#   - "Pack de 100 crédits"
#   - "Consultation 1h"
# C'est juste un nom, une description, pas un prix!

# PRICE (Prix)
# = Le montant d'un Product
# Un Product peut avoir plusieurs Prix:
#   - Abonnement Premium: 10€/mois OU 100€/an (2 prix différents)
#   - Pack crédits: 10€ pour 100 crédits OU 50€ pour 600 crédits
# IMPORTANT: Price = montant + devise + fréquence (one-time ou recurring)

# INVOICE (Facture)
# = Document qui liste ce que le client doit payer
# Stripe les génère automatiquement pour les abonnements
# Contient:
#   - Montant total
#   - Date d'émission
#   - Date d'échéance
#   - Description des articles
# Les clients peuvent télécharger leurs factures depuis un portail

# WEBHOOK (Notification automatique)
# = Message que Stripe t'envoie quand un événement se passe
# Exemples d'événements:
#   - Un paiement réussit: "charge.succeeded"
#   - Un paiement échoue: "charge.failed"
#   - Un abonnement est annulé: "customer.subscription.deleted"
# Pourquoi? Pour que tu puisses réagir automatiquement
# Exemple: Quand un paiement réussit, tu actives l'accès du client à ton service

# API KEY (Clé d'accès)
# = Mot de passe secret pour communiquer avec Stripe
# 2 types:
#   - Publishable Key (pk_test_xxx): Côté client (navigateur), publique
#   - Secret Key (sk_test_xxx): Côté serveur, PRIVÉE (ne JAMAIS partager!)
# En mode test: pk_test_xxx, sk_test_xxx (pour développement)
# En mode production: pk_live_xxx, sk_live_xxx (argent réel!)

# CHECKOUT SESSION (Session de paiement)
# = Page de paiement hébergée par Stripe
# = La solution la PLUS SIMPLE pour accepter des paiements
# Avantages:
#   - Stripe gère le formulaire de carte
#   - Sécurité PCI-DSS gérée par Stripe
#   - Design professionnel
#   - Supporte 135+ devises et 25+ langues
# Tu rediriges le client vers Stripe -> Il paie -> Stripe le redirige vers toi

# === COMMENT ÇA MARCHE? (FLUX COMPLET) ===

# SCÉNARIO: Tu vends un cours en ligne à 49€

# Étape 1: Le client visite ton site
# - Il clique sur "Acheter le cours - 49€"

# Étape 2: Ton serveur crée une Checkout Session
# Code Python:
session = stripe.checkout.Session.create(
    payment_method_types=['card'],
    line_items=[{
        'price_data': {
            'currency': 'eur',
            'product_data': {'name': 'Cours Python Complet'},
            'unit_amount': 4900,  # 49.00€ en centimes!
        },
        'quantity': 1,
    }],
    mode='payment',
    success_url='https://monsite.com/success',
    cancel_url='https://monsite.com/cancel',
)

# Étape 3: Tu rediriges le client vers Stripe
# URL: session.url (exemple: https://checkout.stripe.com/c/pay/cs_xxx)

# Étape 4: Le client entre ses infos sur la page Stripe
# - Numéro de carte: 4242 4242 4242 4242 (carte test)
# - Date d'expiration: 12/34
# - CVC: 123
# - Stripe vérifie avec la banque (3D Secure si nécessaire)

# Étape 5: Paiement confirmé
# - Stripe redirige vers: https://monsite.com/success
# - Stripe t'envoie un webhook: "checkout.session.completed"
# - Ton serveur reçoit le webhook et active l'accès du client

# Étape 6: L'argent arrive sur ton compte bancaire
# - En test mode: l'argent n'est pas réel
# - En live mode: Stripe transfère vers ton compte (2-7 jours selon pays)

# === POURQUOI UTILISER STRIPE? ===

# Avantages:
# [OK] Simple: 10 lignes de code pour accepter des paiements
# [OK] Sécurisé: Conformité PCI-DSS gérée par Stripe
# [OK] International: 135+ devises, 195+ pays
# [OK] Flexible: Paiements uniques, abonnements, paiements différés, etc.
# [OK] Transparent: Frais fixes, pas de coûts cachés
# [OK] Documentation: Docs exceptionnelles avec exemples de code
# [OK] Dashboard: Interface web pour tout gérer (paiements, clients, factures)

# Inconvénients:
# [X] Frais: 1.4% + 0.25€ par transaction en Europe (frais standards)
# [X] Disponibilité: Pas dans tous les pays (mais 46+ pays supportés)
# [X] Complexité: API riche = beaucoup à apprendre pour les cas avancés

# === FRAIS STRIPE (TRANSPARENT) ===

# Cartes européennes:
# - 1.4% + 0.25€ par transaction réussie
# Exemple: Vente à 100€ -> Frais = 1.40€ + 0.25€ = 1.65€ -> Tu reçois 98.35€

# Cartes internationales (hors Europe):
# - 2.9% + 0.25€
# Exemple: Vente à 100€ -> Frais = 2.90€ + 0.25€ = 3.15€ -> Tu reçois 96.85€

# Autres frais:
# - Remboursements: 0€ (gratuit, mais les frais initiaux ne sont pas remboursés)
# - Échecs de paiement: 0€
# - Webhooks, API, Dashboard: 0€ (tout gratuit!)

# IMPORTANT: Pas de frais mensuels, pas d'abonnement, pas de setup fee!
# Tu paies uniquement sur les transactions réussies


[OK] INSTALLATION SUPER DÉTAILLÉE

# === ÉTAPE 1: CRÉER UN COMPTE STRIPE ===

# Pourquoi? Tu dois avoir un compte pour recevoir des paiements

# Instructions:
# 1. Ouvre un navigateur
# 2. Va sur: https://stripe.com/
# 3. Clique sur "Start now" ou "Commencer" (en haut à droite)
# 4. Remplis le formulaire:
#    - Email: ton adresse email professionnelle
#    - Nom complet: ton nom ou nom de ta société
#    - Pays: ton pays de résidence
#    - Mot de passe: sécurisé (>= 8 caractères)
# 5. Vérifie ton email: Stripe envoie un lien de confirmation
# 6. Clique sur le lien dans l'email
# 7. YAY! Ton compte est créé!

# Note: C'est 100% GRATUIT! Pas de carte bancaire demandée pour commencer


# === ÉTAPE 2: ACTIVER LE MODE TEST ===

# Stripe a 2 modes:
# - TEST MODE: Pour développer et tester (argent virtuel)
# - LIVE MODE: Pour accepter de vrais paiements (argent réel)

# Toujours commencer en TEST MODE!

# Sur le dashboard Stripe:
# 1. En haut à droite, tu vois un interrupteur "Test mode"
# 2. Assure-toi qu'il est ACTIVÉ (fond violet/bleu)
# 3. Tu verras: "Test mode" ou "Mode test" écrit quelque part

# En test mode:
# - Aucun argent réel n'est débité
# - Tu utilises des cartes de test (4242 4242 4242 4242)
# - Parfait pour développer sans risque!


# === ÉTAPE 3: RÉCUPÉRER TES CLÉS API ===

# Tu as besoin de 2 clés pour communiquer avec Stripe:
# 1. Publishable Key (publique): Pour le frontend (navigateur)
# 2. Secret Key (privée): Pour le backend (serveur)

# Sur le dashboard:
# 1. Dans la barre de gauche, clique sur "Developers" (Développeurs)
# 2. Clique sur "API keys" (Clés API)
# 3. Tu vois 2 clés:

# Publishable key (publique):
# pk_test_51xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# = Commence toujours par "pk_test_" en mode test
# = Tu peux la mettre dans ton code frontend (visible par tous)

# Secret key (privée):
# sk_test_51xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# = Commence toujours par "sk_test_" en mode test
# = NE JAMAIS la partager ou la commiter dans git!
# = À garder sur ton serveur uniquement

# COPIE CES 2 CLÉS dans un fichier temporaire
# Tu en auras besoin dans les étapes suivantes


# === ÉTAPE 4: INSTALLER LA BIBLIOTHÈQUE STRIPE (PYTHON) ===

# Stripe fournit des bibliothèques officielles pour:
# - Python, Ruby, PHP, Node.js, Go, Java, .NET

# Nous utilisons Python ici

# Créer un environnement virtuel (recommandé):
python -m venv venv

# Activer l'environnement:
# macOS/Linux:
source venv/bin/activate

# Windows:
venv\Scripts\activate

# Tu vois maintenant: (venv) $ ou (venv) C:\...

# Installer Stripe:
pip install stripe

# Affiche:
# Collecting stripe
# Downloading stripe-X.X.X-py2.py3-none-any.whl
# ...
# Successfully installed stripe-X.X.X

# Vérifier l'installation:
pip show stripe
# Affiche:
# Name: stripe
# Version: 8.0.0 (ou plus récent)
# Summary: Python bindings for the Stripe API


# === ÉTAPE 5: CONFIGURER LES CLÉS DANS TON CODE ===

# Créer un fichier .env pour stocker les secrets:

# macOS/Linux:
cat > .env << 'EOF'
STRIPE_SECRET_KEY=sk_test_51xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
STRIPE_PUBLISHABLE_KEY=pk_test_51xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
EOF

# Windows PowerShell:
@"
STRIPE_SECRET_KEY=sk_test_51xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
STRIPE_PUBLISHABLE_KEY=pk_test_51xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
"@ | Out-File .env -Encoding UTF8

# REMPLACE les valeurs par TES vraies clés!

# IMPORTANT: Ajoute .env au .gitignore!
echo ".env" >> .gitignore

# Installer python-dotenv pour charger .env:
pip install python-dotenv

# Dans ton code Python:
from dotenv import load_dotenv
import os
import stripe

# Charger les variables d'environnement
load_dotenv()

# Configurer Stripe avec ta clé secrète
stripe.api_key = os.environ.get('STRIPE_SECRET_KEY')

# Maintenant tu peux utiliser l'API Stripe!


[OK] PREMIER PAIEMENT: CHECKOUT SESSION (LE PLUS SIMPLE)

# === POURQUOI CHECKOUT SESSION? ===

# C'est la manière LA PLUS SIMPLE d'accepter des paiements
# Avantages:
# [OK] Stripe héberge la page de paiement (pas de code frontend!)
# [OK] Sécurité gérée par Stripe (conformité PCI-DSS)
# [OK] Design professionnel
# [OK] Supporte tous les moyens de paiement (cartes, Apple Pay, Google Pay, etc.)
# [OK] Multilingue automatique
# [OK] Mobile-friendly

# Tu n'as qu'à:
# 1. Créer une session côté serveur
# 2. Rediriger le client vers la page Stripe
# 3. Gérer le retour (success/cancel)


# === EXEMPLE COMPLET: VENDRE UN PRODUIT ===

# Structure du projet:
# myshop/
# ├── .env                  # Tes clés Stripe
# ├── .gitignore            # Ignore venv/ et .env
# ├── requirements.txt      # Dépendances
# ├── app.py                # Serveur Flask
# └── templates/
#     ├── index.html        # Page d'accueil
#     ├── success.html      # Page de succès
#     └── cancel.html       # Page d'annulation


# === FICHIER: app.py ===

"""
app.py - Application Flask simple avec Stripe Checkout
"""

from flask import Flask, render_template, redirect, request, jsonify
from dotenv import load_dotenv
import stripe
import os

# Charger les variables d'environnement
load_dotenv()

# Initialiser Flask
app = Flask(__name__)

# Configurer Stripe avec ta clé secrète
stripe.api_key = os.environ.get('STRIPE_SECRET_KEY')

# Clé publique pour le frontend
STRIPE_PUBLISHABLE_KEY = os.environ.get('STRIPE_PUBLISHABLE_KEY')


@app.route('/')
def index():
    """
    Page d'accueil: affiche le produit à vendre
    """
    return render_template('index.html', 
                         publishable_key=STRIPE_PUBLISHABLE_KEY)


@app.route('/create-checkout-session', methods=['POST'])
def create_checkout_session():
    """
    Créer une Checkout Session et rediriger vers Stripe
    """
    try:
        # Créer la session de paiement
        session = stripe.checkout.Session.create(
            # Types de paiement acceptés
            payment_method_types=['card'],
            
            # Articles à acheter
            line_items=[{
                'price_data': {
                    'currency': 'eur',  # Devise: EUR, USD, GBP, etc.
                    'product_data': {
                        'name': 'Cours Python Complet',
                        'description': 'Apprends Python de A à Z',
                        'images': ['https://via.placeholder.com/300'],
                    },
                    'unit_amount': 4900,  # Montant en CENTIMES! 4900 = 49.00€
                },
                'quantity': 1,
            }],
            
            # Mode: 'payment' pour paiement unique
            # Autres modes: 'subscription' pour abonnement, 'setup' pour config paiement futur
            mode='payment',
            
            # URLs de redirection
            success_url='http://localhost:5000/success?session_id={CHECKOUT_SESSION_ID}',
            cancel_url='http://localhost:5000/cancel',
            
            # Collecter l'adresse (optionnel)
            # billing_address_collection='required',
            
            # Activer promotion codes (optionnel)
            # allow_promotion_codes=True,
        )
        
        # Rediriger vers la page Stripe
        return redirect(session.url, code=303)
        
    except Exception as e:
        return jsonify(error=str(e)), 403


@app.route('/success')
def success():
    """
    Page affichée après un paiement réussi
    """
    # Récupérer l'ID de session depuis l'URL
    session_id = request.args.get('session_id')
    
    # Optionnel: Récupérer les détails de la session
    if session_id:
        session = stripe.checkout.Session.retrieve(session_id)
        customer_email = session.customer_details.email
        amount_total = session.amount_total / 100  # Convertir centimes en euros
        
        return render_template('success.html', 
                             email=customer_email,
                             amount=amount_total)
    
    return render_template('success.html')


@app.route('/cancel')
def cancel():
    """
    Page affichée si le client annule le paiement
    """
    return render_template('cancel.html')


if __name__ == '__main__':
    # Lancer le serveur Flask
    port = int(os.environ.get('PORT', 5000))
    app.run(host='0.0.0.0', port=port, debug=True)


# === FICHIER: templates/index.html ===

"""
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Ma Boutique - Cours Python</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        body {
            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            min-height: 100vh;
            display: flex;
            align-items: center;
            justify-content: center;
            padding: 20px;
        }
        .container {
            background: white;
            border-radius: 20px;
            box-shadow: 0 20px 60px rgba(0,0,0,0.3);
            max-width: 500px;
            padding: 40px;
            text-align: center;
        }
        .product-image {
            width: 200px;
            height: 200px;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            border-radius: 20px;
            margin: 0 auto 30px;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 80px;
        }
        h1 {
            font-size: 28px;
            margin-bottom: 15px;
            color: #2d3748;
        }
        .description {
            color: #718096;
            margin-bottom: 20px;
            line-height: 1.6;
        }
        .price {
            font-size: 48px;
            font-weight: bold;
            color: #667eea;
            margin: 30px 0;
        }
        .price span {
            font-size: 24px;
        }
        .features {
            text-align: left;
            margin: 30px 0;
            padding: 20px;
            background: #f7fafc;
            border-radius: 10px;
        }
        .features li {
            padding: 10px 0;
            color: #4a5568;
            list-style: none;
            position: relative;
            padding-left: 30px;
        }
        .features li:before {
            content: "[OK]";
            position: absolute;
            left: 0;
            color: #48bb78;
            font-weight: bold;
            font-size: 20px;
        }
        .buy-button {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            border: none;
            padding: 18px 40px;
            font-size: 18px;
            border-radius: 50px;
            cursor: pointer;
            transition: transform 0.2s, box-shadow 0.2s;
            width: 100%;
            font-weight: 600;
            margin-top: 20px;
        }
        .buy-button:hover {
            transform: translateY(-2px);
            box-shadow: 0 10px 20px rgba(102, 126, 234, 0.4);
        }
        .buy-button:active {
            transform: translateY(0);
        }
        .secure-badge {
            margin-top: 20px;
            padding: 15px;
            background: #f0fff4;
            border-radius: 10px;
            color: #22543d;
            font-size: 14px;
        }
        .secure-badge:before {
            content: "[VERROUILLE]";
            margin-right: 8px;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="product-image">[PYTHON]</div>
        
        <h1>Cours Python Complet</h1>
        <p class="description">
            Maîtrise Python de zéro à expert avec ce cours complet. 
            Plus de 20 heures de vidéos, exercices pratiques et projets réels.
        </p>
        
        <div class="price">
            49<span>€</span>
        </div>
        
        <ul class="features">
            <li>Accès à vie à tous les contenus</li>
            <li>20+ heures de vidéos HD</li>
            <li>50+ exercices pratiques</li>
            <li>5 projets complets</li>
            <li>Certificat de fin de formation</li>
            <li>Support communauté Discord</li>
        </ul>
        
        <form action="/create-checkout-session" method="POST">
            <button type="submit" class="buy-button">
                Acheter maintenant
            </button>
        </form>
        
        <div class="secure-badge">
            Paiement 100% sécurisé par Stripe
        </div>
    </div>
</body>
</html>
"""


# === FICHIER: templates/success.html ===

"""
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Paiement réussi!</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        body {
            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
            background: linear-gradient(135deg, #48bb78 0%, #38a169 100%);
            min-height: 100vh;
            display: flex;
            align-items: center;
            justify-content: center;
            padding: 20px;
        }
        .container {
            background: white;
            border-radius: 20px;
            box-shadow: 0 20px 60px rgba(0,0,0,0.3);
            max-width: 500px;
            padding: 60px 40px;
            text-align: center;
        }
        .success-icon {
            width: 100px;
            height: 100px;
            background: #48bb78;
            border-radius: 50%;
            margin: 0 auto 30px;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 60px;
            animation: scaleIn 0.5s ease-out;
        }
        @keyframes scaleIn {
            from {
                transform: scale(0);
            }
            to {
                transform: scale(1);
            }
        }
        h1 {
            font-size: 32px;
            color: #2d3748;
            margin-bottom: 15px;
        }
        .message {
            color: #718096;
            font-size: 18px;
            line-height: 1.6;
            margin-bottom: 30px;
        }
        .details {
            background: #f7fafc;
            padding: 20px;
            border-radius: 10px;
            margin: 20px 0;
            text-align: left;
        }
        .details p {
            padding: 8px 0;
            color: #4a5568;
        }
        .details strong {
            color: #2d3748;
        }
        .button {
            display: inline-block;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            text-decoration: none;
            padding: 15px 40px;
            border-radius: 50px;
            margin-top: 20px;
            font-weight: 600;
            transition: transform 0.2s;
        }
        .button:hover {
            transform: translateY(-2px);
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="success-icon">[OK]</div>
        
        <h1>Paiement réussi!</h1>
        
        <p class="message">
            Merci pour votre achat! Vous allez recevoir un email de confirmation 
            avec les instructions pour accéder au cours.
        </p>
        
        {% if email and amount %}
        <div class="details">
            <p><strong>Email:</strong> {{ email }}</p>
            <p><strong>Montant:</strong> {{ amount }}€</p>
            <p><strong>Statut:</strong> Payé</p>
        </div>
        {% endif %}
        
        <a href="/" class="button">Retour à l'accueil</a>
    </div>
</body>
</html>
"""


# === FICHIER: templates/cancel.html ===

"""
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Paiement annulé</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        body {
            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
            background: linear-gradient(135deg, #f56565 0%, #c53030 100%);
            min-height: 100vh;
            display: flex;
            align-items: center;
            justify-content: center;
            padding: 20px;
        }
        .container {
            background: white;
            border-radius: 20px;
            box-shadow: 0 20px 60px rgba(0,0,0,0.3);
            max-width: 500px;
            padding: 60px 40px;
            text-align: center;
        }
        .cancel-icon {
            width: 100px;
            height: 100px;
            background: #f56565;
            border-radius: 50%;
            margin: 0 auto 30px;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 60px;
        }
        h1 {
            font-size: 32px;
            color: