PageSourceSearch

https://www.freelancerllm.com/assets/ContactPage-CBELtK4w.js

js freelancerllm.com collected 2026-10-02 01:29:43 UTC 16,944 bytes, 478 lines download raw bytes

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.