Skip to main content
All visual styling lives in style.css. The Google Fonts import is in index.html. Change these values to match your wedding palette and typography.
After any CSS change, test your site on a mobile device (or browser DevTools at 375px width) before publishing. The site uses several responsive breakpoints and some changes that look fine on desktop can break the mobile layout.
The site uses a warm brown palette throughout. The two primary brand colors are:
Color nameHexUsed for
Saddle brown#8B4513Section titles, detail icons, form focus ring
Burlywood#DEB887Footer links
Sandy brown#d4b99cNav brand, date-time, CTA button, section underline
Section titles (style.css):
style.css
.section-title {
    font-family: 'Dancing Script', cursive;
    font-size: 3rem;
    font-weight: 700;
    color: #8B4513;
    margin-bottom: 1rem;
}
Detail card icons (style.css):
style.css
.detail-icon {
    font-size: 3rem;
    color: #8B4513;
    margin-bottom: 1.5rem;
}
Nav brand and accent (style.css):
style.css
.nav-brand {
    font-family: 'Great Vibes', cursive;
    font-size: 1.5rem;
    font-weight: bold;
    color: #d4b99c;
    text-decoration: none;
}
Footer links (style.css):
style.css
.footer-section a {
    color: #DEB887;
    text-decoration: none;
}

.footer-section a:hover {
    color: #8B4513;
}
Confetti colors (triggered on successful RSVP submission, in triggerConfetti() inside script.js):
script.js
const colors = ['#8B4513', '#DEB887', '#F4A460', '#D2B48C'];
To change the overall palette, find-and-replace these hex values across both files:
/* Find all instances of #8B4513 in style.css and replace */
/* Example: change to deep teal */
color: #0d6e6e;
Three Google Fonts are loaded. The @import link is in index.html:
index.html
<link
    href="https://fonts.googleapis.com/css2?family=Great+Vibes&family=Dancing+Script:wght@400;700&family=Noto+Serif+TC:wght@200;300;400;500;600;700;900&display=swap"
    rel="stylesheet">
FontUsed forCSS declaration
Great VibesNav brand (J & J), couple names in herofont-family: 'Great Vibes', cursive;
Dancing ScriptSection titles, countdown numbersfont-family: 'Dancing Script', cursive;
Noto Serif TCBody text (Chinese + Latin)font-family: "Noto Serif TC", serif, ...;
Body font (style.css):
style.css
body {
    font-family: "Noto Serif TC", serif, 'Arial', 'Helvetica', 'Microsoft YaHei', sans-serif;
}
Couple names (style.css):
style.css
.couple-names {
    font-size: 3.5rem;
    font-weight: 400;
    letter-spacing: 0.3rem;
    color: #8B4513;
    font-family: 'Great Vibes', cursive;
}
Section titles (style.css):
style.css
.section-title {
    font-family: 'Dancing Script', cursive;
    font-size: 3rem;
}
To swap fonts, update the Google Fonts URL in index.html and the corresponding font-family declarations in style.css.
The hero displays a full-viewport cover photo:
index.html
<div class="hero-image">
    <img src="static/01_cover.webp" alt="Wedding Photo" fetchpriority="high" decoding="async" sizes="100vw" />
</div>
There is also a preload hint in <head> to start loading the image early:
index.html
<link rel="preload" as="image" href="static/01_cover.webp" imagesizes="100vw" />
To replace the cover photo:
1

Export your photo

Export as .webp for the best file size and quality. A JPEG fallback is also fine — just update the extension. Aim for a width of 1920px or more since the image fills the full viewport width.
2

Place the file

Copy the new image to static/ and name it (e.g., my_cover.webp).
3

Update the src and preload href

In index.html, change both occurrences of static/01_cover.webp to your new filename:
index.html
<!-- Preload hint in <head> -->
<link rel="preload" as="image" href="static/my_cover.webp" imagesizes="100vw" />

<!-- Hero image in <body> -->
<img src="static/my_cover.webp" alt="Wedding Photo" fetchpriority="high" decoding="async" sizes="100vw" />
The hero image height is 100vh on desktop and 50vh on mobile (set in .hero-image in style.css).
Each detail card uses the .detail-card class:
style.css
.detail-card {
    background: white;
    padding: 3rem 2rem;
    border-radius: 15px;
    box-shadow: 0 10px 30px rgba(0,0,0,0.1);
    transition: all 0.3s ease;
    height: 100%;
}

.detail-card:hover {
    transform: translateY(-10px);
    box-shadow: 0 20px 40px rgba(0,0,0,0.15);
}
The cards sit inside a Bootstrap 12-column grid (col-lg-4 col-md-6). To change card spacing, adjust the padding in .detail-card. To remove the lift-on-hover effect, delete the .detail-card:hover rule.

Build docs developers (and LLMs) love