1import{r as c,j as t}from"./react-CHTGUyAX.js";import{L as l}from"./router-D1a9Ug87.js";import{B as C,H as S}from"./BrandMark-NU5ZITUB.js";import{P as z,S as x,a as v,C as o}from"./PageSeo-C78Y-SUW.js";import{g as T}from"./index-COIxwMRP.js";const E=[{value:"general",label:"General question"},{value:"billing",label:"Billing & subscriptions"},{value:"technical",label:"Technical support"},{value:"extension",label:"Chrome extension"},{value:"partnership",label:"Partnership"},{value:"other",label:"Other"}],L=["Pro plan & Cashfree billing","Extension connect & pairing","Account, privacy & data requests","Reply within 1â2 business days"],y=1400,P={"@context":"https://schema.org","@type":"ContactPage",name:o.title,description:o.description,url:`${x}${o.path}`,isPartOf:{"@id":`${x}/#website`},about:{"@type":"Organization",name:v,url:`${x}/`}};function M(a){return new Promise(i=>setTimeout(i,a))}function A(){return t.jsxs("svg",{className:"contact-check",viewBox:"0 0 20 20",fill:"none","aria-hidden":!0,children:[t.jsx("circle",{cx:"10",cy:"10",r:"10",fill:"currentColor",fillOpacity:"0.12"}),t.jsx("path",{d:"M6 10.2l2.4 2.4L14 7.2",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})]})}function G(){return t.jsx("div",{className:"contact-success-icon","aria-hidden":!0,children:t.jsxs("svg",{viewBox:"0 0 48 48",fill:"none",children:[t.jsx("circle",{cx:"24",cy:"24",r:"24",fill:"currentColor",fillOpacity:"0.12"}),t.jsx("path",{d:"M14 24.5l7 7L34 18.5",stroke:"currentColor",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round"})]})})}function Y(){const[a,i]=c.useState({name:"",email:"",subject:"",category:"general",message:"",website:""}),[u,d]=c.useState(""),[j,p]=c.useState(!1),[n,f]=c.useState(!1),[w,m]=c.useState("");function r(e,h){i(g=>({...g,[e]:h}))}async function k(e){e.preventDefault(),d(""),p(!1),m(""),f(!0);const h=a.email,g=Date.now();try{const s=await fetch(`${T()}/api/contact`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}),N=await s.json().catch(()=>({}));if(!s.ok)throw new Error(N.message||"Could not send message");const b=Date.now()-g;b<y&&await M(y-b),m(h),p(!0),i({name:"",email:"",subject:"",category:"general",message:"",website:""})}catch(s){d(s.message||"We couldn't send your message. Check your connection and try again.")}finally{f(!1)}}return t.jsxs("div",{className:"contact-page",children:[t.jsx(z,{title:o.title,description:o.description,keywords:o.keywords,path:o.path,schemas:[P]}),t.jsx("header",{className:"contact-topbar",children:t.jsxs("div",{className:"contact-topbar-inner",children:[t.jsx(l,{to:"/",className:"contact-logo","aria-label":`${v} home`,children:t.jsx(C,{height:S,priority:!0,src:"/brand/colorful-logo.png",className:"contact-logo-img"})}),t.jsxs("nav",{className:"contact-topbar-nav","aria-label":"Page",children:[t.jsx(l,{to:"/",children:"Home"}),t.jsx("a",{href:"/terms.html",children:"Terms"}),t.jsx("a",{href:"/privacy.html",children:"Privacy"}),t.jsx(l,{to:"/login",children:"Sign in"})]})]})}),t.jsxs("div",{className:"contact-card",children:[t.jsxs("aside",{className:"contact-info",children:[t.jsx("p",{className:"contact-kicker",children:"FreelancerLLM · Glassfrog"}),t.jsx("h1",{children:"We're here to help"}),t.jsx("p",{className:"contact-desc",children:"Questions about billing, the Chrome extension, or your workspace? Send us a message and our team will respond as soon as we can."}),t.jsx("ul",{className:"contact-highlights",children:L.map(e=>t.jsxs("li",{children:[t.jsx(A,{}),t.jsx("span",{children:e})]},e))}),t.jsxs("p",{className:"contact-help-link",children:["Prefer email?"," ",t.jsx("a",{href:"mailto:[email protected]",children:"[email protected]"})]})]}),t.jsx("section",{className:"contact-form-panel",children:j?t.jsxs("div",{className:"contact-thanks",role:"status","aria-live":"polite",children:[t.jsx(G,{}),t.jsx("h2",{children:"Message sent successfully"}),t.jsxs("p",{className:"contact-thanks-lead",children:["Your message was received and saved. We'll reply to"," ",t.jsx("strong",{children:w||"your email"})," within 1â2 business days."]}),t.jsx("p",{className:"contact-thanks-hint",children:"You can close this page or send another message below."}),t.jsxs("div",{className:"contact-thanks-actions",children:[t.jsx(l,{to:"/",className:"contact-submit contact-submit-secondary",children:"Back to home"}),t.jsx("button",{type:"button",className:"contact-submit",onClick:()=>{p(!1),m(""),d("")},children:"Send another message"})]})]}):t.jsxs("div",{className:"contact-form-wrap",children:[t.jsx("h2",{children:"Contact us"}),t.jsx("p",{className:"contact-form-lead",children:"FreelancerLLM is a product of Glassfrog. Fill in the form and we'll get back to you."}),n&&t.jsxs("div",{className:"contact-submitting",role:"status","aria-live":"polite",children:[t.jsx("span",{className:"contact-spinner","aria-hidden":!0}),t.jsx("p",{children:"Sending your messageâ¦"}),t.jsx("span",{className:"contact-submitting-hint",children:"Sending your message to the teamâ¦"})]}),t.jsxs("form",{className:`contact-form${n?" is-submitting":""}`,onSubmit:k,"aria-busy":n,children:[t.jsxs("div",{className:"contact-row",children:[t.jsxs("label",{children:["Your name",t.jsx("input",{type:"text",value:a.name,onChange:e=>r("name",e.target.value),placeholder:"Alex Thompson",required:!0,autoComplete:"name",disabled:n})]}),t.jsxs("label",{children:["Work email",t.jsx("input",{type:"email",value:a.email,onChange:e=>r("email",e.target.value),placeholder:"[email protected]",required:!0,autoComplete:"email",disabled:n})]})]}),t.jsxs("div",{className:"contact-row",children:[t.jsxs("label",{children:["Category",t.jsx("select",{value:a.category,onChange:e=>r("category",e.target.value),disabled:n,children:E.map(e=>t.jsx("option",{value:e.value,children:e.label},e.value))})]}),t.jsxs("label",{children:["Subject",t.jsx("input",{type:"text",value:a.subject,onChange:e=>r("subject",e.target.value),placeholder:"How can we help?",required:!0,maxLength:200,disabled:n})]})]}),t.jsxs("label",{className:"contact-full",children:["Message",t.jsx("textarea",{value:a.message,onChange:e=>r("message",e.target.value),placeholder:"Tell us moreâ¦",required:!0,minLength:10,maxLength:5e3,rows:3,disabled:n})]}),t.jsx("input",{type:"text",name:"website",value:a.website,onChange:e=>r("website",e.target.value),className:"contact-honeypot",tabIndex:-1,autoComplete:"off","aria-hidden":"true"}),u&&t.jsx("p",{className:"contact-error",children:u}),t.jsx("button",{type:"submit",className:"contact-submit",disabled:n,children:n?t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"contact-btn-spinner","aria-hidden":!0}),"Sendingâ¦"]}):t.jsxs(t.Fragment,{children:["Send message",t.jsx("span",{"aria-hidden":!0,
1children:"â"})]})})]}),t.jsxs("p",{className:"contact-legal",children:["By submitting, you agree to our"," ",t.jsx("a",{href:"/terms.html",children:"Terms"})," and ",t.jsx("a",{href:"/privacy.html",children:"Privacy Policy"}),"."]})]})})]}),t.jsx("style",{children:O})]})}const O=` 2 .contact-page { 3 --contact-primary: #f15a24; 4 --contact-earth: #b9472a; 5 --contact-growth: #167d4a; 6 --contact-green: #167d4a; 7 --contact-green-mid: #f15a24; 8 --contact-teal: #f15a24; 9 --contact-teal-dim: rgba(241, 90, 36, 0.14); 10 --contact-ink: #151515; 11 --contact-muted: rgba(21, 21, 21, 0.55); 12 --contact-border: rgba(21, 21, 21, 0.1); 13 --contact-surface: #fffcf5; 14 --contact-sand: #fff4d6; 15 min-height: 100vh; 16 display: flex; 17 flex-direction: column; 18 align-items: center; 19 justify-content: flex-start; 20 padding: 0 20px 40px; 21 background: 22 radial-gradient(ellipse 90% 70% at 10% -10%, rgba(241, 90, 36, 0.12), transparent), 23 radial-gradient(ellipse 70% 60% at 100% 100%, rgba(255, 199, 44, 0.14), transparent), 24 var(--contact-surface); 25 font-family: var(--font-body, "Plus Jakarta Sans", system-ui, sans-serif); 26 color: var(--contact-ink); 27 box-sizing: border-box; 28 } 29 30 .contact-topbar { 31 width: 100%; 32 max-width: 960px; 33 padding: 14px 0 16px; 34 } 35 36 .contact-topbar-inner { 37 display: flex; 38 align-items: center; 39 justify-content: space-between; 40 gap: 16px; 41 } 42 43 .contact-logo { 44 display: flex; 45 text-decoration: none; 46 } 47 48 .contact-logo-img { 49 display: block !important; 50 max-width: min(220px, 50vw) !important; 51 max-height: 48px !important; 52 width: auto !important; 53 height: auto !important; 54 object-fit: contain !important; 55 } 56 57 .contact-topbar-nav { 58 display: flex; 59 align-items: center; 60 gap: 16px; 61 font-size: 0.9rem; 62 font-weight: 600; 63 } 64 65 .contact-topbar-nav a { 66 color: var(--contact-muted); 67 text-decoration: none; 68 } 69 70 .contact-topbar-nav a:hover { 71 color: var(--contact-primary); 72 } 73 74 .contact-card { 75 display: grid; 76 grid-template-columns: 1fr 1.15fr; 77 width: 100%; 78 max-width: 960px; 79 background: #fff; 80 border: 1px solid var(--contact-border); 81 border-radius: 16px; 82 overflow: hidden; 83 box-shadow: 0 8px 32px rgba(21, 21, 21, 0.08); 84 } 85 86 .contact-info { 87 padding: 36px 32px; 88 background: linear-gradient(160deg, rgba(241, 90, 36, 0.14), rgba(255, 244, 214, 0.55) 48%, rgba(255, 255, 255, 0.98) 100%); 89 border-right: 1px solid var(--contact-border); 90 display: flex; 91 flex-direction: column; 92 } 93 94 .contact-kicker { 95 margin: 0 0 12px; 96 font-size: 0.72rem; 97 font-weight: 600; 98 letter-spacing: 0.08em; 99 text-transform: uppercase; 100 color: var(--contact-muted); 101 } 102 103 .contact-info h1 { 104 margin: 0 0 12px; 105 font-family: var(--font-display, "Fraunces", Georgia, serif); 106 font-size: 1.65rem; 107 font-weight: 700; 108 line-height: 1.2; 109 letter-spacing: -0.02em; 110 color: var(--contact-ink); 111 } 112 113 .contact-desc { 114 margin: 0 0 20px; 115 font-size: 0.9rem; 116 line-height: 1.55; 117 color: var(--contact-muted); 118 } 119 120 .contact-highlights { 121 list-style: none; 122 margin: 0; 123 padding: 0; 124 display: flex; 125 flex-direction: column; 126 gap: 12px; 127 flex: 1; 128 } 129 130 .contact-highlights li { 131 display: flex; 132 align-items: flex-start; 133 gap: 10px; 134 font-size: 0.88rem; 135 color: rgba(21, 21, 21, 0.72); 136 line-height: 1.4; 137 } 138 139 .contact-check { 140 width: 20px; 141 height: 20px; 142 flex-shrink: 0; 143 color: var(--contact-green-mid);
144 margin-top: 1px; 145 } 146 147 .contact-help-link { 148 margin: 24px 0 0; 149 font-size: 0.85rem; 150 color: var(--contact-muted); 151 } 152 153 .contact-help-link a { 154 color: var(--contact-green-mid); 155 font-weight: 600; 156 text-decoration: none; 157 } 158 159 .contact-help-link a:hover { 160 color: var(--contact-green); 161 text-decoration: underline; 162 } 163 164 .contact-form-panel { 165 padding: 36px 32px; 166 background: rgba(255, 255, 255, 0.98); 167 } 168 169 .contact-form-panel h2 { 170 margin: 0 0 6px; 171 font-family: var(--font-display, "Fraunces", Georgia, serif); 172 font-size: 1.35rem; 173 font-weight: 700; 174 letter-spacing: -0.02em; 175 color: var(--contact-ink); 176 } 177 178 .contact-form-lead { 179 margin: 0 0 20px; 180 font-size: 0.88rem; 181 line-height: 1.5; 182 color: var(--contact-muted); 183 } 184 185 .contact-form { 186 display: flex; 187 flex-direction: column; 188 gap: 12px; 189 } 190 191 .contact-row { 192 display: grid; 193 grid-template-columns: 1fr 1fr; 194 gap: 12px; 195 } 196 197 .contact-form label, 198 .contact-full { 199 display: flex; 200 flex-direction: column; 201 gap: 6px; 202 font-size: 0.8rem; 203 font-weight: 500; 204 color: #6b7280; 205 } 206 207 .contact-form input, 208 .contact-form select, 209 .contact-form textarea { 210 width: 100%; 211 padding: 10px 12px; 212 border: 1px solid rgba(28, 25, 23, 0.18); 213 border-radius: 10px; 214 font: inherit; 215 font-size: 0.9rem; 216 color: var(--contact-ink); 217 background: #fffdf9; 218 box-sizing: border-box; 219 transition: border-color 0.15s, box-shadow 0.15s; 220 } 221 222 .contact-form input::placeholder, 223 .contact-form textarea::placeholder { 224 color: #a8a29e; 225 } 226 227 .contact-form input:focus, 228 .contact-form select:focus, 229 .contact-form textarea:focus { 230 outline: none; 231 border-color: var(--contact-teal); 232 box-shadow: 0 0 0 3px var(--contact-teal-dim); 233 } 234 235 .contact-form textarea { 236 resize: vertical; 237 min-height: 76px; 238 max-height: 120px; 239 } 240 241 .contact-error { 242 margin: 0; 243 font-size: 0.85rem; 244 color: #dc2626; 245 } 246 247 .contact-submit { 248 display: inline-flex; 249 align-items: center; 250 justify-content: center; 251 gap: 8px; 252 width: 100%; 253 margin-top: 4px; 254 padding: 12px 18px; 255 border: none; 256 border-radius: 999px; 257 background: var(--contact-primary); 258 color: #fff; 259 font: inherit; 260 font-size: 0.95rem; 261 font-weight: 700; 262 cursor: pointer; 263 text-decoration: none; 264 box-shadow: 0 4px 14px rgba(241, 90, 36, 0.28); 265 transition: background 0.15s, opacity 0.15s, transform 0.15s; 266 } 267 268 .contact-submit:hover:not(:disabled) { 269 background: var(--contact-earth); 270 opacity: 1; 271 transform: translateY(-1px); 272 } 273 274 .contact-submit:disabled { 275 opacity: 0.7; 276 cursor: wait; 277 } 278 279 .contact-submit span { 280 font-size: 1.1rem; 281 line-height: 1; 282 } 283 284 .contact-legal { 285 margin: 14px 0 0; 286 font-size: 0.78rem; 287 line-height: 1.5; 288 color: #78716c; 289 text-align: center; 290 } 291 292 .contact-legal a { 293 color: var(--contact-green-mid); 294 text-decoration: underline; 295 text-underline-offset: 2px; 296 } 297 298 .contact-legal a:hover { 299 color: var(--contact-green); 300 } 301 302 .contact-form-wrap { 303 position: relative; 304 } 305 306 .contact-submitting { 307 position: absolute; 308 inset: 0; 309 z-index: 2; 310 display: flex; 311 flex-direction: column; 312 align-items: center; 313 justify-content: center; 314 gap: 10px; 315 padding: 24px; 316 background: rgba(255, 255, 255, 0.92); 317 border-radius: 12px; 318 text-align: center; 319 } 320 321 .contact-submitting p { 322 margin: 0; 323 font-size: 1rem; 324 font-weight: 600; 325 color: var(--contact-ink); 326 } 327 328 .contact-submitting-hint { 329 font-size: 0.85rem; 330 color: var(--contact-muted); 331 } 332 333 .contact-spinner, 334 .contact-btn-spinner { 335 width: 28px; 336 height: 28px; 337 border: 2px solid rgba(241, 90, 36, 0.2); 338 border-top-color: var(--contact-teal); 339 border-radius: 50%; 340 animation: contact-spin 0.75s linear infinite; 341 } 342 343 .contact-btn-spinner { 344 width: 18px; 345 height: 18px; 346 border-width: 2px; 347 } 348 349 @keyframes contact-spin { 350 to { transform: rotate(360deg); } 351 } 352
353 .contact-form.is-submitting { 354 pointer-events: none; 355 opacity: 0.35; 356 filter: blur(0.5px); 357 } 358 359 .contact-thanks { 360 display: flex; 361 flex-direction: column; 362 align-items: center; 363 text-align: center; 364 gap: 12px; 365 padding: 16px 8px 8px; 366 animation: contact-thanks-in 0.45s ease-out; 367 } 368 369 @keyframes contact-thanks-in { 370 from { 371 opacity: 0; 372 transform: translateY(10px); 373 } 374 to { 375 opacity: 1; 376 transform: translateY(0); 377 } 378 } 379 380 .contact-success-icon { 381 width: 64px; 382 height: 64px; 383 color: var(--contact-green-mid); 384 animation: contact-pop 0.5s ease-out; 385 } 386 387 .contact-success-icon svg { 388 width: 100%; 389 height: 100%; 390 } 391 392 @keyframes contact-pop { 393 0% { transform: scale(0.6); opacity: 0; } 394 70% { transform: scale(1.08); } 395 100% { transform: scale(1); opacity: 1; } 396 } 397 398 .contact-thanks h2 { 399 margin: 4px 0 0; 400 font-family: var(--font-display, "Fraunces", Georgia, serif); 401 font-size: 1.5rem; 402 color: var(--contact-ink); 403 } 404 405 .contact-thanks-lead { 406 margin: 0; 407 font-size: 0.95rem; 408 color: var(--contact-muted); 409 line-height: 1.55; 410 max-width: 360px; 411 } 412 413 .contact-thanks-lead strong { 414 color: var(--contact-ink); 415 font-weight: 600; 416 } 417 418 .contact-thanks-hint { 419 margin: 0; 420 font-size: 0.82rem; 421 color: #78716c; 422 } 423 424 .contact-thanks-actions { 425 display: flex; 426 flex-direction: column; 427 gap: 10px; 428 width: 100%; 429 max-width: 320px; 430 margin-top: 8px; 431 } 432 433 .contact-submit-secondary { 434 background: #fff !important; 435 color: var(--contact-primary) !important; 436 border: 1px solid rgba(241, 90, 36, 0.35) !important; 437 box-shadow: none !important; 438 } 439 440 .contact-submit-secondary:hover:not(:disabled) { 441 background: rgba(241, 90, 36, 0.06) !important; 442 } 443 444 .contact-honeypot { 445 position: absolute; 446 left: -9999px; 447 width: 1px; 448 height: 1px; 449 opacity: 0; 450 pointer-events: none; 451 } 452 453 @media (max-width: 800px) { 454 .contact-page { 455 align-items: flex-start; 456 padding: 16px; 457 } 458 459 .contact-card { 460 grid-template-columns: 1fr; 461 max-width: 520px; 462 } 463 464 .contact-info { 465 border-right: none; 466 border-bottom: 1px solid var(--contact-border); 467 padding: 28px 24px; 468 } 469 470 .contact-form-panel { 471 padding: 28px 24px; 472 } 473 474 .contact-row { 475 grid-template-columns: 1fr; 476 } 477 } 478`;export{Y as default};
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.