🎭 FFXIV RP Template Instructions

📁 Files Included

🚀 Getting Started on Neocities

  1. Upload the files:
    • Go to your Neocities dashboard
    • Upload index.html and style.css to your root directory
    • Your site will be available at: yoursite.neocities.org
  2. Test it works: Visit your site URL to see the template in action

✏️ Customizing Your Character

Basic Information

Edit these sections in the HTML file:

<title>✦ Character Name ✦ FFXIV RP</title>
<h1>✦ Welcome to My Character Page ✦</h1>
<p><strong>Name:</strong> Character Name</p>

Character Portrait

Replace the placeholder image:

<img src="https://via.placeholder.com/200x250/ff69b4/ffffff?text=Character+Portrait" alt="Character Portrait">

Upload your character image to Neocities and change the src to:

<img src="character-portrait.jpg" alt="Character Portrait">

Content Sections

Fill out these areas with your character's information:

🎨 Customizing Colors & Style

Changing the Main Colors

In style.css, look for these flat color backgrounds:

/* Page container border */
border: 3px solid #ff00ff;

/* Header background */
background: #ff69b4;

/* Navigation background */
background: #00ffff;

/* Content box backgrounds */
background: #ffccff; /* odd boxes */
background: #ccffff; /* even boxes */
💡 Tip: Keep it simple with flat colors! The 2000s DIY aesthetic is all about bright, contrasting colors without gradients.

Adding Your Own Fonts

The template uses web-safe fonts, but you can add Google Fonts:

<link href="https://fonts.googleapis.com/css2?family=YourFont:wght@400;700&display=swap" rel="stylesheet">

📱 Responsive Design

The template automatically adjusts for mobile devices! The sidebar moves below the main content on smaller screens.

🔗 Adding Links & Pages

External Links

Update the sidebar links to your actual profiles:

<li><a href="https://na.finalfantasyxiv.com/lodestone/character/12345/">Lodestone Profile</a></li>
<li><a href="https://your-tumblr.tumblr.com">Tumblr</a></li>

Creating Additional Pages

To add more pages (like a gallery or guestbook):

  1. Copy index.html and rename it (e.g., gallery.html)
  2. Change the content inside the main sections
  3. Update navigation links to point to your new pages

✨ Special Features

Animated Elements

Mid-2000s DIY Features

🛠️ Troubleshooting

⚠️ Common Issues:

🎯 Tips for Great RP Pages

🌟 Advanced Customization Ideas

🎉 Keep it DIY! This template captures that authentic mid-2000s personal website vibe. Don't be afraid to use bold colors, simple effects, and fun text that matches your character's personality!

🎨 Inspiration & Advanced Effects

Want to get fancy later? Here are some effects you can add to spice up your site while keeping that 2000s charm!

✨ Animated Sparkles (Optional)

Add some moving magic to your page:

/* Add to your CSS */
.sparkles {
  position: fixed;
  font-size: 16px;
  color: #7878a8;
  animation: blink 2s linear infinite;
  pointer-events: none;
  z-index: 1000;
}

@keyframes blink {
  0%, 50% { opacity: 1; }
  51%, 100% { opacity: 0; }
}

/* Add to your HTML body */
<div class="sparkles" style="top: 10%; left: 20%;">✨</div>
<div class="sparkles" style="top: 30%; right: 15%;">⭐</div>
<div class="sparkles" style="bottom: 20%; left: 10%;">✦</div>

🌊 Glassy/Frosted Effects

Make your widgets look like frosted glass:

.widget {
  background: rgba(45, 53, 97, 0.7);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  border: 1px solid rgba(255, 255, 255, 0.2);
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
}

/* For a more subtle glass effect */
.content-box {
  background: rgba(38, 43, 69, 0.8);
  backdrop-filter: blur(5px);
  border: 1px solid rgba(120, 120, 168, 0.3);
}

💫 Floating Animations

Make elements gently float up and down:

@keyframes float {
  0%, 100% { transform: translateY(0px); }
  50% { transform: translateY(-10px); }
}

.character-portrait {
  animation: float 3s ease-in-out infinite;
}

/* For a subtle hover lift */
.widget:hover {
  transform: translateY(-5px);
  transition: transform 0.3s ease;
}

🌈 Gradient Text Effects

Make your headings more dramatic:

