2026-07-14 09:58:53 +00:00
<!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 : 8 px ;
--radius-md : 14 px ;
--radius-lg : 24 px ;
--radius-xl : 100 px ;
--radius-full : 9999 px ;
}
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 40 px ;
height : 64 px ;
background : rgba ( 255 , 255 , 255 , 0.95 ) ;
backdrop-filter : blur ( 16 px ) ;
-webkit- backdrop-filter : blur ( 16 px ) ;
border-bottom : 1 px solid rgba ( 0 , 0 , 0 , 0.08 ) ;
}
. nav-logo {
font-size : 18 px ;
font-weight : 700 ;
letter-spacing : -0.3 px ;
color : #1d1d1f ;
}
. nav-links {
display : flex ; gap : 32 px ; list-style : none ;
}
. nav-links a {
font-size : 14 px ;
color : #4A4A4A ;
transition : color 0.2 s ;
}
. nav-links a : hover { color : #1d1d1f ; }
/* Dropdown */
. nav-dropdown { position : relative ; }
. nav-dropdown > a {
display : flex ; align-items : center ; gap : 4 px ; cursor : pointer ;
}
. nav-dropdown > a :: after {
content : '' ;
display : inline-block ;
width : 0 ; height : 0 ;
border-left : 4 px solid transparent ;
border-right : 4 px solid transparent ;
border-top : 4 px solid currentColor ;
opacity : 0.55 ;
margin-top : 1 px ;
transition : transform 0.2 s ;
}
. nav-dropdown : hover > a :: after ,
. nav-dropdown : focus-within > a :: after { transform : rotate ( 180 deg ) ; }
. nav-dropdown-menu {
display : none ;
position : absolute ; top : 100 % ; left : 50 % ;
transform : translateX ( -50 % ) ;
background : rgba ( 255 , 255 , 255 , 0.98 ) ;
border : 1 px solid var ( - - border ) ;
border-radius : var ( - - radius - md ) ;
padding : 8 px 0 ;
min-width : 220 px ;
max-height : calc ( 100 vh - 80 px ) ;
overflow-y : auto ;
box-shadow : 0 16 px 40 px rgba ( 0 , 0 , 0 , 0.12 ) ;
z-index : 9999 ;
backdrop-filter : blur ( 12 px ) ;
}
. nav-dropdown-menu :: before {
content : '' ;
position : absolute ;
top : -12 px ; left : 0 ; right : 0 ;
height : 12 px ;
}
. 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 : 10 px ;
padding : 10 px 18 px ;
font-size : 14 px ; color : #4A4A4A ;
transition : color 0.15 s , background 0.15 s ;
white-space : nowrap ;
}
. nav-dropdown-menu a : hover { color : #1d1d1f ; background : rgba ( 0 , 0 , 0 , 0.03 ) ; }
. nav-dropdown-menu . dd-label {
font-size : 10 px ; font-weight : 700 ; letter-spacing : 0.1 em ;
text-transform : uppercase ; color : rgba ( 0 , 0 , 0 , 0.75 ) ;
padding : 8 px 18 px 4 px ; cursor : default ;
}
. nav-dropdown-menu hr { border : none ; border-top : 1 px solid var ( - - border ) ; margin : 6 px 0 ; }
. btn {
display : inline-flex ; align-items : center ; gap : 6 px ;
padding : 10 px 22 px ;
background : var ( - - blue ) ;
color : #fff ;
font-size : 14 px ;
font-weight : 600 ;
border-radius : var ( - - radius - md ) ;
border : none ;
cursor : pointer ;
transition : background 0.2 s , transform 0.15 s ;
}
. btn : hover { background : var ( - - blue - dark ) ; transform : translateY ( -1 px ) ; }
. btn-outline {
background : transparent ;
border : 1.5 px solid rgba ( 0 , 0 , 0 , 0.18 ) ;
color : #1d1d1f ;
}
. btn-outline : hover { background : rgba ( 0 , 0 , 0 , 0.04 ) ; transform : translateY ( -1 px ) ; }
. btn-lg { padding : 14 px 30 px ; font-size : 16 px ; border-radius : var ( - - radius - md ) ; }
/* HERO */
. hero {
min-height : 100 vh ;
display : flex ; flex-direction : column ; align-items : center ; justify-content : center ;
text-align : center ;
padding : 120 px 24 px 80 px ;
position : relative ;
overflow : hidden ;
background : #ffffff ;
}
. hero :: before {
content : '' ;
position : absolute ;
top : -200 px ; left : 50 % ; transform : translateX ( -50 % ) ;
width : 900 px ; height : 600 px ;
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 : 8 px ;
background : rgba ( 0 , 102 , 255 , 0.1 ) ;
border : 1 px solid rgba ( 0 , 102 , 255 , 0.25 ) ;
color : #0052CC ;
font-size : 12 px ;
font-weight : 600 ;
letter-spacing : 0.08 em ;
text-transform : uppercase ;
padding : 6 px 16 px ;
border-radius : 100 px ;
margin-bottom : 28 px ;
}
. hero h1 {
font-size : clamp ( 44 px , 7 vw , 80 px ) ;
font-weight : 800 ;
letter-spacing : -2 px ;
line-height : 1.05 ;
color : #1d1d1f ;
max-width : 820 px ;
margin-bottom : 24 px ;
}
. hero-sub {
font-size : clamp ( 16 px , 2 vw , 20 px ) ;
color : #515154 ;
max-width : 640 px ;
line-height : 1.65 ;
margin-bottom : 40 px ;
}
. hero-ctas {
display : flex ; gap : 14 px ; flex-wrap : wrap ; justify-content : center ;
}
. cta-secondary {
display : inline-flex ; align-items : center ; gap : 6 px ;
padding : 14 px 22 px ;
background : transparent ;
border : 1.5 px solid rgba ( 0 , 0 , 0 , 0.18 ) ;
color : #1d1d1f ;
font-size : 15 px ;
font-weight : 600 ;
border-radius : var ( - - radius - md ) ;
transition : background 0.2 s , border-color 0.2 s , transform 0.15 s ;
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 ( -1 px ) ; }
/* SECTION COMMON */
section { padding : 96 px 24 px ; }
. container { max-width : 1140 px ; margin : 0 auto ; }
. section-label {
font-size : 12 px ; font-weight : 700 ; letter-spacing : 0.1 em ;
text-transform : uppercase ; color : var ( - - blue ) ;
margin-bottom : 16 px ;
}
. section-title {
font-size : clamp ( 28 px , 4 vw , 44 px ) ;
font-weight : 800 ;
letter-spacing : -1.2 px ;
line-height : 1.1 ;
color : #1d1d1f ;
margin-bottom : 16 px ;
}
. section-sub {
font-size : 17 px ;
color : #515154 ;
max-width : 560 px ;
line-height : 1.7 ;
}
/* GRID CARDS */
. card-grid {
display : grid ;
grid-template-columns : repeat ( 3 , 1 fr ) ;
gap : 20 px ;
}
@ media ( max-width : 768px ) { . card-grid { grid-template-columns : 1 fr 1 fr ; } }
@ media ( max-width : 480px ) { . card-grid { grid-template-columns : 1 fr ; } }
. card {
background : #fff ;
border : 1 px solid rgba ( 0 , 0 , 0 , 0.08 ) ;
border-radius : var ( - - radius - lg ) ;
padding : 32 px 28 px ;
display : flex ;
flex-direction : column ;
gap : 12 px ;
text-decoration : none ;
color : inherit ;
transition : transform 0.15 s ease , box-shadow 0.15 s ease , border-color 0.2 s ease ;
cursor : pointer ;
}
. card : hover {
transform : translateY ( -2 px ) ;
box-shadow : 0 8 px 24 px rgba ( 0 , 0 , 0 , 0.12 ) ;
border-color : rgba ( 0 , 102 , 255 , 0.3 ) ;
}
. card-icon {
width : 44 px ; height : 44 px ;
background : rgba ( 0 , 102 , 255 , 0.08 ) ;
border : 1 px solid rgba ( 0 , 102 , 255 , 0.18 ) ;
border-radius : var ( - - radius - md ) ;
display : flex ; align-items : center ; justify-content : center ;
font-size : 20 px ;
margin-bottom : 8 px ;
}
. card h3 {
font-size : 16 px ;
font-weight : 700 ;
color : #1d1d1f ;
margin : 0 ;
letter-spacing : -0.3 px ;
}
. card p {
font-size : 14 px ;
color : #515154 ;
line-height : 1.5 ;
margin : 0 ;
}
. card-link {
font-size : 13 px ;
font-weight : 700 ;
color : #0066FF ;
margin-top : auto ;
padding-top : 8 px ;
}
/* PROCESS STEPS */
. process-steps {
display : grid ;
grid-template-columns : repeat ( 4 , 1 fr ) ;
gap : 24 px ;
position : relative ;
max-width : 1000 px ;
margin : 0 auto ;
}
. process-steps :: before {
content : '' ;
position : absolute ;
top : 28 px ; left : 12.5 % ; right : 12.5 % ;
height : 1 px ;
background : linear-gradient ( 90 deg , transparent , var ( - - blue ) 20 % , var ( - - blue ) 80 % , transparent ) ;
opacity : 0.3 ;
}
@ media ( max-width : 900px ) { . process-steps { grid-template-columns : 1 fr 1 fr ; } . process-steps :: before { display : none ; } }
@ media ( max-width : 640px ) { . process-steps { grid-template-columns : 1 fr ; gap : 16 px ; } }
. step {
text-align : center ;
padding : 32 px 24 px ;
position : relative ;
background : #ffffff ;
border : 1 px solid rgba ( 0 , 0 , 0 , 0.08 ) ;
border-radius : var ( - - radius - lg ) ;
transition : transform .15 s , border-color .15 s ;
}
. step : hover { transform : translateY ( -3 px ) ; border-color : rgba ( 0 , 102 , 255 , 0.4 ) ; }
. step-num {
width : 48 px ; height : 48 px ;
border-radius : var ( - - radius - full ) ;
background : rgba ( 0 , 102 , 255 , 0.08 ) ;
border : 2 px solid #0066FF ;
display : flex ; align-items : center ; justify-content : center ;
font-size : 16 px ; font-weight : 800 ;
color : #0066FF ;
margin : 0 auto 20 px ;
position : relative ; z-index : 1 ;
}
. step h3 { font-size : 16 px ; font-weight : 700 ; color : #1d1d1f ; margin-bottom : 8 px ; }
. step p { font-size : 14 px ; color : #515154 ; line-height : 1.6 ; }
/* PIPELINE */
. pipeline {
display : flex ; align-items : center ; justify-content : center ;
gap : 0 ; margin : 32 px 0 40 px ;
overflow-x : auto ; padding : 0 8 px ;
}
. pipeline-step {
display : flex ; flex-direction : column ; align-items : center ;
gap : 8 px ; min-width : 88 px ;
}
. pipeline-icon {
width : 52 px ; height : 52 px ;
border-radius : var ( - - radius - lg ) ;
background : rgba ( 0 , 102 , 255 , 0.08 ) ;
border : 1 px solid rgba ( 0 , 102 , 255 , 0.18 ) ;
display : flex ; align-items : center ; justify-content : center ;
flex-shrink : 0 ;
}
. pipeline-label {
font-size : 11 px ; font-weight : 700 ;
color : #515154 ; text-align : center ;
letter-spacing : 0.02 em ; line-height : 1.3 ;
}
. pipeline-connector {
width : 32 px ; height : 2 px ;
background : linear-gradient ( 90 deg , rgba ( 0 , 102 , 255 , 0.3 ) , rgba ( 0 , 102 , 255 , 0.1 ) ) ;
flex-shrink : 0 ; margin-top : -22 px ;
align-self : flex-start ; margin-left : 0 ;
position : relative ; top : -26 px ;
}
@ media ( max-width : 600px ) { . pipeline { justify-content : flex-start ; } . pipeline-connector { width : 20 px ; } }
@ media ( max-width : 480px ) { . pipeline-step { min-width : 56 px ; } . pipeline-label { font-size : 9 px ; } . pipeline-icon { width : 38 px ; height : 38 px ; } . pipeline-connector { width : 10 px ; } }
/* INTEL CARDS */
. intel-grid {
display : grid ;
grid-template-columns : repeat ( 2 , 1 fr ) ;
gap : 20 px ;
margin-top : 40 px ;
}
@ media ( max-width : 768px ) { . intel-grid { grid-template-columns : 1 fr ; } }
. intel-card {
background : #ffffff ;
border : 1 px solid rgba ( 0 , 0 , 0 , 0.08 ) ;
border-radius : var ( - - radius - lg ) ;
padding : 32 px ;
text-decoration : none ;
color : inherit ;
display : flex ;
flex-direction : column ;
gap : 24 px ;
transition : border-color 0.2 s , transform 0.2 s ;
cursor : pointer ;
}
. intel-card : hover {
border-color : rgba ( 0 , 102 , 255 , 0.35 ) ;
transform : translateY ( -2 px ) ;
box-shadow : 0 8 px 24 px rgba ( 0 , 0 , 0 , 0.12 ) ;
}
. intel-header {
display : flex ; align-items : flex-start ; justify-content : space-between ;
}
. intel-module {
font-size : 11 px ; font-weight : 700 ;
letter-spacing : 0.1 em ; text-transform : uppercase ;
color : #0066FF ; margin-bottom : 6 px ;
}
. intel-card h3 {
font-size : 17 px ; font-weight : 800 ;
color : #1d1d1f ; margin : 0 ;
}
. intel-geo {
font-size : 12 px ; color : #515154 ; margin-top : 2 px ;
}
. intel-tag {
font-size : 10 px ; font-weight : 700 ;
letter-spacing : 0.06 em ; text-transform : uppercase ;
padding : 3 px 9 px ; border-radius : 100 px ; white-space : nowrap ;
}
. intel-tag-live { background : rgba ( 0 , 200 , 83 , 0.12 ) ; color : #00C853 ; border : 1 px solid rgba ( 0 , 200 , 83 , 0.2 ) ; }
. intel-tag-risk { background : rgba ( 255 , 59 , 48 , 0.1 ) ; color : #FF3B30 ; border : 1 px solid rgba ( 255 , 59 , 48 , 0.2 ) ; }
. intel-tag-pred { background : rgba ( 0 , 102 , 255 , 0.12 ) ; color : #0066FF ; border : 1 px solid rgba ( 0 , 102 , 255 , 0.2 ) ; }
. intel-kpis {
display : grid ;
grid-template-columns : repeat ( 3 , 1 fr ) ;
gap : 12 px ;
}
. intel-kpi {
background : rgba ( 0 , 0 , 0 , 0.03 ) ;
border-radius : var ( - - radius - md ) ;
padding : 10 px 12 px ;
}
. intel-kpi-val {
font-size : 19 px ; font-weight : 900 ;
color : #1d1d1f ; letter-spacing : -0.03 em ; line-height : 1 ;
}
. intel-kpi-delta {
font-size : 11 px ; font-weight : 700 ; margin-top : 3 px ;
}
. intel-kpi-delta . up { color : #00C853 ; }
. intel-kpi-delta . down { color : #FF3B30 ; }
. intel-kpi-lbl {
font-size : 10 px ; color : #6e6e73 ;
margin-top : 2 px ; line-height : 1.3 ;
}
. intel-bars {
display : flex ; flex-direction : column ; gap : 7 px ;
}
. intel-bar-row {
display : flex ; align-items : center ; gap : 10 px ;
}
. intel-bar-name {
font-size : 12 px ; color : #515154 ;
min-width : 110 px ; white-space : nowrap ;
overflow : hidden ; text-overflow : ellipsis ;
}
. intel-bar-track {
flex : 1 ; height : 5 px ;
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 : 11 px ; font-weight : 700 ;
color : #515154 ; min-width : 28 px ; text-align : right ;
}
. intel-footer {
display : flex ; align-items : center ;
justify-content : space-between ;
padding-top : 16 px ;
border-top : 1 px solid rgba ( 0 , 0 , 0 , 0.06 ) ;
margin-top : auto ;
}
. intel-obs {
font-size : 11 px ; color : #6e6e73 ;
}
. intel-cta {
font-size : 12 px ; font-weight : 700 ;
color : #0066FF ; display : flex ;
align-items : center ; gap : 4 px ;
}
/* MAP */
. map-frame {
border-radius : var ( - - radius - lg ) ;
overflow : hidden ;
border : 1 px solid rgba ( 0 , 0 , 0 , 0.1 ) ;
box-shadow : 0 8 px 32 px rgba ( 0 , 0 , 0 , 0.10 ) ;
}
. map-iframe {
width : 100 % ;
height : min ( 68 vh , 560 px ) ;
min-height : 320 px ;
border : none ;
display : block ;
}
. map-bar {
background : rgba ( 0 , 0 , 0 , 0.97 ) ;
padding : 14 px 20 px ;
display : flex ;
align-items : center ;
justify-content : space-between ;
gap : 16 px ;
flex-wrap : wrap ;
border-top : 1 px solid rgba ( 255 , 255 , 255 , 0.07 ) ;
}
. map-bar-left {
display : flex ; align-items : center ; gap : 10 px ; flex : 1 ; min-width : 0 ;
}
. map-dot {
width : 6 px ; height : 6 px ;
border-radius : var ( - - radius - full ) ;
background : #22c55e ; flex-shrink : 0 ;
}
. map-bar-text {
font-size : 13 px ; color : #4A4A4A ;
white-space : nowrap ; overflow : hidden ; text-overflow : ellipsis ;
}
/* TAGS */
. tag-row {
display : flex ; flex-wrap : wrap ;
gap : 8 px ; justify-content : center ;
margin-top : 20 px ;
}
. tag {
font-size : 12 px ; font-weight : 600 ;
background : rgba ( 0 , 0 , 0 , 0.05 ) ;
color : rgba ( 0 , 0 , 0 , 0.4 ) ;
border-radius : var ( - - radius - xl ) ;
padding : 5 px 13 px ;
border : 1 px solid rgba ( 0 , 0 , 0 , 0.07 ) ;
}
/* SCORE TABLE */
. score-table-wrap { margin-top : 48 px ; overflow-x : auto ; }
. score-table { width : 100 % ; border-collapse : collapse ; font-size : 14 px ; }
. score-table th {
text-align : center ; padding : 10 px 8 px ;
font-weight : 700 ; color : rgba ( 0 , 0 , 0 , 0.75 ) ;
font-size : 11 px ; text-transform : uppercase ;
letter-spacing : 0.06 em ;
}
. score-table th : first-child { text-align : left ; padding-left : 0 ; }
. score-table td {
padding : 12 px 8 px ;
border-bottom : 1 px 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 : 14 px ;
}
. score-table tr : last-child td { border-bottom : none ; }
. score-pill {
font-weight : 800 ; padding : 4 px 10 px ;
border-radius : 20 px ; font-size : 13 px ;
}
. score-green { background : #dcfce7 ; color : #166534 ; }
. score-yellow { background : #fef9c3 ; color : #854d0e ; }
. score-red { background : #fee2e2 ; color : #991b1b ; }
/* CONTRADICTION */
. contradiction-box {
background : #ffffff ;
border : 1 px solid rgba ( 0 , 0 , 0 , 0.08 ) ;
border-radius : var ( - - radius - lg ) ;
padding : 36 px 40 px ;
}
. contradiction-grid {
display : grid ;
grid-template-columns : 1 fr 1 fr ;
gap : 16 px ;
}
@ media ( max-width : 640px ) { . contradiction-grid { grid-template-columns : 1 fr ; } }
. contra-col {
border-radius : var ( - - radius - md ) ;
padding : 16 px ;
}
. contra-col . green {
background : rgba ( 34 , 197 , 94 , 0.15 ) ;
border : 1 px solid rgba ( 34 , 197 , 94 , 0.3 ) ;
}
. contra-col . red {
background : rgba ( 239 , 68 , 68 , 0.15 ) ;
border : 1 px solid rgba ( 239 , 68 , 68 , 0.3 ) ;
}
. contra-col h4 {
font-size : 12 px ; font-weight : 700 ;
text-transform : uppercase ; letter-spacing : 0.08 em ;
margin-bottom : 10 px ;
}
. 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 : 6 px ;
}
. contra-col li {
color : #1d1d1f ; font-size : 14 px ;
display : flex ; align-items : center ; gap : 6 px ;
}
/* BANNER */
. banner {
background : #0066FF ;
border-radius : var ( - - radius - lg ) ;
padding : 40 px 48 px ;
display : flex ;
align-items : center ;
gap : 48 px ;
flex-wrap : wrap ;
}
. banner-text { flex : 1 ; min-width : 260 px ; }
. banner-text h3 {
color : #ffffff ;
font-size : 20 px ; font-weight : 800 ;
margin-bottom : 8 px ;
}
. banner-text p {
color : rgba ( 255 , 255 , 255 , 0.85 ) ;
line-height : 1.65 ; font-size : 15 px ;
}
. banner-btn {
background : #fff !important ;
color : #0066FF !important ;
white-space : nowrap ;
flex-shrink : 0 ;
}
/* CONTACT */
. contact-wrapper {
max-width : 680 px ;
margin : 0 auto ;
text-align : center ;
}
. contact-form {
background : #ffffff ;
border : 1 px solid var ( - - border ) ;
border-radius : var ( - - radius - lg ) ;
padding : 40 px ;
text-align : left ;
margin-top : 32 px ;
}
. form-row { display : grid ; grid-template-columns : 1 fr 1 fr ; gap : 16 px ; margin-bottom : 16 px ; }
. form-group { display : flex ; flex-direction : column ; gap : 8 px ; margin-bottom : 16 px ; }
. form-group label { font-size : 13 px ; font-weight : 600 ; color : #4A4A4A ; }
. form-group input , . form-group textarea {
background : #f5f5f7 ;
border : 1.5 px solid var ( - - border ) ;
border-radius : var ( - - radius - md ) ;
color : #1d1d1f ;
font-size : 15 px ;
font-family : inherit ;
padding : 12 px 16 px ;
outline : none ;
transition : border-color 0.2 s ;
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 : 120 px ; resize : vertical ; }
. form-note { font-size : 12 px ; color : #6E6E73 ; margin-top : 12 px ; text-align : center ; }
# form-message {
display : none ;
padding : 14 px 20 px ;
border-radius : var ( - - radius - md ) ;
font-size : 14 px ;
font-weight : 600 ;
text-align : center ;
margin-top : 16 px ;
}
# form-message . success { background : rgba ( 0 , 200 , 80 , 0.1 ) ; border : 1 px solid rgba ( 0 , 200 , 80 , 0.25 ) ; color : #4ade80 ; }
# form-message . error { background : rgba ( 255 , 60 , 60 , 0.1 ) ; border : 1 px solid rgba ( 255 , 60 , 60 , 0.25 ) ; color : #f87171 ; }
/* FOOTER */
footer {
border-top : 1 px solid var ( - - border ) ;
padding : 40 px 40 px ;
background : #ffffff ;
}
. footer-inner {
max-width : 1140 px ; margin : 0 auto ;
display : flex ; align-items : center ; justify-content : space-between ;
flex-wrap : wrap ; gap : 20 px ;
}
. footer-logo { font-size : 17 px ; font-weight : 700 ; color : #1d1d1f ; }
. footer-copy { font-size : 13 px ; color : #6E6E73 ; }
. footer-links { display : flex ; gap : 24 px ; align-items : center ; flex-wrap : wrap ; }
. footer-links a { font-size : 14 px ; color : #6E6E73 ; transition : color 0.2 s ; }
. footer-links a : hover { color : #1d1d1f ; }
. footer-social {
width : 32 px ; height : 32 px ;
border : 1 px solid var ( - - border ) ;
border-radius : var ( - - radius - md ) ;
display : flex ; align-items : center ; justify-content : center ;
transition : border-color 0.2 s , background 0.2 s ;
}
. footer-social : hover { border-color : rgba ( 0 , 0 , 0 , 0.25 ) ; background : rgba ( 0 , 0 , 0 , 0.04 ) ; }
. footer-tagline { font-size : 12 px ; color : #6E6E73 ; margin-top : 4 px ; }
. footer-ecosystem {
font-size : 12 px ; color : #6e6e73 ; margin-top : 12 px ; 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 16 px ; }
. nav-links { display : none ; }
. card-grid { grid-template-columns : 1 fr 1 fr ; }
. process-steps { grid-template-columns : 1 fr 1 fr ; }
. process-steps :: before { display : none ; }
}
@ media ( max-width : 640px ) {
. hero h1 { font-size : clamp ( 28 px , 8 vw , 48 px ) ; }
. hero-sub { font-size : 16 px ; }
. hero-ctas { flex-direction : column ; gap : 12 px ; }
. hero-ctas a { width : 100 % ; text-align : center ; }
. section-title { font-size : clamp ( 22 px , 6 vw , 36 px ) ; }
. card-grid { grid-template-columns : 1 fr ; }
. process-steps { grid-template-columns : 1 fr ; }
. form-row { grid-template-columns : 1 fr ; }
. contact-form { padding : 24 px 20 px ; }
. footer-inner { flex-direction : column ; text-align : center ; }
. banner { padding : 24 px ; }
. contradiction-box { padding : 24 px ; }
}
@ media ( max-width : 480px ) {
section { padding : 56 px 16 px ; }
. hero { padding : 80 px 16 px 60 px ; }
. container { padding : 0 !important ; }
}
/* Utility */
. text-center { text-align : center ; }
. mx-auto { margin-left : auto ; margin-right : auto ; }
. mb-4 { margin-bottom : 16 px ; }
. mb-6 { margin-bottom : 24 px ; }
. mb-8 { margin-bottom : 32 px ; }
. mb-14 { margin-bottom : 56 px ; }
. mt-8 { margin-top : 32 px ; }
. max-w-lg { max-width : 560 px ; }
. max-w-xl { max-width : 640 px ; }
. max-w-2xl { max-width : 900 px ; }
. bg-white { background : #ffffff ; }
. bg-surface { background : #f5f5f7 ; }
. warning-box {
background : rgba ( 255 , 193 , 7 , 0.08 ) ;
border : 1 px solid rgba ( 255 , 193 , 7 , 0.3 ) ;
border-radius : var ( - - radius - md ) ;
padding : 14 px 18 px ;
margin-bottom : 16 px ;
font-size : 13 px ;
color : rgba ( 0 , 0 , 0 , 0.85 ) ;
line-height : 1.6 ;
}
. disclaimer {
text-align : center ;
color : var ( - - text - muted ) ;
font-size : 14 px ;
margin : 32 px 0 24 px ;
display : flex ;
align-items : center ;
justify-content : center ;
gap : 8 px ;
}
< / 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" ,
2026-07-14 15:27:33 +00:00
"foundingLocation" : { "@type" : "Place" , "addressLocality" : "Stockholm" , "addressRegion" : "Stockholm" , "addressCountry" : "SE" } ,
2026-07-14 09:58:53 +00:00
"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" } } ,
2026-07-14 15:27:33 +00:00
{ "@type" : "Place" , "name" : "Stockholm, Sweden (EU HQ)" , "address" : { "@type" : "PostalAddress" , "addressLocality" : "Stockholm" , "addressRegion" : "Stockholm" , "addressCountry" : "SE" } }
2026-07-14 09:58:53 +00:00
] ,
"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 & Real Estate< / a >
< a href = "/verticals/municipalities/" > Municipalities< / a >
< a href = "/verticals/infrastructure/" > Infrastructure< / a >
< a href = "/verticals/retail/" > Retail & F& 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" > 24– 72h< / 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 & 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 & 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 & 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 & 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 >
2026-07-14 15:27:33 +00:00
< 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 >
2026-07-14 09:58:53 +00:00
< 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 >