Spaces:
Running
Phenomenal Wedding Card Prompt with Feature Checklist
Browse files> Role: You are a world‑class full‑stack web developer, UI/UX designer, and creative director.
> Goal: Build the most phenomenal, feature‑rich, interactive, Islamic‑style wedding invitation card ever made — all in one single HTML file containing HTML, CSS, and JavaScript (Bootstrap optional).
>
> Couple & Event Details:
> - Groom: Yaseen Shaikh (Son of Alauddin Shaikh)
> - Bride: Noor Fatima (Daughter of Obaida Shaikh)
> - Nikah: 15 May 2026, after Namaz at 3:00 PM, Haqqani Masjid, Govandi, Mumbai
> - Walimah: 18 May 2026, 7:00 PM – 12:00 midnight, Govandi Karbala Hall, Mumbai
> - Love story: They met in a video game, became friends, bonded over faith, families approved, and now they’re starting a life together.
>
> Instructions:
> - All code in one file — HTML, CSS, and JavaScript combined.
> - Use online resources if needed — royalty‑free dummy images, Islamic calligraphy SVGs, decorative patterns, icon libraries (Font Awesome), Google Fonts, etc.
> - Islamic‑inspired design — modest yet stylish, with crescents, lanterns, arabesque patterns, and Quranic verses.
> - Responsive — perfect on mobile, tablet, and desktop.
> - Performance‑friendly — smooth animations without lag.
> - Culturally respectful — modest imagery, Islamic calligraphy, and appropriate colour palettes.
>
> Feature Checklist (Tick off each as you implement):
>
> ### 🎨 Design & Visuals
> - [ ] Animated backgrounds (stars, lanterns, petals, bokeh, gradients)
> - [ ] Islamic decorative elements (crescent moon, arabesque patterns, calligraphy)
> - [ ] Multiple themes (emerald, blush, midnight, gold) with theme switcher
> - [ ] Shimmer & glow effects on names/headings
> - [ ] Animated SVG dividers between sections
> - [ ] Custom cursor (crescent or floral)
> - [ ] Custom scrollbars matching theme
> - [ ] Floating decorative elements (petals, lanterns, stars)
> - [ ] Animated borders with glowing gold outlines
> - [ ] Time‑of‑day background change
> - [ ] Loading screen with Islamic calligraphy animation
> - [ ] Floating Quranic calligraphy in background
> - [ ] Dynamic floral patterns generated with CSS/JS
> - [ ] Interactive lanterns (click to light/unlight)
> - [ ] 3D tilt effect on hover for main card
> - [ ] Light/Dark mode toggle
>
> ### 📅 Event Info & Interactivity
> - [ ] Countdown timers for Nikah and Walimah
> - [ ] Hijri date converter for each event
> - [ ] Interactive map buttons (“Open in Google Maps”)
> - [ ] Add to Calendar (.ics) for each event
> - [ ] Event reminders (pop‑up/banner when near)
> - [ ] Weather widget for Mumbai on event days
> - [ ] Prayer times widget for Govandi on event days
> - [ ] Animated progress bar showing days left until wedding
>
> ### 💌 Story & Media
> - [ ] Love story timeline with animations and icons
> - [ ] Auto‑scroll storytelling mode with background music
> - [ ] Photo gallery carousel (dummy images)
> - [ ] Auto‑play slideshow of couple’s journey
> - [ ] Animated signature of couple’s names in calligraphy
> - [ ] Auto‑generated Islamic poetry or duas displayed randomly
>
> ### 🎶 Audio & Effects
> - [ ] Background nasheed/music (royalty‑free) with play/pause toggle
> - [ ] Confetti & fireworks animation on load or button click
> - [ ] Soft chime sound effects on button clicks
> - [ ] Floating tasbih beads animation
> - [ ] Easter eggs (hidden animations/blessings when clicking certain elements)
>
> ### 📝 Guest Interaction
> - [ ] RSVP form with validation and success animation
> - [ ] Guestbook/message board (store in localStorage)
> - [ ] Digital guest badge generator for each RSVP
> - [ ] Interactive quiz (“How well do you know the couple?”)
> - [ ] Live chat widget for guests (optional)
> - [ ] Live visitor counter
> - [ ] Photo frame generator for guest uploads
>
> ### ♿ Accessibility & Sharing
> - [ ] Language toggle (English/Urdu)
> - [ ] High‑contrast accessibility mode
> - [ ] ARIA labels for screen readers
> - [ ] Print/PDF download option
> - [ ] SEO & social preview meta tags
> - [ ] Optimised for sharing on WhatsApp, Instagram, etc.
> - [ ] Lazy‑loading images for performance
> - [ ] Offline mode with service worker
>
> Output Requirements:
> - Deliver all code in one HTML file.
> - Include clear comments for each major section.
> - Use dummy images/audio from online sources where needed.
> - Ensure it runs standalone in a browser without extra setup.
> - Make it visually breathtaking, deeply interactive, and culturally respectful.
> - Add any extra creative features you can imagine beyond this list.
> - Think like a designer, developer, and storyteller — this is not just a card, it’s an experience. - Initial Deployment
- README.md +7 -5
- index.html +965 -18
|
@@ -1,10 +1,12 @@
|
|
| 1 |
---
|
| 2 |
-
title:
|
| 3 |
-
emoji:
|
| 4 |
-
colorFrom:
|
| 5 |
-
colorTo:
|
| 6 |
sdk: static
|
| 7 |
pinned: false
|
|
|
|
|
|
|
| 8 |
---
|
| 9 |
|
| 10 |
-
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
|
|
|
| 1 |
---
|
| 2 |
+
title: yasso
|
| 3 |
+
emoji: 🐳
|
| 4 |
+
colorFrom: yellow
|
| 5 |
+
colorTo: purple
|
| 6 |
sdk: static
|
| 7 |
pinned: false
|
| 8 |
+
tags:
|
| 9 |
+
- deepsite
|
| 10 |
---
|
| 11 |
|
| 12 |
+
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
|
@@ -1,19 +1,966 @@
|
|
| 1 |
-
<!
|
| 2 |
-
<html>
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
</html>
|
|
|
|
| 1 |
+
<!DOCTYPE html>
|
| 2 |
+
<html lang="en">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="UTF-8">
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
+
<title>Yaseen & Noor - Wedding Invitation</title>
|
| 7 |
+
<meta name="description" content="Join us in celebrating the union of Yaseen Shaikh and Noor Fatima on 15th May 2026">
|
| 8 |
+
|
| 9 |
+
<!-- Favicon -->
|
| 10 |
+
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>🌙</text></svg>">
|
| 11 |
+
|
| 12 |
+
<!-- Tailwind CSS -->
|
| 13 |
+
<script src="https://cdn.tailwindcss.com"></script>
|
| 14 |
+
<script>
|
| 15 |
+
tailwind.config = {
|
| 16 |
+
theme: {
|
| 17 |
+
extend: {
|
| 18 |
+
colors: {
|
| 19 |
+
gold: '#D4AF37',
|
| 20 |
+
emerald: '#50C878',
|
| 21 |
+
blush: '#DE5D83',
|
| 22 |
+
midnight: '#1A1A2E',
|
| 23 |
+
},
|
| 24 |
+
fontFamily: {
|
| 25 |
+
arabic: ['"Amiri"', 'serif'],
|
| 26 |
+
english: ['"Playfair Display"', 'serif'],
|
| 27 |
+
},
|
| 28 |
+
}
|
| 29 |
+
}
|
| 30 |
+
}
|
| 31 |
+
</script>
|
| 32 |
+
|
| 33 |
+
<!-- Google Fonts -->
|
| 34 |
+
<link href="https://fonts.googleapis.com/css2?family=Amiri:wght@400;700&family=Playfair+Display:wght@400;700&display=swap" rel="stylesheet">
|
| 35 |
+
|
| 36 |
+
<!-- Feather Icons -->
|
| 37 |
+
<script src="https://unpkg.com/feather-icons"></script>
|
| 38 |
+
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
|
| 39 |
+
|
| 40 |
+
<!-- Anime.js -->
|
| 41 |
+
<script src="https://cdn.jsdelivr.net/npm/animejs/lib/anime.min.js"></script>
|
| 42 |
+
|
| 43 |
+
<!-- AOS Animation -->
|
| 44 |
+
<link href="https://unpkg.com/aos@2.3.1/dist/aos.css" rel="stylesheet">
|
| 45 |
+
<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
|
| 46 |
+
|
| 47 |
+
<style>
|
| 48 |
+
/* Custom CSS */
|
| 49 |
+
:root {
|
| 50 |
+
--primary: #D4AF37;
|
| 51 |
+
--secondary: #1A1A2E;
|
| 52 |
+
}
|
| 53 |
+
|
| 54 |
+
body {
|
| 55 |
+
font-family: 'Playfair Display', serif;
|
| 56 |
+
background-color: #f9f5f0;
|
| 57 |
+
color: #333;
|
| 58 |
+
overflow-x: hidden;
|
| 59 |
+
}
|
| 60 |
+
|
| 61 |
+
.arabic-text {
|
| 62 |
+
font-family: 'Amiri', serif;
|
| 63 |
+
direction: rtl;
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
.glow-text {
|
| 67 |
+
text-shadow: 0 0 10px rgba(212, 175, 55, 0.7);
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
.card-hover {
|
| 71 |
+
transition: transform 0.3s ease;
|
| 72 |
+
}
|
| 73 |
+
|
| 74 |
+
.card-hover:hover {
|
| 75 |
+
transform: translateY(-10px);
|
| 76 |
+
}
|
| 77 |
+
|
| 78 |
+
.lantern {
|
| 79 |
+
animation: float 6s ease-in-out infinite;
|
| 80 |
+
}
|
| 81 |
+
|
| 82 |
+
.lantern:hover {
|
| 83 |
+
filter: drop-shadow(0 0 10px rgba(212, 175, 55, 0.9));
|
| 84 |
+
}
|
| 85 |
+
|
| 86 |
+
@keyframes float {
|
| 87 |
+
0% { transform: translateY(0px); }
|
| 88 |
+
50% { transform: translateY(-20px); }
|
| 89 |
+
100% { transform: translateY(0px); }
|
| 90 |
+
}
|
| 91 |
+
|
| 92 |
+
.petal {
|
| 93 |
+
position: absolute;
|
| 94 |
+
background-size: contain;
|
| 95 |
+
opacity: 0.7;
|
| 96 |
+
animation: falling linear infinite;
|
| 97 |
+
}
|
| 98 |
+
|
| 99 |
+
@keyframes falling {
|
| 100 |
+
0% { transform: translateY(-100px) rotate(0deg); opacity: 0; }
|
| 101 |
+
10% { opacity: 1; }
|
| 102 |
+
90% { opacity: 1; }
|
| 103 |
+
100% { transform: translateY(calc(100vh + 100px)) rotate(360deg); opacity: 0; }
|
| 104 |
+
}
|
| 105 |
+
|
| 106 |
+
.custom-scrollbar::-webkit-scrollbar {
|
| 107 |
+
width: 8px;
|
| 108 |
+
}
|
| 109 |
+
|
| 110 |
+
.custom-scrollbar::-webkit-scrollbar-track {
|
| 111 |
+
background: #f1f1f1;
|
| 112 |
+
border-radius: 10px;
|
| 113 |
+
}
|
| 114 |
+
|
| 115 |
+
.custom-scrollbar::-webkit-scrollbar-thumb {
|
| 116 |
+
background: var(--primary);
|
| 117 |
+
border-radius: 10px;
|
| 118 |
+
}
|
| 119 |
+
|
| 120 |
+
.theme-selector {
|
| 121 |
+
transition: all 0.3s ease;
|
| 122 |
+
}
|
| 123 |
+
|
| 124 |
+
.theme-selector:hover {
|
| 125 |
+
transform: scale(1.1);
|
| 126 |
+
}
|
| 127 |
+
|
| 128 |
+
.countdown-number {
|
| 129 |
+
font-size: 2rem;
|
| 130 |
+
font-weight: bold;
|
| 131 |
+
color: var(--primary);
|
| 132 |
+
}
|
| 133 |
+
|
| 134 |
+
.countdown-label {
|
| 135 |
+
font-size: 0.8rem;
|
| 136 |
+
text-transform: uppercase;
|
| 137 |
+
letter-spacing: 1px;
|
| 138 |
+
}
|
| 139 |
+
|
| 140 |
+
.timeline-item::before {
|
| 141 |
+
content: '';
|
| 142 |
+
position: absolute;
|
| 143 |
+
width: 20px;
|
| 144 |
+
height: 20px;
|
| 145 |
+
border-radius: 50%;
|
| 146 |
+
background: var(--primary);
|
| 147 |
+
left: -10px;
|
| 148 |
+
top: 0;
|
| 149 |
+
}
|
| 150 |
+
|
| 151 |
+
.floating-quran {
|
| 152 |
+
position: absolute;
|
| 153 |
+
opacity: 0.1;
|
| 154 |
+
z-index: -1;
|
| 155 |
+
animation: float 15s ease-in-out infinite;
|
| 156 |
+
}
|
| 157 |
+
|
| 158 |
+
.map-container {
|
| 159 |
+
position: relative;
|
| 160 |
+
overflow: hidden;
|
| 161 |
+
padding-top: 56.25%;
|
| 162 |
+
}
|
| 163 |
+
|
| 164 |
+
.map-container iframe {
|
| 165 |
+
position: absolute;
|
| 166 |
+
top: 0;
|
| 167 |
+
left: 0;
|
| 168 |
+
width: 100%;
|
| 169 |
+
height: 100%;
|
| 170 |
+
border: 0;
|
| 171 |
+
}
|
| 172 |
+
|
| 173 |
+
.rsvp-input {
|
| 174 |
+
border-bottom: 2px solid #ddd;
|
| 175 |
+
transition: all 0.3s ease;
|
| 176 |
+
}
|
| 177 |
+
|
| 178 |
+
.rsvp-input:focus {
|
| 179 |
+
border-bottom-color: var(--primary);
|
| 180 |
+
}
|
| 181 |
+
|
| 182 |
+
.guestbook-message {
|
| 183 |
+
border-left: 3px solid var(--primary);
|
| 184 |
+
}
|
| 185 |
+
|
| 186 |
+
.modal-overlay {
|
| 187 |
+
background-color: rgba(0, 0, 0, 0.7);
|
| 188 |
+
}
|
| 189 |
+
|
| 190 |
+
.modal-content {
|
| 191 |
+
animation: modalFadeIn 0.3s ease-out;
|
| 192 |
+
}
|
| 193 |
+
|
| 194 |
+
@keyframes modalFadeIn {
|
| 195 |
+
from { opacity: 0; transform: translateY(-20px); }
|
| 196 |
+
to { opacity: 1; transform: translateY(0); }
|
| 197 |
+
}
|
| 198 |
+
|
| 199 |
+
.music-toggle {
|
| 200 |
+
transition: all 0.3s ease;
|
| 201 |
+
}
|
| 202 |
+
|
| 203 |
+
.music-toggle:hover {
|
| 204 |
+
transform: scale(1.1);
|
| 205 |
+
}
|
| 206 |
+
|
| 207 |
+
.active-theme {
|
| 208 |
+
border: 3px solid var(--primary);
|
| 209 |
+
transform: scale(1.05);
|
| 210 |
+
}
|
| 211 |
+
</style>
|
| 212 |
+
</head>
|
| 213 |
+
<body class="relative overflow-x-hidden">
|
| 214 |
+
<!-- Loading Screen -->
|
| 215 |
+
<div id="loading-screen" class="fixed inset-0 bg-midnight z-50 flex flex-col items-center justify-center transition-opacity duration-1000">
|
| 216 |
+
<div class="text-4xl text-gold mb-4 animate-pulse">🌙</div>
|
| 217 |
+
<div class="text-xl text-white font-english">Loading the Celebration...</div>
|
| 218 |
+
<div class="w-1/4 h-1 bg-gold mt-4 rounded-full overflow-hidden">
|
| 219 |
+
<div id="loading-bar" class="h-full bg-emerald" style="width: 0%"></div>
|
| 220 |
+
</div>
|
| 221 |
+
</div>
|
| 222 |
+
|
| 223 |
+
<!-- Floating Elements -->
|
| 224 |
+
<div id="floating-elements">
|
| 225 |
+
<!-- Will be populated by JS -->
|
| 226 |
+
</div>
|
| 227 |
+
|
| 228 |
+
<!-- Floating Quranic Verses -->
|
| 229 |
+
<div class="floating-quran text-6xl text-gold opacity-10" style="top: 10%; left: 5%;">﷽</div>
|
| 230 |
+
<div class="floating-quran text-4xl text-gold opacity-10" style="top: 30%; right: 10%;">وَمِنْ آيَاتِهِ أَنْ خَلَقَ لَكُم مِّنْ أَنفُسِكُمْ أَزْوَاجًا</div>
|
| 231 |
+
<div class="floating-quran text-5xl text-gold opacity-10" style="bottom: 20%; left: 15%;">وَأَنكِحُوا الْأَيَامَىٰ مِنكُمْ</div>
|
| 232 |
+
|
| 233 |
+
<!-- Main Container -->
|
| 234 |
+
<div class="max-w-6xl mx-auto px-4 py-8 relative">
|
| 235 |
+
<!-- Header with Theme Switcher -->
|
| 236 |
+
<header class="flex justify-between items-center mb-8">
|
| 237 |
+
<div class="text-xl text-gold font-english">Yaseen & Noor</div>
|
| 238 |
+
<div class="flex space-x-2">
|
| 239 |
+
<div class="theme-selector w-6 h-6 rounded-full bg-emerald cursor-pointer" data-theme="emerald"></div>
|
| 240 |
+
<div class="theme-selector w-6 h-6 rounded-full bg-blush cursor-pointer" data-theme="blush"></div>
|
| 241 |
+
<div class="theme-selector w-6 h-6 rounded-full bg-midnight cursor-pointer" data-theme="midnight"></div>
|
| 242 |
+
<div class="theme-selector w-6 h-6 rounded-full bg-gold active-theme cursor-pointer" data-theme="gold"></div>
|
| 243 |
+
</div>
|
| 244 |
+
</header>
|
| 245 |
+
|
| 246 |
+
<!-- Hero Section -->
|
| 247 |
+
<section class="relative mb-16" data-aos="fade-up">
|
| 248 |
+
<div class="absolute inset-0 bg-gradient-to-r from-gold/10 to-transparent rounded-2xl"></div>
|
| 249 |
+
<div class="relative bg-white p-8 rounded-2xl shadow-lg">
|
| 250 |
+
<div class="flex flex-col md:flex-row items-center">
|
| 251 |
+
<div class="md:w-1/2 mb-8 md:mb-0 text-center">
|
| 252 |
+
<h1 class="text-4xl md:text-5xl font-bold text-gold mb-2 glow-text">Yaseen & Noor</h1>
|
| 253 |
+
<p class="text-lg text-gray-600 mb-4">Invite you to celebrate their union</p>
|
| 254 |
+
<div class="flex justify-center space-x-4 mb-6">
|
| 255 |
+
<div class="lantern text-3xl">🏮</div>
|
| 256 |
+
<div class="lantern text-3xl" style="animation-delay: 1s;">🏮</div>
|
| 257 |
+
<div class="lantern text-3xl" style="animation-delay: 2s;">🏮</div>
|
| 258 |
+
</div>
|
| 259 |
+
<p class="arabic-text text-xl mb-4">بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيمِ</p>
|
| 260 |
+
<p class="text-gray-700">"And among His signs is that He created for you mates from among yourselves, that you may dwell in tranquility with them, and He has put love and mercy between your hearts."</p>
|
| 261 |
+
<p class="arabic-text text-sm mt-2">(Quran 30:21)</p>
|
| 262 |
+
</div>
|
| 263 |
+
<div class="md:w-1/2 flex justify-center">
|
| 264 |
+
<div class="relative w-64 h-64 md:w-80 md:h-80 rounded-full overflow-hidden border-4 border-gold shadow-lg card-hover">
|
| 265 |
+
<img src="https://images.unsplash.com/photo-1534528741775-53994a69daeb?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1064&q=80" alt="Couple" class="w-full h-full object-cover">
|
| 266 |
+
<div class="absolute inset-0 bg-gradient-to-t from-black/50 to-transparent"></div>
|
| 267 |
+
</div>
|
| 268 |
+
</div>
|
| 269 |
+
</div>
|
| 270 |
+
</div>
|
| 271 |
+
</section>
|
| 272 |
+
|
| 273 |
+
<!-- Countdown Section -->
|
| 274 |
+
<section class="mb-16" data-aos="fade-up">
|
| 275 |
+
<div class="bg-white p-8 rounded-2xl shadow-lg">
|
| 276 |
+
<h2 class="text-3xl font-bold text-center text-gold mb-8">Countdown to Our Special Day</h2>
|
| 277 |
+
<div class="flex justify-center space-x-4 md:space-x-8 mb-8">
|
| 278 |
+
<div class="text-center">
|
| 279 |
+
<div class="countdown-number" id="countdown-days">00</div>
|
| 280 |
+
<div class="countdown-label">Days</div>
|
| 281 |
+
</div>
|
| 282 |
+
<div class="text-center">
|
| 283 |
+
<div class="countdown-number" id="countdown-hours">00</div>
|
| 284 |
+
<div class="countdown-label">Hours</div>
|
| 285 |
+
</div>
|
| 286 |
+
<div class="text-center">
|
| 287 |
+
<div class="countdown-number" id="countdown-minutes">00</div>
|
| 288 |
+
<div class="countdown-label">Minutes</div>
|
| 289 |
+
</div>
|
| 290 |
+
<div class="text-center">
|
| 291 |
+
<div class="countdown-number" id="countdown-seconds">00</div>
|
| 292 |
+
<div class="countdown-label">Seconds</div>
|
| 293 |
+
</div>
|
| 294 |
+
</div>
|
| 295 |
+
<div class="w-full bg-gray-200 rounded-full h-2.5">
|
| 296 |
+
<div id="progress-bar" class="bg-gold h-2.5 rounded-full" style="width: 0%"></div>
|
| 297 |
+
</div>
|
| 298 |
+
</div>
|
| 299 |
+
</section>
|
| 300 |
+
|
| 301 |
+
<!-- Event Details Section -->
|
| 302 |
+
<section class="mb-16" data-aos="fade-up">
|
| 303 |
+
<div class="bg-white p-8 rounded-2xl shadow-lg">
|
| 304 |
+
<h2 class="text-3xl font-bold text-center text-gold mb-8">Event Details</h2>
|
| 305 |
+
|
| 306 |
+
<div class="grid md:grid-cols-2 gap-8">
|
| 307 |
+
<!-- Nikah -->
|
| 308 |
+
<div class="bg-gray-50 p-6 rounded-xl card-hover">
|
| 309 |
+
<div class="flex items-center mb-4">
|
| 310 |
+
<div class="bg-gold text-white p-3 rounded-full mr-4">
|
| 311 |
+
<i data-feather="heart"></i>
|
| 312 |
+
</div>
|
| 313 |
+
<h3 class="text-2xl font-bold text-gold">Nikah Ceremony</h3>
|
| 314 |
+
</div>
|
| 315 |
+
<div class="space-y-2">
|
| 316 |
+
<p class="flex items-center"><i data-feather="calendar" class="mr-2 text-gold"></i> <span class="font-medium">Date:</span> 15th May 2026</p>
|
| 317 |
+
<p class="flex items-center"><i data-feather="clock" class="mr-2 text-gold"></i> <span class="font-medium">Time:</span> After Asr Prayer (~3:00 PM)</p>
|
| 318 |
+
<p class="flex items-center"><i data-feather="map-pin" class="mr-2 text-gold"></i> <span class="font-medium">Venue:</span> Haqqani Masjid, Govandi, Mumbai</p>
|
| 319 |
+
<p class="arabic-text mt-4 text-right">وَأَنكِحُوا الْأَيَامَىٰ مِنكُمْ وَالصَّالِحِينَ مِنْ عِبَادِكُمْ وَإِمَائِكُمْ</p>
|
| 320 |
+
<p class="text-sm text-gray-500">"And marry the unmarried among you and the righteous among your male slaves and female slaves." (Quran 24:32)</p>
|
| 321 |
+
</div>
|
| 322 |
+
<div class="mt-4 flex space-x-2">
|
| 323 |
+
<button class="bg-gold text-white px-4 py-2 rounded-full flex items-center hover:bg-gold/90 transition">
|
| 324 |
+
<i data-feather="map" class="mr-2"></i> View Map
|
| 325 |
+
</button>
|
| 326 |
+
<button class="border border-gold text-gold px-4 py-2 rounded-full flex items-center hover:bg-gold/10 transition">
|
| 327 |
+
<i data-feather="calendar" class="mr-2"></i> Add to Calendar
|
| 328 |
+
</button>
|
| 329 |
+
</div>
|
| 330 |
+
</div>
|
| 331 |
+
|
| 332 |
+
<!-- Walimah -->
|
| 333 |
+
<div class="bg-gray-50 p-6 rounded-xl card-hover">
|
| 334 |
+
<div class="flex items-center mb-4">
|
| 335 |
+
<div class="bg-gold text-white p-3 rounded-full mr-4">
|
| 336 |
+
<i data-feather="feather"></i>
|
| 337 |
+
</div>
|
| 338 |
+
<h3 class="text-2xl font-bold text-gold">Walimah Reception</h3>
|
| 339 |
+
</div>
|
| 340 |
+
<div class="space-y-2">
|
| 341 |
+
<p class="flex items-center"><i data-feather="calendar" class="mr-2 text-gold"></i> <span class="font-medium">Date:</span> 18th May 2026</p>
|
| 342 |
+
<p class="flex items-center"><i data-feather="clock" class="mr-2 text-gold"></i> <span class="font-medium">Time:</span> 7:00 PM - 12:00 Midnight</p>
|
| 343 |
+
<p class="flex items-center"><i data-feather="map-pin" class="mr-2 text-gold"></i> <span class="font-medium">Venue:</span> Govandi Karbala Hall, Mumbai</p>
|
| 344 |
+
<p class="arabic-text mt-4 text-right">كُلُوا وَاشْرَبُوا هَنِيئًا بِمَا أَسْلَفْتُمْ فِي الْأَيَّامِ الْخَالِيَةِ</p>
|
| 345 |
+
<p class="text-sm text-gray-500">"Eat and drink in satisfaction for what you put forth in the days past." (Quran 69:24)</p>
|
| 346 |
+
</div>
|
| 347 |
+
<div class="mt-4 flex space-x-2">
|
| 348 |
+
<button class="bg-gold text-white px-4 py-2 rounded-full flex items-center hover:bg-gold/90 transition">
|
| 349 |
+
<i data-feather="map" class="mr-2"></i> View Map
|
| 350 |
+
</button>
|
| 351 |
+
<button class="border border-gold text-gold px-4 py-2 rounded-full flex items-center hover:bg-gold/10 transition">
|
| 352 |
+
<i data-feather="calendar" class="mr-2"></i> Add to Calendar
|
| 353 |
+
</button>
|
| 354 |
+
</div>
|
| 355 |
+
</div>
|
| 356 |
+
</div>
|
| 357 |
+
</div>
|
| 358 |
+
</section>
|
| 359 |
+
|
| 360 |
+
<!-- Our Story Section -->
|
| 361 |
+
<section class="mb-16" data-aos="fade-up">
|
| 362 |
+
<div class="bg-white p-8 rounded-2xl shadow-lg">
|
| 363 |
+
<h2 class="text-3xl font-bold text-center text-gold mb-8">Our Story</h2>
|
| 364 |
+
|
| 365 |
+
<div class="relative">
|
| 366 |
+
<!-- Timeline -->
|
| 367 |
+
<div class="space-y-8 pl-8 border-l-2 border-gold/30">
|
| 368 |
+
<!-- Timeline Item 1 -->
|
| 369 |
+
<div class="relative timeline-item pl-8">
|
| 370 |
+
<div class="bg-gray-50 p-6 rounded-xl">
|
| 371 |
+
<div class="flex items-center mb-2">
|
| 372 |
+
<div class="bg-gold text-white p-2 rounded-full mr-3">
|
| 373 |
+
<i data-feather="heart"></i>
|
| 374 |
+
</div>
|
| 375 |
+
<h3 class="text-xl font-bold text-gold">The Meeting</h3>
|
| 376 |
+
</div>
|
| 377 |
+
<p class="text-gray-700">Yaseen and Noor first met in an online game. What started as a casual team-up turned into regular gaming sessions and late-night conversations.</p>
|
| 378 |
+
<p class="text-sm text-gray-500 mt-2">Spring 2023</p>
|
| 379 |
+
</div>
|
| 380 |
+
</div>
|
| 381 |
+
|
| 382 |
+
<!-- Timeline Item 2 -->
|
| 383 |
+
<div class="relative timeline-item pl-8">
|
| 384 |
+
<div class="bg-gray-50 p-6 rounded-xl">
|
| 385 |
+
<div class="flex items-center mb-2">
|
| 386 |
+
<div class="bg-gold text-white p-2 rounded-full mr-3">
|
| 387 |
+
<i data-feather="message-square"></i>
|
| 388 |
+
</div>
|
| 389 |
+
<h3 class="text-xl font-bold text-gold">Bonding Over Faith</h3>
|
| 390 |
+
</div>
|
| 391 |
+
<p class="text-gray-700">They discovered their shared love for Islam and began discussing Quranic verses, Islamic history, and their dreams for a faithful family.</p>
|
| 392 |
+
<p class="text-sm text-gray-500 mt-2">Summer 2023</p>
|
| 393 |
+
</div>
|
| 394 |
+
</div>
|
| 395 |
+
|
| 396 |
+
<!-- Timeline Item 3 -->
|
| 397 |
+
<div class="relative timeline-item pl-8">
|
| 398 |
+
<div class="bg-gray-50 p-6 rounded-xl">
|
| 399 |
+
<div class="flex items-center mb-2">
|
| 400 |
+
<div class="bg-gold text-white p-2 rounded-full mr-3">
|
| 401 |
+
<i data-feather="users"></i>
|
| 402 |
+
</div>
|
| 403 |
+
<h3 class="text-xl font-bold text-gold">Family Introductions</h3>
|
| 404 |
+
</div>
|
| 405 |
+
<p class="text-gray-700">After months of getting to know each other, they introduced their families. Both families approved and supported their relationship.</p>
|
| 406 |
+
<p class="text-sm text-gray-500 mt-2">Winter 2023</p>
|
| 407 |
+
</div>
|
| 408 |
+
</div>
|
| 409 |
+
|
| 410 |
+
<!-- Timeline Item 4 -->
|
| 411 |
+
<div class="relative timeline-item pl-8">
|
| 412 |
+
<div class="bg-gray-50 p-6 rounded-xl">
|
| 413 |
+
<div class="flex items-center mb-2">
|
| 414 |
+
<div class="bg-gold text-white p-2 rounded-full mr-3">
|
| 415 |
+
<i data-feather="ring"></i>
|
| 416 |
+
</div>
|
| 417 |
+
<h3 class="text-xl font-bold text-gold">The Proposal</h3>
|
| 418 |
+
</div>
|
| 419 |
+
<p class="text-gray-700">Yaseen proposed to Noor during a family gathering, with both sets of parents present, following Islamic traditions.</p>
|
| 420 |
+
<p class="text-sm text-gray-500 mt-2">Spring 2024</p>
|
| 421 |
+
</div>
|
| 422 |
+
</div>
|
| 423 |
+
</div>
|
| 424 |
+
</div>
|
| 425 |
+
|
| 426 |
+
<!-- Photo Gallery -->
|
| 427 |
+
<div class="mt-12">
|
| 428 |
+
<h3 class="text-2xl font-bold text-center text-gold mb-6">Our Journey</h3>
|
| 429 |
+
<div class="grid grid-cols-2 md:grid-cols-4 gap-4">
|
| 430 |
+
<div class="rounded-xl overflow-hidden h-40 bg-gray-200">
|
| 431 |
+
<img src="https://images.unsplash.com/photo-1529626455594-4ff0802cfb7e?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=774&q=80" alt="Couple" class="w-full h-full object-cover">
|
| 432 |
+
</div>
|
| 433 |
+
<div class="rounded-xl overflow-hidden h-40 bg-gray-200">
|
| 434 |
+
<img src="https://images.unsplash.com/photo-1524504388940-b1c1722653e1?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=774&q=80" alt="Couple" class="w-full h-full object-cover">
|
| 435 |
+
</div>
|
| 436 |
+
<div class="rounded-xl overflow-hidden h-40 bg-gray-200">
|
| 437 |
+
<img src="https://images.unsplash.com/photo-1531427186611-ecfd6d936c79?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=774&q=80" alt="Couple" class="w-full h-full object-cover">
|
| 438 |
+
</div>
|
| 439 |
+
<div class="rounded-xl overflow-hidden h-40 bg-gray-200">
|
| 440 |
+
<img src="https://images.unsplash.com/photo-1516589178581-6cd7833ae3b2?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=774&q=80" alt="Couple" class="w-full h-full object-cover">
|
| 441 |
+
</div>
|
| 442 |
+
</div>
|
| 443 |
+
</div>
|
| 444 |
+
</div>
|
| 445 |
+
</section>
|
| 446 |
+
|
| 447 |
+
<!-- RSVP Section -->
|
| 448 |
+
<section class="mb-16" data-aos="fade-up">
|
| 449 |
+
<div class="bg-white p-8 rounded-2xl shadow-lg">
|
| 450 |
+
<h2 class="text-3xl font-bold text-center text-gold mb-8">RSVP</h2>
|
| 451 |
+
|
| 452 |
+
<form id="rsvp-form" class="max-w-lg mx-auto">
|
| 453 |
+
<div class="mb-6">
|
| 454 |
+
<label for="name" class="block text-gray-700 mb-2">Your Name</label>
|
| 455 |
+
<input type="text" id="name" class="w-full px-4 py-2 rsvp-input focus:outline-none" required>
|
| 456 |
+
</div>
|
| 457 |
+
|
| 458 |
+
<div class="mb-6">
|
| 459 |
+
<label for="email" class="block text-gray-700 mb-2">Email Address</label>
|
| 460 |
+
<input type="email" id="email" class="w-full px-4 py-2 rsvp-input focus:outline-none" required>
|
| 461 |
+
</div>
|
| 462 |
+
|
| 463 |
+
<div class="mb-6">
|
| 464 |
+
<label for="phone" class="block text-gray-700 mb-2">Phone Number</label>
|
| 465 |
+
<input type="tel" id="phone" class="w-full px-4 py-2 rsvp-input focus:outline-none" required>
|
| 466 |
+
</div>
|
| 467 |
+
|
| 468 |
+
<div class="mb-6">
|
| 469 |
+
<label class="block text-gray-700 mb-2">Which events will you attend?</label>
|
| 470 |
+
<div class="space-y-2">
|
| 471 |
+
<label class="flex items-center">
|
| 472 |
+
<input type="checkbox" name="events" value="nikah" class="mr-2">
|
| 473 |
+
<span>Nikah Ceremony (15th May)</span>
|
| 474 |
+
</label>
|
| 475 |
+
<label class="flex items-center">
|
| 476 |
+
<input type="checkbox" name="events" value="walimah" class="mr-2">
|
| 477 |
+
<span>Walimah Reception (18th May)</span>
|
| 478 |
+
</label>
|
| 479 |
+
</div>
|
| 480 |
+
</div>
|
| 481 |
+
|
| 482 |
+
<div class="mb-6">
|
| 483 |
+
<label for="guests" class="block text-gray-700 mb-2">Number of Guests</label>
|
| 484 |
+
<select id="guests" class="w-full px-4 py-2 rsvp-input focus:outline-none">
|
| 485 |
+
<option value="1">1 (Just me)</option>
|
| 486 |
+
<option value="2">2</option>
|
| 487 |
+
<option value="3">3</option>
|
| 488 |
+
<option value="4">4</option>
|
| 489 |
+
<option value="5">5+</option>
|
| 490 |
+
</select>
|
| 491 |
+
</div>
|
| 492 |
+
|
| 493 |
+
<div class="mb-6">
|
| 494 |
+
<label for="message" class="block text-gray-700 mb-2">Message for the Couple</label>
|
| 495 |
+
<textarea id="message" rows="3" class="w-full px-4 py-2 rsvp-input focus:outline-none"></textarea>
|
| 496 |
+
</div>
|
| 497 |
+
|
| 498 |
+
<button type="submit" class="w-full bg-gold text-white py-3 rounded-full font-bold hover:bg-gold/90 transition">
|
| 499 |
+
Submit RSVP
|
| 500 |
+
</button>
|
| 501 |
+
</form>
|
| 502 |
+
</div>
|
| 503 |
+
</section>
|
| 504 |
+
|
| 505 |
+
<!-- Guestbook Section -->
|
| 506 |
+
<section class="mb-16" data-aos="fade-up">
|
| 507 |
+
<div class="bg-white p-8 rounded-2xl shadow-lg">
|
| 508 |
+
<h2 class="text-3xl font-bold text-center text-gold mb-8">Guestbook</h2>
|
| 509 |
+
|
| 510 |
+
<div id="guestbook-messages" class="space-y-4 max-h-96 overflow-y-auto custom-scrollbar p-2">
|
| 511 |
+
<!-- Messages will be loaded here -->
|
| 512 |
+
</div>
|
| 513 |
+
|
| 514 |
+
<div class="mt-8">
|
| 515 |
+
<h3 class="text-xl font-bold text-gold mb-4">Leave a Message</h3>
|
| 516 |
+
<form id="guestbook-form" class="flex">
|
| 517 |
+
<input type="text" id="guestbook-input" placeholder="Write your message..." class="flex-grow px-4 py-2 rsvp-input focus:outline-none">
|
| 518 |
+
<button type="submit" class="ml-2 bg-gold text-white px-6 py-2 rounded-full hover:bg-gold/90 transition">
|
| 519 |
+
<i data-feather="send"></i>
|
| 520 |
+
</button>
|
| 521 |
+
</form>
|
| 522 |
+
</div>
|
| 523 |
+
</div>
|
| 524 |
+
</section>
|
| 525 |
+
|
| 526 |
+
<!-- Prayer Times Section -->
|
| 527 |
+
<section class="mb-16" data-aos="fade-up">
|
| 528 |
+
<div class="bg-white p-8 rounded-2xl shadow-lg">
|
| 529 |
+
<h2 class="text-3xl font-bold text-center text-gold mb-8">Prayer Times for Event Days</h2>
|
| 530 |
+
|
| 531 |
+
<div class="grid md:grid-cols-2 gap-8">
|
| 532 |
+
<!-- Nikah Day Prayer Times -->
|
| 533 |
+
<div class="bg-gray-50 p-6 rounded-xl">
|
| 534 |
+
<h3 class="text-xl font-bold text-gold mb-4">15th May 2026 - Nikah Day</h3>
|
| 535 |
+
<div class="space-y-3">
|
| 536 |
+
<div class="flex justify-between items-center border-b pb-2">
|
| 537 |
+
<span class="font-medium">Fajr</span>
|
| 538 |
+
<span>5:12 AM</span>
|
| 539 |
+
</div>
|
| 540 |
+
<div class="flex justify-between items-center border-b pb-2">
|
| 541 |
+
<span class="font-medium">Dhuhr</span>
|
| 542 |
+
<span>12:30 PM</span>
|
| 543 |
+
</div>
|
| 544 |
+
<div class="flex justify-between items-center border-b pb-2">
|
| 545 |
+
<span class="font-medium">Asr</span>
|
| 546 |
+
<span>3:45 PM</span>
|
| 547 |
+
</div>
|
| 548 |
+
<div class="flex justify-between items-center border-b pb-2">
|
| 549 |
+
<span class="font-medium">Maghrib</span>
|
| 550 |
+
<span>6:58 PM</span>
|
| 551 |
+
</div>
|
| 552 |
+
<div class="flex justify-between items-center">
|
| 553 |
+
<span class="font-medium">Isha</span>
|
| 554 |
+
<span>8:15 PM</span>
|
| 555 |
+
</div>
|
| 556 |
+
</div>
|
| 557 |
+
</div>
|
| 558 |
+
|
| 559 |
+
<!-- Walimah Day Prayer Times -->
|
| 560 |
+
<div class="bg-gray-50 p-6 rounded-xl">
|
| 561 |
+
<h3 class="text-xl font-bold text-gold mb-4">18th May 2026 - Walimah Day</h3>
|
| 562 |
+
<div class="space-y-3">
|
| 563 |
+
<div class="flex justify-between items-center border-b pb-2">
|
| 564 |
+
<span class="font-medium">Fajr</span>
|
| 565 |
+
<span>5:10 AM</span>
|
| 566 |
+
</div>
|
| 567 |
+
<div class="flex justify-between items-center border-b pb-2">
|
| 568 |
+
<span class="font-medium">Dhuhr</span>
|
| 569 |
+
<span>12:30 PM</span>
|
| 570 |
+
</div>
|
| 571 |
+
<div class="flex justify-between items-center border-b pb-2">
|
| 572 |
+
<span class="font-medium">Asr</span>
|
| 573 |
+
<span>3:45 PM</span>
|
| 574 |
+
</div>
|
| 575 |
+
<div class="flex justify-between items-center border-b pb-2">
|
| 576 |
+
<span class="font-medium">Maghrib</span>
|
| 577 |
+
<span>6:59 PM</span>
|
| 578 |
+
</div>
|
| 579 |
+
<div class="flex justify-between items-center">
|
| 580 |
+
<span class="font-medium">Isha</span>
|
| 581 |
+
<span>8:16 PM</span>
|
| 582 |
+
</div>
|
| 583 |
+
</div>
|
| 584 |
+
</div>
|
| 585 |
+
</div>
|
| 586 |
+
</div>
|
| 587 |
+
</section>
|
| 588 |
+
|
| 589 |
+
<!-- Final Blessing -->
|
| 590 |
+
<section class="mb-16" data-aos="fade-up">
|
| 591 |
+
<div class="bg-white p-8 rounded-2xl shadow-lg text-center">
|
| 592 |
+
<h2 class="text-3xl font-bold text-gold mb-4">بارك الله لكما وبارك عليكما وجمع بينكما في خير</h2>
|
| 593 |
+
<p class="text-lg text-gray-700 mb-6">"May Allah bless you and shower His blessings upon you and unite you in goodness."</p>
|
| 594 |
+
<p class="text-gray-600">We look forward to celebrating this blessed occasion with you</p>
|
| 595 |
+
<div class="mt-6 flex justify-center space-x-4">
|
| 596 |
+
<button id="print-btn" class="bg-gold text-white px-6 py-2 rounded-full flex items-center hover:bg-gold/90 transition">
|
| 597 |
+
<i data-feather="printer" class="mr-2"></i> Print Invitation
|
| 598 |
+
</button>
|
| 599 |
+
<button id="share-btn" class="border border-gold text-gold px-6 py-2 rounded-full flex items-center hover:bg-gold/10 transition">
|
| 600 |
+
<i data-feather="share-2" class="mr-2"></i> Share
|
| 601 |
+
</button>
|
| 602 |
+
</div>
|
| 603 |
+
</div>
|
| 604 |
+
</section>
|
| 605 |
+
|
| 606 |
+
<!-- Footer -->
|
| 607 |
+
<footer class="text-center py-8 text-gray-600">
|
| 608 |
+
<p>With love, Yaseen Shaikh (Son of Alauddin Shaikh) & Noor Fatima (Daughter of Obaida Shaikh)</p>
|
| 609 |
+
<p class="mt-2 text-sm">© 2026 All Rights Reserved</p>
|
| 610 |
+
</footer>
|
| 611 |
+
</div>
|
| 612 |
+
|
| 613 |
+
<!-- Music Player -->
|
| 614 |
+
<div class="fixed bottom-4 right-4">
|
| 615 |
+
<button id="music-toggle" class="music-toggle bg-gold text-white p-4 rounded-full shadow-lg hover:shadow-xl">
|
| 616 |
+
<i data-feather="music"></i>
|
| 617 |
+
</button>
|
| 618 |
+
<audio id="background-music" loop>
|
| 619 |
+
<source src="https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3" type="audio/mpeg">
|
| 620 |
+
</audio>
|
| 621 |
+
</div>
|
| 622 |
+
|
| 623 |
+
<!-- Map Modal -->
|
| 624 |
+
<div id="map-modal" class="fixed inset-0 z-50 flex items-center justify-center modal-overlay hidden">
|
| 625 |
+
<div class="modal-content bg-white rounded-2xl shadow-xl w-full max-w-4xl mx-4">
|
| 626 |
+
<div class="p-4 border-b flex justify-between items-center">
|
| 627 |
+
<h3 class="text-xl font-bold text-gold">Event Location</h3>
|
| 628 |
+
<button id="close-map" class="text-gray-500 hover:text-gray-700">
|
| 629 |
+
<i data-feather="x"></i>
|
| 630 |
+
</button>
|
| 631 |
+
</div>
|
| 632 |
+
<div class="map-container">
|
| 633 |
+
<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3770.981097839318!2d72.9961883153774!3d19.06272238709736!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x3be7c1d1d7d4d0a1%3A0x9b9c9c9c9c9c9c9c!2sHaqqani%20Masjid%2C%20Govandi%2C%20Mumbai!5e0!3m2!1sen!2sin!4v1620000000000!5m2!1sen!2sin" allowfullscreen="" loading="lazy"></iframe>
|
| 634 |
+
</div>
|
| 635 |
+
</div>
|
| 636 |
+
</div>
|
| 637 |
+
|
| 638 |
+
<!-- RSVP Success Modal -->
|
| 639 |
+
<div id="rsvp-success" class="fixed inset-0 z-50 flex items-center justify-center modal-overlay hidden">
|
| 640 |
+
<div class="modal-content bg-white p-8 rounded-2xl shadow-xl max-w-md text-center">
|
| 641 |
+
<div class="text-6xl text-gold mb-4">🎉</div>
|
| 642 |
+
<h3 class="text-2xl font-bold text-gold mb-2">Thank You!</h3>
|
| 643 |
+
<p class="text-gray-700 mb-6">Your RSVP has been received. We look forward to celebrating with you!</p>
|
| 644 |
+
<button id="close-rsvp-success" class="bg-gold text-white px-6 py-2 rounded-full hover:bg-gold/90 transition">
|
| 645 |
+
Close
|
| 646 |
+
</button>
|
| 647 |
+
</div>
|
| 648 |
+
</div>
|
| 649 |
+
|
| 650 |
+
<!-- Confetti Canvas -->
|
| 651 |
+
<canvas id="confetti-canvas" class="fixed top-0 left-0 w-full h-full pointer-events-none z-40" style="display: none;"></canvas>
|
| 652 |
+
|
| 653 |
+
<script>
|
| 654 |
+
// Initialize AOS animation
|
| 655 |
+
AOS.init({
|
| 656 |
+
duration: 800,
|
| 657 |
+
easing: 'ease-in-out',
|
| 658 |
+
once: true
|
| 659 |
+
});
|
| 660 |
+
|
| 661 |
+
// Initialize Feather Icons
|
| 662 |
+
feather.replace();
|
| 663 |
+
|
| 664 |
+
// Loading Screen Animation
|
| 665 |
+
window.addEventListener('load', function() {
|
| 666 |
+
// Simulate loading progress
|
| 667 |
+
let progress = 0;
|
| 668 |
+
const loadingInterval = setInterval(() => {
|
| 669 |
+
progress += Math.random() * 10;
|
| 670 |
+
if (progress >= 100) {
|
| 671 |
+
progress = 100;
|
| 672 |
+
clearInterval(loadingInterval);
|
| 673 |
+
|
| 674 |
+
document.getElementById('loading-bar').style.width = '100%';
|
| 675 |
+
|
| 676 |
+
setTimeout(() => {
|
| 677 |
+
document.getElementById('loading-screen').style.opacity = '0';
|
| 678 |
+
setTimeout(() => {
|
| 679 |
+
document.getElementById('loading-screen').style.display = 'none';
|
| 680 |
+
|
| 681 |
+
// Trigger confetti after loading
|
| 682 |
+
triggerConfetti();
|
| 683 |
+
}, 1000);
|
| 684 |
+
}, 300);
|
| 685 |
+
} else {
|
| 686 |
+
document.getElementById('loading-bar').style.width = progress + '%';
|
| 687 |
+
}
|
| 688 |
+
}, 100);
|
| 689 |
+
});
|
| 690 |
+
|
| 691 |
+
// Countdown Timer
|
| 692 |
+
function updateCountdown() {
|
| 693 |
+
const now = new Date();
|
| 694 |
+
const nikahDate = new Date('May 15, 2026 15:00:00');
|
| 695 |
+
const timeLeft = nikahDate - now;
|
| 696 |
+
|
| 697 |
+
if (timeLeft <= 0) {
|
| 698 |
+
document.getElementById('countdown-days').textContent = '00';
|
| 699 |
+
document.getElementById('countdown-hours').textContent = '00';
|
| 700 |
+
document.getElementById('countdown-minutes').textContent = '00';
|
| 701 |
+
document.getElementById('countdown-seconds').textContent = '00';
|
| 702 |
+
return;
|
| 703 |
+
}
|
| 704 |
+
|
| 705 |
+
const days = Math.floor(timeLeft / (1000 * 60 * 60 * 24));
|
| 706 |
+
const hours = Math.floor((timeLeft % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
|
| 707 |
+
const minutes = Math.floor((timeLeft % (1000 * 60 * 60)) / (1000 * 60));
|
| 708 |
+
const seconds = Math.floor((timeLeft % (1000 * 60)) / 1000);
|
| 709 |
+
|
| 710 |
+
document.getElementById('countdown-days').textContent = days.toString().padStart(2, '0');
|
| 711 |
+
document.getElementById('countdown-hours').textContent = hours.toString().padStart(2, '0');
|
| 712 |
+
document.getElementById('countdown-minutes').textContent = minutes.toString().padStart(2, '0');
|
| 713 |
+
document.getElementById('countdown-seconds').textContent = seconds.toString().padStart(2, '0');
|
| 714 |
+
|
| 715 |
+
// Update progress bar
|
| 716 |
+
const totalDays = Math.ceil((nikahDate - new Date('January 1, 2026')) / (1000 * 60 * 60 * 24));
|
| 717 |
+
const daysPassed = totalDays - days;
|
| 718 |
+
const progressPercentage = (daysPassed / totalDays) * 100;
|
| 719 |
+
document.getElementById('progress-bar').style.width = Math.min(progressPercentage, 100) + '%';
|
| 720 |
+
}
|
| 721 |
+
|
| 722 |
+
setInterval(updateCountdown, 1000);
|
| 723 |
+
updateCountdown();
|
| 724 |
+
|
| 725 |
+
// Theme Switcher
|
| 726 |
+
const themeSelectors = document.querySelectorAll('.theme-selector');
|
| 727 |
+
|
| 728 |
+
themeSelectors.forEach(selector => {
|
| 729 |
+
selector.addEventListener('click', function() {
|
| 730 |
+
const theme = this.getAttribute('data-theme');
|
| 731 |
+
|
| 732 |
+
// Remove active class from all selectors
|
| 733 |
+
themeSelectors.forEach(el => el.classList.remove('active-theme'));
|
| 734 |
+
|
| 735 |
+
// Add active class to clicked selector
|
| 736 |
+
this.classList.add('active-theme');
|
| 737 |
+
|
| 738 |
+
// Apply theme to body
|
| 739 |
+
document.body.className = '';
|
| 740 |
+
document.body.classList.add(theme);
|
| 741 |
+
});
|
| 742 |
+
});
|
| 743 |
+
|
| 744 |
+
// Floating Elements Animation
|
| 745 |
+
function createFloatingElements() {
|
| 746 |
+
const container = document.getElementById('floating-elements');
|
| 747 |
+
const types = ['🌸', '🌙', '✨', '🕌', '📿'];
|
| 748 |
+
|
| 749 |
+
for (let i = 0; i < 20; i++) {
|
| 750 |
+
const element = document.createElement('div');
|
| 751 |
+
element.className = 'petal';
|
| 752 |
+
element.innerHTML = types[Math.floor(Math.random() * types.length)];
|
| 753 |
+
element.style.left = Math.random() * 100 + 'vw';
|
| 754 |
+
element.style.animationDuration = Math.random() * 5 + 5 + 's';
|
| 755 |
+
element.style.animationDelay = Math.random() * 5 + 's';
|
| 756 |
+
element.style.fontSize = Math.random() * 20 + 10 + 'px';
|
| 757 |
+
container.appendChild(element);
|
| 758 |
+
}
|
| 759 |
+
}
|
| 760 |
+
|
| 761 |
+
createFloatingElements();
|
| 762 |
+
|
| 763 |
+
// Music Toggle
|
| 764 |
+
const musicToggle = document.getElementById('music-toggle');
|
| 765 |
+
const backgroundMusic = document.getElementById('background-music');
|
| 766 |
+
let isMusicPlaying = false;
|
| 767 |
+
|
| 768 |
+
musicToggle.addEventListener('click', function() {
|
| 769 |
+
if (isMusicPlaying) {
|
| 770 |
+
backgroundMusic.pause();
|
| 771 |
+
musicToggle.innerHTML = '<i data-feather="music"></i>';
|
| 772 |
+
feather.replace();
|
| 773 |
+
} else {
|
| 774 |
+
backgroundMusic.play();
|
| 775 |
+
musicToggle.innerHTML = '<i data-feather="pause"></i>';
|
| 776 |
+
feather.replace();
|
| 777 |
+
}
|
| 778 |
+
isMusicPlaying = !isMusicPlaying;
|
| 779 |
+
});
|
| 780 |
+
|
| 781 |
+
// Map Modal
|
| 782 |
+
const mapButtons = document.querySelectorAll('[id^="view-map"], [id^="add-to-calendar"]');
|
| 783 |
+
const mapModal = document.getElementById('map-modal');
|
| 784 |
+
const closeMap = document.getElementById('close-map');
|
| 785 |
+
|
| 786 |
+
mapButtons.forEach(button => {
|
| 787 |
+
button.addEventListener('click', function() {
|
| 788 |
+
if (this.id.includes('map')) {
|
| 789 |
+
mapModal.classList.remove('hidden');
|
| 790 |
+
}
|
| 791 |
+
});
|
| 792 |
+
});
|
| 793 |
+
|
| 794 |
+
closeMap.addEventListener('click', function() {
|
| 795 |
+
mapModal.classList.add('hidden');
|
| 796 |
+
});
|
| 797 |
+
|
| 798 |
+
// RSVP Form
|
| 799 |
+
const rsvpForm = document.getElementById('rsvp-form');
|
| 800 |
+
const rsvpSuccessModal = document.getElementById('rsvp-success');
|
| 801 |
+
const closeRsvpSuccess = document.getElementById('close-rsvp-success');
|
| 802 |
+
|
| 803 |
+
rsvpForm.addEventListener('submit', function(e) {
|
| 804 |
+
e.preventDefault();
|
| 805 |
+
|
| 806 |
+
// In a real app, you would send this data to a server
|
| 807 |
+
// For now, we'll just show the success modal
|
| 808 |
+
rsvpSuccessModal.classList.remove('hidden');
|
| 809 |
+
triggerConfetti();
|
| 810 |
+
});
|
| 811 |
+
|
| 812 |
+
closeRsvpSuccess.addEventListener('click', function() {
|
| 813 |
+
rsvpSuccessModal.classList.add('hidden');
|
| 814 |
+
});
|
| 815 |
+
|
| 816 |
+
// Guestbook
|
| 817 |
+
const guestbookForm = document.getElementById('guestbook-form');
|
| 818 |
+
const guestbookInput = document.getElementById('guestbook-input');
|
| 819 |
+
const guestbookMessages = document.getElementById('guestbook-messages');
|
| 820 |
+
|
| 821 |
+
// Load messages from localStorage
|
| 822 |
+
function loadGuestbookMessages() {
|
| 823 |
+
const messages = JSON.parse(localStorage.getItem('guestbookMessages')) || [];
|
| 824 |
+
|
| 825 |
+
guestbookMessages.innerHTML = '';
|
| 826 |
+
|
| 827 |
+
messages.forEach(message => {
|
| 828 |
+
const messageElement = document.createElement('div');
|
| 829 |
+
messageElement.className = 'guestbook-message bg-gray-50 p-4 rounded-lg';
|
| 830 |
+
messageElement.innerHTML = `
|
| 831 |
+
<p class="font-medium">${message.name}</p>
|
| 832 |
+
<p class="text-gray-700 mt-1">${message.text}</p>
|
| 833 |
+
<p class="text-xs text-gray-500 mt-2">${message.date}</p>
|
| 834 |
+
`;
|
| 835 |
+
guestbookMessages.appendChild(messageElement);
|
| 836 |
+
});
|
| 837 |
+
}
|
| 838 |
+
|
| 839 |
+
guestbookForm.addEventListener('submit', function(e) {
|
| 840 |
+
e.preventDefault();
|
| 841 |
+
|
| 842 |
+
const messageText = guestbookInput.value.trim();
|
| 843 |
+
if (!messageText) return;
|
| 844 |
+
|
| 845 |
+
// Get existing messages
|
| 846 |
+
const messages = JSON.parse(localStorage.getItem('guestbookMessages')) || [];
|
| 847 |
+
|
| 848 |
+
// Add new message
|
| 849 |
+
messages.push({
|
| 850 |
+
name: 'Guest',
|
| 851 |
+
text: messageText,
|
| 852 |
+
date: new Date().toLocaleDateString()
|
| 853 |
+
});
|
| 854 |
+
|
| 855 |
+
// Save to localStorage
|
| 856 |
+
localStorage.setItem('guestbookMessages', JSON.stringify(messages));
|
| 857 |
+
|
| 858 |
+
// Reload messages
|
| 859 |
+
loadGuestbookMessages();
|
| 860 |
+
|
| 861 |
+
// Clear input
|
| 862 |
+
guestbookInput.value = '';
|
| 863 |
+
});
|
| 864 |
+
|
| 865 |
+
loadGuestbookMessages();
|
| 866 |
+
|
| 867 |
+
// Print Button
|
| 868 |
+
const printButton = document.getElementById('print-btn');
|
| 869 |
+
|
| 870 |
+
printButton.addEventListener('click', function() {
|
| 871 |
+
window.print();
|
| 872 |
+
});
|
| 873 |
+
|
| 874 |
+
// Share Button
|
| 875 |
+
const shareButton = document.getElementById('share-btn');
|
| 876 |
+
|
| 877 |
+
shareButton.addEventListener('click', function() {
|
| 878 |
+
if (navigator.share) {
|
| 879 |
+
navigator.share({
|
| 880 |
+
title: 'Yaseen & Noor Wedding Invitation',
|
| 881 |
+
text: 'Join us in celebrating the union of Yaseen Shaikh and Noor Fatima',
|
| 882 |
+
url: window.location.href
|
| 883 |
+
}).catch(err => {
|
| 884 |
+
console.log('Error sharing:', err);
|
| 885 |
+
});
|
| 886 |
+
} else {
|
| 887 |
+
// Fallback for browsers that don't support Web Share API
|
| 888 |
+
alert('Web Share API not supported in your browser. Please copy the URL manually.');
|
| 889 |
+
}
|
| 890 |
+
});
|
| 891 |
+
|
| 892 |
+
// Confetti Effect
|
| 893 |
+
function triggerConfetti() {
|
| 894 |
+
const canvas = document.getElementById('confetti-canvas');
|
| 895 |
+
canvas.style.display = 'block';
|
| 896 |
+
|
| 897 |
+
// Confetti settings
|
| 898 |
+
const confettiSettings = {
|
| 899 |
+
target: 'confetti-canvas',
|
| 900 |
+
max: 150,
|
| 901 |
+
size: 1.5,
|
| 902 |
+
animate: true,
|
| 903 |
+
props: ['circle', 'square', 'triangle', 'line'],
|
| 904 |
+
colors: [[255, 215, 0], [192, 192, 192], [255, 255, 255], [218, 165, 32]],
|
| 905 |
+
clock: 50,
|
| 906 |
+
rotate: true,
|
| 907 |
+
start_from_edge: true,
|
| 908 |
+
respawn: false
|
| 909 |
+
};
|
| 910 |
+
|
| 911 |
+
const confetti = new ConfettiGenerator(confettiSettings);
|
| 912 |
+
confetti.render();
|
| 913 |
+
|
| 914 |
+
setTimeout(() => {
|
| 915 |
+
confetti.clear();
|
| 916 |
+
canvas.style.display = 'none';
|
| 917 |
+
}, 3000);
|
| 918 |
+
}
|
| 919 |
+
|
| 920 |
+
// Easter Egg - Click on lanterns to light them
|
| 921 |
+
const lanterns = document.querySelectorAll('.lantern');
|
| 922 |
+
|
| 923 |
+
lanterns.forEach(lantern => {
|
| 924 |
+
lantern.addEventListener('click', function() {
|
| 925 |
+
if (this.textContent === '🏮') {
|
| 926 |
+
this.textContent = '🪔';
|
| 927 |
+
this.style.filter = 'drop-shadow(0 0 15px rgba(255, 100, 0, 0.9))';
|
| 928 |
+
} else {
|
| 929 |
+
this.textContent = '🏮';
|
| 930 |
+
this.style.filter = 'drop-shadow(0 0 10px rgba(212, 175, 55, 0.9))';
|
| 931 |
+
}
|
| 932 |
+
});
|
| 933 |
+
});
|
| 934 |
+
|
| 935 |
+
// 3D Tilt Effect
|
| 936 |
+
const cards = document.querySelectorAll('.card-hover');
|
| 937 |
+
|
| 938 |
+
cards.forEach(card => {
|
| 939 |
+
card.addEventListener('mousemove', (e) => {
|
| 940 |
+
const xAxis = (window.innerWidth / 2 - e.pageX) / 25;
|
| 941 |
+
const yAxis = (window.innerHeight / 2 - e.pageY) / 25;
|
| 942 |
+
card.style.transform = `rotateY(${xAxis}deg) rotateX(${yAxis}deg)`;
|
| 943 |
+
});
|
| 944 |
+
|
| 945 |
+
card.addEventListener('mouseenter', () => {
|
| 946 |
+
card.style.transition = 'none';
|
| 947 |
+
});
|
| 948 |
+
|
| 949 |
+
card.addEventListener('mouseleave', () => {
|
| 950 |
+
card.style.transition = 'all 0.5s ease';
|
| 951 |
+
card.style.transform = 'rotateY(0deg) rotateX(0deg)';
|
| 952 |
+
});
|
| 953 |
+
});
|
| 954 |
+
</script>
|
| 955 |
+
|
| 956 |
+
<!-- Confetti JS -->
|
| 957 |
+
<script src="https://cdn.jsdelivr.net/npm/confetti-js@0.0.18/dist/index.min.js"></script>
|
| 958 |
+
|
| 959 |
+
<!-- Initialize everything when DOM is loaded -->
|
| 960 |
+
<script>
|
| 961 |
+
document.addEventListener('DOMContentLoaded', function() {
|
| 962 |
+
// All initialization is already in the script above
|
| 963 |
+
});
|
| 964 |
+
</script>
|
| 965 |
+
</body>
|
| 966 |
</html>
|