From 6e5b565e5ee8177d626b26675ad2b1da363a81e0 Mon Sep 17 00:00:00 2001 From: Kara Zajac Date: Wed, 15 Jul 2026 18:51:04 -0400 Subject: [PATCH] docs: add VIGIL showcase page (vigil.netslum.io) Static landing page reusing the OVERWATCH/SKELETONKEY design system: hero + main-screen screenshot, the five tracker ecosystems, the co-movement decision model + OBSERVED/SUSPICIOUS/ALERTING tiers, the rotating-clone problem, and the fully-offline privacy story. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/.nojekyll | 0 docs/app.js | 46 ++ docs/img/vigil-main.png | Bin 0 -> 48292 bytes docs/index.html | 375 ++++++++++++++ docs/og-card.html | 23 + docs/og.png | Bin 0 -> 63108 bytes docs/style.css | 1091 +++++++++++++++++++++++++++++++++++++++ 7 files changed, 1535 insertions(+) create mode 100644 docs/.nojekyll create mode 100644 docs/app.js create mode 100644 docs/img/vigil-main.png create mode 100644 docs/index.html create mode 100644 docs/og-card.html create mode 100644 docs/og.png create mode 100644 docs/style.css diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/docs/app.js b/docs/app.js new file mode 100644 index 0000000..3d2461c --- /dev/null +++ b/docs/app.js @@ -0,0 +1,46 @@ +/* OVERWATCH landing — count-up stats + scroll reveal. No network, no deps. */ +(function () { + 'use strict'; + const reduceMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches; + + /* count-up numbers when the stats row scrolls into view */ + function countUp(el) { + const target = parseInt(el.dataset.target, 10); + if (isNaN(target)) return; + if (!target || reduceMotion) { el.textContent = String(target); return; } + const dur = 1100, start = performance.now(); + (function tick(now) { + const p = Math.min(1, (now - start) / dur); + el.textContent = String(Math.round(target * (1 - Math.pow(1 - p, 3)))); + if (p < 1) requestAnimationFrame(tick); + })(performance.now()); + } + + const statsRow = document.getElementById('stats-row'); + if (statsRow) { + const nums = statsRow.querySelectorAll('.num[data-target]'); + if ('IntersectionObserver' in window && !reduceMotion) { + const io = new IntersectionObserver((entries, obs) => { + entries.forEach((e) => { + if (e.isIntersecting) { nums.forEach(countUp); obs.disconnect(); } + }); + }, { threshold: 0.4 }); + io.observe(statsRow); + } else { + nums.forEach((el) => { el.textContent = el.dataset.target; }); + } + } + + /* scroll-triggered reveal */ + const reveals = document.querySelectorAll('.reveal'); + if (!('IntersectionObserver' in window) || reduceMotion) { + reveals.forEach((el) => el.classList.add('in')); + } else { + const ro = new IntersectionObserver((entries, obs) => { + entries.forEach((e) => { + if (e.isIntersecting) { e.target.classList.add('in'); obs.unobserve(e.target); } + }); + }, { threshold: 0.12, rootMargin: '0px 0px -40px 0px' }); + reveals.forEach((el) => ro.observe(el)); + } +})(); diff --git a/docs/img/vigil-main.png b/docs/img/vigil-main.png new file mode 100644 index 0000000000000000000000000000000000000000..510788193f4ceba01d48dd4eaa1044e69aa827c1 GIT binary patch literal 48292 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

4NJO)hf8zvJOG}Bcc~oZ=kE!s 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 + + + + +VIGIL — what's been following you? + + + + + + + + + + + + + + + + + + + + + +

+ +
+ + +
+
+
+ + v0.1.7 · Android · prototype +
+

+ VIGIL +

+

+ What's been following you? A native Android app that + watches for personal item-trackers — AirTags, Tile, Samsung SmartTags, + Google Find My — that are travelling with you over time. + A tracker being near you means nothing. The signal is persistence. +

+ +
+ VIGIL main screen: a green "You're clear — nothing has been following you" card, a Stop Watching button, and a High/Medium/Low sensitivity selector. +
+ +
+
0tracker ecosystems
+
0escalation tiers
+
0internet permission
+
v0.1.7latest APK
+
+ + + +

Prototype / work in progress. Debug-signed APK — sideload; no Play Store. Read the README.

+
+
+ + +
+
+
+
🛰
+
+

The temporal counterpart to OVERWATCH

+

+ OVERWATCH is spatial — what surveillance is watching + this place, right now. VIGIL is temporal — + what has been with you, across time and places. VIGIL reuses + OVERWATCH's proven passive-scanning stack and adds a persistent + on-device store to reason about a tracker's history. +

+
+
+
+
+ + +
+
+
+ +

Five ecosystems. One tell: separated from its owner.

+

VIGIL recognises each BLE wire format and, where the + ecosystem signals it, filters to the separated-from-owner + state — the only state in which a following tracker is even + detectable. Chipolo, Pebblebee, eufy and the rest inherit whichever + network their SKU joined, so VIGIL detects the network.

+
+ +
+
+
🍎
+

Apple Find My / AirTag

+

Mfg data, company 0x004C, type 0x12. Separated when the "maintained" status bit is cleared. ~24 h re-link window.

+
+
+
🟢
+

Google Find My Device

+

Service data 0xFEAA, frame 0x40/0x41. Frame 0x41 is the cleartext separated state.

+
+
+
🔵
+

Samsung Galaxy SmartTag

+

Service data 0xFD5A; the state byte flags lost / overmature-lost — the following state.

+
+
+
🟩
+

Tile

+

