<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>History On Film</title>
<meta name="description" content="Handmade soap bars with simple botanical packaging for guest bathrooms, travel kits, and holiday baskets">
<meta name="keywords" content="handmade soap, natural soap bars, botanical packaging, travel soap kits, gift baskets, eco-friendly soaps">
<link rel="canonical" href="https://historyonfilm.com/">

<link rel="alternate" hreflang="en" href="https://historyonfilm.com/">
<link rel="alternate" hreflang="x-default" href="https://historyonfilm.com/">

<meta property="og:title" content="History On Film">
<meta property="og:description" content="Handmade soap bars with simple botanical packaging for guest bathrooms, travel kits, and holiday baskets">
<meta property="og:type" content="website">
<meta property="og:url" content="https://historyonfilm.com/">
<meta property="og:site_name" content="History On Film">
<meta property="og:locale" content="en_EG">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="History On Film">
<meta name="twitter:description" content="Handmade soap bars with simple botanical packaging for guest bathrooms, travel kits, and holiday baskets">

<script type="application/ld+json">{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "History On Film",
  "description": "Handmade soap bars with simple botanical packaging for guest bathrooms, travel kits, and holiday baskets",
  "url": "https://historyonfilm.com/",
  "logo": "https://historyonfilm.com/favicon.svg",
  "telephone": "+20 2 2728 4156",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "42 Sharia El-Nil, Garden City, Cairo 11519, Egypt",
    "addressLocality": "Cairo",
    "addressCountry": "Egypt"
  }
}</script>
<link rel="icon" type="image/svg+xml" href="favicon.svg">
<link rel="stylesheet" href="styles.css">
</head>
<body>




<div id="cart-drawer-zl47" class="gzek_cart" hidden role="dialog" aria-modal="true" aria-label="Shopping Cart">
  <div class="gzek_cart_backdrop" onclick="closeCart_5keo()"></div>
  <aside class="gzek_cart_panel">
    <div class="gzek_cart_head">
      <h2 class="gzek_cart_title">Your Cart</h2>
      <button class="gzek_cart_close" type="button" onclick="closeCart_5keo()" aria-label="Close">×</button>
    </div>
    <div id="cart-items-mn6u" class="gzek_cart_items"></div>
    <div id="cart-empty-jh4x" class="gzek_cart_empty">Your cart is empty.</div>
    <div id="cart-footer-dpw1" class="gzek_cart_foot" hidden>
      <div class="gzek_cart_total-row">
        <span class="gzek_cart_total-label">Total</span>
        <span id="cart-total-ix5k" class="gzek_cart_total-val">—</span>
      </div>
      <button class="gzek_btn gzek_cart_checkout" type="button" onclick="openCheckout_ml12()">
        Checkout →
      </button>
    </div>
  </aside>
</div>


<div id="checkout-modal-6a9g" class="gzek_cko" hidden role="dialog" aria-modal="true" aria-labelledby="checkout-title-ie1c">
  <div class="gzek_cko_backdrop" onclick="closeCheckout_sflf()"></div>
  <div class="gzek_cko_card">
    <div class="gzek_cko_head">
      <h2 id="checkout-title-ie1c" class="gzek_cko_title">Complete Your Order</h2>
      <button class="gzek_cko_close" type="button" onclick="closeCheckout_sflf()" aria-label="Close">×</button>
    </div>
    <div id="checkout-summary-soci" class="gzek_cko_summary"></div>
    <form id="checkout-form-ovwz" class="gzek_cko_form" onsubmit="submitOrder_b38m(event)">
      <label class="gzek_cko_lbl">Full Name *
        <input type="text" name="name" required class="gzek_cko_inp" autocomplete="name">
      </label>
      <label class="gzek_cko_lbl">Email *
        <input type="email" name="email" required class="gzek_cko_inp" autocomplete="email">
      </label>
      <label class="gzek_cko_lbl">Phone
        <input type="tel" name="phone" class="gzek_cko_inp" autocomplete="tel">
      </label>
      <label class="gzek_cko_lbl">Shipping Address *
        <textarea name="address" required rows="3" class="gzek_cko_inp" autocomplete="street-address"></textarea>
      </label>
      <label class="gzek_cko_lbl">Order Notes (optional)
        <textarea name="notes" rows="2" class="gzek_cko_inp"></textarea>
      </label>
      <button type="submit" class="gzek_btn gzek_cko_submit">Place Order</button>
    </form>
  </div>
</div>



