OOKNET                             [ /  search the index  ]  
──────────────────────────────────────────────────────────────────────────────────────
══════════════════════════════════════════════════════════════════════════════════════
OOKNET   [ /  search  ]  
────────────────────────────────────────────────
════════════════════════════════════════════════
 
HASH      fbd8b09e1fb3
DATE      2025-08-11
SUBJECT   web: 404 page
FILES     1 CHANGED
HASH      fbd8b09e1fb3
DATE      2025-08-11
SUBJECT   web: 404 page
FILES     1 CHANGED
 

diff --git a/web/src/pages/404.astro b/web/src/pages/404.astro
new file mode 100644
index 0000000..3f843c0
--- /dev/null
+++ b/web/src/pages/404.astro
@@ -0,0 +1,114 @@
+---
+import PageLayout from "../components/PageLayout.astro";
+---
+
+<PageLayout title="404">
+  <div class="error-container">
+    <div class="error-content">
+      <h2 class="error-title">Page Not Found</h2>
+      <p class="error-message">
+        The page you're looking for doesn't exist or has been moved.
+      </p>
+      <div class="error-actions">
+        <a href="/" class="btn-primary">Go Home</a>
+      </div>
+    </div>
+  </div>
+</PageLayout>
+
+<style>
+  .error-container {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    min-height: 60vh;
+    padding: 40px 20px;
+  }
+
+  .error-content {
+    text-align: center;
+    max-width: 500px;
+  }
+
+  .error-code {
+    font-size: 8rem;
+    font-weight: bold;
+    color: var(--highlight-color);
+    margin: 0;
+    line-height: 1;
+  }
+
+  .error-title {
+    font-size: 2rem;
+    color: var(--text-primary);
+    margin: 20px 0 10px 0;
+    font-weight: 600;
+  }
+
+  .error-message {
+    font-size: 1.1rem;
+    color: var(--text-secondary);
+    margin: 0 0 30px 0;
+    line-height: 1.5;
+  }
+
+  .error-actions {
+    display: flex;
+    gap: 15px;
+    justify-content: center;
+    flex-wrap: wrap;
+  }
+
+  .btn-primary,
+  .btn-secondary {
+    padding: 12px 24px;
+    border-radius: 6px;
+    text-decoration: none;
+    font-weight: 600;
+    transition: all 0.2s ease;
+    display: inline-block;
+  }
+
+  .btn-primary {
+    background-color: var(--highlight-color);
+    color: var(--bg-primary);
+  }
+
+  .btn-primary:hover {
+    background-color: #b8860b;
+    transform: translateY(-1px);
+  }
+
+  .btn-secondary {
+    background-color: transparent;
+    color: var(--text-primary);
+    border: 2px solid var(--border-color);
+  }
+
+  .btn-secondary:hover {
+    border-color: var(--highlight-color);
+    color: var(--highlight-color);
+    transform: translateY(-1px);
+  }
+
+  @media (max-width: 768px) {
+    .error-code {
+      font-size: 6rem;
+    }
+
+    .error-title {
+      font-size: 1.5rem;
+    }
+
+    .error-actions {
+      flex-direction: column;
+      align-items: center;
+    }
+
+    .btn-primary,
+    .btn-secondary {
+      min-width: 200px;
+    }
+  }
+</style>
+

diff --git a/web/src/pages/404.astro b/web/s
rc/pages/404.astro
new file mode 100644
index 0000000..3f843c0
--- /dev/null
+++ b/web/src/pages/404.astro
@@ -0,0 +1,114 @@
+---
+import PageLayout from "../components/PageL
ayout.astro";
+---
+
+<PageLayout title="404">
+  <div class="error-container">
+    <div class="error-content">
+      <h2 class="error-title">Page Not Foun
d</h2>
+      <p class="error-message">
+        The page you're looking for doesn't
 exist or has been moved.
+      </p>
+      <div class="error-actions">
+        <a href="/" class="btn-primary">Go 
Home</a>
+      </div>
+    </div>
+  </div>
+</PageLayout>
+
+<style>
+  .error-container {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    min-height: 60vh;
+    padding: 40px 20px;
+  }
+
+  .error-content {
+    text-align: center;
+    max-width: 500px;
+  }
+
+  .error-code {
+    font-size: 8rem;
+    font-weight: bold;
+    color: var(--highlight-color);
+    margin: 0;
+    line-height: 1;
+  }
+
+  .error-title {
+    font-size: 2rem;
+    color: var(--text-primary);
+    margin: 20px 0 10px 0;
+    font-weight: 600;
+  }
+
+  .error-message {
+    font-size: 1.1rem;
+    color: var(--text-secondary);
+    margin: 0 0 30px 0;
+    line-height: 1.5;
+  }
+
+  .error-actions {
+    display: flex;
+    gap: 15px;
+    justify-content: center;
+    flex-wrap: wrap;
+  }
+
+  .btn-primary,
+  .btn-secondary {
+    padding: 12px 24px;
+    border-radius: 6px;
+    text-decoration: none;
+    font-weight: 600;
+    transition: all 0.2s ease;
+    display: inline-block;
+  }
+
+  .btn-primary {
+    background-color: var(--highlight-color
);
+    color: var(--bg-primary);
+  }
+
+  .btn-primary:hover {
+    background-color: #b8860b;
+    transform: translateY(-1px);
+  }
+
+  .btn-secondary {
+    background-color: transparent;
+    color: var(--text-primary);
+    border: 2px solid var(--border-color);
+  }
+
+  .btn-secondary:hover {
+    border-color: var(--highlight-color);
+    color: var(--highlight-color);
+    transform: translateY(-1px);
+  }
+
+  @media (max-width: 768px) {
+    .error-code {
+      font-size: 6rem;
+    }
+
+    .error-title {
+      font-size: 1.5rem;
+    }
+
+    .error-actions {
+      flex-direction: column;
+      align-items: center;
+    }
+
+    .btn-primary,
+    .btn-secondary {
+      min-width: 200px;
+    }
+  }
+</style>
+
 
[ BACK TO LOG ]
──────────────────────────────────────────────────────────────────────────────────────
OOKNET
────────────────────────────────────────────────
OOKNET