diff --git a/banderas/index.html b/banderas/index.html
new file mode 100644
index 0000000..6e146fc
--- /dev/null
+++ b/banderas/index.html
@@ -0,0 +1,20 @@
+
+
+
+
+ Empareja la Bandera
+
+
+
+ Empareja la Bandera
+ Haz clic en una bandera y después en el país correspondiente. ¿Puedes emparejar todas?
+ Aciertos: /
+
+
+
+
+
+
\ No newline at end of file
diff --git a/banderas/script.js b/banderas/script.js
new file mode 100644
index 0000000..0a30390
--- /dev/null
+++ b/banderas/script.js
@@ -0,0 +1,141 @@
+// Lista completa con país y siglas según ISO 3166-1 alpha-2
+const countryList = [
+ { name: "España", code: "ES" }, { name: "Francia", code: "FR" }, { name: "Alemania", code: "DE" }, { name: "Italia", code: "IT" },
+ { name: "Portugal", code: "PT" }, { name: "Reino Unido", code: "GB" }, { name: "Estados Unidos", code: "US" }, { name: "Canadá", code: "CA" },
+ { name: "México", code: "MX" }, { name: "Brasil", code: "BR" }, { name: "Argentina", code: "AR" }, { name: "Chile", code: "CL" },
+ { name: "Japón", code: "JP" }, { name: "China", code: "CN" }, { name: "Australia", code: "AU" }, { name: "Rusia", code: "RU" },
+ { name: "Sudáfrica", code: "ZA" }, { name: "Nueva Zelanda", code: "NZ" }, { name: "India", code: "IN" }, { name: "Egipto", code: "EG" },
+ { name: "Grecia", code: "GR" }, { name: "Turquía", code: "TR" }, { name: "Ucrania", code: "UA" }, { name: "Suecia", code: "SE" },
+ { name: "Noruega", code: "NO" }, { name: "Dinamarca", code: "DK" }, { name: "Finlandia", code: "FI" }, { name: "Irlanda", code: "IE" },
+ { name: "Bélgica", code: "BE" }, { name: "Polonia", code: "PL" }, { name: "Suiza", code: "CH" }, { name: "Países Bajos", code: "NL" }
+];
+
+function getFlagEmoji(code) {
+ // Las banderas se generan a partir de letras usando unicode, no por siglas textuales
+ // Solo funcionan para países con código alpha-2 y script latino
+ if (!code || code.length !== 2) return "";
+ return String.fromCodePoint(
+ ...code.toUpperCase().split("").map(c => 0x1F1E6 + c.charCodeAt(0) - 65)
+ );
+}
+
+// Para elegir N países aleatorios distintos con bandera
+function pickRandomCountries(list, n) {
+ const chosen = [];
+ const used = {};
+ while (chosen.length < n && list.length > 0) {
+ let idx = Math.floor(Math.random() * list.length);
+ let c = list[idx];
+ let flag = getFlagEmoji(c.code);
+ if (flag && !used[c.code]) {
+ chosen.push({name: c.name, code: c.code, flag});
+ used[c.code] = true;
+ }
+ list.splice(idx,1);
+ }
+ return chosen;
+}
+
+let flagsDiv = document.getElementById('flags');
+let countriesDiv = document.getElementById('countries');
+let statusDiv = document.getElementById('status');
+let scoreSpan = document.getElementById('score-value');
+let scoreTotal = document.getElementById('score-total');
+let restartBtn = document.getElementById('restart-btn');
+
+let pairs = [], flags = [], countries = [], selectedFlag = null, selectedCountry = null, score = 0, totalPairs = 12;
+
+function shuffle(arr) {
+ for (let i = arr.length-1; i>0; i--) {
+ const j = Math.floor(Math.random() * (i+1));
+ [arr[i], arr[j]] = [arr[j], arr[i]];
+ }
+}
+
+function startGame() {
+ let fullList = countryList.slice(); // copia
+ pairs = pickRandomCountries(fullList, totalPairs);
+ flags = pairs.map(o=>o);
+ countries = pairs.map(o=>o);
+ shuffle(flags); shuffle(countries);
+ score = 0;
+ scoreSpan.textContent = score;
+ scoreTotal.textContent = pairs.length;
+ selectedFlag = selectedCountry = null;
+ renderFlags();
+ renderCountries();
+ statusDiv.textContent = 'Empareja todas las banderas con su país';
+}
+
+function renderFlags() {
+ flagsDiv.innerHTML = '';
+ flags.forEach((p, i) => {
+ const d = document.createElement('div');
+ d.className = 'flag';
+ d.textContent = p.flag;
+ d.setAttribute('tabindex', 0);
+ d.onclick = () => selectFlag(i);
+ if (p.matched) d.classList.add('matched');
+ if (selectedFlag === i) d.classList.add('selected');
+ flagsDiv.appendChild(d);
+ });
+}
+
+function renderCountries() {
+ countriesDiv.innerHTML = '';
+ countries.forEach((p, i) => {
+ const d = document.createElement('div');
+ d.className = 'country';
+ d.textContent = p.name;
+ d.setAttribute('tabindex', 0);
+ d.onclick = () => selectCountry(i);
+ if (p.matched) d.classList.add('matched');
+ if (selectedCountry === i) d.classList.add('selected');
+ countriesDiv.appendChild(d);
+ });
+}
+
+function selectFlag(i) {
+ if (flags[i].matched) return;
+ selectedFlag = i;
+ renderFlags();
+ if (selectedCountry !== null) checkMatch();
+}
+
+function selectCountry(i) {
+ if (countries[i].matched) return;
+ selectedCountry = i;
+ renderCountries();
+ if (selectedFlag !== null) checkMatch();
+}
+
+function checkMatch() {
+ const flagObj = flags[selectedFlag];
+ const countryObj = countries[selectedCountry];
+ if (flagObj.code === countryObj.code) {
+ flags[selectedFlag].matched = true;
+ countries[selectedCountry].matched = true;
+ score++;
+ scoreSpan.textContent = score;
+ statusDiv.textContent = '¡Correcto!';
+ renderFlags();
+ renderCountries();
+ if (score === pairs.length) {
+ statusDiv.textContent = '¡Has emparejado todas las banderas! 🎉';
+ }
+ } else {
+ statusDiv.textContent = 'No es correcto, intenta otra vez.';
+ setTimeout(() => {
+ statusDiv.textContent = '';
+ selectedFlag = selectedCountry = null;
+ renderFlags();
+ renderCountries();
+ }, 850);
+ return;
+ }
+ selectedFlag = null;
+ selectedCountry = null;
+}
+
+restartBtn.onclick = startGame;
+startGame();
\ No newline at end of file
diff --git a/banderas/styles.css b/banderas/styles.css
new file mode 100644
index 0000000..20d95da
--- /dev/null
+++ b/banderas/styles.css
@@ -0,0 +1,76 @@
+body {
+ background: #eaf4f4;
+ font-family: Arial, sans-serif;
+ text-align: center;
+ color: #22223b;
+}
+h1 {
+ margin-top: 32px;
+ color: #23698f;
+}
+#score {
+ font-size: 1.18em;
+ margin-bottom: 10px;
+ color: #23698f;
+}
+#game {
+ display: flex;
+ justify-content: center;
+ gap: 45px;
+ margin: 30px auto 30px auto;
+}
+.flags, .countries {
+ display: grid;
+ grid-template-columns: 1fr;
+ gap: 12px;
+}
+.flag, .country {
+ background: #fff;
+ border-radius: 10px;
+ box-shadow: 0 1px 6px #bbb;
+ padding: 8px 12px;
+ font-size: 1.5em;
+ cursor: pointer;
+ transition: background .21s, box-shadow .18s;
+ border: 2px solid #f4f9fa;
+ outline: none;
+}
+.flag.selected, .country.selected {
+ background: #82cfff;
+ border-color: #23698f;
+ box-shadow: 0 0 0 2px #23698f;
+}
+.flag.matched, .country.matched {
+ background: #b4f7ab;
+ color: #333;
+ border-color: #3fb950;
+ cursor: default;
+ box-shadow: 0 0 0 2px #3fb950;
+}
+#restart-btn {
+ background: #23698f;
+ color: #fff;
+ font-size: 1em;
+ border: none;
+ border-radius: 7px;
+ padding: 8px 30px;
+ cursor: pointer;
+ margin-bottom: 12px;
+ transition: background .18s;
+}
+#restart-btn:hover {
+ background: #031c34;
+}
+#status {
+ font-size: 1.12em;
+ min-height: 2em;
+ color: #23698f;
+ margin-bottom: 10px;
+}
+@media (max-width: 850px) {
+ #game { flex-direction: column; gap: 32px;}
+ .flags, .countries { grid-template-columns: repeat(2,1fr);}
+}
+@media (max-width: 520px) {
+ .flags, .countries { grid-template-columns: 1fr;}
+}
\ No newline at end of file
diff --git a/index.html b/index.html
index 1621efd..026461a 100644
--- a/index.html
+++ b/index.html
@@ -263,6 +263,14 @@
+
+
🇪🇸
+
Banderas
+
Empereja la bandera con su país correspondiente.
+
Jugar
+
+
+