Files
boc/landvex-site/data-lineage/index.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

516 lines
29 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, viewport-fit=cover">
<title>Data Lineage — Landvex</title>
<meta name="description" content="Complete data lineage documentation for Landvex intelligence outputs. From field capture to delivered intelligence — every step documented.">
<link rel="canonical" href="https://www.landvex.com/data-lineage/">
<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="alternate" hreflang="x-default" href="https://www.landvex.com/">
<link rel="alternate" hreflang="en" href="https://www.landvex.com/">
<link rel="alternate" hreflang="sv" href="https://landvex.se/">
<link rel="alternate" hreflang="de" href="https://landvex.de/">
<link rel="alternate" hreflang="fr" href="https://landvex.fr/">
<link rel="alternate" hreflang="en-GB" href="https://landvex.co.uk/">
<style>
:root {
--bg: #F2F2F7;
--surface: #FFFFFF;
--surface2: #F2F2F7;
--label: #000000;
--label2: #3C3C43;
--label3: rgba(60,60,67,0.65);
--separator: rgba(60,60,67,0.29);
--accent: #0066FF;
--font: -apple-system, "SF Pro Text", "Helvetica Neue", sans-serif;
--font-display: -apple-system, "SF Pro Display", "Helvetica Neue", sans-serif;
--radius-lg: 16px;
--radius-sm: 10px;
}
@media (prefers-color-scheme: dark) {
:root {
--bg: #000000;
--surface: #1C1C1E;
--surface2: #2C2C2E;
--label: #FFFFFF;
--label2: #EBEBF5;
--label3: rgba(235,235,245,0.65);
--separator: rgba(84,84,88,0.65);
}
}
* { box-sizing: border-box; margin: 0; padding: 0; -webkit-font-smoothing: antialiased; }
body {
font-family: var(--font);
background: var(--bg);
color: var(--label);
padding: env(safe-area-inset-top, 20px) env(safe-area-inset-right, 20px) env(safe-area-inset-bottom, 40px) env(safe-area-inset-left, 20px);
max-width: 680px;
margin: 0 auto;
}
header { padding: 32px 0 24px; text-align: center; }
header .logo { font-family: var(--font-display); font-size: 28px; font-weight: 700; letter-spacing: -0.5px; color: var(--accent); }
header h1 { font-family: var(--font-display); font-size: 22px; font-weight: 700; color: var(--label); margin-top: 6px; }
header p { font-size: 13px; color: var(--label3); margin-top: 4px; }
.card { background: var(--surface); border-radius: var(--radius-lg); padding: 20px; margin-bottom: 12px; }
.card-title { font-family: var(--font-display); font-size: 17px; font-weight: 600; color: var(--label); margin-bottom: 12px; }
p, li { font-size: 15px; line-height: 1.6; color: var(--label2); }
ul { padding-left: 20px; margin-top: 8px; }
li { margin-bottom: 6px; }
a { color: var(--accent); text-decoration: none; }
footer { text-align: center; padding: 24px 0 8px; font-size: 13px; color: var(--label3); }
footer a { color: var(--accent); }
/* Pipeline steps */
.pipeline { display: flex; flex-direction: column; gap: 0; }
.step { display: flex; align-items: flex-start; gap: 14px; padding: 16px 0; border-bottom: 0.5px solid var(--separator); cursor: pointer; transition: opacity 0.15s; }
.step:last-child { border-bottom: none; }
.step:hover { opacity: 0.85; }
.step-num-wrap { display: flex; flex-direction: column; align-items: center; flex-shrink: 0; }
.step-num { width: 32px; height: 32px; border-radius: var(--radius-full); background: rgba(0,102,255,0.12); color: var(--accent); font-size: 13px; font-weight: 700; display: flex; align-items: center; justify-content: center; }
.step-line { width: 1.5px; flex: 1; min-height: 12px; background: rgba(0,102,255,0.18); margin-top: 4px; }
.step:last-child .step-line { display: none; }
.step-icon { width: 36px; height: 36px; border-radius: var(--radius-md); display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.step-body { flex: 1; }
.step-label { font-size: 15px; font-weight: 600; color: var(--label); }
.step-sub { font-size: 13px; color: var(--label3); margin-top: 3px; line-height: 1.55; }
.step-detail { margin-top: 10px; display: none; }
.step-detail.open { display: block; }
.step-detail ul { padding-left: 18px; }
.step-detail li { font-size: 13px; color: var(--label3); margin-bottom: 5px; line-height: 1.5; }
.step-toggle { font-size: 12px; color: var(--accent); margin-top: 5px; font-weight: 500; user-select: none; }
/* Colors */
.blue { background: rgba(0,102,255,0.12); }
.green { background: rgba(52,199,89,0.12); }
.orange { background: rgba(255,149,0,0.12); }
.red { background: rgba(255,59,48,0.12); }
.purple { background: rgba(175,82,222,0.12); }
.teal { background: rgba(50,173,230,0.12); }
.indigo { background: rgba(94,92,230,0.12); }
.pink { background: rgba(255,45,85,0.12); }
/* Audit + residency */
.info-block { background: rgba(0,102,255,0.06); border-left: 3px solid var(--accent); border-radius: 0 var(--radius-sm) var(--radius-sm) 0; padding: 14px 16px; margin-bottom: 12px; }
.info-block p { font-size: 13px; color: var(--label2); line-height: 1.6; }
.info-block strong { color: var(--label); font-weight: 600; }
/* CTA */
.cta-row { display: flex; justify-content: center; margin: 16px 0 4px; }
.cta-btn { display: inline-block; background: var(--accent); color: #1d1d1f; font-size: 15px; font-weight: 600; padding: 13px 24px; border-radius: var(--radius-md); text-decoration: none; transition: opacity 0.15s; }
.cta-btn:hover { opacity: 0.88; }
/* Related docs */
.row { display: flex; align-items: flex-start; gap: 12px; padding: 12px 0; border-bottom: 0.5px solid var(--separator); }
.row:last-child { border-bottom: none; }
.row-icon { width: 36px; height: 36px; border-radius: var(--radius-md); display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.row-content { flex: 1; }
.row-label { font-size: 15px; font-weight: 600; color: var(--label); }
.row-sub { font-size: 13px; color: var(--label3); margin-top: 2px; line-height: 1.5; }
@media (max-width: 640px) {
.hero h1 { font-size: 2rem !important; }
.hero p { font-size: 1rem !important; }
.card { padding: 1.5rem !important; }
.grid { grid-template-columns: 1fr !important; }
.btn { padding: 0.75rem 1.5rem !important; font-size: 1rem !important; }
}
</style>
</head>
<body>
<nav aria-label="breadcrumb" style="padding: 10px 20px; color: rgba(235,235,245,0.6); font-size: 14px;">
<a href="/" style="color: #007AFF; text-decoration: none;">Home</a> / <span>data-lineage</span>
</nav>
<header>
<div class="logo"><a href="https://www.landvex.com/" style="color:inherit;text-decoration:none;">Landvex</a></div>
<h1>How data moves through Landvex.</h1>
<p>From field capture to delivered intelligence — every step documented</p>
</header>
<div class="info-block">
<p><strong>Full traceability.</strong> Every intelligence output can be traced back to its source observations. This document describes each transformation step, the controls applied, and the data retained at each stage.</p>
</div>
<div class="card">
<div class="card-title">8-Step Pipeline</div>
<div class="pipeline" id="pipeline">
<div class="step" onclick="toggleStep(this)">
<div class="step-num-wrap">
<div class="step-num">1</div>
<div class="step-line"></div>
</div>
<div class="step-icon blue">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#0066ff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M3 7V5a2 2 0 0 1 2-2h2"/><path d="M17 3h2a2 2 0 0 1 2 2v2"/><path d="M21 17v2a2 2 0 0 1-2 2h-2"/><path d="M7 21H5a2 2 0 0 1-2-2v-2"/></svg>
</div>
<div class="step-body">
<div class="step-label">Field Capture</div>
<div class="step-sub">Zoomer photographs target via quiXzoom app with GPS lock and EXIF metadata.</div>
<div class="step-toggle">Show details</div>
<div class="step-detail">
<ul>
<li>Zoomer accepts mission in quiXzoom app</li>
<li>GPS coordinates locked at capture start</li>
<li>Photo taken with full EXIF metadata: device model, timestamp, GPS coordinates, focal length</li>
<li>Submission uploaded with: image, GPS trace, timestamp, device fingerprint, mission ID</li>
</ul>
</div>
</div>
</div>
<div class="step" onclick="toggleStep(this)">
<div class="step-num-wrap">
<div class="step-num">2</div>
<div class="step-line"></div>
</div>
<div class="step-icon green">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#34c759" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg>
</div>
<div class="step-body">
<div class="step-label">Identity Verification</div>
<div class="step-sub">Submitting Zoomer must be KYC-verified before any payout eligibility is established.</div>
<div class="step-toggle">Show details</div>
<div class="step-detail">
<ul>
<li>KYC verification is completed once, before the contributor's first payout</li>
<li>Each submission is linked to a verified contributor ID</li>
<li>Contributor ID is a pseudonymised hash — it is not stored in the intelligence output delivered to clients</li>
</ul>
</div>
</div>
</div>
<div class="step" onclick="toggleStep(this)">
<div class="step-num-wrap">
<div class="step-num">3</div>
<div class="step-line"></div>
</div>
<div class="step-icon teal">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#32ade6" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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 10z"/></svg>
</div>
<div class="step-body">
<div class="step-label">GPS Validation</div>
<div class="step-sub">Submitted coordinates validated against mission target with tolerance thresholds.</div>
<div class="step-toggle">Show details</div>
<div class="step-detail">
<ul>
<li>Submitted coordinates validated against mission target coordinates</li>
<li>Tolerance: &lt;50 metres for standard missions; &lt;10 metres for precision missions</li>
<li>GPS accuracy class assigned: coarse / balanced / precise</li>
<li>Submissions outside tolerance: auto-rejected or flagged for human review</li>
</ul>
</div>
</div>
</div>
<div class="step" onclick="toggleStep(this)">
<div class="step-num-wrap">
<div class="step-num">4</div>
<div class="step-line"></div>
</div>
<div class="step-icon orange">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#ff9500" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="14" rx="2"/><path d="M8 21h8M12 17v4"/></svg>
</div>
<div class="step-body">
<div class="step-label">AI Image Review</div>
<div class="step-sub">Automated quality scoring across specification compliance, technical quality, and content relevance.</div>
<div class="step-toggle">Show details</div>
<div class="step-detail">
<ul>
<li>Image analysed for: specification compliance, technical quality, content relevance</li>
<li>Object detection confirms the target is present in frame</li>
<li>Quality score assigned on a scale of 0100</li>
<li>Submissions below threshold: rejected with a reason code</li>
<li>Approval rate target: 85% or above</li>
</ul>
</div>
</div>
</div>
<div class="step" onclick="toggleStep(this)">
<div class="step-num-wrap">
<div class="step-num">5</div>
<div class="step-line"></div>
</div>
<div class="step-icon purple">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#af52de" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></svg>
</div>
<div class="step-body">
<div class="step-label">Human Review (edge cases)</div>
<div class="step-sub">AI-borderline submissions routed to a human reviewer with full decision logging.</div>
<div class="step-toggle">Show details</div>
<div class="step-detail">
<ul>
<li>AI-borderline submissions (score 4060) routed to a human reviewer</li>
<li>Reviewer applies the mission specification to reach a final decision</li>
<li>Decision logged with reviewer ID and timestamp</li>
<li>Appeals process available for rejected submissions</li>
</ul>
</div>
</div>
</div>
<div class="step" onclick="toggleStep(this)">
<div class="step-num-wrap">
<div class="step-num">6</div>
<div class="step-line"></div>
</div>
<div class="step-icon indigo">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#5e5ce6" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6"/><polyline points="8 6 2 12 8 18"/></svg>
</div>
<div class="step-body">
<div class="step-label">Normalisation</div>
<div class="step-sub">Approved submissions converted to structured data points with full source attribution.</div>
<div class="step-toggle">Show details</div>
<div class="step-detail">
<ul>
<li>Approved submissions converted to structured data points</li>
<li>Entity extraction: location, object type, condition class, change signal</li>
<li>Temporal indexing: observation timestamped; version history maintained</li>
<li>Source attribution preserved throughout the normalisation process</li>
</ul>
</div>
</div>
</div>
<div class="step" onclick="toggleStep(this)">
<div class="step-num-wrap">
<div class="step-num">7</div>
<div class="step-line"></div>
</div>
<div class="step-icon red">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#ff3b30" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="20" x2="18" y2="10"/><line x1="12" y1="20" x2="12" y2="4"/><line x1="6" y1="20" x2="6" y2="14"/></svg>
</div>
<div class="step-body">
<div class="step-label">Intelligence Aggregation</div>
<div class="step-sub">Observations aggregated by geographic unit; index scores calculated with confidence weighting.</div>
<div class="step-toggle">Show details</div>
<div class="step-detail">
<ul>
<li>Observations aggregated by geographic unit: district, city, region</li>
<li>Index scores calculated: Opportunity, Growth, Vitality, Infra Stability, Investment Confidence</li>
<li>Contradiction detection: aggregated observations compared against official data sources</li>
<li>Confidence scores calculated from: observation count, recency, and cross-validation results</li>
</ul>
</div>
</div>
</div>
<div class="step" onclick="toggleStep(this)">
<div class="step-num-wrap">
<div class="step-num">8</div>
<div class="step-line"></div>
</div>
<div class="step-icon green">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#34c759" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>
</div>
<div class="step-body">
<div class="step-label">Output and Delivery</div>
<div class="step-sub">Intelligence reports generated with full source citations and traceable audit trails.</div>
<div class="step-toggle">Show details</div>
<div class="step-detail">
<ul>
<li>Intelligence report generated with source citations</li>
<li>Each data point is traceable to its source observations via an audit trail</li>
<li>Delivery formats: web dashboard, API, structured report (PDF / JSON / CSV)</li>
<li>Data retention: per client contract — default is intelligence outputs retained 3 years, raw observations 90 days post-delivery</li>
<li>Deletion: right to erasure supported; deletion confirmed within 30 days</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="card" id="audit-trail">
<div class="card-title">Audit Trail</div>
<div class="info-block" style="margin-bottom:0;">
<p>Every intelligence output can be traced back to its source observations. On request, Landvex provides a complete audit package including: observation timestamps, GPS accuracy classes, AI review scores, human review decisions, normalisation logs, and aggregation methodology.</p>
<p style="margin-top:8px;">Contact: <a href="mailto:legal@landvex.com">legal@landvex.com</a></p>
</div>
</div>
<div class="card" id="data-residency">
<div class="card-title">Data Residency</div>
<div class="row">
<div class="row-icon teal">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#32ade6" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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 10z"/></svg>
</div>
<div class="row-content">
<div class="row-label">EU-only — AWS eu-north-1, Stockholm</div>
<div class="row-sub">All data is stored in the EU on AWS eu-north-1 (Stockholm, Sweden). No data is transferred outside the EU without explicit client instruction and appropriate safeguards in place.</div>
</div>
</div>
</div>
<div class="card">
<div class="card-title">Request Documentation</div>
<p style="font-size:14px;color:var(--label2);margin-bottom:16px;">Enterprise clients may request a complete data lineage package for their contract, including normalisation logs and aggregation methodology.</p>
<div class="cta-row">
<a href="/contact/" class="cta-btn">Request data lineage documentation for your contract</a>
</div>
</div>
<div class="card">
<div class="card-title">Related Documents</div>
<div class="row">
<div class="row-icon blue">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#0066ff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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"/></svg>
</div>
<div class="row-content">
<div class="row-label"><a href="/subprocessors/">Sub-processors</a></div>
<div class="row-sub">Third-party processors used in the Landvex pipeline. GDPR Article 28 compliant.</div>
</div>
</div>
<div class="row">
<div class="row-icon green">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#34c759" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>
</div>
<div class="row-content">
<div class="row-label"><a href="/trust/">Trust Centre</a></div>
<div class="row-sub">Infrastructure security, data quality guarantee, and verification chain.</div>
</div>
</div>
<div class="row">
<div class="row-icon purple">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#af52de" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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"/></svg>
</div>
<div class="row-content">
<div class="row-label"><a href="/dpa/">Data Processing Agreement</a></div>
<div class="row-sub">GDPR Art. 28 DPA and Standard Contractual Clauses.</div>
</div>
</div>
<div class="row">
<div class="row-icon orange">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#ff9500" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"/></svg>
</div>
<div class="row-content">
<div class="row-label"><a href="/data-quality/">Data Quality</a></div>
<div class="row-sub">Methodology, accuracy metrics, and quality guarantees.</div>
</div>
</div>
</div>
<footer>
<div class="footer-container" style="max-width:1200px;margin:0 auto;padding:48px 24px 32px;">
<!-- Main Footer Grid -->
<div style="display:grid;grid-template-columns:repeat(4,1fr);gap:40px;margin-bottom:48px;">
<!-- Column 1: Products -->
<div>
<h4 style="font-size:13px;font-weight:600;color:#0A0A0A;margin-bottom:16px;text-transform:uppercase;letter-spacing:0.5px;">Produkter</h4>
<ul style="list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:12px;">
<li><a href="/infrastructure-monitoring/" style="font-size:13px;color:#6E6E73;text-decoration:none;transition:color 0.2s;">VIMS</a></li>
<li><a href="/intelligence/" style="font-size:13px;color:#6E6E73;text-decoration:none;transition:color 0.2s;">Intelligence</a></li>
<li><a href="/reality-alerts/" style="font-size:13px;color:#6E6E73;text-decoration:none;transition:color 0.2s;">Reality Alerts</a></li>
<li><a href="/enterprise/" style="font-size:13px;color:#6E6E73;text-decoration:none;transition:color 0.2s;">Enterprise</a></li>
<li><a href="/pilot/" style="font-size:13px;color:#6E6E73;text-decoration:none;transition:color 0.2s;">Pilotprogram</a></li>
</ul>
</div>
<!-- Column 2: Solutions -->
<div>
<h4 style="font-size:13px;font-weight:600;color:#0A0A0A;margin-bottom:16px;text-transform:uppercase;letter-spacing:0.5px;">Lösningar</h4>
<ul style="list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:12px;">
<li><a href="/verticals/bridge-inspection/" style="font-size:13px;color:#6E6E73;text-decoration:none;transition:color 0.2s;">Broinspektion</a></li>
<li><a href="/verticals/road-monitoring/" style="font-size:13px;color:#6E6E73;text-decoration:none;transition:color 0.2s;">Vägövervakning</a></li>
<li><a href="/verticals/infrastructure/" style="font-size:13px;color:#6E6E73;text-decoration:none;transition:color 0.2s;">Infrastruktur</a></li>
<li><a href="/verticals/utilities/" style="font-size:13px;color:#6E6E73;text-decoration:none;transition:color 0.2s;">Utilities</a></li>
<li><a href="/use-cases/" style="font-size:13px;color:#6E6E73;text-decoration:none;transition:color 0.2s;">Användningsfall</a></li>
</ul>
</div>
<!-- Column 3: Resources -->
<div>
<h4 style="font-size:13px;font-weight:600;color:#0A0A0A;margin-bottom:16px;text-transform:uppercase;letter-spacing:0.5px;">Resurser</h4>
<ul style="list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:12px;">
<li><a href="/blog/" style="font-size:13px;color:#6E6E73;text-decoration:none;transition:color 0.2s;">Intelligence Insights</a></li>
<li><a href="/guides/" style="font-size:13px;color:#6E6E73;text-decoration:none;transition:color 0.2s;">Guider</a></li>
<li><a href="/developers/" style="font-size:13px;color:#6E6E73;text-decoration:none;transition:color 0.2s;">Developer API</a></li>
<li><a href="/status/" style="font-size:13px;color:#6E6E73;text-decoration:none;transition:color 0.2s;">Systemstatus</a></li>
<li><a href="/reports/" style="font-size:13px;color:#6E6E73;text-decoration:none;transition:color 0.2s;">Rapporter</a></li>
</ul>
</div>
<!-- Column 4: Company -->
<div>
<h4 style="font-size:13px;font-weight:600;color:#0A0A0A;margin-bottom:16px;text-transform:uppercase;letter-spacing:0.5px;">Företag</h4>
<ul style="list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:12px;">
<li><a href="/about/" style="font-size:13px;color:#6E6E73;text-decoration:none;transition:color 0.2s;">Om oss</a></li>
<li><a href="/careers/" style="font-size:13px;color:#6E6E73;text-decoration:none;transition:color 0.2s;">Karriär</a></li>
<li><a href="/press/" style="font-size:13px;color:#6E6E73;text-decoration:none;transition:color 0.2s;">Press</a></li>
<li><a href="/contact/" style="font-size:13px;color:#6E6E73;text-decoration:none;transition:color 0.2s;">Kontakt</a></li>
<li><a href="https://www.quixzoom.com" target="_blank" rel="noopener" style="font-size:13px;color:#6E6E73;text-decoration:none;transition:color 0.2s;">quiXzoom →</a></li>
</ul>
</div>
</div>
<!-- Divider -->
<div style="border-top:1px solid #E5E5E5;padding-top:32px;">
<!-- Legal & Compliance Row -->
<div style="display:flex;justify-content:space-between;align-items:flex-start;flex-wrap:wrap;gap:24px;margin-bottom:24px;">
<div style="display:flex;flex-wrap:wrap;gap:16px 24px;">
<a href="/privacy/" style="font-size:12px;color:#6E6E73;text-decoration:none;">Privacy</a>
<a href="/terms/" style="font-size:12px;color:#6E6E73;text-decoration:none;">Terms</a>
<a href="/cookie-policy/" style="font-size:12px;color:#6E6E73;text-decoration:none;">Cookies</a>
<a href="/compliance/" style="font-size:12px;color:#6E6E73;text-decoration:none;">Compliance</a>
<a href="/trust/" style="font-size:12px;color:#6E6E73;text-decoration:none;">Trust Centre</a>
<a href="/dpa/" style="font-size:12px;color:#6E6E73;text-decoration:none;">DPA</a>
<a href="/sla/" style="font-size:12px;color:#6E6E73;text-decoration:none;">SLA</a>
<a href="/security/" style="font-size:12px;color:#6E6E73;text-decoration:none;">Security</a>
<a href="/accessibility/" style="font-size:12px;color:#6E6E73;text-decoration:none;">Accessibility</a>
<a href="/responsible-disclosure/" style="font-size:12px;color:#6E6E73;text-decoration:none;">Responsible Disclosure</a>
</div>
<div style="display:flex;gap:16px;">
<a href="https://www.linkedin.com/company/landvex" target="_blank" rel="noopener" style="color:#6E6E73;" title="LinkedIn">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><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"/><rect x="2" y="9" width="4" height="12"/><circle cx="4" cy="4" r="2"/></svg>
</a>
<a href="https://x.com/landvex" target="_blank" rel="noopener" style="color:#6E6E73;" title="X">
<svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><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>
<!-- Company Info Row -->
<div style="display:flex;justify-content:space-between;align-items:flex-end;flex-wrap:wrap;gap:16px;">
<div>
<div style="font-size:12px;color:#86868B;line-height:1.6;">
<strong style="color:#0A0A0A;">Landvex Inc.</strong> · Houston, Texas · USA<br>
<strong style="color:#0A0A0A;">Landvex AB</strong> · Org.nr 559141-7042 · Stockholm, Sweden · EU<br>
<a href="mailto:contact@landvex.com" style="color:#86868B;text-decoration:none;">contact@landvex.com</a> ·
<a href="mailto:security@landvex.com" style="color:#86868B;text-decoration:none;">security@landvex.com</a>
</div>
<div style="font-size:11px;color:#86868B;margin-top:8px;line-height:1.5;">
Field data powered by <a href="https://www.quixzoom.com" style="color:#86868B;text-decoration:underline;">quiXzoom</a> ·
<a href="/data-lineage/" style="color:#86868B;text-decoration:underline;">Data Lineage</a> ·
<a href="/subprocessors/" style="color:#86868B;text-decoration:underline;">Sub-processors</a> ·
<a href="/methodology/" style="color:#86868B;text-decoration:underline;">Methodology</a>
</div>
</div>
<div style="font-size:12px;color:#86868B;">
© 2026 Landvex Inc / Landvex AB. All rights reserved.
</div>
</div>
</div>
</div>
</footer>
<script>
function toggleStep(el) {
var detail = el.querySelector('.step-detail');
var toggle = el.querySelector('.step-toggle');
if (!detail) return;
var isOpen = detail.classList.contains('open');
detail.classList.toggle('open', !isOpen);
toggle.textContent = isOpen ? 'Show details' : 'Hide details';
}
</script>
</body>
</html>