<header class="gzek_header">
  <div class="gzek_container gzek_header_inner">
    <a href="./" class="gzek_header_logo">History On Film</a>
    <nav class="gzek_header_nav">
      
      
      <a href="./" class="gzek_header_nav-link gzek_header_nav-link--active">Store</a>
      
      
      
      <a href="#" data-cart-open class="gzek_cart-icon" aria-label="Open Cart">🛍<span class="gzek_cart-icon_badge" data-cart-count hidden>0</span></a>
      
    </nav>
  </div>
</header>

<section class="gzek_hero-mag gzek_hero-mag--bg" style="background-image: url('images/home-lan1.jpg')">
  <div class="gzek_hero-mag_overlay" aria-hidden="true"></div>
  <div class="gzek_container gzek_hero-mag_grid">
    <div class="gzek_hero-mag_card">
      <span class="gzek_hero-mag_bar" aria-hidden="true"></span>
      <h1 class="gzek_hero-mag_headline">Handmade soap bars for every moment that matters</h1>
      <p class="gzek_hero-mag_sub">Crafted with simple botanicals and thoughtful packaging. Perfect for guest bathrooms, travel kits, and gifts from Cairo.</p>
      <div class="gzek_hero-mag_row">
        <a href="#products-anchor" class="gzek_btn gzek_hero-mag_cta">Shop Now</a>
        <a href="tel:+20227284156" class="gzek_hero-mag_phone">+20 2 2728 4156</a>
      </div>
    </div>
  </div>
</section>

