Reorganize files + cleanup temporary scripts

- Move Birthday_ClassMeeting_LessonPlan.md to WorkTingting/
- Add tools/ directory (network diagnostics)
- Remove birthday_slides/*.html (temporary files)
- Remove test scripts (test_popup.py, test_voices*.py)
- Update daily check state and sessions

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
StillHammer 2025-11-25 12:02:11 +08:00
parent fc45332c1c
commit e16ddd3422
32 changed files with 1128 additions and 4786 deletions

View File

@ -96,6 +96,7 @@ Appliquer systématiquement pour tout problème :
- `stratégie/` : Plans stratégiques - `stratégie/` : Plans stratégiques
- `WIP/` : Work in progress - `WIP/` : Work in progress
- `food/` : Recettes, restaurants - `food/` : Recettes, restaurants
- `tools/` : Scripts utilitaires (diagnostic réseau Windows, etc.)
### ⚠️ Désactivé ### ⚠️ Désactivé

View File

@ -1 +1 @@
{"streak": 1, "last_check_date": "2025-11-18", "days_skipped": 2, "last_skip_date": "2025-11-19"} {"streak": 2, "last_check_date": "2025-11-25", "days_skipped": 0, "last_skip_date": "2025-11-19"}

View File

@ -1,511 +0,0 @@
# Card Database - Tingting Daily Check
**Dernière mise à jour** : 19/11/2025
**Total cartes actives** : 23
**Total cartes retirées** : 0
**Total reviews** : 6 cartes (3 session 15/11, 3 session 18/11)
**Breakdown par catégorie** :
- Relation (Tingting) : 14 cartes
- Personnel : 7 cartes
- Famille : 1 carte
- Tech/Projets : 1 carte
---
## Active Cards
### Card #1 - Complacency Problem ⚠️ CRITICAL
**ID** : CORE-001
**Question** : Pourquoi Tingting dit que tu "think" pas ?
**Answer** : Manque d'implication mentale quotidienne. Je suis devenu complacent vs last year. Avant j'étais attentif et présent, maintenant je suis plus dans mes jeux/code que présent pour elle.
**Tags** : core-problem, daily, critical
**Difficulty** : Hard
**Frequency** : Daily (jusqu'à maîtrisé)
**Created** : 07/11/2025
**Last Review** : 18/11/2025
**Success Rate** : 100% (1 review)
**Times Asked** : 1
**Times Failed** : 0
**Notes** : C'est LE problème central. Si j'oublie ça, j'oublie tout. ✅ 18/11 : Bonne compréhension - identifie autopilot vs thinking intentionnel, reconnaît que daily check aide.
---
### Card #2 - Towel Detail
**ID** : ACTION-001
**Question** : Towel de Tingting - qu'est-ce que je dois faire ?
**Answer** : La mettre dans son sac AVANT de sortir. Elle me l'a déjà dit last time. C'est un exemple concret de "thinking" à elle.
**Tags** : action, detail, daily
**Difficulty** : Medium
**Frequency** : Every 2-3 days
**Created** : 07/11/2025
**Last Review** : Never
**Success Rate** : N/A (nouveau)
**Times Asked** : 0
**Times Failed** : 0
**Notes** : Déclencheur du conflit 07/11. Exemple parfait de détail que j'oublie.
---
### Card #3 - Communication Paradox
**ID** : CORE-002
**Question** : Quel est le paradoxe de communication avec Tingting ?
**Answer** : Double-bind : Si je dis rien → "tu me dis jamais rien". Si je dis quelque chose de négatif → elle se vénère et retourne contre moi. Si je montre pas d'émotion → "pourquoi t'es pas en colère ?". Résultat : j'évite, ce qui crée de la distance.
**Tags** : core-problem, communication, pattern
**Difficulty** : Hard
**Frequency** : Every 2-3 days
**Created** : 07/11/2025
**Last Review** : Never
**Success Rate** : N/A (nouveau)
**Times Failed** : 0
**Notes** : Pattern structurel. Comprendre ça m'aide à naviguer les conversations difficiles.
---
### Card #4 - Honest Feedback ⚠️ CRITICAL
**ID** : ACTION-002
**Question** : Qu'est-ce que Tingting veut que je fasse quand elle fait des trucs wrong ?
**Answer** : LUI DIRE. Être honnête et direct (mais gentil). Le silence = désintérêt, peur du conflit, ou accumulation de frustration. Elle VEUT du feedback même si c'est dur à entendre.
**Tags** : action, communication, critical
**Difficulty** : Hard (parce que ça va contre mon instinct d'évitement)
**Frequency** : Daily (jusqu'à maîtrisé)
**Created** : 07/11/2025
**Last Review** : 15/11/2025
**Success Rate** : 0% (1 review)
**Times Asked** : 1
**Times Failed** : 1
**Notes** : Elle a dit que c'est "LE PIRE" que je ne lui dise pas. Donc TRÈS important. ⚠️ ÉCHEC 15/11 : A inversé la réponse (dit qu'il faut "rassurer" au lieu de donner feedback honnête)
---
### Card #5 - Processing Time ⚠️ CRITICAL
**ID** : LEAD-001
**Question** : Que dois-je faire après qu'elle finisse un long monologue pendant un conflit ?
**Answer** : DEMANDER 10 MINUTES DE PROCESSING. Je ne peux pas "lead" efficacement sans avoir compris et analysé ce qu'elle vient de dire. Dire : "Tu viens de dire beaucoup de choses importantes. J'ai besoin de 10 minutes pour bien tout comprendre avant qu'on continue, ok ?" Puis m'isoler, ouvrir Claude, processer, préparer ma réponse structurée.
**Tags** : lead, conflict, processing, critical
**Difficulty** : Medium (oser demander le temps)
**Frequency** : Every conflict (systématique)
**Created** : 13/11/2025
**Last Review** : 18/11/2025
**Success Rate** : 100% (1 review)
**Times Asked** : 1
**Times Failed** : 0
**Notes** : ✅ Prouvé efficace la dernière fois (elle aux toilettes, j'ai process, résolu direct après). C'est MA RESPONSABILITÉ de demander ce temps, pas d'attendre qu'il se présente. ✅ 18/11 : Excellente compréhension - sait qu'il faut 10-15min max (sinon elle spirale), BON état d'esprit (résoudre pas venger), identifie besoin système Claude pour rappeler purpose.
---
### Card #6 - Domination par l'Esprit
**ID** : LEAD-002
**Question** : Qu'est-ce que "dominer par l'esprit" pendant un conflit ?
**Answer** : Avoir une vision CLAIRE et STRUCTURÉE de la situation : mémoire des faits, compréhension de ses émotions sous-jacentes, vision d'ensemble du pattern, anticipation de la direction de la conversation, stratégie claire à appliquer. Ce n'est PAS "gagner l'argument" ou "avoir raison", c'est avoir la CLARTÉ nécessaire pour "lead" efficacement. Sans ça, je parais stupide/sans mémoire et elle ne peut pas me faire confiance pour lead.
**Tags** : lead, conflict, theory, mental-clarity
**Difficulty** : Hard (nécessite processing + documentation)
**Frequency** : Every conflict (systématique)
**Created** : 13/11/2025
**Last Review** : Never
**Success Rate** : N/A (nouveau)
**Times Failed** : 0
**Notes** : C'est POURQUOI le processing time (LEAD-001) est critique. Je suis le seul capable de clarté pendant le conflit → C'est ma force et ma responsabilité.
---
### Card #7 - Initier Conversations ⚠️ CRITICAL
**ID** : ACTION-003
**Question** : As-tu initié une conversation importante cette semaine avec Tingting ?
**Answer** : Je dois PRENDRE L'INITIATIVE de lancer les conversations importantes. Ne pas attendre qu'elle initie tout. J'ai des sujets préparés dans conversation_topics/ qui attendent d'être discutés. C'est MON RÔLE de les lancer. Pattern d'oubli identifié : je prépare mais n'initie jamais.
**Tags** : action, initiation, communication, critical
**Difficulty** : Medium (oser initier)
**Frequency** : Every 2-3 days (vérifier régulièrement)
**Created** : 13/11/2025
**Last Review** : 15/11/2025
**Success Rate** : 33% (1 review - partiel)
**Times Asked** : 1
**Times Failed** : 0 (mais partiel)
**Notes** : Elle dit que c'est mon rôle de "provoquer les sujets". Pattern récurrent : je réfléchis mais n'initie pas → Les fichiers conversation_topics/ existent mais ne sont jamais discutés. Si je n'ai pas initié cette semaine, PLANIFIER une conversation dans les 48h.
⚠️ 15/11 : Dit avoir initié 3-4 conversations mais ne peut nommer AUCUN exemple concret. Pattern d'oubli critique - mémoire par activation = si elle doit toujours trigger, il ne lead pas vraiment. BESOIN de logging post-conversation.
---
### Card #8 - Plan Long Terme ⚠️ CRITICAL
**ID** : ACTION-004
**Question** : Qu'est-ce que tu as réfléchi ou proposé récemment pour votre avenir ensemble ?
**Answer** : C'est MON RÔLE de "lead" le planning long terme du couple : voyages (courts/longs), enfants (timing, préparation), carrière/finances, où vivre, projets communs. Elle me reproche de ne pas "think" à notre avenir. Je dois PRENDRE L'INITIATIVE de réfléchir ET de proposer des plans concrets. Ne pas juste dire "oui oui" mais AGIR. Venir vers elle avec "Hey, j'ai réfléchi à [X], on en parle ?"
**Tags** : action, planning, future, lead, critical
**Difficulty** : Hard (nécessite réflexion + initiative)
**Frequency** : Every 3-4 days (vérifier régulièrement)
**Created** : 13/11/2025
**Last Review** : 15/11/2025
**Success Rate** : 33% (1 review - partiel)
**Times Asked** : 1
**Times Failed** : 0 (mais partiel)
**Notes** : Pattern identifié : j'oublie que c'est mon rôle. Timing "jamais bon" = excuse. Si je n'ai rien proposé cette semaine, réfléchir à UN sujet long terme et l'initier dans les 48h.
⚠️ 15/11 : A des notes (voyages Beijing/France) mais PAS ENCORE partagées avec Tingting ni transformées en proposition concrète. Pattern classique : notes dans la tête ≠ action visible. ACTION REQUISE 48h : Intégrer dans système + préparer proposition + INITIER conversation.
---
### Card #9 - Checklist Quotidienne
**ID** : ACTION-005
**Question** : As-tu fait ta checklist avant de sortir aujourd'hui ?
**Answer** : Checklist AVANT DE SORTIR : (1) Towel de Tingting dans son sac, (2) [À compléter avec autres items]. C'est pas juste la towel, c'est RÉFLÉCHIR à ce que je fais et ce dont elle a besoin. Prendre 30 secondes pour mentalement checker "qu'est-ce qu'elle pourrait avoir besoin ?" avant de partir.
**Tags** : action, daily, details, thinking
**Difficulty** : Easy (juste prendre l'habitude)
**Frequency** : Daily (avant chaque sortie)
**Created** : 13/11/2025
**Last Review** : Never
**Success Rate** : N/A (nouveau)
**Times Asked** : 0
**Times Failed** : 0
**Notes** : Exemple concret de "thinking" à elle quotidiennement. La towel était l'exemple déclencheur (conflit 07/11), mais le principe c'est de PENSER à ses besoins dans les petits détails du quotidien.
---
### Card #10 - Plan Voyage Beijing ⚠️ CRITICAL
**ID** : PLAN-001
**Question** : Quel est le statut du plan de voyage à Beijing ? As-tu une proposition concrète à présenter à Tingting ?
**Answer** : Je dois avoir un plan CONCRET : dates proposées (même rough), durée (combien de jours), budget estimé, itinéraire basique (quoi voir/faire), logement (quel quartier). Ne pas juste dire "on devrait y aller" mais venir avec "J'ai réfléchi, voilà ce que je propose, qu'en penses-tu ?" C'est MON RÔLE de lead le planning voyage.
**Tags** : action, planning, travel, lead, critical
**Difficulty** : Hard (nécessite recherche + structuration)
**Frequency** : Every 2-3 days (jusqu'à proposition faite)
**Created** : 15/11/2025
**Last Review** : Never
**Success Rate** : N/A (nouveau)
**Times Asked** : 0
**Times Failed** : 0
**Notes** : Identifié dans daily check du 15/11. Pattern : j'ai des notes mais elles ne deviennent jamais des propositions concrètes présentées à Tingting. Beijing est important pour elle (capitale, culture, histoire). Une fois la proposition faite ET discutée avec elle, cette carte peut passer en fréquence réduite pour suivre l'exécution.
---
### Card #11 - Plan Voyage France ⚠️ CRITICAL
**ID** : PLAN-002
**Question** : Quel est le statut du plan de voyage en France ? As-tu une proposition concrète à présenter à Tingting ?
**Answer** : Je dois avoir un plan CONCRET : dates proposées (quelle saison, combien de temps), villes/régions à visiter (Paris obligatoire, autres ?), budget estimé, logistique (trains/voiture), ce qu'elle voudrait voir/faire. C'est MON PAYS donc c'est MON RÔLE de lead ce voyage et de le rendre spécial pour elle. Venir avec "Voilà ce que j'ai pensé pour te montrer la France, qu'en penses-tu ?"
**Tags** : action, planning, travel, lead, critical, france
**Difficulty** : Hard (nécessite recherche + connaître ses envies)
**Frequency** : Every 2-3 days (jusqu'à proposition faite)
**Created** : 15/11/2025
**Last Review** : Never
**Success Rate** : N/A (nouveau)
**Times Asked** : 0
**Times Failed** : 0
**Notes** : Identifié dans daily check du 15/11. C'est particulièrement important : France = mon pays, ma culture, ma famille. Elle veut voir que je pense à lui faire découvrir mon monde. Pattern identique : notes non transformées en plan concret. Une fois la proposition faite ET discutée avec elle, cette carte peut passer en fréquence réduite pour suivre l'exécution.
---
### Card #12 - Post-Event Negativity ⚠️ CRITICAL
**ID** : PATTERN-001
**Question** : Qu'est-ce que Tingting dit à propos de ta réaction après les événements (même positifs) ?
**Answer** : "Negative after event. Even positive one. Nice as a engineer but not so much as a lover." Je tends à analyser/critiquer/identifier les problèmes APRÈS les événements au lieu de juste apprécier le moment passé ensemble. Mindset ingénieur = chercher ce qui peut être amélioré. Mais pour elle en tant que lover, elle veut que je savoure les bons moments, que je montre de la gratitude, que je dise "c'était cool". Au lieu de ça, je pointe ce qui n'allait pas. Ça tue la magie et la fait sentir que rien n'est jamais assez bien.
**Tags** : pattern, emotional, critical, mindset
**Difficulty** : Hard (va contre mon instinct d'analyse)
**Frequency** : Every 2-3 days (vérifier pattern récent)
**Created** : 15/11/2025
**Last Review** : Never
**Success Rate** : N/A (nouveau)
**Times Asked** : 0
**Times Failed** : 0
**Notes** : Pattern identifié par Tingting. C'est un problème de **mindset** : l'analyse critique est utile pour le code, destructive pour la romance. APRÈS un événement positif (date, sortie, moment ensemble), je dois CONSCIEMMENT choisir de savourer au lieu d'analyser. Dire "Merci bébé, c'était vraiment cool" au lieu de "C'était bien mais...". Elle veut un lover qui apprécie, pas un QA engineer qui debug.
---
### Card #13 - Reddit Saves Review
**ID** : PERSONAL-001
**Question** : As-tu reviewé tes Reddit saves cette semaine pour extraire des infos utiles ?
**Answer** : Je save des posts Reddit avec des infos importantes (tips, guides, resources) mais je ne les review JAMAIS. Pattern d'oubli : je collecte mais n'utilise pas. Je dois RÉGULIÈREMENT (au moins 1x/semaine) parcourir mes saves, extraire les infos utiles, les intégrer dans mes systèmes/notes, puis unsave ce qui est traité. Sinon c'est juste du hoarding digital inutile.
**Tags** : personal, productivity, knowledge-management
**Difficulty** : Medium (nécessite discipline)
**Frequency** : Weekly (1x semaine)
**Created** : 15/11/2025
**Last Review** : Never
**Success Rate** : N/A (nouveau)
**Times Asked** : 0
**Times Failed** : 0
**Notes** : Pattern d'accumulation sans action. Les saves Reddit sont utiles seulement si je les traite. Bloquer 30 minutes 1x/semaine pour review + extract + intégrer.
---
### Card #14 - Social Media Automation Papa
**ID** : FAMILY-001
**Question** : Quel est le statut du système d'automatisation des réseaux sociaux pour papa ?
**Answer** : Papa a besoin d'aide pour automatiser sa présence sur les réseaux sociaux (probablement pour son activité pro). C'est MON DOMAINE (tech/automation) donc c'est ma responsabilité de l'aider. Je dois : (1) Comprendre ses besoins exacts, (2) Rechercher les solutions/outils adaptés, (3) Proposer un plan concret, (4) L'aider à l'implémenter. Ne pas juste dire "oui je vais regarder" et oublier - AGIR.
**Tags** : family, project, tech, automation, responsibility
**Difficulty** : Hard (nécessite recherche + temps)
**Frequency** : Every 3-4 days (jusqu'à plan proposé)
**Created** : 15/11/2025
**Last Review** : 18/11/2025
**Success Rate** : 100% (1 review)
**Times Asked** : 1
**Times Failed** : 0
**Notes** : Papa a besoin de mon expertise. Pattern risqué : oublier les demandes de la famille parce que "pas urgent". C'est important pour lui = doit être important pour moi. Une fois le système en place, cette carte peut être retirée ou réduite en fréquence pour maintenance. ✅ 18/11 : A relancé le sujet parce que situation a changé - pattern positif, réagit quand contexte évolue au lieu de laisser moisir.
---
### Card #15 - Class Generator Adapter Mac
**ID** : TECH-001
**Question** : As-tu adapté class_generator pour Mac cette semaine ?
**Answer** : J'ai un outil class_generator qui doit être adapté pour fonctionner sur Mac. Pattern classique : projet utile qui reste dans la todo list sans jamais être fait. Je dois : (1) Identifier les incompatibilités Mac, (2) Adapter le code, (3) Tester sur Mac, (4) Déployer. Bloquer du temps dédié pour le faire au lieu de dire "je ferai ça plus tard".
**Tags** : tech, project, tools, mac
**Difficulty** : Medium (technique mais limité en scope)
**Frequency** : Every 3-4 days (jusqu'à terminé)
**Created** : 15/11/2025
**Last Review** : Never
**Success Rate** : N/A (nouveau)
**Times Asked** : 0
**Times Failed** : 0
**Notes** : Projet perso qui traîne. Une fois adapté et testé, cette carte peut être retirée. Si bloqué techniquement, demander de l'aide ou prioriser autrement - mais ne pas laisser moisir indéfiniment dans la backlog.
---
### Card #16 - Fiches Nutritionnelles
**ID** : ACTION-006
**Question** : As-tu utilisé les fiches nutritionnelles (food/Raw/) pour planifier ou cuisiner quelque chose cette semaine ?
**Answer** : J'ai créé 100+ fiches nutritionnelles détaillées sur poissons, fruits, viandes, légumes, herbes. C'est du "thinking" à elle SEULEMENT si je les UTILISE concrètement pour cuisiner des plats sains pour elle. Faire des fiches sans action = Pattern d'oubli classique (documenter mais pas agir). Je dois soit : planifier des repas basés sur ces fiches, OU cuisiner en utilisant les infos nutritionnelles.
**Tags** : action, food, nutrition, thinking
**Difficulty** : Medium (passer de la théorie à l'action)
**Frequency** : Every 3-4 days
**Created** : 13/11/2025
**Last Review** : Never
**Success Rate** : N/A (nouveau)
**Times Asked** : 0
**Times Failed** : 0
**Notes** : Créé sur laptop au lieu d'étudier le chinois. C'est "thinking" à elle SI utilisé concrètement. Sinon c'est juste de la procrastination intellectuelle.
**Card File** : `cards/fiches_nutritionnelles.md`
---
### Card #17 - Cuisiner pour Elle
**ID** : ACTION-007
**Question** : Quand as-tu cuisiné pour Tingting la dernière fois ?
**Answer** : Cuisiner pour elle = Action concrète de "thinking". J'ai des recettes dans food/ (beef broccoli, pasta salad curry, braised beef, honey apple dessert, soup system) + fiches nutritionnelles dans food/Raw/. Je dois UTILISER ces ressources pour cuisiner régulièrement. Ne pas laisser les recettes et fiches dormir dans le repo. Si je n'ai pas cuisiné cette semaine : PLANIFIER un repas dans les 48h.
**Tags** : action, food, cooking, thinking, care
**Difficulty** : Medium (prendre le temps de cuisiner)
**Frequency** : Every 2-3 days (vérifier régulièrement)
**Created** : 13/11/2025
**Last Review** : Never
**Success Rate** : N/A (nouveau)
**Times Asked** : 0
**Times Failed** : 0
**Notes** : Lié à CORE-001 (Complacency). Cuisiner pour elle = Démonstration concrète que je "think" à elle. C'est pas juste l'idée, c'est l'ACTION qui compte.
**Card File** : `cards/cuisiner_pour_elle.md`
---
### Card #18 - Memory Decay Pattern (META)
**ID** : META-001
**Question** : Pourquoi tu oublies d'utiliser les outils que tu crées, et pourquoi ce système Daily Check existe ?
**Answer** : Ce n'est PAS de la procrastination ou du manque de motivation. Pattern identifié : Je CRÉE des outils sophistiqués (fiches nutritionnelles, recettes, docs, conversation topics) et j'AGIS avec effort réel (je cuisine, je réfléchis, je documente). MAIS : Temps passe → Mémoire s'érode → J'OUBLIE QUE CES OUTILS EXISTENT → Pas de réutilisation. Le problème = Memory persistence, pas motivation. Le Daily Check existe pour maintenir la CONSCIENCE des ressources disponibles. Sans rappel systématique, la chaîne se brise : Création ✅ → Usage initial ✅ → Oubli de l'existence ❌ → Jamais réutilisé ❌. C'est un problème cognitif de mémoire, pas un problème de caractère.
**Tags** : meta, theory, memory, system, understanding
**Difficulty** : Medium (comprendre et accepter ce pattern)
**Frequency** : Weekly (rappel régulier du pourquoi)
**Created** : 13/11/2025
**Last Review** : Never
**Success Rate** : N/A (nouveau)
**Times Asked** : 0
**Times Failed** : 0
**Notes** : CARTE THÉORIQUE CRITIQUE. Comprendre ce pattern évite l'auto-flagellation inutile ("je suis nul, je procrastine"). Non : tu as un pattern cognitif spécifique qui nécessite des systèmes de rappel. Le perfectionisme et les standards élevés sont des forces, pas des faiblesses. Le système Daily Check compense la memory decay, c'est tout.
**Card File** : `cards/memory_decay_pattern.md`
---
### Card #19 - Manage Music on Phone
**ID** : PERSONAL-002
**Question** : As-tu géré la musique sur ton téléphone cette semaine ?
**Answer** : J'ai besoin de maintenir une bibliothèque musicale organisée et à jour sur mon téléphone. Pattern classique : laisser la musique en désordre, playlists obsolètes, ou ne pas ajouter de nouvelles chansons. Actions concrètes : (1) Nettoyer les playlists existantes, (2) Ajouter de nouvelles musiques, (3) Supprimer ce que je n'écoute plus, (4) Organiser par mood/contexte. Si pas fait cette semaine : bloquer 30 minutes pour le faire.
**Tags** : personal, music, organization, maintenance
**Difficulty** : Easy (juste prendre le temps)
**Frequency** : Every 7 days
**Created** : 18/11/2025
**Last Review** : Never
**Success Rate** : N/A (nouveau)
**Times Asked** : 0
**Times Failed** : 0
**Notes** : Projet perso de maintenance. Une fois organisé, devrait juste nécessiter des mises à jour régulières. Ne pas laisser s'accumuler pendant des mois.
**Card File** : `cards/manage_music_phone.md`
---
### Card #20 - Les 3 Premières Secondes
**ID** : PERSONAL-003
**Question** : Que dois-tu faire dans les 3 premières secondes en entrant dans un espace social ?
**Answer** : (1) Tête droite - position neutre, ni arrogante ni timide. (2) Regard calme - balayer la pièce tranquillement, comme si j'avais ma place ici. (3) Contact visuel bref - quand mon regard croise quelqu'un, maintenir 1 seconde + léger sourire ou signe de tête. C'est une "porte ouverte" non verbale. ERREUR À ÉVITER : Entrer tête baissée, yeux sur téléphone/sol = signal "ne me dérangez pas". Les 3 premières secondes définissent si je parais ouvert ou fermé.
**Tags** : personal, social-skills, approachability, body-language, first-impression
**Difficulty** : Medium (oser lever la tête et regarder)
**Frequency** : Every 3-4 days (pour ancrer l'habitude)
**Created** : 19/11/2025
**Last Review** : Never
**Success Rate** : N/A (nouveau)
**Times Asked** : 0
**Times Failed** : 0
**Notes** : Technique #1 du système "Devenir Plus Abordable". Application immédiate : restaurants, social events, même au bureau. Lié à CORE-001 (Complacency) - être présent et attentif dès l'entrée, pas en autopilot. Applicable avec Tingting : quand je rentre à la maison, comment j'entre définit le ton.
**Card File** : `cards/trois_premieres_secondes.md`
---
### Card #21 - Validation Interne vs Externe ⚠️ CRITICAL
**ID** : PERSONAL-004
**Question** : Quelle est la différence entre validation interne et validation externe, et pourquoi c'est critique ?
**Answer** : VALIDATION EXTERNE = Attendre que les autres me remarquent, me valident, m'approuvent. Mesurer ma valeur au nombre de personnes qui me parlent. Cette énergie de "besoin" REPOUSSE les gens. VALIDATION INTERNE = Ne pas attendre la permission d'exister dans un espace. Mantra : "Je n'ai pas besoin que tu m'aimes, mais je suis ouvert à te connaître". Paradoxe puissant : Quand j'arrête d'avoir BESOIN d'attention, je commence à l'ATTIRER. Cette autosuffisance est intrigante et rend les interactions authentiques au lieu de pesantes.
**Tags** : personal, mindset, core-concept, validation, neediness, critical
**Difficulty** : Hard (va contre l'instinct de chercher approbation)
**Frequency** : Every 2-3 days (jusqu'à intégré comme mindset par défaut)
**Created** : 19/11/2025
**Last Review** : Never
**Success Rate** : N/A (nouveau)
**Times Asked** : 0
**Times Failed** : 0
**Notes** : Technique #5 - LA PLUS IMPORTANTE selon le texte source. C'est le fondement de toutes les autres techniques. Lié directement à CORE-001 (Complacency) et mes interactions avec Tingting : si je cherche constamment son approbation au lieu d'être authentiquement présent, ça crée une dynamique "needy". Elle veut un homme qui n'a pas BESOIN d'elle pour se sentir complet, mais qui CHOISIT d'être avec elle. Mindset shift fondamental.
**Card File** : `cards/validation_interne_externe.md`
---
### Card #22 - Curiosité Sincère vs Être Intéressant
**ID** : PERSONAL-005
**Question** : Quelle est la différence entre "être intéressant" et "être intéressé", et laquelle attire les gens ?
**Answer** : ÊTRE INTÉRESSANT = Préparer des histoires captivantes, des répliques intelligentes, attendre mon tour pour parler. Résultat : je n'écoute pas vraiment. ÊTRE INTÉRESSÉ = Curiosité sincère pour l'autre personne. Poser de vraies questions qui montrent un intérêt réel : "Quelle est la partie la plus difficile dans ce que tu fais ?" au lieu de questions superficielles. L'objectif : faire en sorte que l'autre se sente ENTENDU et IMPORTANT. Les gens se souviennent pas de ce que j'ai dit, mais de comment je les ai fait sentir. Leur offrir ma pleine attention est profondément magnétique.
**Tags** : personal, communication, curiosity, listening, connection
**Difficulty** : Medium (arrêter de penser à ma prochaine réplique et vraiment écouter)
**Frequency** : Every 3-4 days
**Created** : 19/11/2025
**Last Review** : Never
**Success Rate** : N/A (nouveau)
**Times Asked** : 0
**Times Failed** : 0
**Notes** : Technique #3. DIRECTEMENT applicable avec Tingting : quand elle me parle, suis-je vraiment CURIEUX de comprendre ce qu'elle ressent, ou est-ce que je prépare déjà ma défense/réponse ? Lié à ACTION-003 (Initier conversations) - quand j'initie, c'est pour COMPRENDRE elle, pas pour performer ou prouver que je suis un bon boyfriend. Aussi lié à LEAD-001 (Processing Time) - prendre le temps de vraiment COMPRENDRE avant de répondre.
**Card File** : `cards/curiosite_sincere.md`
---
### Card #23 - Needy vs Magnétique : Les Signaux
**ID** : PERSONAL-006
**Question** : Quels sont les signaux comportementaux qui rendent quelqu'un "needy" vs "magnétique" ?
**Answer** : NEEDY (repousse) : (1) Combler chaque silence avec bavardage nerveux, (2) Chercher constamment validation/attention, (3) Posture fermée (mains dans poches, épaules voûtées, tête baissée), (4) Parler de soi pour impressionner au lieu d'écouter. MAGNÉTIQUE (attire) : (1) À l'aise avec les silences - présent et calme, (2) Validation interne - n'attend pas permission d'exister, (3) Posture ouverte (épaules détendues, bras naturels, regard calme), (4) Curieux sincère - pose vraies questions, écoute vraiment. Le calme et la confiance tranquille sont CONTAGIEUX - les gens se détendent et s'ouvrent.
**Tags** : personal, pattern, neediness, magnetism, synthesis, social-skills
**Difficulty** : Medium (reconnaître mes propres patterns)
**Frequency** : Every 4-5 days
**Created** : 19/11/2025
**Last Review** : Never
**Success Rate** : N/A (nouveau)
**Times Asked** : 0
**Times Failed** : 0
**Notes** : Synthèse des erreurs courantes vs approches magnétiques. Permet de self-check : "Est-ce que je suis en mode needy ou magnétique en ce moment ?" Applicable avec Tingting : quand je sens que j'ai besoin de son approbation ou que je cherche à la convaincre que je suis un bon boyfriend, je suis en mode needy. Quand je suis juste présent, calme, et authentiquement curieux de la comprendre, je suis magnétique. Lié à PATTERN-001 (Post-Event Negativity) - le besoin de validation se manifeste aussi par la critique pour prouver que je suis "smart".
**Card File** : `cards/needy_vs_magnetique.md`
---
## Retired Cards
(Aucune pour l'instant - les cartes sont retirées quand le problème est durablement résolu)
---
## Card Creation Guidelines
### Quand créer une nouvelle carte ?
**Créer quand** :
- Nouveau pattern identifié dans un conflit
- Truc important qu'elle a dit et que je risque d'oublier
- Action concrète convenue ensemble
- Insight important sur la dynamique couple
**Ne PAS créer quand** :
- C'est trop spécifique/temporaire (genre "acheter du lait demain")
- C'est redondant avec une carte existante
- C'est pas vraiment important
### Format de carte
```markdown
### Card #X - [Nom Court]
**ID** : [CATEGORY-XXX]
**Question** : [Question claire, directe]
**Answer** : [Réponse complète, avec contexte si nécessaire]
**Tags** : [tags séparés par virgule]
**Difficulty** : Easy / Medium / Hard
**Frequency** : [À quelle fréquence la poser]
**Created** : [Date]
**Last Review** : [Date ou "Never"]
**Success Rate** : [X% ou N/A]
**Times Failed** : [Nombre]
**Notes** : [Contexte additionnel, pourquoi c'est important]
```
### Tag System
**Categories** :
- `core-problem` : Problèmes fondamentaux de la relation
- `action` : Actions concrètes à faire
- `communication` : Patterns de communication
- `detail` : Détails pratiques à retenir
- `pattern` : Patterns comportementaux
**Importance** :
- `critical` : À ne JAMAIS oublier
- `daily` : À checker quotidiennement
- `weekly` : Moins urgent mais important
### Difficulty Levels
**Easy** : Je peux répondre facilement, juste besoin de maintenir
**Medium** : Je dois y penser, risque d'oubli moyen
**Hard** : J'oublie systématiquement, ou c'est difficile émotionnellement
### Frequency Guidelines
**Daily** : Cartes critical ou hard que j'oublie souvent
**Every 2-3 days** : Cartes medium, pour maintenir
**Weekly** : Cartes easy, juste pour pas oublier complètement
---
## Spaced Repetition Algorithm (Simple)
### Logique de base
**Si réponse correcte** :
- Easy card : +7 jours avant prochaine review
- Medium card : +3 jours
- Hard card : +1 jour
**Si réponse incorrecte** :
- Toutes difficultés : Review demain (reset)
**Si échec 3x sur même carte** :
- Augmenter frequency à "daily"
- Flagged pour attention spéciale
### Update après chaque session
Après chaque daily check, update :
1. **Last Review** : Date d'aujourd'hui
2. **Success Rate** : Calculer nouveau %
3. **Times Failed** : Incrémenter si échec
4. **Next Review** : Calculer selon l'algo ci-dessus
---
## Stats Overview
**À calculer hebdomadairement** :
```markdown
### Week of [DATE]
**Total Reviews** : X
**Average Score** : X/3
**Cards Mastered** : X (success rate > 80% sur 5+ reviews)
**Cards Struggling** : X (success rate < 50%)
**Longest Streak** : X days
**Times Skipped** : X
**Most Failed Card** : [Card ID] - [X failures]
**Best Performing Card** : [Card ID] - [X% success rate]
```
---
## Next Actions
- [ ] Review ces 4 cartes lors du prochain daily check
- [ ] Après 1 semaine, analyser quelles cartes sont les plus difficiles
- [ ] Créer nouvelles cartes si nouveaux patterns identifiés
- [ ] Retirer cartes si problèmes durablement résolus (3+ semaines de succès)

View File

@ -831,3 +831,25 @@ Bon retour après 2 jours d'absence. Montre une meilleure compréhension des con
--- ---
### 2025-11-24 16:26
**Triggered by** : TTS Service
**Check Time** : 16:00
**Status** : completed
**Streak** : 1 jours
**Days Skipped** : 0
---
### 2025-11-25 07:41
**Triggered by** : TTS Service
**Check Time** : 07:00
**Status** : completed
**Streak** : 2 jours
**Days Skipped** : 0
---

View File

@ -1,39 +0,0 @@
"""
Test rapide du popup + TTS sans attendre les heures programmées
"""
import sys
import os
# Add parent directory to path
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from tingting_guardian_service import speak, DailyCheckPopup, state
print("🧪 Test du système popup + TTS")
print(f"Current streak: {state.streak}")
print(f"Days skipped: {state.days_skipped}")
print("\n")
# Test prompt
test_prompt = "Test système. Bonjour Alexis. Jour 1 de ta streak. Qu'est-ce que Tingting a besoin aujourd'hui ?"
print("🔊 Lecture du prompt avec TTS...")
speak(test_prompt)
print("📋 Affichage du popup...")
popup = DailyCheckPopup(test_prompt, "14:00")
response = popup.show()
print(f"\n✅ Réponse reçue: {response}")
if response == "DO_CHECK":
print("✅ Bouton 'Faire le Check' cliqué - Ouverture de Claude...")
# Ne pas vraiment ouvrir Claude pour le test
print("(Claude ne s'ouvre pas en mode test)")
elif response == "SNOOZE":
print("⏰ Bouton 'Snooze' cliqué")
elif response == "SKIP":
print("❌ Bouton 'Skip' cliqué")
print("\n✅ Test terminé !")

View File

@ -1,27 +0,0 @@
"""Test script to list and preview available TTS voices"""
import pyttsx3
engine = pyttsx3.init()
voices = engine.getProperty('voices')
print("Available voices on your system:\n")
for i, voice in enumerate(voices):
print(f"{i}. {voice.name}")
print(f" ID: {voice.id}")
print(f" Languages: {voice.languages}")
print()
# Test the first few voices
print("\n--- Testing voices ---\n")
test_text = "Yo Alexis, daily check time. Tu fais le check ou tu vas oublier ?"
for i, voice in enumerate(voices[:3]): # Test first 3
print(f"Testing voice {i}: {voice.name}")
engine.setProperty('voice', voice.id)
engine.setProperty('volume', 1.0)
engine.setProperty('rate', 150)
engine.say(f"Voice {i}. {test_text}")
engine.runAndWait()
input("Press Enter for next voice...")
print("\nDone!")

View File

@ -1,44 +0,0 @@
"""Test Windows modern TTS voices using WinRT"""
import asyncio
import edge_tts
async def test_edge_voices():
"""Test Edge TTS voices (cloud-based, high quality)"""
# List some good voices
voices = [
("en-US-GuyNeural", "English Male (Guy)"),
("en-US-JennyNeural", "English Female (Jenny)"),
("fr-FR-HenriNeural", "French Male (Henri)"),
("fr-FR-DeniseNeural", "French Female (Denise)"),
]
test_text = "Yo Alexis, daily check time. Tu fais le check ou tu vas oublier ?"
print("Testing Edge TTS voices (high quality):\n")
for voice_id, voice_name in voices:
print(f"Testing: {voice_name} ({voice_id})")
# Generate speech
communicate = edge_tts.Communicate(test_text, voice_id)
output_file = f"test_{voice_id}.mp3"
await communicate.save(output_file)
# Play it
import os
os.system(f'start {output_file}')
input(f"Press Enter for next voice...")
# Cleanup
try:
os.remove(output_file)
except:
pass
print("\nDone! Which voice did you prefer?")
if __name__ == "__main__":
# First install: pip install edge-tts
asyncio.run(test_edge_voices())

View File

@ -1,170 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
width: 960px;
height: 540px;
margin: 0;
padding: 0;
overflow: hidden;
}
.slide {
width: 960px;
height: 540px;
position: relative;
font-family: 'Microsoft YaHei', 'Segoe UI', sans-serif;
overflow: hidden;
}
.bg-primary { background: #6B2C3E; }
.bg-warm { background: #F5F1E8; }
.bg-celebration { background: #E8B4B8; }
.title-main {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
width: 90%;
}
.title-main h1 {
font-size: 48px;
color: #F5F1E8;
margin-bottom: 20px;
font-weight: 700;
letter-spacing: 2px;
}
.title-main .subtitle {
font-size: 24px;
color: #E8B4B8;
font-weight: 300;
}
.title-main .class-info {
font-size: 20px;
color: #B8974F;
margin-top: 15px;
font-weight: 400;
}
.content-slide {
padding: 50px 70px 60px 70px;
}
.content-slide h2 {
font-size: 32px;
color: #6B2C3E;
margin-bottom: 25px;
font-weight: 700;
}
.content-slide p {
font-size: 20px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 15px;
}
.content-slide ul {
margin-left: 40px;
margin-top: 20px;
}
.content-slide li {
font-size: 18px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 8px;
}
.quote-box {
background: white;
padding: 25px 30px;
margin: 25px 0;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.quote-box p {
font-size: 22px;
color: #6B2C3E;
font-style: italic;
line-height: 1.6;
}
.number-highlight {
display: inline-block;
background: #B8974F;
color: white;
padding: 5px 15px;
border-radius: 20px;
font-weight: bold;
font-size: 24px;
}
.decoration-top {
position: absolute;
top: 0;
right: 0;
width: 200px;
height: 200px;
background: #B8974F40;
opacity: 0.3;
border-radius: 50%;
}
.decoration-bottom {
position: absolute;
bottom: 0;
left: 0;
width: 150px;
height: 150px;
background: #E8B4B840;
opacity: 0.3;
border-radius: 50%;
}
.v-center {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 100%;
padding: 0 60px;
}
.section-title {
background: #6B2C3E;
display: flex;
align-items: center;
justify-content: center;
}
.section-title h2 {
font-size: 48px;
color: #F5F1E8;
text-align: center;
font-weight: 700;
padding: 0;
}
</style>
</head>
<body>
<div class="slide bg-primary">
<div class="title-main">
<h1>🎂 生日主题班会 🎂</h1>
<p class="subtitle">Birthday Celebration Class Meeting</p>
<p class="class-info">七年三班 | Class 7-3</p>
</div>
</div>
</body>
</html>

View File

@ -1,175 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
width: 960px;
height: 540px;
margin: 0;
padding: 0;
overflow: hidden;
}
.slide {
width: 960px;
height: 540px;
position: relative;
font-family: 'Microsoft YaHei', 'Segoe UI', sans-serif;
overflow: hidden;
}
.bg-primary { background: #6B2C3E; }
.bg-warm { background: #F5F1E8; }
.bg-celebration { background: #E8B4B8; }
.title-main {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
width: 90%;
}
.title-main h1 {
font-size: 48px;
color: #F5F1E8;
margin-bottom: 20px;
font-weight: 700;
letter-spacing: 2px;
}
.title-main .subtitle {
font-size: 24px;
color: #E8B4B8;
font-weight: 300;
}
.title-main .class-info {
font-size: 20px;
color: #B8974F;
margin-top: 15px;
font-weight: 400;
}
.content-slide {
padding: 50px 70px 60px 70px;
}
.content-slide h2 {
font-size: 32px;
color: #6B2C3E;
margin-bottom: 25px;
font-weight: 700;
}
.content-slide p {
font-size: 20px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 15px;
}
.content-slide ul {
margin-left: 40px;
margin-top: 20px;
}
.content-slide li {
font-size: 18px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 8px;
}
.quote-box {
background: white;
padding: 25px 30px;
margin: 25px 0;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.quote-box p {
font-size: 22px;
color: #6B2C3E;
font-style: italic;
line-height: 1.6;
}
.number-highlight {
display: inline-block;
background: #B8974F;
color: white;
padding: 5px 15px;
border-radius: 20px;
font-weight: bold;
font-size: 24px;
}
.decoration-top {
position: absolute;
top: 0;
right: 0;
width: 200px;
height: 200px;
background: #B8974F40;
opacity: 0.3;
border-radius: 50%;
}
.decoration-bottom {
position: absolute;
bottom: 0;
left: 0;
width: 150px;
height: 150px;
background: #E8B4B840;
opacity: 0.3;
border-radius: 50%;
}
.v-center {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 100%;
padding: 0 60px;
}
.section-title {
background: #6B2C3E;
display: flex;
align-items: center;
justify-content: center;
}
.section-title h2 {
font-size: 48px;
color: #F5F1E8;
text-align: center;
font-weight: 700;
padding: 0;
}
</style>
</head>
<body>
<div class="slide bg-primary">
<div class="v-center">
<h2 style="font-size: 42px; color: #F5F1E8; text-align: center; margin-bottom: 40px;">
🕯️ 许愿时刻 🕯️
</h2>
<p style="font-size: 24px; color: #E8B4B8; text-align: center; line-height: 2;">
闭上眼睛<br>
在心里许下你最美好的愿望<br>
<span style="color: #B8974F; font-size: 20px;">(我们给你们5秒钟的时间)</span>
</p>
</div>
</div>
</body>
</html>

View File

@ -1,175 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
width: 960px;
height: 540px;
margin: 0;
padding: 0;
overflow: hidden;
}
.slide {
width: 960px;
height: 540px;
position: relative;
font-family: 'Microsoft YaHei', 'Segoe UI', sans-serif;
overflow: hidden;
}
.bg-primary { background: #6B2C3E; }
.bg-warm { background: #F5F1E8; }
.bg-celebration { background: #E8B4B8; }
.title-main {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
width: 90%;
}
.title-main h1 {
font-size: 48px;
color: #F5F1E8;
margin-bottom: 20px;
font-weight: 700;
letter-spacing: 2px;
}
.title-main .subtitle {
font-size: 24px;
color: #E8B4B8;
font-weight: 300;
}
.title-main .class-info {
font-size: 20px;
color: #B8974F;
margin-top: 15px;
font-weight: 400;
}
.content-slide {
padding: 50px 70px 60px 70px;
}
.content-slide h2 {
font-size: 32px;
color: #6B2C3E;
margin-bottom: 25px;
font-weight: 700;
}
.content-slide p {
font-size: 20px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 15px;
}
.content-slide ul {
margin-left: 40px;
margin-top: 20px;
}
.content-slide li {
font-size: 18px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 8px;
}
.quote-box {
background: white;
padding: 25px 30px;
margin: 25px 0;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.quote-box p {
font-size: 22px;
color: #6B2C3E;
font-style: italic;
line-height: 1.6;
}
.number-highlight {
display: inline-block;
background: #B8974F;
color: white;
padding: 5px 15px;
border-radius: 20px;
font-weight: bold;
font-size: 24px;
}
.decoration-top {
position: absolute;
top: 0;
right: 0;
width: 200px;
height: 200px;
background: #B8974F40;
opacity: 0.3;
border-radius: 50%;
}
.decoration-bottom {
position: absolute;
bottom: 0;
left: 0;
width: 150px;
height: 150px;
background: #E8B4B840;
opacity: 0.3;
border-radius: 50%;
}
.v-center {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 100%;
padding: 0 60px;
}
.section-title {
background: #6B2C3E;
display: flex;
align-items: center;
justify-content: center;
}
.section-title h2 {
font-size: 48px;
color: #F5F1E8;
text-align: center;
font-weight: 700;
padding: 0;
}
</style>
</head>
<body>
<div class="slide bg-celebration">
<div class="content-slide">
<h2>🎂 吹蜡烛</h2>
<p style="font-size: 28px; text-align: center; margin-top: 80px; color: #6B2C3E;">
一、二、三!<br>
<strong style="font-size: 36px;">吹!🎉</strong>
</p>
<p style="text-align: center; margin-top: 40px; font-size: 20px;">
愿你们的愿望都能实现 ✨
</p>
</div>
</div>
</body>
</html>

View File

@ -1,176 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
width: 960px;
height: 540px;
margin: 0;
padding: 0;
overflow: hidden;
}
.slide {
width: 960px;
height: 540px;
position: relative;
font-family: 'Microsoft YaHei', 'Segoe UI', sans-serif;
overflow: hidden;
}
.bg-primary { background: #6B2C3E; }
.bg-warm { background: #F5F1E8; }
.bg-celebration { background: #E8B4B8; }
.title-main {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
width: 90%;
}
.title-main h1 {
font-size: 48px;
color: #F5F1E8;
margin-bottom: 20px;
font-weight: 700;
letter-spacing: 2px;
}
.title-main .subtitle {
font-size: 24px;
color: #E8B4B8;
font-weight: 300;
}
.title-main .class-info {
font-size: 20px;
color: #B8974F;
margin-top: 15px;
font-weight: 400;
}
.content-slide {
padding: 50px 70px 60px 70px;
}
.content-slide h2 {
font-size: 32px;
color: #6B2C3E;
margin-bottom: 25px;
font-weight: 700;
}
.content-slide p {
font-size: 20px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 15px;
}
.content-slide ul {
margin-left: 40px;
margin-top: 20px;
}
.content-slide li {
font-size: 18px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 8px;
}
.quote-box {
background: white;
padding: 25px 30px;
margin: 25px 0;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.quote-box p {
font-size: 22px;
color: #6B2C3E;
font-style: italic;
line-height: 1.6;
}
.number-highlight {
display: inline-block;
background: #B8974F;
color: white;
padding: 5px 15px;
border-radius: 20px;
font-weight: bold;
font-size: 24px;
}
.decoration-top {
position: absolute;
top: 0;
right: 0;
width: 200px;
height: 200px;
background: #B8974F40;
opacity: 0.3;
border-radius: 50%;
}
.decoration-bottom {
position: absolute;
bottom: 0;
left: 0;
width: 150px;
height: 150px;
background: #E8B4B840;
opacity: 0.3;
border-radius: 50%;
}
.v-center {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 100%;
padding: 0 60px;
}
.section-title {
background: #6B2C3E;
display: flex;
align-items: center;
justify-content: center;
}
.section-title h2 {
font-size: 48px;
color: #F5F1E8;
text-align: center;
font-weight: 700;
padding: 0;
}
</style>
</head>
<body>
<div class="slide bg-warm">
<div class="content-slide">
<h2>🎁 拆礼物环节</h2>
<p style="margin-top: 25px;">每一份礼物都承载着<strong>心意</strong></p>
<div class="quote-box" style="margin-top: 30px;">
<p><strong>心意盒里有什么?</strong></p>
<p>📝 手写的祝福卡片</p>
<p>📷 珍贵的照片回忆</p>
<p>🧸 可爱的小玩偶</p>
<p>❤️ 满满的班级温暖</p>
</div>
</div>
</div>
</body>
</html>

View File

@ -1,175 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
width: 960px;
height: 540px;
margin: 0;
padding: 0;
overflow: hidden;
}
.slide {
width: 960px;
height: 540px;
position: relative;
font-family: 'Microsoft YaHei', 'Segoe UI', sans-serif;
overflow: hidden;
}
.bg-primary { background: #6B2C3E; }
.bg-warm { background: #F5F1E8; }
.bg-celebration { background: #E8B4B8; }
.title-main {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
width: 90%;
}
.title-main h1 {
font-size: 48px;
color: #F5F1E8;
margin-bottom: 20px;
font-weight: 700;
letter-spacing: 2px;
}
.title-main .subtitle {
font-size: 24px;
color: #E8B4B8;
font-weight: 300;
}
.title-main .class-info {
font-size: 20px;
color: #B8974F;
margin-top: 15px;
font-weight: 400;
}
.content-slide {
padding: 50px 70px 60px 70px;
}
.content-slide h2 {
font-size: 32px;
color: #6B2C3E;
margin-bottom: 25px;
font-weight: 700;
}
.content-slide p {
font-size: 20px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 15px;
}
.content-slide ul {
margin-left: 40px;
margin-top: 20px;
}
.content-slide li {
font-size: 18px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 8px;
}
.quote-box {
background: white;
padding: 25px 30px;
margin: 25px 0;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.quote-box p {
font-size: 22px;
color: #6B2C3E;
font-style: italic;
line-height: 1.6;
}
.number-highlight {
display: inline-block;
background: #B8974F;
color: white;
padding: 5px 15px;
border-radius: 20px;
font-weight: bold;
font-size: 24px;
}
.decoration-top {
position: absolute;
top: 0;
right: 0;
width: 200px;
height: 200px;
background: #B8974F40;
opacity: 0.3;
border-radius: 50%;
}
.decoration-bottom {
position: absolute;
bottom: 0;
left: 0;
width: 150px;
height: 150px;
background: #E8B4B840;
opacity: 0.3;
border-radius: 50%;
}
.v-center {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 100%;
padding: 0 60px;
}
.section-title {
background: #6B2C3E;
display: flex;
align-items: center;
justify-content: center;
}
.section-title h2 {
font-size: 48px;
color: #F5F1E8;
text-align: center;
font-weight: 700;
padding: 0;
}
</style>
</head>
<body>
<div class="slide bg-celebration">
<div class="content-slide">
<h2>💬 同学祝福时刻</h2>
<p style="margin-top: 30px; font-size: 22px; text-align: center;">
有哪位同学想要送上<br>
你的祝福或者才艺表演?
</p>
<p style="text-align: center; margin-top: 50px; font-size: 20px; color: #6B2C3E;">
🎤 舞台交给你们!🎤
</p>
</div>
</div>
</body>
</html>

View File

@ -1,178 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
width: 960px;
height: 540px;
margin: 0;
padding: 0;
overflow: hidden;
}
.slide {
width: 960px;
height: 540px;
position: relative;
font-family: 'Microsoft YaHei', 'Segoe UI', sans-serif;
overflow: hidden;
}
.bg-primary { background: #6B2C3E; }
.bg-warm { background: #F5F1E8; }
.bg-celebration { background: #E8B4B8; }
.title-main {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
width: 90%;
}
.title-main h1 {
font-size: 48px;
color: #F5F1E8;
margin-bottom: 20px;
font-weight: 700;
letter-spacing: 2px;
}
.title-main .subtitle {
font-size: 24px;
color: #E8B4B8;
font-weight: 300;
}
.title-main .class-info {
font-size: 20px;
color: #B8974F;
margin-top: 15px;
font-weight: 400;
}
.content-slide {
padding: 50px 70px 60px 70px;
}
.content-slide h2 {
font-size: 32px;
color: #6B2C3E;
margin-bottom: 25px;
font-weight: 700;
}
.content-slide p {
font-size: 20px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 15px;
}
.content-slide ul {
margin-left: 40px;
margin-top: 20px;
}
.content-slide li {
font-size: 18px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 8px;
}
.quote-box {
background: white;
padding: 25px 30px;
margin: 25px 0;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.quote-box p {
font-size: 22px;
color: #6B2C3E;
font-style: italic;
line-height: 1.6;
}
.number-highlight {
display: inline-block;
background: #B8974F;
color: white;
padding: 5px 15px;
border-radius: 20px;
font-weight: bold;
font-size: 24px;
}
.decoration-top {
position: absolute;
top: 0;
right: 0;
width: 200px;
height: 200px;
background: #B8974F40;
opacity: 0.3;
border-radius: 50%;
}
.decoration-bottom {
position: absolute;
bottom: 0;
left: 0;
width: 150px;
height: 150px;
background: #E8B4B840;
opacity: 0.3;
border-radius: 50%;
}
.v-center {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 100%;
padding: 0 60px;
}
.section-title {
background: #6B2C3E;
display: flex;
align-items: center;
justify-content: center;
}
.section-title h2 {
font-size: 48px;
color: #F5F1E8;
text-align: center;
font-weight: 700;
padding: 0;
}
</style>
</head>
<body>
<div class="slide bg-warm">
<div class="content-slide">
<h2>🙏 感恩父母</h2>
<p style="margin-top: 20px;">生日这一天,我们要特别感谢...</p>
<div class="quote-box" style="margin-top: 25px;">
<p>给予我们生命的<strong>父母</strong></p>
<p>陪伴我们成长的<strong>家人</strong></p>
<p>教育我们成才的<strong>老师</strong></p>
<p>一起欢笑的<strong>同学</strong></p>
</div>
<p style="margin-top: 25px; text-align: center; font-size: 20px; color: #6B2C3E;">
感恩有你们 ❤️
</p>
</div>
</div>
</body>
</html>

View File

@ -1,177 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
width: 960px;
height: 540px;
margin: 0;
padding: 0;
overflow: hidden;
}
.slide {
width: 960px;
height: 540px;
position: relative;
font-family: 'Microsoft YaHei', 'Segoe UI', sans-serif;
overflow: hidden;
}
.bg-primary { background: #6B2C3E; }
.bg-warm { background: #F5F1E8; }
.bg-celebration { background: #E8B4B8; }
.title-main {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
width: 90%;
}
.title-main h1 {
font-size: 48px;
color: #F5F1E8;
margin-bottom: 20px;
font-weight: 700;
letter-spacing: 2px;
}
.title-main .subtitle {
font-size: 24px;
color: #E8B4B8;
font-weight: 300;
}
.title-main .class-info {
font-size: 20px;
color: #B8974F;
margin-top: 15px;
font-weight: 400;
}
.content-slide {
padding: 50px 70px 60px 70px;
}
.content-slide h2 {
font-size: 32px;
color: #6B2C3E;
margin-bottom: 25px;
font-weight: 700;
}
.content-slide p {
font-size: 20px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 15px;
}
.content-slide ul {
margin-left: 40px;
margin-top: 20px;
}
.content-slide li {
font-size: 18px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 8px;
}
.quote-box {
background: white;
padding: 25px 30px;
margin: 25px 0;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.quote-box p {
font-size: 22px;
color: #6B2C3E;
font-style: italic;
line-height: 1.6;
}
.number-highlight {
display: inline-block;
background: #B8974F;
color: white;
padding: 5px 15px;
border-radius: 20px;
font-weight: bold;
font-size: 24px;
}
.decoration-top {
position: absolute;
top: 0;
right: 0;
width: 200px;
height: 200px;
background: #B8974F40;
opacity: 0.3;
border-radius: 50%;
}
.decoration-bottom {
position: absolute;
bottom: 0;
left: 0;
width: 150px;
height: 150px;
background: #E8B4B840;
opacity: 0.3;
border-radius: 50%;
}
.v-center {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 100%;
padding: 0 60px;
}
.section-title {
background: #6B2C3E;
display: flex;
align-items: center;
justify-content: center;
}
.section-title h2 {
font-size: 48px;
color: #F5F1E8;
text-align: center;
font-weight: 700;
padding: 0;
}
</style>
</head>
<body>
<div class="slide bg-primary">
<div class="v-center">
<h2 style="font-size: 42px; color: #F5F1E8; text-align: center; margin-bottom: 40px;">
🎊 生日快乐 🎊
</h2>
<p style="font-size: 26px; color: #E8B4B8; text-align: center; line-height: 2;">
让我们一起<strong style="color: #B8974F;"></strong>他们<br>
<strong style="font-size: 32px; color: #B8974F;">生日快乐!</strong>
</p>
<p style="text-align: center; margin-top: 40px; font-size: 22px; color: #F5F1E8;">
Happy Birthday! 🎂✨
</p>
</div>
</div>
</body>
</html>

View File

@ -1,176 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
width: 960px;
height: 540px;
margin: 0;
padding: 0;
overflow: hidden;
}
.slide {
width: 960px;
height: 540px;
position: relative;
font-family: 'Microsoft YaHei', 'Segoe UI', sans-serif;
overflow: hidden;
}
.bg-primary { background: #6B2C3E; }
.bg-warm { background: #F5F1E8; }
.bg-celebration { background: #E8B4B8; }
.title-main {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
width: 90%;
}
.title-main h1 {
font-size: 48px;
color: #F5F1E8;
margin-bottom: 20px;
font-weight: 700;
letter-spacing: 2px;
}
.title-main .subtitle {
font-size: 24px;
color: #E8B4B8;
font-weight: 300;
}
.title-main .class-info {
font-size: 20px;
color: #B8974F;
margin-top: 15px;
font-weight: 400;
}
.content-slide {
padding: 50px 70px 60px 70px;
}
.content-slide h2 {
font-size: 32px;
color: #6B2C3E;
margin-bottom: 25px;
font-weight: 700;
}
.content-slide p {
font-size: 20px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 15px;
}
.content-slide ul {
margin-left: 40px;
margin-top: 20px;
}
.content-slide li {
font-size: 18px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 8px;
}
.quote-box {
background: white;
padding: 25px 30px;
margin: 25px 0;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.quote-box p {
font-size: 22px;
color: #6B2C3E;
font-style: italic;
line-height: 1.6;
}
.number-highlight {
display: inline-block;
background: #B8974F;
color: white;
padding: 5px 15px;
border-radius: 20px;
font-weight: bold;
font-size: 24px;
}
.decoration-top {
position: absolute;
top: 0;
right: 0;
width: 200px;
height: 200px;
background: #B8974F40;
opacity: 0.3;
border-radius: 50%;
}
.decoration-bottom {
position: absolute;
bottom: 0;
left: 0;
width: 150px;
height: 150px;
background: #E8B4B840;
opacity: 0.3;
border-radius: 50%;
}
.v-center {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 100%;
padding: 0 60px;
}
.section-title {
background: #6B2C3E;
display: flex;
align-items: center;
justify-content: center;
}
.section-title h2 {
font-size: 48px;
color: #F5F1E8;
text-align: center;
font-weight: 700;
padding: 0;
}
</style>
</head>
<body>
<div class="slide bg-celebration">
<div class="content-slide">
<h2>📷 全班合影时刻</h2>
<p style="font-size: 24px; text-align: center; margin-top: 80px; line-height: 2;">
来,七年三班<br>
让我们一起留下这个<br>
<strong style="color: #6B2C3E; font-size: 28px;">难忘的瞬间!</strong>
</p>
<p style="text-align: center; margin-top: 40px; font-size: 20px;">
📸 咔嚓! 📸
</p>
</div>
</div>
</body>
</html>

View File

@ -1,175 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
width: 960px;
height: 540px;
margin: 0;
padding: 0;
overflow: hidden;
}
.slide {
width: 960px;
height: 540px;
position: relative;
font-family: 'Microsoft YaHei', 'Segoe UI', sans-serif;
overflow: hidden;
}
.bg-primary { background: #6B2C3E; }
.bg-warm { background: #F5F1E8; }
.bg-celebration { background: #E8B4B8; }
.title-main {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
width: 90%;
}
.title-main h1 {
font-size: 48px;
color: #F5F1E8;
margin-bottom: 20px;
font-weight: 700;
letter-spacing: 2px;
}
.title-main .subtitle {
font-size: 24px;
color: #E8B4B8;
font-weight: 300;
}
.title-main .class-info {
font-size: 20px;
color: #B8974F;
margin-top: 15px;
font-weight: 400;
}
.content-slide {
padding: 50px 70px 60px 70px;
}
.content-slide h2 {
font-size: 32px;
color: #6B2C3E;
margin-bottom: 25px;
font-weight: 700;
}
.content-slide p {
font-size: 20px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 15px;
}
.content-slide ul {
margin-left: 40px;
margin-top: 20px;
}
.content-slide li {
font-size: 18px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 8px;
}
.quote-box {
background: white;
padding: 25px 30px;
margin: 25px 0;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.quote-box p {
font-size: 22px;
color: #6B2C3E;
font-style: italic;
line-height: 1.6;
}
.number-highlight {
display: inline-block;
background: #B8974F;
color: white;
padding: 5px 15px;
border-radius: 20px;
font-weight: bold;
font-size: 24px;
}
.decoration-top {
position: absolute;
top: 0;
right: 0;
width: 200px;
height: 200px;
background: #B8974F40;
opacity: 0.3;
border-radius: 50%;
}
.decoration-bottom {
position: absolute;
bottom: 0;
left: 0;
width: 150px;
height: 150px;
background: #E8B4B840;
opacity: 0.3;
border-radius: 50%;
}
.v-center {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 100%;
padding: 0 60px;
}
.section-title {
background: #6B2C3E;
display: flex;
align-items: center;
justify-content: center;
}
.section-title h2 {
font-size: 48px;
color: #F5F1E8;
text-align: center;
font-weight: 700;
padding: 0;
}
</style>
</head>
<body>
<div class="slide bg-warm">
<div class="content-slide">
<h2>🌟 未来的路</h2>
<div class="quote-box">
<p>今天,我们庆祝过去的成长</p>
<p>明天,我们期待新的精彩</p>
<p>愿每一个生日都是新的起点</p>
<p>愿七年三班的每一个人</p>
<p><strong>都能成为更好的自己!</strong></p>
</div>
</div>
</div>
</body>
</html>

View File

@ -1,172 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
width: 960px;
height: 540px;
margin: 0;
padding: 0;
overflow: hidden;
}
.slide {
width: 960px;
height: 540px;
position: relative;
font-family: 'Microsoft YaHei', 'Segoe UI', sans-serif;
overflow: hidden;
}
.bg-primary { background: #6B2C3E; }
.bg-warm { background: #F5F1E8; }
.bg-celebration { background: #E8B4B8; }
.title-main {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
width: 90%;
}
.title-main h1 {
font-size: 48px;
color: #F5F1E8;
margin-bottom: 20px;
font-weight: 700;
letter-spacing: 2px;
}
.title-main .subtitle {
font-size: 24px;
color: #E8B4B8;
font-weight: 300;
}
.title-main .class-info {
font-size: 20px;
color: #B8974F;
margin-top: 15px;
font-weight: 400;
}
.content-slide {
padding: 50px 70px 60px 70px;
}
.content-slide h2 {
font-size: 32px;
color: #6B2C3E;
margin-bottom: 25px;
font-weight: 700;
}
.content-slide p {
font-size: 20px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 15px;
}
.content-slide ul {
margin-left: 40px;
margin-top: 20px;
}
.content-slide li {
font-size: 18px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 8px;
}
.quote-box {
background: white;
padding: 25px 30px;
margin: 25px 0;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.quote-box p {
font-size: 22px;
color: #6B2C3E;
font-style: italic;
line-height: 1.6;
}
.number-highlight {
display: inline-block;
background: #B8974F;
color: white;
padding: 5px 15px;
border-radius: 20px;
font-weight: bold;
font-size: 24px;
}
.decoration-top {
position: absolute;
top: 0;
right: 0;
width: 200px;
height: 200px;
background: #B8974F40;
opacity: 0.3;
border-radius: 50%;
}
.decoration-bottom {
position: absolute;
bottom: 0;
left: 0;
width: 150px;
height: 150px;
background: #E8B4B840;
opacity: 0.3;
border-radius: 50%;
}
.v-center {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 100%;
padding: 0 60px;
}
.section-title {
background: #6B2C3E;
display: flex;
align-items: center;
justify-content: center;
}
.section-title h2 {
font-size: 48px;
color: #F5F1E8;
text-align: center;
font-weight: 700;
padding: 0;
}
</style>
</head>
<body>
<div class="slide bg-primary">
<div class="title-main">
<h1 style="font-size: 52px;">谢谢大家!</h1>
<p class="subtitle" style="margin-top: 30px; font-size: 28px;">Thank You Everyone</p>
<p class="class-info" style="margin-top: 25px; font-size: 22px;">
七年三班 | 永远是一家人 ❤️
</p>
</div>
</div>
</body>
</html>

View File

@ -1,174 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
width: 960px;
height: 540px;
margin: 0;
padding: 0;
overflow: hidden;
}
.slide {
width: 960px;
height: 540px;
position: relative;
font-family: 'Microsoft YaHei', 'Segoe UI', sans-serif;
overflow: hidden;
}
.bg-primary { background: #6B2C3E; }
.bg-warm { background: #F5F1E8; }
.bg-celebration { background: #E8B4B8; }
.title-main {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
width: 90%;
}
.title-main h1 {
font-size: 48px;
color: #F5F1E8;
margin-bottom: 20px;
font-weight: 700;
letter-spacing: 2px;
}
.title-main .subtitle {
font-size: 24px;
color: #E8B4B8;
font-weight: 300;
}
.title-main .class-info {
font-size: 20px;
color: #B8974F;
margin-top: 15px;
font-weight: 400;
}
.content-slide {
padding: 50px 70px 60px 70px;
}
.content-slide h2 {
font-size: 32px;
color: #6B2C3E;
margin-bottom: 25px;
font-weight: 700;
}
.content-slide p {
font-size: 20px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 15px;
}
.content-slide ul {
margin-left: 40px;
margin-top: 20px;
}
.content-slide li {
font-size: 18px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 8px;
}
.quote-box {
background: white;
padding: 25px 30px;
margin: 25px 0;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.quote-box p {
font-size: 22px;
color: #6B2C3E;
font-style: italic;
line-height: 1.6;
}
.number-highlight {
display: inline-block;
background: #B8974F;
color: white;
padding: 5px 15px;
border-radius: 20px;
font-weight: bold;
font-size: 24px;
}
.decoration-top {
position: absolute;
top: 0;
right: 0;
width: 200px;
height: 200px;
background: #B8974F40;
opacity: 0.3;
border-radius: 50%;
}
.decoration-bottom {
position: absolute;
bottom: 0;
left: 0;
width: 150px;
height: 150px;
background: #E8B4B840;
opacity: 0.3;
border-radius: 50%;
}
.v-center {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 100%;
padding: 0 60px;
}
.section-title {
background: #6B2C3E;
display: flex;
align-items: center;
justify-content: center;
}
.section-title h2 {
font-size: 48px;
color: #F5F1E8;
text-align: center;
font-weight: 700;
padding: 0;
}
</style>
</head>
<body>
<div class="slide bg-warm">
<div class="content-slide">
<h2>✨ 当这一刻来临</h2>
<div class="quote-box">
<p>当教室的灯光暖起来</p>
<p>当桌上的气球飘起来</p>
<p>当我们的笑容扬起来</p>
<p>这一刻,属于你们 ❤️</p>
</div>
</div>
</div>
</body>
</html>

View File

@ -1,177 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
width: 960px;
height: 540px;
margin: 0;
padding: 0;
overflow: hidden;
}
.slide {
width: 960px;
height: 540px;
position: relative;
font-family: 'Microsoft YaHei', 'Segoe UI', sans-serif;
overflow: hidden;
}
.bg-primary { background: #6B2C3E; }
.bg-warm { background: #F5F1E8; }
.bg-celebration { background: #E8B4B8; }
.title-main {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
width: 90%;
}
.title-main h1 {
font-size: 48px;
color: #F5F1E8;
margin-bottom: 20px;
font-weight: 700;
letter-spacing: 2px;
}
.title-main .subtitle {
font-size: 24px;
color: #E8B4B8;
font-weight: 300;
}
.title-main .class-info {
font-size: 20px;
color: #B8974F;
margin-top: 15px;
font-weight: 400;
}
.content-slide {
padding: 50px 70px 60px 70px;
}
.content-slide h2 {
font-size: 32px;
color: #6B2C3E;
margin-bottom: 25px;
font-weight: 700;
}
.content-slide p {
font-size: 20px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 15px;
}
.content-slide ul {
margin-left: 40px;
margin-top: 20px;
}
.content-slide li {
font-size: 18px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 8px;
}
.quote-box {
background: white;
padding: 25px 30px;
margin: 25px 0;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.quote-box p {
font-size: 22px;
color: #6B2C3E;
font-style: italic;
line-height: 1.6;
}
.number-highlight {
display: inline-block;
background: #B8974F;
color: white;
padding: 5px 15px;
border-radius: 20px;
font-weight: bold;
font-size: 24px;
}
.decoration-top {
position: absolute;
top: 0;
right: 0;
width: 200px;
height: 200px;
background: #B8974F40;
opacity: 0.3;
border-radius: 50%;
}
.decoration-bottom {
position: absolute;
bottom: 0;
left: 0;
width: 150px;
height: 150px;
background: #E8B4B840;
opacity: 0.3;
border-radius: 50%;
}
.v-center {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 100%;
padding: 0 60px;
}
.section-title {
background: #6B2C3E;
display: flex;
align-items: center;
justify-content: center;
}
.section-title h2 {
font-size: 48px;
color: #F5F1E8;
text-align: center;
font-weight: 700;
padding: 0;
}
</style>
</head>
<body>
<div class="slide bg-warm">
<div class="content-slide">
<h2>📅 373天的故事</h2>
<p><span class="number-highlight">373天</span></p>
<p style="margin-top: 20px;">不是一串冰冷的数字</p>
<p>是我们一起攒下的<strong>独家记忆</strong></p>
<ul style="margin-top: 25px;">
<li>早读时的朗朗书声 📖</li>
<li>课间时的欢声笑语 😄</li>
<li>运动会上的团结拼搏 🏃</li>
<li>考试后的互相鼓励 💪</li>
</ul>
</div>
</div>
</body>
</html>

View File

@ -1,166 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
width: 960px;
height: 540px;
margin: 0;
padding: 0;
overflow: hidden;
}
.slide {
width: 960px;
height: 540px;
position: relative;
font-family: 'Microsoft YaHei', 'Segoe UI', sans-serif;
overflow: hidden;
}
.bg-primary { background: #6B2C3E; }
.bg-warm { background: #F5F1E8; }
.bg-celebration { background: #E8B4B8; }
.title-main {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
width: 90%;
}
.title-main h1 {
font-size: 48px;
color: #F5F1E8;
margin-bottom: 20px;
font-weight: 700;
letter-spacing: 2px;
}
.title-main .subtitle {
font-size: 24px;
color: #E8B4B8;
font-weight: 300;
}
.title-main .class-info {
font-size: 20px;
color: #B8974F;
margin-top: 15px;
font-weight: 400;
}
.content-slide {
padding: 50px 70px 60px 70px;
}
.content-slide h2 {
font-size: 32px;
color: #6B2C3E;
margin-bottom: 25px;
font-weight: 700;
}
.content-slide p {
font-size: 20px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 15px;
}
.content-slide ul {
margin-left: 40px;
margin-top: 20px;
}
.content-slide li {
font-size: 18px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 8px;
}
.quote-box {
background: white;
padding: 25px 30px;
margin: 25px 0;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.quote-box p {
font-size: 22px;
color: #6B2C3E;
font-style: italic;
line-height: 1.6;
}
.number-highlight {
display: inline-block;
background: #B8974F;
color: white;
padding: 5px 15px;
border-radius: 20px;
font-weight: bold;
font-size: 24px;
}
.decoration-top {
position: absolute;
top: 0;
right: 0;
width: 200px;
height: 200px;
background: #B8974F40;
opacity: 0.3;
border-radius: 50%;
}
.decoration-bottom {
position: absolute;
bottom: 0;
left: 0;
width: 150px;
height: 150px;
background: #E8B4B840;
opacity: 0.3;
border-radius: 50%;
}
.v-center {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 100%;
padding: 0 60px;
}
.section-title {
background: #6B2C3E;
display: flex;
align-items: center;
justify-content: center;
}
.section-title h2 {
font-size: 48px;
color: #F5F1E8;
text-align: center;
font-weight: 700;
padding: 0;
}
</style>
</head>
<body>
<div class="slide section-title">
<h2>🌟 今天的主角 🌟</h2>
</div>
</body>
</html>

View File

@ -1,176 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
width: 960px;
height: 540px;
margin: 0;
padding: 0;
overflow: hidden;
}
.slide {
width: 960px;
height: 540px;
position: relative;
font-family: 'Microsoft YaHei', 'Segoe UI', sans-serif;
overflow: hidden;
}
.bg-primary { background: #6B2C3E; }
.bg-warm { background: #F5F1E8; }
.bg-celebration { background: #E8B4B8; }
.title-main {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
width: 90%;
}
.title-main h1 {
font-size: 48px;
color: #F5F1E8;
margin-bottom: 20px;
font-weight: 700;
letter-spacing: 2px;
}
.title-main .subtitle {
font-size: 24px;
color: #E8B4B8;
font-weight: 300;
}
.title-main .class-info {
font-size: 20px;
color: #B8974F;
margin-top: 15px;
font-weight: 400;
}
.content-slide {
padding: 50px 70px 60px 70px;
}
.content-slide h2 {
font-size: 32px;
color: #6B2C3E;
margin-bottom: 25px;
font-weight: 700;
}
.content-slide p {
font-size: 20px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 15px;
}
.content-slide ul {
margin-left: 40px;
margin-top: 20px;
}
.content-slide li {
font-size: 18px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 8px;
}
.quote-box {
background: white;
padding: 25px 30px;
margin: 25px 0;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.quote-box p {
font-size: 22px;
color: #6B2C3E;
font-style: italic;
line-height: 1.6;
}
.number-highlight {
display: inline-block;
background: #B8974F;
color: white;
padding: 5px 15px;
border-radius: 20px;
font-weight: bold;
font-size: 24px;
}
.decoration-top {
position: absolute;
top: 0;
right: 0;
width: 200px;
height: 200px;
background: #B8974F40;
opacity: 0.3;
border-radius: 50%;
}
.decoration-bottom {
position: absolute;
bottom: 0;
left: 0;
width: 150px;
height: 150px;
background: #E8B4B840;
opacity: 0.3;
border-radius: 50%;
}
.v-center {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 100%;
padding: 0 60px;
}
.section-title {
background: #6B2C3E;
display: flex;
align-items: center;
justify-content: center;
}
.section-title h2 {
font-size: 48px;
color: #F5F1E8;
text-align: center;
font-weight: 700;
padding: 0;
}
</style>
</head>
<body>
<div class="slide bg-celebration">
<div class="content-slide">
<h2>🎉 欢迎我们的寿星</h2>
<p style="font-size: 24px; text-align: center; margin-top: 60px; line-height: 2;">
在这个特别的日子里<br>
让我们用最热烈的掌声<br>
欢迎今天的<strong>寿星们</strong>
</p>
<p style="text-align: center; margin-top: 40px; font-size: 28px; color: #6B2C3E;">
👏 掌声欢迎!👏
</p>
</div>
</div>
</body>
</html>

View File

@ -1,175 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
width: 960px;
height: 540px;
margin: 0;
padding: 0;
overflow: hidden;
}
.slide {
width: 960px;
height: 540px;
position: relative;
font-family: 'Microsoft YaHei', 'Segoe UI', sans-serif;
overflow: hidden;
}
.bg-primary { background: #6B2C3E; }
.bg-warm { background: #F5F1E8; }
.bg-celebration { background: #E8B4B8; }
.title-main {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
width: 90%;
}
.title-main h1 {
font-size: 48px;
color: #F5F1E8;
margin-bottom: 20px;
font-weight: 700;
letter-spacing: 2px;
}
.title-main .subtitle {
font-size: 24px;
color: #E8B4B8;
font-weight: 300;
}
.title-main .class-info {
font-size: 20px;
color: #B8974F;
margin-top: 15px;
font-weight: 400;
}
.content-slide {
padding: 50px 70px 60px 70px;
}
.content-slide h2 {
font-size: 32px;
color: #6B2C3E;
margin-bottom: 25px;
font-weight: 700;
}
.content-slide p {
font-size: 20px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 15px;
}
.content-slide ul {
margin-left: 40px;
margin-top: 20px;
}
.content-slide li {
font-size: 18px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 8px;
}
.quote-box {
background: white;
padding: 25px 30px;
margin: 25px 0;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.quote-box p {
font-size: 22px;
color: #6B2C3E;
font-style: italic;
line-height: 1.6;
}
.number-highlight {
display: inline-block;
background: #B8974F;
color: white;
padding: 5px 15px;
border-radius: 20px;
font-weight: bold;
font-size: 24px;
}
.decoration-top {
position: absolute;
top: 0;
right: 0;
width: 200px;
height: 200px;
background: #B8974F40;
opacity: 0.3;
border-radius: 50%;
}
.decoration-bottom {
position: absolute;
bottom: 0;
left: 0;
width: 150px;
height: 150px;
background: #E8B4B840;
opacity: 0.3;
border-radius: 50%;
}
.v-center {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 100%;
padding: 0 60px;
}
.section-title {
background: #6B2C3E;
display: flex;
align-items: center;
justify-content: center;
}
.section-title h2 {
font-size: 48px;
color: #F5F1E8;
text-align: center;
font-weight: 700;
padding: 0;
}
</style>
</head>
<body>
<div class="slide bg-warm">
<div class="content-slide">
<h2>🎂 生日的意义</h2>
<p>生日,不仅仅是蛋糕和礼物</p>
<div class="quote-box" style="margin-top: 30px;">
<p>✨ 是成长的见证</p>
<p>💝 是爱的传递</p>
<p>🌈 是希望的延续</p>
<p>👨‍👩‍👧‍👦 是感恩的时刻</p>
</div>
</div>
</div>
</body>
</html>

View File

@ -1,175 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
width: 960px;
height: 540px;
margin: 0;
padding: 0;
overflow: hidden;
}
.slide {
width: 960px;
height: 540px;
position: relative;
font-family: 'Microsoft YaHei', 'Segoe UI', sans-serif;
overflow: hidden;
}
.bg-primary { background: #6B2C3E; }
.bg-warm { background: #F5F1E8; }
.bg-celebration { background: #E8B4B8; }
.title-main {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
width: 90%;
}
.title-main h1 {
font-size: 48px;
color: #F5F1E8;
margin-bottom: 20px;
font-weight: 700;
letter-spacing: 2px;
}
.title-main .subtitle {
font-size: 24px;
color: #E8B4B8;
font-weight: 300;
}
.title-main .class-info {
font-size: 20px;
color: #B8974F;
margin-top: 15px;
font-weight: 400;
}
.content-slide {
padding: 50px 70px 60px 70px;
}
.content-slide h2 {
font-size: 32px;
color: #6B2C3E;
margin-bottom: 25px;
font-weight: 700;
}
.content-slide p {
font-size: 20px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 15px;
}
.content-slide ul {
margin-left: 40px;
margin-top: 20px;
}
.content-slide li {
font-size: 18px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 8px;
}
.quote-box {
background: white;
padding: 25px 30px;
margin: 25px 0;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.quote-box p {
font-size: 22px;
color: #6B2C3E;
font-style: italic;
line-height: 1.6;
}
.number-highlight {
display: inline-block;
background: #B8974F;
color: white;
padding: 5px 15px;
border-radius: 20px;
font-weight: bold;
font-size: 24px;
}
.decoration-top {
position: absolute;
top: 0;
right: 0;
width: 200px;
height: 200px;
background: #B8974F40;
opacity: 0.3;
border-radius: 50%;
}
.decoration-bottom {
position: absolute;
bottom: 0;
left: 0;
width: 150px;
height: 150px;
background: #E8B4B840;
opacity: 0.3;
border-radius: 50%;
}
.v-center {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 100%;
padding: 0 60px;
}
.section-title {
background: #6B2C3E;
display: flex;
align-items: center;
justify-content: center;
}
.section-title h2 {
font-size: 48px;
color: #F5F1E8;
text-align: center;
font-weight: 700;
padding: 0;
}
</style>
</head>
<body>
<div class="slide bg-celebration">
<div class="content-slide">
<h2>🎁 惊喜时刻</h2>
<p style="font-size: 24px; margin-top: 40px; text-align: center; line-height: 2;">
但是... 等一下!<br>
还有一个<strong>惊喜中的惊喜</strong>
</p>
<p style="text-align: center; margin-top: 50px; font-size: 22px; color: #6B2C3E;">
🎊 我们没有忘记今天还有两位特别的寿星... 🎊
</p>
</div>
</div>
</body>
</html>

View File

@ -1,176 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
width: 960px;
height: 540px;
margin: 0;
padding: 0;
overflow: hidden;
}
.slide {
width: 960px;
height: 540px;
position: relative;
font-family: 'Microsoft YaHei', 'Segoe UI', sans-serif;
overflow: hidden;
}
.bg-primary { background: #6B2C3E; }
.bg-warm { background: #F5F1E8; }
.bg-celebration { background: #E8B4B8; }
.title-main {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
width: 90%;
}
.title-main h1 {
font-size: 48px;
color: #F5F1E8;
margin-bottom: 20px;
font-weight: 700;
letter-spacing: 2px;
}
.title-main .subtitle {
font-size: 24px;
color: #E8B4B8;
font-weight: 300;
}
.title-main .class-info {
font-size: 20px;
color: #B8974F;
margin-top: 15px;
font-weight: 400;
}
.content-slide {
padding: 50px 70px 60px 70px;
}
.content-slide h2 {
font-size: 32px;
color: #6B2C3E;
margin-bottom: 25px;
font-weight: 700;
}
.content-slide p {
font-size: 20px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 15px;
}
.content-slide ul {
margin-left: 40px;
margin-top: 20px;
}
.content-slide li {
font-size: 18px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 8px;
}
.quote-box {
background: white;
padding: 25px 30px;
margin: 25px 0;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.quote-box p {
font-size: 22px;
color: #6B2C3E;
font-style: italic;
line-height: 1.6;
}
.number-highlight {
display: inline-block;
background: #B8974F;
color: white;
padding: 5px 15px;
border-radius: 20px;
font-weight: bold;
font-size: 24px;
}
.decoration-top {
position: absolute;
top: 0;
right: 0;
width: 200px;
height: 200px;
background: #B8974F40;
opacity: 0.3;
border-radius: 50%;
}
.decoration-bottom {
position: absolute;
bottom: 0;
left: 0;
width: 150px;
height: 150px;
background: #E8B4B840;
opacity: 0.3;
border-radius: 50%;
}
.v-center {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 100%;
padding: 0 60px;
}
.section-title {
background: #6B2C3E;
display: flex;
align-items: center;
justify-content: center;
}
.section-title h2 {
font-size: 48px;
color: #F5F1E8;
text-align: center;
font-weight: 700;
padding: 0;
}
</style>
</head>
<body>
<div class="slide bg-warm">
<div class="content-slide">
<h2>💝 特别的惊喜</h2>
<p style="font-size: 22px; margin-top: 30px;">
为班会付出那么多的<strong>主持人们</strong><br>
今天也是你们的生日!
</p>
<div class="quote-box" style="margin-top: 30px;">
<p>被人放在心上的感觉</p>
<p>真的很温暖 ❤️</p>
</div>
</div>
</div>
</body>
</html>

View File

@ -1,176 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
width: 960px;
height: 540px;
margin: 0;
padding: 0;
overflow: hidden;
}
.slide {
width: 960px;
height: 540px;
position: relative;
font-family: 'Microsoft YaHei', 'Segoe UI', sans-serif;
overflow: hidden;
}
.bg-primary { background: #6B2C3E; }
.bg-warm { background: #F5F1E8; }
.bg-celebration { background: #E8B4B8; }
.title-main {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
width: 90%;
}
.title-main h1 {
font-size: 48px;
color: #F5F1E8;
margin-bottom: 20px;
font-weight: 700;
letter-spacing: 2px;
}
.title-main .subtitle {
font-size: 24px;
color: #E8B4B8;
font-weight: 300;
}
.title-main .class-info {
font-size: 20px;
color: #B8974F;
margin-top: 15px;
font-weight: 400;
}
.content-slide {
padding: 50px 70px 60px 70px;
}
.content-slide h2 {
font-size: 32px;
color: #6B2C3E;
margin-bottom: 25px;
font-weight: 700;
}
.content-slide p {
font-size: 20px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 15px;
}
.content-slide ul {
margin-left: 40px;
margin-top: 20px;
}
.content-slide li {
font-size: 18px;
line-height: 1.8;
color: #2C1810;
margin-bottom: 8px;
}
.quote-box {
background: white;
padding: 25px 30px;
margin: 25px 0;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.quote-box p {
font-size: 22px;
color: #6B2C3E;
font-style: italic;
line-height: 1.6;
}
.number-highlight {
display: inline-block;
background: #B8974F;
color: white;
padding: 5px 15px;
border-radius: 20px;
font-weight: bold;
font-size: 24px;
}
.decoration-top {
position: absolute;
top: 0;
right: 0;
width: 200px;
height: 200px;
background: #B8974F40;
opacity: 0.3;
border-radius: 50%;
}
.decoration-bottom {
position: absolute;
bottom: 0;
left: 0;
width: 150px;
height: 150px;
background: #E8B4B840;
opacity: 0.3;
border-radius: 50%;
}
.v-center {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 100%;
padding: 0 60px;
}
.section-title {
background: #6B2C3E;
display: flex;
align-items: center;
justify-content: center;
}
.section-title h2 {
font-size: 48px;
color: #F5F1E8;
text-align: center;
font-weight: 700;
padding: 0;
}
</style>
</head>
<body>
<div class="slide bg-warm">
<div class="content-slide">
<h2>🌱 一起成长的样子</h2>
<p style="margin-top: 25px;">从陌生到熟悉,从青涩到成熟</p>
<p>让我们一起回顾<strong>寿星们</strong>一路走来的精彩瞬间</p>
<ul style="margin-top: 30px;">
<li>军训时的坚持 🎖️</li>
<li>课堂上的认真 ✍️</li>
<li>活动中的积极 🎨</li>
<li>友谊中的真诚 🤝</li>
</ul>
</div>
</div>
</body>
</html>

View File

@ -1,495 +0,0 @@
const pptxgen = require('pptxgenjs');
const path = require('path');
const fs = require('fs');
const html2pptx = require('./.claude/skills/pptx/scripts/html2pptx.js');
// Tingting's signature color palette + celebration touches
const colors = {
primary: '#6B2C3E', // Bordeaux profond
accent: '#B8974F', // Or antique
background: '#F5F1E8', // Crème ivoire
celebration: '#E8B4B8', // Rose doux pour anniversaire
warm: '#D4AF37', // Or chaud pour bougies
text: '#2C1810' // Brun foncé pour lisibilité
};
// CSS shared styles
const sharedStyles = `
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
width: 960px;
height: 540px;
margin: 0;
padding: 0;
overflow: hidden;
}
.slide {
width: 960px;
height: 540px;
position: relative;
font-family: 'Microsoft YaHei', 'Segoe UI', sans-serif;
overflow: hidden;
}
.bg-primary { background: ${colors.primary}; }
.bg-warm { background: ${colors.background}; }
.bg-celebration { background: ${colors.celebration}; }
.title-main {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
width: 90%;
}
.title-main h1 {
font-size: 48px;
color: ${colors.background};
margin-bottom: 20px;
font-weight: 700;
letter-spacing: 2px;
}
.title-main .subtitle {
font-size: 24px;
color: ${colors.celebration};
font-weight: 300;
}
.title-main .class-info {
font-size: 20px;
color: ${colors.accent};
margin-top: 15px;
font-weight: 400;
}
.content-slide {
padding: 50px 70px 60px 70px;
}
.content-slide h2 {
font-size: 32px;
color: ${colors.primary};
margin-bottom: 25px;
font-weight: 700;
}
.content-slide p {
font-size: 20px;
line-height: 1.8;
color: ${colors.text};
margin-bottom: 15px;
}
.content-slide ul {
margin-left: 40px;
margin-top: 20px;
}
.content-slide li {
font-size: 18px;
line-height: 1.8;
color: ${colors.text};
margin-bottom: 8px;
}
.quote-box {
background: white;
padding: 25px 30px;
margin: 25px 0;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.quote-box p {
font-size: 22px;
color: ${colors.primary};
font-style: italic;
line-height: 1.6;
}
.number-highlight {
display: inline-block;
background: ${colors.accent};
color: white;
padding: 5px 15px;
border-radius: 20px;
font-weight: bold;
font-size: 24px;
}
.decoration-top {
position: absolute;
top: 0;
right: 0;
width: 200px;
height: 200px;
background: ${colors.accent}40;
opacity: 0.3;
border-radius: 50%;
}
.decoration-bottom {
position: absolute;
bottom: 0;
left: 0;
width: 150px;
height: 150px;
background: ${colors.celebration}40;
opacity: 0.3;
border-radius: 50%;
}
.v-center {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 100%;
padding: 0 60px;
}
.section-title {
background: ${colors.primary};
display: flex;
align-items: center;
justify-content: center;
}
.section-title h2 {
font-size: 48px;
color: ${colors.background};
text-align: center;
font-weight: 700;
padding: 0;
}
`;
// Slide templates
const slides = [
// Slide 1: Title
`<div class="slide bg-primary">
<div class="title-main">
<h1>🎂 生日主题班会 🎂</h1>
<p class="subtitle">Birthday Celebration Class Meeting</p>
<p class="class-info">七年三班 | Class 7-3</p>
</div>
</div>`,
// Slide 2: Opening
`<div class="slide bg-warm">
<div class="content-slide">
<h2> 当这一刻来临</h2>
<div class="quote-box">
<p>当教室的灯光暖起来</p>
<p>当桌上的气球飘起来</p>
<p>当我们的笑容扬起来</p>
<p>这一刻属于你们 </p>
</div>
</div>
</div>`,
// Slide 3: 373 Days
`<div class="slide bg-warm">
<div class="content-slide">
<h2>📅 373天的故事</h2>
<p><span class="number-highlight">373</span></p>
<p style="margin-top: 20px;">不是一串冰冷的数字</p>
<p>是我们一起攒下的<strong>独家记忆</strong></p>
<ul style="margin-top: 25px;">
<li>早读时的朗朗书声 📖</li>
<li>课间时的欢声笑语 😄</li>
<li>运动会上的团结拼搏 🏃</li>
<li>考试后的互相鼓励 💪</li>
</ul>
</div>
</div>`,
// Slide 4: Section title
`<div class="slide section-title">
<h2>🌟 今天的主角 🌟</h2>
</div>`,
// Slide 5: Welcome Birthday Stars
`<div class="slide bg-celebration">
<div class="content-slide">
<h2>🎉 欢迎我们的寿星</h2>
<p style="font-size: 24px; text-align: center; margin-top: 60px; line-height: 2;">
在这个特别的日子里<br>
让我们用最热烈的掌声<br>
欢迎今天的<strong>寿星们</strong>
</p>
<p style="text-align: center; margin-top: 40px; font-size: 28px; color: ${colors.primary};">
👏 掌声欢迎👏
</p>
</div>
</div>`,
// Slide 6: Meaning of Birthdays
`<div class="slide bg-warm">
<div class="content-slide">
<h2>🎂 生日的意义</h2>
<p>生日不仅仅是蛋糕和礼物</p>
<div class="quote-box" style="margin-top: 30px;">
<p> 是成长的见证</p>
<p>💝 是爱的传递</p>
<p>🌈 是希望的延续</p>
<p>👨👩👧👦 是感恩的时刻</p>
</div>
</div>
</div>`,
// Slide 7: Surprise (TYPO FIXED)
`<div class="slide bg-celebration">
<div class="content-slide">
<h2>🎁 惊喜时刻</h2>
<p style="font-size: 24px; margin-top: 40px; text-align: center; line-height: 2;">
但是... 等一下<br>
还有一个<strong>惊喜中的惊喜</strong>
</p>
<p style="text-align: center; margin-top: 50px; font-size: 22px; color: ${colors.primary};">
🎊 我们没有忘记今天还有两位特别的寿星... 🎊
</p>
</div>
</div>`,
// Slide 8: Hosts' Birthday
`<div class="slide bg-warm">
<div class="content-slide">
<h2>💝 特别的惊喜</h2>
<p style="font-size: 22px; margin-top: 30px;">
为班会付出那么多的<strong>主持人们</strong><br>
今天也是你们的生日
</p>
<div class="quote-box" style="margin-top: 30px;">
<p>被人放在心上的感觉</p>
<p>真的很温暖 </p>
</div>
</div>
</div>`,
// Slide 9: Growing Together (OPTIMIZED)
`<div class="slide bg-warm">
<div class="content-slide">
<h2>🌱 一起成长的样子</h2>
<p style="margin-top: 25px;">从陌生到熟悉从青涩到成熟</p>
<p>让我们一起回顾<strong>寿星们</strong></p>
<ul style="margin-top: 30px;">
<li>军训时的坚持 🎖</li>
<li>课堂上的认真 </li>
<li>活动中的积极 🎨</li>
<li>友谊中的真诚 🤝</li>
</ul>
</div>
</div>`,
// Slide 10: Making a Wish
`<div class="slide bg-primary">
<div class="v-center">
<h2 style="font-size: 42px; color: ${colors.background}; text-align: center; margin-bottom: 40px;">
🕯 许愿时刻 🕯
</h2>
<p style="font-size: 24px; color: ${colors.celebration}; text-align: center; line-height: 2;">
闭上眼睛<br>
在心里许下你最美好的愿望<br>
<span style="color: ${colors.accent}; font-size: 20px;">(我们给你们5秒钟的时间)</span>
</p>
</div>
</div>`,
// Slide 11: Blow Candles
`<div class="slide bg-celebration">
<div class="content-slide">
<h2>🎂 吹蜡烛</h2>
<p style="font-size: 28px; text-align: center; margin-top: 80px; color: ${colors.primary};">
<br>
<strong style="font-size: 36px;">🎉</strong>
</p>
<p style="text-align: center; margin-top: 40px; font-size: 20px;">
愿你们的愿望都能实现
</p>
</div>
</div>`,
// Slide 12: Gifts
`<div class="slide bg-warm">
<div class="content-slide">
<h2>🎁 拆礼物环节</h2>
<p style="margin-top: 25px;">每一份礼物都承载着<strong>心意</strong></p>
<div class="quote-box" style="margin-top: 30px;">
<p><strong>心意盒里有什么</strong></p>
<p>📝 手写的祝福卡片</p>
<p>📷 珍贵的照片回忆</p>
<p>🧸 可爱的小玩偶</p>
<p> 满满的班级温暖</p>
</div>
</div>
</div>`,
// Slide 13: Interactive Blessings
`<div class="slide bg-celebration">
<div class="content-slide">
<h2>💬 同学祝福时刻</h2>
<p style="margin-top: 30px; font-size: 22px; text-align: center;">
有哪位同学想要送上<br>
你的祝福或者才艺表演
</p>
<p style="text-align: center; margin-top: 50px; font-size: 20px; color: ${colors.primary};">
🎤 舞台交给你们🎤
</p>
</div>
</div>`,
// Slide 14: Gratitude to Parents
`<div class="slide bg-warm">
<div class="content-slide">
<h2>🙏 感恩父母</h2>
<p style="margin-top: 20px;">生日这一天我们要特别感谢...</p>
<div class="quote-box" style="margin-top: 25px;">
<p>给予我们生命的<strong>父母</strong></p>
<p>陪伴我们成长的<strong>家人</strong></p>
<p>教育我们成才的<strong>老师</strong></p>
<p>一起欢笑的<strong>同学</strong></p>
</div>
<p style="margin-top: 25px; text-align: center; font-size: 20px; color: ${colors.primary};">
感恩有你们
</p>
</div>
</div>`,
// Slide 15: Birthday Wishes (TYPO FIXED: 住→祝)
`<div class="slide bg-primary">
<div class="v-center">
<h2 style="font-size: 42px; color: ${colors.background}; text-align: center; margin-bottom: 40px;">
🎊 生日快乐 🎊
</h2>
<p style="font-size: 26px; color: ${colors.celebration}; text-align: center; line-height: 2;">
让我们一起<strong style="color: ${colors.accent};"></strong><br>
<strong style="font-size: 32px; color: ${colors.accent};">生日快乐</strong>
</p>
<p style="text-align: center; margin-top: 40px; font-size: 22px; color: ${colors.background};">
Happy Birthday! 🎂
</p>
</div>
</div>`,
// Slide 16: Class Photo
`<div class="slide bg-celebration">
<div class="content-slide">
<h2>📷 全班合影时刻</h2>
<p style="font-size: 24px; text-align: center; margin-top: 80px; line-height: 2;">
七年三班<br>
让我们一起留下这个<br>
<strong style="color: ${colors.primary}; font-size: 28px;">难忘的瞬间</strong>
</p>
<p style="text-align: center; margin-top: 40px; font-size: 20px;">
📸 咔嚓 📸
</p>
</div>
</div>`,
// Slide 17: Looking Forward
`<div class="slide bg-warm">
<div class="content-slide">
<h2>🌟 未来的路</h2>
<div class="quote-box">
<p>今天我们庆祝过去的成长</p>
<p>明天我们期待新的精彩</p>
<p>愿每一个生日都是新的起点</p>
<p>愿七年三班的每一个人</p>
<p><strong>都能成为更好的自己</strong></p>
</div>
</div>
</div>`,
// Slide 18: Thank You
`<div class="slide bg-primary">
<div class="title-main">
<h1 style="font-size: 52px;">谢谢大家</h1>
<p class="subtitle" style="margin-top: 30px; font-size: 28px;">Thank You Everyone</p>
<p class="class-info" style="margin-top: 25px; font-size: 22px;">
七年三班 | 永远是一家人
</p>
</div>
</div>`
];
// Create HTML files for each slide
function createHTMLFiles() {
const slideDir = path.join(__dirname, 'birthday_slides');
if (!fs.existsSync(slideDir)) {
fs.mkdirSync(slideDir);
}
slides.forEach((slideContent, index) => {
const htmlContent = `<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
${sharedStyles}
</style>
</head>
<body>
${slideContent}
</body>
</html>`;
const filename = path.join(slideDir, `slide_${index + 1}.html`);
fs.writeFileSync(filename, htmlContent, 'utf-8');
console.log(`✓ Created: slide_${index + 1}.html`);
});
return slideDir;
}
async function createPresentation() {
console.log('🚀 Generating Birthday Class Meeting PowerPoint...\n');
// Create HTML files
const slideDir = createHTMLFiles();
console.log('\n📄 HTML files created successfully\n');
const pptx = new pptxgen();
pptx.layout = 'LAYOUT_16x9';
pptx.author = 'Tingting - Class 7-3';
pptx.title = '七年三班生日主题班会';
try {
// Process each slide
for (let i = 0; i < slides.length; i++) {
const slideFile = path.join(slideDir, `slide_${i + 1}.html`);
console.log(`📊 Processing Slide ${i + 1}/${slides.length}...`);
await html2pptx(slideFile, pptx);
}
// Save presentation
await pptx.writeFile({ fileName: 'Birthday_ClassMeeting_Class73.pptx' });
console.log('\n✅ PowerPoint generated successfully!');
console.log('📁 File: Birthday_ClassMeeting_Class73.pptx');
console.log('🎨 Style: Tingting Signature Elegant + Celebration');
console.log(`📊 Total slides: ${slides.length}`);
console.log('\n✏ Corrections applied:');
console.log(' • Slide 7: Fixed surprise moment text');
console.log(' • Slide 9: Optimized content (removed repetition)');
console.log(' • Slide 15: Fixed typo 住→祝');
console.log('\n New slides added:');
console.log(' • Slide 13: Interactive classmate blessings');
console.log(' • Slide 14: Gratitude to parents');
console.log(' • Slide 16: Class photo moment');
console.log(' • Slide 17: Looking forward');
console.log('\n💡 All elements are 100% editable in PowerPoint!');
} catch (error) {
console.error('\n❌ Error:', error.message);
if (error.stack) {
console.error('\nStack:', error.stack);
}
}
}
createPresentation();

View File

@ -1,525 +0,0 @@
@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion
:: ═══════════════════════════════════════════════════════════════════
:: NETWORK DIAGNOSTIC ULTIMATE v1.0
:: Analyse complète réseau : Interfaces, VPN, DNS, Routes, Devices, Latency
:: ═══════════════════════════════════════════════════════════════════
set OUTPUT_DIR=%~dp0network_analysis
set TIMESTAMP=%date:~-4%%date:~3,2%%date:~0,2%_%time:~0,2%%time:~3,2%%time:~6,2%
set TIMESTAMP=%TIMESTAMP: =0%
set REPORT=%OUTPUT_DIR%\network_report_%TIMESTAMP%.txt
set HTML_REPORT=%OUTPUT_DIR%\network_report_%TIMESTAMP%.html
:: Create output directory
if not exist "%OUTPUT_DIR%" mkdir "%OUTPUT_DIR%"
echo ╔════════════════════════════════════════════════════════════════╗
echo ║ NETWORK DIAGNOSTIC ULTIMATE - Starting... ║
echo ╚════════════════════════════════════════════════════════════════╝
echo.
echo [*] Output: %REPORT%
echo [*] HTML Report: %HTML_REPORT%
echo.
:: Start TXT report
(
echo ═══════════════════════════════════════════════════════════════════
echo NETWORK DIAGNOSTIC REPORT - %date% %time%
echo ═══════════════════════════════════════════════════════════════════
echo.
) > "%REPORT%"
:: Start HTML report
(
echo ^<!DOCTYPE html^>
echo ^<html^>
echo ^<head^>
echo ^<meta charset="UTF-8"^>
echo ^<title^>Network Diagnostic Report^</title^>
echo ^<style^>
echo body { font-family: 'Segoe UI', Tahoma, sans-serif; margin: 20px; background: #f5f5f5; }
echo .container { max-width: 1400px; margin: 0 auto; background: white; padding: 30px; border-radius: 10px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }
echo h1 { color: #2c3e50; border-bottom: 3px solid #3498db; padding-bottom: 10px; }
echo h2 { color: #34495e; margin-top: 30px; border-left: 4px solid #3498db; padding-left: 10px; }
echo h3 { color: #7f8c8d; margin-top: 20px; }
echo .info-box { background: #ecf0f1; padding: 15px; margin: 10px 0; border-radius: 5px; border-left: 4px solid #3498db; }
echo .success { border-left-color: #27ae60; background: #d5f4e6; }
echo .warning { border-left-color: #f39c12; background: #fef5e7; }
echo .error { border-left-color: #e74c3c; background: #fadbd8; }
echo pre { background: #2c3e50; color: #ecf0f1; padding: 15px; border-radius: 5px; overflow-x: auto; font-size: 12px; }
echo table { border-collapse: collapse; width: 100%%; margin: 15px 0; }
echo th, td { border: 1px solid #bdc3c7; padding: 10px; text-align: left; }
echo th { background: #34495e; color: white; }
echo tr:nth-child(even) { background: #ecf0f1; }
echo .badge { display: inline-block; padding: 4px 8px; border-radius: 3px; font-size: 11px; font-weight: bold; }
echo .badge-primary { background: #3498db; color: white; }
echo .badge-success { background: #27ae60; color: white; }
echo .badge-warning { background: #f39c12; color: white; }
echo .badge-danger { background: #e74c3c; color: white; }
echo .network-diagram { margin: 20px 0; padding: 20px; background: #fff; border: 2px solid #3498db; border-radius: 10px; }
echo .device { display: inline-block; padding: 10px 15px; margin: 5px; background: #3498db; color: white; border-radius: 5px; }
echo ^</style^>
echo ^</head^>
echo ^<body^>
echo ^<div class="container"^>
echo ^<h1^>🌐 Network Diagnostic Report^</h1^>
echo ^<p^>Generated: %date% %time%^</p^>
) > "%HTML_REPORT%"
:: ═══════════════════════════════════════════════════════════════════
:: SECTION 1: SYSTEM INFORMATION
:: ═══════════════════════════════════════════════════════════════════
echo [1/15] Collecting System Information...
(
echo.
echo ═══ 1. SYSTEM INFORMATION ═══
echo.
systeminfo | findstr /C:"Host Name" /C:"OS Name" /C:"OS Version" /C:"System Type"
echo.
) >> "%REPORT%"
(
echo ^<h2^>1. System Information^</h2^>
echo ^<div class="info-box"^>
) >> "%HTML_REPORT%"
for /f "tokens=2 delims=:" %%a in ('systeminfo ^| findstr /C:"Host Name"') do (
echo ^<p^>^<strong^>Host Name:^</strong^> %%a^</p^> >> "%HTML_REPORT%"
)
for /f "tokens=2 delims=:" %%a in ('systeminfo ^| findstr /C:"OS Name"') do (
echo ^<p^>^<strong^>OS:^</strong^> %%a^</p^> >> "%HTML_REPORT%"
)
echo ^</div^> >> "%HTML_REPORT%"
:: ═══════════════════════════════════════════════════════════════════
:: SECTION 2: NETWORK INTERFACES (DETAILED)
:: ═══════════════════════════════════════════════════════════════════
echo [2/15] Analyzing Network Interfaces...
(
echo.
echo ═══ 2. NETWORK INTERFACES (DETAILED) ═══
echo.
ipconfig /all
echo.
) >> "%REPORT%"
(
echo ^<h2^>2. Network Interfaces^</h2^>
echo ^<pre^>
ipconfig /all
echo ^</pre^>
) >> "%HTML_REPORT%"
:: ═══════════════════════════════════════════════════════════════════
:: SECTION 3: ACTIVE CONNECTIONS
:: ═══════════════════════════════════════════════════════════════════
echo [3/15] Listing Active Connections...
(
echo.
echo ═══ 3. ACTIVE NETWORK CONNECTIONS ═══
echo.
netstat -ano | findstr ESTABLISHED
echo.
) >> "%REPORT%"
(
echo ^<h2^>3. Active Connections^</h2^>
echo ^<pre^>
netstat -ano | findstr ESTABLISHED
echo ^</pre^>
) >> "%HTML_REPORT%"
:: ═══════════════════════════════════════════════════════════════════
:: SECTION 4: ROUTING TABLE
:: ═══════════════════════════════════════════════════════════════════
echo [4/15] Dumping Routing Table...
(
echo.
echo ═══ 4. ROUTING TABLE ═══
echo.
route print
echo.
) >> "%REPORT%"
(
echo ^<h2^>4. Routing Table^</h2^>
echo ^<pre^>
route print
echo ^</pre^>
) >> "%HTML_REPORT%"
:: ═══════════════════════════════════════════════════════════════════
:: SECTION 5: ARP CACHE (Connected Devices)
:: ═══════════════════════════════════════════════════════════════════
echo [5/15] Checking ARP Cache (Local Devices)...
(
echo.
echo ═══ 5. ARP CACHE - LOCAL DEVICES ═══
echo.
arp -a
echo.
) >> "%REPORT%"
(
echo ^<h2^>5. Local Devices (ARP Cache^)^</h2^>
echo ^<div class="info-box warning"^>
echo ^<p^>Devices detected on your local network:^</p^>
echo ^</div^>
echo ^<pre^>
arp -a
echo ^</pre^>
) >> "%HTML_REPORT%"
:: ═══════════════════════════════════════════════════════════════════
:: SECTION 6: DNS CONFIGURATION
:: ═══════════════════════════════════════════════════════════════════
echo [6/15] Analyzing DNS Configuration...
(
echo.
echo ═══ 6. DNS CONFIGURATION ═══
echo.
ipconfig /displaydns | more
echo.
nslookup google.com
echo.
nslookup baidu.com
echo.
) >> "%REPORT%"
(
echo ^<h2^>6. DNS Configuration^</h2^>
echo ^<h3^>DNS Test - google.com^</h3^>
echo ^<pre^>
nslookup google.com
echo ^</pre^>
echo ^<h3^>DNS Test - baidu.com^</h3^>
echo ^<pre^>
nslookup baidu.com
echo ^</pre^>
) >> "%HTML_REPORT%"
:: ═══════════════════════════════════════════════════════════════════
:: SECTION 7: VPN DETECTION
:: ═══════════════════════════════════════════════════════════════════
echo [7/15] Detecting VPN Connections...
(
echo.
echo ═══ 7. VPN DETECTION ═══
echo.
echo --- RAS Connections ---
rasdial
echo.
echo --- Network Adapters (VPN Search) ---
ipconfig /all | findstr /I "VPN TAP Tunnel WireGuard OpenVPN"
echo.
echo --- PowerShell VPN Check ---
powershell -Command "Get-VpnConnection 2>$null | Format-Table Name, ConnectionStatus, ServerAddress"
echo.
) >> "%REPORT%"
(
echo ^<h2^>7. VPN Detection^</h2^>
echo ^<div class="info-box"^>
echo ^<h3^>Active VPN Connections^</h3^>
echo ^<pre^>
powershell -Command "Get-VpnConnection 2>$null | Format-Table Name, ConnectionStatus, ServerAddress"
echo ^</pre^>
echo ^<h3^>VPN Adapters^</h3^>
echo ^<pre^>
ipconfig /all | findstr /I "VPN TAP Tunnel WireGuard OpenVPN"
echo ^</pre^>
echo ^</div^>
) >> "%HTML_REPORT%"
:: ═══════════════════════════════════════════════════════════════════
:: SECTION 8: GATEWAY DETECTION & PING
:: ═══════════════════════════════════════════════════════════════════
echo [8/15] Testing Gateway Connection...
:: Extract default gateway
for /f "tokens=3" %%a in ('route print ^| findstr "0.0.0.0"') do (
set GATEWAY=%%a
goto :gateway_found
)
:gateway_found
(
echo.
echo ═══ 8. GATEWAY DETECTION ═══
echo.
echo Default Gateway: %GATEWAY%
echo.
echo --- Ping Gateway ---
ping -n 4 %GATEWAY%
echo.
) >> "%REPORT%"
(
echo ^<h2^>8. Gateway Analysis^</h2^>
echo ^<div class="info-box success"^>
echo ^<p^>^<strong^>Default Gateway:^</strong^> %GATEWAY%^</p^>
echo ^</div^>
echo ^<h3^>Gateway Latency Test^</h3^>
echo ^<pre^>
ping -n 4 %GATEWAY%
echo ^</pre^>
) >> "%HTML_REPORT%"
:: ═══════════════════════════════════════════════════════════════════
:: SECTION 9: INTERNET CONNECTIVITY TESTS
:: ═══════════════════════════════════════════════════════════════════
echo [9/15] Testing Internet Connectivity...
(
echo.
echo ═══ 9. INTERNET CONNECTIVITY TESTS ═══
echo.
echo --- Google DNS (8.8.8.8) ---
ping -n 4 8.8.8.8
echo.
echo --- Cloudflare DNS (1.1.1.1) ---
ping -n 4 1.1.1.1
echo.
echo --- Baidu (China) ---
ping -n 4 baidu.com
echo.
echo --- Google (International) ---
ping -n 4 google.com
echo.
) >> "%REPORT%"
(
echo ^<h2^>9. Internet Connectivity^</h2^>
echo ^<h3^>Google DNS (8.8.8.8^)^</h3^>
echo ^<pre^>
ping -n 4 8.8.8.8
echo ^</pre^>
echo ^<h3^>Cloudflare DNS (1.1.1.1^)^</h3^>
echo ^<pre^>
ping -n 4 1.1.1.1
echo ^</pre^>
echo ^<h3^>Baidu (baidu.com^)^</h3^>
echo ^<pre^>
ping -n 4 baidu.com
echo ^</pre^>
) >> "%HTML_REPORT%"
:: ═══════════════════════════════════════════════════════════════════
:: SECTION 10: TRACEROUTE
:: ═══════════════════════════════════════════════════════════════════
echo [10/15] Running Traceroute...
(
echo.
echo ═══ 10. TRACEROUTE ANALYSIS ═══
echo.
echo --- Trace to Google (8.8.8.8) ---
tracert -d -h 15 8.8.8.8
echo.
echo --- Trace to Baidu ---
tracert -d -h 15 baidu.com
echo.
) >> "%REPORT%"
(
echo ^<h2^>10. Traceroute Analysis^</h2^>
echo ^<h3^>Route to Google DNS^</h3^>
echo ^<pre^>
tracert -d -h 15 8.8.8.8
echo ^</pre^>
) >> "%HTML_REPORT%"
:: ═══════════════════════════════════════════════════════════════════
:: SECTION 11: OPEN PORTS
:: ═══════════════════════════════════════════════════════════════════
echo [11/15] Scanning Open Ports...
(
echo.
echo ═══ 11. OPEN PORTS (LISTENING) ═══
echo.
netstat -ano | findstr LISTENING
echo.
) >> "%REPORT%"
(
echo ^<h2^>11. Open Ports^</h2^>
echo ^<pre^>
netstat -ano | findstr LISTENING
echo ^</pre^>
) >> "%HTML_REPORT%"
:: ═══════════════════════════════════════════════════════════════════
:: SECTION 12: WIRELESS INFO (IF WIFI)
:: ═══════════════════════════════════════════════════════════════════
echo [12/15] Collecting Wireless Information...
(
echo.
echo ═══ 12. WIRELESS INFORMATION ═══
echo.
netsh wlan show interfaces
echo.
echo --- Available WiFi Networks ---
netsh wlan show networks mode=bssid
echo.
echo --- Saved WiFi Profiles ---
netsh wlan show profiles
echo.
) >> "%REPORT%"
(
echo ^<h2^>12. Wireless Information^</h2^>
echo ^<h3^>Current WiFi Connection^</h3^>
echo ^<pre^>
netsh wlan show interfaces
echo ^</pre^>
echo ^<h3^>Available Networks^</h3^>
echo ^<pre^>
netsh wlan show networks mode=bssid
echo ^</pre^>
) >> "%HTML_REPORT%"
:: ═══════════════════════════════════════════════════════════════════
:: SECTION 13: FIREWALL STATUS
:: ═══════════════════════════════════════════════════════════════════
echo [13/15] Checking Firewall Status...
(
echo.
echo ═══ 13. FIREWALL STATUS ═══
echo.
netsh advfirewall show allprofiles
echo.
) >> "%REPORT%"
(
echo ^<h2^>13. Firewall Status^</h2^>
echo ^<pre^>
netsh advfirewall show allprofiles
echo ^</pre^>
) >> "%HTML_REPORT%"
:: ═══════════════════════════════════════════════════════════════════
:: SECTION 14: NETWORK SHARES
:: ═══════════════════════════════════════════════════════════════════
echo [14/15] Listing Network Shares...
(
echo.
echo ═══ 14. NETWORK SHARES ═══
echo.
net share
echo.
) >> "%REPORT%"
(
echo ^<h2^>14. Network Shares^</h2^>
echo ^<pre^>
net share
echo ^</pre^>
) >> "%HTML_REPORT%"
:: ═══════════════════════════════════════════════════════════════════
:: SECTION 15: PUBLIC IP & GEOLOCATION
:: ═══════════════════════════════════════════════════════════════════
echo [15/15] Detecting Public IP...
(
echo.
echo ═══ 15. PUBLIC IP DETECTION ═══
echo.
echo --- Your Public IP ---
) >> "%REPORT%"
:: Try multiple services
powershell -Command "(Invoke-WebRequest -Uri 'https://api.ipify.org' -UseBasicParsing).Content" >> "%REPORT%" 2>nul
if errorlevel 1 (
powershell -Command "(Invoke-WebRequest -Uri 'https://ifconfig.me' -UseBasicParsing).Content" >> "%REPORT%" 2>nul
)
echo. >> "%REPORT%"
echo --- IP Geolocation Info --- >> "%REPORT%"
powershell -Command "(Invoke-WebRequest -Uri 'https://ipinfo.io/json' -UseBasicParsing).Content | ConvertFrom-Json | Format-List" >> "%REPORT%" 2>nul
(
echo ^<h2^>15. Public IP ^&amp; Geolocation^</h2^>
echo ^<div class="info-box"^>
echo ^<p^>^<strong^>Public IP:^</strong^>
) >> "%HTML_REPORT%"
powershell -Command "(Invoke-WebRequest -Uri 'https://api.ipify.org' -UseBasicParsing).Content" >> "%HTML_REPORT%" 2>nul
echo ^</p^> >> "%HTML_REPORT%"
echo ^</div^> >> "%HTML_REPORT%"
:: ═══════════════════════════════════════════════════════════════════
:: NETWORK DIAGRAM GENERATION
:: ═══════════════════════════════════════════════════════════════════
echo [*] Generating Network Diagram...
(
echo ^<h2^>Network Architecture Diagram^</h2^>
echo ^<div class="network-diagram"^>
echo ^<h3^>Detected Network Flow^</h3^>
echo ^<p style="font-family: monospace; font-size: 14px;"^>
echo Internet ^<---^> ISP Box/Modem ^<---^> Gateway (%GATEWAY%^) ^<---^> Your PC
echo ^</p^>
) >> "%HTML_REPORT%"
:: Count devices
for /f %%a in ('arp -a ^| find /c "dynamic"') do set DEVICE_COUNT=%%a
echo ^<p^>^<span class="badge badge-primary"^>%DEVICE_COUNT% devices detected on local network^</span^>^</p^> >> "%HTML_REPORT%"
echo ^</div^> >> "%HTML_REPORT%"
:: ═══════════════════════════════════════════════════════════════════
:: FINALIZE REPORTS
:: ═══════════════════════════════════════════════════════════════════
(
echo.
echo ═══════════════════════════════════════════════════════════════════
echo DIAGNOSTIC COMPLETED - %date% %time%
echo ═══════════════════════════════════════════════════════════════════
) >> "%REPORT%"
(
echo ^<hr^>
echo ^<p style="text-align: center; color: #7f8c8d;"^>Report generated by Network Diagnostic Ultimate^</p^>
echo ^</div^>
echo ^</body^>
echo ^</html^>
) >> "%HTML_REPORT%"
:: ═══════════════════════════════════════════════════════════════════
:: SUMMARY
:: ═══════════════════════════════════════════════════════════════════
echo.
echo ╔════════════════════════════════════════════════════════════════╗
echo ║ DIAGNOSTIC COMPLETED! ║
echo ╚════════════════════════════════════════════════════════════════╝
echo.
echo [✓] Text Report: %REPORT%
echo [✓] HTML Report: %HTML_REPORT%
echo.
echo [*] Opening HTML report in browser...
start "" "%HTML_REPORT%"
echo.
echo Press any key to exit...
pause >nul

View File

@ -0,0 +1,4 @@
===================================================================
NETWORK DIAGNOSTIC REPORT - 24/11/2025 22:36:01,43
===================================================================

View File

@ -0,0 +1,796 @@
===================================================================
NETWORK DIAGNOSTIC REPORT - 24/11/2025 22:37:41,15
===================================================================
=== 1. SYSTEM INFORMATION ===
=== 2. NETWORK INTERFACES [DETAILED] ===
Configuration IP de Windows
Nom de l'h“te . . . . . . . . . . : DESKTOP-QQMB28M
Suffixe DNS principal . . . . . . :
Type de noeud. . . . . . . . . . : Hybride
Routage IP activ . . . . . . . . : Non
Proxy WINS activ . . . . . . . . : Non
Liste de recherche du suffixe DNS.: lan
Carte inconnue Metaÿ:
Suffixe DNS propre … la connexion. . . :
Description. . . . . . . . . . . . . . : Meta Tunnel
Adresse physique . . . . . . . . . . . :
DHCP activ. . . . . . . . . . . . . . : Non
Configuration automatique active. . . : Oui
Adresse IPv6 de liaison locale. . . . .: fe80::ac30:1ae6:f91f:95e%55(prfr)
Adresse IPv4. . . . . . . . . . . . . .: 198.18.0.1(prfr)
Masque de sous-rseau. . . .ÿ. . . . . : 255.255.255.252
Passerelle par dfaut. . . .ÿ. . . . . : 0.0.0.0
Serveurs DNS. . . . . . . . . . . . . : 198.18.0.2
NetBIOS sur Tcpip. . . . . . . . . . . : Activ
Carte Ethernet Ethernet :
Statut du mdia. . . . . . . . . . . . : Mdia dconnect
Suffixe DNS propre … la connexion. . . : lan
Description. . . . . . . . . . . . . . : Intel(R) Ethernet Connection (7) I219-V
Adresse physique . . . . . . . . . . . : 00-D8-61-3A-16-B7
DHCP activ. . . . . . . . . . . . . . : Oui
Configuration automatique active. . . : Oui
Carte inconnue Tailscaleÿ:
Suffixe DNS propre … la connexion. . . :
Description. . . . . . . . . . . . . . : Tailscale Tunnel
Adresse physique . . . . . . . . . . . :
DHCP activ. . . . . . . . . . . . . . : Non
Configuration automatique active. . . : Oui
Adresse IPv6 de liaison locale. . . . .: fe80::d8ff:5060:f230:9168%46(prfr)
Adresse d'autoconfiguration IPv4 . . . : 169.254.83.107(prfr)
Masque de sous-rseau. . . .ÿ. . . . . : 255.255.0.0
Passerelle par dfaut. . . .ÿ. . . . . :
Serveurs DNS. . . . . . . . . . . . . : fec0:0:0:ffff::1%1
fec0:0:0:ffff::2%1
fec0:0:0:ffff::3%1
NetBIOS sur TCPIP. . . . . . . . . . . : Dsactiv
Carte inconnue OpenVPN Data Channel Offload for Surfsharkÿ:
Statut du mdia. . . . . . . . . . . . : Mdia dconnect
Suffixe DNS propre … la connexion. . . :
Description. . . . . . . . . . . . . . : OpenVPN Data Channel Offload
Adresse physique . . . . . . . . . . . :
DHCP activ. . . . . . . . . . . . . . : Oui
Configuration automatique active. . . : Oui
Carte rseau sans fil Connexion au rseau local* 9ÿ:
Statut du mdia. . . . . . . . . . . . : Mdia dconnect
Suffixe DNS propre … la connexion. . . :
Description. . . . . . . . . . . . . . : Microsoft Wi-Fi Direct Virtual Adapter
Adresse physique . . . . . . . . . . . : 70-D8-C2-41-6C-9E
DHCP activ. . . . . . . . . . . . . . : Oui
Configuration automatique active. . . : Oui
Carte rseau sans fil Connexion au rseau local* 10ÿ:
Statut du mdia. . . . . . . . . . . . : Mdia dconnect
Suffixe DNS propre … la connexion. . . :
Description. . . . . . . . . . . . . . : Microsoft Wi-Fi Direct Virtual Adapter #2
Adresse physique . . . . . . . . . . . : 72-D8-C2-41-6C-9D
DHCP activ. . . . . . . . . . . . . . : Oui
Configuration automatique active. . . : Oui
Carte rseau sans fil Wi-Fiÿ:
Suffixe DNS propre … la connexion. . . : lan
Description. . . . . . . . . . . . . . : Intel(R) Wi-Fi 6 AX200 160MHz
Adresse physique . . . . . . . . . . . : 70-D8-C2-41-6C-9D
DHCP activ. . . . . . . . . . . . . . : Oui
Configuration automatique active. . . : Oui
Adresse IPv4. . . . . . . . . . . . . .: 192.168.10.234(prfr)
Masque de sous-rseau. . . .ÿ. . . . . : 255.255.255.0
Bail obtenu. . . . . . . . .ÿ. . . . . : lundi 24 novembre 2025 16:57:55
Bail expirant. . . . . . . . .ÿ. . . . : mardi 25 novembre 2025 04:57:55
Passerelle par dfaut. . . .ÿ. . . . . : 192.168.10.1
Serveur DHCP . . . . . . . . . . . . . : 192.168.10.1
Serveurs DNS. . . . . . . . . . . . . : 192.168.10.1
NetBIOS sur Tcpip. . . . . . . . . . . : Activ
Carte Ethernet Connexion rseau Bluetooth 2 :
Statut du mdia. . . . . . . . . . . . : Mdia dconnect
Suffixe DNS propre … la connexion. . . :
Description. . . . . . . . . . . . . . : Bluetooth Device (Personal Area Network) #2
Adresse physique . . . . . . . . . . . : 70-D8-C2-41-6C-A1
DHCP activ. . . . . . . . . . . . . . : Oui
Configuration automatique active. . . : Oui
Carte Ethernet vEthernet (WSL) :
Suffixe DNS propre … la connexion. . . :
Description. . . . . . . . . . . . . . : Hyper-V Virtual Ethernet Adapter
Adresse physique . . . . . . . . . . . : 00-15-5D-DB-62-72
DHCP activ. . . . . . . . . . . . . . : Non
Configuration automatique active. . . : Oui
Adresse IPv6 de liaison locale. . . . .: fe80::8724:2a85:1bef:135d%59(prfr)
Adresse IPv4. . . . . . . . . . . . . .: 172.21.128.1(prfr)
Masque de sous-rseau. . . .ÿ. . . . . : 255.255.240.0
Passerelle par dfaut. . . .ÿ. . . . . :
IAID DHCPv6 . . . . . . . . . . . : 989861213
DUID de client DHCPv6. . . . . . . . : 00-01-00-01-2D-61-0B-7D-00-D8-61-3A-16-B7
Serveurs DNS. . . . . . . . . . . . . : fec0:0:0:ffff::1%1
fec0:0:0:ffff::2%1
fec0:0:0:ffff::3%1
NetBIOS sur Tcpip. . . . . . . . . . . : Activ
=== 3. ACTIVE NETWORK CONNECTIONS ===
TCP 127.0.0.1:7897 127.0.0.1:49239 ESTABLISHED 14472
TCP 127.0.0.1:7897 127.0.0.1:50351 ESTABLISHED 14472
TCP 127.0.0.1:7897 127.0.0.1:50359 ESTABLISHED 14472
TCP 127.0.0.1:7897 127.0.0.1:50369 ESTABLISHED 14472
TCP 127.0.0.1:7897 127.0.0.1:50389 ESTABLISHED 14472
TCP 127.0.0.1:7897 127.0.0.1:50440 ESTABLISHED 14472
TCP 127.0.0.1:7897 127.0.0.1:50481 ESTABLISHED 14472
TCP 127.0.0.1:7897 127.0.0.1:50544 ESTABLISHED 14472
TCP 127.0.0.1:7897 127.0.0.1:50552 ESTABLISHED 14472
TCP 127.0.0.1:7897 127.0.0.1:50559 ESTABLISHED 14472
TCP 127.0.0.1:7897 127.0.0.1:50905 ESTABLISHED 14472
TCP 127.0.0.1:7897 127.0.0.1:51018 ESTABLISHED 14472
TCP 127.0.0.1:7897 127.0.0.1:56410 ESTABLISHED 14472
TCP 127.0.0.1:7897 127.0.0.1:58495 ESTABLISHED 14472
TCP 127.0.0.1:7897 127.0.0.1:61672 ESTABLISHED 14472
TCP 127.0.0.1:7897 127.0.0.1:63165 ESTABLISHED 14472
TCP 127.0.0.1:7897 127.0.0.1:64526 ESTABLISHED 14472
TCP 127.0.0.1:7897 127.0.0.1:64548 ESTABLISHED 14472
TCP 127.0.0.1:7897 127.0.0.1:65244 ESTABLISHED 14472
TCP 127.0.0.1:39798 127.0.0.1:50869 ESTABLISHED 14472
TCP 127.0.0.1:39798 127.0.0.1:50870 ESTABLISHED 14472
TCP 127.0.0.1:49239 127.0.0.1:7897 ESTABLISHED 15836
TCP 127.0.0.1:49729 127.0.0.1:49730 ESTABLISHED 15836
TCP 127.0.0.1:49730 127.0.0.1:49729 ESTABLISHED 15836
TCP 127.0.0.1:49731 127.0.0.1:49732 ESTABLISHED 15496
TCP 127.0.0.1:49732 127.0.0.1:49731 ESTABLISHED 15496
TCP 127.0.0.1:49738 127.0.0.1:49757 ESTABLISHED 15116
TCP 127.0.0.1:49741 127.0.0.1:49756 ESTABLISHED 15116
TCP 127.0.0.1:49756 127.0.0.1:49741 ESTABLISHED 16188
TCP 127.0.0.1:49757 127.0.0.1:49738 ESTABLISHED 16188
TCP 127.0.0.1:50351 127.0.0.1:7897 ESTABLISHED 15836
TCP 127.0.0.1:50359 127.0.0.1:7897 ESTABLISHED 15836
TCP 127.0.0.1:50369 127.0.0.1:7897 ESTABLISHED 15836
TCP 127.0.0.1:50389 127.0.0.1:7897 ESTABLISHED 15836
TCP 127.0.0.1:50440 127.0.0.1:7897 ESTABLISHED 15836
TCP 127.0.0.1:50481 127.0.0.1:7897 ESTABLISHED 15836
TCP 127.0.0.1:50544 127.0.0.1:7897 ESTABLISHED 14560
TCP 127.0.0.1:50552 127.0.0.1:7897 ESTABLISHED 14560
TCP 127.0.0.1:50559 127.0.0.1:7897 ESTABLISHED 14560
TCP 127.0.0.1:50869 127.0.0.1:39798 ESTABLISHED 18836
TCP 127.0.0.1:50870 127.0.0.1:39798 ESTABLISHED 18836
TCP 127.0.0.1:50905 127.0.0.1:7897 ESTABLISHED 15836
TCP 127.0.0.1:51018 127.0.0.1:7897 ESTABLISHED 15836
TCP 127.0.0.1:56410 127.0.0.1:7897 ESTABLISHED 9800
TCP 127.0.0.1:56496 127.0.0.1:56497 ESTABLISHED 24388
TCP 127.0.0.1:56497 127.0.0.1:56496 ESTABLISHED 24388
TCP 127.0.0.1:58495 127.0.0.1:7897 ESTABLISHED 16920
TCP 127.0.0.1:61672 127.0.0.1:7897 ESTABLISHED 9748
TCP 127.0.0.1:63165 127.0.0.1:7897 ESTABLISHED 16920
TCP 127.0.0.1:64526 127.0.0.1:7897 ESTABLISHED 9800
TCP 127.0.0.1:64548 127.0.0.1:7897 ESTABLISHED 9800
TCP 127.0.0.1:65244 127.0.0.1:7897 ESTABLISHED 9800
TCP 192.168.10.234:49240 27.45.161.82:41756 ESTABLISHED 14472
TCP 192.168.10.234:49684 117.185.125.188:443 ESTABLISHED 9816
TCP 192.168.10.234:49877 45.121.184.100:27019 ESTABLISHED 15116
TCP 192.168.10.234:50320 223.5.5.5:443 ESTABLISHED 14472
TCP 192.168.10.234:50352 27.45.161.82:41756 ESTABLISHED 14472
TCP 192.168.10.234:50360 27.45.161.82:41756 ESTABLISHED 14472
TCP 192.168.10.234:50370 27.45.161.82:41756 ESTABLISHED 14472
TCP 192.168.10.234:50392 27.45.161.82:41756 ESTABLISHED 14472
TCP 192.168.10.234:50441 27.45.161.82:41756 ESTABLISHED 14472
TCP 192.168.10.234:50482 27.45.161.82:41756 ESTABLISHED 14472
TCP 192.168.10.234:50551 150.171.28.11:443 ESTABLISHED 14472
TCP 192.168.10.234:50553 150.171.28.11:443 ESTABLISHED 14472
TCP 192.168.10.234:50560 27.45.161.82:41756 ESTABLISHED 14472
TCP 192.168.10.234:50911 27.45.161.82:41756 ESTABLISHED 14472
TCP 192.168.10.234:51019 27.45.161.82:41756 ESTABLISHED 14472
TCP 192.168.10.234:56412 27.45.161.82:41756 ESTABLISHED 14472
TCP 192.168.10.234:56435 27.45.161.82:41756 ESTABLISHED 14472
TCP 192.168.10.234:58496 27.45.161.82:41756 ESTABLISHED 14472
TCP 192.168.10.234:60029 27.45.161.82:41756 ESTABLISHED 14472
TCP 192.168.10.234:61675 27.45.161.82:41756 ESTABLISHED 14472
TCP 192.168.10.234:62899 27.45.161.82:41756 ESTABLISHED 14472
TCP 192.168.10.234:63166 27.45.161.82:41756 ESTABLISHED 14472
TCP 192.168.10.234:64297 4.145.79.82:443 ESTABLISHED 14472
TCP 192.168.10.234:64527 27.45.161.82:41756 ESTABLISHED 14472
TCP 192.168.10.234:64549 27.45.161.82:41756 ESTABLISHED 14472
TCP 192.168.10.234:65245 27.45.161.82:41756 ESTABLISHED 14472
TCP 192.168.10.234:65379 1.12.12.12:443 ESTABLISHED 14472
TCP 192.168.10.234:65383 1.12.12.21:443 ESTABLISHED 14472
TCP 198.18.0.1:60028 198.18.0.42:443 ESTABLISHED 11928
TCP 198.18.0.1:62896 43.160.156.23:443 ESTABLISHED 14348
TCP 198.18.0.1:64295 198.18.0.4:443 ESTABLISHED 5064
=== 4. ROUTING TABLE ===
===========================================================================
Liste d'Interfaces
55...........................Meta Tunnel
23...00 d8 61 3a 16 b7 ......Intel(R) Ethernet Connection (7) I219-V
46...........................Tailscale Tunnel
17...........................OpenVPN Data Channel Offload
15...70 d8 c2 41 6c 9e ......Microsoft Wi-Fi Direct Virtual Adapter
18...72 d8 c2 41 6c 9d ......Microsoft Wi-Fi Direct Virtual Adapter #2
11...70 d8 c2 41 6c 9d ......Intel(R) Wi-Fi 6 AX200 160MHz
10...70 d8 c2 41 6c a1 ......Bluetooth Device (Personal Area Network) #2
1...........................Software Loopback Interface 1
59...00 15 5d db 62 72 ......Hyper-V Virtual Ethernet Adapter
===========================================================================
IPv4 Table de routage
===========================================================================
Itinraires actifsÿ:
Destination rseau Masque rseau Adr. passerelle Adr. interface Mtrique
0.0.0.0 0.0.0.0 192.168.10.1 192.168.10.234 30
0.0.0.0 0.0.0.0 On-link 198.18.0.1 0
127.0.0.0 255.0.0.0 On-link 127.0.0.1 331
127.0.0.1 255.255.255.255 On-link 127.0.0.1 331
127.255.255.255 255.255.255.255 On-link 127.0.0.1 331
169.254.0.0 255.255.0.0 On-link 169.254.83.107 261
169.254.83.107 255.255.255.255 On-link 169.254.83.107 261
169.254.255.255 255.255.255.255 On-link 169.254.83.107 261
172.21.128.0 255.255.240.0 On-link 172.21.128.1 5256
172.21.128.1 255.255.255.255 On-link 172.21.128.1 5256
172.21.143.255 255.255.255.255 On-link 172.21.128.1 5256
192.168.10.0 255.255.255.0 On-link 192.168.10.234 286
192.168.10.234 255.255.255.255 On-link 192.168.10.234 286
192.168.10.255 255.255.255.255 On-link 192.168.10.234 286
198.18.0.0 255.255.255.252 On-link 198.18.0.1 256
198.18.0.1 255.255.255.255 On-link 198.18.0.1 256
198.18.0.3 255.255.255.255 On-link 198.18.0.1 256
224.0.0.0 240.0.0.0 On-link 127.0.0.1 331
224.0.0.0 240.0.0.0 On-link 192.168.10.234 286
224.0.0.0 240.0.0.0 On-link 198.18.0.1 256
224.0.0.0 240.0.0.0 On-link 172.21.128.1 5256
255.255.255.255 255.255.255.255 On-link 127.0.0.1 331
255.255.255.255 255.255.255.255 On-link 192.168.10.234 286
255.255.255.255 255.255.255.255 On-link 198.18.0.1 256
255.255.255.255 255.255.255.255 On-link 172.21.128.1 5256
===========================================================================
Itinraires persistantsÿ:
Aucun
IPv6 Table de routage
===========================================================================
Itinraires actifsÿ:
If Metric Network Destination Gateway
1 331 ::1/128 On-link
55 261 fe80::/64 On-link
59 5256 fe80::/64 On-link
59 5256 fe80::8724:2a85:1bef:135d/128
On-link
55 261 fe80::ac30:1ae6:f91f:95e/128
On-link
1 331 ff00::/8 On-link
55 261 ff00::/8 On-link
59 5256 ff00::/8 On-link
===========================================================================
Itinraires persistantsÿ:
Aucun
=== 5. ARP CACHE - LOCAL DEVICES ===
Interfaceÿ: 192.168.10.234 --- 0xb
Adresse Internet Adresse physique Type
192.168.10.1 10-5f-02-2b-df-26 dynamique
192.168.10.255 ff-ff-ff-ff-ff-ff statique
224.0.0.2 01-00-5e-00-00-02 statique
224.0.0.22 01-00-5e-00-00-16 statique
224.0.0.251 01-00-5e-00-00-fb statique
224.0.0.252 01-00-5e-00-00-fc statique
239.255.255.250 01-00-5e-7f-ff-fa statique
255.255.255.255 ff-ff-ff-ff-ff-ff statique
Interfaceÿ: 169.254.83.107 --- 0x2e
Adresse Internet Adresse physique Type
169.254.255.255 statique
224.0.0.22 statique
224.0.0.251 statique
224.0.0.252 statique
239.255.255.250 statique
Interfaceÿ: 198.18.0.1 --- 0x37
Adresse Internet Adresse physique Type
0.0.0.0 statique
1.12.12.12 dynamique
1.12.12.21 dynamique
3.165.11.87 dynamique
4.144.9.128 dynamique
4.144.165.14 dynamique
4.145.79.80 dynamique
4.145.79.82 dynamique
4.241.155.66 dynamique
8.8.4.4 dynamique
8.8.8.8 dynamique
13.71.55.58 dynamique
13.89.178.26 dynamique
13.89.179.9 dynamique
13.89.179.10 dynamique
13.107.213.50 dynamique
13.107.246.50 dynamique
20.42.65.94 dynamique
20.42.73.28 dynamique
20.44.229.112 dynamique
20.44.239.154 dynamique
20.50.201.206 dynamique
20.72.205.209 dynamique
20.189.173.1 dynamique
20.189.173.11 dynamique
20.189.173.14 dynamique
20.189.173.16 dynamique
20.194.184.156 dynamique
23.2.16.40 dynamique
23.46.63.160 dynamique
23.46.155.219 dynamique
23.49.104.56 dynamique
23.54.61.119 dynamique
23.195.119.86 dynamique
23.202.34.88 dynamique
23.202.34.233 dynamique
23.208.12.140 dynamique
23.217.205.5 dynamique
23.220.70.142 dynamique
23.220.70.165 dynamique
27.45.161.82 dynamique
31.13.112.9 dynamique
34.107.243.93 dynamique
34.120.208.123 dynamique
40.79.141.152 dynamique
40.99.36.130 dynamique
40.104.115.162 dynamique
40.104.121.82 dynamique
43.153.248.120 dynamique
43.156.222.216 dynamique
43.160.144.13 dynamique
43.160.156.39 dynamique
43.160.156.69 dynamique
43.160.156.172 dynamique
43.160.156.199 dynamique
43.160.156.219 dynamique
43.174.206.10 dynamique
43.174.207.1 dynamique
45.121.184.100 dynamique
46.82.174.69 dynamique
48.210.190.78 dynamique
52.110.20.34 dynamique
52.123.128.14 dynamique
52.123.129.14 dynamique
52.140.118.28 dynamique
52.168.112.66 dynamique
52.168.117.174 dynamique
52.168.117.175 dynamique
52.182.141.63 dynamique
52.182.143.208 dynamique
57.155.141.115 dynamique
59.24.3.174 dynamique
69.231.153.77 dynamique
69.234.206.194 dynamique
72.153.5.130 dynamique
72.153.5.136 dynamique
101.32.104.104 dynamique
103.97.3.19 dynamique
104.16.248.249 dynamique
104.16.249.249 dynamique
104.46.162.226 dynamique
104.121.229.186 dynamique
112.28.170.101 dynamique
114.80.149.72 dynamique
114.80.149.73 dynamique
117.135.149.106 dynamique
117.135.155.185 dynamique
117.185.125.154 dynamique
117.185.125.188 dynamique
117.186.171.115 dynamique
119.28.28.28 dynamique
119.29.29.29 dynamique
120.53.53.53 dynamique
120.222.223.244 dynamique
129.226.1.35 dynamique
135.171.2.152 dynamique
142.250.196.202 dynamique
146.75.45.91 dynamique
149.154.167.41 dynamique
149.154.167.51 dynamique
149.154.167.92 dynamique
150.171.22.17 dynamique
150.171.27.11 dynamique
150.171.28.11 dynamique
157.240.2.14 dynamique
172.217.12.138 dynamique
180.76.76.76 dynamique
180.153.82.7 dynamique
183.192.184.52 dynamique
183.235.178.78 dynamique
184.26.221.52 dynamique
192.228.79.201 dynamique
198.18.0.2 dynamique
198.18.0.3 statique
198.18.0.4 dynamique
198.18.0.5 dynamique
198.18.0.6 dynamique
198.18.0.7 dynamique
198.18.0.8 dynamique
198.18.0.15 dynamique
198.18.0.16 dynamique
198.18.0.17 dynamique
198.18.0.18 dynamique
198.18.0.20 dynamique
198.18.0.21 dynamique
198.18.0.23 dynamique
198.18.0.27 dynamique
198.18.0.28 dynamique
198.18.0.31 dynamique
198.18.0.32 dynamique
198.18.0.33 dynamique
198.18.0.35 dynamique
198.18.0.36 dynamique
198.18.0.37 dynamique
198.18.0.42 dynamique
198.18.0.43 dynamique
198.18.0.44 dynamique
198.18.0.48 dynamique
198.18.0.53 dynamique
198.18.0.56 dynamique
198.18.0.57 dynamique
198.18.0.58 dynamique
198.18.0.59 dynamique
198.18.0.60 dynamique
198.18.0.61 dynamique
202.89.233.96 dynamique
202.89.233.101 dynamique
210.16.166.154 dynamique
223.5.5.5 dynamique
223.6.6.6 dynamique
223.64.227.135 dynamique
224.0.0.2 statique
224.0.0.22 statique
224.0.0.251 statique
224.0.0.252 statique
239.255.255.250 statique
Interfaceÿ: 172.21.128.1 --- 0x3b
Adresse Internet Adresse physique Type
172.21.137.235 00-15-5d-f0-b1-6f dynamique
172.21.143.255 ff-ff-ff-ff-ff-ff statique
224.0.0.2 01-00-5e-00-00-02 statique
224.0.0.22 01-00-5e-00-00-16 statique
224.0.0.251 01-00-5e-00-00-fb statique
239.255.255.250 01-00-5e-7f-ff-fa statique
=== 6. DNS CONFIGURATION ===
Serveur : UnKnown
Address: 198.18.0.2
Nom : google.com
Address: 198.18.0.62
Serveur : UnKnown
Address: 198.18.0.2
Nom : baidu.com
Address: 198.18.0.63
=== 7. VPN DETECTION ===
--- RAS Connections ---
Aucune connexion
La commande a été exécutée.
--- Network Adapters [VPN Search] ---
Description. . . . . . . . . . . . . . : Meta Tunnel
Description. . . . . . . . . . . . . . : Tailscale Tunnel
Carte inconnue OpenVPN Data Channel Offload for Surfsharkÿ:
Description. . . . . . . . . . . . . . : OpenVPN Data Channel Offload
=== 8. GATEWAY DETECTION ===
Default Gateway: 192.168.10.1
--- Ping Gateway ---
Envoi d'une requˆte 'Ping' 192.168.10.1 avec 32 octets de donnesÿ:
Rponse de 192.168.10.1ÿ: octets=32 temps=1 ms TTL=64
Rponse de 192.168.10.1ÿ: octets=32 temps=2 ms TTL=64
Rponse de 192.168.10.1ÿ: octets=32 temps=1 ms TTL=64
Rponse de 192.168.10.1ÿ: octets=32 temps=1 ms TTL=64
Statistiques Ping pour 192.168.10.1:
Paquetsÿ: envoys = 4, re‡us = 4, perdus = 0 (perte 0%),
Dure approximative des boucles en millisecondes :
Minimum = 1ms, Maximum = 2ms, Moyenne = 1ms
=== 9. INTERNET CONNECTIVITY TESTS ===
--- Google DNS [8.8.8.8] ---
Envoi d'une requˆte 'Ping' 8.8.8.8 avec 32 octets de donnesÿ:
Rponse de 8.8.8.8ÿ: octets=32 temps=1 ms TTL=64
Rponse de 8.8.8.8ÿ: octets=32 temps<1ms TTL=64
Rponse de 8.8.8.8ÿ: octets=32 temps<1ms TTL=64
Rponse de 8.8.8.8ÿ: octets=32 temps<1ms TTL=64
Statistiques Ping pour 8.8.8.8:
Paquetsÿ: envoys = 4, re‡us = 4, perdus = 0 (perte 0%),
Dure approximative des boucles en millisecondes :
Minimum = 0ms, Maximum = 1ms, Moyenne = 0ms
--- Cloudflare DNS [1.1.1.1] ---
Envoi d'une requˆte 'Ping' 1.1.1.1 avec 32 octets de donnesÿ:
Rponse de 1.1.1.1ÿ: octets=32 temps<1ms TTL=64
Rponse de 1.1.1.1ÿ: octets=32 temps<1ms TTL=64
Rponse de 1.1.1.1ÿ: octets=32 temps<1ms TTL=64
Rponse de 1.1.1.1ÿ: octets=32 temps<1ms TTL=64
Statistiques Ping pour 1.1.1.1:
Paquetsÿ: envoys = 4, re‡us = 4, perdus = 0 (perte 0%),
Dure approximative des boucles en millisecondes :
Minimum = 0ms, Maximum = 0ms, Moyenne = 0ms
--- Baidu [China] ---
Envoi d'une requˆte 'ping' sur baidu.com [198.18.0.63] avec 32 octets de donnesÿ:
Rponse de 198.18.0.63ÿ: octets=32 temps<1ms TTL=64
Rponse de 198.18.0.63ÿ: octets=32 temps<1ms TTL=64
Rponse de 198.18.0.63ÿ: octets=32 temps<1ms TTL=64
Rponse de 198.18.0.63ÿ: octets=32 temps<1ms TTL=64
Statistiques Ping pour 198.18.0.63:
Paquetsÿ: envoys = 4, re‡us = 4, perdus = 0 (perte 0%),
Dure approximative des boucles en millisecondes :
Minimum = 0ms, Maximum = 0ms, Moyenne = 0ms
--- Google [International] ---
Envoi d'une requˆte 'ping' sur google.com [198.18.0.62] avec 32 octets de donnesÿ:
Rponse de 198.18.0.62ÿ: octets=32 temps<1ms TTL=64
Rponse de 198.18.0.62ÿ: octets=32 temps<1ms TTL=64
Rponse de 198.18.0.62ÿ: octets=32 temps<1ms TTL=64
Rponse de 198.18.0.62ÿ: octets=32 temps<1ms TTL=64
Statistiques Ping pour 198.18.0.62:
Paquetsÿ: envoys = 4, re‡us = 4, perdus = 0 (perte 0%),
Dure approximative des boucles en millisecondes :
Minimum = 0ms, Maximum = 0ms, Moyenne = 0ms
=== 10. TRACEROUTE ANALYSIS ===
--- Trace to Google [8.8.8.8] ---
Dtermination de l'itinraire vers 8.8.8.8 avec un maximum de 15 sauts.
1 <1 ms <1 ms <1 ms 8.8.8.8
Itinraire dtermin.
=== 11. OPEN PORTS [LISTENING] ===
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 1100
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:5040 0.0.0.0:0 LISTENING 9476
TCP 0.0.0.0:5357 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:7680 0.0.0.0:0 LISTENING 23064
TCP 0.0.0.0:7897 0.0.0.0:0 LISTENING 14472
TCP 0.0.0.0:9876 0.0.0.0:0 LISTENING 4672
TCP 0.0.0.0:49664 0.0.0.0:0 LISTENING 896
TCP 0.0.0.0:49665 0.0.0.0:0 LISTENING 796
TCP 0.0.0.0:49666 0.0.0.0:0 LISTENING 1424
TCP 0.0.0.0:49667 0.0.0.0:0 LISTENING 1984
TCP 0.0.0.0:49668 0.0.0.0:0 LISTENING 4172
TCP 0.0.0.0:49670 0.0.0.0:0 LISTENING 868
TCP 127.0.0.1:5354 0.0.0.0:0 LISTENING 4664
TCP 127.0.0.1:6463 0.0.0.0:0 LISTENING 12140
TCP 127.0.0.1:14013 0.0.0.0:0 LISTENING 14348
TCP 127.0.0.1:14016 0.0.0.0:0 LISTENING 14348
TCP 127.0.0.1:14019 0.0.0.0:0 LISTENING 14348
TCP 127.0.0.1:14022 0.0.0.0:0 LISTENING 14348
TCP 127.0.0.1:14023 0.0.0.0:0 LISTENING 14348
TCP 127.0.0.1:19292 0.0.0.0:0 LISTENING 21224
TCP 127.0.0.1:27015 0.0.0.0:0 LISTENING 4544
TCP 127.0.0.1:27060 0.0.0.0:0 LISTENING 15116
TCP 127.0.0.1:34616 0.0.0.0:0 LISTENING 5072
TCP 127.0.0.1:39798 0.0.0.0:0 LISTENING 14472
TCP 127.0.0.1:49738 0.0.0.0:0 LISTENING 15116
TCP 127.0.0.1:49741 0.0.0.0:0 LISTENING 15116
TCP 172.21.128.1:139 0.0.0.0:0 LISTENING 4
TCP 192.168.10.234:139 0.0.0.0:0 LISTENING 4
TCP 198.18.0.1:139 0.0.0.0:0 LISTENING 4
TCP [::]:135 [::]:0 LISTENING 1100
TCP [::]:445 [::]:0 LISTENING 4
TCP [::]:5357 [::]:0 LISTENING 4
TCP [::]:7680 [::]:0 LISTENING 23064
TCP [::]:7897 [::]:0 LISTENING 14472
TCP [::]:49664 [::]:0 LISTENING 896
TCP [::]:49665 [::]:0 LISTENING 796
TCP [::]:49666 [::]:0 LISTENING 1424
TCP [::]:49667 [::]:0 LISTENING 1984
TCP [::]:49668 [::]:0 LISTENING 4172
TCP [::]:49670 [::]:0 LISTENING 868
TCP [::1]:3000 [::]:0 LISTENING 22980
TCP [::1]:34616 [::]:0 LISTENING 5072
TCP [::1]:49669 [::]:0 LISTENING 4740
=== 12. WIRELESS INFORMATION ===
Il existe 1 interface sur le système :
Nom  : Wi-Fi
Description  : Intel(R) Wi-Fi 6 AX200 160MHz
GUID  : 8461ce48-1947-4804-a26b-4bad0b75a951
Adresse physique  : 70:d8:c2:41:6c:9d
État  : connecté
SSID  : CMCC-1603-5G
BSSID  : 10:5f:02:2b:df:28
Type de réseau  : Infrastructure
Type de radio  : 802.11ax
Authentification  : WPA3-Personnel
Chiffrement  : CCMP
Mode de connexion  : Connexion automatique
Canal  : 36
Réception (Mbits/s)  : 2402
Transmission (Mbits/s)  : 1922
Signal  : 99%
Profil  : CMCC-1603-5G
État du réseau hébergé: Non disponible
--- Available WiFi Networks ---
Nom de l’interface : Wi-Fi
Actuellement 1 réseaux sont visibles.
SSID 1 : CMCC-1603-5G
Type de réseau  : Infrastructure
Authentification  : WPA3-Personnel
Chiffrement  : CCMP
BSSID 1  : 10:5f:02:2b:df:28
Signal  : 99%
Type de radio  : 802.11ax
Canal   : 36
Taux de base (Mbits/s) : 6 12 24
Autres taux (Mbits/s)  : 9 18 36 48 54
--- Saved WiFi Profiles ---
Profils sur l’interface Wi-Fi :
Profils de stratégies de groupe (lecture seule)
-----------------------------------------------
<Aucun>
Profils utilisateurs
-------------
Profil Tous les utilisateurs  : CMCC-1603-5G
Profil Tous les utilisateurs  : R2022
Profil Tous les utilisateurs  : CMCC-1603
Profil Tous les utilisateurs  : DIRECT-F4-HP DeskJet 4800 series
Profil Tous les utilisateurs  : Alexis’s iPhone
Profil Tous les utilisateurs  : Freebox_nantes
Profil Tous les utilisateurs  : NetworkProfile
Profil Tous les utilisateurs  : S55
=== 13. FIREWALL STATUS ===
Paramètres Profil de domaine :
----------------------------------------------------------------------
État Actif
Stratégie de pare-feu BlockInbound,AllowOutbound
LocalFirewallRules N/A (magasin d’objets de stratégie de groupe uniquement)
LocalConSecRules N/A (magasin d’objets de stratégie de groupe uniquement)
InboundUserNotification Activer
RemoteManagement Désactiver
UnicastResponseToMulticast Activer
Journalisation :
LogAllowedConnections Désactiver
LogDroppedConnections Désactiver
FileName %systemroot%\system32\LogFiles\Firewall\pfirewall.log
MaxFileSize 4096
Paramètres Profil privé :
----------------------------------------------------------------------
État Actif
Stratégie de pare-feu BlockInbound,AllowOutbound
LocalFirewallRules N/A (magasin d’objets de stratégie de groupe uniquement)
LocalConSecRules N/A (magasin d’objets de stratégie de groupe uniquement)
InboundUserNotification Activer
RemoteManagement Désactiver
UnicastResponseToMulticast Activer
Journalisation :
LogAllowedConnections Désactiver
LogDroppedConnections Désactiver
FileName %systemroot%\system32\LogFiles\Firewall\pfirewall.log
MaxFileSize 4096
Paramètres Profil public :
----------------------------------------------------------------------
État Actif
Stratégie de pare-feu BlockInbound,AllowOutbound
LocalFirewallRules N/A (magasin d’objets de stratégie de groupe uniquement)
LocalConSecRules N/A (magasin d’objets de stratégie de groupe uniquement)
InboundUserNotification Activer
RemoteManagement Désactiver
UnicastResponseToMulticast Activer
Journalisation :
LogAllowedConnections Désactiver
LogDroppedConnections Désactiver
FileName %systemroot%\system32\LogFiles\Firewall\pfirewall.log
MaxFileSize 4096
Ok.
=== 14. NETWORK SHARES ===
Nom partage Ressource Remarque
-------------------------------------------------------------------------------
C$ C:\ Partage par dfaut
E$ E:\ Partage par dfaut
G$ G:\ Partage par dfaut
IPC$ IPC distant
ADMIN$ C:\WINDOWS Administration … distance
La commande s'est termine correctement.
=== 15. PUBLIC IP DETECTION ===
--- Your Public IP ---
162.141.130.188
--- IP Geolocation Info ---
{
"ip": "162.141.130.188",
"city": "Akiruno",
"region": "Tokyo",
"country": "JP",
"loc": "35.7184,139.2875",
"org": "AS63150 BAGE CLOUD LLC",
"postal": "197-0826",
"timezone": "Asia/Tokyo",
"readme": "https://ipinfo.io/missingauth"
}
===================================================================
DIAGNOSTIC COMPLETED - 24/11/2025 22:38:01,22
===================================================================

View File

@ -0,0 +1,304 @@
@echo off
setlocal enabledelayedexpansion
:: ===================================================================
:: NETWORK DIAGNOSTIC ULTIMATE v1.2
:: Analyse complete reseau : Interfaces, VPN, DNS, Routes, Devices, Latency
:: ===================================================================
set OUTPUT_DIR=%~dp0network_analysis
set TIMESTAMP=%date:~-4%%date:~3,2%%date:~0,2%_%time:~0,2%%time:~3,2%%time:~6,2%
set TIMESTAMP=%TIMESTAMP: =0%
set REPORT=%OUTPUT_DIR%\network_report_%TIMESTAMP%.txt
:: Create output directory
if not exist "%OUTPUT_DIR%" mkdir "%OUTPUT_DIR%"
echo ====================================================================
echo NETWORK DIAGNOSTIC ULTIMATE - Starting...
echo ====================================================================
echo.
echo [*] Output: %REPORT%
echo.
:: Start TXT report
(
echo ===================================================================
echo NETWORK DIAGNOSTIC REPORT - %date% %time%
echo ===================================================================
echo.
) > "%REPORT%"
:: ===================================================================
:: SECTION 1: SYSTEM INFORMATION
:: ===================================================================
echo [1/15] Collecting System Information...
(
echo.
echo === 1. SYSTEM INFORMATION ===
echo.
systeminfo | findstr /C:"Host Name" /C:"OS Name" /C:"OS Version" /C:"System Type"
echo.
) >> "%REPORT%"
:: ===================================================================
:: SECTION 2: NETWORK INTERFACES (DETAILED)
:: ===================================================================
echo [2/15] Analyzing Network Interfaces...
(
echo.
echo === 2. NETWORK INTERFACES [DETAILED] ===
echo.
ipconfig /all
echo.
) >> "%REPORT%"
:: ===================================================================
:: SECTION 3: ACTIVE CONNECTIONS
:: ===================================================================
echo [3/15] Listing Active Connections...
(
echo.
echo === 3. ACTIVE NETWORK CONNECTIONS ===
echo.
netstat -ano | findstr ESTABLISHED
echo.
) >> "%REPORT%"
:: ===================================================================
:: SECTION 4: ROUTING TABLE
:: ===================================================================
echo [4/15] Dumping Routing Table...
(
echo.
echo === 4. ROUTING TABLE ===
echo.
route print
echo.
) >> "%REPORT%"
:: ===================================================================
:: SECTION 5: ARP CACHE (Connected Devices)
:: ===================================================================
echo [5/15] Checking ARP Cache [Local Devices]...
(
echo.
echo === 5. ARP CACHE - LOCAL DEVICES ===
echo.
arp -a
echo.
) >> "%REPORT%"
:: ===================================================================
:: SECTION 6: DNS CONFIGURATION
:: ===================================================================
echo [6/15] Analyzing DNS Configuration...
(
echo.
echo === 6. DNS CONFIGURATION ===
echo.
nslookup google.com
echo.
nslookup baidu.com
echo.
) >> "%REPORT%"
:: ===================================================================
:: SECTION 7: VPN DETECTION
:: ===================================================================
echo [7/15] Detecting VPN Connections...
(
echo.
echo === 7. VPN DETECTION ===
echo.
echo --- RAS Connections ---
rasdial
echo.
echo --- Network Adapters [VPN Search] ---
ipconfig /all | findstr /I "VPN TAP Tunnel WireGuard OpenVPN"
echo.
) >> "%REPORT%"
:: ===================================================================
:: SECTION 8: GATEWAY DETECTION and PING
:: ===================================================================
echo [8/15] Testing Gateway Connection...
:: Extract default gateway
for /f "tokens=3" %%a in ('route print ^| findstr "0.0.0.0"') do (
set GATEWAY=%%a
goto :gateway_found
)
:gateway_found
(
echo.
echo === 8. GATEWAY DETECTION ===
echo.
echo Default Gateway: %GATEWAY%
echo.
echo --- Ping Gateway ---
ping -n 4 %GATEWAY%
echo.
) >> "%REPORT%"
:: ===================================================================
:: SECTION 9: INTERNET CONNECTIVITY TESTS
:: ===================================================================
echo [9/15] Testing Internet Connectivity...
(
echo.
echo === 9. INTERNET CONNECTIVITY TESTS ===
echo.
echo --- Google DNS [8.8.8.8] ---
ping -n 4 8.8.8.8
echo.
echo --- Cloudflare DNS [1.1.1.1] ---
ping -n 4 1.1.1.1
echo.
echo --- Baidu [China] ---
ping -n 4 baidu.com
echo.
echo --- Google [International] ---
ping -n 4 google.com
echo.
) >> "%REPORT%"
:: ===================================================================
:: SECTION 10: TRACEROUTE
:: ===================================================================
echo [10/15] Running Traceroute [this may take a while]...
(
echo.
echo === 10. TRACEROUTE ANALYSIS ===
echo.
echo --- Trace to Google [8.8.8.8] ---
tracert -d -h 15 8.8.8.8
echo.
) >> "%REPORT%"
:: ===================================================================
:: SECTION 11: OPEN PORTS
:: ===================================================================
echo [11/15] Scanning Open Ports...
(
echo.
echo === 11. OPEN PORTS [LISTENING] ===
echo.
netstat -ano | findstr LISTENING
echo.
) >> "%REPORT%"
:: ===================================================================
:: SECTION 12: WIRELESS INFO (IF WIFI)
:: ===================================================================
echo [12/15] Collecting Wireless Information...
(
echo.
echo === 12. WIRELESS INFORMATION ===
echo.
netsh wlan show interfaces
echo.
echo --- Available WiFi Networks ---
netsh wlan show networks mode=bssid
echo.
echo --- Saved WiFi Profiles ---
netsh wlan show profiles
echo.
) >> "%REPORT%"
:: ===================================================================
:: SECTION 13: FIREWALL STATUS
:: ===================================================================
echo [13/15] Checking Firewall Status...
(
echo.
echo === 13. FIREWALL STATUS ===
echo.
netsh advfirewall show allprofiles
echo.
) >> "%REPORT%"
:: ===================================================================
:: SECTION 14: NETWORK SHARES
:: ===================================================================
echo [14/15] Listing Network Shares...
(
echo.
echo === 14. NETWORK SHARES ===
echo.
net share
echo.
) >> "%REPORT%"
:: ===================================================================
:: SECTION 15: PUBLIC IP and GEOLOCATION
:: ===================================================================
echo [15/15] Detecting Public IP...
(
echo.
echo === 15. PUBLIC IP DETECTION ===
echo.
echo --- Your Public IP ---
) >> "%REPORT%"
:: Try multiple services
powershell -Command "(Invoke-WebRequest -Uri 'https://api.ipify.org' -UseBasicParsing).Content" >> "%REPORT%" 2>nul
if errorlevel 1 (
powershell -Command "(Invoke-WebRequest -Uri 'https://ifconfig.me' -UseBasicParsing).Content" >> "%REPORT%" 2>nul
)
echo. >> "%REPORT%"
echo --- IP Geolocation Info --- >> "%REPORT%"
powershell -Command "(Invoke-WebRequest -Uri 'https://ipinfo.io/json' -UseBasicParsing).Content" >> "%REPORT%" 2>nul
:: ===================================================================
:: FINALIZE REPORTS
:: ===================================================================
(
echo.
echo ===================================================================
echo DIAGNOSTIC COMPLETED - %date% %time%
echo ===================================================================
) >> "%REPORT%"
:: ===================================================================
:: SUMMARY
:: ===================================================================
echo.
echo ====================================================================
echo DIAGNOSTIC COMPLETED!
echo ====================================================================
echo.
echo [OK] Text Report: %REPORT%
echo.
:: Count devices
for /f %%a in ('arp -a ^| find /c "dynamic"') do set DEVICE_COUNT=%%a
echo [INFO] %DEVICE_COUNT% devices detected on local network
echo [INFO] Default Gateway: %GATEWAY%
echo.
echo [*] Opening report in Notepad...
start notepad "%REPORT%"
echo.
echo Press any key to exit...
pause >nul