Spaces:
				
			
			
	
			
			
					
		Running
		
	
	
	
			
			
	
	
	
	
		
		
					
		Running
		
	| <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> | |
