diff --git a/addons/event_rental/controllers/__pycache__/main.cpython-310.pyc b/addons/event_rental/controllers/__pycache__/main.cpython-310.pyc
index b95c18f..080de45 100644
Binary files a/addons/event_rental/controllers/__pycache__/main.cpython-310.pyc and b/addons/event_rental/controllers/__pycache__/main.cpython-310.pyc differ
diff --git a/addons/theme_aakriti_v2/__manifest__.py b/addons/theme_aakriti_v2/__manifest__.py
index e479dcb..27e1ea0 100644
--- a/addons/theme_aakriti_v2/__manifest__.py
+++ b/addons/theme_aakriti_v2/__manifest__.py
@@ -18,6 +18,7 @@
'depends': ['website', 'event_rental'],
'data': [
'views/website_v2_templates.xml',
+ 'views/portfolio_templates.xml',
],
'installable': True,
'application': False,
diff --git a/addons/theme_aakriti_v2/static/src/css/theme_v2.css b/addons/theme_aakriti_v2/static/src/css/theme_v2.css
index 357445c..151b49c 100644
--- a/addons/theme_aakriti_v2/static/src/css/theme_v2.css
+++ b/addons/theme_aakriti_v2/static/src/css/theme_v2.css
@@ -2474,4 +2474,388 @@ justify-content:center;
background:#C9973A;
color:#fff !important;
text-decoration:none;
-}
\ No newline at end of file
+}
+
+/* ==========================================================
+ INNER BANNER (PORTFOLIO, CONTACT, ETC.)
+ ========================================================== */
+.v2-inner-banner {
+ position: relative;
+ width: 100%;
+ height: 400px !important;
+ display: flex;
+ align-items: center;
+ justify-content: flex-start;
+ padding: 0 10%;
+ color: white;
+ background-size: cover;
+ background-position: center;
+ background-repeat: no-repeat;
+}
+
+.v2-inner-banner::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: linear-gradient(to right, rgba(26, 18, 6, 0.9) 0%, rgba(201, 151, 58, 0.4) 50%, transparent 100%);
+ z-index: 1;
+}
+
+.v2-inner-banner-content {
+ position: relative;
+ z-index: 2;
+}
+
+.v2-inner-banner-title {
+ font-size: 3.5rem;
+ font-weight: 700;
+ margin-bottom: 10px;
+ letter-spacing: 1px;
+}
+
+.v2-inner-banner-breadcrumb {
+ font-size: 1rem;
+ letter-spacing: 0.5px;
+ text-transform: uppercase;
+}
+
+.v2-inner-banner-breadcrumb a {
+ color: rgba(255, 255, 255, 0.8);
+ text-decoration: none;
+ transition: color 0.3s;
+}
+
+.v2-inner-banner-breadcrumb a:hover {
+ color: #fff;
+}
+
+.v2-inner-banner-breadcrumb .v2-active {
+ color: #fff;
+ font-weight: 600;
+}
+
+/* Portfolio Section */
+.v2-portfolio-section {
+ padding: 60px 5%;
+ max-width: 1400px;
+ margin: 0 auto;
+}
+
+/* Tabs */
+.v2-portfolio-tabs {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: center;
+ gap: 15px;
+ margin-bottom: 50px;
+}
+
+.v2-portfolio-tab {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ padding: 12px 24px;
+ background: transparent;
+ border: 1px solid #d4af37;
+ border-radius: 6px;
+ color: #333;
+ font-size: 0.85rem;
+ font-weight: 600;
+ cursor: pointer;
+ transition: all 0.3s ease;
+ text-transform: uppercase;
+}
+
+.v2-portfolio-tab:hover, .v2-portfolio-tab.active {
+ background: #C9973A;
+ color: white;
+}
+
+/* Masonry Grid (CSS Columns approach) */
+.v2-masonry-grid {
+ column-count: 3;
+ column-gap: 20px;
+}
+
+@media (max-width: 991px) {
+ .v2-masonry-grid { column-count: 2; }
+}
+
+@media (max-width: 767px) {
+ .v2-masonry-grid { column-count: 1; }
+}
+
+.v2-portfolio-item {
+ break-inside: avoid;
+ margin-bottom: 20px;
+ border-radius: 8px;
+ overflow: hidden;
+ position: relative;
+ box-shadow: 0 4px 15px rgba(0,0,0,0.05);
+ background: white;
+ /* Added transition for smooth hide/show via JS */
+ transition: opacity 0.4s ease, transform 0.4s ease;
+}
+
+.v2-portfolio-item.hidden {
+ display: none;
+}
+
+.v2-portfolio-item-inner {
+ position: relative;
+ overflow: hidden;
+}
+
+.v2-portfolio-item img {
+ width: 100%;
+ height: auto;
+ display: block;
+ border-radius: 8px;
+ transition: transform 0.5s ease;
+}
+
+.v2-portfolio-item:hover img {
+ transform: scale(1.05);
+}
+
+.v2-portfolio-info {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ padding: 30px;
+ background: linear-gradient(to top, rgba(201, 151, 58, 0.95), rgba(201, 151, 58, 0.4) 40%, transparent);
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-end;
+ opacity: 0;
+ transform: translateY(20px);
+ transition: all 0.4s ease;
+ border-radius: 8px;
+}
+
+.v2-portfolio-item:hover .v2-portfolio-info {
+ opacity: 1;
+ transform: translateY(0);
+}
+
+.v2-portfolio-info h3 {
+ font-size: 1.5rem;
+ font-weight: 700;
+ margin-bottom: 8px;
+ color: #fff;
+ font-family: var(--v2-font-display);
+}
+
+.v2-portfolio-info p {
+ font-size: 0.95rem;
+ color: rgba(255, 255, 255, 0.9);
+ display: flex;
+ align-items: center;
+ gap: 5px;
+ margin: 0;
+}
+
+.v2-portfolio-info p svg {
+ color: #fff;
+}
+
+/* ==========================================================
+ CONTACT PAGE STYLES
+ ========================================================== */
+.v2-contact-page {
+ width: 100%;
+ max-width: 1400px;
+ margin: 0 auto;
+ padding: 80px 5%;
+}
+
+.v2-contact-hero-grid {
+ display: grid;
+ grid-template-columns: 1fr 1.2fr;
+ gap: 60px;
+ /* margin-bottom: 60px; */
+}
+
+@media (max-width: 991px) {
+ .v2-contact-hero-grid {
+ grid-template-columns: 1fr;
+ gap: 40px;
+ }
+}
+
+.v2-contact-hero-left {
+ padding-top: 20px;
+}
+
+.v2-contact-title {
+ font-size: clamp(2.5rem, 4vw, 3.5rem);
+ font-weight: 700;
+ line-height: 1.2;
+ margin: 15px 0 20px;
+}
+
+.v2-contact-desc {
+ font-size: 1rem;
+ color: #555;
+ line-height: 1.6;
+ margin-bottom: 25px;
+}
+
+.v2-contact-details {
+ display: flex;
+ flex-direction: column;
+ gap: 20px;
+}
+
+.v2-contact-item {
+ display: flex;
+ align-items: flex-start;
+ gap: 15px;
+ font-size: 0.95rem;
+ color: #333;
+ line-height: 1.5;
+}
+
+/* Contact Form Card */
+.v2-contact-form-card {
+ background: #fff;
+ border-radius: 12px;
+ padding: 30px;
+ box-shadow: 0 10px 40px rgba(0,0,0,0.03);
+ border: 1px solid rgba(0,0,0,0.03);
+}
+
+.v2-form-title {
+ font-size: 0.9rem;
+ font-weight: 700;
+ letter-spacing: 2px;
+ margin-bottom: 30px;
+ color: #1a1206;
+}
+
+.v2-form-grid {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: 20px;
+}
+
+@media (max-width: 767px) {
+ .v2-form-grid {
+ grid-template-columns: 1fr;
+ }
+}
+
+.v2-form-full-width {
+ grid-column: 1 / -1;
+}
+
+.v2-form-input, .v2-form-select, .v2-form-textarea {
+ width: 100%;
+ padding: 14px 18px;
+ border: 1px solid rgba(0,0,0,0.08);
+ border-radius: 6px;
+ font-size: 0.9rem;
+ font-family: inherit;
+ background: #fafafa;
+ color: #333;
+ transition: border-color 0.3s;
+}
+
+.v2-form-input:focus, .v2-form-select:focus, .v2-form-textarea:focus {
+ outline: none;
+ border-color: #C9973A;
+ background: #fff;
+}
+
+.v2-form-select {
+ appearance: none;
+ -webkit-appearance: none;
+ cursor: pointer;
+}
+
+.v2-select-arrow {
+ position: absolute;
+ right: 18px;
+ top: 50%;
+ transform: translateY(-50%);
+ pointer-events: none;
+ color: #999;
+}
+
+/* Info Cards */
+.v2-info-cards-grid {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 20px;
+}
+
+@media (max-width: 767px) {
+ .v2-info-cards-grid {
+ grid-template-columns: 1fr;
+ }
+}
+
+.v2-info-card {
+ background: #fff;
+ border-radius: 8px;
+ overflow: hidden;
+ box-shadow: 0 5px 20px rgba(0,0,0,0.04);
+}
+
+.v2-info-card-img {
+ width: 100%;
+ height: 180px;
+ overflow: hidden;
+}
+
+.v2-info-card-img img {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+}
+
+.v2-info-card-content {
+ padding: 25px;
+}
+
+.v2-info-card-content h4 {
+ font-size: 0.8rem;
+ font-weight: 700;
+ letter-spacing: 1px;
+ margin-bottom: 15px;
+ color: #1a1206;
+ text-transform: uppercase;
+}
+
+.v2-info-card-content p {
+ font-size: 0.9rem;
+ color: #555;
+ line-height: 1.6;
+ margin: 0;
+}
+
+.v2-contact-social {
+ display: flex;
+ gap: 10px;
+ margin-top: 15px;
+}
+
+.v2-contact-social a {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 32px;
+ height: 32px;
+ border-radius: 50%;
+ background-color: #C9973A;
+ transition: background-color 0.3s;
+}
+
+.v2-contact-social a:hover {
+ background-color: #1a1206;
+}
diff --git a/addons/theme_aakriti_v2/static/src/js/theme_v2.js b/addons/theme_aakriti_v2/static/src/js/theme_v2.js
index ea17fd6..8cf6963 100644
--- a/addons/theme_aakriti_v2/static/src/js/theme_v2.js
+++ b/addons/theme_aakriti_v2/static/src/js/theme_v2.js
@@ -177,6 +177,79 @@
}
/* ── Bootstrap ────────────────────────────────────────── */
+ function initPortfolio() {
+ const grid = document.getElementById('v2-portfolio-grid');
+ const tabs = document.querySelectorAll('.v2-portfolio-tab');
+ if (!grid || !tabs.length) return;
+
+ // Dynamic portfolio data
+ const portfolioData = [
+ { category: 'weddings', img: '/theme_aakriti_v2/static/src/img/wedding.png', title: 'Romantic Garden Wedding', location: 'Bangalore, India' },
+ { category: 'corporate', img: '/theme_aakriti_v2/static/src/img/corporate.png', title: 'Annual Corporate Summit', location: 'Hyderabad, India' },
+ { category: 'birthday', img: '/theme_aakriti_v2/static/src/img/birthday.png', title: 'Milestone Birthday Bash', location: 'Bangalore, India' },
+ { category: 'cultural', img: '/theme_aakriti_v2/static/src/img/cultural.png', title: 'Royal Cultural Night', location: 'Mysore, India' },
+ { category: 'private', img: '/theme_aakriti_v2/static/src/img/gallery1.webp', title: 'Private Celebration', location: 'Goa, India' },
+ { category: 'weddings', img: '/theme_aakriti_v2/static/src/img/about.webp', title: 'Classic Wedding', location: 'Bangalore, India' }
+ ];
+
+ // Function to render items
+ function renderItems(filter) {
+ grid.innerHTML = ''; // Clear current
+
+ portfolioData.forEach(item => {
+ if (filter === 'all' || filter === item.category) {
+ const itemHTML = `
+
+
+

+
+
${item.title}
+
${item.location}
+
+
+
+ `;
+ // Parse and append to trigger animation
+ const temp = document.createElement('div');
+ temp.innerHTML = itemHTML.trim();
+ const element = temp.firstChild;
+ grid.appendChild(element);
+
+ // Trigger animation after append
+ setTimeout(() => {
+ element.style.opacity = '1';
+ element.style.transform = 'scale(1)';
+ }, 50);
+ }
+ });
+ }
+
+ // Initial render
+ renderItems('all');
+
+ // Tab click handlers
+ tabs.forEach(tab => {
+ tab.addEventListener('click', function() {
+ tabs.forEach(t => t.classList.remove('active'));
+ this.classList.add('active');
+
+ const filter = this.getAttribute('data-filter');
+
+ // Fade out existing items
+ const currentItems = grid.querySelectorAll('.v2-portfolio-item');
+ currentItems.forEach(item => {
+ item.style.opacity = '0';
+ item.style.transform = 'scale(0.9)';
+ });
+
+ // Wait for fade out, then render new filtered list
+ setTimeout(() => {
+ renderItems(filter);
+ }, 400); // Wait for transition
+ });
+ });
+ }
+
onReady(function () {
initHeader();
initMobileDrawer();
@@ -184,6 +257,7 @@
initReveal();
initCounters();
initActiveNav();
+ initPortfolio();
});
})();
diff --git a/addons/theme_aakriti_v2/views/portfolio_templates.xml b/addons/theme_aakriti_v2/views/portfolio_templates.xml
new file mode 100644
index 0000000..25f5d14
--- /dev/null
+++ b/addons/theme_aakriti_v2/views/portfolio_templates.xml
@@ -0,0 +1,66 @@
+
+
+
+
+ Portfolio
+ qweb
+ /portfolio
+ True
+ theme_aakriti_v2.portfolio_page_template
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/theme_aakriti_v2/views/website_v2_templates.xml b/addons/theme_aakriti_v2/views/website_v2_templates.xml
index 3dd5f08..7cc7297 100644
--- a/addons/theme_aakriti_v2/views/website_v2_templates.xml
+++ b/addons/theme_aakriti_v2/views/website_v2_templates.xml
@@ -65,8 +65,8 @@
Home
About Us
Services
- Gallery
- Experience
+ Portfolio
+
Blog
Contact
@@ -825,17 +825,105 @@ el.textContent=new Date().getFullYear();
-
-
- Contact
- Let's Connect
-
- For inquiries, collaborations, wedding consultations, or event planning questions, send us a message. We respond personally within two business days.
-