PageSourceSearch

https://zucchinibreadrecipes.org/about

html zucchinibreadrecipes.org collected 2026-10-03 01:27:38 UTC 43,715 bytes, 1,104 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en" dir="ltr">
3<head>
4  <meta charset="UTF-8">
5<meta name="viewport" content="width=device-width, initial-scale=1.0">
6
7
8
9<title>About Us | Zucchini Bread Recipes</title>
10
11
12
13
14
15
16
17
18
19
20
21
22<meta name="description" content="Learn about our mission, team, and passion for cooking.">
23
24
25<!-- Favicon - Dynamic from admin -->
26
27<link rel="icon" type="image/svg+xml" href="/public/images/favicon.svg">
28<link rel="apple-touch-icon" href="/public/images/apple-touch-icon.png">
29
30
31<!-- Open Graph -->
32<meta property="og:title" content="About Us | Zucchini Bread Recipes">
33<meta property="og:description" content="Learn about our mission, team, and passion for cooking.">
34<meta property="og:type" content="website">
35<meta property="og:site_name" content="Zucchini Bread Recipes">
36<meta property="og:locale" content="en_US">
37
38
39<meta property="og:url" content="https://zucchinibreadrecipes.org/about">
40
41<!-- Twitter Card -->
42<meta name="twitter:card" content="summary_large_image">
43<meta name="twitter:title" content="About Us | Zucchini Bread Recipes">
44<meta name="twitter:description" content="Learn about our mission, team, and passion for cooking.">
45
46
47<!-- Canonical URL -->
48<link rel="canonical" href="https://zucchinibreadrecipes.org/about">
49
50<!-- Pagination: rel next/prev -->
51
52
53<!-- Tailwind CSS (compiled) -->
54<link rel="stylesheet" href="/public/css/styles.css">
55
56<!-- Ad Container Styles (rendered once per page) -->
57<style>
58  .ad-container {
59    overflow: visible;
60    box-sizing: border-box;
61    display: block;
62    width: 100%;
63    text-align: center;
64  }
65  .ad-container > * {
66    max-width: 100%;
67  }
68  .ad-container ins,
69  .ad-container iframe,
70  .ad-container img {
71    max-width: 100%;
72    height: auto;
73  }
74  .ad-container ins.adsbygoogle {
75    display: block !important;
76    min-width: 300px;
77    margin: 0 auto;
78  }
79  /* Reserve vertical space to reduce CLS while AdSense loads */
80  .ad-container[data-lazy-load="true"] {
81    min-height: 250px;
82  }
83  .ad-home-hero {
84    min-height: 250px !important;
85    background: linear-gradient(to right, #f8f9fa, #e9ecef);
86    border-radius: 8px;
87    padding: 16px;
88  }
89  .ad-home-hero ins.adsbygoogle {
90    min-height: 200px;
91  }
92  .ad-home-before-categories {
93    min-height: 150px !important;
94  }
95  @media (max-width: 640px) {
96    .ad-container ins.adsbygoogle {
97      min-width: 250px;
98    }
99    .ad-container[data-lazy-load="true"] {
100      min-height: 200px;
101    }
102  }
103</style>
104
105<!-- Google Fonts -->
106<link rel="preconnect" href="https://fonts.googleapis.com">
107<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
108<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Poppins:wght@600;700&display=swap&subset=latin" rel="stylesheet">
109
110<!-- HTMX -->
111<script src="https://unpkg.com/[email protected]" defer></script>
111
112
113<!-- Alpine.js -->
114<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/cdn.min.js"></script>
114
115
116
117
118
119
120
121
122<!-- Custom Header Code -->
123<script src="https://d3u598arehftfk.cloudfront.net/prebid_hb_15746_32638.js" async> </script>
123
124<meta name="p:domain_verify" content="b3b0adba95a06be8e940edd656ed2fca"/>
125<!-- Google tag (gtag.js) -->
vendor: 64 bytes, lines 125-126
125
126<script async src="https://www.googletagmanager.com/gtag/js?id=
126G-37Y5JGV2BW
vendor: 12 bytes, line 126
126"></script>
127<script>
128  
vendor: 134 bytes, lines 128-132
128window.dataLayer = window.dataLayer || [];
129  function gtag(){dataLayer.push(arguments);}
130  gtag('js', new Date());
131
132  gtag('config', '
132G-37Y5JGV2BW
vendor: 4 bytes, line 132
132');
133</script>
133
134
135
136
137<!-- RSS/Atom Feed Discovery -->
138<link rel="alternate" type="application/rss+xml" title="Zucchini Bread Recipes - Recipes" href="https://zucchinibreadrecipes.org/rss.xml">
139<link rel="alternate" type="application/rss+xml" title="Zucchini Bread Recipes - Articles" href="https://zucchinibreadrecipes.org/feed.xml">
140<link rel="alternate" type="application/atom+xml" title="Zucchini Bread Recipes - Atom" href="https://zucchinibreadrecipes.org/atom.xml">
141
142<!-- Organization JSON-LD (site-wide identity) -->
143<script type="application/ld+json">
144{"@context":"https://schema.org","@type":"Organization","name":"Zucchini Bread Recipes","url":"https://zucchinibreadrecipes.org","description":"Discover irresistible zucchini bread recipes with step-by-step guides. From classic loaves to creative twists, satisfy your cravings and bake moist, perfect bread every time.","contactPoint":{"@type":"ContactPoint","email":"[email protected]","contactType":"customer service"},"sameAs":["https://www.pinterest.com/loulitafranjer/"]}
145</script>
145
146
147<!-- WebSite JSON-LD with SearchAction -->
148<script type="application/ld+json">
149{"@context":"https://schema.org","@type":"WebSite","name":"Zucchini Bread Recipes","url":"https://zucchinibreadrecipes.org","potentialAction":{"@type":"SearchAction","target":"https://zucchinibreadrecipes.org/search?q={search_term_string}","query-input":"required name=search_term_string"}}
150</script>
150
151  
152
153
154  <style>
155  .breadcrumb__item:not(:last-child)::after {
156    content: '>>';
157    padding: 0 0.5rem;
158  }
159  .line-clamp-3 {
160    display: -webkit-box;
161    -webkit-line-clamp: 3;
162    line-clamp: 3;
163    -webkit-box-orient: vertical;
164    overflow: hidden;
165  }
166</style>
167  
167<script type="application/ld+json">
168{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://zucchinibreadrecipes.org/"},{"@type":"ListItem","position":2,"name":"About Us"}]}
169</script>
169
170  
171</head>
172<body class="min-h-screen bg-white text-gray-900 flex flex-col">
173  
174
175
176
177
178  <!-- Giveaway Marquee -->
179  
180
181  <!-- Header -->
182  <!-- Body Scripts (GTM noscript + custom body code) -->
183
184
185
186
187
188<!-- Header matching original Next.js design -->
189<style>[x-cloak] { display: none !important; }</style>
190<header x-data="{ mobileMenuOpen: false }" class="relative bg-white border-b border-gray-200 box-border w-full">
191  <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
192    <nav class="flex items-center justify-between py-4">
193      
194      <!-- Desktop Navigation - Left side -->
195      <ul class="items-center hidden lg:flex gap-x-8 ml-4">
196        
197        
198          
199            <li>
200              <a href="/" title="Home" class="relative text-gray-700 font-bold text-sm uppercase tracking-wide transition-all duration-300 hover:text-orange-700 hover:scale-105" >
201                HOME
202              </a>
203            </li>
204          
205            <li>
206              <a href="/recipes" title="Recipes" class="relative text-gray-700 font-bold text-sm uppercase tracking-wide transition-all duration-300 hover:text-orange-700 hover:scale-105" >
207                RECIPES
208              </a>
209            </li>
210          
211            <li>
212              <a href="/categories" title="Categories" class="relative text-gray-700 font-bold text-sm uppercase tracking-wide transition-all duration-300 hover:text-orange-700 hover:scale-105" >
213                CATEGORIES
214              </a>
215            </li>
216          
217            <li>
218              <a href="/articles" title="Articles" class="relative text-gray-700 font-bold text-sm uppercase tracking-wide transition-all duration-300 hover:text-orange-700 hover:scale-105" >
219                ARTICLES
220              </a>
221            </li>
222          
223            <li>
224              <a href="/about" title="About" class="relative text-gray-700 font-bold text-sm uppercase tracking-wide transition-all duration-300 hover:text-orange-700 hover:scale-105" >
225                ABOUT
226              </a>
227            </li>
228          
229            <li>
230              <a href="/contact" title="Contact" class="relative text-gray-700 font-bold text-sm uppercase tracking-wide transition-all duration-300 hover:text-orange-700 hover:scale-105" >
231                CONTACT
232              </a>
233            </li>
234          
235        
236      </ul>
237
238      <!-- Logo - Dynamic from admin settings -->
239      <a href="/" title="Zucchini Bread Recipes" class="flex items-center flex-shrink-0 mr-4 gap-3">
240        
241        <div class="flex flex-col items-start">
242          <span class="font-serif text-xl sm:text-2xl lg:text-3xl font-bold text-gray-900 leading-none">
243            Bread &amp; Zest
244          </span>
245          
246            <span class="text-xs text-gray-500 mt-0.5">Where Every Zucchini Gets Its Zest</span>
247          
248        </div>
249      </a>
250
251      <!-- Mobile Navigation Button -->
252      <button 
253        @click="mobileMenuOpen = !mobileMenuOpen"
254        class="lg:hidden p-2 rounded-lg hover:bg-gray-100 transition-colors"
255        aria-label="Toggle menu"
256      >
257        <svg class="h-6 w-6 text-gray-700" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
258          <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
259        </svg>
260      </button>
261    </nav>
262  </div>
263  
264  <!-- Mobile Navigation Menu -->
265  <div 
266    x-cloak
267    x-show="mobileMenuOpen"
268    @click.away="mobileMenuOpen = false"
269    x-transition:enter="transition ease-out duration-200"
270    x-transition:enter-start="opacity-0 -translate-y-1"
271    x-transition:enter-end="opacity-100 translate-y-0"
272    x-transition:leave="transition ease-in duration-150"
273    x-transition:leave-start="opacity-100 translate-y-0"
274    x-transition:leave-end="opacity-0 -translate-y-1"
275    class="lg:hidden border-t border-gray-200 bg-white"
276  >
277    <div class="px-4 py-4 space-y-3">
278      
279        
280          <a href="/" class="block text-gray-700 font-bold text-sm uppercase tracking-wide hover:text-orange-700 py-2" >Home</a>
281        
282          <a href="/recipes" class="block text-gray-700 font-bold text-sm uppercase tracking-wide hover:text-orange-700 py-2" >Recipes</a>
283        
284          <a href="/categories" class="block text-gray-700 font-bold text-sm uppercase tracking-wide hover:text-orange-700 py-2" >Categories</a>
285        
286          <a href="/articles" class="block text-gray-700 font-bold text-sm uppercase tracking-wide hover:text-orange-700 py-2" >Articles</a>
287        
288          <a href="/about" class="block text-gray-700 font-bold text-sm uppercase tracking-wide hover:text-orange-700 py-2" >About</a>
289        
290          <a href="/contact" class="block text-gray-700 font-bold text-sm uppercase tracking-wide hover:text-orange-700 py-2" >Contact</a>
291        
292      
293    </div>
294  </div>
295</header>
296
297
298  <!-- Main Content -->
299  <main class="flex-grow">
300        <!-- Page Header - Matching RecipeHero.tsx about style -->
301    <section class="bg-stone-100 py-8 px-4 md:px-6">
302      <div class="container mx-auto max-w-7xl">
303        <div class="flex flex-col md:flex-row md:justify-between">
304          <div class="flex-1 space-y-6">
305            <!-- Breadcrumbs -->
306            <nav>
307              <ol class="breadcrumb flex flex-wrap items-center text-[19.2px] font-normal">
308                <li class="breadcrumb__item">
309                  <a href="/" class="text-[#c64118] font-bold no-underline hover:underline">Home</a>
310                </li>
311                <li class="breadcrumb__item"><span class="font-bold">About</span></li>
312              </ol>
313            </nav>
314            
315            <h1 class="text-4xl md:text-5xl font-bold text-gray-900 leading-tight">About</h1>
316            
317          </div>
318          
319          <!-- Icon -->
320          <div class="hidden md:block md:flex-shrink-0">
321            <svg class="w-40 h-40 text-blue-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
322              <path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
323            </svg>
324          </div>
325        </div>
326      </div>
327    </section>
328
329    <!-- About Cards Section (from CMS) -->
330    
331    
332
333    <!-- About Content -->
334    <section class="py-12 px-4 md:px-6">
335      <div class="container mx-auto max-w-4xl">
336        <div class="prose prose-lg max-w-none">
337          
338            <h2 class="text-3xl font-bold text-gray-900 mb-6">Welcome to Zucchini Bread Recipes</h2>
339            
340            <p class="text-gray-700 text-[1.2rem] leading-relaxed mb-6">
341              We're passionate about bringing you the best recipes from around the world. Our mission is to make cooking accessible, enjoyable, and delicious for everyone—from beginners to experienced home chefs.
342            </p>
343            
344            <h3 class="text-2xl font-bold text-gray-900 mt-10 mb-4">Our Story</h3>
345            <p class="text-gray-700 text-[1.2rem] leading-relaxed mb-6">
346              What started as a simple passion for cooking has grown into a community of food lovers sharing recipes, tips, and culinary adventures. Every recipe on our site is carefully tested and crafted to ensure you get the best results in your kitchen.
347            </p>
348            
349            <h3 class="text-2xl font-bold text-gray-900 mt-10 mb-4">What We Offer</h3>
350            <ul class="text-gray-700 text-[1.2rem] leading-relaxed space-y-3 mb-6">
351              <li><strong>Easy-to-Follow Recipes:</strong> Step-by-step instructions that anyone can follow</li>
352              <li><strong>Diverse Cuisines:</strong> From comfort food to exotic dishes from around the world</li>
353              <li><strong>Helpful Tips:</strong> Expert advice to improve your cooking skills</li>
354              <li><strong>Community:</strong> A place where food lovers come together</li>
355            </ul>
356            
357            <h3 class="text-2xl font-bold text-gray-900 mt-10 mb-4">Get in Touch</h3>
358            <p class="text-gray-700 text-[1.2rem] leading-relaxed">
359              We'd love to hear from you! Whether you have a question, suggestion, or just want to say hello, feel free to <a href="/contact" class="text-[#c64118] hover:underline">contact us</a>.
360            </p>
361          
362        </div>
363      </div>
364    </section>
365
366    <!-- Team Section (if authors exist) -->
367    
368
369    <!-- Newsletter -->
370
371
372<!-- Newsletter Subscription Card - Single Responsive Design -->
373<div class="rounded-2xl overflow-hidden shadow-md" style="background: #faf9f7; border: 1px solid #e8e4dc;">
374  <div class="p-5 sm:p-6 lg:p-8">
375    <!-- Header -->
376    <div class="text-center mb-5">
377      <div class="inline-flex items-center justify-center w-12 h-12 rounded-xl mb-4" style="background: #eef5f0;">
378        
379        <!-- Default: mail icon -->
380        <svg class="w-5 h-5" style="color: #2d6a4f;
380" fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24">
381          <path stroke-linecap="round" stroke-linejoin="round" d="M21.75 6.75v10.5a2.25 2.25 0 01-2.25 2.25h-15a2.25 2.25 0 01-2.25-2.25V6.75m19.5 0A2.25 2.25 0 0019.5 4.5h-15a2.25 2.25 0 00-2.25 2.25m19.5 0v.243a2.25 2.25 0 01-1.07 1.916l-7.5 4.615a2.25 2.25 0 01-2.36 0L3.32 8.91a2.25 2.25 0 01-1.07-1.916V6.75"/>
382        </svg>
383        
384      </div>
385      <h3 class="text-lg sm:text-xl font-bold mb-2" style="color: #1a1a1a;">Get Delicious Recipes Weekly</h3>
386      <p class="text-sm sm:text-base leading-relaxed" style="color: #666;">Join 25,000+ home cooks getting our best recipes straight to their inbox.</p>
387    </div>
388    
389    <!-- Form -->
390    <form
391      id="newsletter-m4rc3wmfo"
392      hx-post="/api/subscribe"
393      hx-swap="outerHTML"
394      hx-indicator="#newsletter-m4rc3wmfo-indicator"
395      class="space-y-3 max-w-sm mx-auto"
396    >
397      <input type="hidden" name="source" value="homepage">
398      <input
399        type="text"
400        name="name" 
401        placeholder="Your name"
402        required
403        class="w-full px-4 py-3 sm:py-3.5 rounded-xl text-sm focus:outline-none focus:ring-2 transition-shadow"
404        style="background: #fff; border: 1px solid #e0dcd4; color: #333; --tw-ring-color: #2d6a4f;"
405      >
406      <input 
407        type="email" 
408        name="email" 
409        placeholder="[email protected]"
410        required
411        class="w-full px-4 py-3 sm:py-3.5 rounded-xl text-sm focus:outline-none focus:ring-2 transition-shadow"
412        style="background: #fff; border: 1px solid #e0dcd4; color: #333; --tw-ring-color: #2d6a4f;"
413      >
414      <button 
415        type="submit"
416        class="newsletter-submit-btn group py-3 sm:py-3.5 font-semibold rounded-xl shadow-sm gap-2 text-sm mx-auto"
417        style="cursor: pointer; display: flex; width: 60%; align-items: center; justify-content: center; background: #2d6a4f; color: white;"
418        onmouseover="this.style.background='#e07b4c'; this.style.transform='translateY(-2px)'; this.style.boxShadow='0 4px 12px rgba(224, 123, 76, 0.4)';"
419        onmouseout="this.style.background='#2d6a4f'; this.style.transform='translateY(0)'; this.style.boxShadow='none';"
420      >
421        <span>Subscribe Free</span>
422        <span id="newsletter-m4rc3wmfo-indicator" class="htmx-indicator">
423          <svg class="animate-spin h-4 w-4" fill="none" viewBox="0 0 24 24">
424            <circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
425            <path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z"></path>
426          </svg>
427        </span>
428        <svg class="w-4 h-4 transition-transform group-hover:translate-x-1" fill="none" stroke="currentColor" viewBox="0 0 24 24">
429          <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 5l7 7m0 0l-7 7m7-7H3"/>
430        </svg>
431      </button>
432    </form>
433    
434    <!-- Trust -->
435    <p class="text-center text-xs mt-4" style="color: #999;">
436      Free forever • No spam • Unsubscribe anytime
437    </p>
438  </div>
439</div>
440
441  </main>
442
443  <!-- Footer -->
444  <!-- Ad Slot: Footer — controlled by ad-before-footer toggle in Homepage Layout Manager -->
445
446
447
448<!-- Footer matching website orange/amber theme -->
449<footer class="text-white mt-16" style="background: linear-gradient(135deg, #2D5A42 0%, #1A3A2E 100%);">
450  <div class="max-w-6xl mx-auto px-4 py-12">
451    
452    <!-- Social Media Icons - Dynamic from Admin -->
453    
454    <div class="flex justify-center space-x-6 mb-8">
455      
456        
457          <a href="https://www.pinterest.com/loulitafranjer/" class="text-white/80 hover:text-orange-500 transition-colors" aria-label="Pinterest" target="_blank" rel="noopener noreferrer">
458            
459              <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
460                <path d="M12.017 0C5.396 0 .029 5.367.029 11.987c0 5.079 3.158 9.417 7.618 11.174-.105-.949-.199-2.403.041-3.439.219-.937 1.406-5.957 1.406-5.957s-.359-.72-.359-1.781c0-1.663.967-2.911 2.168-2.911 1.024 0 1.518.769 1.518 1.688 0 1.029-.653 2.567-.992 3.992-.285 1.193.6 2.165 1.775 2.165 2.128 0 3.768-2.245 3.768-5.487 0-2.861-2.063-4.869-5.008-4.869-3.41 0-5.409 2.562-5.409 5.199 0 1.033.394 2.143.889 2.741.265.32.305.449.207.728-.075.2-.24.9-.31 1.15-.09.32-.297.39-.686.235-1.29-.6-2.1-2.48-2.1-4.001 0-3.26 2.37-6.26 6.84-6.26 3.59 0 6.38 2.56 6.38 5.98 0 3.57-2.25 6.44-5.38 6.44-1.05 0-2.04-.55-2.38-1.28 0 0-.52 1.98-.65 2.47-.23.9-.86 2.03-1.28 2.72A12.018 12.018 0 0 0 12.017 24c6.624 0 11.99-5.367 11.99-11.987C24.007 5.367 18.641.001 12.017.001z"/>
461              </svg>
462            
463          </a>
464        
465      
466    </div>
467    
468
469    <!-- Navigation Links - Single Row Centered -->
470    <div class="flex flex-wrap justify-center gap-x-6 gap-y-3 mb-10">
471      
472      
473        
474          <a href="/" class="text-white/80 hover:text-orange-500 transition-colors text-sm flex items-center gap-1.5" >
475            
476              
477                <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
477<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"/></svg>
478              
479            
480            <span>Home</span>
481          </a>
482        
483          <a href="/recipes" class="text-white/80 hover:text-orange-500 transition-colors text-sm flex items-center gap-1.5" >
484            
485              
486                <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19.428 15.428a2 2 0 00-1.022-.547l-2.387-.477a6 6 0 00-3.86.517l-.318.158a6 6 0 01-3.86.517L6.05 15.21a2 2 0 00-1.806.547M8 4h8l-1 1v5.172a2 2 0 00.586 1.414l5 5c1.26 1.26.367 3.414-1.415 3.414H4.828c-1.782 0-2.674-2.154-1.414-3.414l5-5A2 2 0 009 10.172V5L8 4z"/></svg>
487              
488            
489            <span>Recipes</span>
490          </a>
491        
492          <a href="/categories" class="text-white/80 hover:text-orange-500 transition-colors text-sm flex items-center gap-1.5" >
493            
494              
495                <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z"/></svg>
496              
497            
498            <span>Categories</span>
499          </a>
500        
501          <a href="/articles" class="text-white/80 hover:text-orange-500 transition-colors text-sm flex items-center gap-1.5" >
502            
503              
504                <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"/></svg>
505              
506            
507            <span>Articles</span>
508          </a>
509        
510          <a href="/explore" class="text-white/80 hover:text-orange-500 transition-colors text-sm flex items-center gap-1.5" >
511            
512              
513                <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 17l-5 2 2-5 7-7 3 3-7 7zM14 6l3 3"/></svg>
514              
515            
516            <span>Explore</span>
517          </a>
518        
519          <a href="/authors" class="text-white/80 hover:text-orange-500 transition-colors text-sm flex items-center gap-1.5" >
520            
521              
522                <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 20h5V9H2v11h5m10 0v-2a4 4 0 00-8 0v2m8 0H7m5-8a4 4 0 100-8 4 4 0 000 8zm6 0a3 3 0 100-6 3 3 0 000 6zM6 12a3 3 0 100-6 3 3 0 000 6z"/></svg>
523              
524            
525            <span>Authors</span>
526          </a>
527        
528          <a href="/about" class="text-white/80 hover:text-orange-500 transition-colors text-sm flex items-center gap-1.5" >
529            
530              
531                <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>
532              
533            
534            <span>About</span>
535          </a>
536        
537          <a href="/contact" class="text-white/80 hover:text-orange-500 transition-colors text-sm flex items-center gap-1.5" >
538            
539              
540                <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"/></svg>
541              
542            
543            <span>Contact</span>
544          </a>
545        
546          <a href="/faq" class="text-white/80 hover:text-orange-500 transition-colors text-sm flex items-center gap-1.5" >
547            
548              
549                <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
549<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.228 9c.55-1.165 1.745-2 3.272-2 1.933 0 3.5 1.343 3.5 3 0 1.093-.682 2.05-1.699 2.575-.762.393-1.301.98-1.301 1.675V15m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>
550              
551            
552            <span>FAQ</span>
553          </a>
554        
555          <a href="/search" class="text-white/80 hover:text-orange-500 transition-colors text-sm flex items-center gap-1.5" >
556            
557              
558                <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-4.35-4.35m1.85-5.15a7 7 0 11-14 0 7 7 0 0114 0z"/></svg>
559              
560            
561            <span>Search</span>
562          </a>
563        
564          <a href="/privacy" class="text-white/80 hover:text-orange-500 transition-colors text-sm flex items-center gap-1.5" >
565            
566              
567                <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"/></svg>
568              
569            
570            <span>Privacy Policy</span>
571          </a>
572        
573          <a href="/terms" class="text-white/80 hover:text-orange-500 transition-colors text-sm flex items-center gap-1.5" >
574            
575              
576                <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"/></svg>
577              
578            
579            <span>Terms of Service</span>
580          </a>
581        
582          <a href="/cookies" class="text-white/80 hover:text-orange-500 transition-colors text-sm flex items-center gap-1.5" >
583            
584              
585                <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4l3 3M7 4h10a3 3 0 013 3v4a9 9 0 11-9-9h4a3 3 0 013 3"/></svg>
586              
587            
588            <span>Cookie Policy</span>
589          </a>
590        
591          <a href="/disclaimer" class="text-white/80 hover:text-orange-500 transition-colors text-sm flex items-center gap-1.5" >
592            
593              
594                <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-7.938 4h15.876c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L2.33 16c-.77 1.333.192 3 1.732 3z"/></svg>
595              
596            
597            <span>Disclaimer</span>
598          </a>
599        
600      
601    </div>
602
603    <!-- Copyright -->
604    <div class="text-center pt-8 border-t border-white/20">
605      <p class="text-white/60 text-sm">
606        © 2025 Zucchini Bread Recipes. All rights reserved.
607      </p>
608    </div>
609  </div>
610</footer>
611
612<!-- Back to Top Button - Global -->
613<button id="back-to-top" type="button" class="fixed right-8 p-3 bg-amber-600 text-white rounded-full shadow-lg transition-all duration-300 hover:bg-amber-700" style="z-index: 99999; bottom: 100px; opacity: 0; pointer-events: none; cursor: pointer;" aria-label="Back to top">
614  <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 10l7-7m0 0l7 7m-7-7v18" /></svg>
615</button>
616
617<script>
618  (function() {
619    const btn = document.getElementById('back-to-top');
620    if (btn) {
621      btn.addEventListener('click', function(e) {
622        e.preventDefault();
623        e.stopPropagation();
624        window.scrollTo({top: 0, behavior: 'smooth'});
625      });
626      window.addEventListener('scroll', function() {
627        if (window.scrollY > 5000) {
628          btn.style.opacity = '1';
629          btn.style.pointerEvents = 'auto';
630        } else {
631          btn.style.opacity = '0';
632          btn.style.pointerEvents = 'none';
633        }
634      });
635    }
636  })();
637</script>
637
638
639
640  
641
642
643
644<!-- Ad lazy-load helper: observes ad containers with data-lazy-load and triggers ad rendering -->
645<script>
646	(function(){
647		if (!('IntersectionObserver' in window)) return;
648
649		try {
650			const adEls = document.querySelectorAll('.ad-container[data-lazy-load="true"]');
651			if (!adEls || adEls.length === 0) return;
652
653			const observer = new IntersectionObserver((entries, obs) => {
654				entries.forEach(entry => {
655					if (!entry.isIntersecting) return;
656					const el = entry.target;
657
658					// 1) If AdSense ins exists, attempt to push to render
659					try {
660						const ins = el.querySelector('ins.adsbygoogle');
661						if (ins && window.adsbygoogle) {
662							try { (adsbygoogle = window.adsbygoogle || []).push({}); } catch(e) { console.warn('adsbygoogle push error', e); }
663						}
664					} catch (e) { console.warn('adsensor check failed', e); }
665
666					// 2) If Prebid is present, attempt a lightweight call to request bids for this ad id
667					try {
668						if (window.pbjs && typeof pbjs.requestBids === 'function') {
669							try { pbjs.requestBids({ adUnitCodes: [el.dataset.adId], bidsBackHandler: function(){} }); } catch(e){ console.warn('pbjs requestBids failed', e); }
670						}
671					} catch (e) { /* ignore */ }
672
673					// 3) mark as loaded and stop observing
674					el.dataset.loaded = '1';
675					obs.unobserve(el);
676				});
677			}, { rootMargin: (document.documentElement.clientHeight || 800) + 'px' });
678
679			adEls.forEach(a => observer.observe(a));
680		} catch (err) {
681			console.error('Ad lazy-load helper error', err);
682		}
683	})();
684</script>
684
685
686  <!-- Visitor Analytics Tracker -->
687<script>
688(function() {
689  var path = window.location.pathname;
690
691  // Skip admin/login pages
692  if (path.startsWith('/admin') || path.startsWith('/login')) return;
693
694  // Skip if admin
695  if (localStorage.getItem('admin_token')) return;
696
697  // Deduplicate: don't re-track same page in same session
698  var trackKey = 'tracked_' + path;
699  if (sessionStorage.getItem(trackKey)) return;
700
701  var visitId = null;
702  var maxScroll = 0;
703  var startTime = Date.now();
704  var heartbeatInterval = null;
705
706  // Track scroll depth (passive, lightweight)
707  function handleScroll() {
708    var scrollTop = window.scrollY;
709    var docHeight = document.documentElement.scrollHeight - window.innerHeight;
710    if (docHeight > 0) {
711      var pct = Math.round((scrollTop / docHeight) * 100);
712      if (pct > maxScroll) maxScroll = pct;
713    }
714  }
715  window.addEventListener('scroll', handleScroll, { passive: true });
716
717  // Session ID
718  function getSessionId() {
719    var sid = sessionStorage.getItem('analytics_session_id');
720    if (!sid) {
721      sid = Math.random().toString(36).substring(2) + Date.now().toString(36);
722      sessionStorage.setItem('analytics_session_id', sid);
723    }
724    return sid;
725  }
726
727  // Track visitor
728  function trackVisitor() {
729    fetch('/api/admin/visitors', {
730      method: 'POST',
731      headers: { 'Content-Type': 'application/json' },
732      body: JSON.stringify({
733        page: path,
734        userAgent: navigator.userAgent,
735        referrer: document.referrer || '',
736        sessionId: getSessionId()
737      })
738    })
739    .then(function(r) { return r.ok ? r.json() : null; })
740    .then(function(data) {
741      if (data && data.id) {
742        visitId = data.id;
743        sessionStorage.setItem(trackKey, '1');
744
745        // Heartbeat every 60s (lightweight duration/scroll updates)
746        heartbeatInterval = setInterval(function() {
747          if (!visitId) return;
748          fetch('/api/admin/visitors', {
749            method: 'PUT',
750            headers: { 'Content-Type': 'application/json' },
751            body: JSON.stringify({
752              id: visitId,
753              duration: Math.round((Date.now() - startTime) / 1000),
754              scrollDepth: maxScroll
755            }),
756            keepalive: true
757          }).catch(function() {});
758        }, 60000);
759      }
760    })
761    .catch(function() {});
762  }
763
764  // Final data on page leave
765  function sendFinalData() {
766    if (!visitId) return;
767    var payload = JSON.stringify({
768      id: visitId,
769      duration: Math.round((Date.now() - startTime) / 1000),
770      scrollDepth: maxScroll,
771      _method: 'PUT'
772    });
773    if (navigator.sendBeacon) {
774      navigator.sendBeacon('/api/admin/visitors', new Blob([payload], { type: 'application/json' }));
775    } else {
776      fetch('/api/admin/visitors', {
777        method: 'PUT',
778        headers: { 'Content-Type': 'application/json' },
779        body: payload,
780        keepalive: true
781      }).catch(function() {});
782    }
783  }
784
785  window.addEventListener('beforeunload', sendFinalData);
786  window.addEventListener('pagehide', sendFinalData);
787  window.addEventListener('unload', function() {
788    if (heartbeatInterval) clearInterval(heartbeatInterval);
789    window.removeEventListener('scroll', handleScroll);
790  });
791
792  // Start after 3s delay to not block page load
793  setTimeout(trackVisitor, 3000);
794})();
795</script>
795
796
797  
798  
798<script>
799(function() {
800  const GIVEAWAY_GUARD_KEY = 'hide_giveaway_popup';
801  const DWELL_SECONDS = 45;
802
803  let latestGiveaway = null;
804  let giveawayInteracted = false;
805  let giveawayAutoTimer = null;
806
807  // Read popup settings from DOM
808  function getPopupSettings() {
809    var modal = document.querySelector('[data-lead-gen="giveaway"]');
810    if (!modal) return { delay: 0, dismissDays: 7, showMobile: true, freq: 'session' };
811    return {
812      delay: parseInt(modal.getAttribute('data-delay') || '0', 10),
813      dismissDays: parseInt(modal.getAttribute('data-dismiss') || '7', 10),
814      showMobile: modal.getAttribute('data-mobile') !== '0',
815      freq: modal.getAttribute('data-freq') || 'session',
816    };
817  }
818
819  function isMobile() {
820    return window.innerWidth <= 640;
821  }
822
823  function getGiveawayGuardState() {
824    try {
825      var settings = getPopupSettings();
826      var store = settings.freq === 'session' ? sessionStorage : localStorage;
827      var raw = store.getItem(GIVEAWAY_GUARD_KEY);
828      if (!raw) return null;
829      var parsed = JSON.parse(raw);
830      if (parsed && typeof parsed.hiddenUntil === 'number') {
831        if (Date.now() < parsed.hiddenUntil) return parsed;
832      }
833    } catch (e) {}
834    return null;
835  }
836
837  function setGiveawayGuard() {
838    try {
839      var settings = getPopupSettings();
840      var store = settings.freq === 'session' ? sessionStorage : localStorage;
841      var ttlHours = settings.dismissDays * 24;
842      var hiddenUntil = Date.now() + (ttlHours * 60 * 60 * 1000);
843      store.setItem(GIVEAWAY_GUARD_KEY, JSON.stringify({ hiddenUntil }));
844    } catch (e) {}
845  }
846
847  function clearGiveawayGuard() {
848    try {
849      localStorage.removeItem(GIVEAWAY_GUARD_KEY);
850      sessionStorage.removeItem(GIVEAWAY_GUARD_KEY);
851    } catch (e) {}
852  }
853
854  function shouldShowGiveaway() {
855    var settings = getPopupSettings();
856    if (settings.freq === 'always') return true;
857    return !getGiveawayGuardState();
858  }
859
860  function fetchLatestGiveaway() {
861    return fetch('/api/giveaways?limit=1')
862      .then(function(r) { return r.ok ? r.json() : null; })
863      .then(function(data) {
864        if (data && data.giveaways && data.giveaways.length > 0) {
865          latestGiveaway = data.giveaways[0];
866          return latestGiveaway;
867        }
868        return null;
869      })
870      .catch(function() { return null; });
871  }
872
873  function populateGiveawayPopup() {
874    if (!latestGiveaway) return;
875    var form = document.getElementById('giveaway-popup-form');
876    if (form && latestGiveaway.slug) {
877      form.action = '/api/giveaways/' + latestGiveaway.slug + '/signup';
878    }
879  }
880
881  function showGiveawayModal() {
882    var modal = document.querySelector('[data-lead-gen="giveaway"]');
883    if (!modal) return;
884    giveawayInteracted = true;
885    modal.setAttribute('aria-hidden', 'false');
886    modal.classList.add('is-visible');
887    document.body.style.overflow = 'hidden';
888  }
889
890  function hideGiveawayModal() {
891    var modal = document.querySelector('[data-lead-gen="giveaway"]');
892    if (!modal) return;
893    modal.classList.remove('is-visible');
894    modal.setAttribute('aria-hidden', 'true');
895    document.body.style.overflow = '';
896    setGiveawayGuard();
897  }
898
899  function cancelGiveawayAutoTimer() {
900    if (giveawayAutoTimer) {
901      clearTimeout(giveawayAutoTimer);
902      giveawayAutoTimer = null;
903    }
904  }
905
906  function startGiveawayAutoTimer() {
907    if (!shouldShowGiveaway()) return;
908    if (giveawayInteracted) return;
909    var settings = getPopupSettings();
910    if (!settings.showMobile && isMobile()) return;
911    if (settings.delay <= 0) return;
912    cancelGiveawayAutoTimer();
913    giveawayAutoTimer = setTimeout(function() {
914      if (!giveawayInteracted && latestGiveaway) {
915        showGiveawayModal();
916      }
917    }, settings.delay * 1000);
918  }
919
920  function handleMarqueeClick() {
921    var marquee = document.getElementById('giveaway-marquee');
922    var linkMode = marquee ? marquee.getAttribute('data-link-mode') : 'auto';
923    var customLink = marquee ? marquee.getAttribute('data-custom-link') : '';
924    if (linkMode === 'custom' && customLink) {
925      window.location.href = customLink;
926      return;
927    }
928    if (latestGiveaway) {
929      showGiveawayModal();
930    } else {
931      fetchLatestGiveaway().then(function(gw) {
932        if (gw) populateGiveawayPopup();
933        showGiveawayModal();
934      });
935    }
936  }
937
938  function handleHeroCardClick() {
939    var card = document.querySelector('.hero-giveaway-card');
940    var linkMode = card ? card.getAttribute('data-link-mode') : 'auto';
941    var customLink = card ? card.getAttribute('data-custom-link') : '';
942    if (linkMode === 'custom' && customLink) {
943      window.location.href = customLink;
944      return;
945    }
946    if (latestGiveaway) {
947      showGiveawayModal();
948    } else {
949      fetchLatestGiveaway().then(function(gw) {
950        if (gw) populateGiveawayPopup();
951        showGiveawayModal();
952      });
953    }
954  }
955
956  function handleGiveawayFormSubmit(e) {
957    e.preventDefault();
958    var form = e.target;
959    var resultEl = document.getElementById('giveaway-popup-result');
960    var loadingEl = document.getElementById('giveaway-popup-loading');
961    var submitBtn = document.getElementById('giveaway-popup-submit');
962    var modal = document.querySelector('[data-lead-gen="giveaway"]');
963    var successMsg = modal ? (modal.getAttribute('data-success') || 'Success! Check your email.') : 'Success! Check your email.';
964    var errorMsg = modal ? (modal.getAttribute('data-error') || 'Something went wrong. Please try again.') : 'Something went wrong. Please try again.';
965
966    var actionAttr = form.getAttribute('action');
967    if (!actionAttr || !actionAttr.includes('/api/giveaways/')) {
968      // Try a last-ditch fetch before giving up
969      fetchLatestGiveaway().then(function(gw) {
970        if (gw && gw.slug) {
971          form.action = '/api/giveaways/' + gw.slug + '/signup';
972          doSubmit();
973        } else {
974          if (resultEl) resultEl.innerHTML = '<p style="color:#c64118;font-size:0.875rem;">Giveaway not available right now. Please try again later.</p>';
975        }
976      });
977      return;
978    }
979    doSubmit();
980
981    function doSubmit() {
982
983    if (loadingEl) loadingEl.classList.remove('hidden');
984    if (submitBtn) submitBtn.disabled = true;
985
986    var formData = new FormData(form);
987    var payload = {};
988    if (formData.get('firstName')) payload.firstName = formData.get('firstName');
989    if (formData.get('lastName')) payload.lastName = formData.get('lastName') || null;
990    if (formData.get('email')) payload.email = formData.get('email');
991
992    fetch(form.action, {
993      method: 'POST',
994      headers: { 'Content-Type': 'application/json' },
995      body: JSON.stringify(payload)
996    })
997    .then(function(r) { return r.json(); })
998    .then(function(data) {
999      if (data && data.success) {
1000        if (resultEl) {
1001          resultEl.innerHTML = '<div class="bg-green-50 border border-green-200 rounded-lg p-4 text-sm text-green-800">' +
1002            '<p class="font-medium">' + (data.message || successMsg) + '</p>' +
1003            '<p class="text-green-700 text-xs mt-1">Check your inbox (and spam folder) for the download link.</p>' +
1004            '</div>';
1005        }
1006        setGiveawayGuard();
1007        setTimeout(function() { hideGiveawayModal(); }, 2500);
1008      } else {
1009        if (resultEl) {
1010          resultEl.innerHTML = '<div class="bg-red-50 border border-red-200 rounded-lg p-4 text-sm text-red-800">' +
1011            '<p class="font-medium">' + (data.error || errorMsg) + '</p>' +
1012            '</div>';
1013        }
1014        if (submitBtn) submitBtn.disabled = false;
1015      }
1016    })
1017    .catch(function() {
1018      if (resultEl) {
1019        resultEl.innerHTML = '<div class="bg-red-50 border border-red-200 rounded-lg p-4 text-sm text-red-800">' +
1020          '<p class="font-medium">' + errorMsg + '</p>' +
1021          '</div>';
1022      }
1023      if (submitBtn) submitBtn.disabled = false;
1024    })
1025    .finally(function() {
1026      if (loadingEl) loadingEl.classList.add('hidden');
1027    });
1028    } // end doSubmit
1029  } // end handleGiveawayFormSubmit
1030
1031  function init() {
1032    // Always fetch giveaway data and attach handlers — do NOT bail out when the
1033    // popup guard is active. The guard should only gate auto-popups, not the
1034    // entire lead-gen system (marquee clicks, hero card clicks, form submission).
1035    fetchLatestGiveaway().then(function(gw) {
1036      if (gw) {
1037        populateGiveawayPopup();
1038      }
1039
1040      // Marquee click handler — always attach if marquee exists
1041      var marquee = document.getElementById('giveaway-marquee');
1042      if (marquee) {
1043        marquee.addEventListener('click', function(e) {
1044          if (e.target.closest('.gm-close')) return;
1045          handleMarqueeClick();
1046        });
1047      }
1048
1049      // Giveaway form submission
1050      var form = document.getElementById('giveaway-popup-form');
1051      if (form) form.addEventListener('submit', handleGiveawayFormSubmit);
1052
1053      // Giveaway modal backdrop close
1054      var modal = document.querySelector('[data-lead-gen="giveaway"]');
1055      if (modal) {
1056        var backdrop = modal.querySelector('.giveaway-modal-backdrop');
1057        if (backdrop) backdrop.addEventListener('click', hideGiveawayModal);
1058      }
1059
1060      // Escape key handler
1061      document.addEventListener('keydown', function(e) {
1062        if (e.key === 'Escape') {
1063          var gwVisible = document.querySelector('.giveaway-modal.is-visible');
1064          if (gwVisible) hideGiveawayModal();
1065        }
1066      });
1067
1068      // Only auto-show popups if the guard allows
1069      if (shouldShowGiveaway()) {
1070        startGiveawayAutoTimer();
1071      }
1072    });
1073  }
1074
1075  window.GuelmaLeadGen = {
1076    showGiveaway: showGiveawayModal,
1077    closeGiveaway: hideGiveawayModal,
1078    handleMarqueeClick: handleMarqueeClick,
1079    handleHeroCardClick: handleHeroCardClick,
1080    dismissMarquee: function() {
1081      var marquee = document.getElementById('giveaway-marquee');
1082      if (marquee) marquee.style.display = 'none';
1083      // Respect configured dismiss duration for marquee
1084      try {
1085        var dismissHours = parseInt(marquee.getAttribute('data-dismiss') || '24', 10);
1086        var hiddenUntil = Date.now() + (dismissHours * 60 * 60 * 1000);
1087        localStorage.setItem('gm_marquee_dismissed', JSON.stringify({ hiddenUntil }));
1088      } catch (e) {}
1089    },
1090    resetGuard: clearGiveawayGuard,
1091    setGuard: setGiveawayGuard,
1092  };
1093
1094  if (document.readyState === 'loading') {
1095    document.addEventListener('DOMContentLoaded', init);
1096  } else {
1097    init();
1098  }
1099})();
1100</script>
1100
1101
1102<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"61dfad1e995b41e89c893c4354c23825","r":1,"spa":2}' crossorigin="anonymous"></script>
1102
1103</body>
1104</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.