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.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 + + + +
+ +
+
+

Portfolio

+
+ Home / Portfolio +
+
+
+ + +
+
+ + + + + + +
+ +
+ +
+ + +
+
+
+
+
+
+
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();