{"id":2926,"date":"2026-08-01T08:06:43","date_gmt":"2026-08-01T08:06:43","guid":{"rendered":"https:\/\/jepapublications.com\/o-espelho\/"},"modified":"2026-08-01T21:45:46","modified_gmt":"2026-08-01T21:45:46","slug":"the-mirror","status":"publish","type":"page","link":"https:\/\/jepapublications.com\/it\/the-mirror\/","title":{"rendered":"The Mirror"},"content":{"rendered":"\n<style>\n  #o-espelho[data-folha=\"clara\"]{\n    --preto:#F6F1E7; --carvao:#FFFFFF; --grafite:#F0E8D8; --linha:#D8CBAF;\n    --marfim:#26333F; --cinza:#5C6B76; --ouro:#A97E22; --ouro-claro:#7E5D14;\n    --vermelho:#B5443C; --verde:#2F7D57; --veu:rgba(246,241,231,.96);\n  }\n  #o-espelho[data-folha=\"sepia\"]{\n    --preto:#EFE3C9; --carvao:#F8F0DD; --grafite:#EADFC4; --linha:#CDB88C;\n    --marfim:#41351D; --cinza:#6E5F3F; --ouro:#8A5A18; --ouro-claro:#6F4A12;\n    --vermelho:#A34434; --verde:#4C7A45; --veu:rgba(239,227,201,.96);\n  }\n  #o-espelho[data-folha=\"noite\"]{\n    --preto:#0B2E3C; --carvao:#0F3A4B; --grafite:#14465A; --linha:#1F5A70;\n    --marfim:#EFE9DC; --cinza:#A8BEC8; --ouro:#D9AE55; --ouro-claro:#E8C87E;\n    --vermelho:#D96A5B; --verde:#7FBF8F; --veu:rgba(6,24,32,.94);\n  }\n  #o-espelho, #o-espelho *{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}\n  #o-espelho{\n    position:fixed;inset:0;z-index:99999;background:var(--preto) !important;color:var(--marfim) !important;\n    font-family:'Segoe UI','Helvetica Neue',Arial,sans-serif;overflow:hidden;user-select:none;touch-action:manipulation;\n    transition:background .4s;\n  }\n  #o-espelho::before{\n    content:\"\";position:absolute;inset:0;pointer-events:none;z-index:0;\n    background:radial-gradient(ellipse at 50% 22%, rgba(212,169,78,.09), transparent 60%);\n  }\n  #o-espelho .screen{\n    position:absolute;inset:0;display:none;flex-direction:column;align-items:center;justify-content:center;\n    padding:24px 20px;text-align:center;z-index:1;opacity:0;transition:opacity .45s ease;overflow-y:auto;\n  }\n  #o-espelho .screen.on{display:flex;opacity:1}\n  #o-espelho .micro{font-size:16px;letter-spacing:.4em;text-transform:uppercase;color:var(--ouro) !important;margin-bottom:24px;font-weight:700}\n  #o-espelho h1.pergunta{font-family:Georgia,'Times New Roman',serif;font-weight:400;font-size:clamp(27px,6vw,44px);line-height:1.35;max-width:600px;color:var(--marfim) !important}\n  #o-espelho .sub{color:var(--cinza) !important;font-size:16px;line-height:1.7;max-width:480px;margin-top:16px}\n  #o-espelho .btn{\n    margin-top:30px;background:transparent !important;color:var(--marfim) !important;border:2px solid var(--ouro) !important;border-radius:3px;\n    padding:16px 38px;font-size:15px;letter-spacing:.22em;text-transform:uppercase;cursor:pointer;\n    font-family:'Segoe UI',Arial,sans-serif;transition:color 1s,border-color 1s,background .3s;box-shadow:none !important;text-decoration:none;\n  }\n  #o-espelho .btn:hover{background:var(--ouro) !important;color:#fff !important}\n  #o-espelho .btn.fantasma{border-color:var(--linha) !important;color:var(--cinza) !important;letter-spacing:.15em;padding:11px 24px;font-size:12px;border-width:1px !important}\n  #o-espelho .btn.fantasma:hover{background:var(--grafite) !important;color:var(--marfim) !important}\n  #o-espelho .dupla{display:flex;gap:14px;margin-top:30px;flex-wrap:wrap;justify-content:center}\n  #o-espelho .dupla .btn{margin-top:0}\n  #o-espelho .marca{margin-top:26px;font-size:13px;letter-spacing:.18em;text-transform:uppercase;color:var(--cinza) !important}\n  @keyframes fxPulse{0%,100%{transform:scale(1)}50%{transform:scale(1.07)}}\n  @keyframes fxGlow{0%,100%{box-shadow:0 0 0 rgba(212,169,78,0)}50%{box-shadow:0 0 26px rgba(212,169,78,.75)}}\n  @keyframes fxTilt{0%,100%{transform:rotate(-2.5deg)}50%{transform:rotate(2.5deg)}}\n  @keyframes fxBorder{0%,100%{border-width:2px;padding:16px 38px}50%{border-width:5px;padding:13px 35px}}\n  @keyframes fxFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-9px)}}\n  @keyframes fxShimmer{0%{background-position:-140% 0}100%{background-position:240% 0}}\n  @keyframes fxShake{0%,100%{transform:translateX(0)}20%{transform:translateX(-5px)}40%{transform:translateX(5px)}60%{transform:translateX(-3px)}80%{transform:translateX(3px)}}\n  @keyframes fxFill{0%,100%{background:transparent;color:var(--marfim)}50%{background:var(--ouro);color:#fff}}\n  @keyframes fxSpread{0%,100%{letter-spacing:.22em}50%{letter-spacing:.4em}}\n  @keyframes fxHeart{0%,28%,56%,100%{transform:scale(1)}14%{transform:scale(1.1)}42%{transform:scale(1.08)}}\n  #o-espelho .fx1{animation:fxPulse 1.3s infinite}\n  #o-espelho .fx2{animation:fxGlow 1.4s infinite}\n  #o-espelho .fx3{animation:fxTilt 1s infinite}\n  #o-espelho .fx4{animation:fxBorder 1.2s infinite}\n  #o-espelho .fx5{animation:fxFloat 1.6s infinite}\n  #o-espelho .fx6{background-image:linear-gradient(110deg,transparent 30%,rgba(212,169,78,.45) 50%,transparent 70%) !important;background-size:220% 100%;animation:fxShimmer 1.4s infinite}\n  #o-espelho .fx7{animation:fxShake 1.1s infinite}\n  #o-espelho .fx8{animation:fxFill 2.4s infinite}\n  #o-espelho .fx9{animation:fxSpread 1.8s infinite}\n  #o-espelho .fx10{animation:fxHeart 1.5s infinite}\n  @keyframes fxBlink{0%,100%{background:transparent;color:inherit}50%{background:var(--ouro);color:#fff}}\n  #o-espelho .pisca{animation:fxBlink .4s 5}\n  #o-espelho .aviso-cor{margin-top:26px;font-size:12px;letter-spacing:.22em;text-transform:uppercase;color:var(--cinza) !important}\n  #o-espelho #paleta{display:flex;flex-wrap:wrap;gap:9px;justify-content:center;margin-top:12px;max-width:430px}\n  #o-espelho .bola{width:22px;height:22px;border-radius:50%;cursor:pointer;border:2px solid rgba(0,0,0,.18);padding:0;transition:transform .15s}\n  #o-espelho .bola:hover{transform:scale(1.25)}\n  #o-espelho .bola.escolhida{box-shadow:0 0 0 3px var(--ouro)}\n  #o-espelho #logo-jepa{position:absolute;top:14px;left:16px;z-index:10;line-height:0;opacity:.9;transition:opacity .2s,transform .2s}\n  #o-espelho #logo-jepa:hover{opacity:1;transform:scale(1.05)}\n  #o-espelho #logo-jepa img{height:38px;width:auto;display:block;filter:drop-shadow(0 1px 4px rgba(0,0,0,.25))}\n  #o-espelho #hud{\n    position:absolute;top:0;left:0;right:0;z-index:5;display:none;\n    justify-content:space-between;align-items:center;padding:14px 18px 14px 70px;\n    font-size:12px;letter-spacing:.2em;text-transform:uppercase;color:var(--cinza) !important;\n  }\n  #o-espelho #hud.on{display:flex}\n  #o-espelho #hud-tempo{color:var(--ouro) !important;font-variant-numeric:tabular-nums;min-width:52px;text-align:right}\n  #o-espelho #pontos-nivel{display:flex;gap:6px}\n  #o-espelho .ponto{width:6px;height:6px;border-radius:50%;background:var(--linha)}\n  #o-espelho .ponto.feito{background:var(--ouro)}\n  #o-espelho .ponto.actual{background:var(--marfim)}\n  #o-espelho #barra{position:absolute;top:0;left:0;height:3px;background:var(--ouro);width:0%;z-index:6}\n  #o-espelho #barra.perigo{background:var(--vermelho)}\n  #o-espelho #btn-skip{\n    position:absolute;top:46px;right:14px;z-index:9;display:none;\n    background:var(--carvao) !important;border:1px solid var(--ouro) !important;color:var(--ouro-claro) !important;\n    border-radius:4px;padding:9px 16px;font-size:12px;letter-spacing:.18em;text-transform:uppercase;cursor:pointer;font-weight:700;\n  }\n  #o-espelho #btn-skip.on{display:block}\n  #o-espelho #btn-som{\n    position:absolute;bottom:84px;right:14px;z-index:9;background:var(--carvao) !important;border:1px solid var(--linha) !important;\n    color:var(--cinza) !important;border-radius:50%;width:40px;height:40px;cursor:pointer;font-size:15px;\n  }\n  #o-espelho #folhas{position:absolute;bottom:20px;left:16px;z-index:9;display:flex;gap:10px;align-items:center}\n  #o-espelho .folha-btn{width:26px;height:26px;border-radius:50%;cursor:pointer;border:2px solid var(--linha);padding:0}\n  #o-espelho .folha-btn[data-folha=\"clara\"]{background:#F6F1E7 !important}\n  #o-espelho .folha-btn[data-folha=\"sepia\"]{background:#EFE3C9 !important}\n  #o-espelho .folha-btn[data-folha=\"noite\"]{background:#0B2E3C !important}\n  #o-espelho .folha-btn.activa{border-color:var(--ouro);box-shadow:0 0 0 2px var(--ouro)}\n  #o-espelho #s-jogo{justify-content:flex-start;padding-top:64px}\n  #o-espelho #arena{width:100%;max-width:520px;display:flex;flex-direction:column;align-items:center;flex:1;justify-content:center}\n  #o-espelho #arena.tremer{animation:oesp-tremer .35s}\n  @keyframes oesp-tremer{0%,100%{transform:translateX(0)}20%{transform:translateX(-10px)}40%{transform:translateX(10px)}60%{transform:translateX(-6px)}80%{transform:translateX(6px)}}\n  #o-espelho .instrucao{\n    font-family:Georgia,serif;font-size:clamp(18px,4.4vw,23px);min-height:56px;color:var(--marfim) !important;\n    display:flex;align-items:center;justify-content:center;line-height:1.5;padding:0 8px;\n  }\n  #o-espelho .instrucao .chave{color:var(--ouro-claro) !important}\n  #o-espelho #veu{\n    position:absolute;inset:0;z-index:8;display:none;flex-direction:column;align-items:center;justify-content:center;\n    background:var(--veu);padding:26px 22px;text-align:center;cursor:pointer;\n  }\n  #o-espelho #veu.on{display:flex}\n  #o-espelho #veu .v-num{font-size:15px;letter-spacing:.4em;text-transform:uppercase;color:var(--ouro) !important;margin-bottom:18px;font-weight:700}\n  #o-espelho #veu .v-titulo{font-family:Georgia,serif;font-size:clamp(32px,7vw,50px);font-weight:400;margin-bottom:18px;color:var(--marfim) !important}\n  #o-espelho #veu .v-texto{color:var(--marfim) !important;font-size:17px;line-height:1.8;max-width:480px}\n  #o-espelho #veu .v-texto strong{color:var(--ouro-claro) !important}\n  #o-espelho #veu .v-hint{margin-top:18px;color:var(--cinza) !important;font-size:14.5px;line-height:1.7;max-width:460px;font-style:italic}\n  #o-espelho #veu .v-verdade{\n    font-family:Georgia,serif;font-size:clamp(23px,5.4vw,36px);line-height:1.45;max-width:580px;color:var(--marfim) !important;\n  }\n  #o-espelho #veu .v-verdade::before{content:\"\\201C\";color:var(--ouro)}\n  #o-espelho #veu .v-verdade::after{content:\"\\201D\";color:var(--ouro)}\n  #o-espelho #veu .v-provocacao{margin-top:26px;color:var(--cinza) !important;font-size:16px;font-style:italic;line-height:1.7;max-width:460px}\n  #o-espelho #veu .v-toque{\n    margin-top:36px;font-size:13px;letter-spacing:.3em;text-transform:uppercase;color:var(--ouro) !important;font-weight:700;\n    animation:oesp-respira 1.6s infinite;\n  }\n  @keyframes oesp-respira{0%,100%{opacity:.45}50%{opacity:1}}\n  #o-espelho #veu .v-grande{font-family:Georgia,serif;font-size:clamp(46px,14vw,90px);color:var(--ouro) !important}\n  #o-espelho #veu.falha .v-titulo{color:var(--vermelho) !important}\n  #o-espelho .flut{\n    position:absolute;z-index:7;pointer-events:none;font-family:Georgia,serif;font-size:22px;color:var(--ouro-claro) !important;\n    animation:oesp-subir .7s ease-out both;\n  }\n  @keyframes oesp-subir{from{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-46px)}}\n  #o-espelho .particula{\n    position:absolute;z-index:7;width:6px;height:6px;border-radius:50%;background:var(--ouro);pointer-events:none;\n    animation:oesp-voar .6s ease-out both;\n  }\n  @keyframes oesp-voar{from{opacity:1;transform:translate(0,0) scale(1)}to{opacity:0;transform:translate(var(--vx),var(--vy)) scale(.3)}}\n  #o-espelho #flash{position:absolute;inset:0;z-index:6;pointer-events:none;opacity:0;background:var(--vermelho)}\n  #o-espelho #flash.vai{animation:oesp-flashar .3s}\n  @keyframes oesp-flashar{0%{opacity:.3}100%{opacity:0}}\n  #o-espelho .par{display:flex;gap:16px;margin-top:22px;width:100%;justify-content:center}\n  #o-espelho .carta{\n    background:var(--carvao) !important;border:1px solid var(--linha);border-radius:6px;\n    padding:min(9vh,52px) 8px;flex:1;max-width:230px;cursor:pointer;color:var(--marfim) !important;\n    font-family:Georgia,serif;font-size:clamp(21px,5.4vw,32px);letter-spacing:.05em;\n    box-shadow:0 2px 10px rgba(0,0,0,.08);transition:transform .1s;animation:oesp-aparecer .18s ease both;\n  }\n  #o-espelho .carta:active{transform:scale(.96)}\n  #o-espelho .carta.mirror{transform:scaleX(-1);animation:oesp-aparecerM .18s ease both}\n  #o-espelho .carta.mirror:active{transform:scaleX(-1) scale(.96)}\n  @keyframes oesp-aparecer{from{opacity:0;transform:translateY(10px)}to{opacity:1}}\n  @keyframes oesp-aparecerM{from{opacity:0;transform:scaleX(-1) translateY(10px)}to{opacity:1;transform:scaleX(-1)}}\n  #o-espelho .grelha{display:grid;grid-template-columns:repeat(4,1fr);gap:9px;width:100%;max-width:430px;margin-top:18px}\n  #o-espelho .env{\n    aspect-ratio:1\/1;background:var(--carvao) !important;border:1px solid var(--linha);border-radius:5px;\n    display:flex;align-items:center;justify-content:center;cursor:pointer;\n    font-size:12px;font-family:Georgia,serif;transition:all .2s;padding:3px;line-height:1.2;\n  }\n  #o-espelho .env .verso{font-size:21px;color:var(--cinza) !important}\n  #o-espelho .env .frente{display:none;color:var(--ouro-claro) !important}\n  #o-espelho .env.aberta{background:var(--grafite) !important;border-color:var(--ouro)}\n  #o-espelho .env.aberta .verso{display:none}\n  #o-espelho .env.aberta .frente{display:block}\n  #o-espelho .env.par{background:transparent !important;border-color:transparent;cursor:default}\n  #o-espelho .env.par .frente{opacity:.35}\n  #o-espelho .sussurro{min-height:22px;margin-top:14px;color:var(--cinza) !important;font-size:14px;font-style:italic}\n  #o-espelho #campo3{position:relative;width:100%;max-width:490px;height:min(52vh,400px);border:1px solid var(--linha);border-radius:8px;margin-top:16px;overflow:hidden;background:var(--carvao)}\n  #o-espelho .isca{\n    position:absolute;background:var(--vermelho) !important;color:#fff !important;border:none !important;border-radius:6px;\n    padding:14px 20px;font-size:14px;font-weight:800;letter-spacing:.05em;cursor:pointer;\n    box-shadow:0 0 26px rgba(196,79,71,.45);animation:oesp-pulsar .8s infinite;\n  }\n  @keyframes oesp-pulsar{0%,100%{transform:scale(1)}50%{transform:scale(1.09)}}\n  #o-espelho .calma{\n    position:absolute;background:var(--carvao) !important;color:var(--marfim) !important;border:1px solid var(--verde) !important;\n    border-radius:6px;padding:12px 20px;font-size:13px;letter-spacing:.12em;cursor:pointer;\n    box-shadow:0 0 18px rgba(95,158,110,.3);\n  }\n  #o-espelho #campo4{position:relative;width:100%;max-width:430px;height:min(50vh,420px);border:1px solid var(--linha);border-radius:8px;margin-top:14px;overflow:hidden;background:var(--carvao);touch-action:none;cursor:crosshair}\n  #o-espelho #tu{position:absolute;width:16px;height:16px;border-radius:50%;background:var(--ouro);box-shadow:0 0 16px rgba(201,169,97,.9);bottom:26px}\n  #o-espelho .rasto{position:absolute;width:6px;height:6px;border-radius:50%;background:rgba(201,169,97,.4);pointer-events:none;animation:oesp-sumir .5s both}\n  @keyframes oesp-sumir{to{opacity:0;transform:scale(.2)}}\n  #o-espelho .queda{position:absolute;font-size:12px;letter-spacing:.12em;color:var(--vermelho) !important;font-weight:800;white-space:nowrap}\n  #o-espelho .controlos{display:flex;gap:12px;margin-top:14px;width:100%;max-width:430px}\n  #o-espelho .ctl{flex:1;padding:15px;background:var(--carvao) !important;border:1px solid var(--linha) !important;border-radius:6px;color:var(--marfim) !important;font-size:20px;cursor:pointer}\n  #o-espelho .ctl:active{background:var(--grafite) !important;border-color:var(--ouro) !important}\n  #o-espelho .eco-grelha{display:grid;grid-template-columns:1fr 1fr;gap:13px;width:100%;max-width:340px;margin-top:22px}\n  #o-espelho .eco{\n    aspect-ratio:1\/1;border:1px solid var(--linha);border-radius:8px;background:var(--carvao);cursor:pointer;\n    transition:all .1s;display:flex;align-items:center;justify-content:center;\n    font-family:Georgia,serif;font-size:15px;color:var(--cinza) !important;letter-spacing:.1em;\n  }\n  #o-espelho .eco.acesa{background:var(--ouro) !important;color:#fff !important;border-color:var(--ouro);box-shadow:0 0 34px rgba(212,169,78,.5)}\n  #o-espelho .gate-caixa{max-width:420px;width:100%}\n  #o-espelho .gate-titulo{font-family:Georgia,serif;font-size:clamp(24px,5.5vw,34px);line-height:1.4;margin-bottom:12px;color:var(--marfim) !important}\n  #o-espelho input.campo{\n    width:100%;margin-top:13px;background:var(--carvao) !important;border:1px solid var(--linha) !important;border-radius:2px;\n    padding:15px 16px;color:var(--marfim) !important;font-size:15px;outline:none;text-align:center;\n  }\n  #o-espelho input.campo:focus{border-color:var(--ouro) !important}\n  #o-espelho input.campo.tremer{animation:oesp-tremer .35s}\n  #o-espelho .aviso-gate{color:var(--cinza) !important;font-size:13px;margin-top:13px;line-height:1.6}\n  #o-espelho .cartao{margin-top:28px;background:var(--carvao) !important;border:1px solid var(--ouro);border-radius:8px;padding:28px 24px;max-width:400px;width:100%;box-shadow:0 4px 18px rgba(0,0,0,.1)}\n  #o-espelho .cartao .c-marca{font-size:11px;letter-spacing:.4em;text-transform:uppercase;color:var(--ouro) !important;margin-bottom:14px}\n  #o-espelho .cartao .c-frase{font-family:Georgia,serif;font-size:20px;line-height:1.5;color:var(--marfim) !important}\n  #o-espelho .cartao .c-nivel{margin-top:14px;color:var(--cinza) !important;font-size:12px;letter-spacing:.15em;text-transform:uppercase}\n  #o-espelho .copiado{color:var(--verde) !important;font-size:12px;margin-top:10px;min-height:16px;letter-spacing:.1em}\n  #o-espelho .lista-verdades{max-width:560px;width:100%;margin-top:10px;text-align:left}\n  #o-espelho .verdade-item{\n    border-left:2px solid var(--ouro);padding:10px 16px;margin:12px 0;font-family:Georgia,serif;\n    font-size:16px;line-height:1.55;color:var(--marfim) !important;background:var(--carvao);border-radius:0 6px 6px 0;\n  }\n  #o-espelho .verdade-item.presa{border-left-color:var(--linha);color:var(--cinza) !important;font-style:italic;background:transparent}\n  #o-espelho .rodape{position:absolute;bottom:20px;left:0;right:0;text-align:center;z-index:2;font-size:9px;letter-spacing:.3em;text-transform:uppercase;color:var(--cinza) !important;opacity:.6;pointer-events:none}\n  #o-espelho .fade{animation:oesp-fadein .7s ease both}\n  @keyframes oesp-fadein{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}\n<\/style>\n<div id=\"o-espelho\" data-folha=\"clara\">\n<a id=\"logo-jepa\" href=\"https:\/\/jepapublications.com\/\" title=\"Back to JEPA Publications\"><img decoding=\"async\" src=\"https:\/\/jepapublications.com\/wp-content\/uploads\/2026\/06\/jepa_logo_gold_header_v2.png\" alt=\"JEPA Publications\"><\/a>\n<div id=\"barra\"><\/div>\n<div id=\"flash\"><\/div>\n<div id=\"hud\">\n  <span id=\"hud-nivel\">Level 1<\/span>\n  <span id=\"pontos-nivel\"><\/span>\n  <span id=\"hud-tempo\"><\/span>\n<\/div>\n<button id=\"btn-skip\" title=\"Skip to the next level\">Skip \u00bb<\/button>\n<button id=\"btn-som\" title=\"Sound\">\u266a<\/button>\n<div id=\"folhas\">\n  <button class=\"folha-btn\" data-folha=\"clara\" title=\"Light page\"><\/button>\n  <button class=\"folha-btn\" data-folha=\"sepia\" title=\"Sepia page\"><\/button>\n  <button class=\"folha-btn\" data-folha=\"noite\" title=\"Night page\"><\/button>\n<\/div>\n\n<section class=\"screen on\" id=\"s-entrada\">\n  <div class=\"micro fade\">The first truth<\/div>\n  <h1 class=\"pergunta fade\" id=\"entrada-texto\">Is it you looking at the screen, or is the screen looking at you?<\/h1>\n  <div class=\"dupla fade\" id=\"entrada-botoes\">\n    <button class=\"btn\" data-resp=\"eu\">It is me<\/button>\n    <button class=\"btn\" data-resp=\"ecra\">It is the screen<\/button>\n  <\/div>\n  <div class=\"dupla fade\" style=\"margin-top:18px\">\n    <button class=\"btn fantasma\" id=\"btn-partilhar-inicio\">Share the Mirror<\/button>\n    <button class=\"btn fantasma\" id=\"btn-ver-verdades\">Your truths<\/button>\n  <\/div>\n  <div class=\"aviso-cor fade\">Pick a colour \u00b7 the whole mirror changes<\/div>\n  <div id=\"paleta\" class=\"fade\"><\/div>\n  <div class=\"marca\" id=\"marca\"><\/div>\n  <div class=\"copiado\" id=\"copiado-inicio\"><\/div>\n<\/section>\n\n<section class=\"screen\" id=\"s-jogo\">\n  <div id=\"arena\"><\/div>\n<\/section>\n\n<div id=\"veu\"><\/div>\n\n<section class=\"screen\" id=\"s-gate\">\n  <div class=\"gate-caixa\">\n    <div class=\"micro\">Three levels in. You are still here.<\/div>\n    <div class=\"gate-titulo\">From here on, the Mirror remembers you.<\/div>\n    <p class=\"sub\" style=\"margin-top:4px\">Your first name and your email. Your progress is saved and you keep playing without interruptions.<\/p>\n    <input class=\"campo\" id=\"g-nome\" type=\"text\" placeholder=\"Your first name\" autocomplete=\"given-name\">\n    <input class=\"campo\" id=\"g-email\" type=\"email\" placeholder=\"Your email\" autocomplete=\"email\">\n    <button class=\"btn\" id=\"btn-gate\" style=\"width:100%\">Keep my reflection<\/button>\n    <div class=\"aviso-gate\">No spam. No noise. Only the Mirror, when it has something to tell you.<\/div>\n    <button class=\"btn fantasma\" id=\"btn-gate-nao\">Not now<\/button>\n  <\/div>\n<\/section>\n\n<section class=\"screen\" id=\"s-verdades\">\n  <div class=\"micro\">Your collection<\/div>\n  <h1 class=\"pergunta\" style=\"font-size:clamp(22px,5vw,32px)\">The truths the Mirror has already given you<\/h1>\n  <div class=\"lista-verdades\" id=\"lista-verdades\"><\/div>\n  <div class=\"dupla\">\n    <a class=\"btn\" id=\"btn-livro-verdades\" href=\"https:\/\/jepapublications.com\/it-was-never-about-the-money\/\" style=\"display:none\">The book where they live<\/a>\n    <button class=\"btn fantasma\" id=\"btn-voltar-verdades\">Back to the Mirror<\/button>\n  <\/div>\n<\/section>\n\n<section class=\"screen\" id=\"s-fim\">\n  <div class=\"micro\" id=\"fim-micro\"><\/div>\n  <h1 class=\"pergunta\" id=\"fim-titulo\"><\/h1>\n  <p class=\"sub\" id=\"fim-sub\"><\/p>\n  <div class=\"cartao fade\">\n    <div class=\"c-marca\">The Mirror<\/div>\n    <div class=\"c-frase\" id=\"fim-frase\"><\/div>\n    <div class=\"c-nivel\" id=\"fim-nivel\"><\/div>\n  <\/div>\n  <div class=\"dupla\">\n    <button class=\"btn\" id=\"btn-partilhar-fim\">Share and challenge someone<\/button>\n    <button class=\"btn fantasma\" id=\"btn-recomecar\">Play again<\/button>\n  <\/div>\n  <div class=\"copiado\" id=\"copiado\"><\/div>\n<\/section>\n\n<div class=\"rodape\">JEPA Publications \u00b7 The Mirror<\/div>\n<\/div>\n<script>\n(function(){\n\"use strict\";\n\nconst RAIZ=document.getElementById(\"o-espelho\");\nconst JOGO_URL=\"https:\/\/jepapublications.com\/the-mirror\/\";\nconst LIVRO_URL=\"https:\/\/jepapublications.com\/it-was-never-about-the-money\/\";\nconst ML_URL=\"https:\/\/assets.mailerlite.com\/jsonp\/1485441\/forms\/194608648491631749\/subscribe\";\nconst S={nivel:1,nome:\"\",gateFeito:false,timers:[],mudo:false};\ntry{\n  const n=localStorage.getItem(\"espelho_nome\");\n  if(n){S.nome=n;S.gateFeito=true;}\n}catch(e){}\n\nconst $=id=>document.getElementById(id);\nconst arena=$(\"arena\");\nconst veu=$(\"veu\");\n\nfunction t(fn,ms){const x=setTimeout(fn,ms);S.timers.push(x);return x;}\nfunction i(fn,ms){const x=setInterval(fn,ms);S.timers.push(x);return x;}\nfunction limpar(){S.timers.forEach(x=>{clearTimeout(x);clearInterval(x);});S.timers=[];}\nfunction barra(p,perigo){const b=$(\"barra\");b.style.width=Math.max(0,Math.min(100,p))+\"%\";b.classList.toggle(\"perigo\",!!perigo);}\nfunction baralhar(a){for(let k=a.length-1;k>0;k--){const j=Math.floor(Math.random()*(k+1));[a[k],a[j]]=[a[j],a[k]];}return a;}\nfunction escolher(a){return a[Math.floor(Math.random()*a.length)];}\nfunction mostrar(id){\n  RAIZ.querySelectorAll(\".screen\").forEach(s=>s.classList.remove(\"on\"));\n  $(id).classList.add(\"on\");\n  $(\"hud\").classList.toggle(\"on\",id===\"s-jogo\");\n  $(\"btn-skip\").classList.toggle(\"on\",id===\"s-jogo\");\n  if(id!==\"s-jogo\") barra(0);\n}\n\nfunction recorde(){try{return parseInt(localStorage.getItem(\"espelho_recorde\"))||0;}catch(e){return 0;}}\nfunction fixarRecorde(n){try{if(n>recorde()) localStorage.setItem(\"espelho_recorde\",String(n));}catch(e){}}\n\nfunction aplicarFolha(f){\n  [\"--preto\",\"--marfim\",\"--cinza\",\"--carvao\",\"--grafite\",\"--linha\",\"--ouro\",\"--ouro-claro\",\"--veu\"].forEach(v=>RAIZ.style.removeProperty(v));\n  try{localStorage.removeItem(\"espelho_fundo\");}catch(e){}\n  RAIZ.querySelectorAll(\".bola\").forEach(x=>x.classList.remove(\"escolhida\"));\n  RAIZ.dataset.folha=f;\n  try{localStorage.setItem(\"espelho_folha\",f);}catch(e){}\n  RAIZ.querySelectorAll(\".folha-btn\").forEach(b=>b.classList.toggle(\"activa\",b.dataset.folha===f));\n}\nRAIZ.querySelectorAll(\".folha-btn\").forEach(b=>{\n  b.addEventListener(\"click\",()=>aplicarFolha(b.dataset.folha));\n});\nlet folhaInicial=\"clara\";\ntry{const f=localStorage.getItem(\"espelho_folha\");if(f) folhaInicial=f;}catch(e){}\naplicarFolha(folhaInicial);\n\nlet AC=null;\nfunction audio(){if(!AC){try{AC=new (window.AudioContext||window.webkitAudioContext)();}catch(e){}}return AC;}\nfunction som(freq,dur,tipo,vol){\n  if(S.mudo) return;\n  const ac=audio(); if(!ac) return;\n  try{\n    const o=ac.createOscillator(),g=ac.createGain();\n    o.type=tipo||\"sine\"; o.frequency.value=freq;\n    g.gain.setValueAtTime(vol||0.12,ac.currentTime);\n    g.gain.exponentialRampToValueAtTime(0.001,ac.currentTime+(dur||0.08));\n    o.connect(g); g.connect(ac.destination);\n    o.start(); o.stop(ac.currentTime+(dur||0.08)+0.02);\n  }catch(e){}\n}\nfunction somAcerto(){som(740,.07);t(()=>som(1108,.1),70);}\nfunction somVerdade(){som(523,.12);t(()=>som(659,.12),110);t(()=>som(880,.2),220);}\nfunction somFalha(){som(140,.28,\"sawtooth\",.14);}\nfunction somTick(){som(520,.03,\"square\",.05);}\n$(\"btn-som\").addEventListener(\"click\",()=>{\n  S.mudo=!S.mudo;\n  $(\"btn-som\").textContent=S.mudo?\"\u2205\":\"\u266a\";\n});\n\nfunction flutuar(texto,x,y){\n  const f=document.createElement(\"div\");\n  f.className=\"flut\"; f.textContent=texto;\n  f.style.left=(x-14)+\"px\"; f.style.top=(y-14)+\"px\";\n  RAIZ.appendChild(f);\n  t(()=>f.remove(),750);\n}\nfunction festa(x,y){\n  for(let k=0;k<10;k++){\n    const p=document.createElement(\"div\");\n    p.className=\"particula\";\n    p.style.left=x+\"px\"; p.style.top=y+\"px\";\n    p.style.setProperty(\"--vx\",(Math.random()*120-60)+\"px\");\n    p.style.setProperty(\"--vy\",(Math.random()*-90-20)+\"px\");\n    RAIZ.appendChild(p);\n    t(()=>p.remove(),650);\n  }\n}\nfunction impacto(){\n  somFalha();\n  $(\"flash\").classList.remove(\"vai\"); void $(\"flash\").offsetWidth; $(\"flash\").classList.add(\"vai\");\n  arena.classList.remove(\"tremer\"); void arena.offsetWidth; arena.classList.add(\"tremer\");\n  if(navigator.vibrate) try{navigator.vibrate(70);}catch(e){}\n}\n\nconst TOTAL_NIVEIS=10;\nconst NIVEIS=[\n  {titulo:\"The Reflection\",\n   regra:'Two words appear. One is real, the other is its mirror image, written backwards. <strong>Tap the real one.<\/strong> Halfway through, the rule flips and you must tap the reflection instead.',\n   hint:'Hint: mirrored letters read backwards. Trust the word you can actually read, and stay awake for the moment the rule changes.'},\n  {titulo:\"The Drawer\",\n   regra:'Twelve sealed envelopes. Inside them, the things you keep avoiding. <strong>Open them two at a time and find the six matching pairs<\/strong> within 14 tries.',\n   hint:'Hint: the envelopes never move. Every time one opens, photograph it in your mind. Build the map, two by two.'},\n  {titulo:\"The Impulse\",\n   regra:'A sentence you keep running from is hidden in the noise. The red buttons shout. <strong>Never touch them.<\/strong> The quiet green button whispers one word at a time. <strong>Tap it every time it appears<\/strong> until the sentence is complete.',\n   hint:'Hint: the sentence builds at the top with every quiet tap. Ignore everything that shouts. The truth arrives one word at a time.'},\n  {titulo:\"The Drift\",\n   regra:'You are the golden dot. The market rains down on you for 20 seconds. <strong>Drag your finger or use the arrows to dodge.<\/strong> One touch and you lose. It starts slow. It will not stay slow.',\n   hint:'Hint: make small moves and watch the words being born at the top, not the ones near you. Every three words you dodge, the rain speeds up.'},\n  {titulo:\"The Echo\",\n   regra:'The Mirror shows you a sequence of lights. <strong>Give it back in reverse order<\/strong>, because a mirror flips everything it receives. Four rounds, each one longer.',\n   hint:'Hint: say the sequence out loud as it plays, then walk it backwards from the last light to the first.'},\n  {titulo:\"The Novelty\",\n   regra:'Tap <strong>CONTINUE<\/strong> again and again until the bar reaches 100%. Shiny new buttons will pop up promising everything. <strong>One touch on them resets your progress to zero.<\/strong> You have 20 seconds.',\n   hint:'Hint: nothing shiny in that box helps you. The boring button is the only one that builds.'},\n  {titulo:\"The Plan\",\n   regra:'Numbered circles appear for a moment. Then the numbers hide. <strong>Tap them in order, from memory.<\/strong> Two rounds. A plan only counts if you can remember it.',\n   hint:'Hint: photograph the numbers with your eyes before they hide. Group them: where is 1, where is 2, and so on.'},\n  {titulo:\"The Command\",\n   regra:'The screen shouts orders. <strong>Obey the colour, never the word.<\/strong> Green means tap it. Red means hold still and let it pass. Ten orders, faster and faster.',\n   hint:'Hint: the word is a distraction. Look only at the colour. Green: tap. Red: freeze, even if the word says TAP.'},\n  {titulo:\"The Race\",\n   regra:'Everything runs across the screen. <strong>Catch only what is yours, in gold.<\/strong> One single touch on what belongs to the others and you lose. You need ten.',\n   hint:'Hint: gold is yours. Red belongs to them. Let them run past you. Patience wins this one.'},\n  {titulo:\"The Sorting\",\n   regra:'Your inner drawer, wide open. Words will appear one by one. <strong>Real things you must face go to one side, excuses go to the other.<\/strong> Twelve words. Zero mistakes. The last level forgives nothing.',\n   hint:'Hint: real things have numbers, dates and names. Excuses only ever say \"later\".'}\n];\nconst VERDADES=[\n  \"When you never choose yourself first, you are not being generous. You are becoming invisible.\",\n  \"Not knowing is heavier than knowing. Always.\",\n  \"Money does not create character. It reveals it.\",\n  \"When you do not decide, someone decides for you.\",\n  \"The moment you stop looking for the audience, the audience disappears.\",\n  \"When everything is a restart, nothing grows deep.\",\n  \"Faith without action is not faith. It is waiting.\",\n  \"Security without freedom is nothing more than a comfortable cell.\",\n  \"Keeping up means never stopping. Never staying. Never saying enough.\",\n  \"Disorganization was never bad luck. It was an unconscious choice.\"\n];\nconst PROVOCACOES=[\n  \"Level two is already waiting for you. The question is whether you are ready.\",\n  \"Will you reach the end of the next level, or will you meet yourself there?\",\n  \"Most people quit before this point. You are still here.\",\n  \"Four out of one hundred. The Mirror is starting to take you seriously.\",\n  \"Halfway to the tenth. The Mirror does not know you by heart. Yet.\",\n  \"The next one asks for memory. Yours, not your phone's.\",\n  \"Now let us see who commands you when the screen shouts orders.\",\n  \"The others will run past you. Try not to follow.\",\n  \"Last one. Your inner drawer is a mess. Time to sort it.\",\n  \"\"\n];\nconst FALHAS=[\n  \"The Mirror won this one.\",\n  \"It was just a game. Then why did it sting?\",\n  \"Autopilot again, NOME?\",\n  \"The Mirror is smiling. Will you let it?\",\n  \"Losing is not the problem. Repeating is.\",\n  \"The reflection was faster. For now.\"\n];\nconst RETORTAS={\n  eu:\"Curious. That is exactly what your mirror would answer.\",\n  ecra:\"At least you are honest. Let us see how long that lasts.\"\n};\nfunction fraseFalha(){return escolher(FALHAS).replace(\"NOME\",S.nome?S.nome:\"you\");}\n\nlet veuAccao=null;\nfunction veuMostrar(html,accao,classe){\n  limpar();\n  veu.className=classe?classe+\" on\":\"on\";\n  veu.innerHTML=html;\n  veuAccao=accao;\n}\nfunction veuFechar(){veu.className=\"\";veu.innerHTML=\"\";veuAccao=null;}\nveu.addEventListener(\"click\",e=>{\n  if(e.target.closest(\"#btn-desisto\")){desistir();return;}\n  if(e.target.closest(\"#btn-saltar-falha\")){passou();return;}\n  if(veuAccao){const a=veuAccao;veuAccao=null;a();}\n});\n\nfunction pontosNivel(){\n  let h=\"\";\n  for(let k=1;k<=TOTAL_NIVEIS;k++){\n    h+='<span class=\"ponto'+(k<S.nivel?' feito':(k===S.nivel?' actual':''))+'\"><\/span>';\n  }\n  $(\"pontos-nivel\").innerHTML=h;\n}\n\nfunction introNivel(){\n  limpar();\n  mostrar(\"s-jogo\");\n  arena.innerHTML=\"\";\n  const n=NIVEIS[S.nivel-1];\n  $(\"hud-nivel\").textContent=\"Level \"+S.nivel;\n  $(\"hud-tempo\").textContent=\"\";\n  pontosNivel();\n  veuMostrar(\n    '<div class=\"v-num\">Level '+S.nivel+' of 100<\/div>'+\n    '<div class=\"v-titulo\">'+n.titulo+'<\/div>'+\n    '<div class=\"v-texto\">'+n.regra+'<\/div>'+\n    '<div class=\"v-hint\">'+n.hint+'<\/div>'+\n    '<div class=\"v-toque\">Tap to begin<\/div>',\n    ()=>contagem(()=>[n1,n2,n3,n4,n5,n6,n7,n8,n9,n10][S.nivel-1]())\n  );\n}\n\nfunction contagem(depois){\n  let c=3;\n  function passo(){\n    if(c===0){veuFechar();depois();return;}\n    veu.className=\"on\";\n    veu.innerHTML='<div class=\"v-grande\">'+c+'<\/div>';\n    somTick();\n    c--;\n    t(passo,420);\n  }\n  veuAccao=null;\n  passo();\n}\n\nfunction falhou(){\n  limpar();\n  impacto();\n  const dica=NIVEIS[S.nivel-1].hint;\n  t(()=>{\n    veuMostrar(\n      '<div class=\"v-num\">The Mirror won<\/div>'+\n      '<div class=\"v-titulo\">'+fraseFalha()+'<\/div>'+\n      '<div class=\"v-hint\">'+dica+'<\/div>'+\n      '<div class=\"v-toque\">Tap anywhere to try again \u00b7 unlimited tries<\/div>'+\n      '<div class=\"dupla\"><button class=\"btn fantasma\" id=\"btn-saltar-falha\">Skip this level \u00bb<\/button><button class=\"btn fantasma\" id=\"btn-desisto\">I quit<\/button><\/div>',\n      ()=>introNivel(),\n      \"falha\"\n    );\n  },350);\n}\n\nfunction passou(){\n  limpar();\n  somVerdade();\n  fixarRecorde(S.nivel);\n  const r=arena.getBoundingClientRect();\n  festa(r.left+r.width\/2,r.top+r.height\/2);\n  const semente=S.nivel>=4?'<div style=\"margin-top:20px;font-size:12px;letter-spacing:.2em;text-transform:uppercase;opacity:.6\">This truth lives on the page of a book<\/div>':'';\n  t(()=>{\n    veuMostrar(\n      '<div class=\"v-num\">Truth unlocked \u00b7 '+S.nivel+' of 100<\/div>'+\n      '<div class=\"v-verdade\">'+VERDADES[S.nivel-1]+'<\/div>'+\n      (PROVOCACOES[S.nivel-1]?'<div class=\"v-provocacao\">'+PROVOCACOES[S.nivel-1]+'<\/div>':'')+\n      semente+\n      '<div class=\"v-toque\">Tap to continue<\/div>',\n      ()=>depoisDaVerdade()\n    );\n  },500);\n}\n\nfunction depoisDaVerdade(){\n  veuFechar();\n  if(S.nivel===3) if(!S.gateFeito){mostrar(\"s-gate\");return;}\n  proximo();\n}\nfunction proximo(){\n  if(S.nivel>=TOTAL_NIVEIS){fim(true);return;}\n  S.nivel++;\n  introNivel();\n}\n\n\/* seta p\u00fablica de saltar n\u00edvel, para an\u00e1lise *\/\n$(\"btn-skip\").addEventListener(\"click\",()=>{passou();});\nwindow.addEventListener(\"keydown\",e=>{if(e.key===\"s\"||e.key===\"S\"){if($(\"s-jogo\").classList.contains(\"on\")) passou();}});\n\n\/* entrada com din\u00e2micas rotativas nos bot\u00f5es *\/\nlet piscaLado=0;\nconst fxRel=setInterval(()=>{\n  const bs=RAIZ.querySelectorAll(\"#s-entrada .btn[data-resp]\");\n  if(!bs.length){clearInterval(fxRel);return;}\n  bs.forEach(b=>b.classList.remove(\"pisca\"));\n  const alvoB=bs[piscaLado%bs.length];\n  void alvoB.offsetWidth;\n  alvoB.classList.add(\"pisca\");\n  som(880,.05,\"square\",.04);\n  piscaLado++;\n},2200);\n\n\/* paleta de 15 cores: o fundo inteiro muda com o utilizador *\/\nconst CORES15=[\"#F6F1E7\",\"#FFFFFF\",\"#EFE3C9\",\"#F3E0DA\",\"#E8C9C4\",\"#EAD9A9\",\"#D8E6EC\",\"#DCE9DC\",\"#C9D6C5\",\"#E3DDF0\",\"#155E75\",\"#1F5C49\",\"#0B2E3C\",\"#3B2A45\",\"#23262B\"];\nfunction hexRgb(h){const n=parseInt(h.slice(1),16);return [Math.floor(n\/65536),Math.floor(n\/256)%256,n%256];}\nfunction mistura(h,alvoC,p){const a=hexRgb(h);const c=a.map((v,ix)=>Math.round(v+(alvoC[ix]-v)*p));return \"rgb(\"+c[0]+\",\"+c[1]+\",\"+c[2]+\")\";}\nfunction misturaA(h,alvoC,p,alfa){const a=hexRgb(h);const c=a.map((v,ix)=>Math.round(v+(alvoC[ix]-v)*p));return \"rgba(\"+c[0]+\",\"+c[1]+\",\"+c[2]+\",\"+alfa+\")\";}\nfunction aplicarFundo(h){\n  const a=hexRgb(h);\n  const luz=(a[0]*299+a[1]*587+a[2]*114)\/1000;\n  const claro=luz>150;\n  const est=RAIZ.style;\n  est.setProperty(\"--preto\",h);\n  if(claro){\n    est.setProperty(\"--marfim\",\"#26333F\");\n    est.setProperty(\"--cinza\",\"#55626D\");\n    est.setProperty(\"--carvao\",mistura(h,[255,255,255],.75));\n    est.setProperty(\"--grafite\",mistura(h,[0,0,0],.06));\n    est.setProperty(\"--linha\",mistura(h,[0,0,0],.18));\n    est.setProperty(\"--ouro\",\"#A97E22\");\n    est.setProperty(\"--ouro-claro\",\"#7E5D14\");\n    est.setProperty(\"--veu\",misturaA(h,[255,255,255],.1,.96));\n  } else {\n    est.setProperty(\"--marfim\",\"#F2ECE0\");\n    est.setProperty(\"--cinza\",mistura(h,[255,255,255],.55));\n    est.setProperty(\"--carvao\",mistura(h,[255,255,255],.09));\n    est.setProperty(\"--grafite\",mistura(h,[255,255,255],.16));\n    est.setProperty(\"--linha\",mistura(h,[255,255,255],.28));\n    est.setProperty(\"--ouro\",\"#D9AE55\");\n    est.setProperty(\"--ouro-claro\",\"#E8C87E\");\n    est.setProperty(\"--veu\",misturaA(h,[0,0,0],.3,.94));\n  }\n  try{localStorage.setItem(\"espelho_fundo\",h);}catch(e){}\n  RAIZ.querySelectorAll(\".bola\").forEach(x=>x.classList.toggle(\"escolhida\",x.dataset.c===h));\n}\nconst paletaEl=$(\"paleta\");\nCORES15.forEach(c=>{\n  const b=document.createElement(\"button\");\n  b.className=\"bola\";\n  b.dataset.c=c;\n  b.style.background=c;\n  b.title=\"Change the colour of the mirror\";\n  b.addEventListener(\"click\",()=>{audio();som(660,.05);aplicarFundo(c);});\n  paletaEl.appendChild(b);\n});\ntry{const f=localStorage.getItem(\"espelho_fundo\");if(f) aplicarFundo(f);}catch(e){}\n\n\nRAIZ.querySelectorAll(\"#s-entrada .btn[data-resp]\").forEach(b=>{\n  b.addEventListener(\"click\",()=>{\n    audio();\n    som(660,.08);\n    clearInterval(fxRel);\n    $(\"entrada-texto\").textContent=RETORTAS[b.dataset.resp];\n    $(\"entrada-botoes\").innerHTML='<button class=\"btn fx2\" id=\"btn-entrar\">Enter the Mirror<\/button>';\n    $(\"btn-entrar\").addEventListener(\"click\",()=>introNivel());\n  });\n});\nconst marcaAtual=recorde();\nif(marcaAtual>0) $(\"marca\").textContent=\"Your best mark: level \"+marcaAtual+\" of 100\";\n\nfunction partilhar(texto,alvo){\n  const completo=texto+\" \"+JOGO_URL;\n  let feito=false;\n  if(navigator.share){\n    try{navigator.share({title:\"The Mirror\",text:texto,url:JOGO_URL});feito=true;}catch(e){}\n  }\n  if(!feito) if(navigator.clipboard?navigator.clipboard.writeText:false){\n    navigator.clipboard.writeText(completo).then(()=>{if(alvo) alvo.textContent=\"Link copied. Spread the Mirror.\";});\n  } else if(alvo) alvo.textContent=completo;\n}\n$(\"btn-partilhar-inicio\").addEventListener(\"click\",()=>partilhar(\"Is it you, or is it your mirror? A game of 100 levels.\",$(\"copiado-inicio\")));\n$(\"btn-partilhar-fim\").addEventListener(\"click\",()=>partilhar($(\"fim-frase\").textContent+\" Enter the Mirror, if you dare.\",$(\"copiado\")));\n\nfunction renderVerdades(){\n  const r=recorde();\n  const lista=$(\"lista-verdades\");\n  lista.innerHTML=\"\";\n  for(let k=1;k<=TOTAL_NIVEIS;k++){\n    const div=document.createElement(\"div\");\n    if(k<=r){\n      div.className=\"verdade-item\";\n      div.textContent=\"\u201c\"+VERDADES[k-1]+\"\u201d\";\n    } else {\n      div.className=\"verdade-item presa\";\n      div.textContent=\"Truth \"+k+\". Still inside the Mirror, waiting for you.\";\n    }\n    lista.appendChild(div);\n  }\n  $(\"btn-livro-verdades\").style.display = r>=4 ? \"inline-block\" : \"none\";\n}\n$(\"btn-ver-verdades\").addEventListener(\"click\",()=>{renderVerdades();mostrar(\"s-verdades\");});\n$(\"btn-voltar-verdades\").addEventListener(\"click\",()=>mostrar(\"s-entrada\"));\n\nfunction enviarGate(nome,email){\n  try{\n    const fd=new FormData();\n    fd.append(\"fields[email]\",email);\n    fd.append(\"fields[name]\",nome);\n    fd.append(\"ml-submit\",\"1\");\n    fd.append(\"anticsrf\",\"true\");\n    fetch(ML_URL,{method:\"POST\",body:fd,mode:\"cors\"}).catch(function(){});\n  }catch(e){}\n}\n$(\"btn-gate\").addEventListener(\"click\",()=>{\n  const nome=$(\"g-nome\").value.trim();\n  const email=$(\"g-email\").value.trim();\n  if(!nome||!\/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(email)){\n    $(\"g-email\").classList.add(\"tremer\");\n    setTimeout(()=>$(\"g-email\").classList.remove(\"tremer\"),400);\n    return;\n  }\n  S.nome=nome.split(\" \")[0]; S.gateFeito=true;\n  try{localStorage.setItem(\"espelho_nome\",S.nome);localStorage.setItem(\"espelho_email\",email);}catch(e){}\n  enviarGate(S.nome,email);\n  proximo();\n});\n$(\"btn-gate-nao\").addEventListener(\"click\",()=>{S.gateFeito=true;proximo();});\n\nfunction fim(venceu){\n  limpar(); veuFechar();\n  if(venceu){\n    fixarRecorde(10);\n    $(\"fim-micro\").textContent=\"You reached the end. For now.\";\n    $(\"fim-titulo\").textContent=\"You crossed the first ten levels. Some say there are one hundred.\";\n    $(\"fim-sub\").innerHTML='The ten truths you unlocked were not written for this game. They all came from the same book: <strong>It Was Never About The Money<\/strong>. The game showed you ten sentences. The book shows you the rest of the mirror.<br><br><a href=\"'+LIVRO_URL+'\" class=\"btn\" style=\"margin-top:0\">Meet the book<\/a>';\n    $(\"fim-frase\").textContent=\"I survived the first ten levels of The Mirror. The Mirror did not like it.\";\n    $(\"fim-nivel\").textContent=\"Level 10 of 100 \u00b7 the-mirror\";\n  }else{\n    $(\"fim-micro\").textContent=\"End of session\";\n    $(\"fim-titulo\").textContent=\"Quitting is also a choice. At least this one was conscious.\";\n    $(\"fim-sub\").textContent=S.nivel>=4?\"The truths you already unlocked belong to a book. Finish the Mirror and it will tell you which one.\":\"\";\n    $(\"fim-frase\").textContent=escolher([\n      \"I stopped at level NN. The Mirror won.\",\n      \"The Mirror threw me out at level NN. Can you do better?\",\n      \"Level NN. That is where I met myself. And lost.\"\n    ]).replace(\"NN\",S.nivel);\n    $(\"fim-nivel\").textContent=\"Level \"+S.nivel+\" of 100 \u00b7 the-mirror\";\n  }\n  mostrar(\"s-fim\");\n}\nfunction desistir(){fim(false);}\n$(\"btn-recomecar\").addEventListener(\"click\",()=>{S.nivel=1;$(\"copiado\").textContent=\"\";introNivel();});\n\nfunction n1(){\n  const palavras=[\"CHOICE\",\"TRUTH\",\"CONTROL\",\"COURAGE\",\"HABIT\",\"CLARITY\",\"DECISION\",\"MARGIN\"];\n  const total=8;\n  let ronda=0,relogio=null;\n  arena.innerHTML='<div class=\"instrucao\" id=\"i1\"><\/div><div class=\"par\" id=\"par1\"><\/div>';\n  function novaRonda(mudouAgora){\n    ronda++;\n    if(ronda>total){passou();return;}\n    $(\"hud-nivel\").textContent=\"Level 1 \u00b7 round \"+ronda+\" of \"+total;\n    const invertida=ronda>=6;\n    const instr=$(\"i1\");\n    if(mudouAgora){\n      veuMostrar('<div class=\"v-grande\" style=\"font-size:clamp(30px,9vw,54px)\">The rule changed.<\/div>',null);\n      som(220,.3,\"triangle\",.14);\n      t(()=>{veuFechar();montar();},900);\n    }else montar();\n    function montar(){\n      instr.innerHTML=invertida?'Now tap the <span class=\"chave\">reflection<\/span>.':'Tap the <span class=\"chave\">real<\/span> word.';\n      const palavra=escolher(palavras);\n      const par=$(\"par1\"); par.innerHTML=\"\";\n      const cartas=baralhar([{mirror:false},{mirror:true}]);\n      cartas.forEach(c=>{\n        const el=document.createElement(\"div\");\n        el.className=\"carta\"+(c.mirror?\" mirror\":\"\");\n        el.textContent=palavra;\n        el.addEventListener(\"click\",ev=>{\n          if(relogio){clearInterval(relogio);relogio=null;}\n          const certa=invertida?c.mirror:!c.mirror;\n          if(certa){\n            somAcerto();\n            flutuar(\"+1\",ev.clientX,ev.clientY);\n            festa(ev.clientX,ev.clientY);\n            novaRonda(ronda+1===6);\n          }else falhou();\n        });\n        par.appendChild(el);\n      });\n      const limite=2600-(ronda-1)*170;\n      let restante=limite;\n      relogio=i(()=>{\n        restante-=100;\n        barra(100*restante\/limite,restante<800);\n        $(\"hud-tempo\").textContent=(Math.max(0,restante)\/1000).toFixed(1)+\"s\";\n        if(restante<=800) if(restante%300<100) somTick();\n        if(restante<=0){clearInterval(relogio);relogio=null;falhou();}\n      },100);\n    }\n  }\n  novaRonda(false);\n}\n\nfunction n2(){\n  const pares=[\"FEAR\",\"GUILT\",\"DEBT\",\"IMPULSE\",\"HABIT\",\"EXCUSE\"];\n  const dados=baralhar([...pares,...pares]);\n  const limite=14;\n  let tentativas=0,abertas=[],achados=0,tranca=false;\n  const sussurros=[\n    \"You have seen that one. Forgot already?\",\n    \"The drawer is not in a hurry. You are.\",\n    \"You are close. Can you feel it?\",\n    \"What you avoid does not disappear.\"\n  ];\n  arena.innerHTML='<div class=\"instrucao\">Open the envelopes. Find what you keep avoiding.<\/div><div class=\"grelha\" id=\"g2\"><\/div><div class=\"sussurro\" id=\"sus\"><\/div>';\n  $(\"hud-nivel\").textContent=\"Level 2 \u00b7 The Drawer\";\n  $(\"hud-tempo\").textContent=limite+\" tries\";\n  barra(100);\n  const g=$(\"g2\");\n  dados.forEach(palavra=>{\n    const el=document.createElement(\"div\");\n    el.className=\"env\";\n    el.innerHTML='<span class=\"verso\">\u2709<\/span><span class=\"frente\">'+palavra+'<\/span>';\n    el.dataset.p=palavra;\n    el.addEventListener(\"click\",ev=>{\n      if(tranca||el.classList.contains(\"aberta\")||el.classList.contains(\"par\")) return;\n      som(600+Math.random()*100,.05,\"triangle\",.08);\n      el.classList.add(\"aberta\");\n      abertas.push(el);\n      if(abertas.length===2){\n        tranca=true;\n        tentativas++;\n        $(\"hud-tempo\").textContent=(limite-tentativas)+\" tries\";\n        barra(100*(limite-tentativas)\/limite,limite-tentativas<=3);\n        const [a,b]=abertas;\n        if(a.dataset.p===b.dataset.p){\n          achados++;\n          somAcerto();\n          festa(ev.clientX,ev.clientY);\n          t(()=>{\n            a.classList.add(\"par\");b.classList.add(\"par\");\n            abertas=[];tranca=false;\n            if(achados===pares.length) passou();\n            else if(tentativas>=limite) falhou();\n          },320);\n        }else{\n          $(\"sus\").textContent=escolher(sussurros);\n          t(()=>{\n            a.classList.remove(\"aberta\");b.classList.remove(\"aberta\");\n            abertas=[];tranca=false;\n            if(tentativas>=limite) falhou();\n          },650);\n        }\n      }\n    });\n    g.appendChild(el);\n  });\n}\n\nfunction n3(){\n  const palavrasFrase=[\"Money\",\"does\",\"not\",\"create\",\"character.\",\"It\",\"reveals\",\"it.\"];\n  const DUR=26000;\n  const gritos=[\"BUY NOW\",\"TODAY ONLY\",\"LAST CHANCE\",\"YOU DESERVE IT\",\"EVERYONE HAS IT\",\"DO NOT THINK, TAP\",\"ALMOST FREE\",\"90% OFF\"];\n  let vivo=true,inicio=Date.now(),idxPalavra=0,calma=null,mudan\u00e7a=null;\n  arena.innerHTML='<div class=\"instrucao\" id=\"i3\" style=\"flex-wrap:wrap\"><\/div><div id=\"campo3\"><\/div>';\n  const campo=$(\"campo3\");\n  function pintarFrase(){\n    const feitas=palavrasFrase.slice(0,idxPalavra).join(\" \");\n    $(\"i3\").innerHTML=feitas?'<span class=\"chave\">'+feitas+'<\/span>':'Listen for the whisper.';\n    $(\"hud-nivel\").textContent=\"Level 3 \u00b7 word \"+Math.min(idxPalavra+1,palavrasFrase.length)+\" of \"+palavrasFrase.length;\n  }\n  pintarFrase();\n  i(()=>{\n    if(!vivo) return;\n    const p=Date.now()-inicio;\n    barra(100*p\/DUR,DUR-p<5000);\n    $(\"hud-tempo\").textContent=Math.max(0,(DUR-p)\/1000).toFixed(1)+\"s\";\n    if(p>=DUR){vivo=false;falhou();}\n  },100);\n  function isca(){\n    if(!vivo) return;\n    const b=document.createElement(\"button\");\n    b.className=\"isca\";\n    b.textContent=escolher(gritos);\n    const escala=1+(Date.now()-inicio)\/DUR*0.5;\n    b.style.fontSize=(13*escala)+\"px\";\n    b.style.left=(6+Math.random()*60)+\"%\";\n    b.style.top=(6+Math.random()*72)+\"%\";\n    b.addEventListener(\"click\",()=>{if(vivo){vivo=false;falhou();}});\n    campo.appendChild(b);\n    som(880+Math.random()*440,.04,\"square\",.03);\n    t(()=>{if(b.parentNode) b.remove();},850+Math.random()*650);\n    t(isca,Math.max(340,650-(Date.now()-inicio)\/DUR*280)+Math.random()*300);\n  }\n  isca();\n  function mostrarCalma(){\n    if(!vivo) return;\n    if(idxPalavra>=palavrasFrase.length) return;\n    if(calma){calma.remove();calma=null;}\n    const c=document.createElement(\"button\");\n    c.className=\"calma\";\n    c.textContent=palavrasFrase[idxPalavra].toUpperCase();\n    c.style.left=(8+Math.random()*58)+\"%\";\n    c.style.top=(10+Math.random()*66)+\"%\";\n    c.addEventListener(\"click\",ev=>{\n      if(!vivo) return;\n      somAcerto();festa(ev.clientX,ev.clientY);\n      idxPalavra++;\n      c.remove();calma=null;\n      pintarFrase();\n      if(idxPalavra>=palavrasFrase.length){\n        vivo=false;\n        som(523,.15);t(()=>som(783,.2),140);\n        t(()=>passou(),450);\n        return;\n      }\n      t(mostrarCalma,420);\n    });\n    campo.appendChild(c);\n    calma=c;\n    som(392,.2,\"sine\",.09);\n    \/* a palavra muda de lugar se demorares *\/\n    mudan\u00e7a=t(()=>{if(vivo) if(calma===c) mostrarCalma();},2600);\n  }\n  t(mostrarCalma,1100);\n}\nlet n4Tentativas=0;\nfunction n4(){\n  const DUR=20000;\n  n4Tentativas++;\n  const misericordia=Math.max(0.55, 1-Math.max(0,n4Tentativas-5)*0.12);\n  const POOL=[\"SALE\",\"NEW\",\"MORE\",\"NOW\",\"BUY\",\"OFFER\",\"DEAL\",\"TREND\",\"UPGRADE\",\"LIMITED\",\"HURRY\",\"STATUS\",\"KEEP UP\",\"COMPARE\",\"FASTER\",\"BIGGER\",\"SHINY\",\"EXTRA\",\"BONUS\",\"CREDIT\",\"LOAN\",\"WANT\",\"NEED IT\",\"MUST HAVE\",\"VIRAL\",\"HYPE\",\"FLASH\",\"PROMO\",\"DISCOUNT\",\"PREMIUM\",\"LUXURY\",\"ENVY\",\"IMAGE\",\"LOOK RICH\",\"SHOW OFF\",\"APPLAUSE\",\"LIKES\",\"FOLLOWERS\",\"TRENDING\",\"NEW DROP\"];\n  let baralho=[];\n  function proximaPalavra(){\n    if(!baralho.length) baralho=baralhar([...POOL]);\n    return baralho.pop();\n  }\n  let vivo=true,inicio=Date.now(),x=0.5,dir=0,ultimoPointerX=null,esquivadas=0,spawns=0;\n  arena.innerHTML=\n    '<div class=\"instrucao\">Dodge. <span class=\"chave\">Everything<\/span> up there wants to touch you.<\/div>'+\n    '<div id=\"campo4\"><div id=\"tu\"><\/div><\/div>'+\n    '<div class=\"controlos\"><button class=\"ctl\" id=\"c-esq\">\u25c0<\/button><button class=\"ctl\" id=\"c-dir\">\u25b6<\/button><\/div>';\n  $(\"hud-nivel\").textContent=\"Level 4 \u00b7 dodged 0\";\n  const campo=$(\"campo4\");\n  const tu=$(\"tu\");\n  const quedas=[];\n  function velocidadeNivel(){return (1+Math.floor(esquivadas\/3)*0.18)*misericordia;}\n  function pintarTu(){tu.style.left=(x*(campo.clientWidth-16))+\"px\";}\n  pintarTu();\n  function segurar(el,v){\n    el.addEventListener(\"pointerdown\",e=>{e.preventDefault();dir=v;});\n    [\"pointerup\",\"pointerleave\",\"pointercancel\"].forEach(ev=>el.addEventListener(ev,()=>{dir=0;}));\n  }\n  segurar($(\"c-esq\"),-1);\n  segurar($(\"c-dir\"),+1);\n  campo.addEventListener(\"pointerdown\",e=>{ultimoPointerX=e.clientX;});\n  campo.addEventListener(\"pointermove\",e=>{\n    if(ultimoPointerX===null) return;\n    const dx=e.clientX-ultimoPointerX;\n    ultimoPointerX=e.clientX;\n    x+=dx\/(campo.clientWidth-16);\n    x=Math.max(0,Math.min(1,x));\n    pintarTu();\n  });\n  [\"pointerup\",\"pointerleave\",\"pointercancel\"].forEach(ev=>campo.addEventListener(ev,()=>{ultimoPointerX=null;}));\n  const kd=e=>{if(e.key===\"ArrowLeft\") dir=-1;if(e.key===\"ArrowRight\") dir=+1;};\n  const ku=e=>{if(e.key===\"ArrowLeft\"||e.key===\"ArrowRight\") dir=0;};\n  window.addEventListener(\"keydown\",kd);\n  window.addEventListener(\"keyup\",ku);\n  function largarTeclas(){window.removeEventListener(\"keydown\",kd);window.removeEventListener(\"keyup\",ku);}\n  function novaQueda(){\n    if(!vivo) return;\n    spawns++;\n    const el=document.createElement(\"div\");\n    el.className=\"queda\";\n    el.textContent=proximaPalavra();\n    campo.appendChild(el);\n    const w=campo.clientWidth;\n    const larguraPalavra=el.offsetWidth||60;\n    let px;\n    if(spawns%4===0){\n      const tuXpx=x*(w-16)+8;\n      px=Math.max(0,Math.min(w-larguraPalavra,tuXpx-larguraPalavra\/2));\n    } else {\n      px=Math.random()*(w-larguraPalavra);\n    }\n    const q={el,y:-22,vBase:0.9+Math.random()*0.5,px,w:larguraPalavra,h:Math.random()<0.5,contada:false};\n    el.style.left=px+\"px\";\n    el.style.top=\"-22px\";\n    quedas.push(q);\n    const intervalo=Math.max(300,(900\/velocidadeNivel())*(0.8+Math.random()*0.4));\n    t(novaQueda,intervalo);\n  }\n  novaQueda();\n  let rastoConta=0,tAnt=Date.now();\n  i(()=>{\n    if(!vivo) return;\n    const p=Date.now()-inicio;\n    barra(100*p\/DUR);\n    $(\"hud-tempo\").textContent=Math.max(0,(DUR-p)\/1000).toFixed(1)+\"s\";\n    if(p>=DUR){vivo=false;largarTeclas();passou();return;}\n    const tAg=Date.now();\n    const passos=Math.max(1,Math.min(40,Math.round((tAg-tAnt)\/16.7)));\n    tAnt=tAg;\n    const h=campo.clientHeight,w=campo.clientWidth;\n    const progresso=p\/DUR;\n    for(let sp=0;sp<passos;sp++){\n      if(!vivo) return;\n      x+=dir*0.022;x=Math.max(0,Math.min(1,x));\n      const tuX=x*(w-16)+8,tuY=h-34;\n      for(let k=quedas.length-1;k>=0;k--){\n        const q=quedas[k];\n        q.y+=q.vBase*velocidadeNivel()*1.35;\n        if(q.h){\n          const centro=q.px+q.w\/2;\n          const delta=tuX-centro;\n          const alcance=0.3+progresso*0.4;\n          const passo=Math.max(-alcance,Math.min(alcance,delta*0.02));\n          q.px=Math.max(0,Math.min(w-q.w,q.px+passo));\n        }\n        if(q.y>h+10){\n          if(!q.contada){\n            q.contada=true;\n            esquivadas++;\n            $(\"hud-nivel\").textContent=\"Level 4 \u00b7 dodged \"+esquivadas;\n            if(esquivadas%3===0) som(500+esquivadas*20,.05,\"triangle\",.05);\n          }\n          q.el.remove();quedas.splice(k,1);continue;\n        }\n        const maisPertoX=Math.max(q.px,Math.min(tuX,q.px+q.w));\n        const maisPertoY=Math.max(q.y,Math.min(tuY,q.y+20));\n        const dx=maisPertoX-tuX,dy=maisPertoY-tuY;\n        if(Math.sqrt(dx*dx+dy*dy)<11){vivo=false;largarTeclas();falhou();return;}\n      }\n    }\n    pintarTu();\n    quedas.forEach(q=>{q.el.style.top=q.y+\"px\";q.el.style.left=q.px+\"px\";});\n    if(++rastoConta%4===0){\n      const r=document.createElement(\"div\");\n      r.className=\"rasto\";\n      r.style.left=(x*(campo.clientWidth-16)+5)+\"px\";\n      r.style.bottom=\"30px\";\n      campo.appendChild(r);\n      t(()=>r.remove(),500);\n    }\n  },16);\n\n}\nfunction n5(){\n  const rondas=[3,4,5,6];\n  const tons=[261.6,329.6,392.0,523.3];\n  const nomes=[\"ME\",\"YOU\",\"THEM\",\"US\"];\n  let ronda=0,sequencia=[],entrada=[],aceita=false;\n  arena.innerHTML='<div class=\"instrucao\" id=\"i5\">Watch.<\/div><div class=\"eco-grelha\" id=\"g5\"><\/div>';\n  const g=$(\"g5\");\n  const celulas=[];\n  for(let k=0;k<4;k++){\n    const el=document.createElement(\"div\");\n    el.className=\"eco\";el.textContent=nomes[k];el.dataset.k=k;\n    g.appendChild(el);celulas.push(el);\n  }\n  function acender(k,dur){\n    return new Promise(res=>{\n      celulas[k].classList.add(\"acesa\");\n      som(tons[k],dur\/1000*.9,\"sine\",.14);\n      t(()=>{celulas[k].classList.remove(\"acesa\");t(res,140);},dur);\n    });\n  }\n  async function mostrarSeq(){\n    aceita=false;\n    $(\"i5\").textContent=\"Watch.\";\n    $(\"hud-nivel\").textContent=\"Level 5 \u00b7 round \"+(ronda+1)+\" of \"+rondas.length;\n    barra(100*(ronda)\/rondas.length);\n    sequencia=[];\n    for(let k=0;k<rondas[ronda];k++) sequencia.push(Math.floor(Math.random()*4));\n    await new Promise(r=>t(r,600));\n    for(const k of sequencia) await acender(k,Math.max(280,500-ronda*55));\n    entrada=[];aceita=true;\n    $(\"i5\").innerHTML='Give it back. <span class=\"chave\">In reverse.<\/span>';\n  }\n  celulas.forEach(el=>{\n    el.addEventListener(\"click\",ev=>{\n      if(!aceita) return;\n      const k=parseInt(el.dataset.k,10);\n      el.classList.add(\"acesa\");\n      som(tons[k],.14,\"sine\",.14);\n      t(()=>el.classList.remove(\"acesa\"),160);\n      entrada.push(k);\n      const esperado=sequencia[sequencia.length-entrada.length];\n      if(k!==esperado){aceita=false;falhou();return;}\n      if(entrada.length===sequencia.length){\n        aceita=false;ronda++;\n        somAcerto();festa(ev.clientX,ev.clientY);\n        if(ronda>=rondas.length) t(()=>passou(),400);\n        else t(mostrarSeq,750);\n      }\n    });\n  });\n  mostrarSeq();\n}\n\nfunction n6(){\n  const DUR=20000;\n  const brilhos=[\"NEW \u2726\",\"RESTART\",\"VERSION 2.0\",\"CHANGE IT ALL\",\"ANOTHER LIFE\"];\n  let vivo=true,inicio=Date.now(),progresso=0;\n  arena.innerHTML=\n    '<div class=\"instrucao\">Build. Ignore the shine.<\/div>'+\n    '<div id=\"campo6\" style=\"position:relative;width:100%;max-width:480px;height:min(46vh,340px);border:1px solid var(--linha);border-radius:8px;overflow:hidden;background:var(--carvao)\">'+\n      '<div id=\"metro\" style=\"position:absolute;left:0;bottom:0;height:6px;width:0%;background:var(--ouro);transition:width .15s\"><\/div>'+\n      '<div id=\"pct\" style=\"position:absolute;top:10px;left:0;right:0;text-align:center;font-family:Georgia,serif;font-size:26px;color:var(--ouro-claro)\">0%<\/div>'+\n    '<\/div>'+\n    '<button class=\"btn\" id=\"b-continua\" style=\"width:100%;max-width:480px;margin-top:14px\">Continue<\/button>';\n  $(\"hud-nivel\").textContent=\"Level 6 \u00b7 The Novelty\";\n  const campo=$(\"campo6\");\n  function pintar(){\n    $(\"metro\").style.width=progresso+\"%\";\n    $(\"pct\").textContent=progresso+\"%\";\n  }\n  $(\"b-continua\").addEventListener(\"click\",ev=>{\n    if(!vivo) return;\n    progresso=Math.min(100,progresso+3);\n    som(500+progresso*4,.04,\"triangle\",.06);\n    if(progresso%15===0) festa(ev.clientX,ev.clientY);\n    pintar();\n    if(progresso>=100){vivo=false;passou();}\n  });\n  i(()=>{\n    if(!vivo) return;\n    const p=Date.now()-inicio;\n    barra(100*p\/DUR,DUR-p<4000);\n    $(\"hud-tempo\").textContent=Math.max(0,(DUR-p)\/1000).toFixed(1)+\"s\";\n    if(p>=DUR){vivo=false;if(progresso<100) falhou();}\n  },100);\n  function brilho(){\n    if(!vivo) return;\n    const b=document.createElement(\"button\");\n    b.textContent=escolher(brilhos);\n    b.style.cssText=\"position:absolute;background:linear-gradient(135deg,#e6cf96,#c9a961);color:#0b0b0e;border:none;border-radius:6px;padding:13px 18px;font-size:13px;font-weight:800;letter-spacing:.06em;cursor:pointer;box-shadow:0 0 26px rgba(230,207,150,.65);animation:oesp-pulsar .7s infinite\";\n    b.style.left=(8+Math.random()*56)+\"%\";\n    b.style.top=(14+Math.random()*60)+\"%\";\n    b.addEventListener(\"click\",()=>{\n      if(!vivo) return;\n      progresso=0;pintar();\n      impacto();\n      $(\"pct\").textContent=\"0%. You restarted.\";\n    });\n    campo.appendChild(b);\n    som(1200,.06,\"square\",.05);\n    t(()=>{if(b.parentNode) b.remove();},1400+Math.random()*700);\n    t(brilho,1600+Math.random()*900);\n  }\n  t(brilho,1500);\n}\n\nfunction n7(){\n  const rondas=[5,7];\n  let ronda=0;\n  arena.innerHTML='<div class=\"instrucao\" id=\"i7\">Memorize the plan.<\/div><div id=\"campo7\" style=\"position:relative;width:100%;max-width:460px;height:min(48vh,360px);border:1px solid var(--linha);border-radius:8px;background:var(--carvao)\"><\/div>';\n  const campo=$(\"campo7\");\n  function novaRonda(){\n    $(\"hud-nivel\").textContent=\"Level 7 \u00b7 round \"+(ronda+1)+\" of \"+rondas.length;\n    $(\"i7\").textContent=\"Memorize the plan.\";\n    campo.innerHTML=\"\";\n    const n=rondas[ronda];\n    const celulas=baralhar(Array.from({length:16},(_,k)=>k)).slice(0,n);\n    let proximoNum=1,tapavel=false;\n    const discos=[];\n    celulas.forEach((c,idx)=>{\n      const col=c%4,lin=Math.floor(c\/4);\n      const d=document.createElement(\"div\");\n      d.textContent=idx+1;\n      d.dataset.n=idx+1;\n      d.style.cssText=\"position:absolute;width:54px;height:54px;border-radius:50%;background:var(--grafite);border:1px solid var(--ouro);display:flex;align-items:center;justify-content:center;font-family:Georgia,serif;font-size:22px;color:var(--ouro-claro);cursor:pointer;transition:all .2s\";\n      d.style.left=\"calc(\"+(col*25+3)+\"% )\";\n      d.style.top=(lin*24+4)+\"%\";\n      d.addEventListener(\"click\",()=>{\n        if(!tapavel) return;\n        const v=parseInt(d.dataset.n,10);\n        if(v===proximoNum){\n          proximoNum++;\n          d.textContent=v;\n          d.style.background=\"var(--ouro)\";d.style.color=\"#fff\";\n          somAcerto();\n          if(proximoNum>rondas[ronda]){\n            tapavel=false;ronda++;\n            if(ronda>=rondas.length) t(()=>passou(),450);\n            else t(novaRonda,800);\n          }\n        }else falhou();\n      });\n      campo.appendChild(d);\n      discos.push(d);\n    });\n    barra(100);\n    t(()=>{\n      discos.forEach(d=>{d.textContent=\"?\";d.style.color=\"var(--cinza)\";});\n      $(\"i7\").innerHTML='Now execute. <span class=\"chave\">In order.<\/span>';\n      som(392,.14);\n      tapavel=true;\n    },2200);\n  }\n  novaRonda();\n}\n\nfunction n8(){\n  const total=10;\n  let ronda=0;\n  arena.innerHTML='<div class=\"instrucao\">Obey the <span class=\"chave\">colour<\/span>. Never the word.<\/div><div id=\"campo8\" style=\"display:flex;align-items:center;justify-content:center;width:100%;max-width:460px;height:min(44vh,320px);border:1px solid var(--linha);border-radius:8px;background:var(--carvao)\"><\/div>';\n  const campo=$(\"campo8\");\n  function novaOrdem(){\n    ronda++;\n    if(ronda>total){passou();return;}\n    $(\"hud-nivel\").textContent=\"Level 8 \u00b7 order \"+ronda+\" of \"+total;\n    campo.innerHTML=\"\";\n    const palavra=Math.random()<0.5?\"TAP\":\"WAIT\";\n    const verde=Math.random()<0.5;\n    const janela=Math.max(750,1500-ronda*75);\n    let resolvida=false;\n    const b=document.createElement(\"button\");\n    b.textContent=palavra;\n    b.style.cssText=\"background:transparent;border:2px solid;border-radius:8px;padding:26px 44px;font-family:Georgia,serif;font-size:clamp(26px,7vw,40px);letter-spacing:.1em;cursor:pointer;color:\"+(verde?\"var(--verde)\":\"var(--vermelho)\")+\";border-color:\"+(verde?\"var(--verde)\":\"var(--vermelho)\");\n    b.addEventListener(\"click\",ev=>{\n      if(resolvida) return;\n      resolvida=true;\n      if(verde){somAcerto();festa(ev.clientX,ev.clientY);t(novaOrdem,220);}\n      else falhou();\n    });\n    campo.appendChild(b);\n    som(verde?659:220,.08,\"triangle\",.08);\n    let restante=janela;\n    const rel=i(()=>{\n      restante-=50;\n      barra(100*restante\/janela,restante<400);\n      $(\"hud-tempo\").textContent=(Math.max(0,restante)\/1000).toFixed(1)+\"s\";\n      if(restante<=0){\n        clearInterval(rel);\n        if(resolvida) return;\n        resolvida=true;\n        if(verde) falhou();\n        else{somAcerto();t(novaOrdem,200);}\n      }\n    },50);\n  }\n  novaOrdem();\n}\n\nfunction n9(){\n  const DUR=30000;\n  const teus=[\"MARGIN\",\"PEACE\",\"TIME\",\"CALM\",\"GROUND\"];\n  const deles=[\"MORE\",\"NEW\",\"STATUS\",\"NOW\",\"KEEP UP\",\"TOP\"];\n  const alvo=10;\n  let vivo=true,inicio=Date.now(),apanhados=0;\n  const moveis=[];\n  let tAnt9=Date.now();\n  arena.innerHTML='<div class=\"instrucao\">Catch what is <span class=\"chave\">yours<\/span>. Let the rest pass.<\/div><div id=\"campo9\" style=\"position:relative;width:100%;max-width:480px;height:min(48vh,360px);border:1px solid var(--linha);border-radius:8px;overflow:hidden;background:var(--carvao)\"><\/div>';\n  const campo=$(\"campo9\");\n  $(\"hud-nivel\").textContent=\"Level 9 \u00b7 0 of \"+alvo;\n  function novo(){\n    if(!vivo) return;\n    const teu=Math.random()<0.42;\n    const el=document.createElement(\"div\");\n    el.textContent=teu?escolher(teus):escolher(deles);\n    el.style.cssText=\"position:absolute;white-space:nowrap;font-weight:800;letter-spacing:.1em;font-size:14px;padding:10px 14px;border-radius:6px;cursor:pointer;\"+\n      (teu?\"color:#fff;background:var(--ouro);box-shadow:0 0 18px rgba(212,169,78,.5)\":\"color:#fff;background:var(--vermelho)\");\n    el.style.top=(6+Math.random()*80)+\"%\";\n    el.style.left=\"100%\";\n    el.dataset.teu=teu?\"1\":\"0\";\n    el.addEventListener(\"pointerdown\",ev=>{\n      if(!vivo) return;\n      if(el.dataset.teu===\"1\"){\n        apanhados++;\n        somAcerto();festa(ev.clientX,ev.clientY);\n        $(\"hud-nivel\").textContent=\"Level 9 \u00b7 \"+apanhados+\" of \"+alvo;\n        el.remove();\n        const ix=moveis.indexOf(el);if(ix>=0) moveis.splice(ix,1);\n        if(apanhados>=alvo){vivo=false;passou();}\n      }else{vivo=false;falhou();}\n    });\n    campo.appendChild(el);\n    moveis.push(el);\n    el._x=campo.clientWidth;\n    el._v=1.8+(Date.now()-inicio)\/DUR*2.6+Math.random()*0.8;\n    t(novo,Math.max(380,900-(Date.now()-inicio)\/DUR*450));\n  }\n  novo();\n  i(()=>{\n    if(!vivo) return;\n    const p=Date.now()-inicio;\n    barra(100*p\/DUR,DUR-p<6000);\n    $(\"hud-tempo\").textContent=Math.max(0,(DUR-p)\/1000).toFixed(1)+\"s\";\n    if(p>=DUR){vivo=false;if(apanhados<alvo) falhou();return;}\n    const dt9=Math.max(1,Math.min(5,(Date.now()-tAnt9)\/16.7));tAnt9=Date.now();\n    for(let k=moveis.length-1;k>=0;k--){\n      const el=moveis[k];\n      el._x-=el._v*dt9;\n      el.style.left=el._x+\"px\";\n      if(el._x<-140){el.remove();moveis.splice(k,1);}\n    }\n  },16);\n}\n\nfunction n10(){\n  const enfrentar=[\"INVOICE\",\"STATEMENT\",\"DEBT\",\"NUMBER\",\"DEADLINE\",\"TOTAL\"];\n  const desculpas=[\"TOMORROW\",\"LATER\",\"SOMEDAY\",\"WE WILL SEE\",\"NEXT MONTH\",\"NOT NOW\"];\n  const fila=baralhar([\n    ...enfrentar.map(p=>({p,lado:\"e\"})),\n    ...desculpas.map(p=>({p,lado:\"d\"}))\n  ]);\n  let idx=0,rel=null;\n  arena.innerHTML=\n    '<div class=\"instrucao\">Sort it. <span class=\"chave\">Zero mistakes.<\/span><\/div>'+\n    '<div id=\"palco10\" style=\"display:flex;align-items:center;justify-content:center;width:100%;max-width:460px;height:min(30vh,200px);border:1px solid var(--linha);border-radius:8px;background:var(--carvao);font-family:Georgia,serif;font-size:clamp(22px,6vw,34px);color:var(--ouro-claro);letter-spacing:.06em\"><\/div>'+\n    '<div class=\"controlos\" style=\"max-width:460px\"><button class=\"ctl\" id=\"b-enf\" style=\"font-size:13px;letter-spacing:.12em\">FACE IT<\/button><button class=\"ctl\" id=\"b-des\" style=\"font-size:13px;letter-spacing:.12em\">EXCUSE<\/button><\/div>';\n  function proxima(){\n    if(rel){clearInterval(rel);rel=null;}\n    if(idx>=fila.length){passou();return;}\n    $(\"hud-nivel\").textContent=\"Level 10 \u00b7 \"+(idx+1)+\" of \"+fila.length;\n    $(\"palco10\").textContent=fila[idx].p;\n    som(500,.05,\"triangle\",.06);\n    const janela=Math.max(1100,2200-idx*100);\n    let restante=janela;\n    rel=i(()=>{\n      restante-=50;\n      barra(100*restante\/janela,restante<500);\n      $(\"hud-tempo\").textContent=(Math.max(0,restante)\/1000).toFixed(1)+\"s\";\n      if(restante<=0){clearInterval(rel);rel=null;falhou();}\n    },50);\n  }\n  function responder(lado,ev){\n    if(idx>=fila.length) return;\n    if(fila[idx].lado===lado){\n      somAcerto();\n      if(ev) festa(ev.clientX,ev.clientY);\n      idx++;\n      proxima();\n    }else falhou();\n  }\n  $(\"b-enf\").addEventListener(\"click\",ev=>responder(\"e\",ev));\n  $(\"b-des\").addEventListener(\"click\",ev=>responder(\"d\",ev));\n  proxima();\n}\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>One hundred levels. One question.<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_blocks_custom_css":"","_kad_blocks_head_custom_js":"","_kad_blocks_body_custom_js":"","_kad_blocks_footer_custom_js":"","_monsterinsights_skip_tracking":false,"_kadence_starter_templates_imported_post":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-2926","page","type-page","status-publish","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"Level 1 Skip \u00bb \u266a The first truth Is it you looking at the screen, or is the screen looking at you? It is me It is the screen Share the Mirror Your truths Pick a colour \u00b7 the whole mirror changes Three levels in. You are still here. From here on, the Mirror remembers\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"google-site-verification\" content=\"U3Dznigq8tnattCWvt1GPnTWMAp7WtsVygODqwfNMWM\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/jepapublications.com\/it\/the-mirror\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/jepapublications.com\\\/it\\\/the-mirror\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jepapublications.com\\\/it#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/jepapublications.com\\\/it\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jepapublications.com\\\/it\\\/the-mirror\\\/#listItem\",\"name\":\"The Mirror\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jepapublications.com\\\/it\\\/the-mirror\\\/#listItem\",\"position\":2,\"name\":\"The Mirror\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jepapublications.com\\\/it#listItem\",\"name\":\"Home\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/jepapublications.com\\\/it\\\/#organization\",\"name\":\"JEPA Publications\",\"description\":\"Real Life Stories That Move Generations JEPA Publications shares powerful, real-life stories of courage, love, and transformation. We turn memories into meaningful words that inspire, touch hearts, restore hope, heal, and resonate across generations through the truth of lived experience.\",\"url\":\"https:\\\/\\\/jepapublications.com\\\/it\\\/\",\"telephone\":\"+17165414675\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/jepapublications.com\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/JEPA-Publications-English-website-logo.png\",\"@id\":\"https:\\\/\\\/jepapublications.com\\\/it\\\/the-mirror\\\/#organizationLogo\",\"width\":112,\"height\":112},\"image\":{\"@id\":\"https:\\\/\\\/jepapublications.com\\\/it\\\/the-mirror\\\/#organizationLogo\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/jepapublications.com\\\/it\\\/the-mirror\\\/#webpage\",\"url\":\"https:\\\/\\\/jepapublications.com\\\/it\\\/the-mirror\\\/\",\"name\":\"The Mirror - JEPA Publications\",\"description\":\"Level 1 Skip \\u00bb \\u266a The first truth Is it you looking at the screen, or is the screen looking at you? It is me It is the screen Share the Mirror Your truths Pick a colour \\u00b7 the whole mirror changes Three levels in. You are still here. From here on, the Mirror remembers\",\"inLanguage\":\"it-IT\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/jepapublications.com\\\/it\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/jepapublications.com\\\/it\\\/the-mirror\\\/#breadcrumblist\"},\"datePublished\":\"2026-08-01T08:06:43+00:00\",\"dateModified\":\"2026-08-01T21:45:46+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/jepapublications.com\\\/it\\\/#website\",\"url\":\"https:\\\/\\\/jepapublications.com\\\/it\\\/\",\"name\":\"JEPA Publications\",\"description\":\"Real Life Stories That Move Generations\",\"inLanguage\":\"it-IT\",\"publisher\":{\"@id\":\"https:\\\/\\\/jepapublications.com\\\/it\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"The Mirror - JEPA Publications","description":"Level 1 Skip \u00bb \u266a The first truth Is it you looking at the screen, or is the screen looking at you? It is me It is the screen Share the Mirror Your truths Pick a colour \u00b7 the whole mirror changes Three levels in. You are still here. From here on, the Mirror remembers","canonical_url":"https:\/\/jepapublications.com\/it\/the-mirror\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"google-site-verification":"U3Dznigq8tnattCWvt1GPnTWMAp7WtsVygODqwfNMWM","miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BreadcrumbList","@id":"https:\/\/jepapublications.com\/it\/the-mirror\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/jepapublications.com\/it#listItem","position":1,"name":"Home","item":"https:\/\/jepapublications.com\/it","nextItem":{"@type":"ListItem","@id":"https:\/\/jepapublications.com\/it\/the-mirror\/#listItem","name":"The Mirror"}},{"@type":"ListItem","@id":"https:\/\/jepapublications.com\/it\/the-mirror\/#listItem","position":2,"name":"The Mirror","previousItem":{"@type":"ListItem","@id":"https:\/\/jepapublications.com\/it#listItem","name":"Home"}}]},{"@type":"Organization","@id":"https:\/\/jepapublications.com\/it\/#organization","name":"JEPA Publications","description":"Real Life Stories That Move Generations JEPA Publications shares powerful, real-life stories of courage, love, and transformation. We turn memories into meaningful words that inspire, touch hearts, restore hope, heal, and resonate across generations through the truth of lived experience.","url":"https:\/\/jepapublications.com\/it\/","telephone":"+17165414675","logo":{"@type":"ImageObject","url":"https:\/\/jepapublications.com\/wp-content\/uploads\/2025\/05\/JEPA-Publications-English-website-logo.png","@id":"https:\/\/jepapublications.com\/it\/the-mirror\/#organizationLogo","width":112,"height":112},"image":{"@id":"https:\/\/jepapublications.com\/it\/the-mirror\/#organizationLogo"}},{"@type":"WebPage","@id":"https:\/\/jepapublications.com\/it\/the-mirror\/#webpage","url":"https:\/\/jepapublications.com\/it\/the-mirror\/","name":"The Mirror - JEPA Publications","description":"Level 1 Skip \u00bb \u266a The first truth Is it you looking at the screen, or is the screen looking at you? It is me It is the screen Share the Mirror Your truths Pick a colour \u00b7 the whole mirror changes Three levels in. You are still here. From here on, the Mirror remembers","inLanguage":"it-IT","isPartOf":{"@id":"https:\/\/jepapublications.com\/it\/#website"},"breadcrumb":{"@id":"https:\/\/jepapublications.com\/it\/the-mirror\/#breadcrumblist"},"datePublished":"2026-08-01T08:06:43+00:00","dateModified":"2026-08-01T21:45:46+00:00"},{"@type":"WebSite","@id":"https:\/\/jepapublications.com\/it\/#website","url":"https:\/\/jepapublications.com\/it\/","name":"JEPA Publications","description":"Real Life Stories That Move Generations","inLanguage":"it-IT","publisher":{"@id":"https:\/\/jepapublications.com\/it\/#organization"}}]}},"aioseo_meta_data":{"post_id":"2926","title":null,"description":null,"keywords":null,"keyphrases":{"focus":[],"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2026-08-01 12:05:43","updated":"2026-08-08 20:16:46","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/jepapublications.com\/it\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tThe Mirror\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/jepapublications.com\/it"},{"label":"The Mirror","link":"https:\/\/jepapublications.com\/it\/the-mirror\/"}],"taxonomy_info":[],"featured_image_src_large":false,"author_info":{"display_name":"Emiliano","author_link":"https:\/\/jepapublications.com\/it\/author\/emilianoandrade\/"},"comment_info":0,"_links":{"self":[{"href":"https:\/\/jepapublications.com\/it\/wp-json\/wp\/v2\/pages\/2926","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jepapublications.com\/it\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/jepapublications.com\/it\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/jepapublications.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jepapublications.com\/it\/wp-json\/wp\/v2\/comments?post=2926"}],"version-history":[{"count":9,"href":"https:\/\/jepapublications.com\/it\/wp-json\/wp\/v2\/pages\/2926\/revisions"}],"predecessor-version":[{"id":2939,"href":"https:\/\/jepapublications.com\/it\/wp-json\/wp\/v2\/pages\/2926\/revisions\/2939"}],"wp:attachment":[{"href":"https:\/\/jepapublications.com\/it\/wp-json\/wp\/v2\/media?parent=2926"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}