Spaces:
				
			
			
	
			
			
					
		Running
		
	
	
	
			
			
	
	
	
	
		
		
					
		Running
		
	File size: 7,881 Bytes
			
			| cb7e27f 3e75cce cb7e27f 3e75cce cb7e27f 3e75cce 1034a51 3e75cce 1034a51 3e75cce 1034a51 3e75cce cb7e27f 3e75cce cb7e27f 3e75cce 216db5b 3e75cce 216db5b 3e75cce 216db5b 3e75cce 216db5b 3e75cce 216db5b 3e75cce 216db5b 3e75cce 216db5b 3e75cce 216db5b 3e75cce 216db5b 3e75cce 216db5b 3e75cce 216db5b 3e75cce 216db5b 3e75cce 216db5b 3e75cce 216db5b 3e75cce 216db5b 3e75cce 216db5b 3e75cce cb7e27f 874033f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 | <!DOCTYPE html>
<html lang="pt">
<head>
  <meta charset="UTF-8">
  <title>Aventura Noir - Alma</title>
    <style>
      @import url('https://fonts.googleapis.com/css2?family=Inconsolata:wght@400;700&display=swap');
      body {
        background-color: #000000;
color: #f5f5f5;
        font-family: 'Inconsolata', monospace;
        display: flex;
        justify-content: center;
        align-items: center;
        height: 100vh;
        margin: 0;
        text-align: center;
        padding: 40px;
        flex-direction: column;
      }
    #texto {
      max-width: 700px;
      font-size: 20px;
      line-height: 1.6;
      white-space: pre-line;
      text-shadow: 0 0 8px rgba(230, 57, 70, 0.6);
      background-color: rgba(0, 0, 0, 0.8);
padding: 30px;
      border-radius: 10px;
      border-left: 3px solid #e63946;
      box-shadow: 0 0 20px rgba(230, 57, 70, 0.5);
}
.botoes {
      margin-top: 30px;
      display: none; /* aparecem só no fim */
    }
    button {
      margin: 10px;
      padding: 12px 30px;
      border: 2px solid #e63946;
      border-radius: 6px;
      cursor: pointer;
      background: transparent;
      color: #e63946;
      font-size: 18px;
      font-weight: bold;
      transition: all 0.3s ease;
      text-transform: uppercase;
      letter-spacing: 1px;
    }
    button:hover {
      background: #e63946;
      color: #0a0a0a;
      transform: translateY(-2px);
      box-shadow: 0 4px 8px rgba(230, 57, 70, 0.4);
    }
</style>
</head>
<body>
  <div id="texto"></div>
  <div class="botoes"></div>
  <script>
    const textoDiv = document.getElementById("texto");
    const botoesDiv = document.querySelector(".botoes");
    let narrativaAtual = "";
    let i = 0;
    let speed = 40;
    function escreverTexto(callback) {
      if (i < narrativaAtual.length) {
        textoDiv.innerHTML += narrativaAtual.charAt(i);
        i++;
        setTimeout(() => escreverTexto(callback), speed);
      } else {
        if (callback) callback();
      }
    }
    function mostrarTexto(texto, botoes = []) {
      narrativaAtual = texto;
      i = 0;
      textoDiv.innerHTML = "";
      botoesDiv.innerHTML = "";
      botoesDiv.style.display = "none";
      escreverTexto(() => {
        if (botoes.length > 0) {
          botoes.forEach(btn => {
            const button = document.createElement("button");
            button.innerText = btn.label;
            button.onclick = btn.action;
            botoesDiv.appendChild(button);
          });
          botoesDiv.style.display = "block";
        }
      });
    }
    // ———————————— Cena Inicial
    mostrarTexto(
`É tarde, já passa da 00. Toda a gente no escritório já foi para casa, estás sozinha na sala de reuniões a rever algumas respostas ao briefings para o marketing do Alma Shopping do ano que vem.
De repente as luzes lá fora começam a tremelicar. 
Está um silêncio que quase se consegue sentir.
Silencioso demais...
Knock Knock Knock. 
Ouves a porta bater mas não há sombra debaixo da porta, espreitas pelas persianas mas não vês ninguém. 
Abres a porta?`, 
      [
        { label: "Sim", action: escolhaSim },
        { label: "Não", action: escolhaNao }
      ]
    );
    // ———————————— Ramo NÃO
    function escolhaNao() {
      mostrarTexto(
`As luzes voltam ao normal. 
Voltas para a secretária e continuas a rever campanhas normais…
(Game Over)`
      );
    }
    // ———————————— Ramo SIM
    function escolhaSim() {
      mostrarTexto(
`Dizes: Quem está aí?
Olhas à volta do escritório mas não vês nada. 
De repente vês um vulto sair do teu escritório e ouves o barulho de qualquer coisa a partir.
O ar fica mais frio e as luzes começam a piscar.
O que fazes?`,
        [
          { label: "Correr para investigar", action: correrInvestigacao },
          { label: "Fechar a porta", action: fecharPorta },
          { label: "Ligar a alguém", action: ligarAlguem }
        ]
      );
    }
    function ligarAlguem() {
      mostrarTexto(
`Tentas ligar para a segurança, mas o telemóvel não tem sinal.
As luzes piscam mais rápido e ouves passos no corredor.
De repente, tudo para. O silêncio é ensurdecedor.
(Game Over)`
      );
    }
