<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>The Crew Intent — The movement starts soon</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="description" content="VERY EXCITING NEWS. Coming to a screen near you. Be first to know." />
<style>
:root{
--orange:#E54A1E; --green:#4FA137; --cream:#F3F2DA; --charcoal:#1F1F1F;
}
*{box-sizing:border-box} html,body{height:100%}
body{ margin:0; font-family:system-ui,-apple-system,Segoe UI,Inter,Roboto,Arial,sans-serif;
color:var(--cream); background: radial-gradient(1200px 600px at 10% 10%, #242424 0%, var(--charcoal) 60%) no-repeat var(--charcoal); line-height:1.5; }
.wrap{ min-height:100dvh; display:flex; align-items:center; justify-content:center; padding:clamp(16px,3vw,40px); }
.card{ width:min(920px,100%); background:rgba(255,255,255,.02); border:1px solid rgba(255,255,255,.08);
border-radius:20px; padding:clamp(20px,5vw,48px); box-shadow:0 20px 60px rgba(0,0,0,.35), inset 0 1px 0 rgba(255,255,255,.04); backdrop-filter:blur(6px); }
.logo-row{ display:flex; align-items:center; justify-content:space-between; gap:16px; margin-bottom:24px; }
.logo{ display:flex; align-items:center; gap:12px; text-decoration:none; color:var(--cream); }
.logo img{ height:40px; width:auto; display:block; }
.logo-text{ font-weight:700; letter-spacing:.4px }
.tag{ padding:6px 10px; border:1px solid rgba(255,255,255,.14); border-radius:999px; font-size:12px; opacity:.9; }
h1{ margin:6px 0 6px; font-size:clamp(28px,4vw,48px); line-height:1.1; letter-spacing:-.5px; }
.headline-accent{ display:inline-block; background:linear-gradient(90deg, var(--orange), var(--green));
-webkit-background-clip:text; background-clip:text; color:transparent; }
.sub{ margin:0 0 22px; color:rgba(243,242,218,.8); font-size:clamp(16px,1.8vw,18px); max-width:60ch; }
.pill-row{ display:flex; flex-wrap:wrap; gap:10px; margin:12px 0 28px; }
.pill{ padding:8px 12px; border:1px solid rgba(255,255,255,.12); border-radius:999px; font-size:13px; opacity:.9; }
form{ display:grid; gap:12px; grid-template-columns: 1fr auto; align-items:center;
background:rgba(0,0,0,.25); border:1px solid rgba(255,255,255,.10); border-radius:14px; padding:10px; width:100%; }
input[type="email"]{ appearance:none; width:100%; background:rgba(255,255,255,.06); border:1px solid rgba(255,255,255,.12);
color:var(--cream); padding:14px; border-radius:10px; font-size:16px; outline:none; }
input[type="email"]::placeholder{ color:rgba(255,255,255,.55) }
button{ appearance:none; border:0; cursor:pointer; padding:14px 18px; border-radius:10px; font-weight:700; letter-spacing:.3px; color:#111;
background:linear-gradient(90deg, var(--orange), #ff8f5f); box-shadow:0 6px 18px rgba(229,74,30,.35); transition:transform .06s ease; }
button:active{ transform:translateY(1px) }
.consent{ display:flex; align-items:flex-start; gap:10px; margin-top:10px; font-size:13px; color:rgba(243,242,218,.8) }
.consent input{ margin-top:3px } .consent a{ color:var(--cream) }
.fineprint{ font-size:12px; color:rgba(243,242,218,.65); margin-top:8px }
.success,.error{ display:none; margin-top:14px; padding:12px 14px; border-radius:10px; font-size:14px; border:1px solid transparent; }
.success{ background:rgba(79,161,55,.12); border-color:rgba(79,161,55,.3) }
.error{ background:rgba(229,74,30,.12); border-color:rgba(229,74,30,.3) }
footer{ margin-top:32px; display:flex; justify-content:space-between; align-items:center; gap:12px; flex-wrap:wrap; color:rgba(243,242,218,.7); font-size:13px; }
.foot-links{ display:flex; gap:16px } .foot-links a{ color:rgba(243,242,218,.9) }
@media (max-width:640px){ form{ grid-template-columns:1fr } button{ width:100% } }
.glow{ position:fixed; inset:auto -10% -20% auto; width:55vmin; height:55vmin; filter:blur(80px);
background: conic-gradient(from 120deg, rgba(229,74,30,.22), rgba(79,161,55,.18), transparent 70%); pointer-events:none; z-index:-1; opacity:.8; animation:drift 22s linear infinite;}
@keyframes drift{ 0%{transform:translate(0,0) rotate(0)} 50%{transform:translate(-4%,-3%) rotate(180deg)} 100%{transform:translate(0,0) rotate(360deg)} }
</style>
</head>
<body>
<div class="glow" aria-hidden="true"></div>
<div class="wrap">
<main class="card" role="main" aria-labelledby="headline">
<div class="logo-row">
<a class="logo" href="/" aria-label="The Crew Intent home">
<img src="/assets/tci-logo.png" alt="The Crew Intent logo" />
<div class="logo-text">The Crew Intent</div>
</a>
<span class="tag">Innovation, in Action</span>
</div>
<h1 id="headline">
<span class="headline-accent">VERY EXCITING NEWS</span><br />
The movement starts soon.
</h1>
<p class="sub">Coming to a screen near you… premium, purpose-built kit for film crews — starting with something very special. Be first to know when we lift the curtain.</p>
<div class="pill-row" aria-hidden="true">
<span class="pill">Built for set life</span>
<span class="pill">Crew-grade</span>
<span class="pill">UK-engineered</span>
<span class="pill">Early access list</span>
</div>
<!-- EARLY ACCESS FORM -->
<form id="earlyForm" action="https://script.google.com/macros/s/AKfycbyrBbSvwsxAz1ZtEveX3T9hrEA5WsCtpEabgPAHMTPNaZj9WlFq55a_Wf1yHN4M37kIjg/exec" method="POST" novalidate>
<input type="hidden" name="rfq" id="rfq" />
<input type="hidden" name="utm_source" id="utm_source" />
<input type="hidden" name="utm_medium" id="utm_medium" />
<input type="hidden" name="utm_campaign" id="utm_campaign" />
<input type="hidden" name="referrer" id="referrer" />
<input type="hidden" name="user_agent" id="user_agent" />
<input type="hidden" name="page" id="page" />
<input type="hidden" name="consent" value="yes" />
<label class="sr-only" for="email">Email address</label>
<input id="email" name="email" type="email" inputmode="email" autocomplete="email"
placeholder="your@email.com" required aria-required="true" />
<button type="submit" aria-label="Join the early access list">Join the list</button>
<div class="consent">
<input type="checkbox" id="consentBox" required aria-required="true" />
<label for="consentBox">I agree to receive early-access updates from The Crew Intent. I can unsubscribe any time. See our <a href="/privacy" target="_blank" rel="noopener">Privacy Notice</a>.</label>
</div>
<div class="fineprint">We’ll only email when there’s real news. No spam. UK GDPR compliant.</div>
<div id="success" class="success" role="status">Thanks — you’re on the list. Check your inbox to confirm.</div>
<div id="error" class="error" role="alert">Please check your email and try again.</div>
</form>
<footer>
<div>© <span id="year"></span> The Crew Intent</div>
<div class="foot-links">
<a href="mailto:info@thecrewintent.com">info@thecrewintent.com</a>
<a href="/terms">Terms</a>
<a href="/privacy">Privacy</a>
</div>
</footer>
</main>
</div>
<script>
(function captureMeta(){
const p = new URLSearchParams(window.location.search);
const get = k => p.get(k) || '';
const set = (id, v) => { const el = document.getElementById(id); if (el) el.value = v; };
set('rfq', get('rfq'));
set('utm_source', get('utm_source') || get('source'));
set('utm_medium', get('utm_medium'));
set('utm_campaign', get('utm_campaign'));
set('referrer', document.referrer || '');
set('user_agent', navigator.userAgent || '');
set('page', location.href);
document.getElementById('year').textContent = new Date().getFullYear();
})();
const form = document.getElementById('earlyForm');
const emailInput = document.getElementById('email');
const consentBox = document.getElementById('consentBox');
const successEl = document.getElementById('success');
const errorEl = document.getElementById('error');
form.addEventListener('submit', async (e) => {
e.preventDefault();
successEl.style.display = 'none';
errorEl.style.display = 'none';
const email = emailInput.value.trim();
const ok = /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
if(!ok){ emailInput.focus(); errorEl.textContent = "Enter a valid email."; errorEl.style.display='block'; return; }
if(!consentBox.checked){ errorEl.textContent = "Please tick the consent box."; errorEl.style.display='block'; return; }
const data = new FormData(form);
try {
const res = await fetch(form.action, { method:'POST', body:data });
const json = await res.json().catch(()=> ({}));
if(res.ok && json.ok){
form.reset();
successEl.style.display = 'block';
} else {
errorEl.textContent = json.error || "Something went wrong. Try again.";
errorEl.style.display = 'block';
}
} catch (err) {
errorEl.textContent = "Network error. Please try again.";
errorEl.style.display = 'block';
}
});
</script>
</body>
</html>