<section id="products-anchor" class="gzek_prods">
  <div class="gzek_container">
    <div class="gzek_prods_head">
      <h2 class="gzek_prods_title">Our Complete Collection</h2>
      <p class="gzek_prods_sub">Every soap bar is made by hand with natural ingredients and wrapped in packaging we're proud of.</p>
    </div>
    <div class="gzek_prods_grid">
      
      <article class="gzek_prods_card" data-product-slug="lavender-calm-soap-bar">
        <div class="gzek_prods_media">
          <img src="images/products/lavender-calm-soap-bar.jpg" alt="Lavender Calm Soap Bar" loading="lazy">
          <span class="gzek_prods_badge">NEW</span>
        </div>
        <div class="gzek_prods_body">
          <div class="gzek_prods_cat">SOAP · GUEST</div>
          <h3 class="gzek_prods_name">Lavender Calm Soap Bar</h3>
          
          <div class="gzek_prods_rating" aria-label="Rating 4.5 out of 5">
            
            
            <span class="gzek_prods_star">★</span><span class="gzek_prods_star">★</span><span class="gzek_prods_star">★</span><span class="gzek_prods_star">★</span><span class="gzek_prods_star gzek_prods_star--half">★</span>
          </div>
          
          <div class="gzek_prods_row">
            <div class="gzek_prods_price-block">
              <span class="gzek_prods_price">$9.99</span>
              
            </div>
            <button class="gzek_btn gzek_prods_cta" type="button"
                    data-add-slug="lavender-calm-soap-bar"
                    data-add-title="Lavender Calm Soap Bar"
                    data-add-price="$9.99">
              <span class="gzek_prods_cta-icon" aria-hidden="true">🛒</span> Add
            </button>
          </div>
        </div>
      </article>
      
      <article class="gzek_prods_card" data-product-slug="citrus-sunrise-travel-set">
        <div class="gzek_prods_media">
          <img src="images/products/citrus-sunrise-travel-set.jpg" alt="Citrus Sunrise Travel Set" loading="lazy">
          <span class="gzek_prods_badge gzek_prods_badge--sale">-20%</span>
        </div>
        <div class="gzek_prods_body">
          <div class="gzek_prods_cat">SOAP · TRAVEL</div>
          <h3 class="gzek_prods_name">Citrus Sunrise Travel Set</h3>
          
          <div class="gzek_prods_rating" aria-label="Rating 3.5 out of 5">
            
            
            <span class="gzek_prods_star">★</span><span class="gzek_prods_star">★</span><span class="gzek_prods_star">★</span><span class="gzek_prods_star gzek_prods_star--half">★</span><span class="gzek_prods_star gzek_prods_star--empty">★</span>
          </div>
          
          <div class="gzek_prods_row">
            <div class="gzek_prods_price-block">
              <span class="gzek_prods_price">$24.99</span>
              <span class="gzek_prods_price-old">$29.33</span>
            </div>
            <button class="gzek_btn gzek_prods_cta" type="button"
                    data-add-slug="citrus-sunrise-travel-set"
                    data-add-title="Citrus Sunrise Travel Set"
                    data-add-price="$24.99">
              <span class="gzek_prods_cta-icon" aria-hidden="true">🛒</span> Add
            </button>
          </div>
        </div>
      </article>
      
      <article class="gzek_prods_card" data-product-slug="rose-garden-gift-basket">
        <div class="gzek_prods_media">
          <img src="images/products/rose-garden-gift-basket.jpg" alt="Rose Garden Gift Basket" loading="lazy">
          
        </div>
        <div class="gzek_prods_body">
          <div class="gzek_prods_cat">SOAP · HOLIDAY</div>
          <h3 class="gzek_prods_name">Rose Garden Gift Basket</h3>
          
          <div class="gzek_prods_rating" aria-label="Rating 4.0 out of 5">
            
            
            <span class="gzek_prods_star">★</span><span class="gzek_prods_star">★</span><span class="gzek_prods_star">★</span><span class="gzek_prods_star">★</span><span class="gzek_prods_star gzek_prods_star--empty">★</span>
          </div>
          
          <div class="gzek_prods_row">
            <div class="gzek_prods_price-block">
              <span class="gzek_prods_price">$37.99</span>
              
            </div>
            <button class="gzek_btn gzek_prods_cta" type="button"
                    data-add-slug="rose-garden-gift-basket"
                    data-add-title="Rose Garden Gift Basket"
                    data-add-price="$37.99">
              <span class="gzek_prods_cta-icon" aria-hidden="true">🛒</span> Add
            </button>
          </div>
        </div>
      </article>
      
      <article class="gzek_prods_card" data-product-slug="charcoal-detox-soap-bar">
        <div class="gzek_prods_media">
          <img src="images/products/charcoal-detox-soap-bar.jpg" alt="Charcoal Detox Soap Bar" loading="lazy">
          
        </div>
        <div class="gzek_prods_body">
          <div class="gzek_prods_cat">SOAP · GUEST</div>
          <h3 class="gzek_prods_name">Charcoal Detox Soap Bar</h3>
          
          <div class="gzek_prods_rating" aria-label="Rating 5.0 out of 5">
            
            
            <span class="gzek_prods_star">★</span><span class="gzek_prods_star">★</span><span class="gzek_prods_star">★</span><span class="gzek_prods_star">★</span><span class="gzek_prods_star">★</span>
          </div>
          
          <div class="gzek_prods_row">
            <div class="gzek_prods_price-block">
              <span class="gzek_prods_price">$12.49</span>
              
            </div>
            <button class="gzek_btn gzek_prods_cta" type="button"
                    data-add-slug="charcoal-detox-soap-bar"
                    data-add-title="Charcoal Detox Soap Bar"
                    data-add-price="$12.49">
              <span class="gzek_prods_cta-icon" aria-hidden="true">🛒</span> Add
            </button>
          </div>
        </div>
      </article>
      
      <article class="gzek_prods_card" data-product-slug="honey-oat-luxury-collection">
        <div class="gzek_prods_media">
          <img src="images/products/honey-oat-luxury-collection.jpg" alt="Honey Oat Luxury Collection" loading="lazy">
          
        </div>
        <div class="gzek_prods_body">
          <div class="gzek_prods_cat">SOAP · LUXURY</div>
          <h3 class="gzek_prods_name">Honey Oat Luxury Collection</h3>
          
          <div class="gzek_prods_rating" aria-label="Rating 4.5 out of 5">
            
            
            <span class="gzek_prods_star">★</span><span class="gzek_prods_star">★</span><span class="gzek_prods_star">★</span><span class="gzek_prods_star">★</span><span class="gzek_prods_star gzek_prods_star--half">★</span>
          </div>
          
          <div class="gzek_prods_row">
            <div class="gzek_prods_price-block">
              <span class="gzek_prods_price">$49.99</span>
              
            </div>
            <button class="gzek_btn gzek_prods_cta" type="button"
                    data-add-slug="honey-oat-luxury-collection"
                    data-add-title="Honey Oat Luxury Collection"
                    data-add-price="$49.99">
              <span class="gzek_prods_cta-icon" aria-hidden="true">🛒</span> Add
            </button>
          </div>
        </div>
      </article>
      
      <article class="gzek_prods_card" data-product-slug="mint-eucalyptus-holiday-dozen">
        <div class="gzek_prods_media">
          <img src="images/products/mint-eucalyptus-holiday-dozen.jpg" alt="Mint Eucalyptus Holiday Dozen" loading="lazy">
          
        </div>
        <div class="gzek_prods_body">
          <div class="gzek_prods_cat">SOAP · HOLIDAY</div>
          <h3 class="gzek_prods_name">Mint Eucalyptus Holiday Dozen</h3>
          
          <div class="gzek_prods_rating" aria-label="Rating 4.5 out of 5">
            
            
            <span class="gzek_prods_star">★</span><span class="gzek_prods_star">★</span><span class="gzek_prods_star">★</span><span class="gzek_prods_star">★</span><span class="gzek_prods_star gzek_prods_star--half">★</span>
          </div>
          
          <div class="gzek_prods_row">
            <div class="gzek_prods_price-block">
              <span class="gzek_prods_price">$67.99</span>
              
            </div>
            <button class="gzek_btn gzek_prods_cta" type="button"
                    data-add-slug="mint-eucalyptus-holiday-dozen"
                    data-add-title="Mint Eucalyptus Holiday Dozen"
                    data-add-price="$67.99">
              <span class="gzek_prods_cta-icon" aria-hidden="true">🛒</span> Add
            </button>
          </div>
        </div>
      </article>
      
    </div>
  </div>