function fecharPorta() {
      mostrarTexto(
`Fechas a porta.
As luzes voltam ao normal. 
Voltas para a secretária e continuas a rever campanhas normais…
(Game Over)`
      );
    }
    // ———————————— Investigação
    function correrInvestigacao() {
      mostrarTexto(
`Chegas à porta do escritório e vês que a tua chávena preferida está no chão, partida.
O café forma um pequeno charco vermelho escuro... espera, isso não é café.
Encontras um envelope manchado que diz "TOP SECRET" em letras desbotadas.
O que fazes?`,
[
          { label: "Abrir envelope", action: abrirEnvelope },
          { label: "Ligar à polícia por causa da chávena", action: ligarPolicia }
        ]
      );
    }
    function abrirEnvelope() {
    mostrarTexto(
`Com dedos trémulos, abriste o envelope e encontas um bilhete amarelecido:
"Se queres descobrir a VERDADE sobre o que aconteceu no Alma Shopping em 1999,
segue as pistas que deixei no teu computador. Eles estão a observar."
A mensagem está escrita numa caligrafia irregular, como se tivesse sido escrita às pressas.
O computador está ligado mas bloqueado. O ecrã pisca aleatoriamente. Sabes a password?
`,
[
        { label: "Tentar password", action: tentarPassword },
        { label: "Desistir", action: desistir }
      ]
    );
    function tentarPassword() {
      mostrarTexto(
`Introduzes a password que sempre usas: "Alma2023"
O ecrã pisca violentamente e aparece uma mensagem em letras vermelhas:
"ERRADO. MAS DEIXEI-TE UMA PISTA. PROCURA NO ARQUIVO FÍSICO. TEMOS POUCO TEMPO."
A mensagem desaparece e o computador desliga-se sozinho.
Vês uma gaveta entreaberta na secretária do teu chefe. Há algo brilhante lá dentro.`,
[
          { label: "Revistar a gaveta", action: revistarGaveta },
          { label: "Ir embora", action: irEmbora }
        ]
      );
    }
    function desistir() {
      mostrarTexto(
`Decidiste não investigar mais. 
Voltas para a secretária e continuas a rever campanhas normais…
(Game Over)`
      );
    }
    function revistarGaveta() {
      mostrarTexto(
`Encontras um dossier antigo marcado "Projeto Vermelho - 1999" com uma mancha escura na capa.
Ao abrires com cuidado, vês fotos de construção do shopping com áreas que nunca foram abertas ao público. Algumas fotos foram riscadas com algo afiado.
Há um mapa dobrado com uma passagem secreta marcada perto da antiga loja de música. O mapa tem anotações a lápis: "Não confiem nos seguranças" e "Eles sabem".
Queres investigar mais?`,
[
          { label: "Sim, ir ao shopping", action: irShopping },
          { label: "Não, esquecer isto", action: esquecer }
        ]
      );
    }
    function irEmbora() {
      mostrarTexto(
`Decidiste que já chega de mistérios por hoje.
Voltas para casa, mas a mensagem continua na tua cabeça...
(Game Over)`
      );
    }
    function irShopping() {
      mostrarTexto(
`Vais ao shopping depois do horário de funcionamento.
A segurança reconhece-te e deixa-te entrar.
Diriges-te para a loja de música abandonada...
(Continua 🚧)`
      );
    }
    function esquecer() {
      mostrarTexto(
`Decidiste que é melhor não mexer no passado.
Mas nos dias seguintes, notas que estás a ser seguida...
(Game Over)`
      );
    }
}
    function ligarPolicia() {
      mostrarTexto(
`Chamaste a polícia. 
Eles não ligaram muito à chávena partida e disseram-te para comprares outra.
Mas enquanto falavas, reparaste que o envelope desapareceu...
(Game Over)`
      );
    }
</script>
</body>
</html>
 | 