Service data 0xFEED / 0xFEEC. No separated signal and a static MAC — always findable, indefinitely.

+
+
+
🔗
+

DULT (unified, emerging)

+

Service data 0xFCB2; the near-owner bit (byte 14 LSB) marks separation. The cross-industry standard the whole ecosystem is converging on — VIGIL parses it today.

+
+
+
+
+ + +
+
+
+ +

Persistence, not proximity.

+

A tracker is escalated only when it clears the + co-movement test — the same device, seen at many of + your distinct places, over a sustained window, while close enough + to actually be on you.

+
+ +
+
+
📍
+

≥ N distinct places

+

Geohash-7 cells; N = 2 / 3 / 4 by sensitivity. A tracker seen only where you dwell isn't following — it lives there.

+
+
+
+

≥ 3 sightings over ≥ T minutes

+

Debounced to one per 15 min; T = 30 / 45 / 90 by sensitivity. Persistence across time, not a single blip.

+
+
+
📶
+

RSSI proximity gate

+

It must have been genuinely close — on-body / in-bag — at least once. This is the piece AirGuard omits; it rejects "a Tile in a passing car."

+
+
+ +
+
+
OBSERVED
+

Seen, logged, geotagged — but hasn't cleared the co-movement test. No alarm.

+
+
+
SUSPICIOUS
+

Co-moving across your places. VIGIL is watching it closely.

+
+
+
ALERTING
+

Confirmed following you. Surfaced with the "Make it ring" and hot/cold finder tools.

+
+
+ +
+
+
+ +
+ Allowlist — "This is mine" +

Tap a tracker to approve it — your own AirTag, your partner's Tile — and it never alerts again.

+
+
+
+ +
+ Learned offline baseline +

VIGIL learns the places you dwell (home, work) as anchors; a tracker seen at an anchor across several days is auto-marked Known (home) — so household tags fall silent on their own, entirely on-device.

+
+
+
+
+
+
+ + +
+
+
+ +

Catching the clone.

+

+ Every shipping detector — AirGuard, iOS, Android's built-in — keys on + device identity. A key-rotating clone (Positive + Security's Find You: ~2,000 Find My keys, a new one every 30 s) + looks like 2,000 one-off devices and evades them all — it tracked a + phone for five days with zero alerts. +

+
+ +
+
🎯
+
+

Detect the attack, not the device

+

+ A rotating clone is one physical radio holding an unbroken, + close-range, co-moving RF presence — even as its identity churns + thousands of times faster than any standards-compliant tracker is + allowed to. VIGIL's PresenceEngine pairs a CUSUM churn + trigger with an identity-agnostic presence-track confirmer and the + co-movement gate — an "identity-path × churn-path squeeze" that leaves + no safe rotation rate. First version implemented and unit-tested + against synthetic clone/ambient traces; field-tuning is what remains. +

+ Read the algorithm → +
+
+
+
+ + +
+
+
+ +

Fully offline. It only listens.

+
+ +
+
+
🔒
+

No INTERNET permission at all

+

+ There is no server, no account, no telemetry. Every tracker, every + sighting, and the entire learned baseline live in an on-device SQLite + database and never leave the phone. Detection is + entirely passive — it listens only. +

+
+
+
🔔
+

Make it ring

+

Tap a suspected tracker to connect over GATT and play its own sound — the DULT-standard way for a victim to locate a hidden AirTag / Find My / Chipolo tag.

+
+
+
🌡
+

Hot / cold finder

+

A passive proximity meter — warmer/colder from live signal. Works even on silent or modified tags that refuse to ring, which is exactly when you need it.

+
+
+
+
+ + +
+
+
+ +

Sideload in three steps.

+
+
+
+
1 · download
+
  • Grab the latest debug-signed APK from Releases (currently v0.1.7).
+
+
+
2 · install
+
  • Sideload — allow "install unknown apps" for your browser or files app, then open the APK.
+
+
+
3 · grant + scan
+
  • Grant nearby-devices + location + notifications, pick a sensitivity, and let it run in the background.
+
+
+

+ Build from source, read the paper, or file issues: + github.com/KaraZajac/VIGIL + · + the paper +

