Diff -- /var/www/vhosts/webstls.com/httpdocs/TEMPLATES/store_layouts/catalog.html
Diff

/var/www/vhosts/webstls.com/httpdocs/TEMPLATES/store_layouts/catalog.html

added on WebSTLs (webstls.com) at 2026-07-01 22:26:50

Added
+179
lines
Removed
-0
lines
Context
0
unchanged
Blobs
from
to bbd026251225
Restore this content →
Unified diff
Naive LCS-based line diff. Additions in emerald, deletions in rose. Both sides decompressed live from BLOB_STORE.
1<!-- =====================================================================
2 LAYOUT: Catalog Classic
3 Hero with floating cards + 3-col grid + about strip + reviews.
4 The safe, balanced default.
5===================================================================== -->
6
7<style>:root { $theme_css_vars }</style>
8
9[if:$preview_banner]
10<div style="position:sticky;top:0;z-index:9999;background:#0a0e1c;border-bottom:1px solid rgba(59,130,246,0.40);box-shadow:0 4px 16px rgba(0,0,0,0.55);padding:10px 20px;text-align:center;font-size:13px;color:#93c5fd;font-weight:600">
11 <svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" style="vertical-align:-2px"><circle cx="12" cy="12" r="10"/><circle cx="12" cy="12" r="3"/></svg>
12 $preview_banner
13</div>
14[/if]
15
16<header style="border-bottom:1px solid var(--col-border);background:var(--col-bg-2);padding:18px 32px;display:flex;align-items:center;gap:18px;flex-wrap:wrap">
17 <a href="/store.cgi?id=$store_id" style="display:flex;align-items:center;gap:12px;text-decoration:none;flex-shrink:0">
18 <div class="brand-mark" style="background:linear-gradient(130deg, var(--col-accent) 0%, var(--col-accent-bright) 100%)">$store_initials</div>
19 <div class="brand-text" style="line-height:1.2">
20 <span class="brand-name" style="font-family:var(--font-display);font-size:24px;font-weight:700;display:block;color:var(--col-text)">$store_name</span>
21 <span class="brand-sub" style="font-size:10px;letter-spacing:1.5px;text-transform:uppercase;color:var(--col-text-3)">Powered by webstls.com</span>
22 </div>
23 </a>
24 <div style="flex:1;display:flex;justify-content:center;min-width:0">$store_search_form</div>
25 <!-- Dynamic nav -- Home + every published page from storefront_pages
26 (store.cgi builds @nav_pages and passes it in). Sign in + Cart
27 come from store.cgi tvars so every layout shares one source. -->
28 <nav style="display:flex;gap:18px;align-items:center;flex-wrap:wrap">
29 <a href="/store.cgi?id=$store_id" style="font-size:13px;color:var(--col-text-2);font-weight:500">Home</a>
30 [loop:@nav_pages]
31 <a href="$loop1.href" style="font-size:13px;color:var(--col-text-2);font-weight:500">$loop1.title</a>
32 [/loop]
33 $store_signin_link
34 $store_cart_link
35 </nav>
36</header>
37
38[if:$is_specific_page]
39 [if:$page_not_found]
40 <section style="padding:120px 32px;text-align:center;max-width:600px;margin:0 auto">
41 <h1 class="hero-title" style="font-size:48px">Page not found</h1>
42 <p class="hero-sub" style="margin:16px auto">This storefront doesn't have a page at that URL.</p>
43 <a href="/store.cgi?id=$store_id" class="btn btn-primary btn-lg">Back to home</a>
44 </section>
45 [/if]
46 [if:!$page_not_found]
47 <section style="padding:80px 32px 40px;max-width:1480px;margin:0 auto">
48 <span class="section-eyebrow">$page_slug</span>
49 <h1 class="hero-title" style="font-size:48px">$page_title</h1>
50 <div class="text-secondary" style="font-size:17px;line-height:1.7;margin-top:24px;white-space:pre-wrap;max-width:900px">$page_body</div>
51 [if:$is_draft_page]
52 <div class="banner warning mt-4">
53 <div class="text-xs">This page is a <strong>draft</strong>. Buyers won't see it until you publish.</div>
54 </div>
55 [/if]
56 </section>
57 [if:$is_collection_page]
58 <!-- Collection-type pages (page_type='collection') render the
59 product grid below the page header so /shop, /product_list,
60 and any other product-listing page actually shows the products
61 instead of just the placeholder body copy. -->
62 <section id="shop" style="padding:20px 32px 80px;max-width:1480px;margin:0 auto">
63 [if:$has_products]
64 <div class="model-grid">
65 [loop:@products]
66 <a href="/listing_details.cgi?id=$loop1.id" class="model-card" style="text-decoration:none">
67 <div class="model-thumb">
68 <img src="$loop1.hero_image" alt="$loop1.title" loading="lazy">
69 <div class="model-badges">$loop1.rating_html</div>
70 </div>
71 <div class="model-info">
72 <div class="model-name">$loop1.title</div>
73 <div class="model-row">
74 <span class="model-price">$loop1.price</span>
75 <span class="text-dim text-xs">$loop1.rating_n reviews</span>
76 </div>
77 </div>
78 </a>
79 [/loop]
80 </div>
81 [/if]
82 [if:!$has_products]
83 <div class="card" style="text-align:center;padding:60px 32px">
84 <div style="font-family:var(--font-display);font-size:22px;color:var(--col-text);margin-bottom:8px">No products yet</div>
85 <p class="text-secondary">This storefront hasn't published any designs.</p>
86 </div>
87 [/if]
88 $pagination_html
89 </section>
90 [/if]
91 [/if]
92[/if]
93
94[if:!$is_specific_page]
95<section style="position:relative;padding:80px 32px 60px;overflow:hidden">
96 <div style="position:absolute;width:700px;height:700px;top:-200px;right:-100px;background:radial-gradient(circle, var(--col-accent-glow), transparent 65%);filter:blur(80px);pointer-events:none"></div>
97
98 <div style="max-width:1280px;margin:0 auto;display:grid;grid-template-columns:1.1fr 1fr;gap:64px;align-items:center;position:relative;z-index:2">
99 <div>
100 <span class="hero-pill"><span class="dot"></span> $product_count designs &middot; $hero_pill_label</span>
101 <h1 class="hero-title" style="font-size:clamp(38px,5vw,68px)">$hero_title</h1>
102 <p class="hero-sub">$store_tagline</p>
103 <div class="hero-cta">
104 <a href="#shop" class="btn btn-primary btn-lg">$hero_cta_primary_label</a>
105 <a href="#about" class="btn btn-secondary btn-lg">$hero_cta_secondary_label</a>
106 </div>
107 </div>
108 <div style="position:relative;height:480px">
109 <div class="float-card fc-1" data-we-editable="image" data-we-field="hero_image_1" style="width:300px;background:url('$hero_image_1') $hero_image_1_pos/cover;height:380px;top:0;border:1px solid var(--col-border-2)"></div>
110 <div class="float-card fc-2" data-we-editable="image" data-we-field="hero_image_2" style="width:240px;background:url('$hero_image_2') $hero_image_2_pos/cover;height:300px;top:60px;right:-20px;border:1px solid var(--col-border-2)"></div>
111 <div class="float-card fc-3" data-we-editable="image" data-we-field="hero_image_3" style="width:260px;background:url('$hero_image_3') $hero_image_3_pos/cover;height:320px;bottom:0;left:30px;border:1px solid var(--col-border-2)"></div>
112 </div>
113 </div>
114</section>
115
116<section id="shop" style="padding:60px 32px;max-width:1480px;margin:0 auto">
117 <div style="display:flex;justify-content:space-between;align-items:flex-end;margin-bottom:32px;flex-wrap:wrap;gap:18px">
118 <div>
119 <span class="section-eyebrow">$section_eyebrow</span>
120 <h2 class="section-title" style="font-size:32px;margin:0">$product_count designs</h2>
121 </div>
122 </div>
123
124 [if:$has_products]
125 <div class="model-grid">
126 [loop:@products]
127 <a href="/listing_details.cgi?id=$loop1.id" class="model-card" style="text-decoration:none">
128 <div class="model-thumb">
129 <img src="$loop1.hero_image" alt="$loop1.title" loading="lazy">
130 <div class="model-badges">$loop1.rating_html</div>
131 </div>
132 <div class="model-info">
133 <div class="model-name">$loop1.title</div>
134 <div class="model-row">
135 <span class="model-price">$loop1.price</span>
136 <span class="text-dim text-xs">$loop1.rating_n reviews</span>
137 </div>
138 </div>
139 </a>
140 [/loop]
141 </div>
142 [/if]
143
144 $pagination_html
145
146 [if:!$has_products]
147 <div class="card" style="text-align:center;padding:64px 32px">
148 <div style="font-family:var(--font-display);font-size:24px;color:var(--col-text);margin-bottom:8px">No products yet</div>
149 <p class="text-secondary">This storefront hasn't published any designs.</p>
150 </div>
151 [/if]
152</section>
153
154<section id="about" style="padding:80px 32px;background:var(--col-bg-2);border-top:1px solid var(--col-border);border-bottom:1px solid var(--col-border)">
155 <div style="max-width:1100px;margin:0 auto;display:grid;grid-template-columns:1fr 1.4fr;gap:48px;align-items:center">
156 <div>
157 <div data-we-editable="image" data-we-field="about_image" style="aspect-ratio:1;background:url('$about_image') $about_image_pos/cover;border-radius:16px;border:1px solid var(--col-border)"></div>
158 </div>
159 <div>
160 <span class="section-eyebrow">$about_eyebrow</span>
161 <h2 class="section-title" style="font-size:30px">$about_heading</h2>
162 <p class="text-secondary" style="font-size:15px;line-height:1.75">$store_about</p>
163 </div>
164 </div>
165</section>
166[/if]
167
168<footer style="background:var(--col-bg-2);border-top:1px solid var(--col-border);padding:40px 32px 24px;margin-top:60px">
169 <div style="max-width:1280px;margin:0 auto;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:18px">
170 <div class="flex items-center gap-3">
171 <div class="brand-mark" style="background:linear-gradient(130deg, var(--col-accent), var(--col-accent-bright));width:32px;height:32px;font-size:14px">$store_initials</div>
172 <div>
173 <div class="brand-name" style="font-family:var(--font-display);font-size:18px;font-weight:700;color:var(--col-text)">$store_name</div>
174 <div class="text-xs text-dim" style="letter-spacing:1px;text-transform:uppercase">Powered by webstls.com</div>
175 </div>
176 </div>
177 <div class="text-xs text-dim">$footer_trust</div>
178 </div>
179</footer>
Keyboard: j next diff k previous diff g top G bottom r restore c compile-check ? help