Spaces:
Running
Running
i want to use this hugging face space in an agentic sofwtare style.. where user just connect their wordpress API and then the agent start doing all the SEO tasks on autopilot and showing tasks performed and results from google analytics in real time.. users can only interact with chat with the agent to ask for changes or any thing.. the interface should be dark in the style of bolt.new "check screenshot" with space gristek font
Browse files- README.md +8 -5
- analytics.html +66 -0
- components/footer.js +68 -0
- components/navbar.js +140 -0
- index.html +220 -19
- script.js +188 -0
- style.css +88 -18
README.md
CHANGED
|
@@ -1,10 +1,13 @@
|
|
| 1 |
---
|
| 2 |
-
title:
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
sdk: static
|
| 7 |
pinned: false
|
|
|
|
|
|
|
| 8 |
---
|
| 9 |
|
| 10 |
-
|
|
|
|
|
|
| 1 |
---
|
| 2 |
+
title: SEO Automaton Pro 🤖
|
| 3 |
+
colorFrom: purple
|
| 4 |
+
colorTo: red
|
| 5 |
+
emoji: 🐳
|
| 6 |
sdk: static
|
| 7 |
pinned: false
|
| 8 |
+
tags:
|
| 9 |
+
- deepsite-v3
|
| 10 |
---
|
| 11 |
|
| 12 |
+
# Welcome to your new DeepSite project!
|
| 13 |
+
This project was created with [DeepSite](https://huggingface.co/deepsite).
|
analytics.html
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html>
|
| 2 |
+
<html lang="en" class="dark">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="UTF-8">
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
+
<title>Analytics - SEO Automaton Pro</title>
|
| 7 |
+
<link rel="icon" type="image/x-icon" href="/static/favicon.ico">
|
| 8 |
+
<link rel="stylesheet" href="style.css">
|
| 9 |
+
<script src="https://cdn.tailwindcss.com"></script>
|
| 10 |
+
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
|
| 11 |
+
<script src="https://unpkg.com/feather-icons"></script>
|
| 12 |
+
<link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
| 13 |
+
<script>
|
| 14 |
+
tailwind.config = {
|
| 15 |
+
darkMode: 'class',
|
| 16 |
+
theme: {
|
| 17 |
+
extend: {
|
| 18 |
+
fontFamily: {
|
| 19 |
+
'space-grotesk': ['Space Grotesk', 'monospace'],
|
| 20 |
+
},
|
| 21 |
+
colors: {
|
| 22 |
+
primary: {
|
| 23 |
+
50: '#f0f9ff',
|
| 24 |
+
100: '#e0f2fe',
|
| 25 |
+
200: '#bae6fd',
|
| 26 |
+
300: '#7dd3fc',
|
| 27 |
+
400: '#38bdf8',
|
| 28 |
+
500: '#0ea5e9',
|
| 29 |
+
600: '#0284c7',
|
| 30 |
+
700: '#0369a1',
|
| 31 |
+
800: '#075985',
|
| 32 |
+
900: '#0c4a6e',
|
| 33 |
+
},
|
| 34 |
+
secondary: {
|
| 35 |
+
50: '#fdf4ff',
|
| 36 |
+
100: '#fae8ff',
|
| 37 |
+
200: '#f5d0fe',
|
| 38 |
+
300: '#f0abfc',
|
| 39 |
+
400: '#e879f9',
|
| 40 |
+
500: '#d946ef',
|
| 41 |
+
600: '#c026d3',
|
| 42 |
+
700: '#a21caf',
|
| 43 |
+
800: '#86198f',
|
| 44 |
+
900: '#701a75',
|
| 45 |
+
}
|
| 46 |
+
}
|
| 47 |
+
}
|
| 48 |
+
}
|
| 49 |
+
}
|
| 50 |
+
</script>
|
| 51 |
+
</head>
|
| 52 |
+
<body class="bg-gray-900 text-white font-space-grotesk min-h-screen flex flex-col">
|
| 53 |
+
<custom-navbar></custom-navbar>
|
| 54 |
+
|
| 55 |
+
<main class="flex-1 container mx-auto px-4 py-8">
|
| 56 |
+
<div class="flex items-center gap-3 mb-8">
|
| 57 |
+
<i data-feather="bar-chart-2" class="text-secondary-400"></i>
|
| 58 |
+
<h1 class="text-3xl md:text-4xl font-bold">Analytics Dashboard</h1>
|
| 59 |
+
</div>
|
| 60 |
+
|
| 61 |
+
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-8">
|
| 62 |
+
<!-- Traffic Overview -->
|
| 63 |
+
<div class="bg-gray-800 rounded-2xl p-6 border border-gray-700">
|
| 64 |
+
<h2 class="text-2xl font-semibold mb-{"ok":false,"message":"Request timeout: The AI model took too long to respond. Please try again with a simpler prompt or try a different model."}
|
| 65 |
+
</body>
|
| 66 |
+
</html>
|
components/footer.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class CustomFooter extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
this.attachShadow({ mode: 'open' });
|
| 4 |
+
this.shadowRoot.innerHTML = `
|
| 5 |
+
<style>
|
| 6 |
+
footer {
|
| 7 |
+
background: rgba(15, 23, 42, 0.8);
|
| 8 |
+
backdrop-filter: blur(10px);
|
| 9 |
+
border-top: 1px solid rgba(255, 255, 255, 0.1);
|
| 10 |
+
color: #94a3b8;
|
| 11 |
+
padding: 2rem;
|
| 12 |
+
text-align: center;
|
| 13 |
+
margin-top: auto;
|
| 14 |
+
}
|
| 15 |
+
|
| 16 |
+
.footer-content {
|
| 17 |
+
max-width: 1200px;
|
| 18 |
+
margin: 0 auto;
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
.footer-links {
|
| 22 |
+
display: flex;
|
| 23 |
+
justify-content: center;
|
| 24 |
+
gap: 2rem;
|
| 25 |
+
margin-bottom: 1rem;
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
.footer-link {
|
| 29 |
+
color: #94a3b8;
|
| 30 |
+
text-decoration: none;
|
| 31 |
+
transition: color 0.3s ease;
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
.footer-link:hover {
|
| 35 |
+
color: white;
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
.copyright {
|
| 39 |
+
font-size: 0.875rem;
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
@media (max-width: 768px) {
|
| 43 |
+
footer {
|
| 44 |
+
padding: 1.5rem 1rem;
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
.footer-links {
|
| 48 |
+
gap: 1rem;
|
| 49 |
+
flex-wrap: wrap;
|
| 50 |
+
}
|
| 51 |
+
}
|
| 52 |
+
</style>
|
| 53 |
+
<footer>
|
| 54 |
+
<div class="footer-content">
|
| 55 |
+
<div class="footer-links">
|
| 56 |
+
<a href="/privacy.html" class="footer-link">Privacy</a>
|
| 57 |
+
<a href="/terms.html" class="footer-link">Terms</a>
|
| 58 |
+
<a href="/support.html" class="footer-link">Support</a>
|
| 59 |
+
<a href="/docs.html" class="footer-link">Documentation</a>
|
| 60 |
+
</div>
|
| 61 |
+
<p class="copyright">© 2024 SEO Automaton Pro. All rights reserved.</p>
|
| 62 |
+
</div>
|
| 63 |
+
</footer>
|
| 64 |
+
`;
|
| 65 |
+
}
|
| 66 |
+
}
|
| 67 |
+
|
| 68 |
+
customElements.define('custom-footer', CustomFooter);
|
components/navbar.js
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class CustomNavbar extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
this.attachShadow({ mode: 'open' });
|
| 4 |
+
this.shadowRoot.innerHTML = `
|
| 5 |
+
<style>
|
| 6 |
+
@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&display=swap');
|
| 7 |
+
|
| 8 |
+
nav {
|
| 9 |
+
background: rgba(15, 23, 42, 0.8);
|
| 10 |
+
backdrop-filter: blur(10px);
|
| 11 |
+
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
|
| 12 |
+
padding: 1rem 2rem;
|
| 13 |
+
display: flex;
|
| 14 |
+
justify-content: space-between;
|
| 15 |
+
align-items: center;
|
| 16 |
+
position: sticky;
|
| 17 |
+
top: 0;
|
| 18 |
+
z-index: 1000;
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
.nav-container {
|
| 22 |
+
display: flex;
|
| 23 |
+
justify-content: space-between;
|
| 24 |
+
align-items: center;
|
| 25 |
+
width: 100%;
|
| 26 |
+
max-width: 1200px;
|
| 27 |
+
margin: 0 auto;
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
.logo {
|
| 31 |
+
background: linear-gradient(135deg, #38bdf8 0%, #e879f9 100%);
|
| 32 |
+
background-clip: text;
|
| 33 |
+
-webkit-background-clip: text;
|
| 34 |
+
-webkit-text-fill-color: transparent;
|
| 35 |
+
font-weight: 700;
|
| 36 |
+
font-size: 1.5rem;
|
| 37 |
+
}
|
| 38 |
+
|
| 39 |
+
.nav-links {
|
| 40 |
+
display: flex;
|
| 41 |
+
gap: 2rem;
|
| 42 |
+
list-style: none;
|
| 43 |
+
margin: 0;
|
| 44 |
+
padding: 0;
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
.nav-link {
|
| 48 |
+
color: #94a3b8;
|
| 49 |
+
text-decoration: none;
|
| 50 |
+
font-weight: 500;
|
| 51 |
+
transition: all 0.3s ease;
|
| 52 |
+
position: relative;
|
| 53 |
+
}
|
| 54 |
+
|
| 55 |
+
.nav-link:hover {
|
| 56 |
+
color: white;
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
.nav-link.active {
|
| 60 |
+
color: #38bdf8;
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
.nav-link::after {
|
| 64 |
+
content: '';
|
| 65 |
+
position: absolute;
|
| 66 |
+
bottom: -5px;
|
| 67 |
+
left: 0;
|
| 68 |
+
width: 0;
|
| 69 |
+
height: 2px;
|
| 70 |
+
background: linear-gradient(135deg, #38bdf8 0%, #e879f9 100%);
|
| 71 |
+
transition: width 0.3s ease;
|
| 72 |
+
}
|
| 73 |
+
|
| 74 |
+
.nav-link:hover::after,
|
| 75 |
+
.nav-link.active::after {
|
| 76 |
+
width: 100%;
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
+
.status-indicator {
|
| 80 |
+
display: flex;
|
| 81 |
+
align-items: center;
|
| 82 |
+
gap: 0.5rem;
|
| 83 |
+
padding: 0.5rem 1rem;
|
| 84 |
+
border-radius: 0.75rem;
|
| 85 |
+
font-size: 0.875rem;
|
| 86 |
+
}
|
| 87 |
+
|
| 88 |
+
.status-dot {
|
| 89 |
+
width: 8px;
|
| 90 |
+
height: 8px;
|
| 91 |
+
border-radius: 50%;
|
| 92 |
+
background: #ef4444;
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
+
.status-dot.connected {
|
| 96 |
+
background: #10b981;
|
| 97 |
+
animation: pulse 2s infinite;
|
| 98 |
+
}
|
| 99 |
+
|
| 100 |
+
@keyframes pulse {
|
| 101 |
+
0%, 100% { opacity: 1; }
|
| 102 |
+
50% { opacity: 0.7; }
|
| 103 |
+
}
|
| 104 |
+
|
| 105 |
+
@media (max-width: 768px) {
|
| 106 |
+
nav {
|
| 107 |
+
padding: 1rem;
|
| 108 |
+
}
|
| 109 |
+
|
| 110 |
+
.nav-links {
|
| 111 |
+
gap: 1rem;
|
| 112 |
+
}
|
| 113 |
+
|
| 114 |
+
.logo {
|
| 115 |
+
font-size: 1.25rem;
|
| 116 |
+
}
|
| 117 |
+
}
|
| 118 |
+
</style>
|
| 119 |
+
<nav>
|
| 120 |
+
<div class="nav-container">
|
| 121 |
+
<a href="/" class="logo">SEO Automaton Pro</a>
|
| 122 |
+
|
| 123 |
+
<ul class="nav-links">
|
| 124 |
+
<li><a href="/" class="nav-link active">Dashboard</a></li>
|
| 125 |
+
<li><a href="/analytics.html" class="nav-link">Analytics</a></li>
|
| 126 |
+
<li><a href="/tasks.html" class="nav-link">Tasks</a></li>
|
| 127 |
+
<li><a href="/settings.html" class="nav-link">Settings</a></li>
|
| 128 |
+
</ul>
|
| 129 |
+
|
| 130 |
+
<div class="status-indicator">
|
| 131 |
+
<div class="status-dot"></div>
|
| 132 |
+
<span>Disconnected</span>
|
| 133 |
+
</div>
|
| 134 |
+
</div>
|
| 135 |
+
</nav>
|
| 136 |
+
`;
|
| 137 |
+
}
|
| 138 |
+
}
|
| 139 |
+
|
| 140 |
+
customElements.define('custom-navbar', CustomNavbar);
|
index.html
CHANGED
|
@@ -1,19 +1,220 @@
|
|
| 1 |
-
<!
|
| 2 |
-
<html>
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html>
|
| 2 |
+
<html lang="en" class="dark">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="UTF-8">
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
+
<title>SEO Automaton Pro - AI-Powered SEO Automation</title>
|
| 7 |
+
<link rel="icon" type="image/x-icon" href="/static/favicon.ico">
|
| 8 |
+
<link rel="stylesheet" href="style.css">
|
| 9 |
+
<script src="https://cdn.tailwindcss.com"></script>
|
| 10 |
+
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
|
| 11 |
+
<script src="https://unpkg.com/feather-icons"></script>
|
| 12 |
+
<link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
| 13 |
+
<script>
|
| 14 |
+
tailwind.config = {
|
| 15 |
+
darkMode: 'class',
|
| 16 |
+
theme: {
|
| 17 |
+
extend: {
|
| 18 |
+
fontFamily: {
|
| 19 |
+
'space-grotesk': ['Space Grotesk', 'monospace'],
|
| 20 |
+
},
|
| 21 |
+
colors: {
|
| 22 |
+
primary: {
|
| 23 |
+
50: '#f0f9ff',
|
| 24 |
+
100: '#e0f2fe',
|
| 25 |
+
200: '#bae6fd',
|
| 26 |
+
300: '#7dd3fc',
|
| 27 |
+
400: '#38bdf8',
|
| 28 |
+
500: '#0ea5e9',
|
| 29 |
+
600: '#0284c7',
|
| 30 |
+
700: '#0369a1',
|
| 31 |
+
800: '#075985',
|
| 32 |
+
900: '#0c4a6e',
|
| 33 |
+
},
|
| 34 |
+
secondary: {
|
| 35 |
+
50: '#fdf4ff',
|
| 36 |
+
100: '#fae8ff',
|
| 37 |
+
200: '#f5d0fe',
|
| 38 |
+
300: '#f0abfc',
|
| 39 |
+
400: '#e879f9',
|
| 40 |
+
500: '#d946ef',
|
| 41 |
+
600: '#c026d3',
|
| 42 |
+
700: '#a21caf',
|
| 43 |
+
800: '#86198f',
|
| 44 |
+
900: '#701a75',
|
| 45 |
+
}
|
| 46 |
+
}
|
| 47 |
+
}
|
| 48 |
+
}
|
| 49 |
+
}
|
| 50 |
+
</script>
|
| 51 |
+
</head>
|
| 52 |
+
<body class="bg-gray-900 text-white font-space-grotesk min-h-screen flex flex-col">
|
| 53 |
+
<custom-navbar></custom-navbar>
|
| 54 |
+
|
| 55 |
+
<main class="flex-1 container mx-auto px-4 py-8">
|
| 56 |
+
<!-- Header Section -->
|
| 57 |
+
<div class="text-center mb-12">
|
| 58 |
+
<h1 class="text-4xl md:text-6xl font-bold bg-gradient-to-r from-primary-400 to-secondary-500 bg-clip-text text-transparent mb-4">
|
| 59 |
+
SEO Automaton Pro
|
| 60 |
+
</h1>
|
| 61 |
+
<p class="text-xl text-gray-400 max-w-2xl mx-auto">
|
| 62 |
+
Your AI-powered SEO assistant that automates WordPress optimization and provides real-time analytics insights.
|
| 63 |
+
</p>
|
| 64 |
+
</div>
|
| 65 |
+
|
| 66 |
+
<!-- Main Dashboard Grid -->
|
| 67 |
+
<div class="grid grid-cols-1 lg:grid-cols-3 gap-6 mb-8">
|
| 68 |
+
<!-- Connection Panel -->
|
| 69 |
+
<div class="lg:col-span-1 bg-gray-800 rounded-2xl p-6 border border-gray-700">
|
| 70 |
+
<div class="flex items-center gap-3 mb-6">
|
| 71 |
+
<i data-feather="link" class="text-primary-400"></i>
|
| 72 |
+
<h2 class="text-2xl font-semibold">WordPress Connection</h2>
|
| 73 |
+
</div>
|
| 74 |
+
|
| 75 |
+
<div class="space-y-4">
|
| 76 |
+
<div>
|
| 77 |
+
<label class="block text-sm font-medium text-gray-400 mb-2">WordPress URL</label>
|
| 78 |
+
<input type="text" placeholder="https://your-site.com"
|
| 79 |
+
class="w-full bg-gray-700 border border-gray-600 rounded-lg px-4 py-3 text-white placeholder-gray-500 focus:outline-none focus:ring-2 focus:ring-primary-500">
|
| 80 |
+
</div>
|
| 81 |
+
|
| 82 |
+
<div>
|
| 83 |
+
<label class="block text-sm font-medium text-gray-400 mb-2">API Key</label>
|
| 84 |
+
<input type="password" placeholder="Enter your WordPress API key"
|
| 85 |
+
class="w-full bg-gray-700 border border-gray-600 rounded-lg px-4 py-3 text-white placeholder-gray-500 focus:outline-none focus:ring-2 focus:ring-primary-500">
|
| 86 |
+
</div>
|
| 87 |
+
|
| 88 |
+
<button class="w-full bg-gradient-to-r from-primary-500 to-secondary-500 hover:from-primary-600 hover:to-secondary-600 text-white font-semibold py-3 px-6 rounded-lg transition-all duration-200 transform hover:scale-105">
|
| 89 |
+
<i data-feather="play" class="inline w-4 h-4 mr-2"></i>
|
| 90 |
+
Start SEO Automation
|
| 91 |
+
</button>
|
| 92 |
+
</div>
|
| 93 |
+
</div>
|
| 94 |
+
|
| 95 |
+
<!-- Analytics Panel -->
|
| 96 |
+
<div class="lg:col-span-2 bg-gray-800 rounded-2xl p-6 border border-gray-700">
|
| 97 |
+
<div class="flex items-center gap-3 mb-6">
|
| 98 |
+
<i data-feather="bar-chart-2" class="text-secondary-400"></i>
|
| 99 |
+
<h2 class="text-2xl font-semibold">Real-time Analytics</h2>
|
| 100 |
+
</div>
|
| 101 |
+
|
| 102 |
+
<div class="grid grid-cols-2 md:grid-cols-4 gap-4 mb-6">
|
| 103 |
+
<div class="bg-gray-700 rounded-xl p-4 text-center">
|
| 104 |
+
<div class="text-2xl font-bold text-primary-400">1.2K</div>
|
| 105 |
+
<div class="text-sm text-gray-400">Visitors Today</div>
|
| 106 |
+
</div>
|
| 107 |
+
<div class="bg-gray-700 rounded-xl p-4 text-center">
|
| 108 |
+
<div class="text-2xl font-bold text-secondary-400">45%</div>
|
| 109 |
+
<div class="text-sm text-gray-400">Bounce Rate</div>
|
| 110 |
+
</div>
|
| 111 |
+
<div class="bg-gray-700 rounded-xl p-4 text-center">
|
| 112 |
+
<div class="text-2xl font-bold text-green-400">3.2</div>
|
| 113 |
+
<div class="text-sm text-gray-400">Avg. Session</div>
|
| 114 |
+
</div>
|
| 115 |
+
<div class="bg-gray-700 rounded-xl p-4 text-center">
|
| 116 |
+
<div class="text-2xl font-bold text-yellow-400">87</div>
|
| 117 |
+
<div class="text-sm text-gray-400">SEO Score</div>
|
| 118 |
+
</div>
|
| 119 |
+
</div>
|
| 120 |
+
|
| 121 |
+
<div class="bg-gray-700 rounded-xl p-4">
|
| 122 |
+
<div class="h-48 flex items-center justify-center text-gray-500">
|
| 123 |
+
Analytics Chart Visualization
|
| 124 |
+
</div>
|
| 125 |
+
</div>
|
| 126 |
+
</div>
|
| 127 |
+
</div>
|
| 128 |
+
|
| 129 |
+
<!-- Tasks & Chat Section -->
|
| 130 |
+
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
|
| 131 |
+
<!-- Tasks Panel -->
|
| 132 |
+
<div class="bg-gray-800 rounded-2xl p-6 border border-gray-700">
|
| 133 |
+
<div class="flex items-center gap-3 mb-6">
|
| 134 |
+
<i data-feather="check-square" class="text-green-400"></i>
|
| 135 |
+
<h2 class="text-2xl font-semibold">Recent Tasks</h2>
|
| 136 |
+
</div>
|
| 137 |
+
|
| 138 |
+
<div class="space-y-4">
|
| 139 |
+
<div class="bg-gray-700 rounded-xl p-4 border-l-4 border-primary-500">
|
| 140 |
+
<div class="flex justify-between items-center">
|
| 141 |
+
<span class="font-medium">Optimized meta tags for homepage</span>
|
| 142 |
+
<span class="text-xs text-green-400 bg-green-400/10 px-2 py-1 rounded-full">Completed</span>
|
| 143 |
+
</div>
|
| 144 |
+
<p class="text-sm text-gray-400 mt-2">Improved title and description for better CTR</p>
|
| 145 |
+
</div>
|
| 146 |
+
|
| 147 |
+
<div class="bg-gray-700 rounded-xl p-4 border-l-4 border-yellow-500">
|
| 148 |
+
<div class="flex justify-between items-center">
|
| 149 |
+
<span class="font-medium">Fixed broken internal links</span>
|
| 150 |
+
<span class="text-xs text-yellow-400 bg-yellow-400/10 px-2 py-1 rounded-full">In Progress</span>
|
| 151 |
+
</div>
|
| 152 |
+
<p class="text-sm text-gray-400 mt-2">Identified and fixed 12 broken links</p>
|
| 153 |
+
</div>
|
| 154 |
+
|
| 155 |
+
<div class="bg-gray-700 rounded-xl p-4 border-l-4 border-blue-500">
|
| 156 |
+
<div class="flex justify-between items-center">
|
| 157 |
+
<span class="font-medium">Image optimization batch</span>
|
| 158 |
+
<span class="text-xs text-blue-400 bg-blue-400/10 px-2 py-1 rounded-full">Queued</span>
|
| 159 |
+
</div>
|
| 160 |
+
<p class="text-sm text-gray-400 mt-2">Compressing 45 images for better load times</p>
|
| 161 |
+
</div>
|
| 162 |
+
</div>
|
| 163 |
+
</div>
|
| 164 |
+
|
| 165 |
+
<!-- Chat Panel -->
|
| 166 |
+
<div class="bg-gray-800 rounded-2xl p-6 border border-gray-700 flex flex-col">
|
| 167 |
+
<div class="flex items-center gap-3 mb-6">
|
| 168 |
+
<i data-feather="message-square" class="text-primary-400"></i>
|
| 169 |
+
<h2 class="text-2xl font-semibold">Chat with Agent</h2>
|
| 170 |
+
</div>
|
| 171 |
+
|
| 172 |
+
<div class="flex-1 bg-gray-700 rounded-xl p-4 mb-4 overflow-y-auto max-h-64">
|
| 173 |
+
<div class="space-y-4">
|
| 174 |
+
<div class="flex justify-start">
|
| 175 |
+
<div class="bg-gray-600 rounded-2xl rounded-tl-none px-4 py-3 max-w-xs">
|
| 176 |
+
<p class="text-sm">Hello! I'm your SEO assistant. I've connected to your WordPress site and started optimizing. How can I help you today?</p>
|
| 177 |
+
</div>
|
| 178 |
+
</div>
|
| 179 |
+
|
| 180 |
+
<div class="flex justify-end">
|
| 181 |
+
<div class="bg-primary-500 rounded-2xl rounded-tr-none px-4 py-3 max-w-xs">
|
| 182 |
+
<p class="text-sm">Can you run a full site audit and show me the results?</p>
|
| 183 |
+
</div>
|
| 184 |
+
</div>
|
| 185 |
+
|
| 186 |
+
<div class="flex justify-start">
|
| 187 |
+
<div class="bg-gray-600 rounded-2xl rounded-tl-none px-4 py-3 max-w-xs">
|
| 188 |
+
<p class="text-sm">Sure! I'll start a comprehensive SEO audit. This will analyze your site structure, content quality, technical SEO, and performance metrics.</p>
|
| 189 |
+
</div>
|
| 190 |
+
</div>
|
| 191 |
+
</div>
|
| 192 |
+
</div>
|
| 193 |
+
|
| 194 |
+
<div class="flex gap-2">
|
| 195 |
+
<input type="text" placeholder="Ask your SEO agent..."
|
| 196 |
+
class="flex-1 bg-gray-700 border border-gray-600 rounded-lg px-4 py-3 text-white placeholder-gray-500 focus:outline-none focus:ring-2 focus:ring-primary-500">
|
| 197 |
+
<button class="bg-primary-500 hover:bg-primary-600 text-white p-3 rounded-lg transition-colors">
|
| 198 |
+
<i data-feather="send" class="w-4 h-4"></i>
|
| 199 |
+
</button>
|
| 200 |
+
</div>
|
| 201 |
+
</div>
|
| 202 |
+
</div>
|
| 203 |
+
</main>
|
| 204 |
+
|
| 205 |
+
<custom-footer></custom-footer>
|
| 206 |
+
|
| 207 |
+
<!-- Component Scripts -->
|
| 208 |
+
<script src="components/navbar.js"></script>
|
| 209 |
+
<script src="components/footer.js"></script>
|
| 210 |
+
|
| 211 |
+
<!-- Main Script -->
|
| 212 |
+
<script src="script.js"></script>
|
| 213 |
+
|
| 214 |
+
<!-- Initialize Feather Icons -->
|
| 215 |
+
<script>
|
| 216 |
+
feather.replace();
|
| 217 |
+
</script>
|
| 218 |
+
<script src="https://huggingface.co/deepsite/deepsite-badge.js"></script>
|
| 219 |
+
</body>
|
| 220 |
+
</html>
|
script.js
ADDED
|
@@ -0,0 +1,188 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// Shared JavaScript across all pages
|
| 2 |
+
|
| 3 |
+
class SEOAutomaton {
|
| 4 |
+
constructor() {
|
| 5 |
+
this.isConnected = false;
|
| 6 |
+
this.tasks = [];
|
| 7 |
+
this.init();
|
| 8 |
+
}
|
| 9 |
+
|
| 10 |
+
init() {
|
| 11 |
+
console.log('SEO Automaton Pro initialized');
|
| 12 |
+
this.setupEventListeners();
|
| 13 |
+
this.simulateRealTimeUpdates();
|
| 14 |
+
}
|
| 15 |
+
|
| 16 |
+
setupEventListeners() {
|
| 17 |
+
// WordPress connection handler
|
| 18 |
+
const connectBtn = document.querySelector('button[class*="bg-gradient"]');
|
| 19 |
+
if (connectBtn) {
|
| 20 |
+
connectBtn.addEventListener('click', () => this.handleConnection());
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
// Chat functionality
|
| 24 |
+
const chatInput = document.querySelector('input[placeholder*="Ask your SEO agent"]');
|
| 25 |
+
const sendBtn = document.querySelector('button[class*="bg-primary"]');
|
| 26 |
+
|
| 27 |
+
if (sendBtn && chatInput) {
|
| 28 |
+
sendBtn.addEventListener('click', () => this.handleChatMessage(chatInput.value));
|
| 29 |
+
chatInput.addEventListener('keypress', (e) => {
|
| 30 |
+
if (e.key === 'Enter') {
|
| 31 |
+
this.handleChatMessage(chatInput.value);
|
| 32 |
+
chatInput.value = '';
|
| 33 |
+
}
|
| 34 |
+
});
|
| 35 |
+
}
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
handleConnection() {
|
| 39 |
+
this.isConnected = true;
|
| 40 |
+
this.showNotification('Successfully connected to WordPress! Starting SEO automation...', 'success');
|
| 41 |
+
|
| 42 |
+
// Simulate starting automation tasks
|
| 43 |
+
setTimeout(() => {
|
| 44 |
+
this.addTask('Site audit initiated', 'Analyzing site structure and content', 'in-progress');
|
| 45 |
+
}, 1000);
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
handleChatMessage(message) {
|
| 49 |
+
if (!message.trim()) return;
|
| 50 |
+
|
| 51 |
+
this.addChatMessage(message, 'user');
|
| 52 |
+
|
| 53 |
+
// Simulate AI response
|
| 54 |
+
setTimeout(() => {
|
| 55 |
+
const response = this.generateAIResponse(message);
|
| 56 |
+
this.addChatMessage(response, 'agent');
|
| 57 |
+
}, 1000);
|
| 58 |
+
}
|
| 59 |
+
|
| 60 |
+
addChatMessage(message, sender) {
|
| 61 |
+
const chatContainer = document.querySelector('.bg-gray-700.rounded-xl.p-4');
|
| 62 |
+
if (!chatContainer) return;
|
| 63 |
+
|
| 64 |
+
const messageDiv = document.createElement('div');
|
| 65 |
+
messageDiv.className = `flex justify-${sender === 'user' ? 'end' : 'start'} mb-4`;
|
| 66 |
+
|
| 67 |
+
const bubble = document.createElement('div');
|
| 68 |
+
bubble.className = sender === 'user'
|
| 69 |
+
? 'bg-primary-500 rounded-2xl rounded-tr-none px-4 py-3 max-w-xs';
|
| 70 |
+
bubble.innerHTML = `<p class="text-sm">${message}</p>`;
|
| 71 |
+
|
| 72 |
+
messageDiv.appendChild(bubble);
|
| 73 |
+
chatContainer.appendChild(messageDiv);
|
| 74 |
+
chatContainer.scrollTop = chatContainer.scrollHeight;
|
| 75 |
+
}
|
| 76 |
+
|
| 77 |
+
generateAIResponse(message) {
|
| 78 |
+
const responses = {
|
| 79 |
+
'audit': 'Starting comprehensive SEO audit. This will analyze your site structure, content quality, technical SEO factors, and performance metrics. Results will be available in approximately 2 minutes.',
|
| 80 |
+
'performance': 'I\'ll run performance optimization tasks including image compression, CSS/JS minification, and caching improvements.',
|
| 81 |
+
'keywords': 'Analyzing your current keyword strategy and identifying new opportunities based on search volume and competition.',
|
| 82 |
+
'default': 'I understand your request. Let me process that and provide you with the best optimization strategy for your WordPress site.'
|
| 83 |
+
};
|
| 84 |
+
|
| 85 |
+
const lowerMessage = message.toLowerCase();
|
| 86 |
+
|
| 87 |
+
if (lowerMessage.includes('audit')) return responses.audit;
|
| 88 |
+
if (lowerMessage.includes('performance') || lowerMessage.includes('speed')) return responses.performance;
|
| 89 |
+
if (lowerMessage.includes('keyword')) return responses.keywords;
|
| 90 |
+
|
| 91 |
+
return responses.default;
|
| 92 |
+
}
|
| 93 |
+
|
| 94 |
+
addTask(title, description, status = 'queued') {
|
| 95 |
+
const tasksContainer = document.querySelector('.space-y-4');
|
| 96 |
+
if (!tasksContainer) return;
|
| 97 |
+
|
| 98 |
+
const taskDiv = document.createElement('div');
|
| 99 |
+
const statusColors = {
|
| 100 |
+
'completed': 'green',
|
| 101 |
+
'in-progress': 'yellow',
|
| 102 |
+
'queued': 'blue'
|
| 103 |
+
};
|
| 104 |
+
|
| 105 |
+
taskDiv.className = `bg-gray-700 rounded-xl p-4 border-l-4 border-${statusColors[status]}-500';
|
| 106 |
+
taskDiv.innerHTML = `
|
| 107 |
+
<div class="flex justify-between items-center">
|
| 108 |
+
<span class="font-medium">${title}</span>
|
| 109 |
+
<span class="text-xs text-${statusColors[status]}-400 bg-${statusColors[status]}-400/10 px-2 py-1 rounded-full">${status.replace('-', ' ')}</span>
|
| 110 |
+
</div>
|
| 111 |
+
<p class="text-sm text-gray-400 mt-2">${description}</p>
|
| 112 |
+
`;
|
| 113 |
+
|
| 114 |
+
tasksContainer.appendChild(taskDiv);
|
| 115 |
+
this.tasks.push({ title, description, status });
|
| 116 |
+
}
|
| 117 |
+
|
| 118 |
+
simulateRealTimeUpdates() {
|
| 119 |
+
// Simulate real-time analytics updates
|
| 120 |
+
setInterval(() => {
|
| 121 |
+
if (!this.isConnected) return;
|
| 122 |
+
|
| 123 |
+
const visitorsElement = document.querySelector('.text-2xl.font-bold.text-primary-400');
|
| 124 |
+
if (visitorsElement) {
|
| 125 |
+
const current = parseInt(visitorsElement.textContent);
|
| 126 |
+
const change = Math.floor(Math.random() * 10) - 2;
|
| 127 |
+
visitorsElement.textContent = Math.max(800, current + change);
|
| 128 |
+
}
|
| 129 |
+
}, 5000);
|
| 130 |
+
}
|
| 131 |
+
|
| 132 |
+
showNotification(message, type = 'info') {
|
| 133 |
+
// Create notification element
|
| 134 |
+
const notification = document.createElement('div');
|
| 135 |
+
const bgColor = type === 'success' ? 'bg-green-500' : 'bg-blue-500';
|
| 136 |
+
notification.className = `fixed top-4 right-4 ${bgColor} text-white px-6 py-3 rounded-lg shadow-lg transform translate-x-full transition-transform duration-300 z-50';
|
| 137 |
+
notification.textContent = message;
|
| 138 |
+
|
| 139 |
+
document.body.appendChild(notification);
|
| 140 |
+
|
| 141 |
+
// Animate in
|
| 142 |
+
setTimeout(() => {
|
| 143 |
+
notification.classList.remove('translate-x-full');
|
| 144 |
+
}, 100);
|
| 145 |
+
|
| 146 |
+
// Remove after 3 seconds
|
| 147 |
+
setTimeout(() => {
|
| 148 |
+
notification.classList.add('translate-x-full');
|
| 149 |
+
setTimeout(() => {
|
| 150 |
+
if (notification.parentNode) {
|
| 151 |
+
notification.parentNode.removeChild(notification);
|
| 152 |
+
}
|
| 153 |
+
}, 300);
|
| 154 |
+
}, 3000);
|
| 155 |
+
}
|
| 156 |
+
}
|
| 157 |
+
|
| 158 |
+
// Initialize when DOM is loaded
|
| 159 |
+
document.addEventListener('DOMContentLoaded', () => {
|
| 160 |
+
window.seoAutomaton = new SEOAutomaton();
|
| 161 |
+
});
|
| 162 |
+
|
| 163 |
+
// Utility functions
|
| 164 |
+
const utils = {
|
| 165 |
+
formatNumber: (num) => {
|
| 166 |
+
if (num >= 1000000) {
|
| 167 |
+
return (num / 1000000).toFixed(1) + 'M';
|
| 168 |
+
}
|
| 169 |
+
if (num >= 1000) {
|
| 170 |
+
return (num / 1000).toFixed(1) + 'K';
|
| 171 |
+
}
|
| 172 |
+
return num.toString();
|
| 173 |
+
},
|
| 174 |
+
|
| 175 |
+
debounce: (func, wait) => {
|
| 176 |
+
let timeout;
|
| 177 |
+
return function executedFunction(...args) {
|
| 178 |
+
const later = () => {
|
| 179 |
+
clearTimeout(timeout);
|
| 180 |
+
func(...args);
|
| 181 |
+
};
|
| 182 |
+
clearTimeout(timeout);
|
| 183 |
+
timeout = setTimeout(later, wait);
|
| 184 |
+
};
|
| 185 |
+
}
|
| 186 |
+
};
|
| 187 |
+
|
| 188 |
+
console.log('SEO Automaton Pro - AI-powered SEO automation platform loaded');
|
style.css
CHANGED
|
@@ -1,28 +1,98 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
body {
|
| 2 |
-
|
| 3 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4 |
}
|
| 5 |
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
|
|
|
|
|
|
| 9 |
}
|
| 10 |
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
margin-bottom: 10px;
|
| 15 |
-
margin-top: 5px;
|
| 16 |
}
|
| 17 |
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
padding: 16px;
|
| 22 |
-
border: 1px solid lightgray;
|
| 23 |
-
border-radius: 16px;
|
| 24 |
}
|
| 25 |
|
| 26 |
-
|
| 27 |
-
|
|
|
|
| 28 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* Shared styles across all pages */
|
| 2 |
+
@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&display=swap');
|
| 3 |
+
|
| 4 |
+
* {
|
| 5 |
+
box-sizing: border-box;
|
| 6 |
+
}
|
| 7 |
+
|
| 8 |
body {
|
| 9 |
+
font-family: 'Space Grotesk', monospace;
|
| 10 |
+
background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
|
| 11 |
+
overflow-x: hidden;
|
| 12 |
+
}
|
| 13 |
+
|
| 14 |
+
/* Custom scrollbar */
|
| 15 |
+
::-webkit-scrollbar {
|
| 16 |
+
width: 6px;
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
::-webkit-scrollbar-track {
|
| 20 |
+
background: #1e293b;
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
::-webkit-scrollbar-thumb {
|
| 24 |
+
background: #475569;
|
| 25 |
+
border-radius: 3px;
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
::-webkit-scrollbar-thumb:hover {
|
| 29 |
+
background: #64748b;
|
| 30 |
+
}
|
| 31 |
+
|
| 32 |
+
/* Glass morphism effect */
|
| 33 |
+
.glass {
|
| 34 |
+
background: rgba(255, 255, 255, 0.05);
|
| 35 |
+
backdrop-filter: blur(10px);
|
| 36 |
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
| 37 |
}
|
| 38 |
|
| 39 |
+
/* Gradient text animation */
|
| 40 |
+
.gradient-text {
|
| 41 |
+
background: linear-gradient(135deg, #38bdf8 0%, #e879f9 100%);
|
| 42 |
+
background-size: 200% 200%;
|
| 43 |
+
animation: gradient-shift 3s ease infinite;
|
| 44 |
}
|
| 45 |
|
| 46 |
+
@keyframes gradient-shift {
|
| 47 |
+
0%, 100% { background-position: 0% 50%; }
|
| 48 |
+
50% { background-position: 100% 50%; }
|
|
|
|
|
|
|
| 49 |
}
|
| 50 |
|
| 51 |
+
/* Pulse animation for active elements */
|
| 52 |
+
.pulse-glow {
|
| 53 |
+
animation: pulse-glow 2s infinite;
|
|
|
|
|
|
|
|
|
|
| 54 |
}
|
| 55 |
|
| 56 |
+
@keyframes pulse-glow {
|
| 57 |
+
0%, 100% { box-shadow: 0 0 5px rgba(56, 189, 248, 0.5); }
|
| 58 |
+
50% { box-shadow: 0 0 20px rgba(56, 189, 248, 0.8); }
|
| 59 |
}
|
| 60 |
+
|
| 61 |
+
/* Smooth transitions */
|
| 62 |
+
.transition-all {
|
| 63 |
+
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
/* Custom button hover effects */
|
| 67 |
+
.btn-hover {
|
| 68 |
+
transition: all 0.3s ease;
|
| 69 |
+
}
|
| 70 |
+
|
| 71 |
+
.btn-hover:hover {
|
| 72 |
+
transform: translateY(-2px);
|
| 73 |
+
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.3);
|
| 74 |
+
}
|
| 75 |
+
|
| 76 |
+
/* Loading animation */
|
| 77 |
+
.loading-dots {
|
| 78 |
+
display: inline-block;
|
| 79 |
+
}
|
| 80 |
+
|
| 81 |
+
.loading-dots::after {
|
| 82 |
+
content: '';
|
| 83 |
+
animation: dots 1.5s steps(5, end) infinite;
|
| 84 |
+
}
|
| 85 |
+
|
| 86 |
+
@keyframes dots {
|
| 87 |
+
0%, 20% { content: '.'; }
|
| 88 |
+
40% { content: '..'; }
|
| 89 |
+
60% { content: '...'; }
|
| 90 |
+
80%, 100% { content: ''; }
|
| 91 |
+
}
|
| 92 |
+
|
| 93 |
+
/* Responsive text sizes */
|
| 94 |
+
@media (max-width: 768px) {
|
| 95 |
+
.responsive-text {
|
| 96 |
+
font-size: 0.875rem;
|
| 97 |
+
}
|
| 98 |
+
}
|