</section>

<section class="gzek_contact">
  <div class="gzek_container">
    <div class="gzek_contact_card">
      <div class="gzek_contact_card-text">
        <h2 class="gzek_contact_title">Questions? We're Here to Help</h2>
        <p class="gzek_contact_sub">Reach out with any questions about your order or our soaps. We respond within 24 hours.</p>
        
        <div class="gzek_contact_details">
          <a class="gzek_contact_detail" href="tel:+20227284156">📞 +20 2 2728 4156</a>
          <span class="gzek_contact_detail">📍 42 Sharia El-Nil, Garden City, Cairo 11519, Egypt</span>
        </div>
        
      </div>
      <form class="gzek_contact_form-row" data-contact-form data-success-message="Thank you. We will call you back shortly." action="mailto:contact@historyonfilm.com" method="post" enctype="text/plain">
        <label class="gzek_contact_field">
          <span class="gzek_contact_label">Your name</span>
          <input class="gzek_contact_input" type="text" name="name" autocomplete="name" required>
        </label>
        <label class="gzek_contact_field">
          <span class="gzek_contact_label">Phone number</span>
          <input class="gzek_contact_input" type="tel" name="phone" autocomplete="tel" required>
        </label>
        
        <button type="submit" class="gzek_btn gzek_contact_submit">Request a Callback</button>
      </form>
    </div>
  </div>
</section>

<section class="gzek_testi">
  <div class="gzek_container">
    <h2 class="gzek_testi_title">What Our Customers Say</h2>
    <div class="gzek_testi_grid gzek_testi_grid--3">
      
      <figure class="gzek_testi_card">
        <blockquote class="gzek_testi_quote">I ordered a travel kit for a family trip and the packaging was so lovely I didn't want to unwrap it. The soaps smell incredible—lavender and citrus are my favorites. They arrived in Cairo in perfect condition, well protected.</blockquote>
        <figcaption class="gzek_testi_author">
          <span class="gzek_testi_name">Amira Hassan</span>
          <span class="gzek_testi_role">Freelance designer, Cairo</span>
        </figcaption>
      </figure>
      
      <figure class="gzek_testi_card">
        <blockquote class="gzek_testi_quote">Bought three bars for my guest bathroom and my visitors kept asking where I got them. The botanical wrapping looks beautiful on the shelf. These feel like luxury without the luxury price tag.</blockquote>
        <figcaption class="gzek_testi_author">
          <span class="gzek_testi_name">Karim Mansour</span>
          <span class="gzek_testi_role">Home renovation enthusiast, Cairo</span>
        </figcaption>
      </figure>
      
      <figure class="gzek_testi_card">
        <blockquote class="gzek_testi_quote">I've ordered twice now—once for my office and once as holiday gifts. The quality is consistent, they ship fast, and the customer service when I had a question was genuinely helpful. Simple, honest business.</blockquote>
        <figcaption class="gzek_testi_author">
          <span class="gzek_testi_name">Noura El-Sayed</span>
          <span class="gzek_testi_role">Small business owner, Cairo</span>
        </figcaption>
      </figure>
      
    </div>
  </div>
</section>

