/* SCROLL VIDEO HERO */
body:not(.et-fb):not(.et-bfb) .scroll-video-wrapper {
position: fixed; top: 0; left: 0; width: 100%; height: 100vh; z-index: 999;
}
body.et-fb .scroll-video-wrapper, body.et-bfb .scroll-video-wrapper {
position: relative; height: 100vh; z-index: 1;
}
body:not(.et-fb):not(.et-bfb).video-scroll-locked {
overflow: hidden !important; height: 100vh !important;
}
body:not(.et-fb):not(.et-bfb) .scroll-video-wrapper.video-done {
pointer-events: none; transition: opacity 0.5s ease;
}
.scroll-video-wrapper { background: var(--vs-primary); overflow: hidden; transition: opacity 0.6s ease; }
.scroll-video-wrapper video {
position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
min-width: 100%; min-height: 100%; object-fit: cover;
}
@media (max-width: 767px) {
.scroll-video-wrapper video {
width: 100% !important; height: 100% !important;
min-width: 100% !important; min-height: 100% !important;
object-fit: cover !important;
}
}
.scroll-video-overlay {
position: absolute; top: 0; left: 0; width: 100%; height: 100%;
background: linear-gradient(180deg, rgba(26,10,15,0.15) 0%, rgba(26,10,15,0.5) 100%);
display: flex; flex-direction: column; justify-content: center; align-items: center; z-index: 2;
}
.hero-content {
text-align: center; color: #fff; max-width: 900px; padding: 0 20px;
opacity: 0; transform: translateY(40px) scale(0.95);
transition: all 0.8s cubic-bezier(0.4, 0, 0.2, 1);
}
.hero-content.visible { opacity: 1; transform: translateY(0) scale(1); }
.hero-content.fade-out { opacity: 0; transform: translateY(-60px) scale(0.9); }
.hero-subtitle {
font-family: 'Outfit', sans-serif; font-weight: 300; font-size: clamp(14px, 2.5vw, 22px);
letter-spacing: 8px; text-transform: uppercase; color: rgba(255,255,255,0.85);
margin-bottom: 20px; opacity: 0; transform: translateY(20px); transition: all 0.6s ease 0.2s;
}
.hero-content.visible .hero-subtitle { opacity: 1; transform: translateY(0); }
.hero-title {
font-family: 'Cormorant Garamond', serif; font-weight: 600; font-size: 8vw;
line-height: 1.1; margin: 0; text-shadow: 0 4px 30px rgba(0,0,0,0.3);
}
.hero-title { color: #ffffff; }
.hero-title span { display: block; color: var(--vs-accent); }
.scroll-indicator-wrap {
position: absolute; bottom: 40px; left: 50%; transform: translateX(-50%);
display: flex; flex-direction: column; align-items: center;
color: rgba(255,255,255,0.8); font-family: 'Outfit', sans-serif;
font-size: 11px; letter-spacing: 3px; text-transform: uppercase; transition: opacity 0.4s ease;
}
.scroll-indicator-wrap.hidden { opacity: 0; }
.scroll-mouse {
width: 22px; height: 36px; border: 2px solid rgba(255,255,255,0.5);
border-radius: 11px; margin-bottom: 10px; position: relative;
}
.scroll-mouse::before {
content: ''; position: absolute; top: 6px; left: 50%; transform: translateX(-50%);
width: 3px; height: 6px; background: var(--vs-accent); border-radius: 2px;
animation: scrollPulse 1.5s ease-in-out infinite;
}
@keyframes scrollPulse { 0%, 100% { top: 6px; opacity: 1; } 50% { top: 16px; opacity: 0.3; } }
.video-progress {
position: absolute; bottom: 0; left: 0; height: 3px;
background: linear-gradient(90deg, var(--vs-accent), var(--vs-accent-light)); width: 0%; z-index: 10;
}
.skip-intro-btn {
position: absolute; bottom: 30px; right: 30px; padding: 10px 20px;
background: rgba(255,255,255,0.1); backdrop-filter: blur(10px);
border: 1px solid rgba(255,255,255,0.2); border-radius: 25px;
color: rgba(255,255,255,0.8); font-family: 'Outfit', sans-serif;
font-size: 11px; letter-spacing: 2px; text-transform: uppercase;
cursor: pointer; opacity: 0; transform: translateY(10px); transition: all 0.3s ease; z-index: 20;
}
.skip-intro-btn.visible { opacity: 1; transform: translateY(0); }
.skip-intro-btn:hover { background: rgba(201,168,124,0.3); border-color: var(--vs-accent); color: #fff; }
@media (max-width: 980px) { .hero-title { font-size: 12vw; } .hero-subtitle { font-size: clamp(12px, 2.2vw, 18px); letter-spacing: 5px; } }
@media (max-width: 767px) { .hero-title { font-size: 14vw; } .hero-subtitle { font-size: clamp(11px, 3vw, 16px); letter-spacing: 4px; } .skip-intro-btn { bottom: 20px; right: 20px; padding: 8px 16px; } }
(function() {
if (document.body.classList.contains('et-fb') || document.body.classList.contains('et-bfb') || window.ETBuilderBackend) return;
const wrapper = document.getElementById('scrollVideoWrapper');
if (!wrapper) return;
const video = document.getElementById('heroVideo'),
heroContent = document.getElementById('heroContent'),
progressBar = document.getElementById('videoProgress'),
scrollIndicator = document.getElementById('scrollIndicator'),
skipBtn = document.getElementById('skipBtn');
if (!video) return;
let videoDuration = 0, isReady = false, progress = 0, contentShown = false;
/* false = video is covering the page, true = user scrolled past it */
let isPastVideo = false;
/* total scroll distance the page "consumed" while the video section is active */
let accumulatedScroll = 0;
const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
function lockScroll() { document.body.classList.add('video-scroll-locked'); }
function unlockScroll() { document.body.classList.remove('video-scroll-locked'); }
/* Transition past the video (unlock page scrolling) */
function transitionPast() {
if (isPastVideo) return;
isPastVideo = true;
wrapper.style.opacity = '0';
wrapper.style.pointerEvents = 'none';
unlockScroll();
}
/* Come back to the video when scrolling up to top */
function transitionBack() {
if (!isPastVideo) return;
isPastVideo = false;
wrapper.style.opacity = '1';
wrapper.style.pointerEvents = '';
lockScroll();
}
function updateVideo(p) {
progress = Math.max(0, Math.min(1, p));
if (isReady && videoDuration > 0) video.currentTime = progress * videoDuration;
progressBar.style.width = (progress * 100) + '%';
/* Smooth fade-out in the last 15% of scrub */
if (progress >= 0.85) {
var fadeProgress = (progress - 0.85) / 0.15;
wrapper.style.opacity = String(1 - fadeProgress);
} else {
wrapper.style.opacity = '1';
}
/* Hero text visibility */
if (progress >= 0.45 && progress < 0.85) {
heroContent.classList.add('visible'); heroContent.classList.remove('fade-out'); contentShown = true;
} else if (progress >= 0.85) {
heroContent.classList.add('fade-out'); heroContent.classList.remove('visible');
} else {
heroContent.classList.remove('visible', 'fade-out'); contentShown = false;
}
if (progress > 0.3) scrollIndicator.classList.add('hidden'); else scrollIndicator.classList.remove('hidden');
if (progress > 0.2) skipBtn.classList.add('visible'); else skipBtn.classList.remove('visible');
}
/* Main scroll handler that works both while video is active and after */
function handleWheel(e) {
if (!isReady) return;
let d = e.deltaY;
if (e.deltaMode === 1) d *= 40;
if (e.deltaMode === 2) d *= 800;
if (!isPastVideo) {
/* Video is active: scrub it */
e.preventDefault();
let newProgress = progress + d * 0.0005;
if (newProgress >= 1) {
newProgress = 1;
updateVideo(1);
transitionPast();
return;
}
if (newProgress < 0) newProgress = 0;
updateVideo(newProgress);
} else {
/* Page is scrolling normally. If user is at top and scrolls up, bring video back */
if (window.scrollY <= 0 && d < 0) {
e.preventDefault();
transitionBack();
updateVideo(1);
/* start scrubbing back */
updateVideo(progress + d * 0.0005);
}
}
}
let touchStartY = 0;
function handleTouchStart(e) { if (!isReady) return; touchStartY = e.touches[0].clientY; }
function handleTouchMove(e) {
if (!isReady) return;
const d = touchStartY - e.touches[0].clientY;
touchStartY = e.touches[0].clientY;
if (!isPastVideo) {
e.preventDefault();
let newProgress = progress + d * 0.002;
if (newProgress >= 1) {
newProgress = 1;
updateVideo(1);
transitionPast();
return;
}
if (newProgress < 0) newProgress = 0;
updateVideo(newProgress);
} else {
if (window.scrollY <= 0 && d < 0) {
e.preventDefault();
transitionBack();
updateVideo(1);
updateVideo(progress + d * 0.002);
}
}
}
function handleKeydown(e) {
if (!isReady) return;
if (!isPastVideo) {
if (e.key === 'ArrowDown' || e.key === ' ' || e.key === 'PageDown') { e.preventDefault(); updateVideo(progress + 0.05); if (progress >= 1) transitionPast(); }
else if (e.key === 'ArrowUp' || e.key === 'PageUp') { e.preventDefault(); updateVideo(progress - 0.05); }
else if (e.key === 'Escape' || e.key === 'Enter') { e.preventDefault(); updateVideo(1); transitionPast(); }
}
}
video.addEventListener('loadedmetadata', () => { videoDuration = video.duration; isReady = true; video.currentTime = 0; lockScroll(); });
video.addEventListener('error', () => { wrapper.style.display = 'none'; unlockScroll(); });
if (isMobile) {
video.load();
const enableVideo = () => {
video.play().then(() => video.pause()).catch(() => {});
document.removeEventListener('touchstart', enableVideo);
};
document.addEventListener('touchstart', enableVideo, { once: true });
}
skipBtn.addEventListener('click', () => { updateVideo(1); transitionPast(); });
window.addEventListener('wheel', handleWheel, { passive: false });
window.addEventListener('touchstart', handleTouchStart, { passive: true });
window.addEventListener('touchmove', handleTouchMove, { passive: false });
window.addEventListener('keydown', handleKeydown);
setTimeout(() => { if (!isReady) { wrapper.style.display = 'none'; unlockScroll(); } }, 15000);
lockScroll();
})();
Blumenstadl
Unvergessliche Momente der Liebe
Schenken Sie Ihren Liebsten etwas ganz Besonderes. Unsere handgefertigten Blumenarrangements und liebevoll ausgewählten Geschenke machen den Weltfrauentag zu einem unvergesslichen Erlebnis.
Unsere Kollektion
Weltfrauentag Geschenke
/* ============================================
AJAX FILTER BAR STYLING
============================================ */
.shop-filter-container {
background: rgba(255,255,255,0.03);
border: 1px solid rgba(201,168,124,0.15);
border-radius: 16px;
padding: 35px 40px;
margin-bottom: 50px;
}
.filter-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 25px;
flex-wrap: wrap;
}
.shop-search-wrap {
position: relative;
flex: 0 0 320px;
max-width: 320px;
}
.shop-search-wrap input {
width: 100%;
padding: 16px 20px 16px 50px;
background: rgba(255,255,255,0.05);
border: 1px solid rgba(201,168,124,0.2);
border-radius: 50px;
color: #fff;
font-family: 'Outfit', sans-serif;
font-size: 14px;
transition: all 0.3s ease;
}
.shop-search-wrap input::placeholder {
color: rgba(255,255,255,0.4);
}
.shop-search-wrap input:focus {
outline: none;
border-color: var(--vs-accent);
background: rgba(255,255,255,0.08);
}
.shop-search-wrap .search-icon {
position: absolute;
left: 18px;
top: 50%;
transform: translateY(-50%);
width: 18px;
height: 18px;
color: rgba(255,255,255,0.4);
}
.category-filters {
display: flex;
gap: 10px;
flex-wrap: wrap;
justify-content: center;
}
.category-btn {
padding: 12px 24px;
background: transparent;
border: 1px solid rgba(201,168,124,0.3);
border-radius: 50px;
color: rgba(255,255,255,0.8);
font-family: 'Outfit', sans-serif;
font-size: 12px;
font-weight: 500;
letter-spacing: 1.5px;
text-transform: uppercase;
cursor: pointer;
transition: all 0.3s ease;
}
.category-btn:hover {
border-color: var(--vs-accent);
color: var(--vs-accent);
}
.category-btn.active {
background: var(--vs-accent);
border-color: var(--vs-accent);
color: var(--vs-primary);
}
.sort-row {
display: flex;
align-items: center;
justify-content: center;
margin-top: 25px;
gap: 15px;
}
.sort-select {
padding: 12px 40px 12px 20px;
background: rgba(255,255,255,0.05);
border: 1px solid rgba(201,168,124,0.2);
border-radius: 8px;
color: rgba(255,255,255,0.8);
font-family: 'Outfit', sans-serif;
font-size: 13px;
cursor: pointer;
appearance: none;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='%23c9a87c' viewBox='0 0 16 16'%3E%3Cpath d='M8 11L3 6h10l-5 5z'/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: right 15px center;
}
.sort-select:focus {
outline: none;
border-color: var(--vs-accent);
}
.sort-select option {
background: var(--vs-primary);
color: #fff;
}
.product-count {
text-align: center;
margin: 30px 0;
font-family: 'Outfit', sans-serif;
font-size: 14px;
color: rgba(255,255,255,0.5);
}
.product-count span {
color: var(--vs-accent);
font-weight: 500;
}
.shop-loading {
text-align: center;
padding: 60px 20px;
font-family: 'Outfit', sans-serif;
color: rgba(255,255,255,0.6);
}
.shop-loading::after {
content: '';
display: inline-block;
width: 20px;
height: 20px;
border: 2px solid rgba(201,168,124,0.3);
border-top-color: var(--vs-accent);
border-radius: 50%;
animation: spin 1s linear infinite;
margin-left: 10px;
vertical-align: middle;
}
@keyframes spin {
to { transform: rotate(360deg); }
}
.shop-error {
text-align: center;
padding: 60px 20px;
}
.shop-error h3 {
font-family: 'Cormorant Garamond', serif;
font-size: 28px;
color: #fff;
margin-bottom: 10px;
}
.shop-error p {
font-family: 'Outfit', sans-serif;
font-size: 14px;
color: rgba(255,255,255,0.5);
}
@media (max-width: 980px) {
.shop-filter-container { padding: 25px; }
.filter-row { flex-direction: column; gap: 20px; }
.shop-search-wrap { flex: 1; max-width: 100%; width: 100%; }
.category-filters { justify-content: center; }
}
@media (max-width: 600px) {
.category-btn { padding: 10px 16px; font-size: 10px; }
}
/* ============================================
WOOCOMMERCE SHOP STYLING - Dark Theme
============================================ */
.valentinstag-shop ul.products,
.valentinstag-shop .products {
display: grid !important;
grid-template-columns: repeat(4, 1fr) !important;
gap: 25px !important;
padding: 0 !important;
margin: 0 !important;
list-style: none !important;
}
@media (max-width: 1200px) {
.valentinstag-shop ul.products,
.valentinstag-shop .products { grid-template-columns: repeat(3, 1fr) !important; }
}
@media (max-width: 980px) {
.valentinstag-shop ul.products,
.valentinstag-shop .products { grid-template-columns: repeat(2, 1fr) !important; }
}
@media (max-width: 480px) {
.valentinstag-shop ul.products,
.valentinstag-shop .products { grid-template-columns: 1fr !important; }
}
.valentinstag-shop ul.products li.product,
.valentinstag-shop .products .product {
background: rgba(255,255,255,0.02) !important;
border-radius: 12px !important;
overflow: hidden !important;
border: 1px solid rgba(201,168,124,0.1) !important;
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1) !important;
padding: 0 !important;
margin: 0 !important;
width: 100% !important;
float: none !important;
}
.valentinstag-shop ul.products li.product:hover,
.valentinstag-shop .products .product:hover {
transform: translateY(-8px) !important;
border-color: rgba(201,168,124,0.3) !important;
box-shadow: 0 20px 40px rgba(0,0,0,0.3) !important;
}
.valentinstag-shop ul.products li.product .et_shop_image,
.valentinstag-shop ul.products li.product a img,
.valentinstag-shop .products .product img {
width: 100% !important;
aspect-ratio: 1 !important;
object-fit: cover !important;
transition: transform 0.5s ease !important;
margin: 0 !important;
display: block !important;
}
.valentinstag-shop ul.products li.product:hover img {
transform: scale(1.08) !important;
}
.valentinstag-shop ul.products li.product .onsale {
position: absolute !important;
top: 12px !important;
left: 12px !important;
padding: 5px 14px !important;
background: var(--vs-accent) !important;
color: var(--vs-primary) !important;
font-family: 'Outfit', sans-serif !important;
font-size: 10px !important;
font-weight: 500 !important;
letter-spacing: 1px !important;
text-transform: uppercase !important;
border-radius: 4px !important;
line-height: 1.4 !important;
min-height: auto !important;
min-width: auto !important;
}
.valentinstag-shop ul.products li.product h2,
.valentinstag-shop ul.products li.product .woocommerce-loop-product__title,
.valentinstag-shop .products .product h2 {
font-family: 'Cormorant Garamond', serif !important;
font-size: 20px !important;
font-weight: 500 !important;
color: #fff !important;
margin: 0 0 10px 0 !important;
padding: 20px 20px 0 20px !important;
line-height: 1.3 !important;
text-align: left !important;
}
.valentinstag-shop ul.products li.product h2 a {
color: inherit !important;
text-decoration: none !important;
transition: color 0.3s ease !important;
}
.valentinstag-shop ul.products li.product h2 a:hover {
color: var(--vs-accent) !important;
}
.valentinstag-shop ul.products li.product .price,
.valentinstag-shop ul.products li.product .woocommerce-Price-amount,
.valentinstag-shop .products .product .price {
font-family: 'Outfit', sans-serif !important;
font-size: 18px !important;
font-weight: 500 !important;
color: var(--vs-accent) !important;
padding: 0 20px 15px 20px !important;
display: block !important;
text-align: left !important;
}
.valentinstag-shop ul.products li.product .price del {
color: rgba(255,255,255,0.35) !important;
font-size: 14px !important;
margin-right: 8px !important;
}
.valentinstag-shop ul.products li.product .price ins {
text-decoration: none !important;
font-weight: 500 !important;
}
.valentinstag-shop ul.products li.product .button,
.valentinstag-shop ul.products li.product .add_to_cart_button,
.valentinstag-shop ul.products li.product .product_type_simple,
.valentinstag-shop ul.products li.product .product_type_variable,
.valentinstag-shop .products .product .button {
display: block !important;
width: calc(100% - 40px) !important;
margin: 0 20px 20px 20px !important;
padding: 14px 20px !important;
background: transparent !important;
border: 1px solid rgba(201,168,124,0.35) !important;
border-radius: 6px !important;
color: #fff !important;
font-family: 'Outfit', sans-serif !important;
font-size: 11px !important;
font-weight: 500 !important;
letter-spacing: 1.5px !important;
text-transform: uppercase !important;
text-align: center !important;
cursor: pointer !important;
transition: all 0.3s ease !important;
text-decoration: none !important;
}
.valentinstag-shop ul.products li.product .button:hover,
.valentinstag-shop ul.products li.product .add_to_cart_button:hover,
.valentinstag-shop ul.products li.product .product_type_variable:hover {
background: var(--vs-accent) !important;
border-color: var(--vs-accent) !important;
color: var(--vs-primary) !important;
}
.valentinstag-shop ul.products li.product .added_to_cart {
display: block !important;
width: calc(100% - 40px) !important;
margin: -10px 20px 20px 20px !important;
padding: 10px !important;
background: rgba(201,168,124,0.2) !important;
border-radius: 4px !important;
color: var(--vs-accent) !important;
font-family: 'Outfit', sans-serif !important;
font-size: 10px !important;
letter-spacing: 1px !important;
text-transform: uppercase !important;
text-align: center !important;
text-decoration: none !important;
}
.valentinstag-shop ul.products li.product .star-rating {
margin: 0 20px 10px 20px !important;
color: var(--vs-accent) !important;
}
.valentinstag-shop .et_pb_shop ul.products li,
.valentinstag-shop ul.products li {
margin-bottom: 0 !important;
}
.valentinstag-shop .et_pb_shop::after,
.valentinstag-shop .et_pb_shop::before,
.valentinstag-shop::after,
.valentinstag-shop::before,
.valentinstag-shop ul.products::after,
.valentinstag-shop ul.products::before {
display: none !important;
content: none !important;
}
/* Fix: Divi leere Elemente und Clearfix verstecken */
.valentinstag-shop ul.products br,
.valentinstag-shop ul.products .clearfix {
display: none !important;
}
.valentinstag-shop ul.products li.product:empty,
.valentinstag-shop ul.products li:not(.product) {
display: none !important;
}
/* Fix: Divi Shop Image Wrapper */
.valentinstag-shop .et_shop_image {
position: relative !important;
overflow: hidden !important;
}
.valentinstag-shop .et_shop_image img {
width: 100% !important;
aspect-ratio: 1 !important;
object-fit: cover !important;
display: block !important;
}
/* Fix: Divi column clearfix im Grid entfernen */
.valentinstag-shop ul.products {
overflow: visible !important;
}
.valentinstag-shop ul.products > * {
clear: none !important;
float: none !important;
}
.valentinstag-shop .woocommerce-info {
background: rgba(255,255,255,0.03) !important;
border: 1px solid rgba(201,168,124,0.15) !important;
color: rgba(255,255,255,0.7) !important;
padding: 40px !important;
text-align: center !important;
border-radius: 12px !important;
font-family: 'Outfit', sans-serif !important;
}
(function() {
if (document.body.classList.contains('et-fb') || document.body.classList.contains('et-bfb') || window.ETBuilderBackend) return;
var API_BASE = '/wp-json/wc/store/v1';
var PER_PAGE = 12;
var currentCategory = 'all';
var currentCategoryId = null;
var searchTerm = '';
var currentSort = 'recommended';
var currentPage = 1;
var totalPages = 1;
var isLoading = false;
var useAjax = false;
var categories = [];
var searchInput = document.getElementById('shopSearch');
var categoryContainer = document.getElementById('categoryFilters');
var sortSelect = document.getElementById('shopSort');
var productGrid = document.getElementById('productList');
var productCount = document.getElementById('productCount');
var loadMoreWrap = document.getElementById('loadMoreWrap');
var loadMoreBtn = document.getElementById('loadMoreBtn');
var ajaxGrid = document.getElementById('ajaxProductGrid');
function formatPrice(priceStr, currencySymbol, minorUnit) {
if (!priceStr) return '';
var price = parseInt(priceStr, 10) / Math.pow(10, minorUnit || 2);
var formatted = price.toFixed(minorUnit || 2).replace('.', ',');
return currencySymbol ? (formatted + ' ' + currencySymbol) : (formatted + ' \u20ac');
}
function renderProduct(product) {
var image = product.images && product.images.length > 0 ? product.images[0].src : '';
var imageAlt = product.images && product.images.length > 0 ? (product.images[0].alt || product.name) : product.name;
var prices = product.prices || {};
var currencySymbol = prices.currency_symbol || '\u20ac';
var minorUnit = prices.currency_minor_unit || 2;
var regularPrice = prices.regular_price || '0';
var salePrice = prices.sale_price || '0';
var onSale = prices.sale_price && prices.sale_price !== prices.regular_price && parseInt(prices.sale_price) < parseInt(prices.regular_price);
var catClasses = (product.categories || []).map(function(c){ return 'product_cat-' + c.slug; }).join(' ');
var permalink = product.permalink || '#';
var productId = product.id;
var priceHtml;
if (onSale) {
priceHtml = '' + formatPrice(regularPrice, currencySymbol, minorUnit) + ' ' + formatPrice(salePrice, currencySymbol, minorUnit) + '';
} else {
priceHtml = formatPrice(regularPrice, currencySymbol, minorUnit);
}
var saleTag = onSale ? 'Angebot' : '';
var isVariable = product.type && product.type === 'variable';
var buttonHtml;
if (isVariable) {
buttonHtml = 'Variante w\u00e4hlen';
} else {
buttonHtml = 'In den Warenkorb';
}
return '' +
saleTag +
'' +
'
' +
'' +
' ';
}
async function fetchProducts(page, append) {
if (isLoading) return;
isLoading = true;
if (!append) {
productGrid.innerHTML = '';
} else {
productGrid.innerHTML = products.map(renderProduct).join('');
}
}
productCount.textContent = totalItems;
loadMoreWrap.style.display = (page < totalPages) ? 'block' : 'none';
if (window.jQuery) { jQuery(document.body).trigger('wc_fragment_refresh'); }
} catch (err) {
console.error('Shop Ajax Error:', err);
if (!append) {
productGrid.innerHTML = '';
}
}
isLoading = false;
}
async function loadCategories() {
try {
var response = await fetch(API_BASE + '/products/categories?per_page=50&orderby=name');
if (!response.ok) throw new Error('Categories API Error');
categories = await response.json();
var withProducts = categories.filter(function(c){ return c.count > 0; });
var buttonsHtml = '';
withProducts.forEach(function(cat) {
buttonsHtml += '';
});
categoryContainer.innerHTML = buttonsHtml;
categoryContainer.querySelectorAll('.category-btn').forEach(function(btn) {
btn.addEventListener('click', function() {
categoryContainer.querySelectorAll('.category-btn').forEach(function(b){ b.classList.remove('active'); });
this.classList.add('active');
currentCategory = this.dataset.category;
currentCategoryId = this.dataset.catid || null;
currentPage = 1;
fetchProducts(1, false);
});
});
} catch (err) {
console.error('Categories Load Error:', err);
}
}
function initClientSideFilter() {
var diviShop = document.querySelector('.valentinstag-shop.et_pb_shop, .et_pb_shop.valentinstag-shop');
if (diviShop) diviShop.style.display = '';
if (ajaxGrid) ajaxGrid.style.display = 'none';
if (loadMoreWrap) loadMoreWrap.style.display = 'none';
categoryContainer.innerHTML =
'' +
'' +
'' +
'' +
'';
function filterClientSide() {
var products = document.querySelectorAll('.valentinstag-shop .product, .valentinstag-shop li.product');
var visible = 0;
products.forEach(function(product) {
var title = product.querySelector('h2, .woocommerce-loop-product__title');
var titleText = title ? title.textContent.toLowerCase() : '';
var catMatch = currentCategory === 'all';
if (!catMatch) {
var cl = product.className.toLowerCase();
catMatch = cl.includes(currentCategory) || cl.includes('product_cat-' + currentCategory);
}
var searchMatch = searchTerm === '' || titleText.includes(searchTerm);
if (catMatch && searchMatch) { product.style.display = ''; visible++; }
else { product.style.display = 'none'; }
});
productCount.textContent = visible;
}
function sortClientSide(sortBy) {
var container = document.querySelector('.valentinstag-shop ul.products, .valentinstag-shop .products');
if (!container) return;
var prods = Array.from(container.querySelectorAll('.product, li.product'));
prods.sort(function(a, b) {
var pa = parseFloat((a.querySelector('.price .amount, .price') || {textContent:''}).textContent.replace(/[^0-9.,]/g, '').replace(',', '.')) || 0;
var pb = parseFloat((b.querySelector('.price .amount, .price') || {textContent:''}).textContent.replace(/[^0-9.,]/g, '').replace(',', '.')) || 0;
var na = (a.querySelector('h2, .woocommerce-loop-product__title') || {textContent:''}).textContent;
var nb = (b.querySelector('h2, .woocommerce-loop-product__title') || {textContent:''}).textContent;
switch(sortBy) {
case 'price-asc': return pa - pb;
case 'price-desc': return pb - pa;
case 'name': return na.localeCompare(nb);
default: return 0;
}
});
prods.forEach(function(p) { container.appendChild(p); });
}
categoryContainer.querySelectorAll('.category-btn').forEach(function(btn) {
btn.addEventListener('click', function() {
categoryContainer.querySelectorAll('.category-btn').forEach(function(b) { b.classList.remove('active'); });
this.classList.add('active');
currentCategory = this.dataset.category;
filterClientSide();
});
});
if (searchInput) {
searchInput.addEventListener('input', function() {
searchTerm = this.value.toLowerCase();
filterClientSide();
});
}
if (sortSelect) {
sortSelect.addEventListener('change', function() {
sortClientSide(this.value);
});
}
filterClientSide();
}
async function init() {
try {
var testResponse = await fetch(API_BASE + '/products?per_page=1');
if (testResponse.ok) {
useAjax = true;
var diviShop = document.querySelector('.valentinstag-shop.et_pb_shop, .et_pb_shop.valentinstag-shop');
if (diviShop) diviShop.style.display = 'none';
if (ajaxGrid) ajaxGrid.style.display = '';
await loadCategories();
await fetchProducts(1, false);
var searchTimeout;
if (searchInput) {
searchInput.addEventListener('input', function() {
clearTimeout(searchTimeout);
searchTerm = this.value.trim();
searchTimeout = setTimeout(function() {
currentPage = 1;
fetchProducts(1, false);
}, 300);
});
}
if (sortSelect) {
sortSelect.addEventListener('change', function() {
currentSort = this.value;
currentPage = 1;
fetchProducts(1, false);
});
}
if (loadMoreBtn) {
loadMoreBtn.addEventListener('click', function() {
currentPage++;
fetchProducts(currentPage, true);
});
}
} else {
throw new Error('Store API not available');
}
} catch (err) {
console.log('Store API nicht verf\u00fcgbar, verwende Client-Side Filter.', err);
initClientSideFilter();
}
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}
})();
Empfohlen
Preis: Niedrig zu Hoch
Preis: Hoch zu Niedrig
Neueste zuerst
Alphabetisch
0 Produkte
' + product.name + '
' + '' + priceHtml + '' + buttonHtml + 'Laden...
';
}
var url = API_BASE + '/products?per_page=' + PER_PAGE + '&page=' + page;
if (searchTerm) { url += '&search=' + encodeURIComponent(searchTerm); }
if (currentCategoryId) { url += '&category=' + currentCategoryId; }
switch (currentSort) {
case 'price-asc': url += '&orderby=price&order=asc'; break;
case 'price-desc': url += '&orderby=price&order=desc'; break;
case 'newest': url += '&orderby=date&order=desc'; break;
case 'name': url += '&orderby=title&order=asc'; break;
default: url += '&orderby=popularity&order=desc'; break;
}
try {
var response = await fetch(url);
if (!response.ok) throw new Error('API Error: ' + response.status);
totalPages = parseInt(response.headers.get('X-WP-TotalPages') || '1', 10);
var totalItems = parseInt(response.headers.get('X-WP-Total') || '0', 10);
var products = await response.json();
if (append) {
productGrid.innerHTML += products.map(renderProduct).join('');
} else {
if (products.length === 0) {
productGrid.innerHTML = 'Keine Produkte gefunden
Versuchen Sie einen anderen Suchbegriff oder eine andere Kategorie.
Fehler beim Laden
Bitte versuchen Sie es erneut.
-

Adventzauber
€ 85,00inkl. MwSt.
zzgl. Versandkosten
-

Zirbenlüfter
€ 35,00 – € 45,00inkl. MwSt.
zzgl. Versandkosten
Schnelle Lieferung
Lieferung am gleichen Tag
Sichere Zahlung
SSL-verschlüsselt
Handgefertigt
Jedes Stück ein Unikat
Persönliche Beratung
Wir helfen Ihnen gerne
Nachricht senden
Füllen Sie das Formular aus – wir melden uns schnellstmöglich bei Ihnen.
/* DIVI CONTACT FORM STYLING */
.styled-contact-form .et_pb_contact {
background: #ffffff; border-radius: 20px; padding: 50px;
border: 1px solid rgba(0,0,0,0.05);
box-shadow: 0 10px 40px rgba(26,10,15,0.06);
}
@media (max-width: 600px) {
.styled-contact-form .et_pb_contact { padding: 30px 20px; }
}
.styled-contact-form .et_pb_contact_form .et_pb_contact_field {
margin-bottom: 20px;
}
.styled-contact-form .et_pb_contact_form label {
font-family: 'Outfit', sans-serif !important; font-weight: 500 !important;
font-size: 12px !important; letter-spacing: 1.5px !important;
text-transform: uppercase !important; color: var(--vs-primary) !important;
padding-bottom: 8px !important;
}
.styled-contact-form .et_pb_contact_form .input,
.styled-contact-form .et_pb_contact_form textarea,
.styled-contact-form .et_pb_contact_form select {
padding: 14px 18px !important;
font-family: 'Outfit', sans-serif !important; font-size: 15px !important;
color: #333 !important; background: var(--vs-light) !important;
border: 2px solid transparent !important; border-radius: 10px !important;
outline: none !important; transition: all 0.3s ease !important;
box-sizing: border-box !important;
}
.styled-contact-form .et_pb_contact_form .input:focus,
.styled-contact-form .et_pb_contact_form textarea:focus,
.styled-contact-form .et_pb_contact_form select:focus {
border-color: var(--vs-accent) !important; background: #fff !important;
box-shadow: 0 0 0 4px rgba(201,168,124,0.1) !important;
}
.styled-contact-form .et_pb_contact_form textarea {
min-height: 140px !important; resize: vertical !important;
}
/* Submit Button */
.styled-contact-form .et_pb_contact_submit {
display: inline-flex !important; align-items: center !important;
justify-content: center !important; width: 100% !important;
padding: 16px 40px !important;
background: linear-gradient(135deg, var(--vs-accent), var(--vs-accent-light)) !important;
border: none !important; border-radius: 12px !important;
cursor: pointer !important;
font-family: 'Outfit', sans-serif !important; font-weight: 600 !important;
font-size: 14px !important; letter-spacing: 2px !important;
text-transform: uppercase !important; color: var(--vs-primary) !important;
transition: all 0.4s ease !important; position: relative !important;
}
.styled-contact-form .et_pb_contact_submit:hover {
transform: translateY(-2px) !important;
box-shadow: 0 8px 25px rgba(201,168,124,0.4) !important;
}
/* Success message */
.styled-contact-form .et-pb-contact-message {
background: #ffffff !important; border-radius: 16px !important;
padding: 30px !important; text-align: center !important;
border-left: 4px solid var(--vs-accent) !important;
}
.styled-contact-form .et-pb-contact-message p {
font-family: 'Outfit', sans-serif !important; color: var(--vs-primary) !important;
}
/* Captcha styling */
.styled-contact-form .et_pb_contact_right {
text-align: center !important;
}
.styled-contact-form .et_pb_contact .et_pb_contact_field_half {
width: 48% !important;
}
@media (max-width: 600px) {
.styled-contact-form .et_pb_contact .et_pb_contact_field_half {
width: 100% !important;
}
}
.opening-hours {
display: flex; justify-content: center; gap: 40px; flex-wrap: wrap;
padding: 30px; background: var(--vs-primary);
border-radius: 16px; text-align: center;
}
.opening-hours-item h4 {
font-family: 'Outfit', sans-serif; font-weight: 500; font-size: 14px;
letter-spacing: 3px; text-transform: uppercase; color: var(--vs-accent);
margin: 0 0 6px;
}
.opening-hours-item p {
font-family: 'Outfit', sans-serif; font-weight: 300; font-size: 17px;
color: rgba(255,255,255,0.8); margin: 0;
}
Sonderöffnungszeiten zum Weltfrauentag
Montag bis Freitag – 08:00 bis 12:00 und 14:30 bis 18:00samstag – 08:00 bis 12:00
Sonntag – 08:00 bis 12:00
/* ================================================
FARBEN & FONTS - HIER ANPASSEN!
Ändere die Werte unten um das gesamte Design
global zu verändern.
================================================ */
:root {
/* Primärfarbe (dunkel) */
--vs-primary: #1a0a0f;
/* Akzentfarbe (gold) */
--vs-accent: #c9a87c;
/* Akzentfarbe hell */
--vs-accent-light: #e8d5b7;
/* Hintergrund hell */
--vs-light: #f8f5f2;
/* Footer dunkel */
--vs-footer-bg: #0f0609;
}
@import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@400;500;600;700&family=Outfit:wght@300;400;500;600&display=swap');
body { font-family: 'Outfit', sans-serif; }
h1,h2,h3,h4,h5,h6 { font-family: 'Cormorant Garamond', serif; }
::-webkit-scrollbar { width: 8px; }
::-webkit-scrollbar-track { background: var(--vs-primary); }
::-webkit-scrollbar-thumb { background: var(--vs-accent); border-radius: 4px; }
::selection { background: var(--vs-accent); color: var(--vs-primary); }
a { transition: color .3s; }