+
+
+ + +
+ + +
+ + + + + diff --git a/docs/og-card.html b/docs/og-card.html new file mode 100644 index 0000000..7daf6e4 --- /dev/null +++ b/docs/og-card.html @@ -0,0 +1,23 @@ + + + +
+
VIGIL
+
What's been following you? A passive Android app that flags AirTags, Tile, SmartTags & Find My trackers travelling with you over time — even rotating-key clones.
+
+
Apple · Google · Samsung · Tile · DULT  —  fully offline, listens only
+
vigil.netslum.io
+ diff --git a/docs/og.png b/docs/og.png new file mode 100644 index 0000000000000000000000000000000000000000..3e050d669836e1ec09e34d88348037d6accc7c12 GIT binary patch literal 63108 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 {t#j5LYSVcQVr!a{qk3BMNSGQHW%+BU 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 OPwlR{N)f`;?|%R*dM#uC literal 0 HcmV?d00001 diff --git a/docs/style.css b/docs/style.css new file mode 100644 index 0000000..a66326c --- /dev/null +++ b/docs/style.css @@ -0,0 +1,1091 @@ +/* ============================================================ + SKELETONKEY — landing page · marketing-grade redesign · v0.6.0 + palette: deep purple-tinted dark + emerald + KEV-red accents + fonts: Inter · JetBrains Mono · Space Grotesk display + ============================================================ */ + +* { box-sizing: border-box; } + +:root { + /* surfaces */ + --bg: #07070d; + --bg-2: #0c0c16; + --bg-3: #12121f; + --surface: #161628; + --surface-2: #1a1a30; + --border: #25253c; + --border-soft: #1c1c2d; + + /* text */ + --text: #ecedf7; + --text-soft: #c5c5d3; + --text-muted: #8a8a9d; + --text-dim: #5b5b75; + + /* accents */ + --accent: #10b981; /* emerald — primary, "ok/safe" */ + --accent-2: #06b6d4; /* cyan — primary gradient pair */ + --accent-hot: #34d399; /* lighter emerald, hover/glow */ + --warning: #f59e0b; /* amber — yellow modules */ + --danger: #ef4444; /* red — KEV/active exploit */ + --violet: #a855f7; /* violet — threat-intel accent */ + --blue: #60a5fa; /* blue — links */ + + /* gradients */ + --grad-brand: linear-gradient(135deg, #10b981 0%, #06b6d4 100%); + --grad-kev: linear-gradient(135deg, #ef4444 0%, #f59e0b 100%); + --grad-bg: radial-gradient(ellipse at top, rgba(16, 185, 129, 0.06) 0%, transparent 50%), + radial-gradient(ellipse at bottom right, rgba(168, 85, 247, 0.05) 0%, transparent 50%); + + /* type */ + --sans: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Arial, sans-serif; + --mono: "JetBrains Mono", ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace; + --display: "Space Grotesk", "Inter", -apple-system, sans-serif; + + /* layout */ + --maxw: 1180px; + --radius: 12px; + --radius-sm: 8px; + --radius-lg: 18px; + --shadow: 0 10px 40px -10px rgba(0, 0, 0, 0.6); + --shadow-hi: 0 20px 60px -10px rgba(16, 185, 129, 0.15), 0 10px 30px -10px rgba(0, 0, 0, 0.6); +} + +html, body { + margin: 0; padding: 0; + background: var(--bg); + color: var(--text-soft); + font-family: var(--sans); + font-size: 16px; + line-height: 1.6; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + overflow-x: hidden; +} + +a { color: var(--accent-hot); text-decoration: none; transition: color .15s ease; } +a:hover { color: #fff; } + +code, pre { font-family: var(--mono); font-size: 0.93em; } +:not(pre) > code { + background: var(--surface); + border: 1px solid var(--border-soft); + border-radius: 4px; + padding: 0.08em 0.42em; + color: var(--accent-hot); + font-size: 0.86em; +} + +.container { + max-width: var(--maxw); + margin: 0 auto; + padding: 0 1.5rem; +} + +/* ============================================================ + ANIMATED GRADIENT MESH BACKGROUND (fixed, behind content) + ============================================================ */ +.bg-mesh { + position: fixed; + inset: 0; + z-index: -1; + overflow: hidden; + background: + var(--grad-bg), + var(--bg); +} +.mesh-blob { + position: absolute; + border-radius: 50%; + filter: blur(80px); + opacity: 0.4; + animation: drift 30s ease-in-out infinite alternate; +} +.mesh-blob-1 { + width: 580px; height: 580px; + background: radial-gradient(circle, rgba(16, 185, 129, 0.5), transparent 70%); + top: -150px; left: -150px; + animation-duration: 28s; +} +.mesh-blob-2 { + width: 480px; height: 480px; + background: radial-gradient(circle, rgba(6, 182, 212, 0.4), transparent 70%); + top: 200px; right: -120px; + animation-duration: 34s; animation-delay: -10s; +} +.mesh-blob-3 { + width: 420px; height: 420px; + background: radial-gradient(circle, rgba(168, 85, 247, 0.3), transparent 70%); + top: 700px; left: 40%; + animation-duration: 40s; animation-delay: -18s; +} +@keyframes drift { + 0% { transform: translate3d(0, 0, 0) rotate(0deg); } + 50% { transform: translate3d(80px, -40px, 0) rotate(120deg); } + 100% { transform: translate3d(-60px, 80px, 0) rotate(240deg); } +} +@media (prefers-reduced-motion: reduce) { + .mesh-blob { animation: none; } +} + +/* ============================================================ + TOP NAV + ============================================================ */ +.nav { + position: sticky; top: 0; z-index: 50; + padding: 0.85rem 0; + background: rgba(7, 7, 13, 0.72); + backdrop-filter: blur(14px) saturate(180%); + -webkit-backdrop-filter: blur(14px) saturate(180%); + border-bottom: 1px solid var(--border-soft); +} +.nav-inner { + display: flex; + align-items: center; + justify-content: space-between; +} +.nav-brand { + font-family: var(--mono); + font-weight: 700; + font-size: 0.95rem; + letter-spacing: 0.06em; + color: var(--text); + display: inline-flex; + align-items: center; + gap: 0.5rem; +} +.nav-brand:hover { color: #fff; } +.nav-mark { + display: inline-flex; + align-items: center; + justify-content: center; + width: 20px; height: 20px; + font-size: 1rem; + background: var(--grad-brand); + -webkit-background-clip: text; + background-clip: text; + color: transparent; +} +.nav-links { + display: flex; + align-items: center; + gap: 1.5rem; +} +.nav-links a { + font-size: 0.93rem; + color: var(--text-muted); + transition: color .15s ease; +} +.nav-links a:hover { color: var(--text); } +.nav-github { + display: inline-flex; + align-items: center; + justify-content: center; + width: 36px; height: 36px; + border: 1px solid var(--border); + border-radius: var(--radius-sm); + color: var(--text-muted); +} +.nav-github:hover { + color: var(--text); + border-color: var(--accent); +} + +@media (max-width: 720px) { + .nav-links a:not(.nav-github) { display: none; } +} + +/* ============================================================ + HERO + ============================================================ */ +.hero { + padding: 5.5rem 0 5rem; + text-align: center; + position: relative; +} +.hero-inner { max-width: 880px; margin: 0 auto; } + +.hero-eyebrow { + display: inline-flex; + align-items: center; + gap: 0.5rem; + background: rgba(16, 185, 129, 0.08); + border: 1px solid rgba(16, 185, 129, 0.3); + color: var(--accent-hot); + font-family: var(--mono); + font-size: 0.8rem; + padding: 0.35rem 0.9rem; + border-radius: 999px; + margin-bottom: 1.5rem; +} +.dot { + display: inline-block; + width: 6px; height: 6px; + border-radius: 50%; + background: var(--accent-hot); +} +.dot-pulse { box-shadow: 0 0 0 0 rgba(16, 185, 129, 0.7); animation: pulse 2s infinite; } +@keyframes pulse { + 0% { box-shadow: 0 0 0 0 rgba(16, 185, 129, 0.6); } + 70% { box-shadow: 0 0 0 10px rgba(16, 185, 129, 0); } + 100% { box-shadow: 0 0 0 0 rgba(16, 185, 129, 0); } +} + +.hero-title { + margin: 0 0 1.25rem; + font-weight: 800; + letter-spacing: -0.04em; + line-height: 1; +} +.display-wordmark { + font-family: var(--display); + font-size: clamp(3rem, 11vw, 6.5rem); + background: linear-gradient(180deg, #fff 0%, #c5c5d3 80%, #8a8a9d 100%); + -webkit-background-clip: text; + background-clip: text; + color: transparent; + display: inline-block; +} + +.hero-tag { + font-size: clamp(1.05rem, 1.6vw, 1.25rem); + color: var(--text-soft); + margin: 0 auto 2.25rem; + max-width: 720px; +} +.hero-tag strong { color: #fff; } +.hero-tag-pop { + display: inline-block; + margin-top: 0.5rem; + padding: 0.2rem 0.6rem; + background: rgba(168, 85, 247, 0.1); + border-left: 2px solid var(--violet); + color: #d8b4fe; + font-family: var(--mono); + font-size: 0.85em; +} + +.install-block { + background: linear-gradient(180deg, rgba(22, 22, 40, 0.95) 0%, rgba(18, 18, 31, 0.95) 100%); + border: 1px solid var(--border); + border-radius: var(--radius); + margin: 0 auto 1.75rem; + max-width: 760px; + text-align: left; + position: relative; + box-shadow: var(--shadow); + overflow: hidden; +} +.install-bar { + display: flex; + align-items: center; + gap: 0.75rem; + padding: 0.55rem 0.9rem; + background: rgba(0, 0, 0, 0.3); + border-bottom: 1px solid var(--border); +} +.install-dots { display: inline-flex; gap: 0.4rem; } +.install-dots i { + width: 11px; height: 11px; + border-radius: 50%; + background: var(--surface-2); + display: block; +} +.install-dots i:nth-child(1) { background: #ff5f57; } +.install-dots i:nth-child(2) { background: #febc2e; } +.install-dots i:nth-child(3) { background: #28c840; } +.install-title { + flex: 1; text-align: center; + font-family: var(--mono); font-size: 0.78rem; + color: var(--text-dim); letter-spacing: 0.04em; +} +.install-block pre { + margin: 0; + padding: 1rem 1.2rem; + color: var(--text); + white-space: pre-wrap; + word-break: break-all; + font-size: 0.92rem; + min-height: 2.5rem; +} +.install-block .prompt { color: var(--accent-hot); user-select: none; } +.cursor { color: var(--accent-hot); animation: blink 1s steps(2) infinite; } +@keyframes blink { 50% { opacity: 0; } } +.install-block .copy { + position: absolute; top: 0.5rem; right: 0.6rem; + background: rgba(0, 0, 0, 0.4); + border: 1px solid var(--border); + color: var(--text-muted); + font-family: var(--mono); + font-size: 0.72rem; padding: 0.25rem 0.55rem; + border-radius: 4px; + cursor: pointer; + transition: all .15s ease; +} +.install-block .copy:hover { color: var(--accent-hot); border-color: var(--accent); } +.install-block .copy.copied { color: var(--accent-hot); border-color: var(--accent); } + +.stats-row { + display: flex; flex-wrap: wrap; + gap: 0.6rem; justify-content: center; + margin: 0 0 2rem; +} +.stat-chip { + display: inline-flex; + align-items: baseline; + gap: 0.5rem; + background: var(--surface); + border: 1px solid var(--border); + border-radius: 999px; + padding: 0.5rem 1.1rem; + font-size: 0.88rem; + color: var(--text-muted); +} +.stat-chip .num { + font-family: var(--mono); + font-weight: 700; + color: var(--text); + font-size: 1.05rem; + font-variant-numeric: tabular-nums; +} +.stat-chip.stat-kev { border-color: rgba(239, 68, 68, 0.3); } +.stat-chip.stat-kev .num { color: var(--danger); } +.stat-chip.stat-vfy { border-color: rgba(16, 185, 129, 0.4); } +.stat-chip.stat-vfy .num { color: var(--accent-hot); } + +.cta-row { + display: flex; gap: 0.75rem; + justify-content: center; + flex-wrap: wrap; +} +.btn { + display: inline-flex; + align-items: center; + gap: 0.4rem; + padding: 0.7rem 1.3rem; + border-radius: var(--radius-sm); + font-family: var(--sans); + font-size: 0.95rem; + font-weight: 500; + border: 1px solid var(--border); + color: var(--text); + background: var(--surface); + cursor: pointer; + transition: all .2s ease; +} +.btn:hover { + background: var(--surface-2); + border-color: var(--text-muted); + color: #fff; + text-decoration: none; + transform: translateY(-1px); +} +.btn-primary { + background: var(--grad-brand); + border-color: transparent; + color: #04201a; + font-weight: 600; + box-shadow: 0 6px 20px -6px rgba(16, 185, 129, 0.5); +} +.btn-primary:hover { + filter: brightness(1.1); + color: #04201a; + transform: translateY(-1px); + box-shadow: 0 10px 30px -6px rgba(16, 185, 129, 0.6); +} +.btn-ghost { background: transparent; } +.btn code { background: transparent; border: none; color: inherit; padding: 0; } + +.hero-warn { + margin-top: 1.75rem; + font-size: 0.83rem; + color: var(--text-dim); +} +.hero-warn a { color: var(--text-muted); border-bottom: 1px dotted var(--text-dim); } + +/* ============================================================ + TRUST STRIP + ============================================================ */ +.trust-strip { + padding: 2rem 0; + background: rgba(0, 0, 0, 0.3); + border-top: 1px solid var(--border-soft); + border-bottom: 1px solid var(--border-soft); +} +.trust-row { + display: flex; align-items: center; + gap: 1.5rem; flex-wrap: wrap; + justify-content: center; +} +.trust-label { + font-size: 0.78rem; + color: var(--text-dim); + text-transform: uppercase; + letter-spacing: 0.12em; + font-weight: 500; +} +.trust-items { + list-style: none; margin: 0; padding: 0; + display: flex; flex-wrap: wrap; + gap: 0.5rem 1.5rem; +} +.trust-items li { + font-family: var(--mono); + font-size: 0.83rem; + color: var(--text-soft); + letter-spacing: 0.02em; +} + +/* ============================================================ + SECTIONS (common) + ============================================================ */ +.section { padding: 6rem 0; position: relative; } +.section-head { margin-bottom: 3rem; max-width: 760px; } +.section-head h2 { + font-family: var(--display); + font-size: clamp(1.9rem, 4vw, 2.6rem); + letter-spacing: -0.02em; + line-height: 1.1; + margin: 0.5rem 0 1rem; + color: var(--text); + font-weight: 700; +} +.section-head .lead { + color: var(--text-soft); + font-size: 1.05rem; + margin: 0; + max-width: 680px; +} +.section-tag { + display: inline-block; + font-family: var(--mono); + font-size: 0.72rem; + text-transform: uppercase; + letter-spacing: 0.18em; + color: var(--accent-hot); + padding: 0.3rem 0.7rem; + border: 1px solid rgba(16, 185, 129, 0.3); + border-radius: 999px; + margin-bottom: 0.75rem; +} + +/* scroll reveal */ +.reveal { + opacity: 0; + transform: translateY(24px); + transition: opacity .8s ease, transform .8s ease; +} +.reveal.in { + opacity: 1; + transform: translateY(0); +} +@media (prefers-reduced-motion: reduce) { + .reveal { opacity: 1; transform: none; transition: none; } +} + +/* ============================================================ + --EXPLAIN SHOWCASE + ============================================================ */ +.section-feature { + background: + radial-gradient(ellipse at top left, rgba(16, 185, 129, 0.06), transparent 50%), + var(--bg-2); + border-top: 1px solid var(--border-soft); +} +.terminal-shell { + background: #0a0a14; + border: 1px solid var(--border); + border-radius: var(--radius); + overflow: hidden; + box-shadow: var(--shadow-hi); + margin: 0 auto 2.5rem; + max-width: 920px; +} +.terminal-bar { + display: flex; + align-items: center; + gap: 0.75rem; + padding: 0.55rem 0.9rem; + background: rgba(0, 0, 0, 0.5); + border-bottom: 1px solid var(--border); +} +.terminal-body { + margin: 0; + padding: 1.5rem 1.75rem; + color: var(--text); + font-family: var(--mono); + font-size: 0.85rem; + line-height: 1.55; + white-space: pre-wrap; + min-height: 550px; +} +/* color classes that terminal output uses */ +.t-header { color: var(--accent-hot); } +.t-rule { color: var(--border); } +.t-mod { color: #fff; font-weight: 700; } +.t-cve { color: var(--violet); } +.t-summary { color: var(--text-soft); } +.t-label { color: var(--text-dim); } +.t-cwe { color: var(--accent); } +.t-tech { color: var(--accent-2); } +.t-kev-yes { color: var(--danger); font-weight: 700; } +.t-vuln { color: var(--warning); font-weight: 700; } +.t-ok { color: var(--accent); font-weight: 700; } +.t-i { color: var(--text-muted); } +.t-plus { color: var(--accent-hot); } +.t-check { color: var(--accent); } +.t-dot { color: var(--text-dim); } + +.explain-annotations { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 1.25rem; + max-width: 920px; + margin: 0 auto; +} +.annotation { + display: flex; + gap: 0.85rem; + background: var(--surface); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: 1.1rem 1.2rem; + transition: border-color .2s ease, transform .2s ease; +} +.annotation:hover { + border-color: var(--accent); + transform: translateY(-2px); +} +.anno-num { + flex-shrink: 0; + width: 28px; height: 28px; + border-radius: 50%; + background: var(--grad-brand); + color: #04201a; + font-weight: 700; + font-family: var(--mono); + display: flex; align-items: center; justify-content: center; + font-size: 0.85rem; +} +.annotation strong { color: var(--text); display: block; margin-bottom: 0.25rem; } +.annotation p { margin: 0; color: var(--text-muted); font-size: 0.9rem; } +@media (max-width: 700px) { + .explain-annotations { grid-template-columns: 1fr; } + .terminal-body { font-size: 0.78rem; padding: 1rem 1.1rem; } +} + +/* ============================================================ + BENTO GRID + ============================================================ */ +.section-bento { + background: + radial-gradient(ellipse at bottom right, rgba(168, 85, 247, 0.05), transparent 60%); +} +.bento { + display: grid; + grid-template-columns: repeat(3, 1fr); + grid-auto-rows: minmax(220px, auto); + gap: 1.25rem; +} +.bento-card { + background: var(--surface); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: 1.5rem 1.6rem; + position: relative; + overflow: hidden; + transition: border-color .25s ease, transform .25s ease, box-shadow .25s ease; +} +.bento-card::before { + content: ""; + position: absolute; + inset: 0; + background: linear-gradient(135deg, rgba(16, 185, 129, 0.05), transparent 50%); + opacity: 0; + transition: opacity .25s ease; + pointer-events: none; +} +.bento-card:hover { + border-color: var(--accent); + transform: translateY(-3px); + box-shadow: var(--shadow-hi); +} +.bento-card:hover::before { opacity: 1; } + +.bento-lg { grid-column: span 2; } +.bento-icon { + font-size: 1.5rem; + margin-bottom: 0.6rem; + display: inline-block; + width: 38px; height: 38px; + border-radius: var(--radius-sm); + background: var(--surface-2); + display: flex; align-items: center; justify-content: center; +} +.bento-card h3 { + font-family: var(--display); + font-size: 1.2rem; + margin: 0 0 0.5rem; + color: var(--text); + font-weight: 600; +} +.bento-card p { + color: var(--text-muted); + font-size: 0.93rem; + margin: 0 0 0.75rem; +} +.bento-card.bento-kev { border-color: rgba(239, 68, 68, 0.3); } +.bento-card.bento-kev .bento-icon { color: var(--danger); background: rgba(239, 68, 68, 0.1); } +.bento-card.bento-kev:hover { border-color: var(--danger); box-shadow: 0 20px 60px -10px rgba(239, 68, 68, 0.2); } +.bento-card.bento-vfy { border-color: rgba(16, 185, 129, 0.35); } +.bento-card.bento-vfy .bento-icon { color: var(--accent-hot); background: rgba(16, 185, 129, 0.1); font-weight: 800; } +.bento-card.bento-vfy:hover { border-color: var(--accent); box-shadow: 0 20px 60px -10px rgba(16, 185, 129, 0.25); } + +.bento-code { + background: var(--bg-2); + border: 1px solid var(--border-soft); + border-radius: var(--radius-sm); + padding: 0.75rem 0.9rem; + font-size: 0.78rem; + color: var(--text-soft); + margin: 0.75rem 0 0; + white-space: pre; + overflow-x: auto; +} + +.rule-cov { display: flex; flex-direction: column; gap: 0.5rem; } +.rule-row { + display: grid; + grid-template-columns: 60px 1fr 50px; + align-items: center; + gap: 0.6rem; + font-family: var(--mono); + font-size: 0.78rem; +} +.rule-row span:first-child { color: var(--text-muted); } +.rule-row span:last-child { color: var(--text); text-align: right; } +.rule-bar { + height: 6px; + background: var(--bg-2); + border-radius: 3px; + overflow: hidden; + display: block; +} +.rule-bar i { + display: block; + height: 100%; + background: var(--grad-brand); + border-radius: 3px; + transition: width 1.2s cubic-bezier(.4, 0, .2, 1); +} + +@media (max-width: 920px) { + .bento { grid-template-columns: repeat(2, 1fr); } + .bento-lg { grid-column: span 2; } +} +@media (max-width: 620px) { + .bento { grid-template-columns: 1fr; } + .bento-lg { grid-column: span 1; } +} + +/* ============================================================ + MODULE CORPUS PILLS + ============================================================ */ +.corpus-h { + font-family: var(--display); + font-size: 1.15rem; + margin: 2rem 0 0.5rem; + display: flex; + align-items: center; + gap: 0.6rem; + font-weight: 600; + flex-wrap: wrap; +} +.corpus-h-sub { + font-family: var(--sans); + font-weight: 400; + font-size: 0.85rem; + color: var(--text-muted); + margin-left: auto; +} +.corpus-dot { + width: 10px; height: 10px; + border-radius: 50%; + display: inline-block; +} +.corpus-dot.green { background: var(--accent); box-shadow: 0 0 12px var(--accent); } +.corpus-dot.yellow { background: var(--warning); box-shadow: 0 0 12px var(--warning); } + +.pills { + display: flex; flex-wrap: wrap; + gap: 0.45rem; + margin: 0.75rem 0 1.5rem; +} +.pill { + display: inline-flex; + align-items: center; + font-family: var(--mono); + font-size: 0.83rem; + padding: 0.3rem 0.7rem; + border-radius: 999px; + border: 1px solid var(--border); + background: var(--surface); + color: var(--text-soft); + transition: all .15s ease; +} +.pill:hover { + transform: translateY(-1px); + border-color: var(--text-muted); + color: #fff; +} +.pill.green { + border-color: rgba(16, 185, 129, 0.3); + color: var(--accent-hot); + background: rgba(16, 185, 129, 0.05); +} +.pill.green:hover { border-color: var(--accent); } +.pill.yellow { + border-color: rgba(245, 158, 11, 0.3); + color: var(--warning); + background: rgba(245, 158, 11, 0.05); +} +.pill.yellow:hover { border-color: var(--warning); } +.pill.kev { + background: rgba(239, 68, 68, 0.08); + border-color: rgba(239, 68, 68, 0.4); + font-weight: 600; +} +.pill.kev.green { color: var(--accent-hot); } +.pill.kev.yellow { color: var(--warning); } +.pill.kev:hover { border-color: var(--danger); } + +.corpus-foot { + margin-top: 1.5rem; + font-size: 0.88rem; + color: var(--text-muted); +} + +/* ============================================================ + AUDIENCE + ============================================================ */ +.section-audience { + background: + radial-gradient(ellipse at top right, rgba(96, 165, 250, 0.04), transparent 50%); + border-top: 1px solid var(--border-soft); +} +.audience-grid { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 1.25rem; +} +.audience-card { + background: var(--surface); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: 1.5rem 1.6rem; + display: flex; + flex-direction: column; + transition: all .25s ease; +} +.audience-card:hover { + transform: translateY(-3px); + border-color: currentColor; + box-shadow: var(--shadow); +} +.audience-icon { font-size: 1.5rem; margin-bottom: 0.5rem; } +.audience-card h3 { + font-family: var(--display); + font-size: 1.2rem; + margin: 0 0 0.5rem; + color: var(--text); + font-weight: 600; +} +.audience-card p { color: var(--text-muted); font-size: 0.93rem; margin: 0 0 1.25rem; } +.audience-link { + margin-top: auto; + align-self: flex-start; + font-family: var(--mono); + font-size: 0.83rem; + padding: 0.45rem 0.85rem; + border: 1px solid currentColor; + border-radius: var(--radius-sm); +} +.audience-red { color: #f87171; } +.audience-red .audience-link { color: #f87171; } +.audience-blue { color: #60a5fa; } +.audience-blue .audience-link { color: #60a5fa; } +.audience-gray { color: var(--text-muted); } +.audience-gray .audience-link { color: var(--text-muted); } +.audience-purple { color: var(--violet); } +.audience-purple .audience-link { color: var(--violet); } + +@media (max-width: 700px) { .audience-grid { grid-template-columns: 1fr; } } + +/* ============================================================ + HONESTY CALLOUT + ============================================================ */ +.section-callout { + padding: 4rem 0; +} +.callout { + background: + linear-gradient(135deg, rgba(16, 185, 129, 0.07), rgba(6, 182, 212, 0.04)), + var(--surface); + border: 1px solid rgba(16, 185, 129, 0.3); + border-radius: var(--radius-lg); + padding: 2rem 2.25rem; + display: flex; + gap: 1.5rem; + align-items: flex-start; + box-shadow: 0 20px 50px -20px rgba(16, 185, 129, 0.2); +} +.callout-mark { + width: 48px; height: 48px; + border-radius: 50%; + background: var(--grad-brand); + color: #04201a; + font-size: 1.3rem; + font-weight: 800; + display: flex; align-items: center; justify-content: center; + flex-shrink: 0; +} +.callout h3 { + font-family: var(--display); + font-size: 1.3rem; + margin: 0 0 0.5rem; + color: var(--text); + font-weight: 700; +} +.callout p { + color: var(--text-soft); + margin: 0; + font-size: 0.96rem; +} +.callout strong { color: var(--accent-hot); } +@media (max-width: 600px) { + .callout { flex-direction: column; gap: 1rem; padding: 1.5rem; } +} + +/* ============================================================ + QUICKSTART TABS + ============================================================ */ +.tabs { + display: flex; gap: 0.4rem; + margin: 0 0 1rem; + border-bottom: 1px solid var(--border); + flex-wrap: wrap; +} +.tab { + background: transparent; + border: none; + font-family: var(--mono); + font-size: 0.9rem; + color: var(--text-muted); + padding: 0.7rem 1.1rem; + cursor: pointer; + border-bottom: 2px solid transparent; + margin-bottom: -1px; + transition: all .15s ease; +} +.tab:hover { color: var(--text); } +.tab.active { + color: var(--accent-hot); + border-bottom-color: var(--accent); +} +.tab-panel { display: none; } +.tab-panel.active { display: block; } + +pre.code { + background: var(--bg-2); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: 1.1rem 1.3rem; + overflow-x: auto; + font-size: 0.88rem; + line-height: 1.6; + color: var(--text); + margin: 0; +} +pre.code .cmt { color: var(--text-dim); font-style: italic; } +pre.code .prompt { color: var(--accent-hot); user-select: none; } + +/* ============================================================ + TIMELINE / ROADMAP + ============================================================ */ +.section-timeline { + background: + radial-gradient(ellipse at center, rgba(168, 85, 247, 0.03), transparent 60%); + border-top: 1px solid var(--border-soft); +} +.timeline { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 1.25rem; +} +.tl-col { + background: var(--surface); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: 1.5rem 1.4rem; + position: relative; + overflow: hidden; +} +.tl-col::before { + content: ""; + position: absolute; + top: 0; left: 0; + width: 4px; height: 100%; +} +.tl-shipped::before { background: var(--accent); } +.tl-active::before { background: var(--warning); } +.tl-next::before { background: var(--violet); } +.tl-tag { + display: inline-block; + font-family: var(--mono); + font-size: 0.7rem; + text-transform: uppercase; + letter-spacing: 0.14em; + padding: 0.25rem 0.7rem; + border-radius: 999px; + margin-bottom: 1rem; +} +.tl-shipped .tl-tag { background: rgba(16, 185, 129, 0.1); color: var(--accent-hot); } +.tl-active .tl-tag { background: rgba(245, 158, 11, 0.1); color: var(--warning); } +.tl-next .tl-tag { background: rgba(168, 85, 247, 0.1); color: var(--violet); } +.tl-col ul { list-style: none; padding: 0; margin: 0; } +.tl-col li { + padding: 0.5rem 0; + font-size: 0.9rem; + color: var(--text-soft); + border-bottom: 1px solid var(--border-soft); +} +.tl-col li:last-child { border-bottom: none; } +.tl-col li strong { color: var(--text); } +.tl-foot { margin-top: 1.5rem; color: var(--text-muted); font-size: 0.9rem; } + +@media (max-width: 880px) { + .timeline { grid-template-columns: 1fr; } +} + +/* ============================================================ + FOOTER + ============================================================ */ +.footer { + margin-top: 4rem; + padding-top: 3rem; + border-top: 1px solid var(--border-soft); + background: linear-gradient(180deg, transparent 0%, rgba(168, 85, 247, 0.04) 100%); +} +.footer-inner { + display: grid; + grid-template-columns: 1.4fr 1fr 1fr 1fr; + gap: 2rem; + padding-bottom: 3rem; +} +.footer-brand { + font-family: var(--mono); + font-size: 1rem; + font-weight: 700; + letter-spacing: 0.05em; + color: var(--text); + display: inline-flex; + align-items: center; + gap: 0.5rem; + margin-bottom: 0.75rem; +} +.footer-tag { + color: var(--text-muted); + font-size: 0.9rem; + max-width: 320px; +} +.footer-col h4 { + font-size: 0.78rem; + text-transform: uppercase; + letter-spacing: 0.14em; + color: var(--text-dim); + margin: 0.4rem 0 0.9rem; +} +.footer-col ul { list-style: none; padding: 0; margin: 0; } +.footer-col li { margin-bottom: 0.6rem; } +.footer-col a { + color: var(--text-muted); + font-size: 0.93rem; +} +.footer-col a:hover { color: var(--text); } +.footer-bottom { + border-top: 1px solid var(--border-soft); + padding: 2rem 1.5rem; + color: var(--text-dim); + font-size: 0.86rem; +} +.footer-bottom p { margin: 0.5rem 0; } +.footer-meta { color: var(--text-muted); } + +@media (max-width: 800px) { + .footer-inner { grid-template-columns: 1fr 1fr; } +} +@media (max-width: 500px) { + .footer-inner { grid-template-columns: 1fr; } +} + +/* selection highlight */ +::selection { background: rgba(16, 185, 129, 0.3); color: #fff; } + +/* ═══════════════════ OVERWATCH additions ═══════════════════ */ + +.phone { + display: block; max-width: 100%; height: auto; + border-radius: 30px; + border: 1px solid var(--border); + background: #000; + box-shadow: 0 40px 90px -25px rgba(0,0,0,.75), 0 0 0 1px rgba(255,255,255,.03) inset; +} +.phone-hero { display: flex; justify-content: center; margin: 2.6rem 0 0.4rem; } +.phone-hero .phone { width: 300px; } + +.feature-split { + display: grid; grid-template-columns: minmax(0, 300px) 1fr; + gap: 3.2rem; align-items: center; margin-top: 2.6rem; +} +.feature-split .phone-frame { display: flex; justify-content: center; } +.feature-split .phone { width: 285px; } +@media (max-width: 860px) { + .feature-split { grid-template-columns: 1fr; gap: 2.2rem; justify-items: center; } + .feature-split .phone-frame { order: -1; } + .phone-hero .phone, .feature-split .phone { width: 256px; } +} + +/* source-color legend dots (inline in annotation text) */ +.legend-dot { + display: inline-block; width: 9px; height: 9px; border-radius: 50%; + margin: 0 3px 0 6px; vertical-align: middle; +} +.legend-dot.red { background: #ef4444; box-shadow: 0 0 8px #ef4444; } +.legend-dot.blue { background: #3b82f6; box-shadow: 0 0 8px #3b82f6; } +.legend-dot.purple { background: #a855f7; box-shadow: 0 0 8px #a855f7; } + +/* threat tiers */ +.tiers { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1rem; margin-top: 2.2rem; } +@media (max-width: 720px) { .tiers { grid-template-columns: repeat(2, 1fr); } } +.tier { + background: var(--surface); border: 1px solid var(--border); + border-top: 3px solid var(--tier-c, var(--accent)); + border-radius: var(--radius-lg); padding: 1.4rem 1.25rem; +} +.tier-range { font-family: var(--mono); font-size: .82rem; color: var(--text-muted); } +.tier-name { font-family: var(--mono); font-weight: 700; font-size: 1.3rem; letter-spacing: .06em; margin: .1rem 0 .55rem; color: var(--tier-c, var(--accent)); } +.tier p { font-size: .9rem; color: var(--text-soft); margin: 0; line-height: 1.5; } +.tier-green { --tier-c: #22c55e; } +.tier-yellow { --tier-c: #eab308; } +.tier-orange { --tier-c: #f97316; } +.tier-red { --tier-c: #ef4444; } + +.bento-card.bento-cam { border-color: rgba(239, 68, 68, .28); } + +/* download steps: stack the timeline columns inside the split */ +.dl-steps { grid-template-columns: 1fr !important; gap: 1rem; } +.dl-steps .tl-col { margin: 0; } + +/* VIGIL: logo mark in nav/footer (img instead of a glyph) */ +.nav-logo { display: inline-block; vertical-align: middle; border-radius: 7px; } +.nav-brand .nav-logo { margin-right: 3px; }