1<!DOCTYPE html> 2<html lang="he" dir="rtl"> 3<head> 4 <meta charset="UTF-8"/> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"/> 6 <title>צ×ר קשר â ×§×פ××AI</title> 7 <meta name="description" content="×¤× × ×××× × ×¢× ×©×××ת, ×צע×ת ×× ××××× ×¢× ×§×פ×× ×©××× × ×ª×§×£."/> 8 <link rel="preconnect" href="https://fonts.googleapis.com"/> 9 <link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600&family=Syne:wght@700;800&display=swap" rel="stylesheet"/> 10 <style> 11 :root{--bg:#0a0a0a;--gray1:#111;--gray2:#1a1a1a;--gray3:#2a2a2a;--gray4:#3a3a3a;--gray5:#888;--gray6:#ccc;--white:#fff;--accent:#00e87a;--radius:14px;--nav-bg:rgba(17,17,17,0.92)} 12 *{box-sizing:border-box;margin:0;padding:0} 13 body{background:var(--bg);color:var(--white);font-family:'DM Sans',sans-serif;min-height:100vh;direction:rtl} 14 a{color:var(--accent);text-decoration:none} 15 .container{max-width:640px;margin:60px auto;padding:0 24px} 16 h1{font-family:'Syne',sans-serif;font-size:32px;font-weight:800;margin-bottom:8px} 17 .subtitle{color:var(--gray5);font-size:15px;margin-bottom:40px;line-height:1.6} 18 .form-row{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:20px} 19 .form-group{margin-bottom:20px} 20 .form-group.no-mb{margin-bottom:0} 21 label{display:block;font-size:13px;color:var(--gray5);margin-bottom:8px;font-weight:500} 22 label .req{color:var(--accent);margin-right:2px} 23 input,textarea,select{width:100%;padding:14px 16px;background:var(--gray2);border:1px solid var(--gray3);border-radius:var(--radius);color:var(--white);font-size:14px;font-family:'DM Sans',sans-serif;outline:none;transition:border-color 0.2s;direction:rtl} 24 input:focus,textarea:focus,select:focus{border-color:var(--accent)} 25 input.invalid{border-color:#fc8181} 26 textarea{resize:vertical;min-height:140px} 27 .phone-row{display:flex;gap:10px} 28 .phone-prefix{width:110px;flex-shrink:0} 29 .phone-number{flex:1} 30 .btn{background:var(--accent);color:#000;border:none;border-radius:var(--radius);padding:14px 32px;font-size:15px;font-weight:600;cursor:pointer;width:100%;font-family:'DM Sans',sans-serif;transition:opacity 0.2s;margin-top:4px} 31 .btn:hover{opacity:0.85} 32 .btn:disabled{opacity:0.5;cursor:not-allowed} 33 .success{background:rgba(0,232,122,0.1);border:1px solid rgba(0,232,122,0.3);border-radius:var(--radius);padding:24px;text-align:center;color:var(--accent);display:none;font-size:15px;line-height:1.7} 34 .field-error{color:#fc8181;font-size:12px;margin-top:5px;display:none} 35 .form-error{color:#fc8181;font-size:13px;margin-bottom:12px;display:none;background:rgba(252,129,129,0.08);border:1px solid rgba(252,129,129,0.2);border-radius:10px;padding:12px 16px} 36 footer{background:var(--gray1);border-top:1px solid var(--gray3);padding:32px;text-align:center;font-size:12px;color:var(--gray5);margin-top:80px} 37 footer a{color:var(--gray5)}footer a:hover{color:var(--accent)} 38 .footer-links{display:flex;justify-content:center;gap:20px;flex-wrap:wrap;margin-top:12px} 39 @media(max-width:520px){.form-row{grid-template-columns:1fr}} 40 41 </style> 42</head> 43<body>
44<script src="/navbar.js"></script>
44 45<div class="container"> 46 <h1>צ×ר קשר</h1> 47 <p class="subtitle">×ש ××× ×©×××? ×צ××ª× ×§×פ×× ×©××× × ×ª×§×£? ר×צ×× ××צ××¢ ש×ת××£ פע×××?<br/>× ×©×× ×ש×××¢ ××× ×× ×××ר ××××× ×ª×× 48 שע×ת.</p> 48 49 <div id="success-msg" class="success"> 50 â ××××¢×ª× × ×©××× ××צ×××!<br/> 51 <span style="font-size:13px;color:var(--gray5)">× ×××ר ×××× ×××§××.</span> 52 </div> 53 54 <form id="contact-form" onsubmit="submitForm(event)" novalidate> 55 56 <!-- Honeypot â invisible to humans, bots fill it --> 57 <div style="display:none" aria-hidden="true"> 58 <input type="text" name="website" id="hp-website" tabindex="-1" autocomplete="off"/> 59 </div> 60 61 <div class="form-row"> 62 <div class="form-group no-mb"> 63 <label for="first_name"><span class="req">*</span>×©× ×¤×¨××</label> 64 <input type="text" id="first_name" name="first_name" placeholder="×שר××" autocomplete="given-name" required/> 65 <div class="field-error" id="err-first">× × ××××× ×©× ×¤×¨××</div> 66 </div> 67 <div class="form-group no-mb"> 68 <label for="last_name"><span class="req">*</span>×©× ×שפ××</label> 69 <input type="text" id="last_name" name="last_name" placeholder="×שר×××" autocomplete="family-name" required/> 70 <div class="field-error" id="err-last">× × ××××× ×©× ×שפ××</div> 71 </div> 72 </div> 73 74 <div class="form-group"> 75 <label for="email"><span class="req">*</span>×ת××ת ××××××</label> 76 <input type="email" id="email" name="email" placeholder="[email protected]" dir="ltr" autocomplete="email" required/> 77 <div class="field-error" id="err-email">× × ××××× ×ת××ת ×××××× ×ª×§×× ×</div> 78 </div> 79 80 <div class="form-group"> 81 <label for="phone-number">×ספר ××פ×× <span style="color:var(--gray5);font-weight:400">(××פצ××× ××)</span></label> 82 <div class="phone-row" style="direction:ltr"> 83 <select id="phone-prefix" class="phone-prefix"> 84 <option value="050">050</option> 85 <option value="052">052</option> 86 <option value="053">053</option> 87 <option value="054" selected>054</option> 88 <option value="055">055</option> 89 <option value="056">056</option> 90 <option value="057">057</option> 91 <option value="058">058</option> 92 <option value="072">072</option> 93 <option value="073">073</option> 94 <option value="074">074</option> 95 <option value="077">077</option> 96 <option value="02">02</option> 97 <option value="03">03</option> 98 <option value="04">04</option> 99 <option value="08">08</option> 100 <option value="09">09</option> 101 </select> 102 <input type="tel" id="phone-number" name="phone_number" class="phone-number" placeholder="1234567" dir="ltr" maxlength="8" inputmode="numeric"/> 103 </div> 104 <div class="field-error" id="err-phone">×ספר ××פ×× ×× ×ª×§××</div> 105 </div> 106 107 <div class="form-group"> 108 <label for="subject">× ×ש×</label> 109 <select id="subject" name="subject"> 110 <option value="coupon-issue">×§×פ×× ×× ×¢×××</option> 111 <option value="suggestion">××¦×¢× ×ש×פ×ר</option> 112 <option value="missing-store">×× ×ת ×סר×</option> 113 <option value="collaboration">ש×ת××£ פע×××</option> 114 <option value="other">××ר</option> 115 </select> 116 </div> 117 118 <div class="form-group"> 119 <label for="message"><span class="req">*</span>××××¢×</label> 120 <textarea id="message" name="message" placeholder="×ת×× ×ת ×××עת×× ×××..." required></textarea> 121 <div class="field-error" id="err-message">× × ××ת×× ××××¢×</div> 122 </div> 123 124 <div id="form-error" class="form-error">×××¨×¢× ×©×××× ×ש×××ת ×××××¢×. × ×¡× ×©××.</div> 125 126 <button type="submit" class="btn" id="submit-btn">ש×× ××××¢× â</button> 127 </form> 128 </div> 129 130 <footer> 131 <div>© 2025 ×§×פ××AI â ×××¤×¢× ×¢× ××× AI</div> 132 <div class="footer-links"> 133 <a href="/">ר×ש×</a> 134 <a href="/about">××××ת</a> 135 <a href="/terms">×ª× ×× ×©×××ש</a> 136 <a href="/contact">צ×ר קשר</a> 137 <a href="/accessibility">×צ×רת × ××ש×ת</a> 138 </div> 139 </footer> 140 141
141<script src="/accessibility-widget.js"></script>
vendor: 1 bytes, line 141
141
142<script src="https://website-widgets.pages.dev/dist/sienna.min.js" defer></script>
142 143
143<script> 144 function isValidEmail(email) { 145 return /^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/.test(email.toLowerCase()); 146 } 147 148 function showErr(id, show) { 149 const el = document.getElementById(id); 150 if (el) el.style.display = show ? 'block' : 'none'; 151 } 152 153 function markField(id, invalid) { 154 const el = document.getElementById(id); 155 if (el) el.classList.toggle('invalid', invalid); 156 } 157 158 async function submitForm(e) { 159 e.preventDefault(); 160 161 // Honeypot check â if filled, silently pretend success 162 if (document.getElementById('hp-website').value) { 163 document.getElementById('contact-form').style.display = 'none'; 164 document.getElementById('success-msg').style.display = 'block'; 165 return; 166 } 167 168 const firstName = document.getElementById('first_name').value.trim(); 169 const lastName = document.getElementById('last_name').value.trim(); 170 const email = document.getElementById('email').value.trim(); 171 const phoneNum = document.getElementById('phone-number').value.trim(); 172 const message = document.getElementById('message').value.trim(); 173 174 // Validate 175 let valid = true; 176 177 showErr('err-first', !firstName); markField('first_name', !firstName); if (!firstName) valid = false; 178 showErr('err-last', !lastName); markField('last_name', !lastName); if (!lastName) valid = false; 179 180 const emailOk = email && isValidEmail(email); 181 showErr('err-email', !emailOk); markField('email', !emailOk); if (!emailOk) valid = false; 182 183 if (phoneNum) { 184 const phoneOk = /^\d{7,8}$/.test(phoneNum); 185 showErr('err-phone', !phoneOk); markField('phone-number', !phoneOk); if (!phoneOk) valid = false; 186 } else { 187 showErr('err-phone', false); markField('phone-number', false); 188 } 189 190 showErr('err-message', !message); markField('message', !message); if (!message) valid = false; 191 192 if (!valid) return; 193 194 const btn = document.getElementById('submit-btn'); 195 const errEl = document.getElementById('form-error'); 196 errEl.style.display = 'none'; 197 btn.disabled = true; 198 btn.textContent = 'ש×××...'; 199 200 const phone = phoneNum 201 ? document.getElementById('phone-prefix').value + phoneNum 202 : ''; 203 204 try { 205 const res = await fetch('/api/contact', { 206 method: 'POST', 207 headers: {'Content-Type': 'application/json'}, 208 body: JSON.stringify({ 209 first_name: firstName, 210 last_name: lastName, 211 email, 212 phone, 213 subject: document.getElementById('subject').value, 214 message, 215 }), 216 }); 217 if (!res.ok) throw new Error(await res.text()); 218 document.getElementById('contact-form').style.display = 'none'; 219 document.getElementById('success-msg').style.display = 'block'; 220 } catch(err) { 221 errEl.style.display = 'block'; 222 btn.disabled = false; 223 btn.textContent = 'ש×× ××××¢× â'; 224 } 225 } 226 </script>
vendor: 1 bytes, line 226
226
227<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":"53ec717f4f9944a1b853521eee6f2786","r":1,"spa":2}' crossorigin="anonymous"></script>
227 228</body> 229</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.