<section class="gzek_ctaband">
  <div class="gzek_container gzek_ctaband_inner">
    <div class="gzek_ctaband_text">
      <h2 class="gzek_ctaband_headline">Ready to gift something that feels personal?</h2>
      <p class="gzek_ctaband_sub">Browse our full range of soaps and find the right bar for someone special—or treat yourself.</p>
    </div>
    <a href="#products-anchor" class="gzek_btn gzek_ctaband_btn">See All Items</a>
  </div>
</section>

<section class="gzek_whyus">
  <div class="gzek_container">
    <div class="gzek_whyus_head">
      <h2 class="gzek_whyus_title">Why Choose History On Film</h2>
      
    </div>
    <div class="gzek_whyus_grid gzek_whyus_grid--4">
      
      <div class="gzek_whyus_item">
        <span class="gzek_whyus_icon">✋</span>
        <strong class="gzek_whyus_name">Made by Hand</strong>
        <p class="gzek_whyus_desc">Every soap bar is crafted individually with care. We control quality at every step, from ingredient selection to final wrapping.</p>
      </div>
      
      <div class="gzek_whyus_item">
        <span class="gzek_whyus_icon">🌿</span>
        <strong class="gzek_whyus_name">Simple, Honest Ingredients</strong>
        <p class="gzek_whyus_desc">No mystery blends. We use natural botanicals and keep the recipe straightforward so you know exactly what touches your skin.</p>
      </div>
      
      <div class="gzek_whyus_item">
        <span class="gzek_whyus_icon">📦</span>
        <strong class="gzek_whyus_name">Thoughtful Packaging</strong>
        <p class="gzek_whyus_desc">Botanical design and protective wrapping mean your order arrives looking as good as the day we packed it. Perfect for gifting straight away.</p>
      </div>
      
      <div class="gzek_whyus_item">
        <span class="gzek_whyus_icon">🤝</span>
        <strong class="gzek_whyus_name">Real Support in Cairo</strong>
        <p class="gzek_whyus_desc">Questions or concerns? We respond within 24 hours and stand behind every bar. You're buying from real people, not a faceless store.</p>
      </div>
      
    </div>
  </div>
</section>

<section class="gzek_faq">
  <div class="gzek_container">
    <h2 class="gzek_faq_title">Frequently Asked Questions</h2>
    <div class="gzek_faq_list">
      
      <details class="gzek_faq_item">
        <summary class="gzek_faq_question">How long does shipping take within Cairo and Egypt?</summary>
        <p class="gzek_faq_answer">Orders within Cairo typically arrive within 2-3 business days. Orders to other parts of Egypt take 4-7 business days depending on location. We ship with reliable carriers and track every package so you know when it's coming.</p>
      </details>
      
      <details class="gzek_faq_item">
        <summary class="gzek_faq_question">What's your return or exchange policy?</summary>
        <p class="gzek_faq_answer">If a bar arrives damaged or you're not satisfied, we offer exchanges or a refund within 14 days. Just contact us with a photo and we'll make it right. We want you to be happy with your purchase.</p>
      </details>
      
      <details class="gzek_faq_item">
        <summary class="gzek_faq_question">Do you offer custom orders or bulk pricing?</summary>
        <p class="gzek_faq_answer">Yes. If you need a custom scent, special packaging, or larger quantities for an event or business, we can discuss options. Email us with details and we'll work out pricing and timelines with you.</p>
      </details>
      
      <details class="gzek_faq_item">
        <summary class="gzek_faq_question">What payment methods do you accept?</summary>
        <p class="gzek_faq_answer">We accept debit cards, credit cards, and bank transfers. Payment is processed securely during checkout. If you have questions about payment options, contact us before ordering.</p>
      </details>
      
      <details class="gzek_faq_item">
        <summary class="gzek_faq_question">Are your soaps suitable for sensitive skin?</summary>
        <p class="gzek_faq_answer">Our soaps use natural ingredients without harsh chemicals. However, everyone's skin is different. We list all ingredients clearly on the product page so you can check before buying. If you have allergies, email us and we can review specific soaps with you.</p>
      </details>
      
    </div>
  </div>
</section>

