diff --git a/apps/web/public/research-pages/page-1.webp b/apps/web/public/research-pages/page-1.webp
index ab99dd1..6c8cfec 100644
Binary files a/apps/web/public/research-pages/page-1.webp and b/apps/web/public/research-pages/page-1.webp differ
diff --git a/apps/web/public/research-pages/page-2.webp b/apps/web/public/research-pages/page-2.webp
index d61d8a0..a06c979 100644
Binary files a/apps/web/public/research-pages/page-2.webp and b/apps/web/public/research-pages/page-2.webp differ
diff --git a/apps/web/public/research-pages/page-3.webp b/apps/web/public/research-pages/page-3.webp
index 20bef4e..654e650 100644
Binary files a/apps/web/public/research-pages/page-3.webp and b/apps/web/public/research-pages/page-3.webp differ
diff --git a/apps/web/public/research-pages/page-4.webp b/apps/web/public/research-pages/page-4.webp
index 7b3b332..c33dda2 100644
Binary files a/apps/web/public/research-pages/page-4.webp and b/apps/web/public/research-pages/page-4.webp differ
diff --git a/apps/web/public/research-pages/page-5.webp b/apps/web/public/research-pages/page-5.webp
index e4b058e..f6298f0 100644
Binary files a/apps/web/public/research-pages/page-5.webp and b/apps/web/public/research-pages/page-5.webp differ
diff --git a/apps/web/public/research-pages/page-6.webp b/apps/web/public/research-pages/page-6.webp
index 9cda451..3b562a6 100644
Binary files a/apps/web/public/research-pages/page-6.webp and b/apps/web/public/research-pages/page-6.webp differ
diff --git a/apps/web/public/research-pages/page-7.webp b/apps/web/public/research-pages/page-7.webp
index ed381cd..c5c980e 100644
Binary files a/apps/web/public/research-pages/page-7.webp and b/apps/web/public/research-pages/page-7.webp differ
diff --git a/apps/web/public/research-pages/page-8.webp b/apps/web/public/research-pages/page-8.webp
new file mode 100644
index 0000000..1172fe9
Binary files /dev/null and b/apps/web/public/research-pages/page-8.webp differ
diff --git a/apps/web/public/research.pdf b/apps/web/public/research.pdf
index e51e2a3..41e08a7 100644
Binary files a/apps/web/public/research.pdf and b/apps/web/public/research.pdf differ
diff --git a/apps/web/src/components/layout/Footer.tsx b/apps/web/src/components/layout/Footer.tsx
index df73b56..dc9e09e 100644
--- a/apps/web/src/components/layout/Footer.tsx
+++ b/apps/web/src/components/layout/Footer.tsx
@@ -228,8 +228,8 @@ export const Footer: React.FC = () => {
{/* ============================================================
MIDDLE SECTION: MONUMENTAL "HORIZON" DISPLAY TITLE
============================================================ */}
-
-
+
+
Horizon
diff --git a/apps/web/src/index.css b/apps/web/src/index.css
index e16d3b4..6f2af43 100644
--- a/apps/web/src/index.css
+++ b/apps/web/src/index.css
@@ -486,13 +486,16 @@
h2#lifecycle-heading {
font-size: 2.75rem;
}
+.footer-horizon-title,
h1.text-\[17vw\].sm\:text-\[16vw\].md\:text-\[15vw\].lg\:text-\[14vw\].font-black.uppercase.tracking-tighter.leading-none.text-transparent.bg-clip-text.bg-gradient-to-b.from-white.via-zinc-200.to-zinc-600\/30.text-center.sm\:text-left.drop-shadow-\[0_4px_30px_rgba\(255\,255\,255\,0\.06\)\] {
- color: transparent;
- background: url(/public/horizon.jpg);
- background-clip: text;
+ color: transparent !important;
+ -webkit-text-fill-color: transparent !important;
+ background: url(/horizon.jpg) !important;
+ background-clip: text !important;
+ -webkit-background-clip: text !important;
object-fit: cover;
- background-position: 40% 60%;
- background-size: cover;
+ background-position: 40% var(--horizon-footer-y, 50%) !important;
+ background-size: cover !important;
filter: brightness(0.95) contrast(2.5) drop-shadow(0px 0px 7rem #092192);
}
.minimalblankscreen.text-center.space-y-2.mb-5.sm\:mb-7.shrink-0 {
diff --git a/apps/web/src/pages/PatentsPage.tsx b/apps/web/src/pages/PatentsPage.tsx
index 89c2a4f..7402daa 100644
--- a/apps/web/src/pages/PatentsPage.tsx
+++ b/apps/web/src/pages/PatentsPage.tsx
@@ -1,6 +1,6 @@
import React from 'react';
import { Link } from 'react-router';
-import { ArrowLeft } from 'lucide-react';
+import { ArrowLeft, Download } from 'lucide-react';
import { cn } from '../lib/utils';
const PAGES = [
@@ -11,6 +11,7 @@ const PAGES = [
{ pageNumber: 5, src: '/research-pages/page-5.webp' },
{ pageNumber: 6, src: '/research-pages/page-6.webp' },
{ pageNumber: 7, src: '/research-pages/page-7.webp' },
+ { pageNumber: 8, src: '/research-pages/page-8.webp' },
];
interface PatentsPageProps {
@@ -34,9 +35,19 @@ export const PatentsPage: React.FC = ({ className }) => {
Return to Home
-
- Horizon: Dependency-Aware Autonomous Infrastructure Recovery • Research Article
-
+
+
+ Horizon: Dependency-Aware Autonomous Infrastructure Recovery • Research Article (8 Pages)
+
+
+
+ Download PDF
+
+
{/* Unified Continuous Article Sheet — Rendered Pages One After Other Without Spacing */}
diff --git a/mcpserver/app/models.py b/mcpserver/app/models.py
index 6c55bc0..b4d5215 100644
--- a/mcpserver/app/models.py
+++ b/mcpserver/app/models.py
@@ -55,6 +55,7 @@ class McpToolResult(BaseModel):
NodeType = Literal["database", "cache", "application", "gateway"]
NodeStatus = Literal["healthy", "degraded", "down", "recovering"]
+StepRisk = Literal["low", "medium", "high"]
PlaybookAction = Literal[
"database_failover",
diff --git a/research.pdf b/research.pdf
index e51e2a3..41e08a7 100644
Binary files a/research.pdf and b/research.pdf differ