aee0f09db8
- Datafabrik: Dockerfile fix, agentorkestrering fungerar - Vision: Identify-modell, FAISS, OCR alla testade - API: Alla 7 integrationstester passerade - Upplösare: Entitetsupplösning verifierad
485 lines
26 KiB
HTML
485 lines
26 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Infrastructure Risk Intelligence — Landvex</title>
|
|
<meta name="description" content="Landvex identifies infrastructure degradation, maintenance backlogs and disruption patterns before they appear in official records. District-level risk.">
|
|
<link rel="canonical" href="https://www.landvex.com/use-cases/infrastructure-risk/">
|
|
<meta name="robots" content="index, follow">
|
|
<meta property="og:type" content="website">
|
|
<meta property="og:url" content="https://www.landvex.com/use-cases/infrastructure-risk/">
|
|
<meta property="og:title" content="Infrastructure Risk Intelligence — Landvex">
|
|
<meta property="og:description" content="Landvex identifies infrastructure degradation, maintenance backlogs and disruption patterns before they appear in official records. District-level risk scoring across 20+ countries.">
|
|
<meta property="og:image" content="https://www.landvex.com/og-image.jpg">
|
|
<meta name="twitter:card" content="summary_large_image">
|
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
|
|
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
|
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
|
|
<style>
|
|
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
|
:root {
|
|
--bg-dark: #f5f5f7; --blue: #0066FF; --blue-dark: #0052CC;
|
|
--text-light: #1d1d1f; --text-dim: #6B6B6B; --text-muted: #6B6B6B;
|
|
--surface: #ffffff; --surface-2: #f5f5f7;
|
|
--border: rgba(0,0,0,0.08);
|
|
--radius-sm: 8px; --radius-md: 14px; --radius-lg: 24px;
|
|
}
|
|
html { scroll-behavior: smooth; }
|
|
body {
|
|
font-family: -apple-system, BlinkMacSystemFont, 'Inter', 'Helvetica Neue', sans-serif;
|
|
background: var(--bg-dark); color: var(--text-light);
|
|
line-height: 1.6; -webkit-font-smoothing: antialiased;
|
|
}
|
|
a { color: inherit; text-decoration: none; }
|
|
|
|
nav {
|
|
position: fixed; top: 0; left: 0; right: 0; z-index: 100;
|
|
display: flex; align-items: center; justify-content: space-between;
|
|
padding: 0 40px; height: 64px;
|
|
background: rgba(10,10,10,0.88);
|
|
backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px);
|
|
border-bottom: 1px solid var(--border);
|
|
}
|
|
.nav-logo {
|
|
font-size: 18px;
|
|
font-weight: 700;
|
|
letter-spacing: -0.3px;
|
|
color: #1d1d1f; }
|
|
.btn {
|
|
display: inline-flex; align-items: center; gap: 6px;
|
|
padding: 10px 22px; background: var(--blue); color: #1d1d1f;
|
|
font-size: 14px; font-weight: 600; border-radius: var(--radius-md);
|
|
border: none; cursor: pointer; transition: background 0.2s, transform 0.15s;
|
|
}
|
|
.btn:hover { background: var(--blue-dark); transform: translateY(-1px); }
|
|
.btn-outline {
|
|
background: transparent; border: 1.5px solid rgba(0,0,0,0.18); color: var(--text-light);
|
|
}
|
|
.btn-outline:hover { background: rgba(0,0,0,0.04); transform: translateY(-1px); }
|
|
.btn-lg { padding: 14px 30px; font-size: 16px; }
|
|
|
|
.hero {
|
|
min-height: 88vh; display: flex; flex-direction: column;
|
|
align-items: center; justify-content: center; text-align: center;
|
|
padding: 120px 24px 80px; position: relative; overflow: hidden;
|
|
}
|
|
.hero::before {
|
|
content: ''; position: absolute; top: -200px; left: 50%; transform: translateX(-50%);
|
|
width: 900px; height: 600px;
|
|
background: radial-gradient(ellipse at center, rgba(0,102,255,0.12) 0%, transparent 70%);
|
|
pointer-events: none;
|
|
}
|
|
.hero-eyebrow {
|
|
display: inline-flex; align-items: center; gap: 8px;
|
|
background: rgba(0,102,255,0.1); border: 1px solid rgba(0,102,255,0.25);
|
|
color: #5599ff; font-size: 12px; font-weight: 600; letter-spacing: 0.08em;
|
|
text-transform: uppercase; padding: 6px 16px; border-radius: 100px; margin-bottom: 28px;
|
|
}
|
|
.hero h1 {
|
|
font-size: clamp(32px, 5.5vw, 62px); font-weight: 800;
|
|
letter-spacing: -2px; line-height: 1.05; color: #1d1d1f;
|
|
max-width: 860px; margin-bottom: 24px;
|
|
}
|
|
.hero-sub {
|
|
font-size: clamp(16px, 2vw, 19px); color: var(--text-dim);
|
|
max-width: 680px; line-height: 1.65; margin-bottom: 40px;
|
|
}
|
|
.hero-ctas { display: flex; gap: 14px; flex-wrap: wrap; justify-content: center; }
|
|
|
|
section { padding: 96px 24px; }
|
|
.container { max-width: 1140px; margin: 0 auto; }
|
|
.section-label {
|
|
font-size: 12px; font-weight: 700; letter-spacing: 0.1em;
|
|
text-transform: uppercase; color: var(--blue); margin-bottom: 16px;
|
|
}
|
|
.section-title {
|
|
font-size: clamp(28px, 4vw, 44px); font-weight: 800;
|
|
letter-spacing: -1.2px; line-height: 1.1; color: #1d1d1f; margin-bottom: 16px;
|
|
}
|
|
.section-sub { font-size: 17px; color: var(--text-dim); max-width: 600px; line-height: 1.7; }
|
|
|
|
.feature-grid {
|
|
display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; margin-top: 40px;
|
|
}
|
|
.feature-card {
|
|
background: var(--surface-2); border: 1px solid var(--border);
|
|
border-radius: var(--radius-lg); padding: 32px 28px;
|
|
transition: border-color 0.25s, transform 0.2s;
|
|
}
|
|
.feature-card:hover { border-color: rgba(0,102,255,0.35); transform: translateY(-3px); }
|
|
.feature-icon { width: 32px; height: 32px; margin-bottom: 16px; color: var(--blue); }
|
|
.feature-card h3 { font-size: 16px; font-weight: 700; color: #1d1d1f; margin-bottom: 8px; }
|
|
.feature-card p { font-size: 14px; color: var(--text-dim); line-height: 1.6; }
|
|
|
|
.process-steps {
|
|
display: flex; flex-direction: column; gap: 24px; margin-top: 40px;
|
|
}
|
|
.process-step {
|
|
background: var(--surface-2); border: 1px solid var(--border);
|
|
border-radius: var(--radius-lg); padding: 28px 32px;
|
|
display: flex; gap: 24px; align-items: flex-start;
|
|
}
|
|
.step-number {
|
|
font-size: 28px; font-weight: 800; color: var(--blue);
|
|
min-width: 40px; line-height: 1;
|
|
}
|
|
.step-content h3 { font-size: 16px; font-weight: 700; color: #1d1d1f; margin-bottom: 6px; }
|
|
.step-content p { font-size: 14px; color: var(--text-dim); line-height: 1.6; }
|
|
|
|
.evidence-grid {
|
|
display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px; margin-top: 40px;
|
|
}
|
|
.evidence-card {
|
|
background: var(--surface-2); border: 1px solid var(--border);
|
|
border-radius: var(--radius-lg); padding: 28px;
|
|
}
|
|
.evidence-card h3 { font-size: 15px; font-weight: 700; color: #1d1d1f; margin-bottom: 10px; }
|
|
.evidence-card p { font-size: 14px; color: var(--text-dim); line-height: 1.6; }
|
|
|
|
.cta-banner {
|
|
background: #e8f0fe; border-radius: 16px; padding: 40px 48px;
|
|
display: flex; align-items: center; gap: 48px; flex-wrap: wrap; margin-top: 48px;
|
|
}
|
|
.cta-banner h3 { color: #1d1d1f; font-size: 1.25rem; font-weight: 800; margin-bottom: 8px; }
|
|
.cta-banner p { color: rgba(0,0,0,.7); line-height: 1.65; font-size: .9375rem; }
|
|
.cta-banner-text { flex: 1; min-width: 260px; }
|
|
|
|
.contact-wrapper { max-width: 680px; margin: 0 auto; text-align: center; }
|
|
.contact-wrapper .section-title { margin-bottom: 10px; }
|
|
.contact-wrapper .section-sub { margin: 0 auto 48px; }
|
|
.contact-form {
|
|
background: var(--surface); border: 1px solid var(--border);
|
|
border-radius: var(--radius-lg); padding: 40px; text-align: left;
|
|
}
|
|
.form-group { display: flex; flex-direction: column; gap: 8px; margin-bottom: 16px; }
|
|
.form-group label { font-size: 13px; font-weight: 600; color: var(--text-dim); }
|
|
.form-group input, .form-group textarea {
|
|
background: var(--bg-dark); border: 1.5px solid var(--border);
|
|
border-radius: var(--radius-md); color: #1d1d1f;
|
|
font-size: 15px; font-family: inherit; padding: 12px 16px;
|
|
outline: none; transition: border-color 0.2s; width: 100%;
|
|
}
|
|
.form-group input:focus, .form-group textarea:focus { border-color: var(--blue); }
|
|
.form-group input::placeholder, .form-group textarea::placeholder { color: var(--text-muted); }
|
|
.form-group textarea { min-height: 120px; resize: vertical; }
|
|
.form-note { font-size: 12px; color: var(--text-muted); margin-top: 12px; text-align: center; }
|
|
#form-message {
|
|
display: none; padding: 14px 20px; border-radius: var(--radius-md);
|
|
font-size: 14px; font-weight: 600; text-align: center; margin-top: 16px;
|
|
}
|
|
#form-message.success { background: rgba(0,200,80,0.1); border: 1px solid rgba(0,200,80,0.25); color: #4ade80; }
|
|
#form-message.error { background: rgba(255,60,60,0.1); border: 1px solid rgba(255,60,60,0.25); color: #f87171; }
|
|
|
|
footer { border-top: 1px solid var(--border); padding: 40px; }
|
|
.footer-inner {
|
|
max-width: 1140px; margin: 0 auto;
|
|
display: flex; align-items: center; justify-content: space-between;
|
|
flex-wrap: wrap; gap: 20px;
|
|
}
|
|
.footer-logo { font-size: 17px; font-weight: 700; color: #1d1d1f; }
|
|
.footer-copy { font-size: 13px; color: var(--text-muted); }
|
|
.footer-tagline { font-size: 12px; color: var(--text-muted); margin-top: 4px; }
|
|
.footer-links { display: flex; gap: 24px; align-items: center; flex-wrap: wrap; }
|
|
.footer-links a { font-size: 14px; color: var(--text-muted); transition: color 0.2s; }
|
|
.footer-links a:hover { color: #1d1d1f; }
|
|
.footer-social {
|
|
width: 32px; height: 32px; border: 1px solid var(--border); border-radius: 8px;
|
|
display: flex; align-items: center; justify-content: center;
|
|
transition: border-color 0.2s, background 0.2s;
|
|
}
|
|
.footer-social:hover { border-color: rgba(0,0,0,0.25); background: rgba(0,0,0,0.04); }
|
|
|
|
.lv-disclaimer{font-size:.75rem;color:rgba(0,0,0,.75);margin-top:24px;padding:12px 16px;background:rgba(0,0,0,.04);border-radius:8px;line-height:1.6;max-width:800px}
|
|
.lv-disclaimer a{color:rgba(0,0,0,.65);text-decoration:underline}
|
|
|
|
@media (max-width: 900px) {
|
|
nav { padding: 0 20px; }
|
|
.feature-grid { grid-template-columns: 1fr 1fr; }
|
|
.evidence-grid { grid-template-columns: 1fr; }
|
|
}
|
|
@media (max-width: 600px) {
|
|
section { padding: 72px 20px; }
|
|
.feature-grid { grid-template-columns: 1fr; }
|
|
.contact-form { padding: 24px 20px; }
|
|
nav { padding: 0 16px; }
|
|
.hero h1 { letter-spacing: -1px; }
|
|
.cta-banner { padding: 28px 24px; gap: 24px; }
|
|
.process-step { flex-direction: column; gap: 12px; }
|
|
.container { padding: 0 16px !important; box-sizing: border-box; }
|
|
section { padding: 48px 16px !important; }
|
|
.hero { padding: 100px 16px 60px !important; }
|
|
.hero-ctas { flex-direction: column !important; gap: 12px !important; }
|
|
.hero-ctas a { width: 100% !important; text-align: center !important; }
|
|
.cta-banner { flex-direction: column !important; }
|
|
.cta-banner a { width: 100% !important; text-align: center !important; white-space: normal !important; }
|
|
.evidence-grid { grid-template-columns: 1fr !important; }
|
|
}
|
|
</style>
|
|
|
|
<script type="application/ld+json">
|
|
{
|
|
"@context": "https://schema.org",
|
|
"@type": "BreadcrumbList",
|
|
"itemListElement": [
|
|
{"@type": "ListItem", "position": 1, "name": "Landvex", "item": "https://www.landvex.com/"},
|
|
{"@type": "ListItem", "position": 2, "name": "Use Cases", "item": "https://www.landvex.com/use-cases/"},
|
|
{"@type": "ListItem", "position": 3, "name": "Infrastructure Risk Intelligence", "item": "https://www.landvex.com/use-cases/infrastructure-risk/"}
|
|
]
|
|
}
|
|
</script>
|
|
<link rel="alternate" hreflang="x-default" href="https://www.landvex.com/">
|
|
<link rel="alternate" hreflang="en" href="https://www.landvex.com/">
|
|
<link rel="alternate" hreflang="sv" href="https://landvex.se/">
|
|
<link rel="alternate" hreflang="de" href="https://landvex.de/">
|
|
<link rel="alternate" hreflang="fr" href="https://landvex.fr/">
|
|
<link rel="alternate" hreflang="en-GB" href="https://landvex.co.uk/">
|
|
<link rel="alternate" hreflang="it" href="https://landvex.it/">
|
|
<style>
|
|
@media (max-width: 640px) {
|
|
.hero h1 { font-size: 2rem !important; }
|
|
.hero p { font-size: 1rem !important; }
|
|
.card { padding: 1.5rem !important; }
|
|
.grid { grid-template-columns: 1fr !important; }
|
|
.btn { padding: 0.75rem 1.5rem !important; font-size: 1rem !important; }
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
|
|
<nav>
|
|
<a class="nav-logo" href="https://landvex.com/">← Back to Landvex</a>
|
|
<a class="btn btn-outline" href="#contact">Get in touch →</a>
|
|
</nav>
|
|
|
|
<!-- HERO -->
|
|
<section class="hero">
|
|
<div class="hero-eyebrow">Use Case — Infrastructure Risk</div>
|
|
<h1>Where will infrastructure problems emerge next?</h1>
|
|
<p class="hero-sub">Landvex identifies infrastructure degradation, maintenance backlogs and disruption patterns before they appear in official records. District-level risk scoring across 20+ countries.</p>
|
|
<div class="hero-ctas">
|
|
<a class="btn btn-lg" href="#contact">Request a briefing →</a>
|
|
<a class="btn btn-outline btn-lg" href="#how-it-works">How it works</a>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- CAPABILITIES -->
|
|
<section id="capabilities" style="background:var(--surface)">
|
|
<div class="container">
|
|
<div class="section-label">Intelligence capabilities</div>
|
|
<h2 class="section-title">What Landvex delivers for this use case</h2>
|
|
<p class="section-sub">Purpose-built intelligence outputs drawn from field observations, not modelled proxies.</p>
|
|
<div class="feature-grid">
|
|
<div class="feature-card">
|
|
<svg class="feature-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><polygon points="7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2"/><line x1="12" y1="8" x2="12" y2="12"/><line x1="12" y1="16" x2="12.01" y2="16"/></svg>
|
|
<h3>Infrastructure Degradation Signals</h3>
|
|
<p>Field observations of road condition, utility infrastructure, drainage, and structural maintenance status across districts. Launching August 2026.</p>
|
|
</div>
|
|
<div class="feature-card">
|
|
<svg class="feature-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"/></svg>
|
|
<h3>Maintenance Backlog Index</h3>
|
|
<p>Areas where observed infrastructure condition diverges from official maintenance records. The gap between what is reported and what is present on the ground.</p>
|
|
</div>
|
|
<div class="feature-card">
|
|
<svg class="feature-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"/></svg>
|
|
<h3>Disruption Frequency Tracking</h3>
|
|
<p>Historical and current transport disruption patterns by district. Identifies areas where service interruptions are clustering and where they are emerging.</p>
|
|
</div>
|
|
<div class="feature-card">
|
|
<svg class="feature-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><polygon points="1 6 1 22 8 18 16 22 23 18 23 2 16 6 8 2 1 6"/><line x1="8" y1="2" x2="8" y2="18"/><line x1="16" y1="6" x2="16" y2="22"/></svg>
|
|
<h3>Risk Zone Mapping</h3>
|
|
<p>District-level risk classifications based on observed conditions across drainage, structural load, utility age, and transport dependency.</p>
|
|
</div>
|
|
<div class="feature-card">
|
|
<svg class="feature-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><polygon points="7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2"/><line x1="12" y1="8" x2="12" y2="12"/><line x1="12" y1="16" x2="12.01" y2="16"/></svg>
|
|
<h3>Contradiction Engine — Infrastructure</h3>
|
|
<p>Official infrastructure ratings challenged against field data. Where a district is rated sound but observed conditions suggest otherwise, the conflict is surfaced explicitly.</p>
|
|
</div>
|
|
<div class="feature-card">
|
|
<svg class="feature-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><rect x="8" y="2" width="8" height="4" rx="1" ry="1"/></svg>
|
|
<h3>Structured Risk Briefings</h3>
|
|
<p>Delivered as structured intelligence output: district scores, conflict flags, confidence levels, and a clear statement of what the evidence supports.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- HOW IT WORKS -->
|
|
<section id="how-it-works" style="background: var(--bg-dark)">
|
|
<div class="container">
|
|
<div class="section-label">Process</div>
|
|
<h2 class="section-title">How Landvex supports this decision</h2>
|
|
<p class="section-sub">From question to verified intelligence output in 24–72 hours.</p>
|
|
<div class="process-steps">
|
|
<div class="process-step">
|
|
<div class="step-number">01</div>
|
|
<div class="step-content">
|
|
<h3>Define the decision</h3>
|
|
<p>You tell us the specific question — city, district scope, timeline, and what decision depends on the answer. We do not provide generic reports.</p>
|
|
</div>
|
|
</div>
|
|
<div class="process-step">
|
|
<div class="step-number">02</div>
|
|
<div class="step-content">
|
|
<h3>Field collection and cross-referencing</h3>
|
|
<p>Landvex deploys targeted field observation across the relevant geography. Observed conditions are cross-referenced against official sources and prior data to surface conflicts.</p>
|
|
</div>
|
|
</div>
|
|
<div class="process-step">
|
|
<div class="step-number">03</div>
|
|
<div class="step-content">
|
|
<h3>Contradiction Engine review</h3>
|
|
<p>Every output is processed by the Landvex Contradiction Engine. Conclusions are challenged by a second model before delivery. What doesn’t add up is flagged explicitly.</p>
|
|
</div>
|
|
</div>
|
|
<div class="process-step">
|
|
<div class="step-number">04</div>
|
|
<div class="step-content">
|
|
<h3>Structured briefing delivery</h3>
|
|
<p>You receive a structured intelligence briefing: district-level scores, conflict flags, confidence levels, and a clear answer to the question you asked. Delivered within 24–72 hours.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- EVIDENCE -->
|
|
<section id="evidence" style="background:var(--surface)">
|
|
<div class="container">
|
|
<div class="section-label">Why field intelligence</div>
|
|
<h2 class="section-title">What conventional data sources miss</h2>
|
|
<p class="section-sub">Official statistics, satellite imagery, and desk research each have blind spots. Field observation closes the gap.</p>
|
|
<div class="evidence-grid">
|
|
<div class="evidence-card">
|
|
<h3>Official data lags reality by 12–24 months</h3>
|
|
<p>Municipal statistics, planning registers, and economic surveys reflect conditions that already existed when decisions were made. Landvex measures what is happening now.</p>
|
|
</div>
|
|
<div class="evidence-card">
|
|
<h3>Satellite imagery cannot measure commercial activity</h3>
|
|
<p>Remote sensing identifies structural change but cannot assess vacancy quality, business mix, footfall trends, or the sentiment signals that precede measurable deterioration.</p>
|
|
</div>
|
|
<div class="evidence-card">
|
|
<h3>Desk research inherits the official narrative</h3>
|
|
<p>Analysis built on published sources reproduces whatever the official narrative says. Landvex surfaces the delta between what is reported and what is observed.</p>
|
|
</div>
|
|
<div class="evidence-card">
|
|
<h3>The Contradiction Engine flags what models miss</h3>
|
|
<p>AI models trained on official data perpetuate official assumptions. Landvex’s Contradiction Engine is specifically designed to challenge the consensus before it reaches your desk.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- CTA -->
|
|
<section id="briefing" style="background: var(--bg-dark)">
|
|
<div class="container">
|
|
<div class="cta-banner">
|
|
<div class="cta-banner-text">
|
|
<h3>Request an intelligence briefing</h3>
|
|
<p>Tell us your decision. We will show you what the data says — and what it doesn’t. Delivered in 24–72 hours.</p>
|
|
</div>
|
|
<a class="btn btn-lg" href="#contact" style="white-space:nowrap;flex-shrink:0">Request briefing →</a>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- CONTACT -->
|
|
<section id="contact">
|
|
<div class="container">
|
|
<div class="contact-wrapper">
|
|
<div class="section-label">Request a briefing</div>
|
|
<h2 class="section-title">What decision are you trying to make?</h2>
|
|
<p class="section-sub">Describe the question you need answered. We will show you how Landvex can support it.</p>
|
|
<form class="contact-form" id="contact-form">
|
|
<div class="form-group">
|
|
<label for="name">Name</label>
|
|
<input type="text" id="name" name="name" placeholder="Your name" required>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="email">Email</label>
|
|
<input type="email" id="email" name="email" placeholder="you@organisation.com" required>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="message">Message</label>
|
|
<textarea id="message" name="message" placeholder="Describe your decision and the geography involved..."></textarea>
|
|
</div>
|
|
<button type="submit" class="btn btn-lg" style="width:100%; justify-content: center;">
|
|
Request briefing →
|
|
</button>
|
|
<p class="form-note">We don’t spam. Your information stays private.</p>
|
|
<div id="form-message"></div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
<p class="lv-disclaimer">Intelligence outputs are indicative and advisory only. Based on field observations — not investment, financial or legal advice. Landvex AB accepts no liability for decisions made based on these outputs. <a href="/methodology/">Methodology →</a></p>
|
|
</section>
|
|
|
|
<footer>
|
|
<div class="footer-inner">
|
|
<div>
|
|
<div class="footer-logo">LandveX</div>
|
|
<div class="footer-copy">© 2026 Landvex Inc · Landvex AB (org.nr 559141-7042)</div>
|
|
<div class="footer-tagline">Decision intelligence for the physical world.</div>
|
|
</div>
|
|
<div class="footer-links">
|
|
<a href="https://landvex.com/">Home</a>
|
|
<a href="/verticals/">Verticals</a>
|
|
<a href="/methodology/">Methodology</a>
|
|
<a href="/security/">Security</a>
|
|
<a href="https://www.quixzoom.com/" target="_blank" rel="noopener">quiXzoom →</a>
|
|
<a href="mailto:contact@landvex.com">contact@landvex.com</a>
|
|
<a href="mailto:security@landvex.com" style="color:var(--text-muted,#888)">security@landvex.com</a>
|
|
<a href="https://www.linkedin.com/company/landvex" target="_blank" rel="noopener" class="footer-social" title="LandveX on LinkedIn">
|
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none">
|
|
<path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z" stroke="#888" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
<rect x="2" y="9" width="4" height="12" stroke="#888" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
<circle cx="4" cy="4" r="2" stroke="#888" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
</svg>
|
|
</a>
|
|
<a href="https://x.com/landvex" target="_blank" rel="noopener" class="footer-social" title="LandveX on X">
|
|
<svg width="15" height="15" viewBox="0 0 24 24" fill="#888">
|
|
<path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-4.714-6.231-5.401 6.231H2.746l7.73-8.835L1.254 2.25H8.08l4.253 5.622 5.912-5.622Zm-1.161 17.52h1.833L7.084 4.126H5.117z"/>
|
|
</svg>
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
|
|
<script>
|
|
document.getElementById('contact-form').addEventListener('submit', async function(e) {
|
|
e.preventDefault();
|
|
const btn = this.querySelector('button[type="submit"]');
|
|
const msgEl = document.getElementById('form-message');
|
|
btn.disabled = true; btn.textContent = 'Sending...';
|
|
const data = {
|
|
source: 'landvex-usecase-infrastructure-risk',
|
|
name: this.name.value,
|
|
email: this.email.value,
|
|
message: this.message.value
|
|
};
|
|
try {
|
|
const res = await fetch('https://api.quixzoom.com/api/qz/waitlist', {
|
|
method: 'POST', headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify(data)
|
|
});
|
|
if (res.ok || res.status === 201) {
|
|
msgEl.className = 'success';
|
|
msgEl.textContent = "\u2713 Request received. We\u2019ll be in touch within one business day.";
|
|
msgEl.style.display = 'block'; this.reset();
|
|
} else { throw new Error('Server error ' + res.status); }
|
|
} catch(err) {
|
|
msgEl.className = 'error';
|
|
msgEl.textContent = 'Something went wrong. Please email us at contact@landvex.com.';
|
|
msgEl.style.display = 'block';
|
|
}
|
|
btn.disabled = false; btn.textContent = 'Request briefing \u2192';
|
|
});
|
|
document.querySelectorAll('a[href^="#"]').forEach(a => {
|
|
a.addEventListener('click', e => {
|
|
const t = document.querySelector(a.getAttribute('href'));
|
|
if (t) { e.preventDefault(); t.scrollIntoView({ behavior: 'smooth', block: 'start' }); }
|
|
});
|
|
});
|
|
</script>
|
|
</body>
|
|
</html> |