` | Conteneur générique (quand rien d'autre ne convient) |
+
+---
+
+## Partie E : Mise en page avec Flexbox (30 min)
+
+### E.1 Introduction à Flexbox
+
+Flexbox est une méthode moderne pour créer des mises en page flexibles.
+
+```css
+.conteneur {
+ display: flex;
+}
+```
+
+### E.2 Propriétés du conteneur flex
+
+```css
+.conteneur {
+ display: flex;
+ flex-direction: row; /* row, column, row-reverse, column-reverse */
+ justify-content: center; /* Alignement horizontal */
+ align-items: center; /* Alignement vertical */
+ flex-wrap: wrap; /* Retour à la ligne si nécessaire */
+ gap: 20px; /* Espacement entre les éléments */
+}
+```
+
+**justify-content** (axe principal) :
+- `flex-start` : début
+- `flex-end` : fin
+- `center` : centré
+- `space-between` : espace entre les éléments
+- `space-around` : espace autour des éléments
+
+**align-items** (axe secondaire) :
+- `flex-start`, `flex-end`, `center`, `stretch`
+
+### E.3 Propriétés des éléments flex
+
+```css
+.element {
+ flex: 1; /* Prend l'espace disponible */
+ flex-basis: 200px; /* Taille de base */
+ order: 2; /* Ordre d'affichage */
+}
+```
+
+### E.4 Exercice interactif : Flexbox Froggy
+
+Maîtrisez Flexbox avec **Flexbox Froggy** :
+
+👉 **[flexboxfroggy.com](https://flexboxfroggy.com)** (24 niveaux)
+
+Objectif : terminer tous les niveaux !
+
+---
+
+## Partie F : Projet - Site "Pastor" (1h30)
+
+Vous allez créer un site de blog culinaire avec une mise en page complète.
+
+### F.1 Préparation
+
+Créez l'arborescence suivante :
+
+```
+TP_CSS/
+├── pages/
+│ └── index.html
+├── images/
+│ └── (télécharger la banque d'images fournie)
+└── styles/
+ └── style.css
+```
+
+### F.2 Structure HTML
+
+Créez `index.html` avec la structure suivante :
+
+```html
+
+
+
+
+
Pastor - Grimoire de la cuisine
+
+
+
+
+
+
+```
+
+### F.3 Contenu HTML détaillé
+
+**Header (`titre_principal` + `nav`)** :
+- Image `pastor.png` (logo)
+- Titre h1 : "Pastor"
+- Titre h2 : "Grimoire de la cuisine"
+- Menu de navigation : Accueil, Blog, CV, Contact (liens vers le site du lycée)
+
+**Bannière (`banniere_image`)** :
+- Texte : "Retour sur mes vacances en Asie... Voir l'article"
+- Image de flèche `flecheblanchedroite.png`
+- Lien de classe `bouton_rouge`
+
+**Article** :
+- Image `ico_epingle.png`
+- Titre h1 : "Je suis un grand gourmand"
+- 5 paragraphes de texte (lorem ipsum)
+
+**Aside** :
+- Titre h1 : "A propos de l'auteur"
+- Image `bulle.png` (id="bulle")
+- Image `pastor.png` (id="pastor")
+- Paragraphe de présentation
+- Icônes : `facebook.png`, `twitter.png`, `vimeo.png`, `flickr.png`, `rss.png`
+
+**Footer** :
+- `tweet` : Titre + 2 paragraphes (class="ragot")
+- `mes_photos` : Titre + 4 images `photo_min_X.jpg`
+- `mes_amis` : Titre + 2 listes (Perceval, Roi Arthur, Léodagan, Karadoc / Merlin, Lancelot, Bohort, Guenièvre)
+
+### F.4 Styles CSS
+
+Créez `style.css` avec les règles suivantes :
+
+#### Styles généraux
+
+```css
+body {
+ background-image: url("../images/fond_jaune.png");
+ font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
+ color: #333333;
+}
+
+#bloc_page {
+ width: 900px;
+ margin: 0 auto; /* Centrage horizontal */
+}
+
+h1 {
+ text-transform: uppercase;
+}
+```
+
+#### Header
+
+```css
+header {
+ background: url("../images/separateur.png") repeat-x bottom;
+}
+
+#titre_principal h1 {
+ font-size: 5em;
+ font-family: Arial, cursive;
+ display: inline-block;
+ margin-bottom: 0;
+}
+
+#titre_principal h2 {
+ font-size: 1.1em;
+ font-family: Verdana, Geneva, sans-serif;
+ margin-top: 0;
+}
+
+nav {
+ display: inline-block;
+ width: 90%;
+ text-align: right;
+}
+
+nav ul {
+ list-style: none;
+}
+
+nav li {
+ display: inline-block;
+ margin-right: 15px;
+}
+
+nav a {
+ font-size: 1.3em;
+ color: #181818;
+ text-decoration: none;
+ padding-bottom: 3px;
+}
+
+nav a:hover {
+ color: #760000;
+ border-bottom: 3px solid #760000;
+}
+```
+
+#### Bannière
+
+```css
+#banniere_image {
+ margin-top: 15px;
+ height: 200px;
+ border-radius: 5px;
+ background: url("../images/bangkok.jpg") no-repeat;
+ background-size: cover;
+ color: white;
+ font-size: 0.8em;
+ position: relative;
+ box-shadow: 0 14px 14px #1c1a19;
+ margin-bottom: 30px;
+}
+
+.bouton_rouge {
+ display: inline-block;
+ height: 20px;
+ position: absolute;
+ background-color: #993300;
+ font-size: 1.2em;
+ color: white;
+ text-align: center;
+ padding: 5px 10px;
+ text-decoration: none;
+}
+```
+
+#### Section (article + aside)
+
+```css
+section {
+ display: flex;
+ gap: 20px;
+}
+
+article {
+ flex: 2; /* Prend 2/3 de l'espace */
+ text-align: justify;
+}
+
+article p {
+ font-size: 0.8em;
+}
+
+aside {
+ flex: 1; /* Prend 1/3 de l'espace */
+ background-color: #706b64;
+ border-radius: 5px;
+ padding: 10px;
+ color: white;
+ font-size: 0.9em;
+ box-shadow: 4px 4px 5px #1c1a19;
+}
+
+#bulle {
+ position: absolute;
+ top: 100px;
+ left: -12px;
+}
+```
+
+#### Footer
+
+```css
+footer {
+ margin-top: 10px;
+ padding: 30px;
+ background: url("../images/separateur.png") no-repeat top;
+ display: flex;
+}
+
+#tweet {
+ width: 25%;
+}
+
+#mes_photos {
+ width: 40%;
+}
+
+#mes_amis {
+ width: 25%;
+}
+
+#mes_photos img {
+ border: 1px solid #181818;
+ margin-right: 2px;
+}
+
+.ragot {
+ font-style: italic;
+}
+
+footer h1 {
+ font-size: 1.1em;
+}
+
+footer p, footer ul {
+ font-size: 0.8em;
+}
+
+.amis {
+ color: #760000;
+ text-decoration: none;
+}
+```
+
+### F.5 Rendu attendu
+
+Votre page doit ressembler à ceci :
+
+```
+┌─────────────────────────────────────────────────────┐
+│ 🍳 Pastor ACCUEIL BLOG CV CONTACT│
+│ Grimoire de la cuisine │
+├─────────────────────────────────────────────────────┤
+│ ╔═══════════════════════════════════════════════╗ │
+│ ║ 🌅 Retour sur mes vacances en Asie... ║ │
+│ ║ [Voir l'article →] ║ │
+│ ╚═══════════════════════════════════════════════╝ │
+├────────────────────────────────┬────────────────────┤
+│ 📌 JE SUIS UN GRAND GOURMAND │ A PROPOS DE │
+│ │ L'AUTEUR │
+│ Blablabla... Blablabla... │ 💬 │
+│ Blablabla... Blablabla... │ 🍳 Blablabla... │
+│ Blablabla... Blablabla... │ 📘🐦📹📷📡 │
+├────────────────────────────────┴────────────────────┤
+│ MON DERNIER MES PHOTOS MES AMIS │
+│ TWEET... [📷][📷] • Perceval • Merlin│
+│ Blablabla... [📷][📷] • Roi Arthur... │
+└─────────────────────────────────────────────────────┘
+```
+
+---
+
+## Résumé des propriétés CSS
+
+### Texte
+| Propriété | Valeurs courantes |
+|-----------|-------------------|
+| `color` | `#333`, `red`, `rgb(0,0,0)` |
+| `font-size` | `16px`, `1.2em`, `1rem` |
+| `font-family` | `Arial, sans-serif` |
+| `font-weight` | `normal`, `bold`, `700` |
+| `text-align` | `left`, `center`, `right`, `justify` |
+| `text-decoration` | `none`, `underline` |
+| `text-transform` | `uppercase`, `lowercase`, `capitalize` |
+
+### Boîte
+| Propriété | Valeurs courantes |
+|-----------|-------------------|
+| `width`, `height` | `300px`, `50%`, `auto` |
+| `margin` | `10px`, `10px 20px`, `auto` |
+| `padding` | `10px`, `10px 20px 10px 20px` |
+| `border` | `1px solid black` |
+| `border-radius` | `5px`, `50%` |
+| `box-shadow` | `4px 4px 5px #999` |
+
+### Arrière-plan
+| Propriété | Valeurs courantes |
+|-----------|-------------------|
+| `background-color` | `#fff`, `transparent` |
+| `background-image` | `url("image.png")` |
+| `background-size` | `cover`, `contain`, `100px` |
+| `background-position` | `center`, `top left` |
+| `background-repeat` | `no-repeat`, `repeat-x` |
+
+### Flexbox
+| Propriété | Valeurs courantes |
+|-----------|-------------------|
+| `display` | `flex` |
+| `flex-direction` | `row`, `column` |
+| `justify-content` | `center`, `space-between` |
+| `align-items` | `center`, `flex-start` |
+| `gap` | `20px` |
+| `flex` | `1`, `2` |
+
+---
+
+## Ressources
+
+- **CSS Diner** : [flukeout.github.io](https://flukeout.github.io) - Sélecteurs CSS
+- **Flexbox Froggy** : [flexboxfroggy.com](https://flexboxfroggy.com) - Flexbox
+- **MDN CSS** : [developer.mozilla.org/fr/docs/Web/CSS](https://developer.mozilla.org/fr/docs/Web/CSS)
+- **Can I Use** : [caniuse.com](https://caniuse.com) - Compatibilité navigateurs
diff --git a/web/tp/TP_HTML.md b/web/tp/TP_HTML.md
new file mode 100644
index 0000000..a1204a8
--- /dev/null
+++ b/web/tp/TP_HTML.md
@@ -0,0 +1,412 @@
+# TP Introduction au langage HTML5
+
+**Spécialité NSI - Première**
+
+---
+
+## Objectifs du TP
+
+- Comprendre l'architecture client-serveur et le protocole HTTP
+- Découvrir la structure d'une page HTML5
+- Maîtriser les balises HTML essentielles
+- Créer une page web complète
+
+**Durée estimée** : 2h
+
+**Matériel** : PC + Navigateur (Firefox, Chrome) + Éditeur de code (VS Code, Notepad++)
+
+---
+
+## Partie A : Comment fonctionne le Web ? (20 min)
+
+### A.1 L'architecture client-serveur
+
+Quand vous tapez une adresse web dans votre navigateur, que se passe-t-il ?
+
+```
+┌─────────────┐ ┌─────────────┐
+│ │ (1) Requête HTTP │ │
+│ NAVIGATEUR │ ─────────────────────────► │ SERVEUR │
+│ (Client) │ │ WEB │
+│ │ ◄───────────────────────── │ │
+│ │ (2) Réponse (code HTML) │ │
+└─────────────┘ └─────────────┘
+```
+
+1. **Le client (navigateur)** envoie une **requête HTTP** au serveur
+2. **Le serveur** renvoie le **code HTML** de la page demandée
+3. **Le navigateur interprète** le code et affiche la page
+
+### A.2 Le protocole HTTP
+
+**HTTP** (*HyperText Transfer Protocol*) est le protocole utilisé sur Internet depuis 1990 pour transférer des pages web.
+
+Une **URL** (*Uniform Resource Locator*) est l'adresse d'une ressource sur le web :
+
+```
+https://www.wikipedia.org/wiki/HTML
+└─┬─┘ └──────┬──────┘ └────┬────┘
+protocole serveur chemin
+```
+
+### A.3 Le HTML
+
+**HTML** (*HyperText Markup Language*) est un langage de **balisage** qui permet de structurer le contenu d'une page web : texte, images, liens...
+
+> **Important** : HTML structure le contenu (le fond), CSS gère l'apparence (la forme).
+
+**Exercice A.1** : Ouvrez n'importe quelle page web, faites un clic droit → "Afficher le code source". Observez la structure du code HTML.
+
+---
+
+## Partie B : Structure d'une page HTML5 (30 min)
+
+### B.1 Les balises
+
+Les pages HTML sont composées de **balises** entourées de chevrons `< >`.
+
+Il existe deux types de balises :
+
+**Balises en paires** (ouvrante + fermante) :
+```html
+
Ceci est un titre
+```
+
+**Balises orphelines** (auto-fermantes) :
+```html
+
+```
+
+### B.2 Les attributs
+
+Les attributs complètent les balises avec des informations supplémentaires :
+
+```html
+
Contenu
+```
+
+Exemple :
+```html
+
+```
+
+### B.3 Structure de base d'une page HTML5
+
+Créez un fichier `page.html` avec le code suivant :
+
+```html
+
+
+
+
+
Ma première page
+
+
+
+
+
+```
+
+| Élément | Rôle |
+|---------|------|
+| `` | Indique qu'il s'agit d'une page HTML5 |
+| `` | Balise racine, englobe tout le contenu |
+| `` | En-tête (métadonnées, titre, liens CSS) |
+| `
` | Encodage des caractères (accents) |
+| `
` | Titre affiché dans l'onglet du navigateur |
+| ` ` | Corps de la page (contenu visible) |
+| `` | Commentaire (non affiché) |
+
+**Exercice B.1** : Créez le fichier `page.html`, ouvrez-le dans votre navigateur. Que voyez-vous ?
+
+---
+
+## Partie C : Organiser le contenu (40 min)
+
+### C.1 Les paragraphes
+
+```html
+
Ceci est un paragraphe.
+
Ceci est un autre paragraphe.
+```
+
+Pour un simple retour à la ligne dans un paragraphe : `
`
+
+### C.2 Les titres
+
+HTML propose 6 niveaux de titres, de `
` (le plus important) à `` :
+
+```html
+Titre principal
+Sous-titre
+Sous-sous-titre
+```
+
+> **Attention** : Ne confondez pas `` (titre de l'onglet) et `` (titre dans la page).
+
+**Exercice C.1** : Dans votre fichier, ajoutez un titre `` et deux paragraphes dans le ``.
+
+### C.3 Mettre en valeur le texte
+
+```html
+ Ce mot est important .
+Ce mot est mis en valeur .
+Ce mot est surligné .
+```
+
+| Balise | Signification | Rendu par défaut |
+|--------|---------------|------------------|
+| `` | Important | **gras** |
+| `` | Emphase | *italique* |
+| `` | Marqué | surligné |
+
+> **Note** : Ces balises indiquent le **sens** du texte, pas son apparence. L'apparence peut être modifiée en CSS.
+
+### C.4 Les listes
+
+**Liste non ordonnée** (à puces) :
+```html
+
+ Premier élément
+ Deuxième élément
+ Troisième élément
+
+```
+
+**Liste ordonnée** (numérotée) :
+```html
+
+ Première étape
+ Deuxième étape
+ Troisième étape
+
+```
+
+**Exercice C.2** : Ajoutez une liste de vos 3 langages de programmation préférés.
+
+---
+
+## Partie D : Les liens (20 min)
+
+### D.1 Lien vers un autre site (lien absolu)
+
+```html
+Visitez le site Python !
+```
+
+### D.2 Lien vers une page de votre site (lien relatif)
+
+Si `page2.html` est dans le même dossier :
+```html
+Aller à la page 2
+```
+
+Si `page2.html` est dans un sous-dossier `pages/` :
+```html
+Aller à la page 2
+```
+
+Si `page2.html` est dans le dossier parent :
+```html
+Aller à la page 2
+```
+
+### D.3 Lien vers une ancre (même page)
+
+Pour créer un sommaire cliquable sur une longue page :
+
+```html
+
+Aller à la section 2
+
+
+Section 2
+```
+
+**Exercice D.1** : Créez deux fichiers HTML qui se lient mutuellement.
+
+---
+
+## Partie E : Les images (15 min)
+
+### E.1 Insérer une image
+
+```html
+
+```
+
+| Attribut | Rôle | Obligatoire |
+|----------|------|-------------|
+| `src` | Chemin vers l'image | Oui |
+| `alt` | Texte alternatif (accessibilité) | Oui |
+| `width` | Largeur en pixels | Non |
+| `height` | Hauteur en pixels | Non |
+
+### E.2 Formats d'images pour le web
+
+| Format | Usage |
+|--------|-------|
+| **JPEG** (.jpg) | Photos |
+| **PNG** (.png) | Illustrations, logos, transparence |
+| **GIF** (.gif) | Animations simples |
+| **SVG** (.svg) | Icônes, logos vectoriels |
+| **WebP** (.webp) | Format moderne, bonne compression |
+
+### E.3 Image cliquable
+
+```html
+
+
+
+```
+
+**Exercice E.1** : Téléchargez une image, placez-la dans un dossier `images/` et insérez-la dans votre page.
+
+---
+
+## Partie F : Les tableaux (25 min)
+
+### F.1 Structure de base
+
+```html
+
+
+ Ligne 1, Cellule 1
+ Ligne 1, Cellule 2
+
+
+ Ligne 2, Cellule 1
+ Ligne 2, Cellule 2
+
+
+```
+
+| Balise | Rôle |
+|--------|------|
+| `` | Définit le tableau |
+| `` | Définit une ligne (*table row*) |
+| `` | Définit une cellule (*table data*) |
+| ` ` | Définit une cellule d'en-tête (*table header*) |
+| `` | Titre du tableau |
+
+### F.2 Tableau avec en-tête
+
+```html
+
+ Liste des élèves
+
+ Nom
+ Prénom
+ Classe
+
+
+ Dupont
+ Marie
+ 1ère NSI
+
+
+```
+
+### F.3 Fusion de cellules
+
+- `colspan="2"` : fusionne 2 cellules horizontalement
+- `rowspan="2"` : fusionne 2 cellules verticalement
+
+```html
+
+
+ Cette cellule occupe 2 colonnes
+
+
+ Cellule 1
+ Cellule 2
+
+
+```
+
+**Exercice F.1** : Créez un tableau de votre emploi du temps (une journée).
+
+---
+
+## Partie G : Balises sémantiques HTML5 (10 min)
+
+HTML5 introduit des balises pour structurer une page de manière sémantique :
+
+```
+┌─────────────────────────────────────┐
+│ │
+├─────────┬───────────────────────────┤
+│ │ │
+│ │ ┌─────────┬─────────┐ │
+│ │ ││ │ │
+│ │ └─────────┴─────────┘ │
+├─────────┴───────────────────────────┤
+│ │
+└─────────────────────────────────────┘
+```
+
+| Balise | Usage |
+|--------|-------|
+| `` | En-tête de page ou de section |
+| `` | Menu de navigation |
+| `` | Contenu principal |
+| `` | Section thématique |
+| `` | Contenu autonome (article, post) |
+| `` | Contenu complémentaire (sidebar) |
+| `` | Pied de page |
+
+---
+
+## Projet final : Créer une page web thématique (30 min)
+
+### Consignes
+
+Réalisez une page web sur un thème de votre choix (film, jeu vidéo, sport, artiste...).
+
+**Éléments obligatoires** :
+- [ ] Structure HTML5 valide
+- [ ] Un titre principal `` et au moins un sous-titre ``
+- [ ] Au moins 3 paragraphes de texte
+- [ ] Au moins 2 images
+- [ ] Une liste (ordonnée ou non)
+- [ ] Un tableau
+- [ ] Au moins un lien externe
+
+**Bonus** :
+- [ ] Utilisation des balises sémantiques (``, ``, ``)
+- [ ] Un menu de navigation avec ancres
+- [ ] Plusieurs pages liées entre elles
+
+### Organisation des fichiers
+
+```
+mon_site/
+├── index.html
+├── page2.html
+└── images/
+ ├── image1.jpg
+ └── image2.png
+```
+
+---
+
+## Résumé des balises essentielles
+
+| Catégorie | Balises |
+|-----------|---------|
+| **Structure** | ``, ``, ``, `` |
+| **Métadonnées** | ` `, `` |
+| **Texte** | ``, ` `, `
`-``, ``, `` |
+| **Listes** | ``, ``, `` |
+| **Liens** | `` |
+| **Images** | ` ` |
+| **Tableaux** | ` `, ``, ``, ` ` |
+| **Sémantique** | ``, ``, ``, ``, ``, ``, `` |
+
+---
+
+## Pour aller plus loin
+
+- **CSS Diner** : [flukeout.github.io](https://flukeout.github.io) - Apprendre les sélecteurs CSS
+- **Flexbox Froggy** : [flexboxfroggy.com](https://flexboxfroggy.com) - Apprendre Flexbox
+- **MDN Web Docs** : [developer.mozilla.org](https://developer.mozilla.org/fr/docs/Web/HTML) - Documentation de référence