const { Reveal: RevealC, RevealText: RevealTextC, Marquee: MarqueeC, LiveClock: LiveClockC, SERVICES: SERVICES_C, PROCESS: PROCESS_C, JOURNAL: JOURNAL_C } = window; function ContactForm() { const [state, setState] = React.useState('idle'); const [err, setErr] = React.useState(''); async function submit(e) { e.preventDefault(); const fd = new FormData(e.target); setState('sending'); setErr(''); try { const r = await fetch('/contact.php', { method: 'POST', body: fd }); const j = await r.json(); if (j.ok) { setState('done'); } else { setState('idle'); setErr(j.error || 'Something broke — please try again.'); } } catch (_) { setState('idle'); setErr('Something broke — please try again.'); } } if (state === 'done') { return
Got it. We read everything, and we reply within two working days.
; } return ( ); } function DirectionC() { return ({p.desc}
The roster stays short on purpose — a few clients at a time, never more. Tell us what you're trying to change and we'll tell you, honestly, whether we're the right hands for it.