Initial: TerraVerse landing page
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
<!DOCTYPE html>
|
||||
<html><head><title>50x</title></head>
|
||||
<body><h1>Service Unavailable</h1></body></html>
|
||||
@@ -0,0 +1,4 @@
|
||||
FROM nginx:alpine
|
||||
COPY index.html /usr/share/nginx/html/index.html
|
||||
COPY 50x.html /usr/share/nginx/html/50x.html
|
||||
EXPOSE 80
|
||||
+311
@@ -0,0 +1,311 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="pt-BR">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>TerraVerse — O Novo Mundo te Espera</title>
|
||||
<meta name="description" content="TerraVerse: O game de realidade aumentada que vai revolucionar a forma como você explora, conquista e monetiza o mundo real. Em breve." />
|
||||
<style>
|
||||
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700;800&display=swap');
|
||||
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
|
||||
body {
|
||||
font-family: 'Inter', system-ui, -apple-system, sans-serif;
|
||||
background: #0a0a0f;
|
||||
color: #e4e4e7;
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
overflow-x: hidden;
|
||||
background-image:
|
||||
radial-gradient(ellipse at 20% 50%, rgba(34, 139, 230, 0.08) 0%, transparent 50%),
|
||||
radial-gradient(ellipse at 80% 20%, rgba(99, 102, 241, 0.06) 0%, transparent 50%),
|
||||
radial-gradient(ellipse at 50% 80%, rgba(16, 185, 129, 0.04) 0%, transparent 50%);
|
||||
}
|
||||
|
||||
.stars {
|
||||
position: fixed;
|
||||
top: 0; left: 0;
|
||||
width: 100%; height: 100%;
|
||||
pointer-events: none;
|
||||
z-index: 0;
|
||||
}
|
||||
|
||||
.container {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
max-width: 720px;
|
||||
padding: 2rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.globe {
|
||||
width: 160px;
|
||||
height: 160px;
|
||||
margin: 0 auto 2rem;
|
||||
position: relative;
|
||||
border-radius: 50%;
|
||||
background: linear-gradient(135deg, #1a73e8, #6366f1, #10b981);
|
||||
box-shadow: 0 0 60px rgba(34, 139, 230, 0.3), 0 0 120px rgba(99, 102, 241, 0.15);
|
||||
animation: pulse-glow 3s ease-in-out infinite;
|
||||
}
|
||||
|
||||
.globe::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
inset: 4px;
|
||||
border-radius: 50%;
|
||||
background: #0a0a0f;
|
||||
mask: radial-gradient(circle at 35% 35%, transparent 30%, black 31%);
|
||||
-webkit-mask: radial-gradient(circle at 35% 35%, transparent 30%, black 31%);
|
||||
}
|
||||
|
||||
.globe-ring {
|
||||
position: absolute;
|
||||
inset: -8px;
|
||||
border: 1.5px solid rgba(99, 102, 241, 0.2);
|
||||
border-radius: 50%;
|
||||
animation: spin 12s linear infinite;
|
||||
}
|
||||
|
||||
.globe-ring:nth-child(2) {
|
||||
inset: -16px;
|
||||
border-color: rgba(16, 185, 129, 0.15);
|
||||
animation-direction: reverse;
|
||||
animation-duration: 18s;
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
to { transform: rotate(360deg); }
|
||||
}
|
||||
|
||||
@keyframes pulse-glow {
|
||||
0%, 100% { box-shadow: 0 0 60px rgba(34, 139, 230, 0.3), 0 0 120px rgba(99, 102, 241, 0.15); }
|
||||
50% { box-shadow: 0 0 80px rgba(34, 139, 230, 0.45), 0 0 160px rgba(99, 102, 241, 0.25); }
|
||||
}
|
||||
|
||||
.badge {
|
||||
display: inline-block;
|
||||
padding: 0.4rem 1.2rem;
|
||||
background: rgba(99, 102, 241, 0.12);
|
||||
border: 1px solid rgba(99, 102, 241, 0.25);
|
||||
border-radius: 100px;
|
||||
font-size: 0.8rem;
|
||||
font-weight: 600;
|
||||
color: #818cf8;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.08em;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.globe-icon {
|
||||
font-size: 4rem;
|
||||
margin-bottom: 1rem;
|
||||
display: block;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: clamp(2.5rem, 6vw, 4rem);
|
||||
font-weight: 800;
|
||||
line-height: 1.1;
|
||||
margin-bottom: 0.75rem;
|
||||
background: linear-gradient(135deg, #e4e4e7 30%, #818cf8 70%, #10b981);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
font-size: clamp(1.1rem, 2.5vw, 1.4rem);
|
||||
color: #a1a1aa;
|
||||
font-weight: 300;
|
||||
margin-bottom: 2.5rem;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.features {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
|
||||
gap: 1rem;
|
||||
margin: 2.5rem 0;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.feature {
|
||||
background: rgba(255, 255, 255, 0.03);
|
||||
border: 1px solid rgba(255, 255, 255, 0.06);
|
||||
border-radius: 12px;
|
||||
padding: 1.25rem;
|
||||
transition: border-color 0.3s, background 0.3s;
|
||||
}
|
||||
|
||||
.feature:hover {
|
||||
border-color: rgba(99, 102, 241, 0.3);
|
||||
background: rgba(99, 102, 241, 0.05);
|
||||
}
|
||||
|
||||
.feature-icon {
|
||||
font-size: 1.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.feature h3 {
|
||||
font-size: 1rem;
|
||||
font-weight: 600;
|
||||
margin-bottom: 0.3rem;
|
||||
}
|
||||
|
||||
.feature p {
|
||||
font-size: 0.85rem;
|
||||
color: #71717a;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.coming-soon {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.75rem;
|
||||
padding: 1rem 2.5rem;
|
||||
background: linear-gradient(135deg, rgba(99, 102, 241, 0.15), rgba(16, 185, 129, 0.1));
|
||||
border: 1px solid rgba(99, 102, 241, 0.3);
|
||||
border-radius: 100px;
|
||||
font-size: 1.05rem;
|
||||
font-weight: 600;
|
||||
color: #c4b5fd;
|
||||
margin-top: 1rem;
|
||||
cursor: default;
|
||||
transition: border-color 0.3s, box-shadow 0.3s;
|
||||
}
|
||||
|
||||
.coming-soon:hover {
|
||||
border-color: rgba(99, 102, 241, 0.5);
|
||||
box-shadow: 0 0 30px rgba(99, 102, 241, 0.1);
|
||||
}
|
||||
|
||||
.dot {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
background: #10b981;
|
||||
border-radius: 50%;
|
||||
display: inline-block;
|
||||
animation: blink 2s ease-in-out infinite;
|
||||
}
|
||||
|
||||
@keyframes blink {
|
||||
0%, 100% { opacity: 1; }
|
||||
50% { opacity: 0.3; }
|
||||
}
|
||||
|
||||
.footer {
|
||||
margin-top: 3rem;
|
||||
font-size: 0.8rem;
|
||||
color: #52525b;
|
||||
}
|
||||
|
||||
.footer a {
|
||||
color: #818cf8;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.footer a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<canvas class="stars" id="stars"></canvas>
|
||||
|
||||
<div class="container">
|
||||
<div class="globe">
|
||||
<div class="globe-ring"></div>
|
||||
<div class="globe-ring"></div>
|
||||
</div>
|
||||
|
||||
<div class="badge">🌎 Geo-Location · AR · NFT</div>
|
||||
|
||||
<h1>TerraVerse</h1>
|
||||
|
||||
<p class="subtitle">
|
||||
Explore o mundo real, conquiste territórios, construa seu império.
|
||||
O game de realidade aumentada que vai redefinir a propriedade virtual.
|
||||
</p>
|
||||
|
||||
<div class="features">
|
||||
<div class="feature">
|
||||
<span class="feature-icon">🗺️</span>
|
||||
<h3>Explore</h3>
|
||||
<p>Caminhe pelo mundo real e descubra parcelas de terra disponíveis perto de você.</p>
|
||||
</div>
|
||||
<div class="feature">
|
||||
<span class="feature-icon">⚔️</span>
|
||||
<h3>Conquiste</h3>
|
||||
<p>Reivindique territórios, dispute áreas estratégicas e expanda seu domínio.</p>
|
||||
</div>
|
||||
<div class="feature">
|
||||
<span class="feature-icon">🏗️</span>
|
||||
<h3>Construa</h3>
|
||||
<p>Edifique construções virtuais no mundo real e gere renda passiva.</p>
|
||||
</div>
|
||||
<div class="feature">
|
||||
<span class="feature-icon">💎</span>
|
||||
<h3>Monetize</h3>
|
||||
<p>Negocie terras, colete recursos e transforme seu jogo em ganhos reais.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="coming-soon">
|
||||
<span class="dot"></span>
|
||||
Em desenvolvimento — Disponível em breve
|
||||
</div>
|
||||
|
||||
<p class="footer">
|
||||
TerraVerse © 2026 · Em construção · <a href="#">terraverse.fluxtechnologies.uk</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const canvas = document.getElementById('stars');
|
||||
const ctx = canvas.getContext('2d');
|
||||
let stars = [];
|
||||
|
||||
function resize() {
|
||||
canvas.width = window.innerWidth;
|
||||
canvas.height = window.innerHeight;
|
||||
}
|
||||
|
||||
function createStars() {
|
||||
stars = [];
|
||||
const count = Math.floor((canvas.width * canvas.height) / 2500);
|
||||
for (let i = 0; i < count; i++) {
|
||||
stars.push({
|
||||
x: Math.random() * canvas.width,
|
||||
y: Math.random() * canvas.height,
|
||||
r: Math.random() * 1.5 + 0.3,
|
||||
a: Math.random() * 0.8 + 0.2,
|
||||
s: Math.random() * 0.005 + 0.002
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function draw() {
|
||||
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
||||
for (const s of stars) {
|
||||
ctx.beginPath();
|
||||
ctx.arc(s.x, s.y, s.r, 0, Math.PI * 2);
|
||||
ctx.fillStyle = `rgba(255, 255, 255, ${s.a * (0.6 + 0.4 * Math.sin(Date.now() * s.s))})`;
|
||||
ctx.fill();
|
||||
}
|
||||
requestAnimationFrame(draw);
|
||||
}
|
||||
|
||||
window.addEventListener('resize', () => { resize(); createStars(); });
|
||||
resize();
|
||||
createStars();
|
||||
draw();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user