🎮ArcadeLab

Vivamos los Juegos — XIII Suramericanos 2026 (Alumnos)

by SolarGamer11
1182 lines70.7 KB
▶ Play
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>Vivamos los Juegos — XIII Suramericanos 2026 (Alumnos)</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Nunito:wght@400;700;800;900&family=Inter:wght@600&display=swap" rel="stylesheet">
<!-- Google Material Icons -->
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<style>
/* ============================================================
   TOKENS
============================================================ */
:root{
  --main-gradient: linear-gradient(45deg, #ff7402, #e42153 20%, #3c3ae5);
  --fire:    #ff7402;
  --border:  rgba(255,255,255,.1);
  --card2:   rgba(20,16,50,.8);
  --magenta: #e42153;
  --violet:  #3c3ae5;
  --teal:    #00b4a6;
  --sky:     #0099cc;
  --gold:    #ffb800;
  --ok:      #22c55e;
  --err:     #ef4444;
  --text:    #ffffff;
  --muted:   rgba(255,255,255,.55);
  --border:  rgba(255,255,255,.1);
  --card2:   rgba(20,16,50,.8);
}

/* ============================================================
   BASE
============================================================ */
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{
  background: linear-gradient(135deg, #0f0220 0%, #1a0535 40%, #0a1040 100%);
  color: var(--text);
  font-family:'Nunito',sans-serif;
  min-height:100vh;
  overflow-x:hidden;
}
body::before{
  content:'';position:fixed;inset:0;
  background:
    radial-gradient(ellipse 70% 50% at 10% 0%, rgba(255,116,2,.18) 0%, transparent 55%),
    radial-gradient(ellipse 60% 60% at 90% 100%, rgba(60,58,229,.22) 0%, transparent 55%),
    radial-gradient(ellipse 40% 40% at 50% 50%, rgba(228,33,83,.08) 0%, transparent 60%);
  pointer-events:none;z-index:0;
}

/* ============================================================
   APP (visible siempre)
============================================================ */
#app{
  position:relative;
  z-index:1;
  min-height:100vh;
  display: block; /* siempre visible */
}

.app-header{
  background:rgba(5,3,18,.92);backdrop-filter:blur(16px);
  border-bottom:1px solid rgba(255,255,255,.08);
  position:sticky;top:0;z-index:100;padding:0 20px;
  box-shadow: 0 1px 0 rgba(255,116,2,.3), 0 4px 20px rgba(0,0,0,.4);
}
.app-header::before{
  content:'';position:absolute;top:0;left:0;right:0;height:2px;
  background:linear-gradient(90deg,var(--fire),var(--magenta),var(--violet));
}
.app-header-inner{max-width:980px;margin:0 auto;display:flex;align-items:center;gap:14px;height:62px}

/* Back button oculto porque es solo alumnos, pero lo dejamos invisible o lo cambiamos por información */
.back-btn{
  visibility: hidden;
  opacity: 0;
  width: 0;
  margin: 0;
  padding: 0;
  pointer-events: none;
  display: none;
}
.app-title{
  font-family:'Bebas Neue',sans-serif;
  font-size:1.5rem;
  letter-spacing:3px;
  flex:1;
  text-align:center;
  background:linear-gradient(90deg,var(--fire),var(--magenta));
  -webkit-background-clip:text;-webkit-text-fill-color:transparent;
  background-clip:text;
}
.app-title.student{
  background:linear-gradient(90deg,var(--fire),var(--magenta));
  -webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;
}

/* ============================================================
   TABS
============================================================ */
.tabs-bar{
  background:rgba(5,3,18,.8);backdrop-filter:blur(12px);
  border-bottom:1px solid rgba(255,255,255,.07);
  overflow-x:auto;white-space:nowrap;
}
.tabs-bar::-webkit-scrollbar{height:3px}
.tabs-bar::-webkit-scrollbar-thumb{background:var(--fire);border-radius:3px}
.tabs-inner{max-width:980px;margin:0 auto;display:flex;gap:4px;padding:10px 16px}
.tab-btn{
  background:transparent;border:none;border-radius:30px;
  color:rgba(255,255,255,.5);cursor:pointer;
  font-family:'Nunito',sans-serif;font-size:.78rem;font-weight:800;
  padding:9px 14px;transition:all .25s;white-space:nowrap;
  text-transform:uppercase;letter-spacing:.8px;
}
.tab-btn:hover{color:#fff;background:rgba(255,255,255,.07)}
.tab-btn.active{
  background:linear-gradient(135deg,var(--fire),var(--magenta));
  color:#fff;box-shadow:0 3px 18px rgba(255,116,2,.4);
}
.tab-btn.active.teal{
  background:linear-gradient(135deg,var(--teal),var(--sky));
  box-shadow:0 3px 18px rgba(0,180,166,.4);
}

/* ============================================================
   LAYOUT
============================================================ */
.page-wrap{max-width:980px;margin:0 auto;padding:28px 20px}
.section{animation:fadeUp .35s ease}
@keyframes fadeUp{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}

/* ============================================================
   CARDS
============================================================ */
.card{
  background: rgba(255,255,255,0.06);
  backdrop-filter: blur(16px);
  border: 1px solid rgba(255,255,255,0.12);
  border-radius: 24px;
  padding: 28px;
  margin-bottom: 20px;
  position: relative;
  overflow: hidden;
  color: #fff;
}
.card::before{
  content:'';position:absolute;top:0;left:0;right:0;height:3px;
  background:linear-gradient(90deg,var(--fire),var(--magenta),var(--violet));
}
.card-title{
  font-family:'Bebas Neue',sans-serif;font-size:1.7rem;letter-spacing:2px;
  background:linear-gradient(90deg,var(--gold),var(--fire));
  -webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;
  margin-bottom:8px;
}
.card-desc{color:rgba(255,255,255,.65);font-size:.92rem;line-height:1.6;margin-bottom:18px}
.prog-bar{height:6px;background:rgba(255,255,255,.1);border-radius:6px;margin-bottom:20px;overflow:hidden}
.prog-fill{height:100%;border-radius:6px;transition:width .4s;background:linear-gradient(90deg,var(--fire),var(--magenta))}
.score-pill{
  display:inline-flex;align-items:center;gap:6px;
  background:linear-gradient(135deg,var(--fire),var(--magenta));
  border-radius:30px;font-size:.82rem;font-weight:800;padding:6px 16px;color:#fff;
  box-shadow:0 4px 14px rgba(255,116,2,.35);
}

/* ============================================================
   TRIVIA
============================================================ */
.q-text{font-size:1.05rem;font-weight:800;line-height:1.5;margin-bottom:18px;color:#fff}
.opt-grid{display:grid;gap:9px}
.opt{
  background:rgba(255,255,255,.06);border:2px solid rgba(255,255,255,.12);
  border-radius:14px;color:#fff;cursor:pointer;
  font-family:'Nunito',sans-serif;font-size:.92rem;font-weight:700;
  padding:14px 18px;text-align:left;transition:all .22s;width:100%;
}
.opt:hover:not(:disabled){border-color:var(--fire);background:rgba(255,116,2,.13);color:#fff;}
.opt.correct{background:rgba(34,197,94,.2)!important;border-color:var(--ok)!important;color:#fff!important;}
.opt.wrong{background:rgba(239,68,68,.2)!important;border-color:var(--err)!important;color:#fff!important;}
.opt:disabled{cursor:not-allowed;opacity:.65}
.fb{margin-top:12px;font-size:.88rem;font-weight:700;min-height:22px;color:rgba(255,255,255,.6);}
.tq-nav{display:flex;justify-content:space-between;align-items:center;margin-top:18px}

/* ============================================================
   MEMORY
============================================================ */
.mem-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;max-width:400px;margin:0 auto}
.mc{aspect-ratio:1;cursor:pointer;perspective:600px;border-radius:14px}
.mc-inner{width:100%;height:100%;position:relative;transform-style:preserve-3d;transition:transform .45s;border-radius:14px}
.mc.flipped .mc-inner{transform:rotateY(180deg)}
.mc-f,.mc-b{
  position:absolute;inset:0;border-radius:14px;
  display:flex;align-items:center;justify-content:center;
  backface-visibility:hidden;border:2px solid rgba(255,255,255,.15);
}
.mc-f{
  background:linear-gradient(135deg,var(--fire),var(--magenta));
  font-family:'Bebas Neue',sans-serif;font-size:1rem;letter-spacing:1px;
  color:#fff;
  text-shadow:0 1px 4px rgba(0,0,0,.4);
  box-shadow:0 4px 16px rgba(228,33,83,.3);
}
.mc-b{
  background:rgba(20,16,50,.9);transform:rotateY(180deg);
  font-size:1.6rem;flex-direction:column;gap:3px;
  border-color:rgba(255,255,255,.15);
}
.mc-b span{
  font-size:.5rem;font-weight:800;color:rgba(255,255,255,.6);
  text-transform:uppercase;letter-spacing:.5px;text-align:center;
}
.mc.matched .mc-b{
  border-color:var(--ok);
  box-shadow:0 0 18px rgba(34,197,94,.3);
  background:rgba(34,197,94,.12);
}
.mem-stats{display:flex;gap:12px;justify-content:center;margin:14px 0;flex-wrap:wrap}
.stat-pill{
  background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.12);
  border-radius:30px;font-size:.8rem;font-weight:800;padding:6px 16px;color:var(--gold);
}

/* ============================================================
   COUNTRIES
============================================================ */
.flag-big{
  text-align:center;display:flex;align-items:center;justify-content:center;
  min-height:160px;padding:20px;font-size:100px;line-height:1;transition:all .3s ease;
}
.flag-hint{text-align:center;color:rgba(255,255,255,.55);font-size:.85rem;margin-bottom:14px}
.c-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px}
.flag-img{max-width:240px;max-height:140px;object-fit:contain;border-radius:10px;box-shadow:0 4px 24px rgba(0,0,0,.5)}

/* ============================================================
   VALUES
============================================================ */
.val-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px}
.val-card{
  background:rgba(255,255,255,.06);border:2px solid rgba(255,255,255,.1);
  border-radius:20px;cursor:pointer;padding:22px;text-align:center;transition:all .3s;
}
.val-card:hover{transform:translateY(-5px);border-color:var(--fire);background:rgba(255,116,2,.1);}
.val-card.open{border-color:var(--magenta);background:rgba(228,33,83,.1);}
.val-icon{font-size:2.2rem;margin-bottom:8px;display:block}
.val-name{font-family:'Bebas Neue',sans-serif;font-size:1.2rem;letter-spacing:2px;color:var(--gold)}
.val-desc{color:rgba(255,255,255,.6);font-size:.82rem;margin-top:10px;line-height:1.55;max-height:0;overflow:hidden;transition:max-height .4s}
.val-card.open .val-desc{max-height:200px}

/* ============================================================
   CHALLENGE
============================================================ */
.challenge-cat-grid{display:grid;grid-template-columns:1fr;gap:16px;margin-bottom:30px}
.cat-card{
  background:rgba(255,255,255,.06);border:2px solid rgba(255,255,255,.1);
  border-radius:22px;cursor:pointer;padding:30px 24px;transition:all .3s;text-align:center;
}
.cat-card:hover{transform:translateY(-6px);}
.cat-sport{border-color:rgba(255,116,2,.35);}
.cat-sport:hover{border-color:var(--fire);background:rgba(255,116,2,.08);}
.cat-values{border-color:rgba(0,180,166,.35);}
.cat-values:hover{border-color:var(--teal);background:rgba(0,180,166,.08);}
.cat-card .cc-icon{font-size:3rem;margin-bottom:14px;display:block}
.cat-card h3{font-family:'Bebas Neue',sans-serif;font-size:1.5rem;letter-spacing:2px;margin-bottom:6px;color:#fff;}
.cat-sport h3{color:var(--fire)}
.cat-values h3{color:var(--teal)}
.cat-card p{color:rgba(255,255,255,.55);font-size:.83rem;line-height:1.5}
.cat-badge{display:inline-block;border-radius:20px;font-size:.72rem;font-weight:800;padding:4px 12px;margin-top:10px;text-transform:uppercase;letter-spacing:.5px}
.cb-active{background:rgba(255,116,2,.2);color:var(--fire)}
.cb-done{background:rgba(34,197,94,.2);color:var(--ok)}

/* LEVEL MAP */
.level-map{padding:10px 0}
.lm-header{display:flex;align-items:center;gap:14px;margin-bottom:24px}
.lm-back{
  background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.12);
  border-radius:12px;color:rgba(255,255,255,.65);cursor:pointer;
  font-family:'Nunito',sans-serif;font-size:.85rem;font-weight:800;
  padding:8px 14px;transition:all .2s;
}
.lm-back:hover{color:#fff;background:rgba(255,255,255,.13);}
.lm-title{font-family:'Bebas Neue',sans-serif;font-size:1.8rem;letter-spacing:2px;color:#fff;}
.levels-path{display:flex;flex-direction:column;gap:0;max-width:500px;margin:0 auto}
.level-node{display:flex;align-items:center;gap:18px;padding:16px 0;cursor:pointer}
.level-node.locked-node{opacity:.45;cursor:not-allowed}
.ln-circle{
  width:72px;height:72px;border-radius:50%;display:flex;align-items:center;
  justify-content:center;font-size:1.6rem;flex-shrink:0;transition:all .3s;border:3px solid transparent;
}
.ln-circle.locked{background:rgba(255,255,255,.06);border-color:rgba(255,255,255,.1);filter:grayscale(1)}
.ln-circle.unlocked{
  background:linear-gradient(135deg,var(--fire),var(--magenta));
  border-color:var(--fire);box-shadow:0 0 24px rgba(255,116,2,.45);
}
.ln-circle.completed{background:linear-gradient(135deg,var(--ok),#16a34a);border-color:var(--ok)}
.ln-circle.boss{background:linear-gradient(135deg,var(--gold),#e65c00);border-color:var(--gold)}
.ln-info{flex:1}
.ln-info h4{font-family:'Bebas Neue',sans-serif;font-size:1.2rem;letter-spacing:1.5px;margin-bottom:4px;color:#fff;}
.ln-info p{color:rgba(255,255,255,.5);font-size:.8rem;line-height:1.4}
.ln-stars{color:var(--gold);font-size:1rem;margin-top:4px}

/* CHALLENGE SCREEN */
.chal-screen{padding:0}
.chal-top-bg{
  background:rgba(255,255,255,.06);backdrop-filter:blur(12px);
  border:1px solid rgba(255,255,255,.1);
  border-radius:20px 20px 0 0;padding:18px 18px 10px;margin-bottom:0;
}
.chal-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;flex-wrap:wrap;gap:10px}
.chal-enun{color:rgba(255,255,255,.6);font-size:.9rem;margin-bottom:0;padding:0 2px 8px;}
.chal-back{
  background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.12);
  border-radius:12px;color:rgba(255,255,255,.65);cursor:pointer;
  font-family:'Nunito',sans-serif;font-size:.82rem;font-weight:800;padding:8px 14px;transition:all .2s;
}
.chal-back:hover{color:#fff;background:rgba(255,255,255,.13);}
.chal-title{font-family:'Bebas Neue',sans-serif;font-size:1.4rem;letter-spacing:2px;color:var(--gold)}
.chal-lives{display:flex;gap:4px;font-size:1.2rem}
.chal-body{
  background:rgba(255,255,255,.05);backdrop-filter:blur(12px);
  border:1px solid rgba(255,255,255,.1);
  border-radius:20px;padding:22px;margin-bottom:16px;
}

/* RIDDLE */
.riddle-box{
  background:rgba(0,0,0,.3);border:2px solid rgba(255,255,255,.15);
  backdrop-filter:blur(6px);border-radius:14px;padding:16px;
}
.riddle-label{font-size:.72rem;font-weight:800;color:var(--gold);letter-spacing:2px;text-transform:uppercase;margin-bottom:8px}
.riddle-text{font-size:1rem;font-weight:700;color:#fff;line-height:1.6}
.riddle-clues{margin-top:12px;display:flex;flex-direction:column;gap:6px}
.clue-item{
  font-size:.85rem;color:rgba(255,255,255,.65);padding:7px 12px;
  background:rgba(255,255,255,.05);border-radius:8px;border-left:3px solid var(--gold);
}
.answer-input{
  background:rgba(0,0,0,.4);border:2px solid rgba(255,255,255,.2);
  color:#fff;border-radius:12px;padding:12px 16px;width:100%;font-family:'Nunito',sans-serif;
  font-size:.95rem;outline:none;transition:all .2s;text-transform:uppercase;letter-spacing:1px;text-align:center;
}
.answer-input:focus{border-color:var(--fire);background:rgba(255,116,2,.07);}
.answer-input.shake{animation:shake .4s ease}
@keyframes shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-8px)}75%{transform:translateX(8px)}}
.answer-input.glow{border-color:var(--ok);background:rgba(34,197,94,.08);}
.hint-btn{
  background:rgba(255,184,0,.12);border:1px solid rgba(255,184,0,.35);
  border-radius:12px;color:var(--gold);cursor:pointer;
  font-family:'Nunito',sans-serif;font-size:.82rem;font-weight:800;padding:9px 18px;transition:all .2s;
}
.hint-btn:hover{background:rgba(255,184,0,.22);}
.hint-btn:disabled{opacity:.35;cursor:not-allowed}

/* ORDER */
.order-bank{
  display:flex;flex-wrap:wrap;gap:8px;min-height:44px;margin-bottom:12px;
  background:rgba(255,255,255,.04);border:1px dashed rgba(255,255,255,.12);
  border-radius:12px;padding:10px;
}
.order-answer{
  display:flex;flex-wrap:wrap;gap:8px;min-height:44px;
  background:rgba(255,116,2,.06);border:2px dashed rgba(255,116,2,.3);
  border-radius:12px;padding:10px;margin-bottom:14px;
}
.order-chip{
  background:rgba(255,255,255,.08);border:2px solid rgba(255,255,255,.18);
  border-radius:30px;cursor:pointer;font-size:.82rem;font-weight:800;
  padding:7px 16px;transition:all .2s;color:#fff;user-select:none;
}
.order-chip:hover{border-color:var(--fire);background:rgba(255,116,2,.18);}
.order-chip.placed{background:rgba(255,116,2,.18);border-color:var(--fire);}
.order-chip.correct-chip{border-color:var(--ok);background:rgba(34,197,94,.18);color:#fff;}
.order-chip.wrong-chip{border-color:var(--err);background:rgba(239,68,68,.18);color:#fff;}

/* WIN / RESULT */
.level-win{text-align:center;padding:30px 10px}
.win-stars{font-size:3rem;letter-spacing:8px;margin-bottom:14px}
.win-title{
  font-family:'Bebas Neue',sans-serif;font-size:3rem;letter-spacing:3px;
  background:linear-gradient(135deg,var(--fire),var(--gold));
  -webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;
  line-height:1;margin-bottom:6px;
}
.win-msg{color:rgba(255,255,255,.6);font-size:.95rem;margin-bottom:22px;line-height:1.6}
.xp-bar{background:rgba(255,255,255,.1);border-radius:10px;height:14px;overflow:hidden;margin:0 auto 22px;max-width:300px}
.xp-fill{height:100%;background:linear-gradient(90deg,var(--fire),var(--gold));border-radius:10px;transition:width 1s ease .3s}
.final-win{text-align:center;padding:40px 10px}
.trophy{font-size:6rem;display:block;animation:trophy-bounce 1s ease infinite alternate}
@keyframes trophy-bounce{0%{transform:scale(1) rotate(-3deg)}100%{transform:scale(1.08) rotate(3deg)}}
.fw-title{
  font-family:'Bebas Neue',sans-serif;font-size:clamp(2.5rem,8vw,5rem);letter-spacing:4px;
  background:linear-gradient(135deg,var(--gold),var(--fire));
  -webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;
  line-height:.9;margin:14px 0 8px;
}
.fw-sub{color:rgba(255,255,255,.65);font-size:1rem;font-weight:700;margin-bottom:26px;line-height:1.6}
.res-screen{text-align:center;padding:24px 0}
.res-num{
  font-family:'Bebas Neue',sans-serif;font-size:5rem;
  background:linear-gradient(135deg,var(--fire),var(--gold));
  -webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;line-height:1;
}
.res-lbl{color:rgba(255,255,255,.6);font-size:.92rem;font-weight:700;margin-bottom:18px}

/* CONFETTI */
.confetti-cont{position:fixed;inset:0;pointer-events:none;z-index:999;overflow:hidden}
.conf{position:absolute;width:8px;height:8px;border-radius:2px;animation:conf-fall linear forwards}
@keyframes conf-fall{0%{transform:translateY(-20px) rotate(0deg);opacity:1}100%{transform:translateY(110vh) rotate(720deg);opacity:0}}

.btn{
  background: linear-gradient(135deg, #ff7402, #e42153 50%, #3c3ae5);
  border: none;
  border-radius: 40px;
  color: #fff;
  cursor: pointer;
  font-family: 'Nunito', sans-serif;
  font-weight: 800;
  font-size: .9rem;
  padding: 13px 28px;
  box-shadow: 0 6px 22px rgba(255,116,2,.35);
  transition: all .25s cubic-bezier(0.34,1.56,0.64,1);
  text-transform: uppercase;
  letter-spacing: .5px;
}
.btn:hover{
  transform: translateY(-3px) scale(1.03);
  box-shadow: 0 12px 32px rgba(255,116,2,.5);
}
.btn:active{transform:translateY(-1px) scale(1.01);}
.btn.teal-btn{
  background:linear-gradient(135deg,var(--teal),var(--sky));
  box-shadow:0 5px 18px rgba(0,180,166,.35);
}
.btn.teal-btn:hover{box-shadow:0 10px 28px rgba(0,180,166,.5);}
.btn.ghost{
  background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.18);
  box-shadow:none;color:rgba(255,255,255,.75);
}
.btn.ghost:hover{background:rgba(255,255,255,.14);color:#fff;transform:translateY(-2px);}
.btn.gold-btn{
  background:linear-gradient(135deg,var(--gold),var(--fire));
  box-shadow:0 5px 18px rgba(255,184,0,.35);
}
.btn.gold-btn:hover{box-shadow:0 10px 28px rgba(255,184,0,.5);}
.btn-row{display:flex;gap:10px;flex-wrap:wrap;margin-top:16px;justify-content:flex-end}

footer{
  text-align:center;padding:36px 20px;
  color:rgba(255,255,255,.35);font-size:.8rem;position:relative;z-index:1;
}
footer strong{color:var(--fire)}
</style>
</head>
<body>

<div id="app">
  <div class="app-header">
    <div class="app-header-inner">
      <button class="back-btn" id="btn-back" style="display:none">&#x2190; Inicio</button>
      <div class="app-title" id="app-title">🏅 VIVAMOS LOS JUEGOS</div>
    </div>
  </div>
  <div class="tabs-bar">
    <div class="tabs-inner" id="tabs-inner"></div>
  </div>
  <div class="page-wrap" id="page-wrap"></div>
</div>

<footer>
  <strong>Vivamos los Juegos</strong> &middot; XIII Juegos Suramericanos Santa Fe 2026<br>
  Comit&eacute; Ol&iacute;mpico Argentino + Ministerio de Educaci&oacute;n de Santa Fe
</footer>

<div class="confetti-cont" id="confetti-cont"></div>

<script>
// ============================================================
// FLAGS & DATA
// ============================================================
const FLAG_SVG = {
  ar: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjEyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMjAwIiBoZWlnaHQ9IjQwIiBmaWxsPSIjNzRBQ0RGIi8+PHJlY3QgeT0iNDAiIHdpZHRoPSIyMDAiIGhlaWdodD0iNDAiIGZpbGw9IiNGRkZGRkYiLz48cmVjdCB5PSI4MCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSI0MCIgZmlsbD0iIzc0QUNERiIvPjxjaXJjbGUgY3g9IjEwMCIgY3k9IjYwIiByPSIxMiIgZmlsbD0iI0ZDQzgxOSIvPjwvc3ZnPg==",
  br: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjEyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMjAwIiBoZWlnaHQ9IjEyMCIgZmlsbD0iIzAwN0MzRiIvPjxwb2x5Z29uIHBvaW50cz0iMTAwLDIwIDE3MCw2MCAxMDAsMTAwIDMwLDYwIiBmaWxsPSIjRkZDQzAwIi8+PGNpcmNsZSBjeD0iMTAwIiBjeT0iNjAiIHI9IjIwIiBmaWxsPSIjMDAyQjdGIi8+PC9zdmc+",
  cl: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjEyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMjAwIiBoZWlnaHQ9IjYwIiBmaWxsPSIjMDAzQTcwIi8+PHJlY3QgeT0iNjAiIHdpZHRoPSIyMDAiIGhlaWdodD0iNjAiIGZpbGw9IiNFRjNCMkQiLz48cmVjdCB3aWR0aD0iNjAiIGhlaWdodD0iNjAiIGZpbGw9IiNGRkZGRkYiLz48cG9seWdvbiBwb2ludHM9IjMwLDE1IDM2LDMzIDU1LDMzIDQwLDQ0IDQ2LDYzIDMwLDUyIDE0LDYzIDIwLDQ0IDUsMzMgMjQsMzMiIGZpbGw9IiNFRjNCMkQiLz48L3N2Zz4=",
  co: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjEyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMjAwIiBoZWlnaHQ9IjYwIiBmaWxsPSIjRkZDQzAwIi8+PHJlY3QgeT0iNjAiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiMwMDMzOTkiLz48cmVjdCB5PSI5MCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIzMCIgZmlsbD0iI0NFMTEyNiIvPjwvc3ZnPg==",
  uy: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjEyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMjAwIiBoZWlnaHQ9IjEyMCIgZmlsbD0iI0ZGRkZGRiIvPjxyZWN0IHk9IjAiIHdpZHRoPSIyMDAiIGhlaWdodD0iMTUiIGZpbGw9IiMwMDM4OEYiLz48cmVjdCB5PSIzMCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIxNSIgZmlsbD0iIzAwMzg4RiIvPjxyZWN0IHk9IjYwIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjE1IiBmaWxsPSIjMDAzODhGIi8+PHJlY3QgeT0iOTAiIHdpZHRoPSIyMDAiIGhlaWdodD0iMTUiIGZpbGw9IiMwMDM4OEYiLz48cmVjdCB3aWR0aD0iNjAiIGhlaWdodD0iNjAiIGZpbGw9IiNGRkZGRkYiLz48Y2lyY2xlIGN4PSIzMCIgY3k9IjMwIiByPSIxMiIgZmlsbD0iI0ZGQjgxQyIvPjwvc3ZnPg==",
  pe: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjEyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iNjYiIGhlaWdodD0iMTIwIiBmaWxsPSIjQ0UxMTI2Ii8+PHJlY3QgeD0iNjYiIHdpZHRoPSI2OCIgaGVpZ2h0PSIxMjAiIGZpbGw9IiNGRkZGRkYiLz48cmVjdCB4PSIxMzQiIHdpZHRoPSI2NiIgaGVpZ2h0PSIxMjAiIGZpbGw9IiNDRTExMjYiLz48L3N2Zz4=",
  bo: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjEyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMjAwIiBoZWlnaHQ9IjQwIiBmaWxsPSIjQ0UxMTI2Ii8+PHJlY3QgeT0iNDAiIHdpZHRoPSIyMDAiIGhlaWdodD0iNDAiIGZpbGw9IiNGNkQ5MTAiLz48cmVjdCB5PSI4MCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSI0MCIgZmlsbD0iIzAwN0EzRCIvPjwvc3ZnPg==",
  ec: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjEyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMjAwIiBoZWlnaHQ9IjYwIiBmaWxsPSIjRkZEMTAwIi8+PHJlY3QgeT0iNjAiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiMwMDMzOTkiLz48cmVjdCB5PSI5MCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIzMCIgZmlsbD0iI0NDMDAwMSIvPjwvc3ZnPg==",
  py: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjEyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMjAwIiBoZWlnaHQ9IjQwIiBmaWxsPSIjQ0UxMTI2Ii8+PHJlY3QgeT0iNDAiIHdpZHRoPSIyMDAiIGhlaWdodD0iNDAiIGZpbGw9IiNGRkZGRkYiLz48cmVjdCB5PSI4MCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSI0MCIgZmlsbD0iIzAxMEVBMCIvPjxjaXJjbGUgY3g9IjEwMCIgY3k9IjYwIiByPSIxMiIgZmlsbD0iI0Y3RUMwMCIvPjwvc3ZnPg==",
  ve: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjEyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMjAwIiBoZWlnaHQ9IjQwIiBmaWxsPSIjQ0YxNDJCIi8+PHJlY3QgeT0iNDAiIHdpZHRoPSIyMDAiIGhlaWdodD0iNDAiIGZpbGw9IiMwMDMzOTkiLz48cmVjdCB5PSI4MCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSI0MCIgZmlsbD0iI0NGMTQyQiIvPjxyZWN0IHk9IjAiIHdpZHRoPSIyMDAiIGhlaWdodD0iNDAiIGZpbGw9IiNGRkNBMDAiLz48L3N2Zz4=",
  pa: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjEyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjYwIiBmaWxsPSIjRkZGRkZGIi8+PHJlY3QgeD0iMTAwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjYwIiBmaWxsPSIjREExNjI1Ii8+PHJlY3QgeT0iNjAiIHdpZHRoPSIxMDAiIGhlaWdodD0iNjAiIGZpbGw9IiMwMDMzQTEiLz48cmVjdCB4PSIxMDAiIHk9IjYwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjYwIiBmaWxsPSIjRkZGRkZGIi8+PC9zdmc+",
  gy: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjEyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMjAwIiBoZWlnaHQ9IjEyMCIgZmlsbD0iIzAwOTczNSIvPjxwb2x5Z29uIHBvaW50cz0iMCwwIDE2MCw2MCAwLDEyMCIgZmlsbD0iI0ZGQ0MwMCIvPjxwb2x5Z29uIHBvaW50cz0iMCwxMCAxMzAsNjAgMCwxMTAiIGZpbGw9IiNGRkZGRkYiLz48cG9seWdvbiBwb2ludHM9IjAsMjAgMTAwLDYwIDAsMTAwIiBmaWxsPSIjQ0UxMTI2Ii8+PC9zdmc+",
  sr: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjEyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMjAwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjMzc3RTNGIi8+PHJlY3QgeT0iMjQiIHdpZHRoPSIyMDAiIGhlaWdodD0iMjQiIGZpbGw9IiNGRkZGRkYiLz48cmVjdCB5PSI0OCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyNCIgZmlsbD0iI0IzMDkyMSIvPjxyZWN0IHk9IjcyIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjRkZGRkZGIi8+PHJlY3QgeT0iOTYiIHdpZHRoPSIyMDAiIGhlaWdodD0iMjQiIGZpbGw9IiMzNzdFM0YiLz48cG9seWdvbiBwb2ludHM9IjEwMCwzNSAxMDgsNDggMTIzLDQ4IDExMiw1NiAxMTYsNzIgMTAwLDYzIDg0LDcyIDg4LDU2IDc3LDQ4IDkyLDQ4IiBmaWxsPSIjRkZGMDAwIi8+PC9zdmc+",
  aw: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjEyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMjAwIiBoZWlnaHQ9IjEyMCIgZmlsbD0iIzAwOTlDNyIvPjxyZWN0IHk9IjkwIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjE1IiBmaWxsPSIjRkZCODFDIi8+PHJlY3QgeT0iMTA1IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjE1IiBmaWxsPSIjRkZCODFDIi8+PHBvbHlnb24gcG9pbnRzPSIyNSwyNSAzMSwxMiAzNywyNSA0NywyNiAzOSwzMyA0MSw0MyAzMSwzNyAyMSw0MyAyMywzMyAxNSwyNiIgZmlsbD0iI0ZGRkZGRiIvPjwvc3ZnPg==",
  cw: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjEyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMjAwIiBoZWlnaHQ9IjEyMCIgZmlsbD0iIzAwMkI3RiIvPjxyZWN0IHk9Ijg0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjE4IiBmaWxsPSIjRjlFMTAwIi8+PGNpcmNsZSBjeD0iNTAiIGN5PSI0MCIgcj0iMTAiIGZpbGw9IiNGRkZGRkYiLz48Y2lyY2xlIGN4PSI3MCIgY3k9IjMwIiByPSI3IiBmaWxsPSIjRkZGRkZGIi8+PC9zdmc+"
};

const FLAG_REMOTE = {
  ar:"https://flagcdn.com/w320/ar.png", br:"https://flagcdn.com/w320/br.png", cl:"https://flagcdn.com/w320/cl.png",
  co:"https://flagcdn.com/w320/co.png", uy:"https://flagcdn.com/w320/uy.png", pe:"https://flagcdn.com/w320/pe.png",
  bo:"https://flagcdn.com/w320/bo.png", ec:"https://flagcdn.com/w320/ec.png", py:"https://flagcdn.com/w320/py.png",
  ve:"https://flagcdn.com/w320/ve.png", pa:"https://flagcdn.com/w320/pa.png", gy:"https://flagcdn.com/w320/gy.png",
  sr:"https://flagcdn.com/w320/sr.png", aw:"https://flagcdn.com/w320/aw.png", cw:"https://flagcdn.com/w320/cw.png"
};

const FLAG_EMOJI = {
  ar:"🇦🇷", br:"🇧🇷", cl:"🇨🇱", co:"🇨🇴", uy:"🇺🇾",
  pe:"🇵🇪", bo:"🇧🇴", ec:"🇪🇨", py:"🇵🇾", ve:"🇻🇪",
  pa:"🇵🇦", gy:"🇬🇾", sr:"🇸🇷", aw:"🇦🇼", cw:"🇨🇼"
};

const TRIVIA = [
  {q:"¿En qué año y mes se realizan los XIII Juegos Suramericanos?",opts:["Septiembre 2026","Mayo 2026","Noviembre 2025","Agosto 2027"],ans:0,exp:"Del 12 al 26 de septiembre de 2026 en Santa Fe."},
  {q:"¿En cuántas ciudades de Santa Fe se realizarán los Juegos?",opts:["2 ciudades","3 ciudades","4 ciudades","1 ciudad"],ans:1,exp:"Rosario, Santa Fe capital y Rafaela son las 3 sedes."},
  {q:"¿Cuántos países participarán de los XIII Juegos Suramericanos?",opts:["10 países","12 países","15 países","20 países"],ans:2,exp:"Participan 15 países de América del Sur y el Caribe."},
  {q:"¿Cuál es el nombre de la mascota oficial de los Juegos?",opts:["SURI","CAPI","CARPINCHO","CARLI"],ans:1,exp:"CAPI es la mascota oficial, un carpincho con uniforme deportivo."},
  {q:"¿Cuáles son los 3 valores centrales del Movimiento Olímpico?",opts:["Velocidad, Fuerza, Resistencia","Respeto, Amistad, Excelencia","Honor, Gloria, Nación","Salud, Belleza, Armonía"],ans:1,exp:"El Olimpismo se basa en Respeto, Amistad y Excelencia."},
  {q:"¿Cuántos deportes tiene el programa de los Juegos 2026?",opts:["30 deportes","40 deportes","50 deportes","60 deportes"],ans:2,exp:"El programa incluye 50 deportes y 60 disciplinas deportivas."},
  {q:"¿Qué programa educativo internacional respalda 'Vivamos los Juegos'?",opts:["UNESCO","COI (Comité Olímpico Internacional)","FIFA","CONMEBOL"],ans:1,exp:"El COI (Comité Olímpico Internacional) respalda 'Vivamos los Juegos'."},
  {q:"¿Cuántos atletas aproximadamente participarán en los Juegos?",opts:["Más de 1000","Más de 2000","Más de 4000","Más de 8000"],ans:2,exp:"Se espera la participación de más de 4000 atletas."},
  {q:"¿Cuántos días de competencia tienen los Juegos?",opts:["10 días","15 días","20 días","30 días"],ans:1,exp:"Del 12 al 26 de septiembre son exactamente 15 días."},
  {q:"¿Cuál de estos deportes SÍ está en el programa de los Juegos 2026?",opts:["Fútbol Americano","Karting","Béisbol","Motociclismo"],ans:2,exp:"El Béisbol sí forma parte del programa oficial de los Juegos."}
];

const COUNTRIES = [
  {name:"Argentina",  code:"ar"},{name:"Brasil",     code:"br"},{name:"Chile",      code:"cl"},
  {name:"Colombia",   code:"co"},{name:"Uruguay",    code:"uy"},{name:"Perú",       code:"pe"},
  {name:"Bolivia",    code:"bo"},{name:"Ecuador",    code:"ec"},{name:"Paraguay",   code:"py"},
  {name:"Venezuela",  code:"ve"},{name:"Panamá",     code:"pa"},{name:"Guyana",     code:"gy"},
  {name:"Suriname",   code:"sr"},{name:"Aruba",      code:"aw"},{name:"Curaçao",    code:"cw"}
];

const VALUES_DATA = [
  {icon:"🙏",name:"Respeto",desc:"Valorar al rival, al árbitro y las reglas. Respetar es reconocer al otro como igual, sin importar su origen o nivel."},
  {icon:"🌟",name:"Excelencia",desc:"Dar lo mejor de uno mismo. No solo ganar: mejorar constantemente, aprender de los errores y superarse con esfuerzo."},
  {icon:"⚖️",name:"Juego Limpio",desc:"Competir con honestidad y fair play. Ganar importa, pero cómo ganás importa más. El deporte sin integridad pierde su valor."},
  {icon:"😄",name:"Alegría del Esfuerzo",desc:"Encontrar satisfacción en el proceso de entrenar y superarse. La alegría no está solo en el podio, sino en cada intento."},
  {icon:"🧘",name:"Equilibrio",desc:"Integrar cuerpo, mente y voluntad. Los grandes atletas cuidan su salud mental tanto como la física."}
];

const CHALLENGES = {
  sports:{
    label:"Camino Deportivo",icon:"🏅",color:"var(--fire)",
    levels:[
      {id:0,title:"Nivel 1 — El Desafío del Atleta",icon:"🏃",type:"riddle",
       intro:"Sos parte de la delegación argentina. Para competir, ¡necesitás conocer los Juegos!",
       tasks:[
         {type:"riddle",riddle:"Soy un evento multideportivo que se celebra en Sudamérica cada 4 años. En 2026 llego a Santa Fe. Tengo 50 deportes y más de 4000 atletas. ¿Qué soy?",
          clues:["Empezamos en 1978 en La Paz, Bolivia","Me llaman los Juegos del continente sur","Mi edición 2026 es la número XIII"],
          answer:"JUEGOS SURAMERICANOS",altAnswers:["XIII JUEGOS SURAMERICANOS","LOS JUEGOS SURAMERICANOS","SURAMERICANOS"]},
         {type:"choice",question:"¿En cuáles de estas ciudades se realizarán los Juegos 2026?",
          opts:["Buenos Aires, Córdoba, Mendoza","Rosario, Santa Fe, Rafaela","Rosario, Buenos Aires, Santa Fe","Santa Fe, Rafaela, Córdoba"],
          correct:1,explain:"Las 3 sedes son Rosario, Santa Fe capital y Rafaela."}
       ]},
      {id:1,title:"Nivel 2 — El Vestuario",icon:"🎽",type:"mixed",
       intro:"¡Superaste el primer control! Ahora demostrá que conocés los deportes.",
       tasks:[
         {type:"order",instruction:"Ordená estos deportes de menor a mayor duración típica de competencia:",
          items:["Atletismo 100m","Natación 50m libre","Maratón","Triatlón"],
          correct:["Atletismo 100m","Natación 50m libre","Maratón","Triatlón"]},
         {type:"choice",question:"¿Cuál de estos NO es un deporte del programa de los Juegos 2026?",
          opts:["Lacrosse","Ciclismo","Levantamiento de Pesas","Hockey"],correct:0,
          explain:"El Lacrosse no está en el programa 2026. Sí están Ciclismo, Levantamiento de Pesas y Hockey."}
       ]},
      {id:2,title:"Nivel 3 — La Cancha",icon:"🏟️",type:"mixed",
       intro:"¡Casi llegás al podio! Demostrá que conocés los países y el espíritu olímpico.",
       tasks:[
         {type:"choice",question:"¿Cuántos países participan en los XIII Juegos Suramericanos 2026?",
          opts:["10 países","12 países","15 países","18 países"],correct:2,
          explain:"Son 15 países: Argentina, Aruba, Bolivia, Brasil, Chile, Colombia, Curaçao, Ecuador, Guyana, Panamá, Paraguay, Perú, Suriname, Uruguay y Venezuela."},
         {type:"choice",question:"Un jugador se enoja cuando pierde, pero luego se disculpa con su rival. ¿Qué pilar se relaciona más?",
          opts:["Juego Limpio","Practicar el Respeto","Búsqueda de la Excelencia"],correct:1,
          explain:"Disculparse y reconocer el error es la esencia de Practicar el Respeto."}
       ]},
      {id:3,title:"FINAL — El Podio 🥇",icon:"🏆",type:"boss",
       intro:"¡Este es el desafío final! Demostrá que sos el/la campeón/a de los Juegos Suramericanos.",
       tasks:[
         {type:"choice",question:"¿Qué significa el lema olímpico 'Citius, Altius, Fortius'?",
          opts:["Rápido, Alto, Fuerte","Más rápido, Más alto, Más fuerte","Velocidad, Altura, Fuerza","Correr, Saltar, Luchar"],
          correct:1,explain:"El lema olímpico significa 'Más rápido, Más alto, Más fuerte'."},
         {type:"order",instruction:"Organizá el orden correcto de una Ceremonia de Apertura olímpica:",
          items:["Encendido del pebetero","Desfile de delegaciones","Discurso inaugural","Juramento olímpico","Entrada del atleta con la antorcha"],
          correct:["Desfile de delegaciones","Discurso inaugural","Juramento olímpico","Entrada del atleta con la antorcha","Encendido del pebetero"]}
       ]}
    ]
  },
  values:{
    label:"Camino de los Valores",icon:"⭐",color:"var(--teal)",
    levels:[
      {id:0,title:"Nivel 1 — Los Cimientos",icon:"🌱",type:"riddle",
       intro:"El Olimpismo es más que deporte. Es un estilo de vida. ¿Cuánto sabés sobre sus valores?",
       tasks:[
         {type:"choice",question:"¿Cuáles son los 3 valores del Movimiento Olímpico?",
          opts:["Velocidad, Fuerza, Resistencia","Respeto, Amistad, Excelencia","Honor, Gloria, Nación"],
          correct:1,explain:"Respeto, Amistad y Excelencia son los tres valores fundamentales del Olimpismo."}
       ]},
      {id:1,title:"Nivel 2 — El Corazón Olímpico",icon:"💙",type:"mixed",
       intro:"Los valores olímpicos se viven, no solo se estudian. ¡Demostralo!",
       tasks:[
         {type:"choice",question:"Un atleta perdió la final por milésimas de segundo. ¿Qué actitud olímpica muestra?",
          opts:["Se enoja con el árbitro y protesta","Felicita al ganador y analiza cómo mejorar","Se niega a subir al podio","Acusa al rival de hacer trampa"],
          correct:1,explain:"Felicitar al rival y reflexionar sobre la mejora personal es la esencia del fair play."}
       ]},
      {id:2,title:"Nivel 3 — El Espíritu",icon:"✨",type:"mixed",
       intro:"Los grandes atletas hablan con sus acciones. ¿Podés descifrar sus mensajes?",
       tasks:[
         {type:"choice",question:"El programa 'Vivamos los Juegos' aspira principalmente a:",
          opts:["Entrenar atletas de élite para los Juegos","Transmitir el legado olímpico a estudiantes de Santa Fe","Recaudar fondos para los Juegos"],
          correct:1,explain:"El programa busca acercar el movimiento olímpico a la realidad social de los estudiantes."}
       ]},
      {id:3,title:"FINAL — El Legado 🌟",icon:"👑",type:"boss",
       intro:"Este es el desafío final del Camino de los Valores. ¡Demostrá que el Olimpismo vive en vos!",
       tasks:[
         {type:"choice",question:"¿Cuál de estas frases resume mejor el Olimpismo?",
          opts:["Ganar a cualquier costo","Lo importante es participar y superarse","Solo importa el podio"],
          correct:1,explain:"El Olimpismo valora la participación, el esfuerzo y la superación personal por encima del resultado."}
       ]}
    ]
  }
};

// ============================================================
// GLOBAL STATE
// ============================================================
let currentTab = null;
let tqIndex=0, tqScore=0, tqAnswered=false;
let cQueue=[], cScore=0;
let mCards=[], mFlipped=[], mMatched=0, mAttempts=0, mTimer=null, mSecs=0;
let chalState = {
  sports:{unlocked:[0],completed:[],stars:{}},
  values:{unlocked:[0],completed:[],stars:{}}
};
let activeChalCat=null, activeChalLevel=null, activeChalTask=0;
let chalLives=3, chalCorrect=0, orderAnswer=[], multiSelected=[], hintIdx=0;

// ============================================================
// INIT
// ============================================================
document.addEventListener('DOMContentLoaded', function() {
  buildStudentTabs();
  renderStudentContent('trivia');
  currentTab = 'trivia';
});

const STUDENT_TABS = [
  {id:'trivia',label:'🏅 Trivia'},
  {id:'challenge',label:'🔥 Desafíos'},
  {id:'memory',label:'🧠 Memoria'},
  {id:'countries',label:'🌍 Países'},
  {id:'values',label:'⭐ Valores'},
];

function buildStudentTabs() {
  var bar = document.getElementById('tabs-inner');
  bar.innerHTML = '';
  STUDENT_TABS.forEach(function(t, i) {
    var btn = document.createElement('button');
    btn.className = 'tab-btn' + (i===0 ? ' active' : '');
    btn.textContent = t.label;
    btn.addEventListener('click', function() {
      switchStudentTab(t.id, btn);
    });
    bar.appendChild(btn);
  });
}

function switchStudentTab(id, btn) {
  document.querySelectorAll('.tab-btn').forEach(function(b) { b.classList.remove('active'); });
  btn.classList.add('active');
  currentTab = id;
  renderStudentContent(id);
}

function renderStudentContent(id) {
  var wrap = document.getElementById('page-wrap');
  wrap.innerHTML = '';
  var sec = document.createElement('div');
  sec.className = 'section';
  if (id==='trivia') sec.innerHTML = buildTrivia();
  else if (id==='challenge') sec.innerHTML = buildChallengeHome();
  else if (id==='memory') sec.innerHTML = buildMemoryHTML();
  else if (id==='countries') sec.innerHTML = buildCountriesHTML();
  else if (id==='values') sec.innerHTML = buildValuesHTML();
  wrap.appendChild(sec);
  
  if (id==='trivia') initTrivia();
  else if (id==='memory') initMemory();
  else if (id==='countries') initCountries();
  else if (id==='values') initValues();
  else if (id==='challenge') updateCatBadges();
}

function buildTrivia() {
  return '<div class="card"><div class="card-title">🏅 Trivia Olímpica</div><div class="card-desc">10 preguntas sobre los Juegos Suramericanos 2026 y el Olimpismo.</div><div class="prog-bar"><div class="prog-fill" id="tq-prog" style="width:10%"></div></div><div id="tq-q" class="q-text"></div><div id="tq-opts" class="opt-grid"></div><div id="tq-fb" class="fb"></div><div class="tq-nav"><div class="score-pill">Puntaje: <span id="tq-score">0</span></div><button class="btn" id="tq-next" style="display:none">Siguiente →</button></div></div>';
}
function initTrivia() {
  tqIndex=0; tqScore=0; tqAnswered=false;
  renderTQ();
  document.getElementById('tq-next').addEventListener('click', nextTQ);
}
function renderTQ() {
  if (tqIndex>=TRIVIA.length) { showTQResult(); return; }
  var q=TRIVIA[tqIndex];
  document.getElementById('tq-prog').style.width=((tqIndex+1)/TRIVIA.length*100)+'%';
  document.getElementById('tq-q').textContent=(tqIndex+1)+'. '+q.q;
  var o=document.getElementById('tq-opts'); o.innerHTML='';
  q.opts.forEach(function(opt,i) {
    var b=document.createElement('button'); b.className='opt'; b.textContent=opt;
    b.addEventListener('click', function() { selectTQ(i); });
    o.appendChild(b);
  });
  document.getElementById('tq-fb').innerHTML='';
  document.getElementById('tq-next').style.display='none';
  tqAnswered=false;
}
function selectTQ(i) {
  if(tqAnswered) return; tqAnswered=true;
  var q=TRIVIA[tqIndex];
  document.querySelectorAll('#tq-opts .opt').forEach(function(b,idx) {
    b.disabled=true;
    if(idx===q.ans) b.classList.add('correct');
    else if(idx===i&&i!==q.ans) b.classList.add('wrong');
  });
  if(i===q.ans) tqScore++;
  document.getElementById('tq-score').textContent=tqScore;
  document.getElementById('tq-fb').innerHTML=i===q.ans
    ?'✅ <span style="color:var(--ok)">¡Correcto! '+q.exp+'</span>'
    :'❌ <span style="color:var(--err)">'+q.exp+'</span>';
  document.getElementById('tq-next').style.display='block';
}
function nextTQ() { tqIndex++; renderTQ(); }
function showTQResult() {
  var p=Math.round(tqScore/TRIVIA.length*100);
  var stars=p>=80?'🥇🥇🥇':p>=50?'🥈🥈':'🥉';
  var msg=p>=80?'¡Campeón/a olímpico/a!':p>=50?'¡Buen desempeño!':'¡Seguí entrenando!';
  document.querySelector('.card').innerHTML='<div class="res-screen"><div style="font-size:3rem">'+stars+'</div><div class="res-num">'+tqScore+'/'+TRIVIA.length+'</div><div class="res-lbl">'+msg+'</div><button class="btn" id="btn-replay-trivia" style="margin-top:12px">↺ Jugar de nuevo</button></div>';
  document.getElementById('btn-replay-trivia').addEventListener('click', initTrivia);
}

const MEM_PAIRS=[
  {emoji:'🏊',label:'Natación'},{emoji:'🤸',label:'Gimnasia'},
  {emoji:'🚴',label:'Ciclismo'},{emoji:'⚽',label:'Fútbol'},
  {emoji:'🏐',label:'Voleibol'},{emoji:'🥊',label:'Boxeo'},
  {emoji:'🎾',label:'Tenis'},{emoji:'🏄',label:'Surf'}
];
function buildMemoryHTML() {
  return '<div class="card"><div class="card-title">🧠 Memoria Deportiva</div><div class="card-desc">Encontrá los pares: cada deporte con su emoji.</div><div class="mem-stats"><div class="stat-pill">Intentos: <span id="m-att">0</span></div><div class="stat-pill">Pares: <span id="m-match">0</span>/8</div><div class="stat-pill">Tiempo: <span id="m-time">0</span>s</div></div><div class="mem-grid" id="mem-grid"></div><div style="text-align:center;margin-top:18px"><button class="btn ghost" id="btn-mem-reset">↺ Reiniciar</button></div></div>';
}
function initMemory() {
  clearInterval(mTimer); mSecs=0; mAttempts=0; mMatched=0; mFlipped=[];
  ['m-att','m-match','m-time'].forEach(function(id){var e=document.getElementById(id);if(e)e.textContent='0';});
  var doubled=[...MEM_PAIRS,...MEM_PAIRS].sort(function(){return Math.random()-.5;});
  var grid=document.getElementById('mem-grid'); if(!grid)return;
  grid.innerHTML='';
  mCards=doubled.map(function(item,i) {
    var card=document.createElement('div'); card.className='mc';
    card.innerHTML='<div class="mc-inner"><div class="mc-f">&#x1F525;</div><div class="mc-b">'+item.emoji+'<span>'+item.label+'</span></div></div>';
    card.addEventListener('click', function(){flipMem(card,i,item.label);});
    grid.appendChild(card);
    return {el:card,label:item.label,matched:false};
  });
  mTimer=setInterval(function(){mSecs++;var e=document.getElementById('m-time');if(e)e.textContent=mSecs;},1000);
  var resetBtn=document.getElementById('btn-mem-reset');
  if(resetBtn) resetBtn.addEventListener('click', initMemory);
}
function flipMem(card,i,label) {
  if(mFlipped.length>=2||card.classList.contains('flipped')||card.classList.contains('matched'))return;
  card.classList.add('flipped'); mFlipped.push({card,i,label});
  if(mFlipped.length===2) {
    mAttempts++; var e=document.getElementById('m-att');if(e)e.textContent=mAttempts;
    if(mFlipped[0].label===mFlipped[1].label) {
      mFlipped.forEach(function(f){f.card.classList.add('matched');});
      mMatched++; var em=document.getElementById('m-match');if(em)em.textContent=mMatched;
      mFlipped=[];
      if(mMatched===MEM_PAIRS.length){clearInterval(mTimer);setTimeout(function(){alert('🥇 ¡Completado en '+mAttempts+' intentos y '+mSecs+' segundos!');},300);}
    } else {
      setTimeout(function(){mFlipped.forEach(function(f){f.card.classList.remove('flipped');});mFlipped=[];},1000);
    }
  }
}

function buildCountriesHTML() {
  return '<div class="card"><div class="card-title">🌍 ¿De qué país es esta bandera?</div><div class="card-desc">Identificá la bandera de cada uno de los 15 países participantes.</div><div class="prog-bar"><div class="prog-fill" id="c-prog" style="width:0%"></div></div><div style="display:flex;flex-direction:column;align-items:center;gap:8px;margin-bottom:12px"><div id="c-flag" class="flag-big"></div></div><div id="c-hint" class="flag-hint"></div><div id="c-opts" class="c-grid"></div><div id="c-fb" class="fb" style="text-align:center;margin-top:12px"></div><div style="text-align:center;margin-top:14px"><div class="score-pill">Puntaje: <span id="c-score">0</span></div></div></div>';
}
function initCountries() {
  cQueue=[...COUNTRIES].sort(function(){return Math.random()-.5;});
  cScore=0;
  var sc=document.getElementById('c-score');if(sc)sc.textContent='0';
  renderCountry();
}
function renderCountry() {
  if(cQueue.length===0) {
    var card=document.querySelector('#page-wrap .card');
    if(card)card.innerHTML='<div class="res-screen"><div style="font-size:3rem">🌍🌎🌏</div><div class="res-num">'+cScore+'/'+COUNTRIES.length+'</div><div class="res-lbl">'+(cScore>=12?'¡Experto en Sudamérica!':'¡Buen recorrido continental!')+'</div><button class="btn" id="btn-replay-countries" style="margin-top:12px">↺ Jugar de nuevo</button></div>';
    document.getElementById('btn-replay-countries').addEventListener('click', initCountries);
    return;
  }
  var cur=cQueue[0];
  var prog=(COUNTRIES.length-cQueue.length)/COUNTRIES.length*100;
  var p=document.getElementById('c-prog');if(p)p.style.width=prog+'%';
  var f=document.getElementById('c-flag');
  if(f) {
    f.innerHTML='';
    var svgSrc = FLAG_SVG[cur.code];
    function renderEmojiFallback() {
      f.innerHTML='';
      var span=document.createElement('span');
      span.textContent=FLAG_EMOJI[cur.code]||'🏳️';
      span.style.cssText='font-size:90px;line-height:1;display:block';
      f.appendChild(span);
    }
    if(svgSrc) {
      var img=document.createElement('img');
      img.src=svgSrc;
      img.alt=cur.name;
      img.className='flag-img';
      img.style.cssText='max-width:200px;max-height:130px;object-fit:contain;border-radius:10px;box-shadow:0 4px 24px rgba(0,0,0,.5)';
      img.onerror=renderEmojiFallback;
      f.appendChild(img);
      if(navigator.onLine && FLAG_REMOTE[cur.code]) {
        var remoteImg = new Image();
        remoteImg.onload = function() { img.src = FLAG_REMOTE[cur.code]; };
        remoteImg.src = FLAG_REMOTE[cur.code];
      }
    } else { renderEmojiFallback(); }
  }
  var h=document.getElementById('c-hint');if(h)h.textContent='País '+(COUNTRIES.length-cQueue.length+1)+' de '+COUNTRIES.length;
  var wrong=COUNTRIES.filter(function(c){return c.name!==cur.name;}).sort(function(){return Math.random()-.5;}).slice(0,3);
  var opts=[...wrong,cur].sort(function(){return Math.random()-.5;});
  var o=document.getElementById('c-opts');if(!o)return;
  o.innerHTML='';
  opts.forEach(function(opt) {
    var b=document.createElement('button');b.className='opt';b.textContent=opt.name;
    b.addEventListener('click', function(){selectCountry(b,opt.name,cur.name,opts,o);});
    o.appendChild(b);
  });
  var fb=document.getElementById('c-fb');if(fb)fb.innerHTML='';
}
function selectCountry(btn,sel,correct,opts,o) {
  o.querySelectorAll('.opt').forEach(function(b){
    b.disabled=true;
    if(b.textContent===correct)b.classList.add('correct');
    else if(b===btn&&sel!==correct)b.classList.add('wrong');
  });
  if(sel===correct){cScore++;var sc=document.getElementById('c-score');if(sc)sc.textContent=cScore;}
  var fb=document.getElementById('c-fb');
  if(fb)fb.innerHTML=sel===correct?'✅ <span style="color:var(--ok)">¡Correcto!</span>':'❌ <span style="color:var(--err)">Era '+correct+'</span>';
  cQueue.shift();
  setTimeout(renderCountry,1400);
}

function buildValuesHTML() {
  return '<div class="card"><div class="card-title">⭐ Valores del Olimpismo</div><div class="card-desc">Hacé click en cada valor para conocerlo mejor.</div><div class="val-grid" id="val-grid"></div><div style="margin-top:22px;padding:16px;background:rgba(255,184,0,.07);border-radius:12px;border-left:3px solid var(--gold)"><div style="font-weight:800;color:var(--gold);font-size:.85rem;margin-bottom:6px">💬 REFLEXIÓN</div><p style="color:var(--muted);font-size:.87rem;line-height:1.6;margin:0">Coubertin creía que el deporte es fuente de mejora interior. ¿Podés recordar un momento en que el deporte te enseñó algo importante sobre vos mismo/a?</p></div></div>';
}
function initValues() {
  var g=document.getElementById('val-grid');if(!g)return;
  g.innerHTML='';
  VALUES_DATA.forEach(function(v) {
    var c=document.createElement('div');c.className='val-card';
    c.innerHTML='<span class="val-icon">'+v.icon+'</span><div class="val-name">'+v.name+'</div><p class="val-desc">'+v.desc+'</p>';
    c.addEventListener('click', function(){c.classList.toggle('open');});
    g.appendChild(c);
  });
}

function buildChallengeHome() {
  return '<div style="margin-bottom:14px"><div style="font-family:\'Bebas Neue\',sans-serif;font-size:2.2rem;letter-spacing:3px;background:linear-gradient(135deg,var(--fire),var(--gold));-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;margin-bottom:6px">DESAFÍOS POR NIVELES</div><div style="color:var(--muted);font-size:.9rem;line-height:1.6">Elegí una categoría y superá los 4 niveles. ¡Cada nivel desbloquea el siguiente!</div></div><div class="challenge-cat-grid"><div class="cat-card cat-sport" id="cat-sports"><span class="cc-icon">🏅</span><h3>CAMINO DEPORTIVO</h3><p>Deportes, sedes, atletas y todo sobre los Juegos Suramericanos 2026.</p><span class="cat-badge cb-active" id="sport-badge">▶ EN CURSO</span></div><div class="cat-card cat-values" id="cat-values"><span class="cc-icon">⭐</span><h3>CAMINO DE LOS VALORES</h3><p>Olimpismo, pilares educativos, fair play y el espíritu de los Juegos.</p><span class="cat-badge cb-active" id="values-badge">▶ EN CURSO</span></div></div>';
}
function updateCatBadges() {
  ['sports','values'].forEach(function(cat) {
    var el=document.getElementById(cat==='sports'?'sport-badge':'values-badge'); if(!el)return;
    var s=chalState[cat];
    if(s.completed.length===CHALLENGES[cat].levels.length){el.className='cat-badge cb-done';el.textContent='✅ COMPLETADO';}
    else if(s.completed.length>0){el.className='cat-badge cb-active';el.textContent='▶ NIVEL '+(s.completed.length+1)+'/4';}
    else{el.className='cat-badge cb-active';el.textContent='▶ EN CURSO';}
    var card=document.getElementById('cat-'+cat);
    if(card){card.onclick=null;card.addEventListener('click',function(){openChalCat(cat);});}
  });
}
function openChalCat(cat) {
  activeChalCat=cat;
  var wrap=document.getElementById('page-wrap'); wrap.innerHTML='';
  var sec=document.createElement('div'); sec.className='section';
  sec.innerHTML=buildLevelMap(cat);
  wrap.appendChild(sec);
  document.getElementById('lm-back-btn').addEventListener('click', backToChalHome);
  bindLevelNodes(cat);
}
function buildLevelMap(cat) {
  var data=CHALLENGES[cat]; var state=chalState[cat];
  var html='<div class="level-map"><div class="lm-header"><button class="lm-back" id="lm-back-btn">← Categorías</button><div class="lm-title" style="color:'+data.color+'">'+data.icon+' '+data.label.toUpperCase()+'</div></div><div style="color:var(--muted);font-size:.88rem;margin-bottom:24px;line-height:1.5">Superá los 4 niveles en orden. Cada nivel que completás desbloquea el siguiente.</div><div class="levels-path">';
  data.levels.forEach(function(lv,i) {
    var done=state.completed.includes(i);
    var unlocked=state.unlocked.includes(i);
    var isLocked=!done&&!unlocked;
    var isBoss=lv.type==='boss';
    var circleClass=isLocked?'locked':done?'completed':(isBoss?'boss unlocked':'unlocked');
    var stars=state.stars[i]?'⭐'.repeat(state.stars[i]):'';
    html+='<div class="level-node'+(isLocked?' locked-node':' clickable-node')+ '" id="lvnode-'+i+'"><div class="ln-circle '+circleClass+'">'+(done?'✅':lv.icon)+'</div><div class="ln-info"><h4 style="color:'+(done?'var(--ok)':isLocked?'var(--muted)':data.color)+'">'+lv.title+'</h4><p>'+lv.intro.substring(0,70)+'...</p>'+(stars?'<div class="ln-stars">'+stars+'</div>':'')+'</div>'+(isLocked?'<div>🔒</div>':'')+'</div>';
  });
  html+='</div></div>';
  if(state.completed.length===data.levels.length){
    html+='<div class="card" style="text-align:center;margin-top:20px;border-color:var(--gold)"><div style="font-size:3rem">🏆</div><div style="font-family:\'Bebas Neue\',sans-serif;font-size:2rem;color:var(--gold)">¡CATEGORÍA COMPLETADA!</div><button class="btn ghost" id="btn-reset-cat" style="margin-top:12px">↺ Reiniciar</button></div>';
  }
  return html;
}
function bindLevelNodes(cat) {
  CHALLENGES[cat].levels.forEach(function(lv,i) {
    var node=document.getElementById('lvnode-'+i);
    if(!node) return;
    var unlocked = chalState[cat].unlocked.includes(i);
    var completed = chalState[cat].completed.includes(i);
    if(unlocked && !completed) {
      node.classList.remove('locked-node');
      node.style.cursor = 'pointer';
      node.onclick = function(){ openChalLevel(i,cat); };
    } else if(completed) {
      node.style.cursor = 'default';
      node.onclick = null;
    } else {
      node.onclick = null;
      node.style.cursor = 'not-allowed';
    }
  });
  var resetBtn=document.getElementById('btn-reset-cat');
  if(resetBtn) resetBtn.addEventListener('click', function(){resetCat(cat);});
}
function backToChalHome() {
  activeChalCat=null;
  var wrap=document.getElementById('page-wrap'); wrap.innerHTML='';
  var sec=document.createElement('div'); sec.className='section';
  sec.innerHTML=buildChallengeHome();
  wrap.appendChild(sec);
  updateCatBadges();
}
function openChalLevel(levelIdx,cat) {
  activeChalCat=cat; activeChalLevel=levelIdx; activeChalTask=0;
  chalLives=3; chalCorrect=0; orderAnswer=[]; multiSelected=[]; hintIdx=0;
  renderChalLevel();
}
function renderChalLevel() {
  var wrap=document.getElementById('page-wrap'); wrap.innerHTML='';
  var sec=document.createElement('div'); sec.className='section';
  var cat=activeChalCat;
  var lvData=CHALLENGES[cat].levels[activeChalLevel];
  var task=lvData.tasks[activeChalTask];
  var totalTasks=lvData.tasks.length;
  var isBoss=lvData.type==='boss';
  hintIdx=0; multiSelected=[]; orderAnswer=[];

  var html='<div class="chal-screen"><div class="chal-top-bg">';
  html+='<div class="chal-header"><button class="chal-back" id="chal-back-btn">← Mapa</button><div class="chal-title">'+lvData.icon+' '+lvData.title+'</div><div class="chal-lives">'+'❤️'.repeat(chalLives)+'🖤'.repeat(3-chalLives)+'</div></div>';
  html+='<div class="chal-enun">'+lvData.intro+'</div>';
  html+='</div>';
  html+='<div class="prog-bar"><div class="prog-fill" id="chal-prog" style="width:'+(activeChalTask/totalTasks*100)+'%"></div></div>';
  html+='<div style="color:var(--muted);font-size:.75rem;font-weight:800;text-align:right;margin-bottom:16px;text-transform:uppercase">Tarea '+(activeChalTask+1)+' de '+totalTasks+'</div>';
  html+='<div class="chal-body" id="chal-body">';
  if(task.type==='riddle') html+=buildRiddle(task);
  else if(task.type==='choice') html+=buildChoiceTask(task);
  else if(task.type==='order') html+=buildOrderTask(task);
  html+='</div><div id="chal-fb" class="fb" style="margin-bottom:12px;font-size:.92rem"></div>';
  html+='<div class="btn-row"><button class="hint-btn" id="chal-hint-btn"'+(task.clues?'':' style="display:none"')+'>💡 Pista</button><button class="btn '+(isBoss?'gold-btn':'')+ '" id="chal-submit">Verificar ✓</button></div></div>';

  sec.innerHTML=html;
  wrap.appendChild(sec);

  document.getElementById('chal-back-btn').addEventListener('click', function(){openChalCat(cat);});
  document.getElementById('chal-submit').addEventListener('click', submitChal);
  var hintBtn=document.getElementById('chal-hint-btn');
  if(hintBtn) hintBtn.addEventListener('click', revealHint);
  if(task.type==='order') initOrderChips(task);
  if(task.type==='choice') bindChoiceButtons();
}
function buildRiddle(task) {
  var cluesHtml='';
  if(task.clues){
    cluesHtml='<div class="riddle-clues" id="riddle-clues">';
    task.clues.forEach(function(c){cluesHtml+='<div class="clue-item" style="display:none">💡 '+c+'</div>';});
    cluesHtml+='</div>';
  }
  return '<div class="riddle-box"><div class="riddle-label">🔍 Descubrí quién o qué soy</div><div class="riddle-text">'+task.riddle+'</div>'+cluesHtml+'</div><div class="answer-area"><div style="font-size:.78rem;font-weight:800;color:var(--muted);text-transform:uppercase;letter-spacing:1px;margin-bottom:8px">Tu respuesta:</div><input class="answer-input" id="riddle-input" type="text" placeholder="ESCRIBÍ AQUÍ..." maxlength="60"></div>';
}
function buildChoiceTask(task) {
  var html='<div class="q-text">'+task.question+'</div><div class="opt-grid" id="choice-opts">';
  var indices=task.opts.map(function(_,i){return i;}).sort(function(){return Math.random()-.5;});
  var newCorrect=0;
  indices.forEach(function(origIdx,newPos){if(origIdx===task.correct)newCorrect=newPos;});
  indices.forEach(function(origIdx,newPos){
    html+='<button class="opt" data-pos="'+newPos+'" data-correct="'+newCorrect+'" data-explain="'+task.explain.replace(/"/g,"&quot;")+'">'+task.opts[origIdx]+'</button>';
  });
  return html+'</div>';
}
function bindChoiceButtons() {
  document.querySelectorAll('#choice-opts .opt').forEach(function(btn) {
    btn.addEventListener('click', function() {
      var pos=parseInt(btn.getAttribute('data-pos'));
      var correct=parseInt(btn.getAttribute('data-correct'));
      var explain=btn.getAttribute('data-explain');
      selectChoice(btn,pos,correct,explain);
    });
  });
}
function buildOrderTask(task) {
  return '<div class="q-text">'+task.instruction+'</div><div style="color:var(--gold);font-size:.82rem;font-weight:800;margin-bottom:6px">BANCO — hacé click para agregar:</div><div class="order-bank" id="order-bank"></div><div style="color:var(--teal);font-size:.82rem;font-weight:800;margin-bottom:6px">TU ORDEN — hacé click para quitar:</div><div class="order-answer" id="order-answer"></div>';
}
function initOrderChips(task) {
  orderAnswer=[];
  var bank=document.getElementById('order-bank'); if(!bank)return;
  var shuffled=[...task.items].sort(function(){return Math.random()-.5;});
  shuffled.forEach(function(item) {
    var chip=document.createElement('div'); chip.className='order-chip';
    chip.textContent=item; chip.dataset.val=item;
    chip.onclick=function(){moveToAnswer(chip);};
    bank.appendChild(chip);
  });
}
function moveToAnswer(chip) {
  var ans=document.getElementById('order-answer'); if(!ans)return;
  chip.classList.add('placed');
  chip.onclick=function(){moveToBank(chip);};
  ans.appendChild(chip);
  orderAnswer.push(chip.dataset.val);
}
function moveToBank(chip) {
  var bank=document.getElementById('order-bank'); if(!bank)return;
  chip.classList.remove('placed');
  chip.onclick=function(){moveToAnswer(chip);};
  bank.appendChild(chip);
  orderAnswer=orderAnswer.filter(function(v, idx, arr){
    return !(v===chip.dataset.val && idx===arr.indexOf(chip.dataset.val));
  });
}
function revealHint() {
  var task=CHALLENGES[activeChalCat].levels[activeChalLevel].tasks[activeChalTask];
  if(!task.clues||hintIdx>=task.clues.length)return;
  var cluesEl=document.getElementById('riddle-clues'); if(!cluesEl)return;
  var items=cluesEl.querySelectorAll('.clue-item');
  if(items[hintIdx])items[hintIdx].style.display='block';
  hintIdx++;
  if(hintIdx>=task.clues.length){var hb=document.getElementById('chal-hint-btn');if(hb)hb.disabled=true;}
}
function selectChoice(btn,pos,correct,explain) {
  document.querySelectorAll('#choice-opts .opt').forEach(function(b){
    b.disabled=true;
    if(parseInt(b.getAttribute('data-pos'))===correct)b.classList.add('correct');
    else if(b===btn&&pos!==correct)b.classList.add('wrong');
  });
  var ok=pos===correct;
  document.getElementById('chal-fb').innerHTML=ok
    ?'✅ <span style="color:var(--ok)">¡Correcto! '+explain+'</span>'
    :'❌ <span style="color:var(--err)">No es esa. '+explain+'</span>';
  var submitBtn=document.getElementById('chal-submit');
  submitBtn.textContent='Continuar →';
  submitBtn.onclick=function(){advanceChal(ok);};
  var hintBtn=document.getElementById('chal-hint-btn');if(hintBtn)hintBtn.style.display='none';
  if(!ok){chalLives--;updateLives();}else chalCorrect++;
  if(chalLives<=0){failLevel();}
}
function submitChal() {
  var task=CHALLENGES[activeChalCat].levels[activeChalLevel].tasks[activeChalTask];
  if(task.type==='choice')return;
  if(task.type==='riddle'){
    var inp=document.getElementById('riddle-input'); if(!inp)return;
    var val=inp.value.trim().toUpperCase().normalize("NFD").replace(/[\u0300-\u036f]/g,"");
    var correctAns=task.answer.toUpperCase().normalize("NFD").replace(/[\u0300-\u036f]/g,"");
    var alts=(task.altAnswers||[]).map(function(a){return a.toUpperCase().normalize("NFD").replace(/[\u0300-\u036f]/g,"");});
    var ok=val===correctAns||alts.includes(val)||(correctAns.includes(val)&&val.length>3);
    if(ok){
      inp.classList.add('glow');inp.disabled=true;
      document.getElementById('chal-fb').innerHTML='✅ <span style="color:var(--ok)">¡Correcto! La respuesta era: <strong>'+task.answer+'</strong></span>';
      chalCorrect++;
      var sb=document.getElementById('chal-submit');sb.textContent='Continuar →';sb.onclick=function(){advanceChal(true);};
      var hb=document.getElementById('chal-hint-btn');if(hb)hb.style.display='none';
    } else {
      inp.classList.add('shake');setTimeout(function(){inp.classList.remove('shake');},500);
      chalLives--;updateLives();
      document.getElementById('chal-fb').innerHTML='❌ <span style="color:var(--err)">No es esa. Intentá de nuevo o pedí una pista 💡</span>';
      if(chalLives<=0){failLevel();}
    }
  }
  if(task.type==='order'){
    var taskAns=task.correct.map(function(a){return a.toUpperCase();});
    var userAns=orderAnswer.map(function(a){return a.toUpperCase();});
    var ok=JSON.stringify(taskAns)===JSON.stringify(userAns);
    document.querySelectorAll('#order-answer .order-chip').forEach(function(c){
      c.classList.remove('placed');
      c.classList.add(ok?'correct-chip':'wrong-chip');
      c.onclick=null;
    });
    document.getElementById('chal-fb').innerHTML=ok
      ?'✅ <span style="color:var(--ok)">¡Orden correcto!</span>'
      :'❌ <span style="color:var(--err)">El orden no es correcto.</span>';
    if(!ok){chalLives--;updateLives();if(chalLives<=0){failLevel();return;}setTimeout(function(){resetOrder(task);},1500);return;}
    else chalCorrect++;
    var sb=document.getElementById('chal-submit');sb.textContent='Continuar →';sb.onclick=function(){advanceChal(true);};
  }
}
function resetOrder(task) {
  orderAnswer=[];
  var bank=document.getElementById('order-bank'); var ans=document.getElementById('order-answer');
  if(!bank||!ans)return;
  ans.querySelectorAll('.order-chip').forEach(function(c){
    c.classList.remove('placed','correct-chip','wrong-chip');
    c.onclick=function(){moveToAnswer(c);};
    bank.appendChild(c);
  });
  document.getElementById('chal-fb').innerHTML='';
  var sb=document.getElementById('chal-submit');sb.textContent='Verificar ✓';sb.onclick=submitChal;
}
function updateLives() {
  var el=document.querySelector('.chal-lives');
  if(el)el.innerHTML='❤️'.repeat(Math.max(0,chalLives))+'🖤'.repeat(Math.max(0,3-chalLives));
}
function failLevel() {
  var wrap=document.getElementById('page-wrap');
  var lv=activeChalLevel; var cat=activeChalCat;
  wrap.innerHTML='<div class="section"><div class="card" style="text-align:center;border-color:var(--err)"><div style="font-size:3.5rem;margin-bottom:12px">💔</div><div style="font-family:\'Bebas Neue\',sans-serif;font-size:2.5rem;color:var(--err);letter-spacing:2px">SIN VIDAS</div><div style="color:var(--muted);font-size:.92rem;margin:10px 0 16px;line-height:1.6">¡Los atletas también fallan, pero vuelven a intentarlo más fuertes!</div><div style="display:flex;gap:10px;justify-content:center;flex-wrap:wrap"><button class="btn" id="btn-retry-level">↺ Reintentar nivel</button><button class="btn ghost" id="btn-back-map">← Mapa</button></div></div></div>';
  document.getElementById('btn-retry-level').addEventListener('click',function(){openChalLevel(lv,cat);});
  document.getElementById('btn-back-map').addEventListener('click',function(){openChalCat(cat);});
}
function advanceChal(wasOk) {
  var lvData=CHALLENGES[activeChalCat].levels[activeChalLevel];
  activeChalTask++;
  if(activeChalTask>=lvData.tasks.length){completeLevel();}
  else{renderChalLevel();}
}
function completeLevel() {
  var cat=activeChalCat; var lvIdx=activeChalLevel;
  var lvData=CHALLENGES[cat].levels[lvIdx];
  var totalTasks=lvData.tasks.length;
  var accuracy=totalTasks>0?Math.round((chalCorrect/totalTasks)*100):0;
  if(accuracy<70){showLevelRetry(cat,lvIdx,accuracy,totalTasks);return;}
  var state=chalState[cat];
  if(!state.completed.includes(lvIdx))state.completed.push(lvIdx);
  var stars=chalLives===3?3:chalLives===2?2:1;
  state.stars[lvIdx]=stars;
  var next=lvIdx+1;
  if(next<CHALLENGES[cat].levels.length&&!state.unlocked.includes(next))state.unlocked.push(next);
  if(state.completed.length===CHALLENGES[cat].levels.length){showFinalWin(cat);}
  else{showLevelWin(cat,lvIdx,stars);}
}
function showLevelRetry(cat,lvIdx,accuracy,totalTasks) {
  var wrap=document.getElementById('page-wrap');
  wrap.innerHTML='<div class="section"><div class="card" style="text-align:center;border-color:var(--gold)"><div style="font-size:3.5rem;margin-bottom:12px">💪</div><div style="font-family:\'Bebas Neue\',sans-serif;font-size:2.2rem;color:var(--gold);letter-spacing:2px">CASI LO LOGRAS</div><div style="color:var(--muted);font-size:.92rem;margin:14px 0;line-height:1.6">Necesitás al menos 70% de precisión para avanzar. Tu resultado: '+accuracy+'% ('+chalCorrect+'/'+totalTasks+').</div><div style="display:flex;gap:10px;justify-content:center;flex-wrap:wrap"><button class="btn gold-btn" id="btn-retry2">↺ Reintentar</button><button class="btn ghost" id="btn-map2">← Mapa</button></div></div></div>';
  document.getElementById('btn-retry2').addEventListener('click',function(){openChalLevel(lvIdx,cat);});
  document.getElementById('btn-map2').addEventListener('click',function(){openChalCat(cat);});
}
function showLevelWin(cat,lvIdx,stars) {
  var nextLv=CHALLENGES[cat].levels[lvIdx+1];
  var wrap=document.getElementById('page-wrap');
  wrap.innerHTML='<div class="section"><div class="card" style="border-color:var(--ok)"><div class="level-win"><div class="win-stars">'+'⭐'.repeat(stars)+'☆'.repeat(3-stars)+'</div><div class="win-title">¡NIVEL SUPERADO!</div><div class="win-msg">Siguiente: <strong style="color:var(--gold)">'+nextLv.icon+' '+nextLv.title+'</strong> — ¡Desbloqueado!</div><div class="xp-bar"><div class="xp-fill" style="width:'+(chalState[cat].completed.length/CHALLENGES[cat].levels.length*100)+'%"></div></div><div style="display:flex;gap:10px;justify-content:center;flex-wrap:wrap"><button class="btn gold-btn" id="btn-next-level">▶ Siguiente nivel</button><button class="btn ghost" id="btn-to-map">Mapa</button></div></div></div></div>';
  document.getElementById('btn-next-level').addEventListener('click',function(){openChalLevel(lvIdx+1,cat);});
  document.getElementById('btn-to-map').addEventListener('click',function(){openChalCat(cat);});
}
function showFinalWin(cat) {
  launchConfetti();
  var data=CHALLENGES[cat]; var wrap=document.getElementById('page-wrap');
  wrap.innerHTML='<div class="section"><div class="card" style="border-color:var(--gold)"><div class="final-win"><span class="trophy">🏆</span><div class="fw-title">¡CAMPEÓN/A!</div><div class="fw-sub">Completaste el <strong style="color:'+data.color+'">'+data.label+'</strong>.<br>¡Demostraste que el Olimpismo vive en vos!</div><div style="display:flex;gap:10px;justify-content:center;flex-wrap:wrap"><button class="btn gold-btn" id="btn-ver-res">Ver resultados</button><button class="btn ghost" id="btn-otras-cat">Otras categorías</button></div></div></div></div>';
  document.getElementById('btn-ver-res').addEventListener('click',function(){openChalCat(cat);});
  document.getElementById('btn-otras-cat').addEventListener('click',backToChalHome);
}
function resetCat(cat) {
  chalState[cat]={unlocked:[0],completed:[],stars:{}};
  openChalCat(cat);
}
function launchConfetti() {
  var cont=document.getElementById('confetti-cont'); cont.innerHTML='';
  var colors=['#FF7402','#E42153','#FFB800','#00B4A6','#3C3AE5','#fff'];
  for(var i=0;i<80;i++){
    var c=document.createElement('div'); c.className='conf';
    c.style.cssText='left:'+Math.random()*100+'%;background:'+colors[Math.floor(Math.random()*colors.length)]+';width:'+(4+Math.random()*8)+'px;height:'+(4+Math.random()*8)+'px;animation-duration:'+(2+Math.random()*3)+'s;animation-delay:'+Math.random()*2+'s';
    cont.appendChild(c);
  }
  setTimeout(function(){cont.innerHTML='';},6000);
}
</script>
</body>
</html>

Game Source: Vivamos los Juegos — XIII Suramericanos 2026 (Alumnos)

Creator: SolarGamer11

Libraries: none

Complexity: complex (1182 lines, 70.7 KB)

The full source code is displayed above on this page.

Remix Instructions

To remix this game, copy the source code above and modify it. Add a ARCADELAB header at the top with "remix_of: vivamos-los-juegos-xiii-suramericanos-20-solargamer11" to link back to the original. Then publish at arcadelab.ai/publish.