// Brevemente — pre-register landing page (split hero + features + email capture)
// Inspired by AAA mobile-game landing layout: logo+CTA left, video right, features row, rewards row.
const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
"youtubeId": "GrAPLnNLtjU",
"playersCount": "10,000+",
"headline": "FORJA",
"headlineAccent": "A TUA LENDA.",
"eyebrow": "AVENTURA ÉPICA",
"tagline": "Um mundo de ação sem fim, bosses épicos e segredos escondidos.",
"showFloatingCrystals": true,
"discordUrl": "https://discord.gg/s9kBPrfay",
"youtubeUrl": "https://www.youtube.com/@minilandsgame",
"instagramUrl": "https://instagram.com/minilandsgame",
"redditUrl": "https://www.reddit.com/r/MiniLandsGame/"
}/*EDITMODE-END*/;
const SUPPORT_EMAIL = 'support@minilands.io';
// ---------- Pixel icons (SVG) ----------
const PixelIcon = ({ kind, size = 56 }) => {
// Polished SVG game-UI icons with gradients, outlines, and shading.
const baseProps = { width: size, height: size, viewBox: '0 0 64 64' };
const OUTLINE = '#1a0e04';
if (kind === 'sword') {
return (
);
}
if (kind === 'skull') {
return (
);
}
if (kind === 'portal') {
return (
);
}
if (kind === 'swords') {
return (
);
}
if (kind === 'chest') {
return (
);
}
if (kind === 'gems') {
return (
);
}
if (kind === 'shirt') {
return (
);
}
if (kind === 'players') {
return (
);
}
if (kind === 'gift') {
return (
);
}
return null;
};
// ---------- Floating decorative crystals (purple) ----------
const FloatingCrystals = () => {
const crystals = [
{ x: '4%', y: '8%', s: 38, d: 0, r: -8 },
{ x: '8%', y: '38%', s: 28, d: 1.5, r: 12 },
{ x: '5%', y: '70%', s: 32, d: 0.8, r: -6 },
{ x: '92%', y: '12%', s: 30, d: 2.2, r: 10 },
{ x: '95%', y: '52%', s: 36, d: 1.0, r: -10 },
{ x: '90%', y: '82%', s: 24, d: 3.0, r: 6 },
{ x: '50%', y: '4%', s: 22, d: 1.7, r: -4 },
];
return (
{crystals.map((c, i) => (
))}
);
};
// ---------- Top Nav ----------
const TopNav = () => {
const links = [
{ label: 'HOME', href: '#' },
{ label: 'SOBRE', href: 'index.html#features' },
{ label: 'CLASSES', href: 'index.html#classes' },
{ label: 'MAPA', href: 'map.html' },
{ label: 'FAQ', href: 'index.html#faq' },
];
return (
);
};
// ---------- Hero Split ----------
const HeroSplit = ({ tw }) => (
{/* LEFT — logo, headline, CTA */}
{/* Big logo (wordmark) */}
{/* Eyebrow with sparkles */}
✦
{tw.eyebrow}
✦
{/* Headline — two lines */}
{tw.headline}
{tw.headlineAccent}
{/* Tagline */}
{tw.tagline}
{/* Big pre-register button */}
{/* Note */}
Sê dos primeiros a jogar e
ganha RECOMPENSAS EXCLUSIVAS!
{/* RIGHT — YouTube video frame */}
{/* Decorative corner notches */}
);
// ---------- Feature row ----------
const FeatureRow = () => {
const items = [
{ icon: 'skull', color: '#9d4edd', title: 'BOSSES ÉPICOS', desc: 'Enfrenta inimigos lendários e coleta loot raro.' },
{ icon: 'portal', color: '#c77dff', title: 'EXPLORA MUNDOS', desc: 'Descobre biomes, dungeons e segredos escondidos.' },
{ icon: 'swords', color: '#cdd5e0', title: 'JOGA EM EQUIPA', desc: 'Junta-te a amigos e dominem o campo de batalha.' },
{ icon: 'chest', color: '#f7c93b', title: 'GANHA RECOMPENSAS', desc: 'Pré-regista-te e leva recompensas exclusivas no lançamento.' },
];
return (
{items.map((item, i) => (
))}
);
};
// ---------- Pre-register Modal ----------
const PreRegisterModal = ({ open, onClose }) => {
const [email, setEmail] = React.useState('');
const [agreed, setAgreed] = React.useState(true);
const [sent, setSent] = React.useState(false);
React.useEffect(() => {
const onKey = (e) => { if (e.key === 'Escape') onClose(); };
if (open) window.addEventListener('keydown', onKey);
return () => window.removeEventListener('keydown', onKey);
}, [open, onClose]);
if (!open) return null;
const submit = (e) => {
e.preventDefault();
if (!email || !agreed) return;
const subject = encodeURIComponent('Novo pré-registo Minilands');
const body = encodeURIComponent(`Quero pré-registar-me em Minilands.\n\nEmail: ${email}\n`);
window.location.href = `mailto:${SUPPORT_EMAIL}?subject=${subject}&body=${body}`;
setSent(true);
};
return (
e.stopPropagation()} style={{
position: 'relative',
width: 'min(520px, 100%)',
padding: '32px 28px 26px',
background: 'linear-gradient(180deg, rgba(20, 9, 46, 0.98) 0%, rgba(8, 3, 20, 0.98) 100%)',
border: '4px solid #f7c93b',
borderRadius: 16,
boxShadow:
'inset 0 3px 0 rgba(255,255,255,0.08),' +
' 0 12px 0 #06091a,' +
' 0 24px 60px rgba(0,0,0,0.7),' +
' 0 0 80px rgba(247,201,59,0.35),' +
' 0 0 140px rgba(157,78,221,0.3)',
animation: 'modal-pop 240ms cubic-bezier(0.34, 1.56, 0.64, 1)',
}}>
{/* corner notches */}
{/* close */}
{!sent ? (
<>
✦
PRÉ-REGISTO
✦
JUNTA-TE À LENDA.
Sê dos primeiros a jogar e ganha recompensas exclusivas.
>
) : (
OBRIGADO!
Abrimos o teu cliente de email para enviares o pré-registo a {SUPPORT_EMAIL}. Carrega em ENVIAR para concluir.
)}
);
};
// ---------- Bottom row: stats + email + rewards ----------
const BottomRow = ({ tw }) => {
const [email, setEmail] = React.useState('');
const [agreed, setAgreed] = React.useState(true);
const [submitted, setSubmitted] = React.useState(false);
const onJoin = (e) => {
e.preventDefault();
if (!email || !agreed) return;
const subject = encodeURIComponent('Novo pré-registo Minilands');
const body = encodeURIComponent(`Quero pré-registar-me em Minilands.\n\nEmail: ${email}\n`);
window.location.href = `mailto:${SUPPORT_EMAIL}?subject=${subject}&body=${body}`;
setSubmitted(true);
};
const rewards = [
{ icon: 'gems', title: '500', sub: 'GEMAS' },
{ icon: 'chest', title: 'BAÚ', sub: 'EXCLUSIVO' },
{ icon: 'shirt', title: 'SKIN', sub: 'LENDÁRIA' },
];
return (
{/* CENTER — email capture */}
PRÉ-REGISTA-TE E GANHA RECOMPENSAS EXCLUSIVAS!
{/* Follow us */}
SEGUE-NOS
{[
{ href: tw.discordUrl, label: 'Discord', svg:
},
{ href: tw.youtubeUrl, label: 'YouTube', svg:
},
{ href: tw.instagramUrl, label: 'Instagram', svg:
},
{ href: tw.redditUrl, label: 'Reddit', svg:
},
].map((s) => (
{ e.currentTarget.style.color = '#f7c93b'; e.currentTarget.style.transform = 'translateY(-2px)'; }}
onMouseLeave={(e) => { e.currentTarget.style.color = '#cdd5e0'; e.currentTarget.style.transform = 'translateY(0)'; }}
>
))}
{/* RIGHT — rewards */}
VAIS RECEBER
{rewards.map((r, i) => (
))}
);
};
// ---------- Main page ----------
const BrevementePage = () => {
const t = window.useTweaks ? window.useTweaks(TWEAK_DEFAULTS) : [TWEAK_DEFAULTS, () => {}];
const [tw, setTw] = t;
const [modalOpen, setModalOpen] = React.useState(false);
const twWithModal = { ...tw, __openModal: () => setModalOpen(true) };
return (
{/* Floating crystals */}
{tw.showFloatingCrystals &&
}
{/* Faint grid texture */}
setModalOpen(false)} />
{/* Footer micro-line */}
© 2026 Minilands Studios
{/* Tweaks */}
{window.TweaksPanel && (
setTw('eyebrow', v)} />
setTw('headline', v)} />
setTw('headlineAccent', v)} />
setTw('tagline', v)} />
setTw('youtubeId', v)} />
setTw('discordUrl', v)} />
setTw('youtubeUrl', v)} />
setTw('instagramUrl', v)} />
setTw('redditUrl', v)} />
setTw('showFloatingCrystals', v)} />
)}
);
};
ReactDOM.createRoot(document.getElementById('root')).render();