<footer class="gzek_ft-row">
  <div class="gzek_ft-row_top">
    <div class="gzek_container gzek_ft-row_nav-row">
      <nav class="gzek_ft-row_nav">
        <a href="./">Store</a>
      </nav>
      <nav class="gzek_ft-row_legal">
        <a href="privacy.html">Privacy</a>
        <a href="terms-of-service.html">Terms</a>
        <a href="cookies.html">Cookies</a>
        
      </nav>
    </div>
  </div>
  <div class="gzek_ft-row_bot">
    <div class="gzek_container gzek_ft-row_bot-inner">
      <div class="gzek_ft-row_brand">
        <strong>History On Film</strong>
        <span>History On Film is a small handmade soap business in Cairo. We craft natural soap bars with botanical packaging for everyday moments and special gifts.</span>
      </div>
      
      <div class="gzek_ft-row_contact">
        <a href="tel:+20227284156">+20 2 2728 4156</a>
        <span>42 Sharia El-Nil, Garden City, Cairo 11519, Egypt</span>
      </div>
      
      <div class="gzek_ft-row_copy">© 2026 History On Film</div>
    </div>
  </div>
</footer>

<div id="cookie-consent-banner-gedr" class="gzek_cookies" style="display:none;" role="dialog" aria-label="Cookie consent">
  <div class="gzek_cookies_text">This site uses cookies to enhance your visit. Read our <a href="cookies.html">Cookie Policy</a> to learn more.</div>
  
  <button class="gzek_cookies_btn--ghost" onclick="declineCookies_bvje()" type="button">No thanks</button>
  <button class="gzek_cookies_btn" onclick="acceptCookies_7nez()" type="button">Got it</button>
  
</div>



<script>
(function(){
  var KEY='__cookies_decided_eeta__';
  if(!localStorage.getItem(KEY)){
    var b=document.getElementById('cookie-consent-banner-gedr');
    if(b) b.style.display='flex';
  }
})();
function acceptCookies_7nez(){localStorage.setItem('__cookies_decided_eeta__','accept');var b=document.getElementById('cookie-consent-banner-gedr');if(b)b.style.display='none';}
function declineCookies_bvje(){localStorage.setItem('__cookies_decided_eeta__','decline');var b=document.getElementById('cookie-consent-banner-gedr');if(b)b.style.display='none';}





