diff --git a/assets/css/style.css b/assets/css/style.css new file mode 100644 index 0000000..0e7c202 --- /dev/null +++ b/assets/css/style.css @@ -0,0 +1,934 @@ +/** + * Doğa Kuruyemiş - Custom Styles + * Bootstrap 5.3.7 ile uyumlu özel stiller + */ + +/* ==================== CSS Variables ==================== */ +:root { + --clr-primary: #7A5C3E; + --clr-accent: #C19A6B; + --clr-bg: #F3E9DD; + --clr-text: #2B2B2B; + --clr-white: #FFFFFF; + --clr-light: #FAF7F2; + --transition-base: all 0.3s ease; + --shadow-sm: 0 2px 8px rgba(0,0,0,0.08); + --shadow-md: 0 4px 16px rgba(0,0,0,0.12); + --shadow-lg: 0 8px 24px rgba(0,0,0,0.16); +} + +/* ==================== Global Styles ==================== */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; + color: var(--clr-text); + background-color: var(--clr-bg); + line-height: 1.6; + overflow-x: hidden; +} + +/* Smooth scrolling */ +html { + scroll-behavior: smooth; +} + +/* Typography */ +h1, h2, h3, h4, h5, h6 { + font-weight: 700; + line-height: 1.3; + color: var(--clr-primary); + margin-bottom: 1rem; +} + +h1 { font-size: 2.5rem; } +h2 { font-size: 2rem; } +h3 { font-size: 1.75rem; } +h4 { font-size: 1.5rem; } +h5 { font-size: 1.25rem; } +h6 { font-size: 1rem; } + +p { + margin-bottom: 1rem; + color: var(--clr-text); +} + +a { + color: var(--clr-primary); + text-decoration: none; + transition: var(--transition-base); +} + +a:hover { + color: var(--clr-accent); +} + +/* ==================== Navbar Styles ==================== */ +.navbar { + background-color: var(--clr-white); + padding: 1rem 0; + transition: var(--transition-base); + box-shadow: var(--shadow-sm); +} + +.navbar.scrolled { + box-shadow: var(--shadow-md); +} + +.navbar-brand { + font-size: 1.5rem; + font-weight: 700; + color: var(--clr-primary) !important; + display: flex; + align-items: center; + gap: 0.5rem; +} + +.navbar-brand i { + color: var(--clr-accent); + font-size: 1.75rem; +} + +.navbar-nav .nav-link { + color: var(--clr-text); + font-weight: 500; + padding: 0.5rem 1rem; + margin: 0 0.25rem; + transition: var(--transition-base); + position: relative; +} + +.navbar-nav .nav-link:hover, +.navbar-nav .nav-link.active { + color: var(--clr-primary); +} + +.navbar-nav .nav-link.active::after { + content: ''; + position: absolute; + bottom: 0; + left: 1rem; + right: 1rem; + height: 3px; + background-color: var(--clr-accent); + border-radius: 2px; +} + +.navbar-toggler { + border-color: var(--clr-primary); +} + +.navbar-toggler:focus { + box-shadow: 0 0 0 0.25rem rgba(122, 92, 62, 0.25); +} + +/* ==================== Hero/Carousel Styles ==================== */ +.hero-carousel .carousel-item { + height: 500px; + position: relative; +} + +.hero-carousel .carousel-item img { + width: 100%; + height: 100%; + object-fit: cover; + object-position: center; +} + +.hero-carousel .carousel-caption { + background: rgba(0, 0, 0, 0.5); + backdrop-filter: blur(8px); + padding: 2rem; + border-radius: 12px; + bottom: 3rem; + left: 50%; + right: auto; + transform: translateX(-50%); + max-width: 600px; +} + +.hero-carousel .carousel-caption h2 { + color: var(--clr-white); + font-size: 2.5rem; + margin-bottom: 1rem; + text-shadow: 2px 2px 4px rgba(0,0,0,0.3); +} + +.hero-carousel .carousel-caption p { + color: var(--clr-white); + font-size: 1.25rem; + margin-bottom: 0; + text-shadow: 1px 1px 2px rgba(0,0,0,0.3); +} + +/* ==================== Button Styles ==================== */ +.btn-primary { + background-color: var(--clr-primary); + border-color: var(--clr-primary); + color: var(--clr-white); + font-weight: 600; + padding: 0.75rem 1.5rem; + border-radius: 8px; + transition: var(--transition-base); +} + +.btn-primary:hover { + background-color: var(--clr-accent); + border-color: var(--clr-accent); + transform: translateY(-2px); + box-shadow: var(--shadow-md); +} + +.btn-outline-primary { + border-color: var(--clr-primary); + color: var(--clr-primary); + font-weight: 600; + padding: 0.75rem 1.5rem; + border-radius: 8px; + transition: var(--transition-base); +} + +.btn-outline-primary:hover { + background-color: var(--clr-primary); + border-color: var(--clr-primary); + color: var(--clr-white); + transform: translateY(-2px); + box-shadow: var(--shadow-md); +} + +/* ==================== Card Styles ==================== */ +.card { + border: none; + border-radius: 12px; + box-shadow: var(--shadow-sm); + transition: var(--transition-base); + background-color: var(--clr-white); + overflow: hidden; +} + +.card:hover { + transform: translateY(-8px); + box-shadow: var(--shadow-lg); +} + +.card-img-top { + height: 200px; + object-fit: cover; + transition: var(--transition-base); +} + +.card:hover .card-img-top { + transform: scale(1.05); +} + +.card-title { + color: var(--clr-primary); + font-weight: 600; + font-size: 1.25rem; +} + +.card-text { + color: var(--clr-text); + font-size: 0.95rem; +} + +/* Product Cards */ +.product-card { + height: 100%; + display: flex; + flex-direction: column; +} + +.product-card .card-body { + flex-grow: 1; + display: flex; + flex-direction: column; +} + +.product-card .card-footer { + background-color: var(--clr-light); + border-top: 2px solid var(--clr-bg); + padding: 1rem; +} + +.product-price { + font-size: 1.5rem; + font-weight: 700; + color: var(--clr-primary); +} + +/* Category Cards */ +.category-card { + text-align: center; + padding: 2rem; +} + +.category-card i { + font-size: 3rem; + color: var(--clr-accent); + margin-bottom: 1rem; +} + +/* ==================== Section Styles ==================== */ +.section { + padding: 4rem 0; +} + +.section-title { + text-align: center; + margin-bottom: 3rem; + position: relative; +} + +.section-title h2 { + font-size: 2.5rem; + color: var(--clr-primary); + margin-bottom: 0.5rem; +} + +.section-title p { + font-size: 1.1rem; + color: var(--clr-text); + opacity: 0.8; +} + +.section-title::after { + content: ''; + display: block; + width: 80px; + height: 4px; + background: linear-gradient(to right, var(--clr-primary), var(--clr-accent)); + margin: 1rem auto 0; + border-radius: 2px; +} + +/* ==================== Feature Icons ==================== */ +.feature-icon { + width: 80px; + height: 80px; + background: linear-gradient(135deg, var(--clr-primary), var(--clr-accent)); + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + margin: 0 auto 1.5rem; + box-shadow: var(--shadow-md); +} + +.feature-icon i { + font-size: 2rem; + color: var(--clr-white); +} + +.feature-box { + text-align: center; + padding: 2rem; + background: var(--clr-white); + border-radius: 12px; + box-shadow: var(--shadow-sm); + transition: var(--transition-base); + height: 100%; +} + +.feature-box:hover { + transform: translateY(-8px); + box-shadow: var(--shadow-lg); +} + +.feature-box h4 { + margin-bottom: 1rem; +} + +/* ==================== Testimonials ==================== */ +.testimonial-card { + background: var(--clr-white); + padding: 2rem; + border-radius: 12px; + box-shadow: var(--shadow-sm); + height: 100%; + position: relative; +} + +.testimonial-card::before { + content: '\f10d'; + font-family: 'bootstrap-icons'; + position: absolute; + top: 1rem; + left: 1.5rem; + font-size: 2rem; + color: var(--clr-accent); + opacity: 0.3; +} + +.testimonial-text { + font-style: italic; + margin-bottom: 1.5rem; + padding-top: 1rem; +} + +.testimonial-author { + display: flex; + align-items: center; + gap: 1rem; +} + +.testimonial-author img { + width: 50px; + height: 50px; + border-radius: 50%; + object-fit: cover; +} + +.testimonial-author-info h6 { + margin-bottom: 0.25rem; + color: var(--clr-primary); +} + +.testimonial-author-info .text-muted { + font-size: 0.9rem; +} + +.testimonial-stars { + color: #FFB800; + margin-bottom: 0.5rem; +} + +/* ==================== Accordion (FAQ) ==================== */ +.accordion-item { + border: none; + margin-bottom: 1rem; + border-radius: 8px; + overflow: hidden; + box-shadow: var(--shadow-sm); +} + +.accordion-button { + background-color: var(--clr-white); + color: var(--clr-primary); + font-weight: 600; + font-size: 1.1rem; + padding: 1.25rem 1.5rem; +} + +.accordion-button:not(.collapsed) { + background-color: var(--clr-primary); + color: var(--clr-white); + box-shadow: none; +} + +.accordion-button:focus { + border-color: var(--clr-accent); + box-shadow: 0 0 0 0.25rem rgba(122, 92, 62, 0.25); +} + +.accordion-body { + padding: 1.5rem; + background-color: var(--clr-white); + color: var(--clr-text); +} + +/* ==================== Newsletter Section ==================== */ +.newsletter-section { + background: linear-gradient(135deg, var(--clr-primary), var(--clr-accent)); + padding: 3rem 0; + color: var(--clr-white); +} + +.newsletter-section h3 { + color: var(--clr-white); + margin-bottom: 0.5rem; +} + +.newsletter-section p { + color: var(--clr-white); + opacity: 0.9; +} + +.newsletter-form { + max-width: 600px; + margin: 2rem auto 0; +} + +.newsletter-form .form-control { + padding: 0.75rem 1rem; + border: none; + border-radius: 8px; +} + +.newsletter-form .form-check-label { + color: var(--clr-white); + font-size: 0.9rem; +} + +.newsletter-form .form-check-input { + border-color: var(--clr-white); +} + +.newsletter-form .form-check-input:checked { + background-color: var(--clr-white); + border-color: var(--clr-white); +} + +/* ==================== Footer Styles ==================== */ +.footer { + background-color: var(--clr-primary); + color: var(--clr-white); + padding: 3rem 0 1rem; + margin-top: 4rem; +} + +.footer h5 { + color: var(--clr-white); + margin-bottom: 1.5rem; + font-size: 1.25rem; +} + +.footer p, +.footer a { + color: rgba(255, 255, 255, 0.85); + font-size: 0.95rem; + margin-bottom: 0.75rem; +} + +.footer a:hover { + color: var(--clr-white); + transform: translateX(4px); + display: inline-block; +} + +.footer-link { + display: flex; + align-items: center; + gap: 0.5rem; + margin-bottom: 0.75rem; +} + +.footer-link i { + color: var(--clr-accent); + font-size: 1.1rem; +} + +.social-links { + display: flex; + gap: 1rem; + margin-top: 1rem; +} + +.social-links a { + width: 40px; + height: 40px; + background-color: rgba(255, 255, 255, 0.1); + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + transition: var(--transition-base); +} + +.social-links a:hover { + background-color: var(--clr-accent); + transform: translateY(-4px); +} + +.social-links i { + font-size: 1.25rem; + color: var(--clr-white); +} + +.footer-bottom { + border-top: 1px solid rgba(255, 255, 255, 0.1); + margin-top: 2rem; + padding-top: 1.5rem; + text-align: center; +} + +.footer-bottom p { + margin-bottom: 0; + font-size: 0.9rem; + opacity: 0.7; +} + +/* ==================== Back to Top Button ==================== */ +.back-to-top { + position: fixed; + bottom: 80px; + right: 20px; + width: 50px; + height: 50px; + background-color: var(--clr-primary); + color: var(--clr-white); + border: none; + border-radius: 50%; + display: none; + align-items: center; + justify-content: center; + cursor: pointer; + z-index: 999; + box-shadow: var(--shadow-md); + transition: var(--transition-base); +} + +.back-to-top:hover { + background-color: var(--clr-accent); + transform: translateY(-4px); + box-shadow: var(--shadow-lg); +} + +.back-to-top i { + font-size: 1.5rem; +} + +.back-to-top.show { + display: flex; +} + +/* ==================== WhatsApp Floating Button ==================== */ +.whatsapp-float { + position: fixed; + bottom: 20px; + right: 20px; + width: 60px; + height: 60px; + background-color: #25D366; + color: var(--clr-white); + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + box-shadow: var(--shadow-lg); + z-index: 1000; + transition: var(--transition-base); + text-decoration: none; +} + +.whatsapp-float:hover { + background-color: #20BA5A; + transform: scale(1.1); + color: var(--clr-white); +} + +.whatsapp-float i { + font-size: 2rem; +} + +/* ==================== Timeline Styles ==================== */ +.timeline { + position: relative; + padding: 2rem 0; +} + +.timeline::before { + content: ''; + position: absolute; + left: 50%; + top: 0; + bottom: 0; + width: 3px; + background: linear-gradient(to bottom, var(--clr-primary), var(--clr-accent)); + transform: translateX(-50%); +} + +.timeline-item { + position: relative; + margin-bottom: 3rem; + display: flex; + align-items: center; +} + +.timeline-item:nth-child(odd) { + flex-direction: row; +} + +.timeline-item:nth-child(even) { + flex-direction: row-reverse; +} + +.timeline-content { + width: 45%; + background: var(--clr-white); + padding: 1.5rem; + border-radius: 12px; + box-shadow: var(--shadow-sm); + position: relative; +} + +.timeline-item:nth-child(odd) .timeline-content { + text-align: right; +} + +.timeline-item:nth-child(even) .timeline-content { + text-align: left; +} + +.timeline-year { + width: 10%; + text-align: center; + font-weight: 700; + color: var(--clr-primary); + font-size: 1.5rem; +} + +.timeline-marker { + width: 20px; + height: 20px; + background-color: var(--clr-accent); + border: 4px solid var(--clr-white); + border-radius: 50%; + position: absolute; + left: 50%; + transform: translateX(-50%); + box-shadow: var(--shadow-sm); + z-index: 1; +} + +/* ==================== Badge Styles ==================== */ +.badge-custom { + background-color: var(--clr-accent); + color: var(--clr-white); + padding: 0.5rem 1rem; + border-radius: 20px; + font-weight: 500; + margin: 0.25rem; + display: inline-block; +} + +/* ==================== Contact Form ==================== */ +.contact-form { + background: var(--clr-white); + padding: 2rem; + border-radius: 12px; + box-shadow: var(--shadow-md); +} + +.contact-form .form-label { + font-weight: 600; + color: var(--clr-primary); + margin-bottom: 0.5rem; +} + +.contact-form .form-control, +.contact-form .form-select { + padding: 0.75rem 1rem; + border: 2px solid var(--clr-bg); + border-radius: 8px; + transition: var(--transition-base); +} + +.contact-form .form-control:focus, +.contact-form .form-select:focus { + border-color: var(--clr-primary); + box-shadow: 0 0 0 0.25rem rgba(122, 92, 62, 0.15); +} + +.contact-info-card { + background: var(--clr-white); + padding: 1.5rem; + border-radius: 12px; + box-shadow: var(--shadow-sm); + margin-bottom: 1.5rem; + transition: var(--transition-base); +} + +.contact-info-card:hover { + box-shadow: var(--shadow-md); + transform: translateY(-4px); +} + +.contact-info-card i { + font-size: 2rem; + color: var(--clr-accent); + margin-bottom: 1rem; +} + +.contact-info-card h5 { + color: var(--clr-primary); + margin-bottom: 0.5rem; +} + +.contact-info-card p, +.contact-info-card a { + color: var(--clr-text); + margin-bottom: 0; +} + +/* Map Container */ +.map-container { + border-radius: 12px; + overflow: hidden; + box-shadow: var(--shadow-md); + margin-bottom: 1.5rem; +} + +.map-container iframe { + width: 100%; + height: 300px; + border: none; +} + +/* ==================== Responsive Styles ==================== */ +@media (max-width: 991px) { + .hero-carousel .carousel-item { + height: 400px; + } + + .hero-carousel .carousel-caption h2 { + font-size: 2rem; + } + + .hero-carousel .carousel-caption p { + font-size: 1rem; + } + + .timeline::before { + left: 30px; + } + + .timeline-item { + flex-direction: row !important; + padding-left: 60px; + } + + .timeline-content { + width: 100%; + text-align: left !important; + } + + .timeline-year { + position: absolute; + left: 0; + width: auto; + } + + .timeline-marker { + left: 30px; + transform: translateX(-50%); + } +} + +@media (max-width: 767px) { + h1 { font-size: 2rem; } + h2 { font-size: 1.75rem; } + h3 { font-size: 1.5rem; } + + .section { + padding: 3rem 0; + } + + .section-title h2 { + font-size: 2rem; + } + + .hero-carousel .carousel-item { + height: 350px; + } + + .hero-carousel .carousel-caption { + padding: 1.5rem; + bottom: 1rem; + } + + .hero-carousel .carousel-caption h2 { + font-size: 1.5rem; + } + + .hero-carousel .carousel-caption p { + font-size: 0.9rem; + } + + .feature-icon { + width: 60px; + height: 60px; + } + + .feature-icon i { + font-size: 1.5rem; + } + + .whatsapp-float { + width: 50px; + height: 50px; + } + + .whatsapp-float i { + font-size: 1.5rem; + } + + .back-to-top { + width: 45px; + height: 45px; + bottom: 70px; + } +} + +@media (max-width: 576px) { + .hero-carousel .carousel-item { + height: 300px; + } + + .card-img-top { + height: 150px; + } + + .footer { + padding: 2rem 0 1rem; + } + + .newsletter-section { + padding: 2rem 0; + } +} + +/* ==================== Utility Classes ==================== */ +.text-primary-custom { + color: var(--clr-primary) !important; +} + +.text-accent { + color: var(--clr-accent) !important; +} + +.bg-primary-custom { + background-color: var(--clr-primary) !important; +} + +.bg-accent { + background-color: var(--clr-accent) !important; +} + +.bg-light-custom { + background-color: var(--clr-bg) !important; +} + +/* Modal Adjustments */ +.modal-content { + border: none; + border-radius: 12px; + overflow: hidden; +} + +.modal-header { + background: linear-gradient(135deg, var(--clr-primary), var(--clr-accent)); + color: var(--clr-white); + border: none; +} + +.modal-header .btn-close { + filter: brightness(0) invert(1); +} + +.modal-title { + color: var(--clr-white); +} + +.modal-body { + padding: 2rem; +} + +/* Loading States */ +img[loading="lazy"] { + background: var(--clr-bg); +} diff --git a/assets/img/README.md b/assets/img/README.md new file mode 100644 index 0000000..2a6e43d --- /dev/null +++ b/assets/img/README.md @@ -0,0 +1,42 @@ +# Image Assets + +This directory contains placeholder images for the Doğa Kuruyemiş website. + +## Image Requirements + +### Required Images: +1. **favicon-16x16.png** - 16x16px favicon +2. **favicon-32x32.png** - 32x32px favicon +3. **apple-touch-icon.png** - 180x180px Apple touch icon +4. **og-image.jpg** - 1200x630px Open Graph image for social media +5. **twitter-image.jpg** - 1200x600px Twitter card image + +### Recommended Images: +- Logo images +- Product photos (nuts, dried fruits) +- Category images +- Production facility photos +- Team photos + +## Current Setup + +Currently, the website uses placeholder images from: +- **Picsum Photos**: https://picsum.photos/ for hero carousel and general images +- **Pravatar**: https://i.pravatar.cc/ for customer testimonial avatars + +## Usage Notes + +Replace placeholder image URLs in HTML files with actual product images: +- Hero carousel images (1920x500px) +- Category cards (300x200px) +- Product cards (300x250px) +- About page images (800x600px) +- Contact page images (800x600px) + +## Image Optimization + +For best performance: +- Use WebP format where possible +- Compress images before upload +- Use appropriate dimensions +- Add descriptive alt text for accessibility diff --git a/assets/js/main.js b/assets/js/main.js new file mode 100644 index 0000000..50c4d40 --- /dev/null +++ b/assets/js/main.js @@ -0,0 +1,349 @@ +/** + * Doğa Kuruyemiş - Main JavaScript + * Bootstrap 5.3.7 ile uyumlu interaktif davranışlar + */ + +(function() { + 'use strict'; + + // ==================== DOM Elements ==================== + const navbar = document.querySelector('.navbar'); + const backToTopBtn = document.querySelector('.back-to-top'); + + // ==================== Navbar Scroll Shadow ==================== + /** + * Sayfa scroll'unda navbar'a shadow efekti ekler + */ + function handleNavbarScroll() { + if (window.scrollY > 20) { + navbar?.classList.add('scrolled'); + } else { + navbar?.classList.remove('scrolled'); + } + } + + // ==================== Back to Top Button ==================== + /** + * Back to top butonunun görünürlüğünü kontrol eder + */ + function handleBackToTop() { + if (window.scrollY > 200) { + backToTopBtn?.classList.add('show'); + } else { + backToTopBtn?.classList.remove('show'); + } + } + + /** + * Sayfanın en üstüne smooth scroll yapar + */ + function scrollToTop() { + window.scrollTo({ + top: 0, + behavior: 'smooth' + }); + } + + // ==================== Carousel Auto-Interval ==================== + /** + * Bootstrap carousel için otomatik geçiş süresini ayarlar (5 saniye) + */ + function initializeCarousel() { + const carouselElement = document.querySelector('#heroCarousel'); + if (carouselElement) { + const carousel = new bootstrap.Carousel(carouselElement, { + interval: 5000, + wrap: true, + keyboard: true, + pause: 'hover' + }); + } + } + + // ==================== Product Modal Dynamic Content ==================== + /** + * Ürün detay modalına data-* attribute'larından dinamik içerik aktarır + */ + function initializeProductModals() { + const productModal = document.getElementById('productModal'); + + if (productModal) { + productModal.addEventListener('show.bs.modal', function(event) { + // Modal'ı tetikleyen button + const button = event.relatedTarget; + + // Data attribute'larından bilgileri al + const productName = button.getAttribute('data-product-name'); + const productDesc = button.getAttribute('data-product-desc'); + const productPrice = button.getAttribute('data-product-price'); + const productImage = button.getAttribute('data-product-image'); + const productWeight = button.getAttribute('data-product-weight'); + const productOrigin = button.getAttribute('data-product-origin'); + const productRoast = button.getAttribute('data-product-roast'); + const productAllergen = button.getAttribute('data-product-allergen'); + + // Modal içeriğini güncelle + const modalTitle = productModal.querySelector('.modal-title'); + const modalImage = productModal.querySelector('#modalProductImage'); + const modalDesc = productModal.querySelector('#modalProductDesc'); + const modalPrice = productModal.querySelector('#modalProductPrice'); + const modalWeight = productModal.querySelector('#modalProductWeight'); + const modalOrigin = productModal.querySelector('#modalProductOrigin'); + const modalRoast = productModal.querySelector('#modalProductRoast'); + const modalAllergen = productModal.querySelector('#modalProductAllergen'); + + if (modalTitle) modalTitle.textContent = productName; + if (modalImage) modalImage.src = productImage; + if (modalDesc) modalDesc.textContent = productDesc; + if (modalPrice) modalPrice.textContent = productPrice; + if (modalWeight) modalWeight.textContent = productWeight; + if (modalOrigin) modalOrigin.textContent = productOrigin; + if (modalRoast) modalRoast.textContent = productRoast; + if (modalAllergen) modalAllergen.textContent = productAllergen; + }); + } + } + + // ==================== Form Validation Enhancement ==================== + /** + * Bootstrap form validation'ı geliştirir + */ + function initializeFormValidation() { + // Newsletter form + const newsletterForm = document.getElementById('newsletterForm'); + if (newsletterForm) { + newsletterForm.addEventListener('submit', function(event) { + event.preventDefault(); + event.stopPropagation(); + + if (newsletterForm.checkValidity()) { + const email = newsletterForm.querySelector('input[type="email"]').value; + alert(`Thank you for subscribing! We'll send updates to ${email}`); + newsletterForm.reset(); + newsletterForm.classList.remove('was-validated'); + } else { + newsletterForm.classList.add('was-validated'); + } + }); + } + + // Contact form + const contactForm = document.getElementById('contactForm'); + if (contactForm) { + contactForm.addEventListener('submit', function(event) { + event.preventDefault(); + event.stopPropagation(); + + if (contactForm.checkValidity()) { + const name = contactForm.querySelector('#name').value; + const email = contactForm.querySelector('#email').value; + const subject = contactForm.querySelector('#subject').value; + + // Gerçek backend olmadığı için şimdilik alert göster + alert(`Thank you ${name}! Your message about "${subject}" has been received. We'll contact you at ${email} soon.`); + contactForm.reset(); + contactForm.classList.remove('was-validated'); + } else { + contactForm.classList.add('was-validated'); + } + }); + } + } + + // ==================== Smooth Scroll for Anchor Links ==================== + /** + * Sayfa içi anchor linkler için smooth scroll + */ + function initializeSmoothScroll() { + document.querySelectorAll('a[href^="#"]').forEach(anchor => { + anchor.addEventListener('click', function(e) { + const href = this.getAttribute('href'); + + // # veya boş href'leri atla + if (href === '#' || href === '#!') { + return; + } + + const target = document.querySelector(href); + if (target) { + e.preventDefault(); + target.scrollIntoView({ + behavior: 'smooth', + block: 'start' + }); + } + }); + }); + } + + // ==================== Lazy Loading Enhancement ==================== + /** + * Lazy loading için fallback (eski tarayıcılar) + */ + function initializeLazyLoading() { + if ('loading' in HTMLImageElement.prototype) { + // Tarayıcı native lazy loading destekliyor + return; + } + + // Fallback: Intersection Observer ile lazy loading + const images = document.querySelectorAll('img[loading="lazy"]'); + + if ('IntersectionObserver' in window) { + const imageObserver = new IntersectionObserver((entries, observer) => { + entries.forEach(entry => { + if (entry.isIntersecting) { + const img = entry.target; + img.src = img.dataset.src || img.src; + img.classList.add('loaded'); + observer.unobserve(img); + } + }); + }); + + images.forEach(img => imageObserver.observe(img)); + } + } + + // ==================== Testimonials Carousel Auto-Play ==================== + /** + * Müşteri yorumları carousel'i için otomatik oynatma + */ + function initializeTestimonialsCarousel() { + const testimonialsCarousel = document.querySelector('#testimonialsCarousel'); + if (testimonialsCarousel) { + new bootstrap.Carousel(testimonialsCarousel, { + interval: 6000, + wrap: true, + keyboard: true, + pause: 'hover' + }); + } + } + + // ==================== Active Nav Link Highlighter ==================== + /** + * Mevcut sayfaya göre navbar linkini aktif yapar + */ + function highlightActiveNavLink() { + const currentPath = window.location.pathname; + const navLinks = document.querySelectorAll('.navbar-nav .nav-link'); + + navLinks.forEach(link => { + const linkPath = new URL(link.href).pathname; + + // Anasayfa için özel kontrol + if (currentPath === '/' || currentPath.endsWith('/index.html')) { + if (linkPath.endsWith('/index.html') || linkPath === '/') { + link.classList.add('active'); + link.setAttribute('aria-current', 'page'); + } + } else if (linkPath === currentPath) { + link.classList.add('active'); + link.setAttribute('aria-current', 'page'); + } + }); + } + + // ==================== Navbar Collapse on Link Click (Mobile) ==================== + /** + * Mobilde menü linkine tıklandığında menüyü kapat + */ + function initializeMobileMenuClose() { + const navLinks = document.querySelectorAll('.navbar-nav .nav-link'); + const navbarCollapse = document.querySelector('.navbar-collapse'); + + navLinks.forEach(link => { + link.addEventListener('click', () => { + if (navbarCollapse && navbarCollapse.classList.contains('show')) { + const bsCollapse = bootstrap.Collapse.getInstance(navbarCollapse); + if (bsCollapse) { + bsCollapse.hide(); + } + } + }); + }); + } + + // ==================== Initialize Tooltips ==================== + /** + * Bootstrap tooltip'lerini başlat + */ + function initializeTooltips() { + const tooltipTriggerList = [].slice.call( + document.querySelectorAll('[data-bs-toggle="tooltip"]') + ); + tooltipTriggerList.map(function(tooltipTriggerEl) { + return new bootstrap.Tooltip(tooltipTriggerEl); + }); + } + + // ==================== Scroll Event Listener ==================== + /** + * Scroll eventlerini optimize edilmiş şekilde dinle + */ + let scrollTimeout; + function handleScroll() { + if (scrollTimeout) { + window.cancelAnimationFrame(scrollTimeout); + } + + scrollTimeout = window.requestAnimationFrame(() => { + handleNavbarScroll(); + handleBackToTop(); + }); + } + + // ==================== Event Listeners ==================== + /** + * Tüm event listener'ları ekle + */ + function attachEventListeners() { + // Scroll events + window.addEventListener('scroll', handleScroll, { passive: true }); + + // Back to top button click + if (backToTopBtn) { + backToTopBtn.addEventListener('click', scrollToTop); + } + + // Load event + window.addEventListener('load', () => { + handleNavbarScroll(); + handleBackToTop(); + }); + } + + // ==================== Initialization ==================== + /** + * Sayfa yüklendiğinde tüm fonksiyonları başlat + */ + function init() { + console.log('🌰 Doğa Kuruyemiş - Initializing...'); + + // Temel fonksiyonları başlat + highlightActiveNavLink(); + initializeCarousel(); + initializeTestimonialsCarousel(); + initializeProductModals(); + initializeFormValidation(); + initializeSmoothScroll(); + initializeLazyLoading(); + initializeMobileMenuClose(); + initializeTooltips(); + attachEventListeners(); + + console.log('✅ Doğa Kuruyemiş - Ready!'); + } + + // ==================== DOM Ready ==================== + /** + * DOM hazır olduğunda init fonksiyonunu çalıştır + */ + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', init); + } else { + init(); + } + +})(); diff --git a/hakkimizda.html b/hakkimizda.html new file mode 100644 index 0000000..4deadcf --- /dev/null +++ b/hakkimizda.html @@ -0,0 +1,523 @@ + + +
+ + + + + + +Kuruyemiş tutkumuz 2010 yılında küçük bir atölyede başladı. Bugün, Türkiye'nin dört bir yanına taze ve kaliteli ürünler sunuyoruz.
+Zanaat ve tutku ile başlayan yolculuğumuz
+Doğa Kuruyemiş, 2010 yılında kuruyemiş sevdalısı bir ailenin tutkusuyla kuruldu. Küçük bir atölyede, geleneksel kavrum yöntemleriyle başlayan yolculuğumuz, bugün modern teknoloji ve zanaat ustalığının birleşimiyle devam ediyor.
+ +Kuruyemiş sektöründe kalite ve tazelik standartlarını yükseltmek için yola çıktık. Her ürünümüz, seçilmiş menşeilerden temin ediliyor ve günlük olarak özenle kavrularak hazırlanıyor. Fındıklarımız Giresun ve Ordu'dan, Antep fıstıklarımız Gaziantep ve Siirt'ten, bademlerimiz Kaliforniya'dan ve cevizlerimiz Manisa'dan geliyor.
+ +Doğallığa olan inancımız hiç değişmedi. Ürünlerimizde hiçbir katkı maddesi, koruyucu veya yapay aroma kullanmıyoruz. Sadece doğanın sunduğu en saf lezzetleri, taze kavrum ile sofralarınıza getiriyoruz.
+ +Müşteri memnuniyeti bizim için her şeyden önemli. Hızlı teslimat, güvenilir tedarik ve sürekli kalite kontrolü ile sizlere en iyi hizmeti sunmak için çalışıyoruz. Her pakette aynı tazelik, her üründe aynı kalite - bu bizim sözümüz.
+ +Bugün Türkiye'nin birçok şehrindeki müşterilerimize hizmet vermenin gururunu yaşıyoruz. Onların güveni ve memnuniyeti, bizi daha iyiye taşıyan en büyük motivasyonumuz. Doğa Kuruyemiş ailesi olarak, doğal ve taze ürünleri sevdiklerinizle paylaşmanızı sağlamak için buradayız.
+Ürünlerimizde neden bu kadar iddialıyız?
+Natural Products
+Years Experience
+Happy Customers
+Product Varieties
+Doğa Kuruyemiş'in kilometre taşları
+Küçük bir atölyede, aile şirketi olarak kuruyemiş tutkusuyla yola çıktık. İlk ürünümüz kavrulmuş fındık oldu.
+İstanbul'da ilk perakende mağazamızı açtık. Müşterilerimizle yüz yüze buluşmanın keyfini yaşadık.
+Modern ve hijyenik koşullarda üretim yapabileceğimiz kendi tesisimizi kurduk. Kapasite 10 kat arttı.
+Online satış kanalımızı açtık. Türkiye'nin her yerine taze ürünler göndermeye başladık.
+ISO 22000 Gıda Güvenliği Yönetim Sistemi sertifikamızı aldık. Kalite taahhüdümüzü belgeledik.
+En son teknoloji kavrum makineleriyle donatılmış yeni üretim hattımızı devreye aldık. Kapasite ve kalite bir üst seviyeye çıktı.
+Kalite ve güvenilirliğimizin kanıtları
+Food Safety Management System
+Hazard Analysis and Critical Control Points
+Certified Organic Products
+2023 Best Quality Producer
+Most Preferred Brand 2024
+Excellence in Delivery
+Doğa Kuruyemiş'i yönlendiren ilkeler
+Kuruyemişe olan tutkumuz ve doğal ürünlere olan inancımız, işimizin temelini oluşturur.
+Her üründe aynı kalite ve tazelik standardını korumak, asla taviz vermediğimiz ilkemizdir.
+Müşterilerimizin memnuniyeti bizim için her şeyden önemli. Onların güveni en büyük sermayemiz.
+Doğanın sunduğu en saf lezzetleri, hiçbir katkı maddesi kullanmadan sofralarınıza getiriyoruz.
+Geleneksel yöntemleri modern teknolojiyle birleştirerek sürekli kendimizi geliştiriyoruz.
+Şeffaflık ve dürüstlük, iş ilişkilerimizin ve müşteri güveninin temelidir.
+Geniş ürün yelpazemizi keşfedin ve taze kuruyemişlerimizi deneyin.
+We're here to help and answer any questions you might have
+Örnek Mah., Lezzet Sk. No:10
Fatih/İstanbul, Türkiye
+ Monday - Friday:
+ 09:00 - 18:00
+
+ Saturday:
+ 10:00 - 16:00
+
+ Sunday:
+ Closed
+
Choose your preferred way to reach us
+Follow us on social platforms
+ +Check our frequently asked questions page for quick answers to common inquiries.
+You might find the answer you're looking for without having to wait. Our FAQ section covers topics like:
+Geniş ürün yelpazemizden seçiminizi yapın
+En çok tercih edilen ürünlerimizi keşfedin
+250g • Giresun menşei
+200g • Gaziantep menşei
+300g • İthal
+250g • Yerli
+200g • İthal
+500g • Premium Mix
+300g • Yerli
+400g • Doğal
+Doğa Kuruyemiş'i tercih etmeniz için sebepler
+Ürünlerimiz her gün taze kavrulur. Hiçbir ürünümüz bayatlamaz, her zaman en taze lezzeti sunarız.
+Tüm ürünlerimiz, güvenilir ve sertifikalı tedarikçilerden sağlanır. Kalite garantimiz vardır.
+Siparişleriniz aynı gün hazırlanır ve hızlı kargo ile taze olarak elinize ulaşır.
+Müşterilerimiz hakkımızda ne diyor?
+Merak ettikleriniz hakkında bilgi alın
+