import React, { useMemo, useState } from "react";
import { motion } from "framer-motion";
import {
Anchor,
BookOpen,
Castle,
Flame,
Map,
ScrollText,
Shield,
Skull,
Trees,
Users,
Church,
Mountain,
Compass,
Eye,
Swords,
NotebookText,
RadioTower,
Ghost,
ChevronRight,
Menu,
X,
} from "lucide-react";
const navItems = [
{ id: "home", label: "Home" },
{ id: "world", label: "Vaelmorin" },
{ id: "settlement", label: "Black Shores Harbor" },
{ id: "play", label: "How We Play" },
{ id: "lore", label: "Lore" },
{ id: "join", label: "Join" },
];
const pillars = [
{
icon: Skull,
title: "Grimdark Horror",
text: "This world is beautiful in the way ruins are beautiful. Rot, memory, dread, and survival sit under every decision.",
},
{
icon: Compass,
title: "West Marches Sandbox",
text: "No fixed party. No rigid path. The world persists, the players choose the expedition, and consequences stay behind after every session.",
},
{
icon: Castle,
title: "Settlement Growth",
text: "Black Shores Harbor is not background dressing. It changes, expands, suffers, and survives according to player action.",
},
{
icon: ScrollText,
title: "Long-Form Mystery",
text: "The campaign begins with practical lies, incomplete truths, and an older history buried under root, salt, and blood.",
},
];
const structures = [
{
icon: RadioTower,
name: "Blackfire Tower",
blurb: "The high black spine of the harbor. A signal post, watchpoint, and warning flame against the dark inland treeline.",
tier: "Tiered Restoration",
},
{
icon: Church,
name: "Split Fire Chapel",
blurb: "A fractured sanctuary where faith survives in ash, sea-salt, and dim coals. What rests below it has not been forgiven.",
tier: "Tiered Restoration",
},
{
icon: Flame,
name: "The Blightkiln",
blurb: "A ruined forge held inside the salt-line. Once reclaimed, it becomes one of the settlement's most important answers to the blight.",
tier: "Tiered Restoration",
},
{
icon: Shield,
name: "The Palisade",
blurb: "Rough timber, old scars, and salt-fed trenchwork. It holds because people keep making it hold.",
tier: "Defensive Priority",
},
{
icon: Trees,
name: "Rot-Hunter's Lodge",
blurb: "A hardened outpost for scouts, trackers, and those willing to walk the wet edge of infected wilderness.",
tier: "Tiered Restoration",
},
{
icon: Anchor,
name: "The Salt Pump",
blurb: "The least celebrated machine in the harbor and possibly the most vital. The coast survives because the old colony built it first.",
tier: "Critical Infrastructure",
},
];
const chapters = [
{
title: "A Land That Should Have Stayed Buried",
text: "Vaelmorin is an old wound. The coast still tastes of salt, but the interior rots beneath root and memory. The first colony failed here. The second has returned anyway.",
icon: Map,
},
{
title: "Black Shores Harbor",
text: "The campaign’s home base is a half-reclaimed ruin built over loss, salvage, prayer, and hard labor. It is where players return, rebuild, and watch the world press inward.",
icon: Castle,
},
{
title: "Something Beneath the Story",
text: "Ancient scripture, fractured pacts, buried relics, cult movement, and the slow return of a rooted evil shape the campaign beneath the players’ first understanding.",
icon: Eye,
},
];
const howWePlay = [
{
num: "01",
title: "Flexible Roster",
text: "This is a West Marches campaign. Sessions are built around whoever is available, not a permanent locked group.",
},
{
num: "02",
title: "Player-Driven Expeditions",
text: "The table decides where to go, what rumors to follow, what structures to repair, and which dangers to leave sleeping.",
},
{
num: "03",
title: "Persistent Consequences",
text: "What is discovered stays discovered. What is neglected rots. What is rebuilt changes the campaign for everyone.",
},
{
num: "04",
title: "Mature Table Culture",
text: "Dark themes, adult tone, trust, lines and veils, and respect at the table come before drama in the fiction.",
},
];
const loreCards = [
{
icon: BookOpen,
title: "The Writ of Thorns",
text: "Fragments of half-preserved scripture whisper that soil remembers blood, betrayal, and blight. Nothing in Vaelmorin truly forgets.",
},
{
icon: Ghost,
title: "The Failed Colony",
text: "What the first settlers built still shapes the new expedition: walls, pumps, sealed chambers, graves, and all the wrong absences.",
},
{
icon: Swords,
title: "The Coming War",
text: "Players arrive thinking they are reclaiming a coast. In truth they are stepping into the mouth of something much older.",
},
{
icon: Mountain,
title: "The Inland Rot",
text: "Salt buys the coast time. It does not cure the land. Beyond the line of brine, the blight deepens into stranger and crueler forms.",
},
];
const etiquette = [
"Show up prepared, on time, and ready to play.",
"Respect the tone, but do not use tone as an excuse to be disruptive.",
"Listen to other players. Share spotlight. Build scenes together.",
"Communicate clearly if something is not working for you.",
"Dark fiction is welcome. Table hostility is not.",
"No sexual content at the table.",
"No racism.",
"No outside-of-the-game religion brought into the table space.",
"The campaign rewards curiosity, initiative, and follow-through.",
];
const requirements = [
"Stable internet connection",
"A capable computer for online play",
"Webcam",
"Clear, good-sounding microphone",
"Willingness to download required software",
"Reliable attendance and active engagement",
"Enjoyment of roleplay and character development",
"A strong table presence and willingness to speak up",
"Comfort performing in front of other people",
];
const floatingRunes = ["✦", "✧", "❖", "✶", "✢", "✦"];
const vaelmorinLogo = "data:image/webp;base64,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kSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJf4uHh4fvvv//OO+9MkoQkSZIkSZIkSZIkSbJfYlCEEELsL5z4v/8xAQAA//9dYhJCAAAA";
const socialPlatforms = [
{
name: "YouTube",
label: "Campaign videos, recaps, and story content",
accent: "from-rose-500/30 to-fuchsia-500/10",
border: "border-rose-300/25",
text: "text-rose-100",
},
{
name: "Twitch",
label: "Live sessions and campaign streams",
accent: "from-fuchsia-500/30 to-violet-500/10",
border: "border-fuchsia-300/25",
text: "text-fuchsia-100",
},
{
name: "Tik-Tok",
label: "Short-form hooks, lore, and clips",
accent: "from-pink-500/30 to-rose-500/10",
border: "border-pink-300/25",
text: "text-pink-100",
},
{
name: "Discord",
label: "Home for players, followers, and auditions",
accent: "from-violet-500/30 to-pink-500/10",
border: "border-violet-300/25",
text: "text-violet-100",
},
];
function RottingVineTop() {
return (
Vaelmorin • Black Shores Harbor • West Marches • D&D 5e
Vaelmorin - Echos of the Past
They did not arrive to discover a new world. They arrived too late to stop something old from waking.
A grimdark, macabre campaign set in the haunted land of Vaelmorin, where the coast survives on salt, the interior rots beneath memory, and Black Shores Harbor stands as a fragile answer to everything pressing in from the dark.
The expedition’s official purpose is practical: establish a foothold, investigate the ruined first colony, recover what can be salvaged, and push inland with caution.
The truth is filthier. Something happened here that leaders never told the players in full. Relics, scripture fragments, sealed places, and the return of older powers are already moving beneath the mission statement.
Read This Right
This is not heroic bright fantasy. It is a campaign about survival, decay, faith under pressure, settlement politics, grief, exploration, and choosing what to protect when the world starts asking for a price.
Vaelmorin is a land that remembers. Sea wind carries salt, ash, and old sorrow. The forests stand too still. Ruins slump beneath vine, black root, and wet earth. The coast is survivable. The interior is something else.
The farther one travels from Black Shores Harbor, the less the land resembles ordinary wilderness. Salt buys the harbor time. It does not heal what waits inland. Every expedition away from the shore becomes a negotiation between ambition and corruption.
The Campaign Promise
This is not a story about arriving at a beginning. It is a story about arriving after an ending and deciding whether anything worth saving can still be built from it.
Black Shores Harbor is a living campaign system. The harbor changes as the players repair structures, choose priorities, lose people, secure resources, and decide which threats to meet head-on. It is the place they come back to, but it is also one of the campaign’s largest stakes.
The harbor smells of brine, wet timber, old ash, mildew, lamp smoke, and the wrong sweetness of things left too long in damp air. Every wall feels temporary. Every improvement matters.
{[
"Salt-fed defenses",
"Tiered rebuilding",
"NPC-driven labor",
"Visible progress and decay",
"Resource pressure",
"Shared home base stakes",
].map((item) => (
“The soil remembers all things: blood, betrayal, and blight. In the end, everything returns to the Root.”
Table Rules & Etiquette
{etiquette.map((item) => (
{item}
))}
What Players Need
{requirements.map((item) => (
{item}
))}
Best Fit For This Campaign
Players who like exploration, strong tone, persistent consequences, collaborative worldbuilding, grimdark atmosphere, character choices that actually matter, and heavy roleplay will do well here.
This table works best for players who enjoy character development, bring a real personality to the screen, and are not afraid to speak in front of other people.
Follow the Campaign
Watch. Follow. Join the Community.
The campaign lives beyond the table. Follow along on YouTube, Twitch, and Tik-Tok, and join the Discord where players and followers gather in one place.
Auditions for prospective players take place on Discord.
{socialPlatforms.map((platform) => (
{platform.name}
{platform.label}
))}
Call to Action
Build it. They will come.
Step into the expedition. Explore the harbor. Walk the shoreline. Push into the rot. Uncover the old lies. Help build the version of this world that survives long enough to be remembered.
All prospective players will go through a short talk and audition before joining the table.