.main-header h1 {
  background: linear-gradient(45deg, #7878a8, #9898c8, #b8b8d8);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
}

/* Glowing text effect */
.content-box h2 {
  text-shadow: 0 0 10px rgba(152, 152, 200, 0.5);
  animation: glow 2s ease-in-out infinite alternate;
}

@keyframes glow {
  from { text-shadow: 0 0 10px rgba(152, 152, 200, 0.5); }
  to { text-shadow: 0 0 20px rgba(152, 152, 200, 0.8); }
}

⭐ Background Patterns

Add subtle patterns to your backgrounds:

/* Dotted pattern */
body {
  background-image: radial-gradient(circle, #3d4578 1px, transparent 1px);
  background-size: 20px 20px;
}

/* Diagonal lines */
.content-box {
  background-image: repeating-linear-gradient(
    45deg,
    transparent,
    transparent 2px,
    rgba(61, 69, 120, 0.1) 2px,
    rgba(61, 69, 120, 0.1) 4px
  );
}

🎭 CSS Cursor Effects

Custom cursors for that extra 2000s flair:

/* Custom cursor */
body {
  cursor: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABklEQVR4nGPY//8/AzYwirkTAAAAAElFTkSuQmCC'), auto;
}

/* Different cursor for links */
a {
  cursor: pointer;
}

/* Or use built-in fun cursors */
.widget {
  cursor: help;
}

🌟 Particle Effects (Advanced)

Create falling stars or particles with CSS:

/* Falling stars animation */
.star {
  position: fixed;
  top: -10px;
  color: #9898c8;
  font-size: 12px;
  animation: fall linear infinite;
  pointer-events: none;
}

@keyframes fall {
  0% { transform: translateY(-100vh) rotate(0deg); }
  100% { transform: translateY(100vh) rotate(360deg); }
}

/* Add multiple stars with different speeds */
.star:nth-child(1) { left: 10%; animation-duration: 3s; }
.star:nth-child(2) { left: 30%; animation-duration: 5s; }
.star:nth-child(3) { left: 70%; animation-duration: 4s; }
💡 Pro Tips:

🎪 Retro Button Styles

Make your navigation buttons extra 2000s:

/* 3D button effect */
.navigation a {
  background: linear-gradient(to bottom, #4d5588, #3d4578);
  border: 2px outset #4d5588;
  text-shadow: 1px 1px 2px rgba(0,0,0,0.5);
}

.navigation a:hover {
  border: 2px inset #4d5588;
  transform: translateY(1px);
}

/* Neon glow buttons */
.widget a {
  box-shadow: 0 0 5px #7878a8;
  transition: box-shadow 0.3s ease;
}

.widget a:hover {
  box-shadow: 0 0 15px #9898c8;
}
⚠️ Remember: These are all OPTIONAL extras! Your site looks great as-is. Only add effects if you want to experiment and have fun. The goal is authentic 2000s charm, not to become a flashy modern site!

🏗️ Understanding the HTML Structure

Want to rearrange things or understand how the layout works? Here's a breakdown of the HTML structure!

📋 Basic Page Structure

<div class="container"> <!-- Main wrapper for everything -->
  <header class="main-header"> <!-- Page title area -->
    <h1>Page Title</h1>
    <div class="header-subtitle">Subtitle</div>
  </header>

  <div class="marquee"> <!-- Scrolling text banner -->
    <p>Your scrolling message</p>
  </div>

  <div class="content-wrapper"> <!-- Three-column layout -->
    <aside class="left-sidebar">...</aside>
    <main class="main-content">...</main>
    <aside class="right-sidebar">...</aside>
  </div>

  <footer class="main-footer"> <!-- Bottom of page -->
    <p>Copyright info</p>
  </footer>
</div>

🔧 What Are <aside> Tags?

<aside> is an HTML5 semantic element that represents content that's related to the main content but not essential to understanding it. Think of it as "sidebar content":

<aside class="left-sidebar">
  <!-- Navigation, banners, related links -->
  <nav class="sidebar-nav widget">...</nav>
  <div class="widget">...</div>
</aside>

<main class="main-content">
  <!-- Primary page content goes here -->
  <section class="content-box">...</section>
</main>

<aside class="right-sidebar">
  <!-- Additional info, quick links, etc. -->
  <div class="widget">...</div>
</aside>

♿ Accessibility & Inclusive Design

Making your creative 2000s-style site accessible doesn't mean sacrificing personality! Here's how to keep your artistic vision while ensuring everyone can enjoy your character page.

🔊 What Are ARIA Labels?

ARIA (Accessible Rich Internet Applications) labels are special attributes that help screen readers understand what different parts of your page do. Think of them as "invisible descriptions" for people using assistive technology:

<aside class="left-sidebar" aria-label="Navigation and site tools">
  <!-- Screen readers will announce this as "Navigation and site tools" -->
</aside>

<aside class="right-sidebar" aria-label="Character quick info">
  <!-- Screen readers will announce this as "Character quick info" -->
</aside>

🎨 Accessible Design That Stays Creative

💡 Good News: Accessibility and artistic design work great together! Here's how:

🔍 Why Accessibility Matters

Making your site accessible means:

✨ Easy Accessibility Wins

<!-- Good image descriptions -->
<img src="character.jpg" alt="Miqo'te scholar with purple hair reading in a sunlit library">

<!-- Descriptive link text -->
<a href="backstory.html">Read Character's Full Backstory</a>
<!-- Instead of just "Click here" or "Read more" -->

<!-- Clear heading structure -->
<h1>Main Page Title</h1>
<h2>Major Section</h2>
<h3>Subsection</h3>
<!-- Don't skip heading levels! -->

🌈 Color & Contrast Tips

Your 2000s bright colors can be accessibility superstars:

/* Good contrast examples */
.good-contrast {
  background: #2d3561; /* Dark blue */
  color: #ffffff; /* White text = great contrast! */
}

.also-good {
  background: #ffffff; /* White */
  color: #232940; /* Dark text = also great! */
}

/* If you want to check contrast, use online tools like: */
/* WebAIM Contrast Checker or Colour Contrast Analyser */

⌨️ Keyboard Navigation

Some visitors navigate using only keyboards. The template already supports this, but here's what to keep in mind:

🎭 Balancing Style & Access

🎨 Pro Tip: You don't have to choose between looking cool and being accessible!
<!-- Decorative elements that screen readers should skip -->
<span aria-hidden="true">✨</span>
<!-- aria-hidden tells screen readers "this is just visual decoration" -->

<!-- Important content that screen readers should announce -->
<button aria-label="Open character gallery with 12 screenshots">Gallery</button>
<!-- Gives more context than just "Gallery" -->
⚠️ Remember: This template includes basic accessibility features, but you can always add more! The goal is making your creative vision accessible to as many people as possible while keeping that authentic 2000s RP site charm.

📦 How Div Layers Work

Think of divs like nesting boxes - each one can contain other elements:

<div class="content-box"> <!-- Outer container -->
  <h2>Section Title</h2> <!-- Header element -->
  <div class="inner-section"> <!-- Inner container -->
    <p>Some content here</p> <!-- Content element -->
    <div class="even-deeper"> <!-- Even deeper nesting -->
      <span>Nested content</span>
    </div>
  </div>
</div>

🔄 Rearranging Sections

Want to move sections around? Here's how:

<!-- To move a content box, cut and paste the entire section -->
<section id="personality" class="content-box">
  <h2>Personality</h2>
  <p>All the content...</p>
</section>

<!-- Moving this above another section changes the page order -->
<section id="appearance" class="content-box">
  <h2>Appearance</h2>
  <p>All the content...</p>
</section>

➕ Adding New Sections

To add a new content section, copy an existing one and modify:

<section class="content-box">
  <h2>Your New Section</h2>
  <p>Your new content goes here!</p>
  <!-- Add more paragraphs, lists, etc. as needed -->
</section>

💻 JavaScript Effects (Optional Fun!)

Want to add some interactive elements? Here are some simple JavaScript effects that work great with the 2000s aesthetic!

✨ Text Effects

<!-- Add this before closing </body> tag -->
<script>
// Typewriter effect for headers
function typeWriter(element, text, speed = 100) {
  let i = 0;
  element.innerHTML = '';
  function type() {
    if (i < text.length) {
      element.innerHTML += text.charAt(i);
      i++;
      setTimeout(type, speed);
    }
  }
  type();
}

// Use it on page load
window.onload = function() {
  const title = document.querySelector('.main-header h1');
  const originalText = title.textContent;
  typeWriter(title, originalText, 150);
};
</script>

🎵 Sound Effects

<!-- Add sound to button clicks -->
<script>
// Add click sounds to navigation
document.querySelectorAll('.sidebar-nav a').forEach(link => {
  link.addEventListener('click', function() {
    // You can add a small audio file here
    const audio = new Audio('click-sound.mp3');
    audio.volume = 0.3; // Keep it subtle
    audio.play().catch(e => {}); // Ignore errors
  });
});
</script>

🌟 Interactive Elements

<!-- Color-changing elements -->
<script>
// Random color changes for fun
function randomColor() {
  const colors = ['#7878a8', '#9898c8', '#b8b8d8', '#a8a8b8'];
  return colors[Math.floor(Math.random() * colors.length)];
}

// Make sparkles change color on click
document.addEventListener('click', function(e) {
  if (e.target.classList.contains('sparkles')) {
    e.target.style.color = randomColor();
  }
});
</script>

💫 Page Transitions

<!-- Smooth fade-in effect -->
<style>
.fade-in {
  opacity: 0;
  transition: opacity 1s ease-in;
}
.fade-in.loaded {
  opacity: 1;
}
</style>

<script>
// Add fade-in class to container
document.querySelector('.container').classList.add('fade-in');

// Trigger fade-in after page loads
window.addEventListener('load', function() {
  document.querySelector('.container').classList.add('loaded');
});
</script>

🎨 Dynamic Content

<!-- Random quote or fact generator -->
<script>
const funFacts = [
  "Did you know my character loves collecting shells?",
  "Fun fact: She can't swim despite living by the ocean!",
  "Random trivia: Her favorite food is sea salt ice cream.",
  "Cool detail: She hums while working on research."
];

function showRandomFact() {
  const fact = funFacts[Math.floor(Math.random() * funFacts.length)];
  const factElement = document.getElementById('random-fact');
  if (factElement) {
    factElement.textContent = fact;
  }
}

// Update fact every 10 seconds
setInterval(showRandomFact, 10000);
</script>

<!-- Add this to your HTML where you want the fact to appear -->
<p id="random-fact">Loading fun fact...</p>
💡 JavaScript Tips:
⚠️ Neocities Notes: Neocities supports client-side JavaScript, but remember that some visitors might have JavaScript disabled. Always make sure your site works without it too!

📞 Need Help?

If you run into issues or want to customize something specific, feel free to ask for help! The FFXIV RP community is generally very supportive.

Happy RPing! Keep it authentic and have fun! 🎮