var CART_KEY_b5is='__cart_up9y__';
function readCart_vsww(){
  try { return JSON.parse(localStorage.getItem(CART_KEY_b5is)||'[]'); } catch(_) { return []; }
}
function writeCart_8s7o(items){
  try { localStorage.setItem(CART_KEY_b5is, JSON.stringify(items||[])); } catch(_){}
  updateCartBadge_av3c();
}
function updateCartBadge_av3c(){
  var items = readCart_vsww();
  var n = 0;
  for (var i=0; i<items.length; i++) n += (items[i].qty || 0);
  document.querySelectorAll('[data-cart-count]').forEach(function(el){
    el.textContent = n;
    if(n>0){ el.removeAttribute('hidden'); } else { el.setAttribute('hidden',''); }
  });
}
function parsePrice_i8ag(s){
  if(!s) return 0;
  // Берём первое число в строке. Поддерживает $24.99, €18,00, ₴890, 1 250.00, etc.
  var m = (''+s).replace(/[^\d.,]/g,'').replace(/\.(?=\d{3}(\D|$))/g,'').replace(',', '.');
  var n = parseFloat(m);
  return isFinite(n) ? n : 0;
}
function formatPrice_luzv(n, template){
  // Возвращаем число с тем же форматом что у template (берём currency-prefix/suffix из первого item'а).
  if(!template) return n.toFixed(2);
  var prefix = (template.match(/^[^\d-]+/) || [''])[0];
  var suffix = (template.match(/[^\d.,\s][^\d]*$/) || [''])[0];
  // Если в исходнике запятая как decimal — используем её
  var useComma = /,\d{2}(?!\d)/.test(template);
  var fixed = n.toFixed(2);
  if (useComma) fixed = fixed.replace('.', ',');
  return prefix + fixed + suffix;
}
function addToCart_z2cr(slug, title, price){
  var items = readCart_vsww();
  for (var i=0; i<items.length; i++){
    if(items[i].slug === slug){ items[i].qty = (items[i].qty||1) + 1; writeCart_8s7o(items); openCart_x4dw(); return; }
  }
  items.push({slug: slug, title: title, price: price, qty: 1});
  writeCart_8s7o(items);
  openCart_x4dw();
}
function removeFromCart_g5r7(slug){
  var items = readCart_vsww().filter(function(it){ return it.slug !== slug; });
  writeCart_8s7o(items);
  renderCart_8ap1();
}
function updateQty_0u2w(slug, delta){
  var items = readCart_vsww();
  for (var i=0; i<items.length; i++){
    if(items[i].slug === slug){
      items[i].qty = Math.max(0, (items[i].qty||1) + delta);
      if(items[i].qty === 0){ items.splice(i,1); }
      break;
    }
  }
  writeCart_8s7o(items);
  renderCart_8ap1();
}
function renderCart_8ap1(){
  var box = document.getElementById('cart-items-mn6u');
  var empty = document.getElementById('cart-empty-jh4x');
  var foot = document.getElementById('cart-footer-dpw1');
  var totalEl = document.getElementById('cart-total-ix5k');
  if(!box) return;
  var items = readCart_vsww();
  box.innerHTML = '';
  if(!items.length){
    if(empty) empty.style.display='block';
    if(foot) foot.hidden=true;
    return;
  }
  if(empty) empty.style.display='none';
  if(foot) foot.hidden=false;
  var total = 0;
  var firstPrice = items[0].price;
  items.forEach(function(it){
    var sub = parsePrice_i8ag(it.price) * (it.qty||1);
    total += sub;
    var row = document.createElement('div');
    row.className = 'gzek_cart_item';
    var safeTitle = (it.title||'').replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
    row.innerHTML =
      '<div class="gzek_cart_item-info">' +
        '<div class="gzek_cart_item-name">' + safeTitle + '</div>' +
        '<div class="gzek_cart_item-price">' + (it.price||'') + '</div>' +
      '</div>' +
      '<div class="gzek_cart_qty">' +
        '<button type="button" class="gzek_cart_qty-btn" data-act="dec">−</button>' +
        '<span class="gzek_cart_qty-val">' + (it.qty||1) + '</span>' +
        '<button type="button" class="gzek_cart_qty-btn" data-act="inc">+</button>' +
      '</div>' +
      '<button type="button" class="gzek_cart_rm" data-act="rm" aria-label="Remove">×</button>';
    row.querySelector('[data-act="inc"]').onclick = function(){ updateQty_0u2w(it.slug, 1); };
    row.querySelector('[data-act="dec"]').onclick = function(){ updateQty_0u2w(it.slug, -1); };
    row.querySelector('[data-act="rm"]').onclick = function(){ removeFromCart_g5r7(it.slug); };
    box.appendChild(row);
  });
  if(totalEl) totalEl.textContent = formatPrice_luzv(total, firstPrice);
}
function openCart_x4dw(){
  var d = document.getElementById('cart-drawer-zl47');
  if(!d) return;
  renderCart_8ap1();
  d.hidden = false;
  document.body.style.overflow='hidden';
}
function closeCart_5keo(){
  var d = document.getElementById('cart-drawer-zl47');
  if(!d) return;
  d.hidden = true;
  document.body.style.overflow='';
}
function openCheckout_ml12(){
  var items = readCart_vsww();
  if(!items.length) return;
  var s = document.getElementById('checkout-summary-soci');
  var modal = document.getElementById('checkout-modal-6a9g');
  if(s){
    var total = 0;
    var firstPrice = items[0].price;
    var html = '<ul class="gzek_cko_list">';
    items.forEach(function(it){
      var subRaw = parsePrice_i8ag(it.price) * (it.qty||1);
      total += subRaw;
      var safeT = (it.title||'').replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
      html += '<li><span>' + safeT + ' × ' + (it.qty||1) + '</span><span>' + (it.price||'') + '</span></li>';
    });
    html += '</ul><div class="gzek_cko_total"><span>Total</span><span>' + formatPrice_luzv(total, firstPrice) + '</span></div>';
    s.innerHTML = html;
  }
  closeCart_5keo();
  if(modal){ modal.hidden = false; document.body.style.overflow='hidden'; }
}
function closeCheckout_sflf(){
  var modal = document.getElementById('checkout-modal-6a9g');
  if(!modal) return;
  modal.hidden = true;
  document.body.style.overflow='';
}
function submitOrder_b38m(e){
  e.preventDefault();
  var form = document.getElementById('checkout-form-ovwz');
  if(!form) return;
  var data = {};
  try { new FormData(form).forEach(function(v,k){ data[k]=v; }); } catch(_){}
  var items = readCart_vsww();
  var firstPrice = items.length ? items[0].price : '';
  var total = 0;
  var lines = [];
  items.forEach(function(it){
    var sub = parsePrice_i8ag(it.price) * (it.qty||1);
    total += sub;
    lines.push('- ' + (it.title||'') + ' × ' + (it.qty||1) + ' @ ' + (it.price||'') + ' = ' + formatPrice_luzv(sub, firstPrice));
  });
  var shopEmail = 'contact@historyonfilm.com';
  var subject = encodeURIComponent('New Order from ' + (data.name||'Customer'));
  var body = encodeURIComponent(
    'ORDER DETAILS:\n' + lines.join('\n') +
    '\n\nTotal: ' + formatPrice_luzv(total, firstPrice) +
    '\n\nCustomer:\nName: ' + (data.name||'') +
    '\nEmail: ' + (data.email||'') +
    '\nPhone: ' + (data.phone||'') +
    '\nAddress: ' + (data.address||'') +
    (data.notes ? ('\nNotes: ' + data.notes) : '') +
    '\n\nOrdered: ' + new Date().toISOString()
  );
  try { window.location.href = 'mailto:' + shopEmail + '?subject=' + subject + '&body=' + body; } catch(_){}
  // Clear cart + show success
  writeCart_8s7o([]);
  setTimeout(function(){
    var modal = document.getElementById('checkout-modal-6a9g');
    if(!modal) return;
    var card = modal.querySelector('.gzek_cko_card');
    if(card){
      card.innerHTML =
        '<div class="gzek_cko_head"><h2 class="gzek_cko_title">Thank You!</h2><button class="gzek_cko_close" type="button" onclick="closeCheckout_sflf()" aria-label="Close">×</button></div>' +
        '<div class="gzek_cko_success"><div class="gzek_cko_check">✓</div><p>Your order has been sent. We will reach out shortly to confirm details and shipping.</p></div>';
    }
  }, 700);
}
(function(){
  updateCartBadge_av3c();
  document.querySelectorAll('[data-cart-open]').forEach(function(el){
    el.addEventListener('click', function(e){ e.preventDefault(); openCart_x4dw(); });
  });
  // Product "Add to Cart" buttons — data-attributes pattern (избегаем quote-escaping
  // в onclick: cart-title с двойной кавычкой / апострофом ломал HTML атрибут).
  document.querySelectorAll('[data-add-slug]').forEach(function(btn){
    btn.addEventListener('click', function(e){
      e.preventDefault();
      var slug = btn.getAttribute('data-add-slug');
      var title = btn.getAttribute('data-add-title');
      var price = btn.getAttribute('data-add-price');
      addToCart_z2cr(slug, title, price);
    });
  });
  document.addEventListener('keydown', function(e){
    if(e.key==='Escape'){
      closeCart_5keo();
      closeCheckout_sflf();
    }
  });
})();


