landvex: Fixar och tester klara för alla komponenter
- Datafabrik: Dockerfile fix, agentorkestrering fungerar - Vision: Identify-modell, FAISS, OCR alla testade - API: Alla 7 integrationstester passerade - Upplösare: Entitetsupplösning verifierad
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Control Intelligence - LandveX</title>
|
||||
<meta http-equiv="refresh" content="0;url=/intelligence/">
|
||||
</head>
|
||||
<body>
|
||||
<p>Redirecting to <a href="/intelligence/">Intelligence Overview</a>...</p>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,519 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>City Health Index — Landvex Intelligence</title>
|
||||
<meta name="description" content="A continuous composite score of urban condition, maintenance needs and change velocity. Updated from field observations. 0–100 per city and district.">
|
||||
<link rel="canonical" href="https://www.landvex.com/intelligence/city-health-index/">
|
||||
<meta name="robots" content="index, follow">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="https://www.landvex.com/intelligence/city-health-index/">
|
||||
<meta property="og:title" content="City Health Index — Landvex Intelligence">
|
||||
<meta property="og:description" content="A continuous composite score of urban condition, maintenance needs and change velocity. Updated from field observations. 0–100 per city and district.">
|
||||
<meta property="og:image" content="https://www.landvex.com/og-image.jpg">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="City Health Index — Landvex">
|
||||
<meta name="twitter:description" content="A continuous composite score of urban condition, maintenance needs, and change velocity across a defined area. Continuously verified from field observations.">
|
||||
<meta name="twitter:image" content="https://www.landvex.com/og-image.jpg">
|
||||
<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">
|
||||
<link rel="manifest" href="/site.webmanifest">
|
||||
<script type="application/ld+json">{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebPage",
|
||||
"name": "City Health Index — Landvex",
|
||||
"description": "A continuous composite score of urban condition, maintenance needs, and change velocity across a defined area. Continuously verified from field observations.",
|
||||
"url": "https://www.landvex.com/intelligence/city-health-index/",
|
||||
"isPartOf": { "@type": "WebSite", "url": "https://www.landvex.com", "name": "Landvex" },
|
||||
"publisher": { "@type": "Organization", "name": "Landvex", "url": "https://www.landvex.com" }
|
||||
}</script>
|
||||
<style>
|
||||
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
:root {
|
||||
--bg-dark: #f5f5f7;
|
||||
--blue: #0066FF;
|
||||
--blue-dark: #0052CC;
|
||||
--blue-glow: rgba(0, 102, 255, 0.15);
|
||||
--text-body: #3a3a3a;
|
||||
--text-muted: #6B6B6B;
|
||||
--text-light: #1d1d1f;
|
||||
--text-dim: #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; }
|
||||
.nav-links { display: flex; gap: 32px; list-style: none; }
|
||||
.nav-links a { font-size: 14px; color: var(--text-dim); transition: color 0.2s; }
|
||||
.nav-links a:hover { 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: 80vh;
|
||||
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(36px, 6vw, 68px); font-weight: 800;
|
||||
letter-spacing: -2px; line-height: 1.05; color: #1d1d1f;
|
||||
max-width: 820px; margin-bottom: 24px;
|
||||
}
|
||||
.hero-sub {
|
||||
font-size: clamp(16px, 2vw, 19px); color: var(--text-dim);
|
||||
max-width: 640px; line-height: 1.65; margin-bottom: 40px;
|
||||
}
|
||||
.hero-ctas { display: flex; gap: 14px; flex-wrap: wrap; justify-content: center; }
|
||||
.container { max-width: 1140px; margin: 0 auto; }
|
||||
section { padding: 80px 24px; }
|
||||
.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(26px, 3.5vw, 40px); font-weight: 800;
|
||||
letter-spacing: -1px; line-height: 1.1; color: #1d1d1f; margin-bottom: 16px;
|
||||
}
|
||||
.section-title-light { color: #0a0a0a; }
|
||||
.section-sub { font-size: 17px; color: var(--text-dim); max-width: 560px; line-height: 1.7; }
|
||||
.contact-form {
|
||||
background: var(--surface); border: 1px solid var(--border);
|
||||
border-radius: var(--radius-lg); padding: 40px; text-align: left;
|
||||
}
|
||||
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 16px; }
|
||||
.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); }
|
||||
@media (max-width: 900px) {
|
||||
nav { padding: 0 20px; }
|
||||
.nav-links { display: none; }
|
||||
}
|
||||
@media (max-width: 600px) {
|
||||
section { padding: 48px 0 !important; }
|
||||
.container { padding: 0 16px !important; box-sizing: border-box; }
|
||||
.form-row { grid-template-columns: 1fr !important; }
|
||||
.contact-form { padding: 24px 20px; }
|
||||
.footer-inner { flex-direction: column; text-align: center; }
|
||||
[style*="grid-template-columns:1fr 1fr"] { grid-template-columns: 1fr !important; }
|
||||
[style*="grid-template-columns:repeat(auto-fit,minmax(300px"] { grid-template-columns: 1fr !important; }
|
||||
[style*="grid-template-columns:repeat(auto-fit,minmax(260px"] { grid-template-columns: 1fr !important; }
|
||||
}
|
||||
|
||||
.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}
|
||||
.lv-disclaimer--light{color:#888;background:#f5f5f5}
|
||||
.lv-disclaimer--light a{color:#555}
|
||||
</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": "Intelligence",
|
||||
"item": "https://www.landvex.com/intelligence/"
|
||||
},
|
||||
{
|
||||
"@type": "ListItem",
|
||||
"position": 3,
|
||||
"name": "City Health Index",
|
||||
"item": "https://www.landvex.com/intelligence/city-health-index/"
|
||||
}
|
||||
]
|
||||
}
|
||||
</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/">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- NAV -->
|
||||
<nav>
|
||||
<a class="nav-logo" href="/">LandveX</a>
|
||||
<ul class="nav-links">
|
||||
<li><a href="/#how-it-works">How it works</a></li>
|
||||
<li><a href="/#verticals">Verticals</a></li>
|
||||
<li><a href="/methodology/">Methodology</a></li>
|
||||
<li><a href="/security/">Security</a></li>
|
||||
<li><a href="#contact">Contact</a></li>
|
||||
</ul>
|
||||
<a class="btn btn-outline" href="#contact">Request a briefing →</a>
|
||||
</nav>
|
||||
|
||||
<!-- HERO (dark) -->
|
||||
<section class="hero">
|
||||
<div class="hero-eyebrow">Intelligence Index · Landvex</div>
|
||||
<h1>How healthy is this city?</h1>
|
||||
<p class="hero-sub">A continuous composite score of urban condition, maintenance needs, and change velocity across a defined area. Continuously verified from field observations.</p>
|
||||
<div class="hero-ctas">
|
||||
<a class="btn btn-lg" href="#contact">Request a briefing →</a>
|
||||
<a class="btn btn-outline btn-lg" href="#dimensions">See dimensions</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- DIMENSIONS (white/light section) -->
|
||||
<section id="dimensions" style="background:#fff;padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="text-align:center;margin-bottom:52px">
|
||||
<div class="section-label" style="color:var(--blue)">What we measure</div>
|
||||
<h2 class="section-title section-title-light">Five dimensions of intelligence.</h2>
|
||||
<p class="section-sub" style="color:#6b7280;margin:0 auto">Each index is built from five independently observed and scored dimensions — combined into a single comparable score.</p>
|
||||
</div>
|
||||
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr));gap:20px">
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">🏗️</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Infrastructure condition</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Physical state of roads, utilities, public infrastructure and built environment across the area.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">🏪</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Commercial vitality</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Density and health of commercial activity — openings, closures, vacancy rates and foot traffic patterns.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">🌳</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Public space quality</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Condition of parks, squares, pedestrian zones and shared public environments.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">🔧</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Maintenance trajectory</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Rate of observable maintenance activity vs observed deterioration — leading indicator of future condition.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">📈</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Change velocity</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Speed and direction of visible change across the area — construction, renovation, closures, openings.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- USE CASES (light grey) -->
|
||||
<section style="background:#f8f9ff;padding:64px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:760px;margin:0 auto;text-align:center">
|
||||
<div class="section-label">Use cases</div>
|
||||
<h2 class="section-title section-title-light" style="margin-bottom:24px">Who uses this index.</h2>
|
||||
<div style="display:flex;flex-wrap:wrap;gap:12px;justify-content:center;margin-bottom:40px">
|
||||
<span style="background:#e0eaff;color:#0052cc;font-size:.8125rem;font-weight:600;padding:6px 14px;border-radius:100px">Municipal resource allocation</span>
|
||||
<span style="background:#e0eaff;color:#0052cc;font-size:.8125rem;font-weight:600;padding:6px 14px;border-radius:100px">Urban planning</span>
|
||||
<span style="background:#e0eaff;color:#0052cc;font-size:.8125rem;font-weight:600;padding:6px 14px;border-radius:100px">Investment screening</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- SAMPLE OUTPUT (dark) -->
|
||||
<section style="background:var(--surface);padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:700px;margin:0 auto;text-align:center">
|
||||
<div class="section-label">Sample output</div>
|
||||
<h2 class="section-title" style="margin-bottom:8px">What you receive.</h2>
|
||||
<p style="color:var(--text-dim);margin-bottom:48px">Score 0–100 + trend direction + key signals</p>
|
||||
<div style="background:var(--surface-2);border:1px solid var(--border);border-radius:16px;padding:36px 40px;text-align:left">
|
||||
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:8px">
|
||||
<span style="color:var(--text-dim);font-size:.875rem;font-weight:600">Sample location · Placeholder score</span>
|
||||
<span style="color:#4ade80;font-size:.875rem;font-weight:700">↑ Improving</span>
|
||||
</div>
|
||||
<div style="display:flex;align-items:center;gap:16px;margin-bottom:4px">
|
||||
<span style="font-size:3rem;font-weight:800;color: #1d1d1f;letter-spacing:-2px">72</span>
|
||||
<span style="font-size:1.5rem;color:var(--text-dim)">/100</span>
|
||||
</div>
|
||||
|
||||
<div style="background:#f3f4f6;border-radius:8px;height:12px;width:100%;margin:12px 0 8px;overflow:hidden">
|
||||
<div style="height:100%;width:72%;background:#4ade80;border-radius:8px;transition:width 1s ease"></div>
|
||||
</div>
|
||||
|
||||
<div style="display:flex;justify-content:space-between;font-size:.75rem;color:var(--text-dim)">
|
||||
<span>Critical</span><span>Moderate</span><span>Strong</span>
|
||||
</div>
|
||||
<div style="margin-top:28px;padding-top:20px;border-top:1px solid var(--border);font-size:.8125rem;color:var(--text-dim)">
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#f59e0b" stroke-width="2"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg> Placeholder values for illustration. Live intelligence from August 2026.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CONTRADICTION ENGINE (dark blue) -->
|
||||
<section style="background:#001836;padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:800px;margin:0 auto">
|
||||
<div style="text-align:center;margin-bottom:48px">
|
||||
<div class="section-label" style="color:rgba(255,255,255,.75)">Advanced intelligence</div>
|
||||
<h2 class="section-title">How this index detects narrative conflicts.</h2>
|
||||
<p style="color:rgba(255,255,255,.75);max-width:600px;margin:0 auto;line-height:1.7">The City Health Index compares official urban condition reports and maintenance schedules against observed field data. When official assessments rate an area as well-maintained but field observations show deferred maintenance, rising vacancies, or deteriorating public spaces — the engine flags a narrative conflict.</p>
|
||||
</div>
|
||||
<div style="background:rgba(0,0,0,.05);border:1px solid rgba(0,0,0,.1);border-radius:16px;padding:32px 36px">
|
||||
<div style="display:flex;align-items:flex-start;gap:16px;margin-bottom:24px">
|
||||
<span style="font-size:1.5rem">🚩</span>
|
||||
<div>
|
||||
<div style="color:#f87171;font-weight:800;font-size:.9375rem;margin-bottom:4px">Contradiction Engine — How it works</div>
|
||||
<div style="color:rgba(255,255,255,.75);font-size:.875rem;line-height:1.6">Field observations are continuously cross-referenced against official records, registers, and published statistics. Divergence above threshold triggers a conflict flag.</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display:grid;grid-template-columns:1fr 1fr;gap:16px">
|
||||
<div style="background:rgba(34,197,94,.1);border:1px solid rgba(34,197,94,.2);border-radius:10px;padding:16px">
|
||||
<div style="color:#86efac;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px">Official record</div>
|
||||
<ul style="list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:6px">
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✓ Published condition ratings</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✓ Official statistics</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✓ Register data</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div style="background:rgba(239,68,68,.1);border:1px solid rgba(239,68,68,.2);border-radius:10px;padding:16px">
|
||||
<div style="color:#fca5a5;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px">Observed reality</div>
|
||||
<ul style="list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:6px">
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✗ Field observations</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✗ Real-time signals</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✗ Contradiction flags</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- RELATED INDEXES (white) -->
|
||||
<section style="background:#fff;padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="text-align:center;margin-bottom:48px">
|
||||
<div class="section-label">Related intelligence</div>
|
||||
<h2 class="section-title section-title-light">Explore related indexes.</h2>
|
||||
</div>
|
||||
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr));gap:20px;max-width:900px;margin:0 auto">
|
||||
|
||||
<a href="/intelligence/neighbourhood-quality-index/" style="display:block;background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:20px 24px;text-decoration:none;color:inherit;transition:border-color .2s,transform .15s" onmouseover="this.style.borderColor='#0066ff';this.style.transform='translateY(-2px)'" onmouseout="this.style.borderColor='#e5e7eb';this.style.transform='none'">
|
||||
<div style="font-size:1.25rem;margin-bottom:8px">🏘️</div>
|
||||
<div style="font-weight:700;color:#0a0a0a;font-size:.9375rem;margin-bottom:4px">Neighbourhood Quality Index</div>
|
||||
<div style="color:#0066ff;font-size:.8125rem;font-weight:700">View index →</div>
|
||||
</a>
|
||||
|
||||
<a href="/intelligence/infrastructure-risk-index/" style="display:block;background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:20px 24px;text-decoration:none;color:inherit;transition:border-color .2s,transform .15s" onmouseover="this.style.borderColor='#0066ff';this.style.transform='translateY(-2px)'" onmouseout="this.style.borderColor='#e5e7eb';this.style.transform='none'">
|
||||
<div style="font-size:1.25rem;margin-bottom:8px"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#f59e0b" stroke-width="2"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg></div>
|
||||
<div style="font-weight:700;color:#0a0a0a;font-size:.9375rem;margin-bottom:4px">Infrastructure Risk Index</div>
|
||||
<div style="color:#0066ff;font-size:.8125rem;font-weight:700">View index →</div>
|
||||
</a>
|
||||
|
||||
<a href="/intelligence/development-forecast/" style="display:block;background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:20px 24px;text-decoration:none;color:inherit;transition:border-color .2s,transform .15s" onmouseover="this.style.borderColor='#0066ff';this.style.transform='translateY(-2px)'" onmouseout="this.style.borderColor='#e5e7eb';this.style.transform='none'">
|
||||
<div style="font-size:1.25rem;margin-bottom:8px">🔮</div>
|
||||
<div style="font-weight:700;color:#0a0a0a;font-size:.9375rem;margin-bottom:4px">Development Forecast</div>
|
||||
<div style="color:#0066ff;font-size:.8125rem;font-weight:700">View index →</div>
|
||||
</a>
|
||||
</div>
|
||||
<div style="text-align:center;margin-top:40px">
|
||||
<a href="/" style="color:var(--blue);font-weight:700;font-size:.9375rem">← Back to Landvex</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CONTACT (dark) -->
|
||||
<section id="contact" style="background: var(--bg-dark);padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:680px;margin:0 auto;text-align:center">
|
||||
<div class="section-label">Get in touch</div>
|
||||
<h2 class="section-title">Request a briefing.</h2>
|
||||
<p class="section-sub" style="margin:0 auto 40px">Tell us the question you need answered. We'll show you how this index applies to your decision.</p>
|
||||
<form class="contact-form" id="contact-form">
|
||||
<div class="form-row">
|
||||
<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>
|
||||
<div class="form-group">
|
||||
<label for="message">Message</label>
|
||||
<textarea id="message" name="message" placeholder="Describe your question or decision — location, context, what you need to know..."></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 -->
|
||||
<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="/privacy">Privacy</a>
|
||||
<a href="/terms">Terms</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">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" xmlns="http://www.w3.org/2000/svg">
|
||||
<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" xmlns="http://www.w3.org/2000/svg">
|
||||
<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-intelligence',
|
||||
index: 'city-health-index',
|
||||
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 = "✓ Request received. We'll 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 →';
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,519 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Commercial Opportunity Index — Landvex</title>
|
||||
<meta name="description" content="Identifies where commercial activity is growing, which locations are underserved, and which areas are declining. Based on observed openings, closures and foot traffic.">
|
||||
<link rel="canonical" href="https://www.landvex.com/intelligence/commercial-opportunity-index/">
|
||||
<meta name="robots" content="index, follow">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="https://www.landvex.com/intelligence/commercial-opportunity-index/">
|
||||
<meta property="og:title" content="Commercial Opportunity Index — Landvex">
|
||||
<meta property="og:description" content="Identifies where commercial activity is growing, which locations are underserved, and which areas are declining. Based on observed openings, closures and">
|
||||
<meta property="og:image" content="https://www.landvex.com/og-image.jpg">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Commercial Opportunity Index — Landvex">
|
||||
<meta name="twitter:description" content="Identifies where commercial activity is growing, which locations are underserved, and which areas are in decline — based on observed openings, closures, and activity levels.">
|
||||
<meta name="twitter:image" content="https://www.landvex.com/og-image.jpg">
|
||||
<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">
|
||||
<link rel="manifest" href="/site.webmanifest">
|
||||
<script type="application/ld+json">{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebPage",
|
||||
"name": "Commercial Opportunity Index — Landvex",
|
||||
"description": "Identifies where commercial activity is growing, which locations are underserved, and which areas are in decline — based on observed openings, closures, and activity levels.",
|
||||
"url": "https://www.landvex.com/intelligence/commercial-opportunity-index/",
|
||||
"isPartOf": { "@type": "WebSite", "url": "https://www.landvex.com", "name": "Landvex" },
|
||||
"publisher": { "@type": "Organization", "name": "Landvex", "url": "https://www.landvex.com" }
|
||||
}</script>
|
||||
<style>
|
||||
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
:root {
|
||||
--bg-dark: #f5f5f7;
|
||||
--blue: #0066FF;
|
||||
--blue-dark: #0052CC;
|
||||
--blue-glow: rgba(0, 102, 255, 0.15);
|
||||
--text-body: #3a3a3a;
|
||||
--text-muted: #6B6B6B;
|
||||
--text-light: #1d1d1f;
|
||||
--text-dim: #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; }
|
||||
.nav-links { display: flex; gap: 32px; list-style: none; }
|
||||
.nav-links a { font-size: 14px; color: var(--text-dim); transition: color 0.2s; }
|
||||
.nav-links a:hover { 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: 80vh;
|
||||
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(36px, 6vw, 68px); font-weight: 800;
|
||||
letter-spacing: -2px; line-height: 1.05; color: #1d1d1f;
|
||||
max-width: 820px; margin-bottom: 24px;
|
||||
}
|
||||
.hero-sub {
|
||||
font-size: clamp(16px, 2vw, 19px); color: var(--text-dim);
|
||||
max-width: 640px; line-height: 1.65; margin-bottom: 40px;
|
||||
}
|
||||
.hero-ctas { display: flex; gap: 14px; flex-wrap: wrap; justify-content: center; }
|
||||
.container { max-width: 1140px; margin: 0 auto; }
|
||||
section { padding: 80px 24px; }
|
||||
.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(26px, 3.5vw, 40px); font-weight: 800;
|
||||
letter-spacing: -1px; line-height: 1.1; color: #1d1d1f; margin-bottom: 16px;
|
||||
}
|
||||
.section-title-light { color: #0a0a0a; }
|
||||
.section-sub { font-size: 17px; color: var(--text-dim); max-width: 560px; line-height: 1.7; }
|
||||
.contact-form {
|
||||
background: var(--surface); border: 1px solid var(--border);
|
||||
border-radius: var(--radius-lg); padding: 40px; text-align: left;
|
||||
}
|
||||
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 16px; }
|
||||
.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); }
|
||||
@media (max-width: 900px) {
|
||||
nav { padding: 0 20px; }
|
||||
.nav-links { display: none; }
|
||||
}
|
||||
@media (max-width: 600px) {
|
||||
section { padding: 48px 0 !important; }
|
||||
.container { padding: 0 16px !important; box-sizing: border-box; }
|
||||
.form-row { grid-template-columns: 1fr !important; }
|
||||
.contact-form { padding: 24px 20px; }
|
||||
.footer-inner { flex-direction: column; text-align: center; }
|
||||
[style*="grid-template-columns:1fr 1fr"] { grid-template-columns: 1fr !important; }
|
||||
[style*="grid-template-columns:repeat(auto-fit,minmax(300px"] { grid-template-columns: 1fr !important; }
|
||||
[style*="grid-template-columns:repeat(auto-fit,minmax(260px"] { grid-template-columns: 1fr !important; }
|
||||
}
|
||||
|
||||
.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}
|
||||
.lv-disclaimer--light{color:#888;background:#f5f5f5}
|
||||
.lv-disclaimer--light a{color:#555}
|
||||
</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": "Intelligence",
|
||||
"item": "https://www.landvex.com/intelligence/"
|
||||
},
|
||||
{
|
||||
"@type": "ListItem",
|
||||
"position": 3,
|
||||
"name": "Commercial Opportunity Index",
|
||||
"item": "https://www.landvex.com/intelligence/commercial-opportunity-index/"
|
||||
}
|
||||
]
|
||||
}
|
||||
</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/">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- NAV -->
|
||||
<nav>
|
||||
<a class="nav-logo" href="/">LandveX</a>
|
||||
<ul class="nav-links">
|
||||
<li><a href="/#how-it-works">How it works</a></li>
|
||||
<li><a href="/#verticals">Verticals</a></li>
|
||||
<li><a href="/methodology/">Methodology</a></li>
|
||||
<li><a href="/security/">Security</a></li>
|
||||
<li><a href="#contact">Contact</a></li>
|
||||
</ul>
|
||||
<a class="btn btn-outline" href="#contact">Request a briefing →</a>
|
||||
</nav>
|
||||
|
||||
<!-- HERO (dark) -->
|
||||
<section class="hero">
|
||||
<div class="hero-eyebrow">Intelligence Index · Landvex</div>
|
||||
<h1>Where is commercial activity growing?</h1>
|
||||
<p class="hero-sub">Identifies where commercial activity is growing, which locations are underserved, and which areas are in decline — based on observed openings, closures, and activity levels.</p>
|
||||
<div class="hero-ctas">
|
||||
<a class="btn btn-lg" href="#contact">Request a briefing →</a>
|
||||
<a class="btn btn-outline btn-lg" href="#dimensions">See dimensions</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- DIMENSIONS (white/light section) -->
|
||||
<section id="dimensions" style="background:#fff;padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="text-align:center;margin-bottom:52px">
|
||||
<div class="section-label" style="color:var(--blue)">What we measure</div>
|
||||
<h2 class="section-title section-title-light">Five dimensions of intelligence.</h2>
|
||||
<p class="section-sub" style="color:#6b7280;margin:0 auto">Each index is built from five independently observed and scored dimensions — combined into a single comparable score.</p>
|
||||
</div>
|
||||
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr));gap:20px">
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">🆕</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">New business openings</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Rate of new commercial openings in the area — by category, size and observed activity level.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">🏚️</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Vacancy rates</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Observable storefront and commercial vacancy — current level and directional trend over time.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">👥</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Foot traffic signals</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Pedestrian density and movement patterns observed in the field across different times and zones.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">🏢</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Competitor presence</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Category density, anchor tenants, brand presence and competitive clustering by district.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">🔨</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Renovation activity</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Volume of active fitouts, renovations and commercial improvements — a leading signal of investment intent.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- USE CASES (light grey) -->
|
||||
<section style="background:#f8f9ff;padding:64px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:760px;margin:0 auto;text-align:center">
|
||||
<div class="section-label">Use cases</div>
|
||||
<h2 class="section-title section-title-light" style="margin-bottom:24px">Who uses this index.</h2>
|
||||
<div style="display:flex;flex-wrap:wrap;gap:12px;justify-content:center;margin-bottom:40px">
|
||||
<span style="background:#e0eaff;color:#0052cc;font-size:.8125rem;font-weight:600;padding:6px 14px;border-radius:100px">Retail site selection</span>
|
||||
<span style="background:#e0eaff;color:#0052cc;font-size:.8125rem;font-weight:600;padding:6px 14px;border-radius:100px">Franchise expansion</span>
|
||||
<span style="background:#e0eaff;color:#0052cc;font-size:.8125rem;font-weight:600;padding:6px 14px;border-radius:100px">Property acquisition</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- SAMPLE OUTPUT (dark) -->
|
||||
<section style="background:var(--surface);padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:700px;margin:0 auto;text-align:center">
|
||||
<div class="section-label">Sample output</div>
|
||||
<h2 class="section-title" style="margin-bottom:8px">What you receive.</h2>
|
||||
<p style="color:var(--text-dim);margin-bottom:48px">Opportunity score + gap map + competitor density</p>
|
||||
<div style="background:var(--surface-2);border:1px solid var(--border);border-radius:16px;padding:36px 40px;text-align:left">
|
||||
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:8px">
|
||||
<span style="color:var(--text-dim);font-size:.875rem;font-weight:600">Sample location · Placeholder score</span>
|
||||
<span style="color:#4ade80;font-size:.875rem;font-weight:700">↑ Strong growth</span>
|
||||
</div>
|
||||
<div style="display:flex;align-items:center;gap:16px;margin-bottom:4px">
|
||||
<span style="font-size:3rem;font-weight:800;color: #1d1d1f;letter-spacing:-2px">81</span>
|
||||
<span style="font-size:1.5rem;color:var(--text-dim)">/100</span>
|
||||
</div>
|
||||
|
||||
<div style="background:#f3f4f6;border-radius:8px;height:12px;width:100%;margin:12px 0 8px;overflow:hidden">
|
||||
<div style="height:100%;width:81%;background:#4ade80;border-radius:8px;transition:width 1s ease"></div>
|
||||
</div>
|
||||
|
||||
<div style="display:flex;justify-content:space-between;font-size:.75rem;color:var(--text-dim)">
|
||||
<span>Critical</span><span>Moderate</span><span>Strong</span>
|
||||
</div>
|
||||
<div style="margin-top:28px;padding-top:20px;border-top:1px solid var(--border);font-size:.8125rem;color:var(--text-dim)">
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#f59e0b" stroke-width="2"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg> Placeholder values for illustration. Live intelligence from August 2026.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CONTRADICTION ENGINE (dark blue) -->
|
||||
<section style="background:#001836;padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:800px;margin:0 auto">
|
||||
<div style="text-align:center;margin-bottom:48px">
|
||||
<div class="section-label" style="color:rgba(255,255,255,.75)">Advanced intelligence</div>
|
||||
<h2 class="section-title">How this index detects narrative conflicts.</h2>
|
||||
<p style="color:rgba(255,255,255,.75);max-width:600px;margin:0 auto;line-height:1.7">The Commercial Opportunity Index cross-references property registers, planning applications and official business statistics against observed commercial activity on the ground. A location listed as commercially active but observed with rising vacancies and declining foot traffic triggers a contradiction alert — often weeks before it surfaces in official data.</p>
|
||||
</div>
|
||||
<div style="background:rgba(0,0,0,.05);border:1px solid rgba(0,0,0,.1);border-radius:16px;padding:32px 36px">
|
||||
<div style="display:flex;align-items:flex-start;gap:16px;margin-bottom:24px">
|
||||
<span style="font-size:1.5rem">🚩</span>
|
||||
<div>
|
||||
<div style="color:#f87171;font-weight:800;font-size:.9375rem;margin-bottom:4px">Contradiction Engine — How it works</div>
|
||||
<div style="color:rgba(255,255,255,.75);font-size:.875rem;line-height:1.6">Field observations are continuously cross-referenced against official records, registers, and published statistics. Divergence above threshold triggers a conflict flag.</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display:grid;grid-template-columns:1fr 1fr;gap:16px">
|
||||
<div style="background:rgba(34,197,94,.1);border:1px solid rgba(34,197,94,.2);border-radius:10px;padding:16px">
|
||||
<div style="color:#86efac;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px">Official record</div>
|
||||
<ul style="list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:6px">
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✓ Published condition ratings</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✓ Official statistics</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✓ Register data</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div style="background:rgba(239,68,68,.1);border:1px solid rgba(239,68,68,.2);border-radius:10px;padding:16px">
|
||||
<div style="color:#fca5a5;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px">Observed reality</div>
|
||||
<ul style="list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:6px">
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✗ Field observations</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✗ Real-time signals</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✗ Contradiction flags</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- RELATED INDEXES (white) -->
|
||||
<section style="background:#fff;padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="text-align:center;margin-bottom:48px">
|
||||
<div class="section-label">Related intelligence</div>
|
||||
<h2 class="section-title section-title-light">Explore related indexes.</h2>
|
||||
</div>
|
||||
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr));gap:20px;max-width:900px;margin:0 auto">
|
||||
|
||||
<a href="/intelligence/urban-growth-index/" style="display:block;background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:20px 24px;text-decoration:none;color:inherit;transition:border-color .2s,transform .15s" onmouseover="this.style.borderColor='#0066ff';this.style.transform='translateY(-2px)'" onmouseout="this.style.borderColor='#e5e7eb';this.style.transform='none'">
|
||||
<div style="font-size:1.25rem;margin-bottom:8px">🌱</div>
|
||||
<div style="font-weight:700;color:#0a0a0a;font-size:.9375rem;margin-bottom:4px">Urban Growth Index</div>
|
||||
<div style="color:#0066ff;font-size:.8125rem;font-weight:700">View index →</div>
|
||||
</a>
|
||||
|
||||
<a href="/intelligence/investment-attractiveness-index/" style="display:block;background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:20px 24px;text-decoration:none;color:inherit;transition:border-color .2s,transform .15s" onmouseover="this.style.borderColor='#0066ff';this.style.transform='translateY(-2px)'" onmouseout="this.style.borderColor='#e5e7eb';this.style.transform='none'">
|
||||
<div style="font-size:1.25rem;margin-bottom:8px">💎</div>
|
||||
<div style="font-weight:700;color:#0a0a0a;font-size:.9375rem;margin-bottom:4px">Investment Attractiveness Index</div>
|
||||
<div style="color:#0066ff;font-size:.8125rem;font-weight:700">View index →</div>
|
||||
</a>
|
||||
|
||||
<a href="/intelligence/growth-velocity-index/" style="display:block;background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:20px 24px;text-decoration:none;color:inherit;transition:border-color .2s,transform .15s" onmouseover="this.style.borderColor='#0066ff';this.style.transform='translateY(-2px)'" onmouseout="this.style.borderColor='#e5e7eb';this.style.transform='none'">
|
||||
<div style="font-size:1.25rem;margin-bottom:8px">🚀</div>
|
||||
<div style="font-weight:700;color:#0a0a0a;font-size:.9375rem;margin-bottom:4px">Growth Velocity Index</div>
|
||||
<div style="color:#0066ff;font-size:.8125rem;font-weight:700">View index →</div>
|
||||
</a>
|
||||
</div>
|
||||
<div style="text-align:center;margin-top:40px">
|
||||
<a href="/" style="color:var(--blue);font-weight:700;font-size:.9375rem">← Back to Landvex</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CONTACT (dark) -->
|
||||
<section id="contact" style="background: var(--bg-dark);padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:680px;margin:0 auto;text-align:center">
|
||||
<div class="section-label">Get in touch</div>
|
||||
<h2 class="section-title">Request a briefing.</h2>
|
||||
<p class="section-sub" style="margin:0 auto 40px">Tell us the question you need answered. We'll show you how this index applies to your decision.</p>
|
||||
<form class="contact-form" id="contact-form">
|
||||
<div class="form-row">
|
||||
<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>
|
||||
<div class="form-group">
|
||||
<label for="message">Message</label>
|
||||
<textarea id="message" name="message" placeholder="Describe your question or decision — location, context, what you need to know..."></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 -->
|
||||
<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="/privacy">Privacy</a>
|
||||
<a href="/terms">Terms</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">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" xmlns="http://www.w3.org/2000/svg">
|
||||
<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" xmlns="http://www.w3.org/2000/svg">
|
||||
<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-intelligence',
|
||||
index: 'commercial-opportunity-index',
|
||||
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 = "✓ Request received. We'll 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 →';
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Control Intelligence - LandveX</title>
|
||||
<meta http-equiv="refresh" content="0;url=/intelligence/">
|
||||
</head>
|
||||
<body>
|
||||
<p>Redirecting to <a href="/intelligence/">Intelligence Overview</a>...</p>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,519 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Development Forecast Index — Landvex</title>
|
||||
<meta name="description" content="Tracks where investment is flowing, where development cycles are beginning, and where activity is slowing — before it shows in official statistics.">
|
||||
<link rel="canonical" href="https://www.landvex.com/intelligence/development-forecast/">
|
||||
<meta name="robots" content="index, follow">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="https://www.landvex.com/intelligence/development-forecast/">
|
||||
<meta property="og:title" content="Development Forecast Index — Landvex">
|
||||
<meta property="og:description" content="Tracks where investment is flowing, where development cycles are beginning, and where activity is slowing — before it shows in official statistics.">
|
||||
<meta property="og:image" content="https://www.landvex.com/og-image.jpg">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Development Forecast — Landvex">
|
||||
<meta name="twitter:description" content="Tracks where investment is flowing, where development cycles are beginning, and where activity is slowing — before it shows up in official statistics.">
|
||||
<meta name="twitter:image" content="https://www.landvex.com/og-image.jpg">
|
||||
<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">
|
||||
<link rel="manifest" href="/site.webmanifest">
|
||||
<script type="application/ld+json">{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebPage",
|
||||
"name": "Development Forecast — Landvex",
|
||||
"description": "Tracks where investment is flowing, where development cycles are beginning, and where activity is slowing — before it shows up in official statistics.",
|
||||
"url": "https://www.landvex.com/intelligence/development-forecast/",
|
||||
"isPartOf": { "@type": "WebSite", "url": "https://www.landvex.com", "name": "Landvex" },
|
||||
"publisher": { "@type": "Organization", "name": "Landvex", "url": "https://www.landvex.com" }
|
||||
}</script>
|
||||
<style>
|
||||
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
:root {
|
||||
--bg-dark: #f5f5f7;
|
||||
--blue: #0066FF;
|
||||
--blue-dark: #0052CC;
|
||||
--blue-glow: rgba(0, 102, 255, 0.15);
|
||||
--text-body: #3a3a3a;
|
||||
--text-muted: #6B6B6B;
|
||||
--text-light: #1d1d1f;
|
||||
--text-dim: #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; }
|
||||
.nav-links { display: flex; gap: 32px; list-style: none; }
|
||||
.nav-links a { font-size: 14px; color: var(--text-dim); transition: color 0.2s; }
|
||||
.nav-links a:hover { 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: 80vh;
|
||||
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(36px, 6vw, 68px); font-weight: 800;
|
||||
letter-spacing: -2px; line-height: 1.05; color: #1d1d1f;
|
||||
max-width: 820px; margin-bottom: 24px;
|
||||
}
|
||||
.hero-sub {
|
||||
font-size: clamp(16px, 2vw, 19px); color: var(--text-dim);
|
||||
max-width: 640px; line-height: 1.65; margin-bottom: 40px;
|
||||
}
|
||||
.hero-ctas { display: flex; gap: 14px; flex-wrap: wrap; justify-content: center; }
|
||||
.container { max-width: 1140px; margin: 0 auto; }
|
||||
section { padding: 80px 24px; }
|
||||
.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(26px, 3.5vw, 40px); font-weight: 800;
|
||||
letter-spacing: -1px; line-height: 1.1; color: #1d1d1f; margin-bottom: 16px;
|
||||
}
|
||||
.section-title-light { color: #0a0a0a; }
|
||||
.section-sub { font-size: 17px; color: var(--text-dim); max-width: 560px; line-height: 1.7; }
|
||||
.contact-form {
|
||||
background: var(--surface); border: 1px solid var(--border);
|
||||
border-radius: var(--radius-lg); padding: 40px; text-align: left;
|
||||
}
|
||||
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 16px; }
|
||||
.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); }
|
||||
@media (max-width: 900px) {
|
||||
nav { padding: 0 20px; }
|
||||
.nav-links { display: none; }
|
||||
}
|
||||
@media (max-width: 600px) {
|
||||
section { padding: 48px 0 !important; }
|
||||
.container { padding: 0 16px !important; box-sizing: border-box; }
|
||||
.form-row { grid-template-columns: 1fr !important; }
|
||||
.contact-form { padding: 24px 20px; }
|
||||
.footer-inner { flex-direction: column; text-align: center; }
|
||||
[style*="grid-template-columns:1fr 1fr"] { grid-template-columns: 1fr !important; }
|
||||
[style*="grid-template-columns:repeat(auto-fit,minmax(300px"] { grid-template-columns: 1fr !important; }
|
||||
[style*="grid-template-columns:repeat(auto-fit,minmax(260px"] { grid-template-columns: 1fr !important; }
|
||||
}
|
||||
|
||||
.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}
|
||||
.lv-disclaimer--light{color:#888;background:#f5f5f5}
|
||||
.lv-disclaimer--light a{color:#555}
|
||||
</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": "Intelligence",
|
||||
"item": "https://www.landvex.com/intelligence/"
|
||||
},
|
||||
{
|
||||
"@type": "ListItem",
|
||||
"position": 3,
|
||||
"name": "Development Forecast",
|
||||
"item": "https://www.landvex.com/intelligence/development-forecast/"
|
||||
}
|
||||
]
|
||||
}
|
||||
</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/">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- NAV -->
|
||||
<nav>
|
||||
<a class="nav-logo" href="/">LandveX</a>
|
||||
<ul class="nav-links">
|
||||
<li><a href="/#how-it-works">How it works</a></li>
|
||||
<li><a href="/#verticals">Verticals</a></li>
|
||||
<li><a href="/methodology/">Methodology</a></li>
|
||||
<li><a href="/security/">Security</a></li>
|
||||
<li><a href="#contact">Contact</a></li>
|
||||
</ul>
|
||||
<a class="btn btn-outline" href="#contact">Request a briefing →</a>
|
||||
</nav>
|
||||
|
||||
<!-- HERO (dark) -->
|
||||
<section class="hero">
|
||||
<div class="hero-eyebrow">Intelligence Index · Landvex</div>
|
||||
<h1>Which areas are gaining investment — and which are stagnating?</h1>
|
||||
<p class="hero-sub">Tracks where investment is flowing, where development cycles are beginning, and where activity is slowing — before it shows up in official statistics.</p>
|
||||
<div class="hero-ctas">
|
||||
<a class="btn btn-lg" href="#contact">Request a briefing →</a>
|
||||
<a class="btn btn-outline btn-lg" href="#dimensions">See dimensions</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- DIMENSIONS (white/light section) -->
|
||||
<section id="dimensions" style="background:#fff;padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="text-align:center;margin-bottom:52px">
|
||||
<div class="section-label" style="color:var(--blue)">What we measure</div>
|
||||
<h2 class="section-title section-title-light">Five dimensions of intelligence.</h2>
|
||||
<p class="section-sub" style="color:#6b7280;margin:0 auto">Each index is built from five independently observed and scored dimensions — combined into a single comparable score.</p>
|
||||
</div>
|
||||
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr));gap:20px">
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">🏗️</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Construction activity</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Volume and intensity of active construction, scaffolding, site preparation and demolition observed in the field.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">📄</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Permit signals</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Observable evidence of planning permissions — site hoardings, notices, contractor presence and groundworks.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">🏪</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Commercial openings</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">New business formations and commercial fitouts as a leading indicator of investment confidence.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">💰</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Capital flows</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Indirect signals of capital allocation — scaffolding, premium renovations, branded development sites.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">🚶</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Population movement</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Observable demographic shifts — new residents, changing consumer mix, service infrastructure evolution.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- USE CASES (light grey) -->
|
||||
<section style="background:#f8f9ff;padding:64px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:760px;margin:0 auto;text-align:center">
|
||||
<div class="section-label">Use cases</div>
|
||||
<h2 class="section-title section-title-light" style="margin-bottom:24px">Who uses this index.</h2>
|
||||
<div style="display:flex;flex-wrap:wrap;gap:12px;justify-content:center;margin-bottom:40px">
|
||||
<span style="background:#e0eaff;color:#0052cc;font-size:.8125rem;font-weight:600;padding:6px 14px;border-radius:100px">Real estate development</span>
|
||||
<span style="background:#e0eaff;color:#0052cc;font-size:.8125rem;font-weight:600;padding:6px 14px;border-radius:100px">Investment allocation</span>
|
||||
<span style="background:#e0eaff;color:#0052cc;font-size:.8125rem;font-weight:600;padding:6px 14px;border-radius:100px">Urban planning</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- SAMPLE OUTPUT (dark) -->
|
||||
<section style="background:var(--surface);padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:700px;margin:0 auto;text-align:center">
|
||||
<div class="section-label">Sample output</div>
|
||||
<h2 class="section-title" style="margin-bottom:8px">What you receive.</h2>
|
||||
<p style="color:var(--text-dim);margin-bottom:48px">Development score + cycle stage + investment confidence</p>
|
||||
<div style="background:var(--surface-2);border:1px solid var(--border);border-radius:16px;padding:36px 40px;text-align:left">
|
||||
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:8px">
|
||||
<span style="color:var(--text-dim);font-size:.875rem;font-weight:600">Sample location · Placeholder score</span>
|
||||
<span style="color:#4ade80;font-size:.875rem;font-weight:700">↑ Cycle accelerating</span>
|
||||
</div>
|
||||
<div style="display:flex;align-items:center;gap:16px;margin-bottom:4px">
|
||||
<span style="font-size:3rem;font-weight:800;color: #1d1d1f;letter-spacing:-2px">67</span>
|
||||
<span style="font-size:1.5rem;color:var(--text-dim)">/100</span>
|
||||
</div>
|
||||
|
||||
<div style="background:#f3f4f6;border-radius:8px;height:12px;width:100%;margin:12px 0 8px;overflow:hidden">
|
||||
<div style="height:100%;width:67%;background:#fbbf24;border-radius:8px;transition:width 1s ease"></div>
|
||||
</div>
|
||||
|
||||
<div style="display:flex;justify-content:space-between;font-size:.75rem;color:var(--text-dim)">
|
||||
<span>Critical</span><span>Moderate</span><span>Strong</span>
|
||||
</div>
|
||||
<div style="margin-top:28px;padding-top:20px;border-top:1px solid var(--border);font-size:.8125rem;color:var(--text-dim)">
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#f59e0b" stroke-width="2"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg> Placeholder values for illustration. Live intelligence from August 2026.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CONTRADICTION ENGINE (dark blue) -->
|
||||
<section style="background:#001836;padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:800px;margin:0 auto">
|
||||
<div style="text-align:center;margin-bottom:48px">
|
||||
<div class="section-label" style="color:rgba(255,255,255,.75)">Advanced intelligence</div>
|
||||
<h2 class="section-title">How this index detects narrative conflicts.</h2>
|
||||
<p style="color:rgba(255,255,255,.75);max-width:600px;margin:0 auto;line-height:1.7">Development Forecast detects when official planning data diverges from observed ground activity. A district listed as "under development" in permits with no observable site activity, or conversely, rapid development activity ahead of formal permissions — both trigger narrative conflicts that change the forecast score.</p>
|
||||
</div>
|
||||
<div style="background:rgba(0,0,0,.05);border:1px solid rgba(0,0,0,.1);border-radius:16px;padding:32px 36px">
|
||||
<div style="display:flex;align-items:flex-start;gap:16px;margin-bottom:24px">
|
||||
<span style="font-size:1.5rem">🚩</span>
|
||||
<div>
|
||||
<div style="color:#f87171;font-weight:800;font-size:.9375rem;margin-bottom:4px">Contradiction Engine — How it works</div>
|
||||
<div style="color:rgba(255,255,255,.75);font-size:.875rem;line-height:1.6">Field observations are continuously cross-referenced against official records, registers, and published statistics. Divergence above threshold triggers a conflict flag.</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display:grid;grid-template-columns:1fr 1fr;gap:16px">
|
||||
<div style="background:rgba(34,197,94,.1);border:1px solid rgba(34,197,94,.2);border-radius:10px;padding:16px">
|
||||
<div style="color:#86efac;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px">Official record</div>
|
||||
<ul style="list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:6px">
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✓ Published condition ratings</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✓ Official statistics</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✓ Register data</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div style="background:rgba(239,68,68,.1);border:1px solid rgba(239,68,68,.2);border-radius:10px;padding:16px">
|
||||
<div style="color:#fca5a5;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px">Observed reality</div>
|
||||
<ul style="list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:6px">
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✗ Field observations</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✗ Real-time signals</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✗ Contradiction flags</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- RELATED INDEXES (white) -->
|
||||
<section style="background:#fff;padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="text-align:center;margin-bottom:48px">
|
||||
<div class="section-label">Related intelligence</div>
|
||||
<h2 class="section-title section-title-light">Explore related indexes.</h2>
|
||||
</div>
|
||||
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr));gap:20px;max-width:900px;margin:0 auto">
|
||||
|
||||
<a href="/intelligence/urban-growth-index/" style="display:block;background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:20px 24px;text-decoration:none;color:inherit;transition:border-color .2s,transform .15s" onmouseover="this.style.borderColor='#0066ff';this.style.transform='translateY(-2px)'" onmouseout="this.style.borderColor='#e5e7eb';this.style.transform='none'">
|
||||
<div style="font-size:1.25rem;margin-bottom:8px">🌱</div>
|
||||
<div style="font-weight:700;color:#0a0a0a;font-size:.9375rem;margin-bottom:4px">Urban Growth Index</div>
|
||||
<div style="color:#0066ff;font-size:.8125rem;font-weight:700">View index →</div>
|
||||
</a>
|
||||
|
||||
<a href="/intelligence/investment-attractiveness-index/" style="display:block;background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:20px 24px;text-decoration:none;color:inherit;transition:border-color .2s,transform .15s" onmouseover="this.style.borderColor='#0066ff';this.style.transform='translateY(-2px)'" onmouseout="this.style.borderColor='#e5e7eb';this.style.transform='none'">
|
||||
<div style="font-size:1.25rem;margin-bottom:8px">💎</div>
|
||||
<div style="font-weight:700;color:#0a0a0a;font-size:.9375rem;margin-bottom:4px">Investment Attractiveness Index</div>
|
||||
<div style="color:#0066ff;font-size:.8125rem;font-weight:700">View index →</div>
|
||||
</a>
|
||||
|
||||
<a href="/intelligence/commercial-opportunity-index/" style="display:block;background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:20px 24px;text-decoration:none;color:inherit;transition:border-color .2s,transform .15s" onmouseover="this.style.borderColor='#0066ff';this.style.transform='translateY(-2px)'" onmouseout="this.style.borderColor='#e5e7eb';this.style.transform='none'">
|
||||
<div style="font-size:1.25rem;margin-bottom:8px">📈</div>
|
||||
<div style="font-weight:700;color:#0a0a0a;font-size:.9375rem;margin-bottom:4px">Commercial Opportunity Index</div>
|
||||
<div style="color:#0066ff;font-size:.8125rem;font-weight:700">View index →</div>
|
||||
</a>
|
||||
</div>
|
||||
<div style="text-align:center;margin-top:40px">
|
||||
<a href="/" style="color:var(--blue);font-weight:700;font-size:.9375rem">← Back to Landvex</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CONTACT (dark) -->
|
||||
<section id="contact" style="background: var(--bg-dark);padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:680px;margin:0 auto;text-align:center">
|
||||
<div class="section-label">Get in touch</div>
|
||||
<h2 class="section-title">Request a briefing.</h2>
|
||||
<p class="section-sub" style="margin:0 auto 40px">Tell us the question you need answered. We'll show you how this index applies to your decision.</p>
|
||||
<form class="contact-form" id="contact-form">
|
||||
<div class="form-row">
|
||||
<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>
|
||||
<div class="form-group">
|
||||
<label for="message">Message</label>
|
||||
<textarea id="message" name="message" placeholder="Describe your question or decision — location, context, what you need to know..."></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 -->
|
||||
<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="/privacy">Privacy</a>
|
||||
<a href="/terms">Terms</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">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" xmlns="http://www.w3.org/2000/svg">
|
||||
<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" xmlns="http://www.w3.org/2000/svg">
|
||||
<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-intelligence',
|
||||
index: 'development-forecast',
|
||||
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 = "✓ Request received. We'll 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 →';
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,519 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Growth Velocity Index — Landvex Intelligence</title>
|
||||
<meta name="description" content="Measures the rate of observable change in a defined area — not just direction, but speed. Fast-changing areas carry both opportunity and risk.">
|
||||
<link rel="canonical" href="https://www.landvex.com/intelligence/growth-velocity-index/">
|
||||
<meta name="robots" content="index, follow">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="https://www.landvex.com/intelligence/growth-velocity-index/">
|
||||
<meta property="og:title" content="Growth Velocity Index — Landvex Intelligence">
|
||||
<meta property="og:description" content="Measures the rate of observable change in a defined area — not just direction, but speed. Fast-changing areas carry both opportunity and risk.">
|
||||
<meta property="og:image" content="https://www.landvex.com/og-image.jpg">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Growth Velocity Index — Landvex">
|
||||
<meta name="twitter:description" content="Measures the rate of observable change in a defined area — not just direction, but speed. Fast-changing areas carry both opportunity and risk.">
|
||||
<meta name="twitter:image" content="https://www.landvex.com/og-image.jpg">
|
||||
<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">
|
||||
<link rel="manifest" href="/site.webmanifest">
|
||||
<script type="application/ld+json">{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebPage",
|
||||
"name": "Growth Velocity Index — Landvex",
|
||||
"description": "Measures the rate of observable change in a defined area — not just direction, but speed. Fast-changing areas carry both opportunity and risk.",
|
||||
"url": "https://www.landvex.com/intelligence/growth-velocity-index/",
|
||||
"isPartOf": { "@type": "WebSite", "url": "https://www.landvex.com", "name": "Landvex" },
|
||||
"publisher": { "@type": "Organization", "name": "Landvex", "url": "https://www.landvex.com" }
|
||||
}</script>
|
||||
<style>
|
||||
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
:root {
|
||||
--bg-dark: #f5f5f7;
|
||||
--blue: #0066FF;
|
||||
--blue-dark: #0052CC;
|
||||
--blue-glow: rgba(0, 102, 255, 0.15);
|
||||
--text-body: #3a3a3a;
|
||||
--text-muted: #6B6B6B;
|
||||
--text-light: #1d1d1f;
|
||||
--text-dim: #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; }
|
||||
.nav-links { display: flex; gap: 32px; list-style: none; }
|
||||
.nav-links a { font-size: 14px; color: var(--text-dim); transition: color 0.2s; }
|
||||
.nav-links a:hover { 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: 80vh;
|
||||
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(36px, 6vw, 68px); font-weight: 800;
|
||||
letter-spacing: -2px; line-height: 1.05; color: #1d1d1f;
|
||||
max-width: 820px; margin-bottom: 24px;
|
||||
}
|
||||
.hero-sub {
|
||||
font-size: clamp(16px, 2vw, 19px); color: var(--text-dim);
|
||||
max-width: 640px; line-height: 1.65; margin-bottom: 40px;
|
||||
}
|
||||
.hero-ctas { display: flex; gap: 14px; flex-wrap: wrap; justify-content: center; }
|
||||
.container { max-width: 1140px; margin: 0 auto; }
|
||||
section { padding: 80px 24px; }
|
||||
.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(26px, 3.5vw, 40px); font-weight: 800;
|
||||
letter-spacing: -1px; line-height: 1.1; color: #1d1d1f; margin-bottom: 16px;
|
||||
}
|
||||
.section-title-light { color: #0a0a0a; }
|
||||
.section-sub { font-size: 17px; color: var(--text-dim); max-width: 560px; line-height: 1.7; }
|
||||
.contact-form {
|
||||
background: var(--surface); border: 1px solid var(--border);
|
||||
border-radius: var(--radius-lg); padding: 40px; text-align: left;
|
||||
}
|
||||
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 16px; }
|
||||
.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); }
|
||||
@media (max-width: 900px) {
|
||||
nav { padding: 0 20px; }
|
||||
.nav-links { display: none; }
|
||||
}
|
||||
@media (max-width: 600px) {
|
||||
section { padding: 48px 0 !important; }
|
||||
.container { padding: 0 16px !important; box-sizing: border-box; }
|
||||
.form-row { grid-template-columns: 1fr !important; }
|
||||
.contact-form { padding: 24px 20px; }
|
||||
.footer-inner { flex-direction: column; text-align: center; }
|
||||
[style*="grid-template-columns:1fr 1fr"] { grid-template-columns: 1fr !important; }
|
||||
[style*="grid-template-columns:repeat(auto-fit,minmax(300px"] { grid-template-columns: 1fr !important; }
|
||||
[style*="grid-template-columns:repeat(auto-fit,minmax(260px"] { grid-template-columns: 1fr !important; }
|
||||
}
|
||||
|
||||
.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}
|
||||
.lv-disclaimer--light{color:#888;background:#f5f5f5}
|
||||
.lv-disclaimer--light a{color:#555}
|
||||
</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": "Intelligence",
|
||||
"item": "https://www.landvex.com/intelligence/"
|
||||
},
|
||||
{
|
||||
"@type": "ListItem",
|
||||
"position": 3,
|
||||
"name": "Growth Velocity Index",
|
||||
"item": "https://www.landvex.com/intelligence/growth-velocity-index/"
|
||||
}
|
||||
]
|
||||
}
|
||||
</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/">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- NAV -->
|
||||
<nav>
|
||||
<a class="nav-logo" href="/">LandveX</a>
|
||||
<ul class="nav-links">
|
||||
<li><a href="/#how-it-works">How it works</a></li>
|
||||
<li><a href="/#verticals">Verticals</a></li>
|
||||
<li><a href="/methodology/">Methodology</a></li>
|
||||
<li><a href="/security/">Security</a></li>
|
||||
<li><a href="#contact">Contact</a></li>
|
||||
</ul>
|
||||
<a class="btn btn-outline" href="#contact">Request a briefing →</a>
|
||||
</nav>
|
||||
|
||||
<!-- HERO (dark) -->
|
||||
<section class="hero">
|
||||
<div class="hero-eyebrow">Intelligence Index · Landvex</div>
|
||||
<h1>How fast is change happening here?</h1>
|
||||
<p class="hero-sub">Measures the rate of observable change in a defined area — not just direction, but speed. Fast-changing areas carry both opportunity and risk.</p>
|
||||
<div class="hero-ctas">
|
||||
<a class="btn btn-lg" href="#contact">Request a briefing →</a>
|
||||
<a class="btn btn-outline btn-lg" href="#dimensions">See dimensions</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- DIMENSIONS (white/light section) -->
|
||||
<section id="dimensions" style="background:#fff;padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="text-align:center;margin-bottom:52px">
|
||||
<div class="section-label" style="color:var(--blue)">What we measure</div>
|
||||
<h2 class="section-title section-title-light">Five dimensions of intelligence.</h2>
|
||||
<p class="section-sub" style="color:#6b7280;margin:0 auto">Each index is built from five independently observed and scored dimensions — combined into a single comparable score.</p>
|
||||
</div>
|
||||
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr));gap:20px">
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">🏪</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Change rate (commercial)</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Speed of commercial turnover — openings, closures, category shifts and brand mix changes.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">🏗️</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Change rate (physical)</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Rate of physical transformation — construction, demolition, renovation and public realm works.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#0066FF" stroke-width="2"><path d="M18 20V10"/><path d="M12 20V4"/><path d="M6 20v-6"/></svg></div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Trend acceleration</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Whether the rate of change is itself accelerating or decelerating — a second-order velocity signal.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">📉</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Volatility score</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Consistency of change direction — high volatility means rapid oscillation between positive and negative signals.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">🚀</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Momentum indicators</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Leading signals that suggest the current change rate will continue — or is about to reverse.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- USE CASES (light grey) -->
|
||||
<section style="background:#f8f9ff;padding:64px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:760px;margin:0 auto;text-align:center">
|
||||
<div class="section-label">Use cases</div>
|
||||
<h2 class="section-title section-title-light" style="margin-bottom:24px">Who uses this index.</h2>
|
||||
<div style="display:flex;flex-wrap:wrap;gap:12px;justify-content:center;margin-bottom:40px">
|
||||
<span style="background:#e0eaff;color:#0052cc;font-size:.8125rem;font-weight:600;padding:6px 14px;border-radius:100px">Timing investment decisions</span>
|
||||
<span style="background:#e0eaff;color:#0052cc;font-size:.8125rem;font-weight:600;padding:6px 14px;border-radius:100px">Early market entry</span>
|
||||
<span style="background:#e0eaff;color:#0052cc;font-size:.8125rem;font-weight:600;padding:6px 14px;border-radius:100px">Risk-adjusted expansion</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- SAMPLE OUTPUT (dark) -->
|
||||
<section style="background:var(--surface);padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:700px;margin:0 auto;text-align:center">
|
||||
<div class="section-label">Sample output</div>
|
||||
<h2 class="section-title" style="margin-bottom:8px">What you receive.</h2>
|
||||
<p style="color:var(--text-dim);margin-bottom:48px">Velocity score + acceleration signal + volatility rating</p>
|
||||
<div style="background:var(--surface-2);border:1px solid var(--border);border-radius:16px;padding:36px 40px;text-align:left">
|
||||
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:8px">
|
||||
<span style="color:var(--text-dim);font-size:.875rem;font-weight:600">Sample location · Placeholder score</span>
|
||||
<span style="color:#4ade80;font-size:.875rem;font-weight:700">↑ Accelerating</span>
|
||||
</div>
|
||||
<div style="display:flex;align-items:center;gap:16px;margin-bottom:4px">
|
||||
<span style="font-size:3rem;font-weight:800;color: #1d1d1f;letter-spacing:-2px">83</span>
|
||||
<span style="font-size:1.5rem;color:var(--text-dim)">/100</span>
|
||||
</div>
|
||||
|
||||
<div style="background:#f3f4f6;border-radius:8px;height:12px;width:100%;margin:12px 0 8px;overflow:hidden">
|
||||
<div style="height:100%;width:83%;background:#4ade80;border-radius:8px;transition:width 1s ease"></div>
|
||||
</div>
|
||||
|
||||
<div style="display:flex;justify-content:space-between;font-size:.75rem;color:var(--text-dim)">
|
||||
<span>Critical</span><span>Moderate</span><span>Strong</span>
|
||||
</div>
|
||||
<div style="margin-top:28px;padding-top:20px;border-top:1px solid var(--border);font-size:.8125rem;color:var(--text-dim)">
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#f59e0b" stroke-width="2"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg> Placeholder values for illustration. Live intelligence from August 2026.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CONTRADICTION ENGINE (dark blue) -->
|
||||
<section style="background:#001836;padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:800px;margin:0 auto">
|
||||
<div style="text-align:center;margin-bottom:48px">
|
||||
<div class="section-label" style="color:rgba(255,255,255,.75)">Advanced intelligence</div>
|
||||
<h2 class="section-title">How this index detects narrative conflicts.</h2>
|
||||
<p style="color:rgba(255,255,255,.75);max-width:600px;margin:0 auto;line-height:1.7">Growth Velocity Index detects when official economic release cycles lag observable reality. GDP and business register data typically reflects conditions 6–18 months in the past. When field velocity indicators diverge sharply from the most recent official statistics, the contradiction engine quantifies the gap and adjusts the forward-looking velocity forecast.</p>
|
||||
</div>
|
||||
<div style="background:rgba(0,0,0,.05);border:1px solid rgba(0,0,0,.1);border-radius:16px;padding:32px 36px">
|
||||
<div style="display:flex;align-items:flex-start;gap:16px;margin-bottom:24px">
|
||||
<span style="font-size:1.5rem">🚩</span>
|
||||
<div>
|
||||
<div style="color:#f87171;font-weight:800;font-size:.9375rem;margin-bottom:4px">Contradiction Engine — How it works</div>
|
||||
<div style="color:rgba(255,255,255,.75);font-size:.875rem;line-height:1.6">Field observations are continuously cross-referenced against official records, registers, and published statistics. Divergence above threshold triggers a conflict flag.</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display:grid;grid-template-columns:1fr 1fr;gap:16px">
|
||||
<div style="background:rgba(34,197,94,.1);border:1px solid rgba(34,197,94,.2);border-radius:10px;padding:16px">
|
||||
<div style="color:#86efac;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px">Official record</div>
|
||||
<ul style="list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:6px">
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✓ Published condition ratings</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✓ Official statistics</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✓ Register data</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div style="background:rgba(239,68,68,.1);border:1px solid rgba(239,68,68,.2);border-radius:10px;padding:16px">
|
||||
<div style="color:#fca5a5;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px">Observed reality</div>
|
||||
<ul style="list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:6px">
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✗ Field observations</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✗ Real-time signals</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✗ Contradiction flags</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- RELATED INDEXES (white) -->
|
||||
<section style="background:#fff;padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="text-align:center;margin-bottom:48px">
|
||||
<div class="section-label">Related intelligence</div>
|
||||
<h2 class="section-title section-title-light">Explore related indexes.</h2>
|
||||
</div>
|
||||
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr));gap:20px;max-width:900px;margin:0 auto">
|
||||
|
||||
<a href="/intelligence/urban-growth-index/" style="display:block;background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:20px 24px;text-decoration:none;color:inherit;transition:border-color .2s,transform .15s" onmouseover="this.style.borderColor='#0066ff';this.style.transform='translateY(-2px)'" onmouseout="this.style.borderColor='#e5e7eb';this.style.transform='none'">
|
||||
<div style="font-size:1.25rem;margin-bottom:8px">🌱</div>
|
||||
<div style="font-weight:700;color:#0a0a0a;font-size:.9375rem;margin-bottom:4px">Urban Growth Index</div>
|
||||
<div style="color:#0066ff;font-size:.8125rem;font-weight:700">View index →</div>
|
||||
</a>
|
||||
|
||||
<a href="/intelligence/investment-attractiveness-index/" style="display:block;background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:20px 24px;text-decoration:none;color:inherit;transition:border-color .2s,transform .15s" onmouseover="this.style.borderColor='#0066ff';this.style.transform='translateY(-2px)'" onmouseout="this.style.borderColor='#e5e7eb';this.style.transform='none'">
|
||||
<div style="font-size:1.25rem;margin-bottom:8px">💎</div>
|
||||
<div style="font-weight:700;color:#0a0a0a;font-size:.9375rem;margin-bottom:4px">Investment Attractiveness Index</div>
|
||||
<div style="color:#0066ff;font-size:.8125rem;font-weight:700">View index →</div>
|
||||
</a>
|
||||
|
||||
<a href="/intelligence/commercial-opportunity-index/" style="display:block;background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:20px 24px;text-decoration:none;color:inherit;transition:border-color .2s,transform .15s" onmouseover="this.style.borderColor='#0066ff';this.style.transform='translateY(-2px)'" onmouseout="this.style.borderColor='#e5e7eb';this.style.transform='none'">
|
||||
<div style="font-size:1.25rem;margin-bottom:8px">📈</div>
|
||||
<div style="font-weight:700;color:#0a0a0a;font-size:.9375rem;margin-bottom:4px">Commercial Opportunity Index</div>
|
||||
<div style="color:#0066ff;font-size:.8125rem;font-weight:700">View index →</div>
|
||||
</a>
|
||||
</div>
|
||||
<div style="text-align:center;margin-top:40px">
|
||||
<a href="/" style="color:var(--blue);font-weight:700;font-size:.9375rem">← Back to Landvex</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CONTACT (dark) -->
|
||||
<section id="contact" style="background: var(--bg-dark);padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:680px;margin:0 auto;text-align:center">
|
||||
<div class="section-label">Get in touch</div>
|
||||
<h2 class="section-title">Request a briefing.</h2>
|
||||
<p class="section-sub" style="margin:0 auto 40px">Tell us the question you need answered. We'll show you how this index applies to your decision.</p>
|
||||
<form class="contact-form" id="contact-form">
|
||||
<div class="form-row">
|
||||
<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>
|
||||
<div class="form-group">
|
||||
<label for="message">Message</label>
|
||||
<textarea id="message" name="message" placeholder="Describe your question or decision — location, context, what you need to know..."></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 -->
|
||||
<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="/privacy">Privacy</a>
|
||||
<a href="/terms">Terms</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">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" xmlns="http://www.w3.org/2000/svg">
|
||||
<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" xmlns="http://www.w3.org/2000/svg">
|
||||
<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-intelligence',
|
||||
index: 'growth-velocity-index',
|
||||
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 = "✓ Request received. We'll 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 →';
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,26 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Intelligence — Landvex</title>
|
||||
<meta name="description" content="Explore Landvex intelligence indexes: city health, commercial opportunity, infrastructure risk, investment attractiveness, and more.">
|
||||
<link rel="canonical" href="https://www.landvex.com/intelligence/">
|
||||
<meta http-equiv="refresh" content="0; url=/">
|
||||
<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 aria-label="breadcrumb" style="padding: 10px 20px; color: rgba(235,235,245,0.6); font-size: 14px;">
|
||||
<a href="/" style="color: #007AFF; text-decoration: none;">Home</a> / <span>intelligence</span>
|
||||
</nav>
|
||||
<p>Redirecting to <a href="/">homepage</a>...</p>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,519 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Infrastructure Risk Index — Landvex Intelligence</title>
|
||||
<meta name="description" content="Predictive scoring of infrastructure stress points before failures occur. Based on observed conditions over time compared with maintenance records.">
|
||||
<link rel="canonical" href="https://www.landvex.com/intelligence/infrastructure-risk-index/">
|
||||
<meta name="robots" content="index, follow">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="https://www.landvex.com/intelligence/infrastructure-risk-index/">
|
||||
<meta property="og:title" content="Infrastructure Risk Index — Landvex Intelligence">
|
||||
<meta property="og:description" content="Predictive scoring of infrastructure stress points before failures occur. Based on observed conditions over time compared with maintenance records.">
|
||||
<meta property="og:image" content="https://www.landvex.com/og-image.jpg">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Infrastructure Risk Index — Landvex">
|
||||
<meta name="twitter:description" content="Predictive scoring of infrastructure stress points before failures occur, based on observed conditions over time compared against maintenance records and official reports.">
|
||||
<meta name="twitter:image" content="https://www.landvex.com/og-image.jpg">
|
||||
<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">
|
||||
<link rel="manifest" href="/site.webmanifest">
|
||||
<script type="application/ld+json">{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebPage",
|
||||
"name": "Infrastructure Risk Index — Landvex",
|
||||
"description": "Predictive scoring of infrastructure stress points before failures occur, based on observed conditions over time compared against maintenance records and official reports.",
|
||||
"url": "https://www.landvex.com/intelligence/infrastructure-risk-index/",
|
||||
"isPartOf": { "@type": "WebSite", "url": "https://www.landvex.com", "name": "Landvex" },
|
||||
"publisher": { "@type": "Organization", "name": "Landvex", "url": "https://www.landvex.com" }
|
||||
}</script>
|
||||
<style>
|
||||
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
:root {
|
||||
--bg-dark: #f5f5f7;
|
||||
--blue: #0066FF;
|
||||
--blue-dark: #0052CC;
|
||||
--blue-glow: rgba(0, 102, 255, 0.15);
|
||||
--text-body: #3a3a3a;
|
||||
--text-muted: #6B6B6B;
|
||||
--text-light: #1d1d1f;
|
||||
--text-dim: #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; }
|
||||
.nav-links { display: flex; gap: 32px; list-style: none; }
|
||||
.nav-links a { font-size: 14px; color: var(--text-dim); transition: color 0.2s; }
|
||||
.nav-links a:hover { 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: 80vh;
|
||||
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(36px, 6vw, 68px); font-weight: 800;
|
||||
letter-spacing: -2px; line-height: 1.05; color: #1d1d1f;
|
||||
max-width: 820px; margin-bottom: 24px;
|
||||
}
|
||||
.hero-sub {
|
||||
font-size: clamp(16px, 2vw, 19px); color: var(--text-dim);
|
||||
max-width: 640px; line-height: 1.65; margin-bottom: 40px;
|
||||
}
|
||||
.hero-ctas { display: flex; gap: 14px; flex-wrap: wrap; justify-content: center; }
|
||||
.container { max-width: 1140px; margin: 0 auto; }
|
||||
section { padding: 80px 24px; }
|
||||
.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(26px, 3.5vw, 40px); font-weight: 800;
|
||||
letter-spacing: -1px; line-height: 1.1; color: #1d1d1f; margin-bottom: 16px;
|
||||
}
|
||||
.section-title-light { color: #0a0a0a; }
|
||||
.section-sub { font-size: 17px; color: var(--text-dim); max-width: 560px; line-height: 1.7; }
|
||||
.contact-form {
|
||||
background: var(--surface); border: 1px solid var(--border);
|
||||
border-radius: var(--radius-lg); padding: 40px; text-align: left;
|
||||
}
|
||||
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 16px; }
|
||||
.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); }
|
||||
@media (max-width: 900px) {
|
||||
nav { padding: 0 20px; }
|
||||
.nav-links { display: none; }
|
||||
}
|
||||
@media (max-width: 600px) {
|
||||
section { padding: 48px 0 !important; }
|
||||
.container { padding: 0 16px !important; box-sizing: border-box; }
|
||||
.form-row { grid-template-columns: 1fr !important; }
|
||||
.contact-form { padding: 24px 20px; }
|
||||
.footer-inner { flex-direction: column; text-align: center; }
|
||||
[style*="grid-template-columns:1fr 1fr"] { grid-template-columns: 1fr !important; }
|
||||
[style*="grid-template-columns:repeat(auto-fit,minmax(300px"] { grid-template-columns: 1fr !important; }
|
||||
[style*="grid-template-columns:repeat(auto-fit,minmax(260px"] { grid-template-columns: 1fr !important; }
|
||||
}
|
||||
|
||||
.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}
|
||||
.lv-disclaimer--light{color:#888;background:#f5f5f5}
|
||||
.lv-disclaimer--light a{color:#555}
|
||||
</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": "Intelligence",
|
||||
"item": "https://www.landvex.com/intelligence/"
|
||||
},
|
||||
{
|
||||
"@type": "ListItem",
|
||||
"position": 3,
|
||||
"name": "Infrastructure Risk Index",
|
||||
"item": "https://www.landvex.com/intelligence/infrastructure-risk-index/"
|
||||
}
|
||||
]
|
||||
}
|
||||
</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/">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- NAV -->
|
||||
<nav>
|
||||
<a class="nav-logo" href="/">LandveX</a>
|
||||
<ul class="nav-links">
|
||||
<li><a href="/#how-it-works">How it works</a></li>
|
||||
<li><a href="/#verticals">Verticals</a></li>
|
||||
<li><a href="/methodology/">Methodology</a></li>
|
||||
<li><a href="/security/">Security</a></li>
|
||||
<li><a href="#contact">Contact</a></li>
|
||||
</ul>
|
||||
<a class="btn btn-outline" href="#contact">Request a briefing →</a>
|
||||
</nav>
|
||||
|
||||
<!-- HERO (dark) -->
|
||||
<section class="hero">
|
||||
<div class="hero-eyebrow">Intelligence Index · Landvex</div>
|
||||
<h1>Where will infrastructure problems emerge next?</h1>
|
||||
<p class="hero-sub">Predictive scoring of infrastructure stress points before failures occur, based on observed conditions over time compared against maintenance records and official reports.</p>
|
||||
<div class="hero-ctas">
|
||||
<a class="btn btn-lg" href="#contact">Request a briefing →</a>
|
||||
<a class="btn btn-outline btn-lg" href="#dimensions">See dimensions</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- DIMENSIONS (white/light section) -->
|
||||
<section id="dimensions" style="background:#fff;padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="text-align:center;margin-bottom:52px">
|
||||
<div class="section-label" style="color:var(--blue)">What we measure</div>
|
||||
<h2 class="section-title section-title-light">Five dimensions of intelligence.</h2>
|
||||
<p class="section-sub" style="color:#6b7280;margin:0 auto">Each index is built from five independently observed and scored dimensions — combined into a single comparable score.</p>
|
||||
</div>
|
||||
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr));gap:20px">
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">📉</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Observed deterioration rate</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Speed of visible degradation across roads, bridges, utilities and public infrastructure assets.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">🔧</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Maintenance gap</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Delta between required maintenance frequency and observed maintenance activity in the field.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">📋</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Official vs observed delta</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Divergence between official condition ratings and field observations — the key contradiction signal.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">⏳</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Age-adjusted risk</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Deterioration rate adjusted for asset age and original condition — identifies assets aging faster than expected.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">💥</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Failure probability</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Composite probability score of near-term infrastructure failure based on all observed signals.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- USE CASES (light grey) -->
|
||||
<section style="background:#f8f9ff;padding:64px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:760px;margin:0 auto;text-align:center">
|
||||
<div class="section-label">Use cases</div>
|
||||
<h2 class="section-title section-title-light" style="margin-bottom:24px">Who uses this index.</h2>
|
||||
<div style="display:flex;flex-wrap:wrap;gap:12px;justify-content:center;margin-bottom:40px">
|
||||
<span style="background:#e0eaff;color:#0052cc;font-size:.8125rem;font-weight:600;padding:6px 14px;border-radius:100px">Maintenance prioritization</span>
|
||||
<span style="background:#e0eaff;color:#0052cc;font-size:.8125rem;font-weight:600;padding:6px 14px;border-radius:100px">Capex planning</span>
|
||||
<span style="background:#e0eaff;color:#0052cc;font-size:.8125rem;font-weight:600;padding:6px 14px;border-radius:100px">Insurance underwriting</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- SAMPLE OUTPUT (dark) -->
|
||||
<section style="background:var(--surface);padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:700px;margin:0 auto;text-align:center">
|
||||
<div class="section-label">Sample output</div>
|
||||
<h2 class="section-title" style="margin-bottom:8px">What you receive.</h2>
|
||||
<p style="color:var(--text-dim);margin-bottom:48px">Risk score + failure probability + priority ranking</p>
|
||||
<div style="background:var(--surface-2);border:1px solid var(--border);border-radius:16px;padding:36px 40px;text-align:left">
|
||||
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:8px">
|
||||
<span style="color:var(--text-dim);font-size:.875rem;font-weight:600">Sample location · Placeholder score</span>
|
||||
<span style="color:#f87171;font-size:.875rem;font-weight:700">↓ Risk increasing</span>
|
||||
</div>
|
||||
<div style="display:flex;align-items:center;gap:16px;margin-bottom:4px">
|
||||
<span style="font-size:3rem;font-weight:800;color: #1d1d1f;letter-spacing:-2px">44</span>
|
||||
<span style="font-size:1.5rem;color:var(--text-dim)">/100</span>
|
||||
</div>
|
||||
|
||||
<div style="background:#f3f4f6;border-radius:8px;height:12px;width:100%;margin:12px 0 8px;overflow:hidden">
|
||||
<div style="height:100%;width:44%;background:#f87171;border-radius:8px;transition:width 1s ease"></div>
|
||||
</div>
|
||||
|
||||
<div style="display:flex;justify-content:space-between;font-size:.75rem;color:var(--text-dim)">
|
||||
<span>Critical</span><span>Moderate</span><span>Strong</span>
|
||||
</div>
|
||||
<div style="margin-top:28px;padding-top:20px;border-top:1px solid var(--border);font-size:.8125rem;color:var(--text-dim)">
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#f59e0b" stroke-width="2"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg> Placeholder values for illustration. Live intelligence from August 2026.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CONTRADICTION ENGINE (dark blue) -->
|
||||
<section style="background:#001836;padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:800px;margin:0 auto">
|
||||
<div style="text-align:center;margin-bottom:48px">
|
||||
<div class="section-label" style="color:rgba(255,255,255,.75)">Advanced intelligence</div>
|
||||
<h2 class="section-title">How this index detects narrative conflicts.</h2>
|
||||
<p style="color:rgba(255,255,255,.75);max-width:600px;margin:0 auto;line-height:1.7">Infrastructure Risk Index is built on contradiction detection. It systematically compares official maintenance records, inspection reports and asset condition databases against observed reality. When a bridge or road corridor is rated "good" in official systems but field observations show accelerating deterioration — the contradiction score rises, triggering priority review.</p>
|
||||
</div>
|
||||
<div style="background:rgba(0,0,0,.05);border:1px solid rgba(0,0,0,.1);border-radius:16px;padding:32px 36px">
|
||||
<div style="display:flex;align-items:flex-start;gap:16px;margin-bottom:24px">
|
||||
<span style="font-size:1.5rem">🚩</span>
|
||||
<div>
|
||||
<div style="color:#f87171;font-weight:800;font-size:.9375rem;margin-bottom:4px">Contradiction Engine — How it works</div>
|
||||
<div style="color:rgba(255,255,255,.75);font-size:.875rem;line-height:1.6">Field observations are continuously cross-referenced against official records, registers, and published statistics. Divergence above threshold triggers a conflict flag.</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display:grid;grid-template-columns:1fr 1fr;gap:16px">
|
||||
<div style="background:rgba(34,197,94,.1);border:1px solid rgba(34,197,94,.2);border-radius:10px;padding:16px">
|
||||
<div style="color:#86efac;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px">Official record</div>
|
||||
<ul style="list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:6px">
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✓ Published condition ratings</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✓ Official statistics</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✓ Register data</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div style="background:rgba(239,68,68,.1);border:1px solid rgba(239,68,68,.2);border-radius:10px;padding:16px">
|
||||
<div style="color:#fca5a5;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px">Observed reality</div>
|
||||
<ul style="list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:6px">
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✗ Field observations</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✗ Real-time signals</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✗ Contradiction flags</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- RELATED INDEXES (white) -->
|
||||
<section style="background:#fff;padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="text-align:center;margin-bottom:48px">
|
||||
<div class="section-label">Related intelligence</div>
|
||||
<h2 class="section-title section-title-light">Explore related indexes.</h2>
|
||||
</div>
|
||||
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr));gap:20px;max-width:900px;margin:0 auto">
|
||||
|
||||
<a href="/intelligence/city-health-index/" style="display:block;background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:20px 24px;text-decoration:none;color:inherit;transition:border-color .2s,transform .15s" onmouseover="this.style.borderColor='#0066ff';this.style.transform='translateY(-2px)'" onmouseout="this.style.borderColor='#e5e7eb';this.style.transform='none'">
|
||||
<div style="font-size:1.25rem;margin-bottom:8px">🏙️</div>
|
||||
<div style="font-weight:700;color:#0a0a0a;font-size:.9375rem;margin-bottom:4px">City Health Index</div>
|
||||
<div style="color:#0066ff;font-size:.8125rem;font-weight:700">View index →</div>
|
||||
</a>
|
||||
|
||||
<a href="/intelligence/risk-resilience-profile/" style="display:block;background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:20px 24px;text-decoration:none;color:inherit;transition:border-color .2s,transform .15s" onmouseover="this.style.borderColor='#0066ff';this.style.transform='translateY(-2px)'" onmouseout="this.style.borderColor='#e5e7eb';this.style.transform='none'">
|
||||
<div style="font-size:1.25rem;margin-bottom:8px">🛡️</div>
|
||||
<div style="font-weight:700;color:#0a0a0a;font-size:.9375rem;margin-bottom:4px">Risk & Resilience Profile</div>
|
||||
<div style="color:#0066ff;font-size:.8125rem;font-weight:700">View index →</div>
|
||||
</a>
|
||||
|
||||
<a href="/intelligence/development-forecast/" style="display:block;background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:20px 24px;text-decoration:none;color:inherit;transition:border-color .2s,transform .15s" onmouseover="this.style.borderColor='#0066ff';this.style.transform='translateY(-2px)'" onmouseout="this.style.borderColor='#e5e7eb';this.style.transform='none'">
|
||||
<div style="font-size:1.25rem;margin-bottom:8px">🔮</div>
|
||||
<div style="font-weight:700;color:#0a0a0a;font-size:.9375rem;margin-bottom:4px">Development Forecast</div>
|
||||
<div style="color:#0066ff;font-size:.8125rem;font-weight:700">View index →</div>
|
||||
</a>
|
||||
</div>
|
||||
<div style="text-align:center;margin-top:40px">
|
||||
<a href="/" style="color:var(--blue);font-weight:700;font-size:.9375rem">← Back to Landvex</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CONTACT (dark) -->
|
||||
<section id="contact" style="background: var(--bg-dark);padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:680px;margin:0 auto;text-align:center">
|
||||
<div class="section-label">Get in touch</div>
|
||||
<h2 class="section-title">Request a briefing.</h2>
|
||||
<p class="section-sub" style="margin:0 auto 40px">Tell us the question you need answered. We'll show you how this index applies to your decision.</p>
|
||||
<form class="contact-form" id="contact-form">
|
||||
<div class="form-row">
|
||||
<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>
|
||||
<div class="form-group">
|
||||
<label for="message">Message</label>
|
||||
<textarea id="message" name="message" placeholder="Describe your question or decision — location, context, what you need to know..."></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 -->
|
||||
<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="/privacy">Privacy</a>
|
||||
<a href="/terms">Terms</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">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" xmlns="http://www.w3.org/2000/svg">
|
||||
<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" xmlns="http://www.w3.org/2000/svg">
|
||||
<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-intelligence',
|
||||
index: 'infrastructure-risk-index',
|
||||
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 = "✓ Request received. We'll 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 →';
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Control Intelligence - LandveX</title>
|
||||
<meta http-equiv="refresh" content="0;url=/intelligence/">
|
||||
</head>
|
||||
<body>
|
||||
<p>Redirecting to <a href="/intelligence/">Intelligence Overview</a>...</p>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,519 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Investment Attractiveness Index — Landvex Intelligence</title>
|
||||
<meta name="description" content="Composite score combining opportunity signals, risk signals, growth velocity and quality indicators. Designed for investment committees making capital allocation decisions.">
|
||||
<link rel="canonical" href="https://www.landvex.com/intelligence/investment-attractiveness-index/">
|
||||
<meta name="robots" content="index, follow">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="https://www.landvex.com/intelligence/investment-attractiveness-index/">
|
||||
<meta property="og:title" content="Investment Attractiveness Index — Landvex Intelligence">
|
||||
<meta property="og:description" content="Composite score combining opportunity signals, risk signals, growth velocity and quality indicators. Designed for investment committees making capital">
|
||||
<meta property="og:image" content="https://www.landvex.com/og-image.jpg">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Investment Attractiveness Index — Landvex">
|
||||
<meta name="twitter:description" content="Composite score combining opportunity signals, risk signals, growth velocity and quality indicators — designed for investment committees making capital allocation decisions.">
|
||||
<meta name="twitter:image" content="https://www.landvex.com/og-image.jpg">
|
||||
<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">
|
||||
<link rel="manifest" href="/site.webmanifest">
|
||||
<script type="application/ld+json">{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebPage",
|
||||
"name": "Investment Attractiveness Index — Landvex",
|
||||
"description": "Composite score combining opportunity signals, risk signals, growth velocity and quality indicators — designed for investment committees making capital allocation decisions.",
|
||||
"url": "https://www.landvex.com/intelligence/investment-attractiveness-index/",
|
||||
"isPartOf": { "@type": "WebSite", "url": "https://www.landvex.com", "name": "Landvex" },
|
||||
"publisher": { "@type": "Organization", "name": "Landvex", "url": "https://www.landvex.com" }
|
||||
}</script>
|
||||
<style>
|
||||
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
:root {
|
||||
--bg-dark: #f5f5f7;
|
||||
--blue: #0066FF;
|
||||
--blue-dark: #0052CC;
|
||||
--blue-glow: rgba(0, 102, 255, 0.15);
|
||||
--text-body: #3a3a3a;
|
||||
--text-muted: #6B6B6B;
|
||||
--text-light: #1d1d1f;
|
||||
--text-dim: #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; }
|
||||
.nav-links { display: flex; gap: 32px; list-style: none; }
|
||||
.nav-links a { font-size: 14px; color: var(--text-dim); transition: color 0.2s; }
|
||||
.nav-links a:hover { 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: 80vh;
|
||||
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(36px, 6vw, 68px); font-weight: 800;
|
||||
letter-spacing: -2px; line-height: 1.05; color: #1d1d1f;
|
||||
max-width: 820px; margin-bottom: 24px;
|
||||
}
|
||||
.hero-sub {
|
||||
font-size: clamp(16px, 2vw, 19px); color: var(--text-dim);
|
||||
max-width: 640px; line-height: 1.65; margin-bottom: 40px;
|
||||
}
|
||||
.hero-ctas { display: flex; gap: 14px; flex-wrap: wrap; justify-content: center; }
|
||||
.container { max-width: 1140px; margin: 0 auto; }
|
||||
section { padding: 80px 24px; }
|
||||
.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(26px, 3.5vw, 40px); font-weight: 800;
|
||||
letter-spacing: -1px; line-height: 1.1; color: #1d1d1f; margin-bottom: 16px;
|
||||
}
|
||||
.section-title-light { color: #0a0a0a; }
|
||||
.section-sub { font-size: 17px; color: var(--text-dim); max-width: 560px; line-height: 1.7; }
|
||||
.contact-form {
|
||||
background: var(--surface); border: 1px solid var(--border);
|
||||
border-radius: var(--radius-lg); padding: 40px; text-align: left;
|
||||
}
|
||||
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 16px; }
|
||||
.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); }
|
||||
@media (max-width: 900px) {
|
||||
nav { padding: 0 20px; }
|
||||
.nav-links { display: none; }
|
||||
}
|
||||
@media (max-width: 600px) {
|
||||
section { padding: 48px 0 !important; }
|
||||
.container { padding: 0 16px !important; box-sizing: border-box; }
|
||||
.form-row { grid-template-columns: 1fr !important; }
|
||||
.contact-form { padding: 24px 20px; }
|
||||
.footer-inner { flex-direction: column; text-align: center; }
|
||||
[style*="grid-template-columns:1fr 1fr"] { grid-template-columns: 1fr !important; }
|
||||
[style*="grid-template-columns:repeat(auto-fit,minmax(300px"] { grid-template-columns: 1fr !important; }
|
||||
[style*="grid-template-columns:repeat(auto-fit,minmax(260px"] { grid-template-columns: 1fr !important; }
|
||||
}
|
||||
|
||||
.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}
|
||||
.lv-disclaimer--light{color:#888;background:#f5f5f5}
|
||||
.lv-disclaimer--light a{color:#555}
|
||||
</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": "Intelligence",
|
||||
"item": "https://www.landvex.com/intelligence/"
|
||||
},
|
||||
{
|
||||
"@type": "ListItem",
|
||||
"position": 3,
|
||||
"name": "Investment Attractiveness Index",
|
||||
"item": "https://www.landvex.com/intelligence/investment-attractiveness-index/"
|
||||
}
|
||||
]
|
||||
}
|
||||
</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/">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- NAV -->
|
||||
<nav>
|
||||
<a class="nav-logo" href="/">LandveX</a>
|
||||
<ul class="nav-links">
|
||||
<li><a href="/#how-it-works">How it works</a></li>
|
||||
<li><a href="/#verticals">Verticals</a></li>
|
||||
<li><a href="/methodology/">Methodology</a></li>
|
||||
<li><a href="/security/">Security</a></li>
|
||||
<li><a href="#contact">Contact</a></li>
|
||||
</ul>
|
||||
<a class="btn btn-outline" href="#contact">Request a briefing →</a>
|
||||
</nav>
|
||||
|
||||
<!-- HERO (dark) -->
|
||||
<section class="hero">
|
||||
<div class="hero-eyebrow">Intelligence Index · Landvex</div>
|
||||
<h1>How attractive is this area for investment?</h1>
|
||||
<p class="hero-sub">Composite score combining opportunity signals, risk signals, growth velocity and quality indicators — designed for investment committees making capital allocation decisions.</p>
|
||||
<div class="hero-ctas">
|
||||
<a class="btn btn-lg" href="#contact">Request a briefing →</a>
|
||||
<a class="btn btn-outline btn-lg" href="#dimensions">See dimensions</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- DIMENSIONS (white/light section) -->
|
||||
<section id="dimensions" style="background:#fff;padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="text-align:center;margin-bottom:52px">
|
||||
<div class="section-label" style="color:var(--blue)">What we measure</div>
|
||||
<h2 class="section-title section-title-light">Five dimensions of intelligence.</h2>
|
||||
<p class="section-sub" style="color:#6b7280;margin:0 auto">Each index is built from five independently observed and scored dimensions — combined into a single comparable score.</p>
|
||||
</div>
|
||||
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr));gap:20px">
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">💡</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Opportunity score</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Composite signal of commercial opportunity, underserved demand and competitive positioning.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#0066FF" stroke-width="2"><path d="M18 20V10"/><path d="M12 20V4"/><path d="M6 20v-6"/></svg></div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Risk-adjusted return potential</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Expected return potential weighted against observed risk signals and contradiction indicators.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">📈</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Growth trajectory</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Direction and velocity of area growth — observed leading indicators of future value creation.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">✨</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Quality of physical environment</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Condition, upkeep and observable quality of the built environment — a proxy for long-term value retention.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">⚔️</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Competitive intensity</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Observed competitive activity — existing investment presence and new entrant signals in the area.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- USE CASES (light grey) -->
|
||||
<section style="background:#f8f9ff;padding:64px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:760px;margin:0 auto;text-align:center">
|
||||
<div class="section-label">Use cases</div>
|
||||
<h2 class="section-title section-title-light" style="margin-bottom:24px">Who uses this index.</h2>
|
||||
<div style="display:flex;flex-wrap:wrap;gap:12px;justify-content:center;margin-bottom:40px">
|
||||
<span style="background:#e0eaff;color:#0052cc;font-size:.8125rem;font-weight:600;padding:6px 14px;border-radius:100px">Capital allocation</span>
|
||||
<span style="background:#e0eaff;color:#0052cc;font-size:.8125rem;font-weight:600;padding:6px 14px;border-radius:100px">Site selection</span>
|
||||
<span style="background:#e0eaff;color:#0052cc;font-size:.8125rem;font-weight:600;padding:6px 14px;border-radius:100px">Portfolio construction</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- SAMPLE OUTPUT (dark) -->
|
||||
<section style="background:var(--surface);padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:700px;margin:0 auto;text-align:center">
|
||||
<div class="section-label">Sample output</div>
|
||||
<h2 class="section-title" style="margin-bottom:8px">What you receive.</h2>
|
||||
<p style="color:var(--text-dim);margin-bottom:48px">Attractiveness score + risk-adjusted rank + comparable benchmark</p>
|
||||
<div style="background:var(--surface-2);border:1px solid var(--border);border-radius:16px;padding:36px 40px;text-align:left">
|
||||
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:8px">
|
||||
<span style="color:var(--text-dim);font-size:.875rem;font-weight:600">Sample location · Placeholder score</span>
|
||||
<span style="color:#4ade80;font-size:.875rem;font-weight:700">↑ Improving</span>
|
||||
</div>
|
||||
<div style="display:flex;align-items:center;gap:16px;margin-bottom:4px">
|
||||
<span style="font-size:3rem;font-weight:800;color: #1d1d1f;letter-spacing:-2px">76</span>
|
||||
<span style="font-size:1.5rem;color:var(--text-dim)">/100</span>
|
||||
</div>
|
||||
|
||||
<div style="background:#f3f4f6;border-radius:8px;height:12px;width:100%;margin:12px 0 8px;overflow:hidden">
|
||||
<div style="height:100%;width:76%;background:#4ade80;border-radius:8px;transition:width 1s ease"></div>
|
||||
</div>
|
||||
|
||||
<div style="display:flex;justify-content:space-between;font-size:.75rem;color:var(--text-dim)">
|
||||
<span>Critical</span><span>Moderate</span><span>Strong</span>
|
||||
</div>
|
||||
<div style="margin-top:28px;padding-top:20px;border-top:1px solid var(--border);font-size:.8125rem;color:var(--text-dim)">
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#f59e0b" stroke-width="2"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg> Placeholder values for illustration. Live intelligence from August 2026.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CONTRADICTION ENGINE (dark blue) -->
|
||||
<section style="background:#001836;padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:800px;margin:0 auto">
|
||||
<div style="text-align:center;margin-bottom:48px">
|
||||
<div class="section-label" style="color:rgba(255,255,255,.75)">Advanced intelligence</div>
|
||||
<h2 class="section-title">How this index detects narrative conflicts.</h2>
|
||||
<p style="color:rgba(255,255,255,.75);max-width:600px;margin:0 auto;line-height:1.7">Investment Attractiveness Index combines all contradiction signals from across the index family into a single composite score. When multiple indexes show divergence between official data and observed reality, the investment risk-adjustment factor rises — reducing the attractiveness score to reflect information uncertainty in the official record.</p>
|
||||
</div>
|
||||
<div style="background:rgba(0,0,0,.05);border:1px solid rgba(0,0,0,.1);border-radius:16px;padding:32px 36px">
|
||||
<div style="display:flex;align-items:flex-start;gap:16px;margin-bottom:24px">
|
||||
<span style="font-size:1.5rem">🚩</span>
|
||||
<div>
|
||||
<div style="color:#f87171;font-weight:800;font-size:.9375rem;margin-bottom:4px">Contradiction Engine — How it works</div>
|
||||
<div style="color:rgba(255,255,255,.75);font-size:.875rem;line-height:1.6">Field observations are continuously cross-referenced against official records, registers, and published statistics. Divergence above threshold triggers a conflict flag.</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display:grid;grid-template-columns:1fr 1fr;gap:16px">
|
||||
<div style="background:rgba(34,197,94,.1);border:1px solid rgba(34,197,94,.2);border-radius:10px;padding:16px">
|
||||
<div style="color:#86efac;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px">Official record</div>
|
||||
<ul style="list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:6px">
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✓ Published condition ratings</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✓ Official statistics</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✓ Register data</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div style="background:rgba(239,68,68,.1);border:1px solid rgba(239,68,68,.2);border-radius:10px;padding:16px">
|
||||
<div style="color:#fca5a5;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px">Observed reality</div>
|
||||
<ul style="list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:6px">
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✗ Field observations</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✗ Real-time signals</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✗ Contradiction flags</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- RELATED INDEXES (white) -->
|
||||
<section style="background:#fff;padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="text-align:center;margin-bottom:48px">
|
||||
<div class="section-label">Related intelligence</div>
|
||||
<h2 class="section-title section-title-light">Explore related indexes.</h2>
|
||||
</div>
|
||||
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr));gap:20px;max-width:900px;margin:0 auto">
|
||||
|
||||
<a href="/intelligence/commercial-opportunity-index/" style="display:block;background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:20px 24px;text-decoration:none;color:inherit;transition:border-color .2s,transform .15s" onmouseover="this.style.borderColor='#0066ff';this.style.transform='translateY(-2px)'" onmouseout="this.style.borderColor='#e5e7eb';this.style.transform='none'">
|
||||
<div style="font-size:1.25rem;margin-bottom:8px">📈</div>
|
||||
<div style="font-weight:700;color:#0a0a0a;font-size:.9375rem;margin-bottom:4px">Commercial Opportunity Index</div>
|
||||
<div style="color:#0066ff;font-size:.8125rem;font-weight:700">View index →</div>
|
||||
</a>
|
||||
|
||||
<a href="/intelligence/growth-velocity-index/" style="display:block;background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:20px 24px;text-decoration:none;color:inherit;transition:border-color .2s,transform .15s" onmouseover="this.style.borderColor='#0066ff';this.style.transform='translateY(-2px)'" onmouseout="this.style.borderColor='#e5e7eb';this.style.transform='none'">
|
||||
<div style="font-size:1.25rem;margin-bottom:8px">🚀</div>
|
||||
<div style="font-weight:700;color:#0a0a0a;font-size:.9375rem;margin-bottom:4px">Growth Velocity Index</div>
|
||||
<div style="color:#0066ff;font-size:.8125rem;font-weight:700">View index →</div>
|
||||
</a>
|
||||
|
||||
<a href="/intelligence/risk-resilience-profile/" style="display:block;background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:20px 24px;text-decoration:none;color:inherit;transition:border-color .2s,transform .15s" onmouseover="this.style.borderColor='#0066ff';this.style.transform='translateY(-2px)'" onmouseout="this.style.borderColor='#e5e7eb';this.style.transform='none'">
|
||||
<div style="font-size:1.25rem;margin-bottom:8px">🛡️</div>
|
||||
<div style="font-weight:700;color:#0a0a0a;font-size:.9375rem;margin-bottom:4px">Risk & Resilience Profile</div>
|
||||
<div style="color:#0066ff;font-size:.8125rem;font-weight:700">View index →</div>
|
||||
</a>
|
||||
</div>
|
||||
<div style="text-align:center;margin-top:40px">
|
||||
<a href="/" style="color:var(--blue);font-weight:700;font-size:.9375rem">← Back to Landvex</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CONTACT (dark) -->
|
||||
<section id="contact" style="background: var(--bg-dark);padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:680px;margin:0 auto;text-align:center">
|
||||
<div class="section-label">Get in touch</div>
|
||||
<h2 class="section-title">Request a briefing.</h2>
|
||||
<p class="section-sub" style="margin:0 auto 40px">Tell us the question you need answered. We'll show you how this index applies to your decision.</p>
|
||||
<form class="contact-form" id="contact-form">
|
||||
<div class="form-row">
|
||||
<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>
|
||||
<div class="form-group">
|
||||
<label for="message">Message</label>
|
||||
<textarea id="message" name="message" placeholder="Describe your question or decision — location, context, what you need to know..."></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 -->
|
||||
<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="/privacy">Privacy</a>
|
||||
<a href="/terms">Terms</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">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" xmlns="http://www.w3.org/2000/svg">
|
||||
<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" xmlns="http://www.w3.org/2000/svg">
|
||||
<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-intelligence',
|
||||
index: 'investment-attractiveness-index',
|
||||
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 = "✓ Request received. We'll 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 →';
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Control Intelligence - LandveX</title>
|
||||
<meta http-equiv="refresh" content="0;url=/intelligence/">
|
||||
</head>
|
||||
<body>
|
||||
<p>Redirecting to <a href="/intelligence/">Intelligence Overview</a>...</p>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,519 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Neighbourhood Quality Index — Landvex Intelligence</title>
|
||||
<meta name="description" content="Measures how an area is experienced — condition, activity, upkeep and change trajectory — from the perspective of someone on the ground.">
|
||||
<link rel="canonical" href="https://www.landvex.com/intelligence/neighbourhood-quality-index/">
|
||||
<meta name="robots" content="index, follow">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="https://www.landvex.com/intelligence/neighbourhood-quality-index/">
|
||||
<meta property="og:title" content="Neighbourhood Quality Index — Landvex Intelligence">
|
||||
<meta property="og:description" content="Measures how an area is experienced — condition, activity, upkeep and change trajectory — from the perspective of someone on the ground.">
|
||||
<meta property="og:image" content="https://www.landvex.com/og-image.jpg">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Neighbourhood Quality Index — Landvex">
|
||||
<meta name="twitter:description" content="A composite measure of how an area is experienced — condition, activity, upkeep, and change trajectory — from the perspective of someone on the ground.">
|
||||
<meta name="twitter:image" content="https://www.landvex.com/og-image.jpg">
|
||||
<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">
|
||||
<link rel="manifest" href="/site.webmanifest">
|
||||
<script type="application/ld+json">{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebPage",
|
||||
"name": "Neighbourhood Quality Index — Landvex",
|
||||
"description": "A composite measure of how an area is experienced — condition, activity, upkeep, and change trajectory — from the perspective of someone on the ground.",
|
||||
"url": "https://www.landvex.com/intelligence/neighbourhood-quality-index/",
|
||||
"isPartOf": { "@type": "WebSite", "url": "https://www.landvex.com", "name": "Landvex" },
|
||||
"publisher": { "@type": "Organization", "name": "Landvex", "url": "https://www.landvex.com" }
|
||||
}</script>
|
||||
<style>
|
||||
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
:root {
|
||||
--bg-dark: #f5f5f7;
|
||||
--blue: #0066FF;
|
||||
--blue-dark: #0052CC;
|
||||
--blue-glow: rgba(0, 102, 255, 0.15);
|
||||
--text-body: #3a3a3a;
|
||||
--text-muted: #6B6B6B;
|
||||
--text-light: #1d1d1f;
|
||||
--text-dim: #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; }
|
||||
.nav-links { display: flex; gap: 32px; list-style: none; }
|
||||
.nav-links a { font-size: 14px; color: var(--text-dim); transition: color 0.2s; }
|
||||
.nav-links a:hover { 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: 80vh;
|
||||
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(36px, 6vw, 68px); font-weight: 800;
|
||||
letter-spacing: -2px; line-height: 1.05; color: #1d1d1f;
|
||||
max-width: 820px; margin-bottom: 24px;
|
||||
}
|
||||
.hero-sub {
|
||||
font-size: clamp(16px, 2vw, 19px); color: var(--text-dim);
|
||||
max-width: 640px; line-height: 1.65; margin-bottom: 40px;
|
||||
}
|
||||
.hero-ctas { display: flex; gap: 14px; flex-wrap: wrap; justify-content: center; }
|
||||
.container { max-width: 1140px; margin: 0 auto; }
|
||||
section { padding: 80px 24px; }
|
||||
.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(26px, 3.5vw, 40px); font-weight: 800;
|
||||
letter-spacing: -1px; line-height: 1.1; color: #1d1d1f; margin-bottom: 16px;
|
||||
}
|
||||
.section-title-light { color: #0a0a0a; }
|
||||
.section-sub { font-size: 17px; color: var(--text-dim); max-width: 560px; line-height: 1.7; }
|
||||
.contact-form {
|
||||
background: var(--surface); border: 1px solid var(--border);
|
||||
border-radius: var(--radius-lg); padding: 40px; text-align: left;
|
||||
}
|
||||
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 16px; }
|
||||
.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); }
|
||||
@media (max-width: 900px) {
|
||||
nav { padding: 0 20px; }
|
||||
.nav-links { display: none; }
|
||||
}
|
||||
@media (max-width: 600px) {
|
||||
section { padding: 48px 0 !important; }
|
||||
.container { padding: 0 16px !important; box-sizing: border-box; }
|
||||
.form-row { grid-template-columns: 1fr !important; }
|
||||
.contact-form { padding: 24px 20px; }
|
||||
.footer-inner { flex-direction: column; text-align: center; }
|
||||
[style*="grid-template-columns:1fr 1fr"] { grid-template-columns: 1fr !important; }
|
||||
[style*="grid-template-columns:repeat(auto-fit,minmax(300px"] { grid-template-columns: 1fr !important; }
|
||||
[style*="grid-template-columns:repeat(auto-fit,minmax(260px"] { grid-template-columns: 1fr !important; }
|
||||
}
|
||||
|
||||
.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}
|
||||
.lv-disclaimer--light{color:#888;background:#f5f5f5}
|
||||
.lv-disclaimer--light a{color:#555}
|
||||
</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": "Intelligence",
|
||||
"item": "https://www.landvex.com/intelligence/"
|
||||
},
|
||||
{
|
||||
"@type": "ListItem",
|
||||
"position": 3,
|
||||
"name": "Neighbourhood Quality Index",
|
||||
"item": "https://www.landvex.com/intelligence/neighbourhood-quality-index/"
|
||||
}
|
||||
]
|
||||
}
|
||||
</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/">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- NAV -->
|
||||
<nav>
|
||||
<a class="nav-logo" href="/">LandveX</a>
|
||||
<ul class="nav-links">
|
||||
<li><a href="/#how-it-works">How it works</a></li>
|
||||
<li><a href="/#verticals">Verticals</a></li>
|
||||
<li><a href="/methodology/">Methodology</a></li>
|
||||
<li><a href="/security/">Security</a></li>
|
||||
<li><a href="#contact">Contact</a></li>
|
||||
</ul>
|
||||
<a class="btn btn-outline" href="#contact">Request a briefing →</a>
|
||||
</nav>
|
||||
|
||||
<!-- HERO (dark) -->
|
||||
<section class="hero">
|
||||
<div class="hero-eyebrow">Intelligence Index · Landvex</div>
|
||||
<h1>How is this area experienced by the people who use it?</h1>
|
||||
<p class="hero-sub">A composite measure of how an area is experienced — condition, activity, upkeep, and change trajectory — from the perspective of someone on the ground.</p>
|
||||
<div class="hero-ctas">
|
||||
<a class="btn btn-lg" href="#contact">Request a briefing →</a>
|
||||
<a class="btn btn-outline btn-lg" href="#dimensions">See dimensions</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- DIMENSIONS (white/light section) -->
|
||||
<section id="dimensions" style="background:#fff;padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="text-align:center;margin-bottom:52px">
|
||||
<div class="section-label" style="color:var(--blue)">What we measure</div>
|
||||
<h2 class="section-title section-title-light">Five dimensions of intelligence.</h2>
|
||||
<p class="section-sub" style="color:#6b7280;margin:0 auto">Each index is built from five independently observed and scored dimensions — combined into a single comparable score.</p>
|
||||
</div>
|
||||
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr));gap:20px">
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">🏠</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Physical condition score</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Observable condition of buildings, streetscapes, public spaces and shared infrastructure.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">⚡</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Activity level</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Density and vibrancy of observable activity — pedestrians, commercial activity, events, services.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#00C853" stroke-width="3"><path d="M20 6L9 17l-5-5"/></svg></div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Maintenance quality</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Evidence of active upkeep — street cleaning, repairs, landscaping, graffiti removal and general care.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">🔒</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Safety signals</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Observable environmental safety indicators — lighting quality, surveillance, footfall density and activation.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">🔄</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Change direction</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Whether the area is improving or declining — trajectory from field observations over time.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- USE CASES (light grey) -->
|
||||
<section style="background:#f8f9ff;padding:64px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:760px;margin:0 auto;text-align:center">
|
||||
<div class="section-label">Use cases</div>
|
||||
<h2 class="section-title section-title-light" style="margin-bottom:24px">Who uses this index.</h2>
|
||||
<div style="display:flex;flex-wrap:wrap;gap:12px;justify-content:center;margin-bottom:40px">
|
||||
<span style="background:#e0eaff;color:#0052cc;font-size:.8125rem;font-weight:600;padding:6px 14px;border-radius:100px">Residential development</span>
|
||||
<span style="background:#e0eaff;color:#0052cc;font-size:.8125rem;font-weight:600;padding:6px 14px;border-radius:100px">Retail positioning</span>
|
||||
<span style="background:#e0eaff;color:#0052cc;font-size:.8125rem;font-weight:600;padding:6px 14px;border-radius:100px">Public space investment</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- SAMPLE OUTPUT (dark) -->
|
||||
<section style="background:var(--surface);padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:700px;margin:0 auto;text-align:center">
|
||||
<div class="section-label">Sample output</div>
|
||||
<h2 class="section-title" style="margin-bottom:8px">What you receive.</h2>
|
||||
<p style="color:var(--text-dim);margin-bottom:48px">Quality score + experience rating + trajectory signal</p>
|
||||
<div style="background:var(--surface-2);border:1px solid var(--border);border-radius:16px;padding:36px 40px;text-align:left">
|
||||
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:8px">
|
||||
<span style="color:var(--text-dim);font-size:.875rem;font-weight:600">Sample location · Placeholder score</span>
|
||||
<span style="color:#fbbf24;font-size:.875rem;font-weight:700">→ Stable</span>
|
||||
</div>
|
||||
<div style="display:flex;align-items:center;gap:16px;margin-bottom:4px">
|
||||
<span style="font-size:3rem;font-weight:800;color: #1d1d1f;letter-spacing:-2px">69</span>
|
||||
<span style="font-size:1.5rem;color:var(--text-dim)">/100</span>
|
||||
</div>
|
||||
|
||||
<div style="background:#f3f4f6;border-radius:8px;height:12px;width:100%;margin:12px 0 8px;overflow:hidden">
|
||||
<div style="height:100%;width:69%;background:#fbbf24;border-radius:8px;transition:width 1s ease"></div>
|
||||
</div>
|
||||
|
||||
<div style="display:flex;justify-content:space-between;font-size:.75rem;color:var(--text-dim)">
|
||||
<span>Critical</span><span>Moderate</span><span>Strong</span>
|
||||
</div>
|
||||
<div style="margin-top:28px;padding-top:20px;border-top:1px solid var(--border);font-size:.8125rem;color:var(--text-dim)">
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#f59e0b" stroke-width="2"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg> Placeholder values for illustration. Live intelligence from August 2026.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CONTRADICTION ENGINE (dark blue) -->
|
||||
<section style="background:#001836;padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:800px;margin:0 auto">
|
||||
<div style="text-align:center;margin-bottom:48px">
|
||||
<div class="section-label" style="color:rgba(255,255,255,.75)">Advanced intelligence</div>
|
||||
<h2 class="section-title">How this index detects narrative conflicts.</h2>
|
||||
<p style="color:rgba(255,255,255,.75);max-width:600px;margin:0 auto;line-height:1.7">Neighbourhood Quality Index flags when resident satisfaction surveys, official quality-of-life indexes or planning documents describe an area differently from what field observations record. High survey satisfaction scores in areas with observed maintenance decline often precede a quality drop — the index detects this divergence early.</p>
|
||||
</div>
|
||||
<div style="background:rgba(0,0,0,.05);border:1px solid rgba(0,0,0,.1);border-radius:16px;padding:32px 36px">
|
||||
<div style="display:flex;align-items:flex-start;gap:16px;margin-bottom:24px">
|
||||
<span style="font-size:1.5rem">🚩</span>
|
||||
<div>
|
||||
<div style="color:#f87171;font-weight:800;font-size:.9375rem;margin-bottom:4px">Contradiction Engine — How it works</div>
|
||||
<div style="color:rgba(255,255,255,.75);font-size:.875rem;line-height:1.6">Field observations are continuously cross-referenced against official records, registers, and published statistics. Divergence above threshold triggers a conflict flag.</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display:grid;grid-template-columns:1fr 1fr;gap:16px">
|
||||
<div style="background:rgba(34,197,94,.1);border:1px solid rgba(34,197,94,.2);border-radius:10px;padding:16px">
|
||||
<div style="color:#86efac;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px">Official record</div>
|
||||
<ul style="list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:6px">
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✓ Published condition ratings</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✓ Official statistics</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✓ Register data</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div style="background:rgba(239,68,68,.1);border:1px solid rgba(239,68,68,.2);border-radius:10px;padding:16px">
|
||||
<div style="color:#fca5a5;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px">Observed reality</div>
|
||||
<ul style="list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:6px">
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✗ Field observations</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✗ Real-time signals</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✗ Contradiction flags</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- RELATED INDEXES (white) -->
|
||||
<section style="background:#fff;padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="text-align:center;margin-bottom:48px">
|
||||
<div class="section-label">Related intelligence</div>
|
||||
<h2 class="section-title section-title-light">Explore related indexes.</h2>
|
||||
</div>
|
||||
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr));gap:20px;max-width:900px;margin:0 auto">
|
||||
|
||||
<a href="/intelligence/city-health-index/" style="display:block;background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:20px 24px;text-decoration:none;color:inherit;transition:border-color .2s,transform .15s" onmouseover="this.style.borderColor='#0066ff';this.style.transform='translateY(-2px)'" onmouseout="this.style.borderColor='#e5e7eb';this.style.transform='none'">
|
||||
<div style="font-size:1.25rem;margin-bottom:8px">🏙️</div>
|
||||
<div style="font-weight:700;color:#0a0a0a;font-size:.9375rem;margin-bottom:4px">City Health Index</div>
|
||||
<div style="color:#0066ff;font-size:.8125rem;font-weight:700">View index →</div>
|
||||
</a>
|
||||
|
||||
<a href="/intelligence/commercial-opportunity-index/" style="display:block;background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:20px 24px;text-decoration:none;color:inherit;transition:border-color .2s,transform .15s" onmouseover="this.style.borderColor='#0066ff';this.style.transform='translateY(-2px)'" onmouseout="this.style.borderColor='#e5e7eb';this.style.transform='none'">
|
||||
<div style="font-size:1.25rem;margin-bottom:8px">📈</div>
|
||||
<div style="font-weight:700;color:#0a0a0a;font-size:.9375rem;margin-bottom:4px">Commercial Opportunity Index</div>
|
||||
<div style="color:#0066ff;font-size:.8125rem;font-weight:700">View index →</div>
|
||||
</a>
|
||||
|
||||
<a href="/intelligence/risk-resilience-profile/" style="display:block;background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:20px 24px;text-decoration:none;color:inherit;transition:border-color .2s,transform .15s" onmouseover="this.style.borderColor='#0066ff';this.style.transform='translateY(-2px)'" onmouseout="this.style.borderColor='#e5e7eb';this.style.transform='none'">
|
||||
<div style="font-size:1.25rem;margin-bottom:8px">🛡️</div>
|
||||
<div style="font-weight:700;color:#0a0a0a;font-size:.9375rem;margin-bottom:4px">Risk & Resilience Profile</div>
|
||||
<div style="color:#0066ff;font-size:.8125rem;font-weight:700">View index →</div>
|
||||
</a>
|
||||
</div>
|
||||
<div style="text-align:center;margin-top:40px">
|
||||
<a href="/" style="color:var(--blue);font-weight:700;font-size:.9375rem">← Back to Landvex</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CONTACT (dark) -->
|
||||
<section id="contact" style="background: var(--bg-dark);padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:680px;margin:0 auto;text-align:center">
|
||||
<div class="section-label">Get in touch</div>
|
||||
<h2 class="section-title">Request a briefing.</h2>
|
||||
<p class="section-sub" style="margin:0 auto 40px">Tell us the question you need answered. We'll show you how this index applies to your decision.</p>
|
||||
<form class="contact-form" id="contact-form">
|
||||
<div class="form-row">
|
||||
<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>
|
||||
<div class="form-group">
|
||||
<label for="message">Message</label>
|
||||
<textarea id="message" name="message" placeholder="Describe your question or decision — location, context, what you need to know..."></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 -->
|
||||
<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="/privacy">Privacy</a>
|
||||
<a href="/terms">Terms</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">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" xmlns="http://www.w3.org/2000/svg">
|
||||
<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" xmlns="http://www.w3.org/2000/svg">
|
||||
<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-intelligence',
|
||||
index: 'neighbourhood-quality-index',
|
||||
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 = "✓ Request received. We'll 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 →';
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,519 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Risk & Resilience Profile — Landvex Intelligence</title>
|
||||
<meta name="description" content="Physical exposure mapping combining observed conditions, historical vulnerability and forward-looking risk signals. For insurance, finance and public sector.">
|
||||
<link rel="canonical" href="https://www.landvex.com/intelligence/risk-resilience-profile/">
|
||||
<meta name="robots" content="index, follow">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="https://www.landvex.com/intelligence/risk-resilience-profile/">
|
||||
<meta property="og:title" content="Risk & Resilience Profile — Landvex Intelligence">
|
||||
<meta property="og:description" content="Physical exposure mapping combining observed conditions, historical vulnerability and forward-looking risk signals. For insurance, finance and public sector.">
|
||||
<meta property="og:image" content="https://www.landvex.com/og-image.jpg">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Risk & Resilience Profile — Landvex">
|
||||
<meta name="twitter:description" content="Physical exposure mapping combining observed conditions, historical vulnerability, and forward-looking risk signals — for insurance, finance, and public sector resilience planning.">
|
||||
<meta name="twitter:image" content="https://www.landvex.com/og-image.jpg">
|
||||
<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">
|
||||
<link rel="manifest" href="/site.webmanifest">
|
||||
<script type="application/ld+json">{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebPage",
|
||||
"name": "Risk & Resilience Profile — Landvex",
|
||||
"description": "Physical exposure mapping combining observed conditions, historical vulnerability, and forward-looking risk signals — for insurance, finance, and public sector resilience planning.",
|
||||
"url": "https://www.landvex.com/intelligence/risk-resilience-profile/",
|
||||
"isPartOf": { "@type": "WebSite", "url": "https://www.landvex.com", "name": "Landvex" },
|
||||
"publisher": { "@type": "Organization", "name": "Landvex", "url": "https://www.landvex.com" }
|
||||
}</script>
|
||||
<style>
|
||||
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
:root {
|
||||
--bg-dark: #f5f5f7;
|
||||
--blue: #0066FF;
|
||||
--blue-dark: #0052CC;
|
||||
--blue-glow: rgba(0, 102, 255, 0.15);
|
||||
--text-body: #3a3a3a;
|
||||
--text-muted: #6B6B6B;
|
||||
--text-light: #1d1d1f;
|
||||
--text-dim: #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; }
|
||||
.nav-links { display: flex; gap: 32px; list-style: none; }
|
||||
.nav-links a { font-size: 14px; color: var(--text-dim); transition: color 0.2s; }
|
||||
.nav-links a:hover { 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: 80vh;
|
||||
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(36px, 6vw, 68px); font-weight: 800;
|
||||
letter-spacing: -2px; line-height: 1.05; color: #1d1d1f;
|
||||
max-width: 820px; margin-bottom: 24px;
|
||||
}
|
||||
.hero-sub {
|
||||
font-size: clamp(16px, 2vw, 19px); color: var(--text-dim);
|
||||
max-width: 640px; line-height: 1.65; margin-bottom: 40px;
|
||||
}
|
||||
.hero-ctas { display: flex; gap: 14px; flex-wrap: wrap; justify-content: center; }
|
||||
.container { max-width: 1140px; margin: 0 auto; }
|
||||
section { padding: 80px 24px; }
|
||||
.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(26px, 3.5vw, 40px); font-weight: 800;
|
||||
letter-spacing: -1px; line-height: 1.1; color: #1d1d1f; margin-bottom: 16px;
|
||||
}
|
||||
.section-title-light { color: #0a0a0a; }
|
||||
.section-sub { font-size: 17px; color: var(--text-dim); max-width: 560px; line-height: 1.7; }
|
||||
.contact-form {
|
||||
background: var(--surface); border: 1px solid var(--border);
|
||||
border-radius: var(--radius-lg); padding: 40px; text-align: left;
|
||||
}
|
||||
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 16px; }
|
||||
.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); }
|
||||
@media (max-width: 900px) {
|
||||
nav { padding: 0 20px; }
|
||||
.nav-links { display: none; }
|
||||
}
|
||||
@media (max-width: 600px) {
|
||||
section { padding: 48px 0 !important; }
|
||||
.container { padding: 0 16px !important; box-sizing: border-box; }
|
||||
.form-row { grid-template-columns: 1fr !important; }
|
||||
.contact-form { padding: 24px 20px; }
|
||||
.footer-inner { flex-direction: column; text-align: center; }
|
||||
[style*="grid-template-columns:1fr 1fr"] { grid-template-columns: 1fr !important; }
|
||||
[style*="grid-template-columns:repeat(auto-fit,minmax(300px"] { grid-template-columns: 1fr !important; }
|
||||
[style*="grid-template-columns:repeat(auto-fit,minmax(260px"] { grid-template-columns: 1fr !important; }
|
||||
}
|
||||
|
||||
.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}
|
||||
.lv-disclaimer--light{color:#888;background:#f5f5f5}
|
||||
.lv-disclaimer--light a{color:#555}
|
||||
</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": "Intelligence",
|
||||
"item": "https://www.landvex.com/intelligence/"
|
||||
},
|
||||
{
|
||||
"@type": "ListItem",
|
||||
"position": 3,
|
||||
"name": "Risk Resilience Profile",
|
||||
"item": "https://www.landvex.com/intelligence/risk-resilience-profile/"
|
||||
}
|
||||
]
|
||||
}
|
||||
</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/">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- NAV -->
|
||||
<nav>
|
||||
<a class="nav-logo" href="/">LandveX</a>
|
||||
<ul class="nav-links">
|
||||
<li><a href="/#how-it-works">How it works</a></li>
|
||||
<li><a href="/#verticals">Verticals</a></li>
|
||||
<li><a href="/methodology/">Methodology</a></li>
|
||||
<li><a href="/security/">Security</a></li>
|
||||
<li><a href="#contact">Contact</a></li>
|
||||
</ul>
|
||||
<a class="btn btn-outline" href="#contact">Request a briefing →</a>
|
||||
</nav>
|
||||
|
||||
<!-- HERO (dark) -->
|
||||
<section class="hero">
|
||||
<div class="hero-eyebrow">Intelligence Index · Landvex</div>
|
||||
<h1>What is the physical risk exposure of this area?</h1>
|
||||
<p class="hero-sub">Physical exposure mapping combining observed conditions, historical vulnerability, and forward-looking risk signals — for insurance, finance, and public sector resilience planning.</p>
|
||||
<div class="hero-ctas">
|
||||
<a class="btn btn-lg" href="#contact">Request a briefing →</a>
|
||||
<a class="btn btn-outline btn-lg" href="#dimensions">See dimensions</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- DIMENSIONS (white/light section) -->
|
||||
<section id="dimensions" style="background:#fff;padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="text-align:center;margin-bottom:52px">
|
||||
<div class="section-label" style="color:var(--blue)">What we measure</div>
|
||||
<h2 class="section-title section-title-light">Five dimensions of intelligence.</h2>
|
||||
<p class="section-sub" style="color:#6b7280;margin:0 auto">Each index is built from five independently observed and scored dimensions — combined into a single comparable score.</p>
|
||||
</div>
|
||||
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr));gap:20px">
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#f59e0b" stroke-width="2"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg></div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Physical exposure score</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Composite score of observable physical risk factors — drainage, elevation, construction quality, age.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">🌊</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Flood/weather risk signals</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Observed drainage capacity, flood markers, historical damage evidence and climate exposure indicators.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">🏗️</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Infrastructure vulnerability</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Condition and resilience of critical infrastructure serving the area — power, water, roads, communications.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">🤝</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Social resilience indicators</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Observable signals of community capacity and social infrastructure — services, connectivity, density.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">🔄</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Recovery capacity</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Speed of observable recovery from prior disruption events — maintenance responsiveness and institutional capacity.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- USE CASES (light grey) -->
|
||||
<section style="background:#f8f9ff;padding:64px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:760px;margin:0 auto;text-align:center">
|
||||
<div class="section-label">Use cases</div>
|
||||
<h2 class="section-title section-title-light" style="margin-bottom:24px">Who uses this index.</h2>
|
||||
<div style="display:flex;flex-wrap:wrap;gap:12px;justify-content:center;margin-bottom:40px">
|
||||
<span style="background:#e0eaff;color:#0052cc;font-size:.8125rem;font-weight:600;padding:6px 14px;border-radius:100px">Insurance underwriting</span>
|
||||
<span style="background:#e0eaff;color:#0052cc;font-size:.8125rem;font-weight:600;padding:6px 14px;border-radius:100px">Portfolio stress testing</span>
|
||||
<span style="background:#e0eaff;color:#0052cc;font-size:.8125rem;font-weight:600;padding:6px 14px;border-radius:100px">Resilience planning</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- SAMPLE OUTPUT (dark) -->
|
||||
<section style="background:var(--surface);padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:700px;margin:0 auto;text-align:center">
|
||||
<div class="section-label">Sample output</div>
|
||||
<h2 class="section-title" style="margin-bottom:8px">What you receive.</h2>
|
||||
<p style="color:var(--text-dim);margin-bottom:48px">Risk score + exposure map + resilience rating</p>
|
||||
<div style="background:var(--surface-2);border:1px solid var(--border);border-radius:16px;padding:36px 40px;text-align:left">
|
||||
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:8px">
|
||||
<span style="color:var(--text-dim);font-size:.875rem;font-weight:600">Sample location · Placeholder score</span>
|
||||
<span style="color:#fbbf24;font-size:.875rem;font-weight:700">→ Stable risk</span>
|
||||
</div>
|
||||
<div style="display:flex;align-items:center;gap:16px;margin-bottom:4px">
|
||||
<span style="font-size:3rem;font-weight:800;color: #1d1d1f;letter-spacing:-2px">38</span>
|
||||
<span style="font-size:1.5rem;color:var(--text-dim)">/100</span>
|
||||
</div>
|
||||
|
||||
<div style="background:#f3f4f6;border-radius:8px;height:12px;width:100%;margin:12px 0 8px;overflow:hidden">
|
||||
<div style="height:100%;width:38%;background:#f87171;border-radius:8px;transition:width 1s ease"></div>
|
||||
</div>
|
||||
|
||||
<div style="display:flex;justify-content:space-between;font-size:.75rem;color:var(--text-dim)">
|
||||
<span>Critical</span><span>Moderate</span><span>Strong</span>
|
||||
</div>
|
||||
<div style="margin-top:28px;padding-top:20px;border-top:1px solid var(--border);font-size:.8125rem;color:var(--text-dim)">
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#f59e0b" stroke-width="2"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg> Placeholder values for illustration. Live intelligence from August 2026.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CONTRADICTION ENGINE (dark blue) -->
|
||||
<section style="background:#001836;padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:800px;margin:0 auto">
|
||||
<div style="text-align:center;margin-bottom:48px">
|
||||
<div class="section-label" style="color:rgba(255,255,255,.75)">Advanced intelligence</div>
|
||||
<h2 class="section-title">How this index detects narrative conflicts.</h2>
|
||||
<p style="color:rgba(255,255,255,.75);max-width:600px;margin:0 auto;line-height:1.7">Risk & Resilience Profile detects contradictions between official risk assessments and observed physical conditions. When flood zone maps say low risk but field observations show inadequate drainage, ageing embankments and deferred maintenance — the contradiction engine raises the actual risk score above the official rating.</p>
|
||||
</div>
|
||||
<div style="background:rgba(0,0,0,.05);border:1px solid rgba(0,0,0,.1);border-radius:16px;padding:32px 36px">
|
||||
<div style="display:flex;align-items:flex-start;gap:16px;margin-bottom:24px">
|
||||
<span style="font-size:1.5rem">🚩</span>
|
||||
<div>
|
||||
<div style="color:#f87171;font-weight:800;font-size:.9375rem;margin-bottom:4px">Contradiction Engine — How it works</div>
|
||||
<div style="color:rgba(255,255,255,.75);font-size:.875rem;line-height:1.6">Field observations are continuously cross-referenced against official records, registers, and published statistics. Divergence above threshold triggers a conflict flag.</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display:grid;grid-template-columns:1fr 1fr;gap:16px">
|
||||
<div style="background:rgba(34,197,94,.1);border:1px solid rgba(34,197,94,.2);border-radius:10px;padding:16px">
|
||||
<div style="color:#86efac;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px">Official record</div>
|
||||
<ul style="list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:6px">
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✓ Published condition ratings</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✓ Official statistics</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✓ Register data</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div style="background:rgba(239,68,68,.1);border:1px solid rgba(239,68,68,.2);border-radius:10px;padding:16px">
|
||||
<div style="color:#fca5a5;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px">Observed reality</div>
|
||||
<ul style="list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:6px">
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✗ Field observations</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✗ Real-time signals</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✗ Contradiction flags</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- RELATED INDEXES (white) -->
|
||||
<section style="background:#fff;padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="text-align:center;margin-bottom:48px">
|
||||
<div class="section-label">Related intelligence</div>
|
||||
<h2 class="section-title section-title-light">Explore related indexes.</h2>
|
||||
</div>
|
||||
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr));gap:20px;max-width:900px;margin:0 auto">
|
||||
|
||||
<a href="/intelligence/infrastructure-risk-index/" style="display:block;background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:20px 24px;text-decoration:none;color:inherit;transition:border-color .2s,transform .15s" onmouseover="this.style.borderColor='#0066ff';this.style.transform='translateY(-2px)'" onmouseout="this.style.borderColor='#e5e7eb';this.style.transform='none'">
|
||||
<div style="font-size:1.25rem;margin-bottom:8px"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#f59e0b" stroke-width="2"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg></div>
|
||||
<div style="font-weight:700;color:#0a0a0a;font-size:.9375rem;margin-bottom:4px">Infrastructure Risk Index</div>
|
||||
<div style="color:#0066ff;font-size:.8125rem;font-weight:700">View index →</div>
|
||||
</a>
|
||||
|
||||
<a href="/intelligence/city-health-index/" style="display:block;background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:20px 24px;text-decoration:none;color:inherit;transition:border-color .2s,transform .15s" onmouseover="this.style.borderColor='#0066ff';this.style.transform='translateY(-2px)'" onmouseout="this.style.borderColor='#e5e7eb';this.style.transform='none'">
|
||||
<div style="font-size:1.25rem;margin-bottom:8px">🏙️</div>
|
||||
<div style="font-weight:700;color:#0a0a0a;font-size:.9375rem;margin-bottom:4px">City Health Index</div>
|
||||
<div style="color:#0066ff;font-size:.8125rem;font-weight:700">View index →</div>
|
||||
</a>
|
||||
|
||||
<a href="/intelligence/neighbourhood-quality-index/" style="display:block;background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:20px 24px;text-decoration:none;color:inherit;transition:border-color .2s,transform .15s" onmouseover="this.style.borderColor='#0066ff';this.style.transform='translateY(-2px)'" onmouseout="this.style.borderColor='#e5e7eb';this.style.transform='none'">
|
||||
<div style="font-size:1.25rem;margin-bottom:8px">🏘️</div>
|
||||
<div style="font-weight:700;color:#0a0a0a;font-size:.9375rem;margin-bottom:4px">Neighbourhood Quality Index</div>
|
||||
<div style="color:#0066ff;font-size:.8125rem;font-weight:700">View index →</div>
|
||||
</a>
|
||||
</div>
|
||||
<div style="text-align:center;margin-top:40px">
|
||||
<a href="/" style="color:var(--blue);font-weight:700;font-size:.9375rem">← Back to Landvex</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CONTACT (dark) -->
|
||||
<section id="contact" style="background: var(--bg-dark);padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:680px;margin:0 auto;text-align:center">
|
||||
<div class="section-label">Get in touch</div>
|
||||
<h2 class="section-title">Request a briefing.</h2>
|
||||
<p class="section-sub" style="margin:0 auto 40px">Tell us the question you need answered. We'll show you how this index applies to your decision.</p>
|
||||
<form class="contact-form" id="contact-form">
|
||||
<div class="form-row">
|
||||
<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>
|
||||
<div class="form-group">
|
||||
<label for="message">Message</label>
|
||||
<textarea id="message" name="message" placeholder="Describe your question or decision — location, context, what you need to know..."></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 -->
|
||||
<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="/privacy">Privacy</a>
|
||||
<a href="/terms">Terms</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">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" xmlns="http://www.w3.org/2000/svg">
|
||||
<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" xmlns="http://www.w3.org/2000/svg">
|
||||
<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-intelligence',
|
||||
index: 'risk-resilience-profile',
|
||||
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 = "✓ Request received. We'll 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 →';
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Control Intelligence - LandveX</title>
|
||||
<meta http-equiv="refresh" content="0;url=/intelligence/">
|
||||
</head>
|
||||
<body>
|
||||
<p>Redirecting to <a href="/intelligence/">Intelligence Overview</a>...</p>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,519 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Urban Growth Index — Landvex Intelligence</title>
|
||||
<meta name="description" content="Growth velocity by district. Identifies emerging zones before they appear in official statistics or property price indexes. Launching August 2026.">
|
||||
<link rel="canonical" href="https://www.landvex.com/intelligence/urban-growth-index/">
|
||||
<meta name="robots" content="index, follow">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="https://www.landvex.com/intelligence/urban-growth-index/">
|
||||
<meta property="og:title" content="Urban Growth Index — Landvex Intelligence">
|
||||
<meta property="og:description" content="Growth velocity by district. Identifies emerging zones before they appear in official statistics or property price indexes. Launching August 2026.">
|
||||
<meta property="og:image" content="https://www.landvex.com/og-image.jpg">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Urban Growth Index — Landvex">
|
||||
<meta name="twitter:description" content="Growth velocity by district — identifying emerging zones before they appear in official statistics or property price indexes.">
|
||||
<meta name="twitter:image" content="https://www.landvex.com/og-image.jpg">
|
||||
<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">
|
||||
<link rel="manifest" href="/site.webmanifest">
|
||||
<script type="application/ld+json">{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebPage",
|
||||
"name": "Urban Growth Index — Landvex",
|
||||
"description": "Growth velocity by district — identifying emerging zones before they appear in official statistics or property price indexes.",
|
||||
"url": "https://www.landvex.com/intelligence/urban-growth-index/",
|
||||
"isPartOf": { "@type": "WebSite", "url": "https://www.landvex.com", "name": "Landvex" },
|
||||
"publisher": { "@type": "Organization", "name": "Landvex", "url": "https://www.landvex.com" }
|
||||
}</script>
|
||||
<style>
|
||||
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
:root {
|
||||
--bg-dark: #f5f5f7;
|
||||
--blue: #0066FF;
|
||||
--blue-dark: #0052CC;
|
||||
--blue-glow: rgba(0, 102, 255, 0.15);
|
||||
--text-body: #3a3a3a;
|
||||
--text-muted: #6B6B6B;
|
||||
--text-light: #1d1d1f;
|
||||
--text-dim: #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; }
|
||||
.nav-links { display: flex; gap: 32px; list-style: none; }
|
||||
.nav-links a { font-size: 14px; color: var(--text-dim); transition: color 0.2s; }
|
||||
.nav-links a:hover { 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: 80vh;
|
||||
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(36px, 6vw, 68px); font-weight: 800;
|
||||
letter-spacing: -2px; line-height: 1.05; color: #1d1d1f;
|
||||
max-width: 820px; margin-bottom: 24px;
|
||||
}
|
||||
.hero-sub {
|
||||
font-size: clamp(16px, 2vw, 19px); color: var(--text-dim);
|
||||
max-width: 640px; line-height: 1.65; margin-bottom: 40px;
|
||||
}
|
||||
.hero-ctas { display: flex; gap: 14px; flex-wrap: wrap; justify-content: center; }
|
||||
.container { max-width: 1140px; margin: 0 auto; }
|
||||
section { padding: 80px 24px; }
|
||||
.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(26px, 3.5vw, 40px); font-weight: 800;
|
||||
letter-spacing: -1px; line-height: 1.1; color: #1d1d1f; margin-bottom: 16px;
|
||||
}
|
||||
.section-title-light { color: #0a0a0a; }
|
||||
.section-sub { font-size: 17px; color: var(--text-dim); max-width: 560px; line-height: 1.7; }
|
||||
.contact-form {
|
||||
background: var(--surface); border: 1px solid var(--border);
|
||||
border-radius: var(--radius-lg); padding: 40px; text-align: left;
|
||||
}
|
||||
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 16px; }
|
||||
.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); }
|
||||
@media (max-width: 900px) {
|
||||
nav { padding: 0 20px; }
|
||||
.nav-links { display: none; }
|
||||
}
|
||||
@media (max-width: 600px) {
|
||||
section { padding: 48px 0 !important; }
|
||||
.container { padding: 0 16px !important; box-sizing: border-box; }
|
||||
.form-row { grid-template-columns: 1fr !important; }
|
||||
.contact-form { padding: 24px 20px; }
|
||||
.footer-inner { flex-direction: column; text-align: center; }
|
||||
[style*="grid-template-columns:1fr 1fr"] { grid-template-columns: 1fr !important; }
|
||||
[style*="grid-template-columns:repeat(auto-fit,minmax(300px"] { grid-template-columns: 1fr !important; }
|
||||
[style*="grid-template-columns:repeat(auto-fit,minmax(260px"] { grid-template-columns: 1fr !important; }
|
||||
}
|
||||
|
||||
.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}
|
||||
.lv-disclaimer--light{color:#888;background:#f5f5f5}
|
||||
.lv-disclaimer--light a{color:#555}
|
||||
</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": "Intelligence",
|
||||
"item": "https://www.landvex.com/intelligence/"
|
||||
},
|
||||
{
|
||||
"@type": "ListItem",
|
||||
"position": 3,
|
||||
"name": "Urban Growth Index",
|
||||
"item": "https://www.landvex.com/intelligence/urban-growth-index/"
|
||||
}
|
||||
]
|
||||
}
|
||||
</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/">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- NAV -->
|
||||
<nav>
|
||||
<a class="nav-logo" href="/">LandveX</a>
|
||||
<ul class="nav-links">
|
||||
<li><a href="/#how-it-works">How it works</a></li>
|
||||
<li><a href="/#verticals">Verticals</a></li>
|
||||
<li><a href="/methodology/">Methodology</a></li>
|
||||
<li><a href="/security/">Security</a></li>
|
||||
<li><a href="#contact">Contact</a></li>
|
||||
</ul>
|
||||
<a class="btn btn-outline" href="#contact">Request a briefing →</a>
|
||||
</nav>
|
||||
|
||||
<!-- HERO (dark) -->
|
||||
<section class="hero">
|
||||
<div class="hero-eyebrow">Intelligence Index · Landvex</div>
|
||||
<h1>How fast is this area growing?</h1>
|
||||
<p class="hero-sub">Growth velocity by district — identifying emerging zones before they appear in official statistics or property price indexes.</p>
|
||||
<div class="hero-ctas">
|
||||
<a class="btn btn-lg" href="#contact">Request a briefing →</a>
|
||||
<a class="btn btn-outline btn-lg" href="#dimensions">See dimensions</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- DIMENSIONS (white/light section) -->
|
||||
<section id="dimensions" style="background:#fff;padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="text-align:center;margin-bottom:52px">
|
||||
<div class="section-label" style="color:var(--blue)">What we measure</div>
|
||||
<h2 class="section-title section-title-light">Five dimensions of intelligence.</h2>
|
||||
<p class="section-sub" style="color:#6b7280;margin:0 auto">Each index is built from five independently observed and scored dimensions — combined into a single comparable score.</p>
|
||||
</div>
|
||||
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr));gap:20px">
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">📈</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Commercial expansion rate</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Speed of new commercial openings relative to closures — net growth rate of the commercial ecosystem.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">🏠</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Residential activity</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Observable indicators of residential growth — new builds, renovations, moving activity, service infrastructure.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">🏥</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Service density growth</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Expansion of service infrastructure — cafés, gyms, medical, childcare — that follows population growth.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">🔌</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Infrastructure investment</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">New utilities, roads, transit stops and public infrastructure as a signal of long-term growth commitment.</p>
|
||||
</div>
|
||||
|
||||
<div style="background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:24px 28px;cursor:pointer" onclick="location.href='#contact'" role="button" tabindex="0">
|
||||
<div style="font-size:1.5rem;margin-bottom:10px">👥</div>
|
||||
<h3 style="font-size:1rem;font-weight:700;color:#0a0a0a;margin-bottom:6px">Demographic signals</h3>
|
||||
<p style="font-size:.875rem;color:#6b7280;line-height:1.6">Observable shifts in the demographic mix of an area — a leading indicator of future commercial and property demand.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- USE CASES (light grey) -->
|
||||
<section style="background:#f8f9ff;padding:64px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:760px;margin:0 auto;text-align:center">
|
||||
<div class="section-label">Use cases</div>
|
||||
<h2 class="section-title section-title-light" style="margin-bottom:24px">Who uses this index.</h2>
|
||||
<div style="display:flex;flex-wrap:wrap;gap:12px;justify-content:center;margin-bottom:40px">
|
||||
<span style="background:#e0eaff;color:#0052cc;font-size:.8125rem;font-weight:600;padding:6px 14px;border-radius:100px">Early-stage investment</span>
|
||||
<span style="background:#e0eaff;color:#0052cc;font-size:.8125rem;font-weight:600;padding:6px 14px;border-radius:100px">Retail pre-positioning</span>
|
||||
<span style="background:#e0eaff;color:#0052cc;font-size:.8125rem;font-weight:600;padding:6px 14px;border-radius:100px">Infrastructure planning</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- SAMPLE OUTPUT (dark) -->
|
||||
<section style="background:var(--surface);padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:700px;margin:0 auto;text-align:center">
|
||||
<div class="section-label">Sample output</div>
|
||||
<h2 class="section-title" style="margin-bottom:8px">What you receive.</h2>
|
||||
<p style="color:var(--text-dim);margin-bottom:48px">Growth velocity score + district ranking + 12-month trajectory</p>
|
||||
<div style="background:var(--surface-2);border:1px solid var(--border);border-radius:16px;padding:36px 40px;text-align:left">
|
||||
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:8px">
|
||||
<span style="color:var(--text-dim);font-size:.875rem;font-weight:600">Sample location · Placeholder score</span>
|
||||
<span style="color:#4ade80;font-size:.875rem;font-weight:700">↑ High velocity</span>
|
||||
</div>
|
||||
<div style="display:flex;align-items:center;gap:16px;margin-bottom:4px">
|
||||
<span style="font-size:3rem;font-weight:800;color: #1d1d1f;letter-spacing:-2px">78</span>
|
||||
<span style="font-size:1.5rem;color:var(--text-dim)">/100</span>
|
||||
</div>
|
||||
|
||||
<div style="background:#f3f4f6;border-radius:8px;height:12px;width:100%;margin:12px 0 8px;overflow:hidden">
|
||||
<div style="height:100%;width:78%;background:#4ade80;border-radius:8px;transition:width 1s ease"></div>
|
||||
</div>
|
||||
|
||||
<div style="display:flex;justify-content:space-between;font-size:.75rem;color:var(--text-dim)">
|
||||
<span>Critical</span><span>Moderate</span><span>Strong</span>
|
||||
</div>
|
||||
<div style="margin-top:28px;padding-top:20px;border-top:1px solid var(--border);font-size:.8125rem;color:var(--text-dim)">
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#f59e0b" stroke-width="2"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg> Placeholder values for illustration. Live intelligence from August 2026.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CONTRADICTION ENGINE (dark blue) -->
|
||||
<section style="background:#001836;padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:800px;margin:0 auto">
|
||||
<div style="text-align:center;margin-bottom:48px">
|
||||
<div class="section-label" style="color:rgba(255,255,255,.75)">Advanced intelligence</div>
|
||||
<h2 class="section-title">How this index detects narrative conflicts.</h2>
|
||||
<p style="color:rgba(255,255,255,.75);max-width:600px;margin:0 auto;line-height:1.7">Urban Growth Index flags when official population and economic statistics show growth in areas where observed activity is stagnant — or vice versa. Emerging districts frequently grow faster than statistics reflect. When field observations show rapid commercial expansion ahead of official economic data, the index raises the score and flags the statistical gap.</p>
|
||||
</div>
|
||||
<div style="background:rgba(0,0,0,.05);border:1px solid rgba(0,0,0,.1);border-radius:16px;padding:32px 36px">
|
||||
<div style="display:flex;align-items:flex-start;gap:16px;margin-bottom:24px">
|
||||
<span style="font-size:1.5rem">🚩</span>
|
||||
<div>
|
||||
<div style="color:#f87171;font-weight:800;font-size:.9375rem;margin-bottom:4px">Contradiction Engine — How it works</div>
|
||||
<div style="color:rgba(255,255,255,.75);font-size:.875rem;line-height:1.6">Field observations are continuously cross-referenced against official records, registers, and published statistics. Divergence above threshold triggers a conflict flag.</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display:grid;grid-template-columns:1fr 1fr;gap:16px">
|
||||
<div style="background:rgba(34,197,94,.1);border:1px solid rgba(34,197,94,.2);border-radius:10px;padding:16px">
|
||||
<div style="color:#86efac;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px">Official record</div>
|
||||
<ul style="list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:6px">
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✓ Published condition ratings</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✓ Official statistics</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✓ Register data</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div style="background:rgba(239,68,68,.1);border:1px solid rgba(239,68,68,.2);border-radius:10px;padding:16px">
|
||||
<div style="color:#fca5a5;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px">Observed reality</div>
|
||||
<ul style="list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:6px">
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✗ Field observations</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✗ Real-time signals</li>
|
||||
<li style="color:rgba(255,255,255,.7);font-size:.875rem">✗ Contradiction flags</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- RELATED INDEXES (white) -->
|
||||
<section style="background:#fff;padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="text-align:center;margin-bottom:48px">
|
||||
<div class="section-label">Related intelligence</div>
|
||||
<h2 class="section-title section-title-light">Explore related indexes.</h2>
|
||||
</div>
|
||||
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr));gap:20px;max-width:900px;margin:0 auto">
|
||||
|
||||
<a href="/intelligence/growth-velocity-index/" style="display:block;background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:20px 24px;text-decoration:none;color:inherit;transition:border-color .2s,transform .15s" onmouseover="this.style.borderColor='#0066ff';this.style.transform='translateY(-2px)'" onmouseout="this.style.borderColor='#e5e7eb';this.style.transform='none'">
|
||||
<div style="font-size:1.25rem;margin-bottom:8px">🚀</div>
|
||||
<div style="font-weight:700;color:#0a0a0a;font-size:.9375rem;margin-bottom:4px">Growth Velocity Index</div>
|
||||
<div style="color:#0066ff;font-size:.8125rem;font-weight:700">View index →</div>
|
||||
</a>
|
||||
|
||||
<a href="/intelligence/commercial-opportunity-index/" style="display:block;background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:20px 24px;text-decoration:none;color:inherit;transition:border-color .2s,transform .15s" onmouseover="this.style.borderColor='#0066ff';this.style.transform='translateY(-2px)'" onmouseout="this.style.borderColor='#e5e7eb';this.style.transform='none'">
|
||||
<div style="font-size:1.25rem;margin-bottom:8px">📈</div>
|
||||
<div style="font-weight:700;color:#0a0a0a;font-size:.9375rem;margin-bottom:4px">Commercial Opportunity Index</div>
|
||||
<div style="color:#0066ff;font-size:.8125rem;font-weight:700">View index →</div>
|
||||
</a>
|
||||
|
||||
<a href="/intelligence/investment-attractiveness-index/" style="display:block;background:#f8f9ff;border:1px solid #e5e7eb;border-radius:12px;padding:20px 24px;text-decoration:none;color:inherit;transition:border-color .2s,transform .15s" onmouseover="this.style.borderColor='#0066ff';this.style.transform='translateY(-2px)'" onmouseout="this.style.borderColor='#e5e7eb';this.style.transform='none'">
|
||||
<div style="font-size:1.25rem;margin-bottom:8px">💎</div>
|
||||
<div style="font-weight:700;color:#0a0a0a;font-size:.9375rem;margin-bottom:4px">Investment Attractiveness Index</div>
|
||||
<div style="color:#0066ff;font-size:.8125rem;font-weight:700">View index →</div>
|
||||
</a>
|
||||
</div>
|
||||
<div style="text-align:center;margin-top:40px">
|
||||
<a href="/" style="color:var(--blue);font-weight:700;font-size:.9375rem">← Back to Landvex</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CONTACT (dark) -->
|
||||
<section id="contact" style="background: var(--bg-dark);padding:80px 24px">
|
||||
<div class="container">
|
||||
<div style="max-width:680px;margin:0 auto;text-align:center">
|
||||
<div class="section-label">Get in touch</div>
|
||||
<h2 class="section-title">Request a briefing.</h2>
|
||||
<p class="section-sub" style="margin:0 auto 40px">Tell us the question you need answered. We'll show you how this index applies to your decision.</p>
|
||||
<form class="contact-form" id="contact-form">
|
||||
<div class="form-row">
|
||||
<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>
|
||||
<div class="form-group">
|
||||
<label for="message">Message</label>
|
||||
<textarea id="message" name="message" placeholder="Describe your question or decision — location, context, what you need to know..."></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 -->
|
||||
<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="/privacy">Privacy</a>
|
||||
<a href="/terms">Terms</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">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" xmlns="http://www.w3.org/2000/svg">
|
||||
<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" xmlns="http://www.w3.org/2000/svg">
|
||||
<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-intelligence',
|
||||
index: 'urban-growth-index',
|
||||
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 = "✓ Request received. We'll 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 →';
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user