-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathindex.html
More file actions
118 lines (116 loc) · 4.77 KB
/
index.html
File metadata and controls
118 lines (116 loc) · 4.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<title>Devora — Developer Intelligence</title>
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' rx='6' fill='%230f0f11'/%3E%3Crect x='6' y='6' width='5' height='20' rx='1' fill='%235e6ad2'/%3E%3Crect x='6' y='6' width='13' height='5' rx='1' fill='%235e6ad2'/%3E%3Crect x='6' y='21' width='13' height='5' rx='1' fill='%235e6ad2'/%3E%3Crect x='12' y='10' width='10' height='3' rx='1' fill='%2334d399'/%3E%3Crect x='12' y='15' width='8' height='3' rx='1' fill='%2334d399' opacity='.5'/%3E%3Crect x='12' y='20' width='10' height='3' rx='1' fill='%2334d399'/%3E%3C/svg%3E">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="style.css?v=17">
<style>
/* ── PRELOADER ─────────────────────────────────────────────────────── */
#preloader {
position: fixed; inset: 0; z-index: 99999;
background: #0f0f11;
display: flex; flex-direction: column;
align-items: center; justify-content: center; gap: 24px;
transition: opacity .4s ease, transform .4s ease;
}
#preloader.hidden { opacity: 0; pointer-events: none; }
.pre-logo {
display: flex; align-items: center; gap: 12px;
animation: preLogoIn .5s cubic-bezier(.34,1.56,.64,1) forwards;
opacity: 0;
}
@keyframes preLogoIn {
from { opacity: 0; transform: translateY(12px) scale(.95); }
to { opacity: 1; transform: translateY(0) scale(1); }
}
.pre-logo-mark {
width: 44px; height: 44px; border-radius: 10px;
background: #16161a; border: 1px solid #2a2a35;
display: flex; align-items: center; justify-content: center;
}
.pre-logo-name {
font-family: 'Inter', sans-serif; font-size: 28px;
font-weight: 800; color: #e8e8f0; letter-spacing: -1px;
}
.pre-bar-wrap {
width: 200px; height: 2px; background: #27272e;
border-radius: 2px; overflow: hidden;
animation: preBarIn .3s ease .3s forwards; opacity: 0;
}
@keyframes preBarIn { to { opacity: 1; } }
.pre-bar {
height: 100%; width: 0; background: #5e6ad2;
border-radius: 2px;
animation: preBarFill 1s cubic-bezier(.4,0,.2,1) .4s forwards;
}
@keyframes preBarFill { to { width: 100%; } }
.pre-tagline {
font-family: 'Inter', sans-serif; font-size: 13px;
color: #525260; letter-spacing: .3px;
animation: preBarIn .3s ease .5s forwards; opacity: 0;
}
.pre-dots {
display: flex; gap: 6px;
animation: preBarIn .3s ease .6s forwards; opacity: 0;
}
.pre-dot {
width: 5px; height: 5px; border-radius: 50%; background: #5e6ad2;
animation: preDotPulse 1.2s ease infinite;
}
.pre-dot:nth-child(2) { animation-delay: .15s; }
.pre-dot:nth-child(3) { animation-delay: .3s; }
@keyframes preDotPulse {
0%,100% { opacity: .3; transform: scale(.8); }
50% { opacity: 1; transform: scale(1); }
}
</style>
</head>
<body>
<!-- PRELOADER -->
<div id="preloader">
<div class="pre-logo">
<div class="pre-logo-mark">
<svg width="26" height="26" viewBox="0 0 22 22" fill="none">
<rect x="2" y="2" width="5" height="18" rx="1.5" fill="#5e6ad2"/>
<rect x="2" y="2" width="13" height="5" rx="1.5" fill="#5e6ad2"/>
<rect x="2" y="15" width="13" height="5" rx="1.5" fill="#5e6ad2"/>
<rect x="8" y="6" width="10" height="3" rx="1" fill="#34d399"/>
<rect x="8" y="10.5" width="8" height="3" rx="1" fill="#34d399" opacity=".5"/>
<rect x="8" y="15.5" width="10" height="3" rx="1" fill="#34d399"/>
</svg>
</div>
<span class="pre-logo-name">Devora</span>
</div>
<div class="pre-bar-wrap"><div class="pre-bar"></div></div>
<div class="pre-tagline">Developer Intelligence Platform</div>
<div class="pre-dots">
<div class="pre-dot"></div>
<div class="pre-dot"></div>
<div class="pre-dot"></div>
</div>
</div>
<div id="root"></div>
<div id="wave-overlay"></div>
<script src="https://cdn.jsdelivr.net/npm/@supabase/supabase-js@2/dist/umd/supabase.js"></script>
<script src="api.js?v=17"></script>
<script src="scoring.js?v=17"></script>
<script src="components.js?v=17"></script>
<script src="views.js?v=17"></script>
<script src="app.js?v=17"></script>
<script>
// Preloader hidden by app.js render() after auth resolves
// Fallback: force hide after 4s if app fails to load
setTimeout(() => {
const p = document.getElementById('preloader');
if (p && !p.classList.contains('hidden')) {
p.classList.add('hidden');
setTimeout(() => p.remove(), 450);
}
}, 4000);
</script>
</body>
</html>