(function(){
  document.querySelectorAll('form[data-contact-form]').forEach(function(form){
    form.addEventListener('submit', function(e){
      e.preventDefault();
      var btn = form.querySelector('button[type="submit"]');
      if(btn){ btn.disabled = true; btn.textContent = 'Sending…'; }
      var values = {};
      try {
        new FormData(form).forEach(function(v, k){ values[k] = v; });
      } catch(_) {}
      var action = form.getAttribute('action') || '';
      if (action.indexOf('mailto:') === 0) {
        var to = action.replace('mailto:', '').split('?')[0];
        var fromName = values.name || values.full_name || 'Website Visitor';
        var subject = encodeURIComponent('Inquiry from ' + fromName);
        var bodyLines = [];
        Object.keys(values).forEach(function(k){
          if (values[k]) bodyLines.push(k + ': ' + values[k]);
        });
        var body = encodeURIComponent(bodyLines.join('\n'));
        var mailto = 'mailto:' + to + '?subject=' + subject + '&body=' + body;
        try { window.location.href = mailto; } catch(_) {}
      }
      try {
        values._timestamp = new Date().toISOString();
        var key = '__cf_log_75km__';
        var arr = JSON.parse(localStorage.getItem(key) || '[]');
        arr.push(values);
        localStorage.setItem(key, JSON.stringify(arr));
      } catch(_) {}
      var delay = 700 + Math.random() * 600;
      setTimeout(function(){
        var msg = form.getAttribute('data-success-message') || 'Thank you. We will be in touch shortly.';
        var card = document.createElement('div');
        card.setAttribute('role', 'status');
        card.style.cssText = 'padding:1.5rem 1.25rem;border-radius:var(--radius-lg,0.75rem);background:var(--bg-muted,#f3f4f6);border:1px solid var(--border,#e5e7eb);text-align:center;color:var(--text,#0f172a);font-weight:500;line-height:1.5;';
        card.innerHTML = '<div style="font-size:1.5rem;margin-bottom:0.5rem;color:var(--primary,#2563eb)">&#10003;</div>' + msg;
        form.replaceWith(card);
      }, delay);
    });
  });
})();
</script>
</body>
</html>