Thistle & Rose Studios — Wedding Photography & Film *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } :root { –navy: #1a2744; –navy-deep: #0f1929; –navy-mid: #243258; –gold: #c9a96e; –gold-light: #e8d5a8; –gold-pale: #f7f0e2; –cream: #faf8f4; –cream-dark: #f0ebe0; –text-dark: #1a2744; –text-mid: #4a5568; –text-light: #8a96a8; –serif: ‘Cormorant Garamond’, Georgia, serif; –sans: ‘Jost’, sans-serif; } html { scroll-behavior: smooth; } body { font-family: var(–sans); background: var(–cream); color: var(–text-dark); overflow-x: hidden; } /* ── NAV ── */ nav { position: sticky; top: 0; z-index: 100; background: rgba(250,248,244,0.96); border-bottom: 1px solid var(–gold-light); padding: 0 3rem; display: flex; align-items: center; justify-content: space-between; height: 72px; backdrop-filter: blur(10px); } .nav-logo { font-family: var(–serif); font-size: 24px; font-weight: 400; color: var(–navy); letter-spacing: 0.04em; text-decoration: none; } .nav-logo span { color: var(–gold); font-style: italic; } .nav-links { display: flex; gap: 2.5rem; list-style: none; } .nav-links a { font-family: var(–sans); font-size: 11px; font-weight: 400; letter-spacing: 0.14em; text-transform: uppercase; color: var(–text-mid); text-decoration: none; transition: color 0.2s; } .nav-links a:hover { color: var(–gold); } .nav-cta { font-family: var(–sans); font-size: 11px; font-weight: 400; letter-spacing: 0.14em; text-transform: uppercase; background: var(–navy); color: var(–gold-light); padding: 12px 26px; text-decoration: none; transition: all 0.2s; } .nav-cta:hover { background: var(–gold); color: var(–navy); } /* ── HERO ── */ .hero { min-height: 92vh; display: grid; grid-template-columns: 1fr 1fr; position: relative; overflow: hidden; } .hero-left { background: var(–navy-deep); display: flex; flex-direction: column; justify-content: center; padding: 6rem 4rem 6rem 5rem; position: relative; } .hero-left::after { content: ”; position: absolute; right: -1px; top: 0; bottom: 0; width: 2px; background: var(–gold); } .hero-eyebrow { font-family: var(–sans); font-size: 11px; letter-spacing: 0.22em; text-transform: uppercase; color: var(–gold); margin-bottom: 1.5rem; opacity: 0; animation: fadeUp 0.7s ease 0.1s both; } .hero-title { font-family: var(–serif); font-size: clamp(42px, 5vw, 72px); font-weight: 300; line-height: 1.08; color: #f7f0e2; margin-bottom: 1.25rem; opacity: 0; animation: fadeUp 0.7s ease 0.25s both; } .hero-title em { font-style: italic; color: var(–gold-light); } .hero-sub { font-family: var(–serif); font-size: 19px; font-weight: 300; font-style: italic; color: var(–gold-light); opacity: 0; line-height: 1.6; margin-bottom: 2.75rem; animation: fadeUp 0.7s ease 0.4s both; } .hero-btn { display: inline-block; font-family: var(–sans); font-size: 11px; letter-spacing: 0.18em; text-transform: uppercase; color: var(–navy-deep); background: var(–gold); padding: 16px 36px; text-decoration: none; transition: all 0.2s; width: fit-content; opacity: 0; animation: fadeUp 0.7s ease 0.55s both; } .hero-btn:hover { background: var(–gold-light); } .hero-right { background: var(–navy-mid); position: relative; display: grid; grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr; gap: 3px; overflow: hidden; } .hero-photo { display: flex; align-items: center; justify-content: center; flex-direction: column; gap: 8px; } .hero-photo.tall { grid-row: span 2; } /* Replace these background colors with: background-image: url(‘your-photo.jpg’); background-size: cover; background-position: center; */ .hp1 { background: linear-gradient(145deg, #243258 0%, #1a2744 100%); } .hp2 { background: linear-gradient(145deg, #1e2e50 0%, #141f38 100%); } .hp3 { background: linear-gradient(145deg, #2a3660 0%, #1a2744 100%); } .hero-photo-icon { opacity: 0.2; } .hero-photo-label { font-family: var(–serif); font-size: 11px; letter-spacing: 0.1em; color: var(–gold-light); opacity: 0.4; } .hero-ornament { position: absolute; bottom: 1.5rem; right: 1.5rem; font-family: var(–serif); font-size: 11px; color: var(–gold); opacity: 0.5; letter-spacing: 0.08em; } /* ── SHARED SECTION STYLES ── */ section { padding: 7rem 0; } .container { max-width: 1140px; margin: 0 auto; padding: 0 2.5rem; } .section-eyebrow { font-family: var(–sans); font-size: 11px; letter-spacing: 0.22em; text-transform: uppercase; color: var(–gold); text-align: center; margin-bottom: 0.75rem; } .section-title { font-family: var(–serif); font-size: clamp(34px, 4vw, 56px); font-weight: 300; text-align: center; color: var(–navy); line-height: 1.15; margin-bottom: 1rem; } .section-title em { font-style: italic; color: var(–gold); } .section-rule { width: 60px; height: 1px; background: var(–gold); margin: 0 auto 3.5rem; } /* ── GALLERY ── */ .gallery-section { background: var(–cream); } .gallery-tabs { display: flex; gap: 0; justify-content: center; margin-bottom: 3rem; border-bottom: 1px solid var(–gold-light); } .tab-btn { font-family: var(–sans); font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; padding: 12px 30px; background: none; border: none; color: var(–text-light); cursor: pointer; border-bottom: 2px solid transparent; margin-bottom: -1px; transition: all 0.2s; } .tab-btn.active, .tab-btn:hover { color: var(–navy); border-bottom-color: var(–gold); } .gallery-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 4px; } .gallery-item { position: relative; overflow: hidden; aspect-ratio: 4/5; cursor: pointer; } .gallery-item.wide { grid-column: span 2; aspect-ratio: 8/5; } .gallery-item.tall { grid-row: span 2; aspect-ratio: 2/3; } .gallery-fill { width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; transition: transform 0.6s ease; /* Replace background with: background-image: url(‘your-photo.jpg’); background-size: cover; background-position: center; */ } .gallery-item:hover .gallery-fill { transform: scale(1.04); } .g1 { background: #1e2d50; } .g2 { background: #2a3a5c; } .g3 { background: #162240; } .g4 { background: #243258; } .g5 { background: #1a2a48; } .g6 { background: #0f1929; } .g7 { background: #1e3060; } .gallery-overlay { position: absolute; inset: 0; background: rgba(10,16,32,0); display: flex; align-items: flex-end; padding: 1.5rem; transition: background 0.35s; } .gallery-item:hover .gallery-overlay { background: rgba(10,16,32,0.5); } .gallery-caption { font-family: var(–serif); font-size: 15px; font-style: italic; color: var(–gold-light); opacity: 0; transform: translateY(10px); transition: all 0.35s; } .gallery-item:hover .gallery-caption { opacity: 1; transform: translateY(0); } /* ── ABOUT ── */ .about-section { background: var(–navy-deep); } .about-inner { display: grid; grid-template-columns: 1fr 1.2fr; gap: 6rem; align-items: center; } .about-image-frame { position: relative; padding-bottom: 2rem; padding-right: 2rem; } .about-photo { width: 100%; aspect-ratio: 3/4; /* Replace with: background-image: url(‘your-photo.jpg’); background-size: cover; background-position: center; */ background: var(–navy-mid); display: flex; align-items: center; justify-content: center; } .about-photo-border { position: absolute; top: 22px; left: 22px; right: 0; bottom: 0; border: 1px solid var(–gold); opacity: 0.35; pointer-events: none; } .about-badge { position: absolute; bottom: 0; right: 0; background: var(–gold); color: var(–navy-deep); padding: 1.4rem 1.75rem; text-align: center; } .about-badge-num { font-family: var(–serif); font-size: 40px; font-weight: 300; line-height: 1; display: block; } .about-badge-text { font-family: var(–sans); font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase; display: block; margin-top: 5px; } .about-content .section-title { text-align: left; color: #faf8f4; } .about-content .section-rule { margin-left: 0; } .about-content .section-eyebrow { text-align: left; } .about-text { font-family: var(–serif); font-size: 18px; font-weight: 300; line-height: 1.85; color: var(–gold-light); opacity: 0.82; margin-bottom: 1.25rem; } .about-sig { font-family: var(–serif); font-size: 30px; font-weight: 300; font-style: italic; color: var(–gold); margin-top: 2rem; } /* ── SERVICES ── */ .services-section { background: var(–cream-dark); } .services-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 2px; } .service-card { background: white; padding: 3.5rem 2.5rem; position: relative; transition: transform 0.25s; } .service-card:hover { transform: translateY(-5px); } .service-card.featured { background: var(–navy); } .service-tag { font-family: var(–sans); font-size: 10px; letter-spacing: 0.2em; text-transform: uppercase; color: var(–gold); margin-bottom: 1.1rem; display: block; } .service-name { font-family: var(–serif); font-size: 30px; font-weight: 300; color: var(–navy); margin-bottom: 0.5rem; line-height: 1.15; } .service-card.featured .service-name { color: var(–gold-light); } .service-price { font-family: var(–serif); font-size: 42px; font-weight: 300; color: var(–gold); line-height: 1; margin-bottom: 0.2rem; } .service-price-note { font-family: var(–sans); font-size: 11px; color: var(–text-light); letter-spacing: 0.08em; margin-bottom: 2.25rem; } .service-card.featured .service-price-note { color: var(–gold-light); opacity: 0.55; } .service-divider { width: 40px; height: 1px; background: var(–gold-light); margin-bottom: 1.75rem; } .service-features { list-style: none; display: flex; flex-direction: column; gap: 11px; margin-bottom: 2.75rem; } .service-features li { font-family: var(–sans); font-size: 13px; color: var(–text-mid); display: flex; align-items: center; gap: 12px; } .service-card.featured .service-features li { color: var(–gold-light); opacity: 0.8; } .service-features li::before { content: ”; display: inline-block; width: 18px; height: 1px; background: var(–gold); flex-shrink: 0; } .service-btn { display: inline-block; font-family: var(–sans); font-size: 11px; letter-spacing: 0.16em; text-transform: uppercase; padding: 13px 26px; text-decoration: none; border: 1px solid var(–gold); color: var(–navy); transition: all 0.2s; cursor: pointer; background: none; } .service-btn:hover { background: var(–gold); color: white; } .service-card.featured .service-btn { color: var(–gold); } .service-card.featured .service-btn:hover { background: var(–gold); color: var(–navy); } .featured-badge { position: absolute; top: 0; left: 50%; transform: translateX(-50%); background: var(–gold); color: var(–navy); font-family: var(–sans); font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase; padding: 6px 18px; white-space: nowrap; } /* ── CONTACT ── */ .contact-section { background: var(–navy-deep); } .contact-inner { display: grid; grid-template-columns: 1fr 1.4fr; gap: 6rem; align-items: start; } .contact-info .section-title { text-align: left; color: #faf8f4; } .contact-info .section-rule { margin-left: 0; } .contact-info .section-eyebrow { text-align: left; } .contact-text { font-family: var(–serif); font-size: 17px; font-weight: 300; font-style: italic; color: var(–gold-light); opacity: 0.75; line-height: 1.85; margin-bottom: 2.75rem; } .contact-details { display: flex; flex-direction: column; gap: 1.5rem; } .contact-detail-item { display: flex; flex-direction: column; gap: 4px; } .detail-label { font-family: var(–sans); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(–gold); } .detail-value { font-family: var(–serif); font-size: 17px; color: #faf8f4; font-weight: 300; } .contact-form { display: flex; flex-direction: column; gap: 0; } .form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 2px; } .form-field { display: flex; flex-direction: column; margin-bottom: 2px; } .form-field label { font-family: var(–sans); font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(–gold); padding: 14px 18px 6px; background: rgba(255,255,255,0.05); } .form-field input, .form-field select, .form-field textarea { font-family: var(–sans); font-size: 14px; color: #faf8f4; background: rgba(255,255,255,0.05); border: none; padding: 0 18px 14px; outline: none; transition: background 0.2s; } .form-field textarea { padding: 14px 18px; min-height: 110px; resize: vertical; } .form-field input:focus, .form-field select:focus, .form-field textarea:focus { background: rgba(201,169,110,0.1); } .form-field select { appearance: none; cursor: pointer; } .form-field select option { background: var(–navy-deep); color: #faf8f4; } .form-submit { background: var(–gold); color: var(–navy-deep); font-family: var(–sans); font-size: 11px; letter-spacing: 0.2em; text-transform: uppercase; padding: 20px 36px; border: none; cursor: pointer; transition: background 0.2s; width: 100%; margin-top: 2px; } .form-submit:hover { background: var(–gold-light); } /* ── FOOTER ── */ footer { background: #080e1a; padding: 2.5rem 3rem; display: flex; align-items: center; justify-content: space-between; border-top: 1px solid rgba(201,169,110,0.12); flex-wrap: wrap; gap: 1rem; } .footer-logo { font-family: var(–serif); font-size: 22px; color: var(–gold-light); opacity: 0.65; font-weight: 300; } .footer-copy { font-family: var(–sans); font-size: 11px; color: var(–text-light); letter-spacing: 0.08em; } .footer-social { display: flex; gap: 2rem; } .footer-social a { font-family: var(–sans); font-size: 10px; letter-spacing: 0.16em; text-transform: uppercase; color: var(–gold); opacity: 0.55; text-decoration: none; transition: opacity 0.2s; } .footer-social a:hover { opacity: 1; } /* ── ANIMATIONS ── */ @keyframes fadeUp { from { opacity: 0; transform: translateY(22px); } to { opacity: 1; transform: translateY(0); } } /* ── RESPONSIVE ── */ @media (max-width: 900px) { nav { padding: 0 1.5rem; } .nav-links { display: none; } .hero { grid-template-columns: 1fr; min-height: auto; } .hero-left { padding: 5rem 2rem; } .hero-left::after { display: none; } .hero-right { min-height: 360px; } .about-inner { grid-template-columns: 1fr; gap: 3rem; } .about-image-frame { max-width: 400px; } .services-grid { grid-template-columns: 1fr; } .contact-inner { grid-template-columns: 1fr; gap: 3rem; } .form-row { grid-template-columns: 1fr; } .gallery-grid { grid-template-columns: 1fr 1fr; } .gallery-item.wide { grid-column: span 2; } .gallery-item.tall { grid-row: auto; aspect-ratio: 4/5; } footer { flex-direction: column; text-align: center; } } Book a Date

Wedding Photography & Film

Where love
becomes art.

Timeless imagery crafted with
intention, light, and heart.

Explore Our Work
<!– Replace these divs with tags or add background-image styles pointing to your photos –>
Portrait
Ceremony
Details
Est. 2016
<!– Replace this div with an tag pointing to your photo –>
250+ Weddings Captured

Our Story

We believe in
quiet magic

We are Thistle & Rose Studios — a husband-and-wife creative duo based in the American South, dedicated to capturing the fleeting, luminous moments of your wedding day.

Our approach is unhurried and intimate. We blend into the background so you can be fully present, then disappear together into the edit suite to craft images that feel like memory itself.

Whether you’re exchanging vows in a sunlit garden or a candlelit cathedral, we are there — patient, watchful, and ready for every unscripted moment.

— Sophie & James Elara

Investment

Collections crafted for every love story

Photography
The Essentials
$3,200
Starting price
  • 8 hours of coverage
  • One lead photographer
  • 400+ edited gallery images
  • Online gallery delivery
  • Full print release included
Inquire Now
Full Experience
The Legacy
$9,500
Starting price
  • Unlimited day-of coverage
  • Two photographers + videographer
  • Full gallery, unlimited images
  • 8–10 min feature film + highlights reel
  • Luxury heirloom album
  • Engagement + bridal sessions
Inquire Now

Get in Touch

Let’s begin
your story

We’d love to hear about your day. Tell us a little about your vision and we’ll be in touch within 24 hours.

Phone +1 (904) 555 0142
Based In Jacksonville, FL — Available Worldwide
Your Names
Email Address
Wedding Date
Collection Interest Select a package The Essentials — $3,200 The Signature — $5,800 The Legacy — $9,500 Custom / Not Sure Yet
Tell us about your day
/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js // Gallery tab filtering document.querySelectorAll(‘.tab-btn’).forEach(btn => { btn.addEventListener(‘click’, function () { document.querySelectorAll(‘.tab-btn’).forEach(b => b.classList.remove(‘active’)); this.classList.add(‘active’); }); }); // Smooth scroll for anchor links document.querySelectorAll(‘a[href^=”#”]’).forEach(anchor => { anchor.addEventListener(‘click’, function (e) { const target = document.querySelector(this.getAttribute(‘href’)); if (target) { e.preventDefault(); target.scrollIntoView({ behavior: ‘smooth’, block: ‘start’ }); } }); }); // Sticky nav
Is this your new site? Log in to activate admin features and dismiss this message
Log In