Files
boc/landvex_redesign.html
T
Bernt 1a12fb870b dev-api: add developer portal, OpenAPI spec, and Flatenbadet case study
- New /developers/ page with API docs, SDKs, pricing, use cases
- OpenAPI 3.0 spec for Orders, Missions, Photos, Analytics
- Case study: Glasskiosken i Flatenbadet — complete ROI analysis
- Updated /order/ with recurring missions and frequency dropdown
2026-07-14 15:27:33 +00:00

1455 lines
64 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Landvex — Decision Intelligence for the Physical World</title>
<meta name="description" content="Landvex delivers decision intelligence for infrastructure owners, enterprises and governments. Decision intelligence for the physical world.">
<link rel="canonical" href="https://landvex.com/">
<link rel="alternate" hreflang="x-default" href="https://landvex.com/">
<link rel="alternate" hreflang="en" href="https://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/">
<!-- Open Graph -->
<meta property="og:type" content="website">
<meta property="og:url" content="https://landvex.com/">
<meta property="og:title" content="Landvex — Decision Intelligence for the Physical World">
<meta property="og:description" content="Landvex is a Swedish-headquartered decision intelligence company with global operations. We deliver control intelligence for infrastructure owners, enterprises and governments globally.">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image" content="https://landvex.com/og-image.jpg">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Landvex — Decision Intelligence for the Physical World">
<meta name="twitter:description" content="Landvex is a decision intelligence platform that transforms field observations into infrastructure intelligence, urban intelligence and commercial intelligence.">
<meta name="twitter:image" content="https://landvex.com/og-image.jpg">
<!-- Favicons -->
<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">
<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.10);
--text-dark: #1d1d1f;
--text-body: #3a3a3a;
--text-muted: #6e6e73;
--text-light: #1d1d1f;
--text-dim: #515154;
--surface: #ffffff;
--surface-2: #f5f5f7;
--border: rgba(0,0,0,0.09);
--radius-sm: 8px;
--radius-md: 14px;
--radius-lg: 24px;
--radius-xl: 100px;
--radius-full: 9999px;
}
html { scroll-behavior: smooth; }
body {
background: #f5f5f7;
font-family: -apple-system, BlinkMacSystemFont, 'Inter', 'Helvetica Neue', sans-serif;
color: #1d1d1f;
line-height: 1.6;
-webkit-font-smoothing: antialiased;
}
a { color: inherit; text-decoration: none; }
/* NAV */
nav {
position: fixed; top: 0; left: 0; right: 0; z-index: 1000;
display: flex; align-items: center; justify-content: space-between;
padding: 0 40px;
height: 64px;
background: rgba(255,255,255,0.95);
backdrop-filter: blur(16px);
-webkit-backdrop-filter: blur(16px);
border-bottom: 1px solid rgba(0,0,0,0.08);
}
.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: #4A4A4A;
transition: color 0.2s;
}
.nav-links a:hover { color: #1d1d1f; }
/* Dropdown */
.nav-dropdown { position: relative; }
.nav-dropdown > a {
display: flex; align-items: center; gap: 4px; cursor: pointer;
}
.nav-dropdown > a::after {
content: '';
display: inline-block;
width: 0; height: 0;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
border-top: 4px solid currentColor;
opacity: 0.55;
margin-top: 1px;
transition: transform 0.2s;
}
.nav-dropdown:hover > a::after,
.nav-dropdown:focus-within > a::after { transform: rotate(180deg); }
.nav-dropdown-menu {
display: none;
position: absolute; top: 100%; left: 50%;
transform: translateX(-50%);
background: rgba(255,255,255,0.98);
border: 1px solid var(--border);
border-radius: var(--radius-md);
padding: 8px 0;
min-width: 220px;
max-height: calc(100vh - 80px);
overflow-y: auto;
box-shadow: 0 16px 40px rgba(0,0,0,0.12);
z-index: 9999;
backdrop-filter: blur(12px);
}
.nav-dropdown-menu::before {
content: '';
position: absolute;
top: -12px; left: 0; right: 0;
height: 12px;
}
.nav-dropdown:hover .nav-dropdown-menu,
.nav-dropdown:focus-within .nav-dropdown-menu { display: block; }
.nav-dropdown-menu a {
display: flex; align-items: center; gap: 10px;
padding: 10px 18px;
font-size: 14px; color: #4A4A4A;
transition: color 0.15s, background 0.15s;
white-space: nowrap;
}
.nav-dropdown-menu a:hover { color: #1d1d1f; background: rgba(0,0,0,0.03); }
.nav-dropdown-menu .dd-label {
font-size: 10px; font-weight: 700; letter-spacing: 0.1em;
text-transform: uppercase; color: rgba(0,0,0,0.75);
padding: 8px 18px 4px; cursor: default;
}
.nav-dropdown-menu hr { border: none; border-top: 1px solid var(--border); margin: 6px 0; }
.btn {
display: inline-flex; align-items: center; gap: 6px;
padding: 10px 22px;
background: var(--blue);
color: #fff;
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: #1d1d1f;
}
.btn-outline:hover { background: rgba(0,0,0,0.04); transform: translateY(-1px); }
.btn-lg { padding: 14px 30px; font-size: 16px; border-radius: var(--radius-md); }
/* HERO */
.hero {
min-height: 100vh;
display: flex; flex-direction: column; align-items: center; justify-content: center;
text-align: center;
padding: 120px 24px 80px;
position: relative;
overflow: hidden;
background: #ffffff;
}
.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: #0052CC;
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(44px, 7vw, 80px);
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, 20px);
color: #515154;
max-width: 640px;
line-height: 1.65;
margin-bottom: 40px;
}
.hero-ctas {
display: flex; gap: 14px; flex-wrap: wrap; justify-content: center;
}
.cta-secondary {
display: inline-flex; align-items: center; gap: 6px;
padding: 14px 22px;
background: transparent;
border: 1.5px solid rgba(0,0,0,0.18);
color: #1d1d1f;
font-size: 15px;
font-weight: 600;
border-radius: var(--radius-md);
transition: background 0.2s, border-color 0.2s, transform 0.15s;
text-decoration: none;
}
.cta-secondary:hover { background: rgba(0,0,0,0.04); border-color: rgba(0,102,255,0.35); color: #0066FF; transform: translateY(-1px); }
/* SECTION COMMON */
section { padding: 96px 24px; }
.container { max-width: 1140px; margin: 0 auto; }
.section-label {
font-size: 12px; font-weight: 700; letter-spacing: 0.1em;
text-transform: uppercase; color: var(--blue);
margin-bottom: 16px;
}
.section-title {
font-size: clamp(28px, 4vw, 44px);
font-weight: 800;
letter-spacing: -1.2px;
line-height: 1.1;
color: #1d1d1f;
margin-bottom: 16px;
}
.section-sub {
font-size: 17px;
color: #515154;
max-width: 560px;
line-height: 1.7;
}
/* GRID CARDS */
.card-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 20px;
}
@media(max-width:768px){ .card-grid { grid-template-columns: 1fr 1fr; } }
@media(max-width:480px){ .card-grid { grid-template-columns: 1fr; } }
.card {
background: #fff;
border: 1px solid rgba(0,0,0,0.08);
border-radius: var(--radius-lg);
padding: 32px 28px;
display: flex;
flex-direction: column;
gap: 12px;
text-decoration: none;
color: inherit;
transition: transform 0.15s ease, box-shadow 0.15s ease, border-color 0.2s ease;
cursor: pointer;
}
.card:hover {
transform: translateY(-2px);
box-shadow: 0 8px 24px rgba(0,0,0,0.12);
border-color: rgba(0,102,255,0.3);
}
.card-icon {
width: 44px; height: 44px;
background: rgba(0,102,255,0.08);
border: 1px solid rgba(0,102,255,0.18);
border-radius: var(--radius-md);
display: flex; align-items: center; justify-content: center;
font-size: 20px;
margin-bottom: 8px;
}
.card h3 {
font-size: 16px;
font-weight: 700;
color: #1d1d1f;
margin: 0;
letter-spacing: -0.3px;
}
.card p {
font-size: 14px;
color: #515154;
line-height: 1.5;
margin: 0;
}
.card-link {
font-size: 13px;
font-weight: 700;
color: #0066FF;
margin-top: auto;
padding-top: 8px;
}
/* PROCESS STEPS */
.process-steps {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 24px;
position: relative;
max-width: 1000px;
margin: 0 auto;
}
.process-steps::before {
content: '';
position: absolute;
top: 28px; left: 12.5%; right: 12.5%;
height: 1px;
background: linear-gradient(90deg, transparent, var(--blue) 20%, var(--blue) 80%, transparent);
opacity: 0.3;
}
@media(max-width:900px){ .process-steps { grid-template-columns: 1fr 1fr; } .process-steps::before { display: none; } }
@media(max-width:640px){ .process-steps { grid-template-columns: 1fr; gap: 16px; } }
.step {
text-align: center;
padding: 32px 24px;
position: relative;
background: #ffffff;
border: 1px solid rgba(0,0,0,0.08);
border-radius: var(--radius-lg);
transition: transform .15s, border-color .15s;
}
.step:hover { transform: translateY(-3px); border-color: rgba(0,102,255,0.4); }
.step-num {
width: 48px; height: 48px;
border-radius: var(--radius-full);
background: rgba(0,102,255,0.08);
border: 2px solid #0066FF;
display: flex; align-items: center; justify-content: center;
font-size: 16px; font-weight: 800;
color: #0066FF;
margin: 0 auto 20px;
position: relative; z-index: 1;
}
.step h3 { font-size: 16px; font-weight: 700; color: #1d1d1f; margin-bottom: 8px; }
.step p { font-size: 14px; color: #515154; line-height: 1.6; }
/* PIPELINE */
.pipeline {
display: flex; align-items: center; justify-content: center;
gap: 0; margin: 32px 0 40px;
overflow-x: auto; padding: 0 8px;
}
.pipeline-step {
display: flex; flex-direction: column; align-items: center;
gap: 8px; min-width: 88px;
}
.pipeline-icon {
width: 52px; height: 52px;
border-radius: var(--radius-lg);
background: rgba(0,102,255,0.08);
border: 1px solid rgba(0,102,255,0.18);
display: flex; align-items: center; justify-content: center;
flex-shrink: 0;
}
.pipeline-label {
font-size: 11px; font-weight: 700;
color: #515154; text-align: center;
letter-spacing: 0.02em; line-height: 1.3;
}
.pipeline-connector {
width: 32px; height: 2px;
background: linear-gradient(90deg, rgba(0,102,255,0.3), rgba(0,102,255,0.1));
flex-shrink: 0; margin-top: -22px;
align-self: flex-start; margin-left: 0;
position: relative; top: -26px;
}
@media(max-width:600px){ .pipeline { justify-content: flex-start; } .pipeline-connector { width: 20px; } }
@media(max-width:480px){ .pipeline-step { min-width: 56px; } .pipeline-label { font-size: 9px; } .pipeline-icon { width: 38px; height: 38px; } .pipeline-connector { width: 10px; } }
/* INTEL CARDS */
.intel-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 20px;
margin-top: 40px;
}
@media(max-width:768px){ .intel-grid { grid-template-columns: 1fr; } }
.intel-card {
background: #ffffff;
border: 1px solid rgba(0,0,0,0.08);
border-radius: var(--radius-lg);
padding: 32px;
text-decoration: none;
color: inherit;
display: flex;
flex-direction: column;
gap: 24px;
transition: border-color 0.2s, transform 0.2s;
cursor: pointer;
}
.intel-card:hover {
border-color: rgba(0,102,255,0.35);
transform: translateY(-2px);
box-shadow: 0 8px 24px rgba(0,0,0,0.12);
}
.intel-header {
display: flex; align-items: flex-start; justify-content: space-between;
}
.intel-module {
font-size: 11px; font-weight: 700;
letter-spacing: 0.1em; text-transform: uppercase;
color: #0066FF; margin-bottom: 6px;
}
.intel-card h3 {
font-size: 17px; font-weight: 800;
color: #1d1d1f; margin: 0;
}
.intel-geo {
font-size: 12px; color: #515154; margin-top: 2px;
}
.intel-tag {
font-size: 10px; font-weight: 700;
letter-spacing: 0.06em; text-transform: uppercase;
padding: 3px 9px; border-radius: 100px; white-space: nowrap;
}
.intel-tag-live { background: rgba(0,200,83,0.12); color: #00C853; border: 1px solid rgba(0,200,83,0.2); }
.intel-tag-risk { background: rgba(255,59,48,0.1); color: #FF3B30; border: 1px solid rgba(255,59,48,0.2); }
.intel-tag-pred { background: rgba(0,102,255,0.12); color: #0066FF; border: 1px solid rgba(0,102,255,0.2); }
.intel-kpis {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 12px;
}
.intel-kpi {
background: rgba(0,0,0,0.03);
border-radius: var(--radius-md);
padding: 10px 12px;
}
.intel-kpi-val {
font-size: 19px; font-weight: 900;
color: #1d1d1f; letter-spacing: -0.03em; line-height: 1;
}
.intel-kpi-delta {
font-size: 11px; font-weight: 700; margin-top: 3px;
}
.intel-kpi-delta.up { color: #00C853; }
.intel-kpi-delta.down { color: #FF3B30; }
.intel-kpi-lbl {
font-size: 10px; color: #6e6e73;
margin-top: 2px; line-height: 1.3;
}
.intel-bars {
display: flex; flex-direction: column; gap: 7px;
}
.intel-bar-row {
display: flex; align-items: center; gap: 10px;
}
.intel-bar-name {
font-size: 12px; color: #515154;
min-width: 110px; white-space: nowrap;
overflow: hidden; text-overflow: ellipsis;
}
.intel-bar-track {
flex: 1; height: 5px;
background: rgba(0,0,0,0.06);
border-radius: var(--radius-sm);
overflow: hidden;
}
.intel-bar-fill {
height: 100%; border-radius: var(--radius-sm);
background: #0066FF;
}
.intel-bar-fill.risk { background: #FF3B30; }
.intel-bar-fill.opp { background: #00C853; }
.intel-bar-score {
font-size: 11px; font-weight: 700;
color: #515154; min-width: 28px; text-align: right;
}
.intel-footer {
display: flex; align-items: center;
justify-content: space-between;
padding-top: 16px;
border-top: 1px solid rgba(0,0,0,0.06);
margin-top: auto;
}
.intel-obs {
font-size: 11px; color: #6e6e73;
}
.intel-cta {
font-size: 12px; font-weight: 700;
color: #0066FF; display: flex;
align-items: center; gap: 4px;
}
/* MAP */
.map-frame {
border-radius: var(--radius-lg);
overflow: hidden;
border: 1px solid rgba(0,0,0,0.1);
box-shadow: 0 8px 32px rgba(0,0,0,0.10);
}
.map-iframe {
width: 100%;
height: min(68vh, 560px);
min-height: 320px;
border: none;
display: block;
}
.map-bar {
background: rgba(0,0,0,0.97);
padding: 14px 20px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
flex-wrap: wrap;
border-top: 1px solid rgba(255,255,255,0.07);
}
.map-bar-left {
display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0;
}
.map-dot {
width: 6px; height: 6px;
border-radius: var(--radius-full);
background: #22c55e; flex-shrink: 0;
}
.map-bar-text {
font-size: 13px; color: #4A4A4A;
white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
/* TAGS */
.tag-row {
display: flex; flex-wrap: wrap;
gap: 8px; justify-content: center;
margin-top: 20px;
}
.tag {
font-size: 12px; font-weight: 600;
background: rgba(0,0,0,0.05);
color: rgba(0,0,0,0.4);
border-radius: var(--radius-xl);
padding: 5px 13px;
border: 1px solid rgba(0,0,0,0.07);
}
/* SCORE TABLE */
.score-table-wrap { margin-top: 48px; overflow-x: auto; }
.score-table { width: 100%; border-collapse: collapse; font-size: 14px; }
.score-table th {
text-align: center; padding: 10px 8px;
font-weight: 700; color: rgba(0,0,0,0.75);
font-size: 11px; text-transform: uppercase;
letter-spacing: 0.06em;
}
.score-table th:first-child { text-align: left; padding-left: 0; }
.score-table td {
padding: 12px 8px;
border-bottom: 1px solid rgba(0,0,0,0.07);
text-align: center;
}
.score-table td:first-child {
text-align: left; font-weight: 700;
color: #1d1d1f; padding-left: 0;
font-size: 14px;
}
.score-table tr:last-child td { border-bottom: none; }
.score-pill {
font-weight: 800; padding: 4px 10px;
border-radius: 20px; font-size: 13px;
}
.score-green { background: #dcfce7; color: #166534; }
.score-yellow { background: #fef9c3; color: #854d0e; }
.score-red { background: #fee2e2; color: #991b1b; }
/* CONTRADICTION */
.contradiction-box {
background: #ffffff;
border: 1px solid rgba(0,0,0,0.08);
border-radius: var(--radius-lg);
padding: 36px 40px;
}
.contradiction-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 16px;
}
@media(max-width:640px){ .contradiction-grid { grid-template-columns: 1fr; } }
.contra-col {
border-radius: var(--radius-md);
padding: 16px;
}
.contra-col.green {
background: rgba(34,197,94,0.15);
border: 1px solid rgba(34,197,94,0.3);
}
.contra-col.red {
background: rgba(239,68,68,0.15);
border: 1px solid rgba(239,68,68,0.3);
}
.contra-col h4 {
font-size: 12px; font-weight: 700;
text-transform: uppercase; letter-spacing: 0.08em;
margin-bottom: 10px;
}
.contra-col.green h4 { color: #0d5c1d; }
.contra-col.red h4 { color: #7f1d1d; }
.contra-col ul {
list-style: none; padding: 0; margin: 0;
display: flex; flex-direction: column; gap: 6px;
}
.contra-col li {
color: #1d1d1f; font-size: 14px;
display: flex; align-items: center; gap: 6px;
}
/* BANNER */
.banner {
background: #0066FF;
border-radius: var(--radius-lg);
padding: 40px 48px;
display: flex;
align-items: center;
gap: 48px;
flex-wrap: wrap;
}
.banner-text { flex: 1; min-width: 260px; }
.banner-text h3 {
color: #ffffff;
font-size: 20px; font-weight: 800;
margin-bottom: 8px;
}
.banner-text p {
color: rgba(255,255,255,0.85);
line-height: 1.65; font-size: 15px;
}
.banner-btn {
background: #fff !important;
color: #0066FF !important;
white-space: nowrap;
flex-shrink: 0;
}
/* CONTACT */
.contact-wrapper {
max-width: 680px;
margin: 0 auto;
text-align: center;
}
.contact-form {
background: #ffffff;
border: 1px solid var(--border);
border-radius: var(--radius-lg);
padding: 40px;
text-align: left;
margin-top: 32px;
}
.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: #4A4A4A; }
.form-group input, .form-group textarea {
background: #f5f5f7;
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: #6E6E73; }
.form-group textarea { min-height: 120px; resize: vertical; }
.form-note { font-size: 12px; color: #6E6E73; 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 */
footer {
border-top: 1px solid var(--border);
padding: 40px 40px;
background: #ffffff;
}
.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: #6E6E73; }
.footer-links { display: flex; gap: 24px; align-items: center; flex-wrap: wrap; }
.footer-links a { font-size: 14px; color: #6E6E73; transition: color 0.2s; }
.footer-links a:hover { color: #1d1d1f; }
.footer-social {
width: 32px; height: 32px;
border: 1px solid var(--border);
border-radius: var(--radius-md);
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); }
.footer-tagline { font-size: 12px; color: #6E6E73; margin-top: 4px; }
.footer-ecosystem {
font-size: 12px; color: #6e6e73; margin-top: 12px; line-height: 1.5;
}
.footer-ecosystem a { color: #0066FF; text-decoration: none; }
.footer-ecosystem a:hover { text-decoration: underline; }
/* RESPONSIVE */
@media (max-width: 900px) {
nav { padding: 0 16px; }
.nav-links { display: none; }
.card-grid { grid-template-columns: 1fr 1fr; }
.process-steps { grid-template-columns: 1fr 1fr; }
.process-steps::before { display: none; }
}
@media (max-width: 640px) {
.hero h1 { font-size: clamp(28px, 8vw, 48px); }
.hero-sub { font-size: 16px; }
.hero-ctas { flex-direction: column; gap: 12px; }
.hero-ctas a { width: 100%; text-align: center; }
.section-title { font-size: clamp(22px, 6vw, 36px); }
.card-grid { grid-template-columns: 1fr; }
.process-steps { grid-template-columns: 1fr; }
.form-row { grid-template-columns: 1fr; }
.contact-form { padding: 24px 20px; }
.footer-inner { flex-direction: column; text-align: center; }
.banner { padding: 24px; }
.contradiction-box { padding: 24px; }
}
@media (max-width: 480px) {
section { padding: 56px 16px; }
.hero { padding: 80px 16px 60px; }
.container { padding: 0 !important; }
}
/* Utility */
.text-center { text-align: center; }
.mx-auto { margin-left: auto; margin-right: auto; }
.mb-4 { margin-bottom: 16px; }
.mb-6 { margin-bottom: 24px; }
.mb-8 { margin-bottom: 32px; }
.mb-14 { margin-bottom: 56px; }
.mt-8 { margin-top: 32px; }
.max-w-lg { max-width: 560px; }
.max-w-xl { max-width: 640px; }
.max-w-2xl { max-width: 900px; }
.bg-white { background: #ffffff; }
.bg-surface { background: #f5f5f7; }
.warning-box {
background: rgba(255,193,7,0.08);
border: 1px solid rgba(255,193,7,0.3);
border-radius: var(--radius-md);
padding: 14px 18px;
margin-bottom: 16px;
font-size: 13px;
color: rgba(0,0,0,0.85);
line-height: 1.6;
}
.disclaimer {
text-align: center;
color: var(--text-muted);
font-size: 14px;
margin: 32px 0 24px;
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
}
</style>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": ["Organization","Corporation"],
"@id": "https://landvex.com/#organization",
"name": "Landvex",
"alternateName": ["Landvex AB","Landvex Inc"],
"url": "https://landvex.com",
"logo": {"@type":"ImageObject","url":"https://landvex.com/apple-touch-icon.png","width":180,"height":180},
"foundingDate": "2024",
"foundingLocation": {"@type":"Place","addressLocality":"Stockholm","addressRegion":"Stockholm","addressCountry":"SE"},
"legalName": "Landvex Inc",
"address": {"@type":"PostalAddress","addressLocality":"Houston","addressRegion":"TX","addressCountry":"US"},
"location": [
{"@type":"Place","name":"Houston, Texas, USA (US HQ)","address":{"@type":"PostalAddress","addressLocality":"Houston","addressRegion":"TX","addressCountry":"US"}},
{"@type":"Place","name":"Stockholm, Sweden (EU HQ)","address":{"@type":"PostalAddress","addressLocality":"Stockholm","addressRegion":"Stockholm","addressCountry":"SE"}}
],
"taxID": "pending-EIN",
"description": "Landvex is a decision intelligence company that identifies contradictions between official narratives and observed physical reality.",
"sameAs": ["https://landvex.com","https://www.linkedin.com/company/landvex","https://x.com/landvex"],
"contactPoint": {"@type":"ContactPoint","email":"contact@landvex.com","contactType":"sales"},
"slogan": "Where reported reality conflicts with observed reality."
}
</script>
</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 class="nav-dropdown">
<a href="/methodology/">Intelligence</a>
<div class="nav-dropdown-menu">
<div class="dd-label">Learn</div>
<a href="/methodology/">Methodology</a>
<a href="#intelligence">Intelligence scores</a>
<hr/>
<div class="dd-label">Verticals</div>
<a href="/verticals/property/">Property &amp; Real Estate</a>
<a href="/verticals/municipalities/">Municipalities</a>
<a href="/verticals/infrastructure/">Infrastructure</a>
<a href="/verticals/retail/">Retail &amp; F&amp;B</a>
<a href="/verticals/insurance/">Insurance</a>
<hr/>
<div class="dd-label">Products</div>
<a href="/enterprise/">Enterprise</a>
<a href="/reports/">Intelligence Reports</a>
<a href="/pilot/">Pilot Programme</a>
</div>
</li>
<li><a href="#cities">Cities</a></li>
<li><a href="/insights/">Insights</a></li>
<li><a href="/enterprise/">Enterprise</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
<a class="btn btn-outline" href="#contact">Get in touch →</a>
</nav>
<!-- ===== 1. HERO ===== -->
<section class="hero">
<div class="hero-eyebrow">Reality Intelligence Operating System</div>
<h1>Helping organizations see what others miss.</h1>
<p class="hero-sub">Landvex combines field observations from the quiXzoom network with AI analysis to identify risks, contradictions, and opportunities in the physical world. We don't claim to know everything — but we can help you spot what matters.</p>
<div class="hero-ctas">
<a class="btn btn-lg" href="/verticals/insurance/">Insurance intelligence →</a>
<a class="btn btn-outline btn-lg" href="/enterprise/">Request a pilot →</a>
<a href="/methodology/" class="cta-secondary">See how it works →</a>
</div>
</section>
<!-- ===== 2. HOW IT WORKS (merged: methodology + process + what we deliver) ===== -->
<section class="bg-white" id="how-it-works">
<div class="container">
<div class="text-center mb-14">
<div class="section-label">How it works</div>
<h2 class="section-title">From your question to your decision.</h2>
<p class="section-sub mx-auto">Most intelligence platforms sell you a dataset. Landvex works backwards — from the decision you need to make to the intelligence required to make it confidently.</p>
</div>
<!-- Pipeline -->
<div class="pipeline" aria-label="Landvex intelligence pipeline">
<div class="pipeline-step">
<div class="pipeline-icon"><svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#0066FF" stroke-width="1.8"><rect x="2" y="3" width="20" height="14" rx="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></svg></div>
<span class="pipeline-label">Mission<br>Brief</span>
</div>
<div class="pipeline-connector"></div>
<div class="pipeline-step">
<div class="pipeline-icon"><svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#0066FF" stroke-width="1.8"><path d="M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z"/><circle cx="12" cy="13" r="4"/></svg></div>
<span class="pipeline-label">Field<br>Collection</span>
</div>
<div class="pipeline-connector"></div>
<div class="pipeline-step">
<div class="pipeline-icon"><svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#0066FF" stroke-width="1.8"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"/></svg></div>
<span class="pipeline-label">AI<br>Analysis</span>
</div>
<div class="pipeline-connector"></div>
<div class="pipeline-step">
<div class="pipeline-icon"><svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#0066FF" stroke-width="1.8"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg></div>
<span class="pipeline-label">Scoring<br>0-100</span>
</div>
<div class="pipeline-connector"></div>
<div class="pipeline-step">
<div class="pipeline-icon"><svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#0066FF" stroke-width="1.8"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/></svg></div>
<span class="pipeline-label">Intelligence<br>Report</span>
</div>
<div class="pipeline-connector"></div>
<div class="pipeline-step">
<div class="pipeline-icon" style="background:rgba(0,200,83,.08);border-color:rgba(0,200,83,.2)"><svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#00C853" stroke-width="1.8"><polyline points="9 11 12 14 22 4"/><path d="M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"/></svg></div>
<span class="pipeline-label" style="color:rgba(0,200,83,.7)">Decision<br>Made</span>
</div>
</div>
<!-- 4 Steps -->
<div class="process-steps">
<div class="step">
<div class="step-num">1</div>
<h3>Define the decision</h3>
<p>You tell us what you need to decide — invest, insure, maintain, or move. The question drives everything.</p>
</div>
<div class="step">
<div class="step-num">2</div>
<h3>Collect the evidence</h3>
<p>Verified field contributors gather observations at the exact locations your decision depends on. Every frame preserved with GPS, IMU, compass, timestamp.</p>
</div>
<div class="step">
<div class="step-num">3</div>
<h3>AI + Human Intelligence</h3>
<p>AI orchestration analyses every observation. RALE asks targeted micro-questions only when valuable. Human attention maximises future AI performance.</p>
</div>
<div class="step">
<div class="step-num">4</div>
<h3>Deliver the answer</h3>
<p>You receive structured intelligence — scores, rankings, flags, and a continuously improving Knowledge Graph of your assets.</p>
</div>
</div>
<!-- Key metrics -->
<div class="card-grid mt-8">
<div class="card">
<div class="card-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#0066ff" stroke-width="2"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg></div>
<div style="font-size:32px;font-weight:800;color:#0066FF;letter-spacing:-1px;margin-bottom:4px">20+</div>
<h3>Countries</h3>
<p>Launching across 20+ countries. No local staffing or coordination infrastructure required.</p>
</div>
<div class="card">
<div class="card-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#0066ff" stroke-width="2"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg></div>
<div style="font-size:32px;font-weight:800;color:#0066FF;letter-spacing:-1px;margin-bottom:4px">2472h</div>
<h3>Speed</h3>
<p>From mission creation to structured data delivery. No lengthy procurement cycles.</p>
</div>
<div class="card">
<div class="card-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#0066ff" stroke-width="2"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"/></svg></div>
<div style="font-size:32px;font-weight:800;color:#0066FF;letter-spacing:-1px;margin-bottom:4px">AI</div>
<h3>Quality</h3>
<p>Every submission reviewed for geo-compliance, technical quality and specification adherence.</p>
</div>
</div>
</div>
</section>
<!-- ===== 3. INTELLIGENCE MAP ===== -->
<section class="bg-surface">
<div class="container" style="max-width:1100px">
<div class="text-center mb-8">
<div style="display:inline-flex;align-items:center;gap:8px;background:rgba(0,102,255,.08);border:1px solid rgba(0,102,255,.18);border-radius:100px;padding:5px 14px;font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#0052CC;margin-bottom:16px">
<span style="width:7px;height:7px;border-radius:50%;background:#0052CC;display:inline-block"></span>
Live demonstration
</div>
<h2 class="section-title">Intelligence Map — 100+ Cities</h2>
<p class="section-sub mx-auto">Click any city. Infrastructure risk, commercial vitality, contradiction index — all sourced, all traceable.</p>
</div>
<div class="map-frame">
<iframe src="/intelligence-map.html" class="map-iframe" title="Landvex Intelligence Map" loading="lazy" allow="geolocation"></iframe>
<div class="map-bar">
<div class="map-bar-left">
<div class="map-dot"></div>
<span class="map-bar-text">Source First</span>
</div>
<a href="/intelligence-map" class="btn" style="font-size:13px;padding:9px 18px">Open full map →</a>
</div>
</div>
<div class="tag-row">
<span class="tag">100+ cities</span>
<span class="tag">Contradiction Index</span>
<span class="tag">Infrastructure Risk</span>
<span class="tag">Commercial Vitality</span>
<span class="tag">City Health</span>
</div>
</div>
</section>
<!-- ===== 4. DEMO CARDS (Change / Opportunity / Risk / Predictive) ===== -->
<section class="bg-white">
<div class="container">
<div class="text-center mb-14">
<div class="section-label">Decision intelligence</div>
<h2 class="section-title">Ten decisions. One platform.</h2>
<p class="section-sub mx-auto">Property owners, municipalities, retailers, infrastructure operators, investors. Different industries — identical need: to make better decisions about the physical world.</p>
</div>
<p class="disclaimer">
<svg width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M10 3L17 17H3L10 3Z" stroke="#f59e0b" stroke-width="2"/><path d="M10 8V12M10 14V14.5" stroke="#f59e0b" stroke-width="2" stroke-linecap="round"/></svg>
All intelligence examples below are illustrative sample data for demonstration purposes.
</p>
<div class="intel-grid">
<!-- Change Intelligence -->
<a class="intel-card" href="#contact">
<div class="intel-header">
<div>
<div class="intel-module">Change Intelligence</div>
<h3>What is changing?</h3>
<div class="intel-geo">Houston Metro · Last 12 months</div>
</div>
<span class="intel-tag intel-tag-live">Live</span>
</div>
<div class="intel-kpis">
<div class="intel-kpi"><div class="intel-kpi-val">92%</div><div class="intel-kpi-delta up">↑ 4.1%</div><div class="intel-kpi-lbl">Commercial occupancy</div></div>
<div class="intel-kpi"><div class="intel-kpi-val">+1,742</div><div class="intel-kpi-delta up">↑ 12%</div><div class="intel-kpi-lbl">Business openings</div></div>
<div class="intel-kpi"><div class="intel-kpi-val">+7.8%</div><div class="intel-kpi-delta up"></div><div class="intel-kpi-lbl">Traffic volume</div></div>
</div>
<div style="font-size:11px;font-weight:700;color:#515154;text-transform:uppercase;letter-spacing:.07em;margin-bottom:8px">Top Growing Districts</div>
<div class="intel-bars">
<div class="intel-bar-row"><span class="intel-bar-name">Energy Corridor</span><div class="intel-bar-track"><div class="intel-bar-fill" style="width:88%"></div></div><span class="intel-bar-score">88</span></div>
<div class="intel-bar-row"><span class="intel-bar-name">Katy</span><div class="intel-bar-track"><div class="intel-bar-fill" style="width:81%"></div></div><span class="intel-bar-score">81</span></div>
<div class="intel-bar-row"><span class="intel-bar-name">Cypress</span><div class="intel-bar-track"><div class="intel-bar-fill" style="width:74%"></div></div><span class="intel-bar-score">74</span></div>
</div>
<div class="intel-footer">
<span class="intel-obs">Based on 6,840 field observations</span>
<span class="intel-cta">Full analysis →</span>
</div>
</a>
<!-- Opportunity Intelligence -->
<a class="intel-card" href="#contact">
<div class="intel-header">
<div>
<div class="intel-module">Opportunity Intelligence</div>
<h3>Where is the opportunity?</h3>
<div class="intel-geo">Houston Metro · Ranked by score</div>
</div>
<span class="intel-tag intel-tag-live">High signal</span>
</div>
<div class="intel-kpis">
<div class="intel-kpi"><div class="intel-kpi-val">92</div><div class="intel-kpi-delta up">Top score</div><div class="intel-kpi-lbl">Katy TX</div></div>
<div class="intel-kpi"><div class="intel-kpi-val">2.1%</div><div class="intel-kpi-delta up">Low vacancy</div><div class="intel-kpi-lbl">Retail vacancy</div></div>
<div class="intel-kpi"><div class="intel-kpi-val">+11%</div><div class="intel-kpi-delta up"></div><div class="intel-kpi-lbl">Population growth</div></div>
</div>
<div style="font-size:11px;font-weight:700;color:#515154;text-transform:uppercase;letter-spacing:.07em;margin-bottom:8px">Highest Opportunity Score</div>
<div class="intel-bars">
<div class="intel-bar-row"><span class="intel-bar-name">Katy TX</span><div class="intel-bar-track"><div class="intel-bar-fill opp" style="width:92%"></div></div><span class="intel-bar-score">92</span></div>
<div class="intel-bar-row"><span class="intel-bar-name">Spring</span><div class="intel-bar-track"><div class="intel-bar-fill opp" style="width:85%"></div></div><span class="intel-bar-score">85</span></div>
<div class="intel-bar-row"><span class="intel-bar-name">The Woodlands</span><div class="intel-bar-track"><div class="intel-bar-fill opp" style="width:79%"></div></div><span class="intel-bar-score">79</span></div>
</div>
<div class="intel-footer">
<span class="intel-obs">Income growth +8% · Competition density: low</span>
<span class="intel-cta">Full analysis →</span>
</div>
</a>
<!-- Risk Intelligence -->
<a class="intel-card" href="#contact">
<div class="intel-header">
<div>
<div class="intel-module">Risk Intelligence</div>
<h3>Where is the risk?</h3>
<div class="intel-geo">Houston Metro · Risk-scored districts</div>
</div>
<span class="intel-tag intel-tag-risk">3 alerts</span>
</div>
<div class="intel-kpis">
<div class="intel-kpi"><div class="intel-kpi-val">83</div><div class="intel-kpi-delta down">High risk</div><div class="intel-kpi-lbl">SW Houston score</div></div>
<div class="intel-kpi"><div class="intel-kpi-val">+17%</div><div class="intel-kpi-delta down">↓ trend</div><div class="intel-kpi-lbl">Vacancy rate</div></div>
<div class="intel-kpi"><div class="intel-kpi-val">+21%</div><div class="intel-kpi-delta down"></div><div class="intel-kpi-lbl">Store closures</div></div>
</div>
<div style="font-size:11px;font-weight:700;color:#515154;text-transform:uppercase;letter-spacing:.07em;margin-bottom:8px">Highest Risk Areas</div>
<div class="intel-bars">
<div class="intel-bar-row"><span class="intel-bar-name">SW Houston</span><div class="intel-bar-track"><div class="intel-bar-fill risk" style="width:83%"></div></div><span class="intel-bar-score">83</span></div>
<div class="intel-bar-row"><span class="intel-bar-name">Greenspoint</span><div class="intel-bar-track"><div class="intel-bar-fill risk" style="width:76%"></div></div><span class="intel-bar-score">76</span></div>
<div class="intel-bar-row"><span class="intel-bar-name">Gulfgate</span><div class="intel-bar-track"><div class="intel-bar-fill risk" style="width:68%"></div></div><span class="intel-bar-score">68</span></div>
</div>
<div class="intel-footer">
<span class="intel-obs">Property condition: declining · 4,120 observations</span>
<span class="intel-cta">Full risk report →</span>
</div>
</a>
<!-- Predictive Intelligence -->
<a class="intel-card" href="#contact">
<div class="intel-header">
<div>
<div class="intel-module">Predictive Intelligence</div>
<h3>What will happen next?</h3>
<div class="intel-geo">Houston Metro · Next 24 months</div>
</div>
<span class="intel-tag intel-tag-pred">Forecast</span>
</div>
<div style="background:linear-gradient(135deg,#0d1f3c 0%,#0a1628 50%,#0d2235 100%);border-radius:var(--radius-md);height:80px;position:relative;overflow:hidden;margin-bottom:0">
<div style="position:absolute;width:8px;height:8px;border-radius:50%;background:#00C853;box-shadow:0 0 0 3px rgba(0,200,83,.2);top:22%;left:28%"></div>
<div style="position:absolute;width:8px;height:8px;border-radius:50%;background:#00C853;box-shadow:0 0 0 3px rgba(0,200,83,.2);top:38%;left:52%"></div>
<div style="position:absolute;width:8px;height:8px;border-radius:50%;background:#00C853;box-shadow:0 0 0 3px rgba(0,200,83,.2);top:55%;left:38%"></div>
<div style="position:absolute;width:8px;height:8px;border-radius:50%;background:#FF3B30;box-shadow:0 0 0 3px rgba(255,59,48,.2);top:65%;left:22%"></div>
<div style="position:absolute;width:8px;height:8px;border-radius:50%;background:#0066FF;box-shadow:0 0 0 3px rgba(0,102,255,.2);top:30%;left:70%"></div>
<div style="position:absolute;width:8px;height:8px;border-radius:50%;background:#0066FF;box-shadow:0 0 0 3px rgba(0,102,255,.2);top:48%;left:78%"></div>
<div style="position:absolute;bottom:8px;right:10px;font-size:10px;color:#515154;font-weight:600">Predicted growth hotspots</div>
</div>
<div class="intel-kpis">
<div class="intel-kpi"><div class="intel-kpi-val">87%</div><div class="intel-kpi-delta up">Confidence</div><div class="intel-kpi-lbl">Model accuracy</div></div>
<div class="intel-kpi"><div class="intel-kpi-val">4,281</div><div class="intel-kpi-delta up">Observations</div><div class="intel-kpi-lbl">Training base</div></div>
<div class="intel-kpi"><div class="intel-kpi-val">3</div><div class="intel-kpi-delta up">Hotspots</div><div class="intel-kpi-lbl">Identified</div></div>
</div>
<div class="intel-footer">
<span class="intel-obs">Indicative signals — not investment advice</span>
<span class="intel-cta">View forecast →</span>
</div>
</a>
</div>
</div>
</section>
<!-- ===== 5. VERTICALS ===== -->
<section class="bg-surface" id="verticals">
<div class="container">
<div class="text-center mb-14">
<div class="section-label">Verticals</div>
<h2 class="section-title">Who we help make better decisions.</h2>
<p class="section-sub mx-auto">If your decisions depend on the physical world, we can make them sharper.</p>
</div>
<div class="card-grid">
<a class="card" href="/verticals/municipalities/">
<div class="card-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#0066ff" stroke-width="1.5"><line x1="3" y1="22" x2="21" y2="22"/><line x1="6" y1="18" x2="6" y2="11"/><line x1="10" y1="18" x2="10" y2="11"/><line x1="14" y1="18" x2="14" y2="11"/><line x1="18" y1="18" x2="18" y2="11"/><polygon points="12 2 20 7 4 7"/></svg></div>
<h3>Municipalities &amp; Government</h3>
<p style="font-size:13px;font-weight:700;color:#0066FF;margin-bottom:4px">Which areas will require the most investment over the next five years?</p>
<p>Urban asset management, planning compliance, public space documentation.</p>
<span class="card-link">Deep dive →</span>
</a>
<a class="card" href="/verticals/infrastructure/">
<div class="card-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#0066ff" stroke-width="1.5"><path d="M4 12 Q12 4 20 12"/><line x1="4" y1="12" x2="4" y2="18"/><line x1="20" y1="12" x2="20" y2="18"/><line x1="4" y1="18" x2="20" y2="18"/><line x1="10" y1="12" x2="10" y2="18"/><line x1="16" y1="12" x2="16" y2="18"/></svg></div>
<h3>Infrastructure Operators</h3>
<p style="font-size:13px;font-weight:700;color:#0066FF;margin-bottom:4px">Where will problems emerge before they become expensive?</p>
<p>Bridge inspections, road condition surveys, utility corridor mapping.</p>
<span class="card-link">Deep dive →</span>
</a>
<a class="card" href="/verticals/property/">
<div class="card-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#0066ff" stroke-width="1.5"><rect x="3" y="3" width="18" height="18" rx="2"/><path d="M3 9h18"/><path d="M9 21V9"/></svg></div>
<h3>Property &amp; Real Estate</h3>
<p style="font-size:13px;font-weight:700;color:#0066FF;margin-bottom:4px">Is this area showing growth signals worth investigating?</p>
<p>Portfolio documentation, condition assessments, site verification at scale.</p>
<span class="card-link">Deep dive →</span>
</a>
<a class="card" href="/verticals/insurance/">
<div class="card-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#0066ff" stroke-width="1.5"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg></div>
<h3>Insurance</h3>
<p style="font-size:13px;font-weight:700;color:#0066FF;margin-bottom:4px">Which areas carry elevated risk?</p>
<p>Claims validation, pre-loss surveys, risk assessment for physical assets.</p>
<span class="card-link">Deep dive →</span>
</a>
<a class="card" href="/verticals/utilities/">
<div class="card-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#0066ff" stroke-width="1.5"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"/></svg></div>
<h3>Utilities &amp; Energy</h3>
<p style="font-size:13px;font-weight:700;color:#0066FF;margin-bottom:4px">Where is grid capacity becoming a constraint?</p>
<p>Grid infrastructure surveys, solar/wind asset documentation, network inspections.</p>
<span class="card-link">Deep dive →</span>
</a>
<a class="card" href="/verticals/retail/">
<div class="card-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#0066ff" stroke-width="1.5"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><polyline points="9 22 9 12 15 12 15 22"/></svg></div>
<h3>Retail &amp; Franchise</h3>
<p style="font-size:13px;font-weight:700;color:#0066FF;margin-bottom:4px">Where should the next location open?</p>
<p>Store compliance audits, signage verification, location intelligence at scale.</p>
<span class="card-link">Deep dive →</span>
</a>
</div>
</div>
</section>
<!-- ===== 6. CONTRADICTION ENGINE (was "Advanced Intelligence") ===== -->
<section class="bg-white">
<div class="container">
<div class="text-center mb-14">
<div class="section-label">Advanced intelligence</div>
<h2 class="section-title">Most systems confirm what you already believe.<br>Landvex tells you when you're wrong.</h2>
<p class="section-sub mx-auto">The most valuable intelligence is not confirmation — it's contradiction. Landvex actively searches for conflicts between official narratives and observed reality, so you can correct course before it costs you.</p>
</div>
<div class="contradiction-box" style="max-width:900px;margin:0 auto">
<div style="display:flex;align-items:flex-start;gap:16px;margin-bottom:24px">
<span style="display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;background:rgba(220,38,38,.08);border-radius:8px">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#f87171" stroke-width="2"><path d="M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z"/><line x1="4" y1="22" x2="4" y2="15"/></svg>
</span>
<div>
<div style="background:#cc2222;color:#fff;font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.1em;padding:3px 8px;border-radius:4px;display:inline-block;margin-bottom:8px">Representative data — based on real observed patterns</div>
<div style="color:#cc2222;font-weight:800;font-size:15px;margin-bottom:4px">Narrative Conflict Detected — City B (sample)</div>
<div style="color:#515154;font-size:14px;line-height:1.6">Official growth indicators are positive. Observed commercial activity is declining. 7 contradicting signals vs 3 supporting signals.</div>
</div>
</div>
<div class="contradiction-grid">
<div class="contra-col green">
<h4>Official narrative</h4>
<ul>
<li><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M3 8L6.5 11.5L13 4.5" stroke="#22c55e" stroke-width="2" stroke-linecap="round"/></svg> GDP growth +3.2%</li>
<li><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M3 8L6.5 11.5L13 4.5" stroke="#22c55e" stroke-width="2" stroke-linecap="round"/></svg> Construction permits up</li>
<li><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M3 8L6.5 11.5L13 4.5" stroke="#22c55e" stroke-width="2" stroke-linecap="round"/></svg> Property prices rising</li>
</ul>
</div>
<div class="contra-col red">
<h4>Observed reality</h4>
<ul>
<li><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M4 4L12 12M12 4L4 12" stroke="#ef4444" stroke-width="2" stroke-linecap="round"/></svg> Vacancies +18% this quarter</li>
<li><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M4 4L12 12M12 4L4 12" stroke="#ef4444" stroke-width="2" stroke-linecap="round"/></svg> Foot traffic down 12%</li>
<li><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M4 4L12 12M12 4L4 12" stroke="#ef4444" stroke-width="2" stroke-linecap="round"/></svg> 23 closures, 8 openings</li>
<li><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M4 4L12 12M12 4L4 12" stroke="#ef4444" stroke-width="2" stroke-linecap="round"/></svg> Maintenance deferred on 4 blocks</li>
</ul>
</div>
</div>
<div style="margin-top:20px;padding-top:20px;border-top:1px solid rgba(0,0,0,.1);display:flex;justify-content:space-between;align-items:center">
<span style="color:#515154;font-size:13px">Confidence in official narrative <em style="font-size:12px;opacity:.85;font-weight:600">sample</em></span>
<span style="color:#cc2222;font-weight:800;font-size:18px">34% <span style="font-size:12px;font-weight:600;opacity:.85">representative</span></span>
</div>
</div>
<!-- 3 pillars -->
<div class="card-grid mt-8">
<div class="card" style="cursor:default">
<div style="font-size:11px;font-weight:800;color:#0066FF;text-transform:uppercase;letter-spacing:.12em;margin-bottom:8px">Intelligence</div>
<h3>Show me what I'm missing</h3>
<p>Blind spots not visible in official data or internal reports.</p>
</div>
<div class="card" style="cursor:default">
<div style="font-size:11px;font-weight:800;color:#0066FF;text-transform:uppercase;letter-spacing:.12em;margin-bottom:8px">Validation</div>
<h3>AI Red Team</h3>
<p>Every conclusion is actively challenged by a second model before delivery.</p>
</div>
<div class="card" style="cursor:default">
<div style="font-size:11px;font-weight:800;color:#0066FF;text-transform:uppercase;letter-spacing:.12em;margin-bottom:8px">Contradiction</div>
<h3>Which assumptions are wrong?</h3>
<p>Identify where your thesis conflicts with observed reality.</p>
</div>
</div>
</div>
</section>
<!-- ===== 7. CITIES ===== -->
<section class="bg-surface" id="cities">
<div class="container">
<div class="text-center mb-14">
<div class="section-label">City intelligence</div>
<h2 class="section-title">Intelligence for major cities.</h2>
<p class="section-sub mx-auto">Explore Landvex intelligence profiles for key cities — scores, trends, and observed conditions.</p>
</div>
<!-- Active cities -->
<div style="margin-bottom:12px">
<div style="font-size:11px;font-weight:700;color:#0066FF;text-transform:uppercase;letter-spacing:.1em;margin-bottom:16px">Live now</div>
<div class="card-grid">
<a class="card" href="/cities/stockholm/">
<div class="card-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#0066ff" stroke-width="1.5"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg></div>
<h3>Stockholm</h3>
<p>City Health Index, Commercial Vitality, and Infrastructure Stability scores.</p>
<span class="card-link">Explore Stockholm →</span>
</a>
<a class="card" href="/cities/berlin/">
<div class="card-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#0066ff" stroke-width="1.5"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg></div>
<h3>Berlin</h3>
<p>Urban growth tracking, commercial opportunity mapping, infrastructure risk profiling.</p>
<span class="card-link">Explore Berlin →</span>
</a>
<a class="card" href="/cities/milan/">
<div class="card-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#0066ff" stroke-width="1.5"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg></div>
<h3>Milan</h3>
<p>Investment attractiveness, commercial opportunity, and urban growth intelligence.</p>
<span class="card-link">Explore Milan →</span>
</a>
</div>
</div>
<!-- Coming soon -->
<div style="margin-top:32px">
<div style="font-size:11px;font-weight:700;color:#f59e0b;text-transform:uppercase;letter-spacing:.1em;margin-bottom:16px">Launching August 2026</div>
<div class="tag-row" style="justify-content:flex-start">
<span class="tag">Paris</span>
<span class="tag">London</span>
<span class="tag">Bangkok</span>
<span class="tag">Copenhagen</span>
<span class="tag">Oslo</span>
<span class="tag">Helsinki</span>
<span class="tag">Vienna</span>
<span class="tag">Zurich</span>
<span class="tag">Madrid</span>
<span class="tag">Brussels</span>
<span class="tag">Rotterdam</span>
</div>
</div>
</div>
</section>
<!-- ===== 8. CONTACT ===== -->
<section class="bg-white" id="contact">
<div class="container">
<div class="contact-wrapper">
<div class="section-label">Get in touch</div>
<h2 class="section-title">What decision are you trying to make?</h2>
<p class="section-sub mx-auto">Tell us the question you need answered. We'll show you how Landvex can support it.</p>
<p style="font-size:13px;color:#aaa;margin-top:8px">Enterprise pricing available. Pilot programs for qualifying organizations. Typical engagement: 3-month pilot → annual intelligence subscription.</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="org">Organisation</label>
<input type="text" id="org" name="organisation" placeholder="Your organisation" required>
</div>
</div>
<div class="form-group">
<label for="email">Email</label>
<input type="email" id="email" name="email" placeholder="you@organisation.com" required>
</div>
<div class="form-group">
<label for="message">Message</label>
<textarea id="message" name="message" placeholder="Describe the decision you need to make — what you need to know, where, and why it matters..."></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>
</section>
<!-- FOOTER -->
<footer>
<div class="footer-inner">
<div>
<div class="footer-logo">Landvex</div>
<div class="footer-copy">© 2025 Landvex Inc / Landvex AB</div>
<div class="footer-ecosystem">Field data powered by <a href="https://www.quixzoom.com">quiXzoom</a></div>
<div style="font-size:11px;color:#aaa;margin-top:4px;line-height:1.6">Landvex Inc · Houston, Texas (US HQ) · Landvex AB · Org.nr 559141-7042 · Stockholm, Sweden (EU HQ) · <a href="mailto:contact@landvex.com" style="color:inherit">contact@landvex.com</a></div>
<div class="footer-tagline">Control intelligence for the physical world.</div>
</div>
<div class="footer-links">
<a href="/privacy/">Privacy</a>
<a href="/terms/">Terms</a>
<a href="/compliance/">Compliance</a>
<a href="/methodology/">Methodology</a>
<a href="/security/">Security</a>
<a href="/about/">About</a>
<a href="mailto:contact@landvex.com">contact@landvex.com</a>
<a href="https://www.linkedin.com/company/landvex" target="_blank" rel="noopener" class="footer-social" title="Landvex on LinkedIn">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none"><path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z" stroke="#888" stroke-width="2"/><rect x="2" y="9" width="4" height="12" stroke="#888" stroke-width="2"/><circle cx="4" cy="4" r="2" stroke="#888" stroke-width="2"/></svg>
</a>
<a href="https://x.com/landvex" target="_blank" rel="noopener" class="footer-social" title="Landvex on X">
<svg width="15" height="15" viewBox="0 0 24 24" fill="#888"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-4.714-6.231-5.401 6.231H2.746l7.73-8.835L1.254 2.25H8.08l4.253 5.622 5.912-5.622Zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></svg>
</a>
</div>
</div>
</footer>
<script>
// Contact form
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',
name: this.name.value,
organisation: this.organisation.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 directly at contact@landvex.com.';
msgEl.style.display = 'block';
}
btn.disabled = false;
btn.textContent = 'Request briefing →';
});
// Smooth scroll
document.querySelectorAll('a[href^="#"]').forEach(a => {
a.addEventListener('click', e => {
const target = document.querySelector(a.getAttribute('href'));
if (target) {
e.preventDefault();
target.scrollIntoView({ behavior: 'smooth', block: 'start' });
}
});
});
</script>
</body>
</html>