Spaces:
Running
Running
feat: Revamp UI to futuristic dark theme with glass-morphism effects
Browse files- index.html +74 -33
- style.css +25 -5
index.html
CHANGED
@@ -7,17 +7,19 @@
|
|
7 |
<script src='https://cdn.plot.ly/plotly-latest.min.js'></script>
|
8 |
<style>
|
9 |
:root {
|
10 |
-
--bg-color: #
|
11 |
-
--card-bg-color: #
|
12 |
-
--text-color: #
|
13 |
-
--muted-text-color: #
|
14 |
-
--border-color: #
|
15 |
-
--shadow-color: rgba(
|
16 |
-
--primary-color: #
|
17 |
-
--success-color: #
|
18 |
-
--warning-color: #
|
19 |
-
--danger-color: #
|
20 |
-
--plot-colorway: ['#
|
|
|
|
|
21 |
}
|
22 |
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600&display=swap');
|
23 |
|
@@ -26,13 +28,16 @@
|
|
26 |
margin: 0;
|
27 |
background-color: var(--bg-color);
|
28 |
color: var(--text-color);
|
29 |
-
line-height: 1.
|
30 |
-
font-weight:
|
|
|
|
|
|
|
31 |
}
|
32 |
.container {
|
33 |
-
max-width:
|
34 |
-
margin:
|
35 |
-
padding: 0
|
36 |
}
|
37 |
h1 {
|
38 |
text-align: center;
|
@@ -53,19 +58,36 @@
|
|
53 |
font-weight: 500;
|
54 |
color: var(--muted-text-color);
|
55 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
56 |
.controls select {
|
57 |
-
padding:
|
58 |
border: 1px solid var(--border-color);
|
59 |
-
border-radius:
|
60 |
-
background
|
61 |
-
min-width:
|
62 |
font-size: 1rem;
|
63 |
color: var(--text-color);
|
64 |
appearance: none;
|
65 |
-
background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='
|
66 |
background-repeat: no-repeat;
|
67 |
-
background-position: right
|
68 |
background-size: 16px;
|
|
|
|
|
|
|
|
|
|
|
|
|
69 |
}
|
70 |
|
71 |
.kpi-container {
|
@@ -75,13 +97,30 @@
|
|
75 |
margin-bottom: 30px;
|
76 |
}
|
77 |
.kpi-card {
|
78 |
-
background
|
79 |
-
padding:
|
80 |
-
border-radius:
|
81 |
-
box-shadow: 0
|
82 |
text-align: center;
|
83 |
border: 1px solid var(--border-color);
|
84 |
-
transition:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
85 |
}
|
86 |
.kpi-card h3 {
|
87 |
margin-top: 0;
|
@@ -109,13 +148,15 @@
|
|
109 |
margin-bottom: 30px;
|
110 |
}
|
111 |
.plot-container, .table-container {
|
112 |
-
background
|
113 |
-
padding:
|
114 |
-
border-radius:
|
115 |
-
box-shadow: 0
|
116 |
border: 1px solid var(--border-color);
|
117 |
-
transition:
|
118 |
-
min-height:
|
|
|
|
|
119 |
display: flex; /* For centering loading/error inside */
|
120 |
flex-direction: column; /* Allow title and content stacking */
|
121 |
justify-content: flex-start; /* Align content top */
|
|
|
7 |
<script src='https://cdn.plot.ly/plotly-latest.min.js'></script>
|
8 |
<style>
|
9 |
:root {
|
10 |
+
--bg-color: #0d1117;
|
11 |
+
--card-bg-color: #161b22;
|
12 |
+
--text-color: #e6edf3;
|
13 |
+
--muted-text-color: #7d8590;
|
14 |
+
--border-color: #30363d;
|
15 |
+
--shadow-color: rgba(1, 4, 9, 0.8);
|
16 |
+
--primary-color: #58a6ff;
|
17 |
+
--success-color: #3fb950;
|
18 |
+
--warning-color: #d29922;
|
19 |
+
--danger-color: #f85149;
|
20 |
+
--plot-colorway: ['#58a6ff', '#bc8cff', '#ff7b72', '#ffa657', '#7ee787', '#a5d6ff', '#79c0ff', '#d2a8ff', '#ffa198', '#ffdfb6'];
|
21 |
+
--glass-effect: rgba(22, 27, 34, 0.7);
|
22 |
+
--highlight-color: rgba(88, 166, 255, 0.1);
|
23 |
}
|
24 |
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600&display=swap');
|
25 |
|
|
|
28 |
margin: 0;
|
29 |
background-color: var(--bg-color);
|
30 |
color: var(--text-color);
|
31 |
+
line-height: 1.6;
|
32 |
+
font-weight: 400;
|
33 |
+
background-image:
|
34 |
+
radial-gradient(circle at 25% 25%, rgba(88, 166, 255, 0.1) 0%, transparent 50%),
|
35 |
+
radial-gradient(circle at 75% 75%, rgba(188, 140, 255, 0.1) 0%, transparent 50%);
|
36 |
}
|
37 |
.container {
|
38 |
+
max-width: 1800px;
|
39 |
+
margin: 0 auto;
|
40 |
+
padding: 0 30px;
|
41 |
}
|
42 |
h1 {
|
43 |
text-align: center;
|
|
|
58 |
font-weight: 500;
|
59 |
color: var(--muted-text-color);
|
60 |
}
|
61 |
+
.controls {
|
62 |
+
margin-bottom: 40px;
|
63 |
+
padding: 20px;
|
64 |
+
background: var(--glass-effect);
|
65 |
+
border-radius: 16px;
|
66 |
+
border: 1px solid var(--border-color);
|
67 |
+
backdrop-filter: blur(8px);
|
68 |
+
max-width: fit-content;
|
69 |
+
margin-left: auto;
|
70 |
+
margin-right: auto;
|
71 |
+
}
|
72 |
.controls select {
|
73 |
+
padding: 12px 16px;
|
74 |
border: 1px solid var(--border-color);
|
75 |
+
border-radius: 12px;
|
76 |
+
background: var(--glass-effect);
|
77 |
+
min-width: 320px;
|
78 |
font-size: 1rem;
|
79 |
color: var(--text-color);
|
80 |
appearance: none;
|
81 |
+
background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%237d8590' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e");
|
82 |
background-repeat: no-repeat;
|
83 |
+
background-position: right 16px center;
|
84 |
background-size: 16px;
|
85 |
+
transition: all 0.2s ease;
|
86 |
+
}
|
87 |
+
.controls select:focus {
|
88 |
+
outline: none;
|
89 |
+
border-color: var(--primary-color);
|
90 |
+
box-shadow: 0 0 0 2px rgba(88, 166, 255, 0.3);
|
91 |
}
|
92 |
|
93 |
.kpi-container {
|
|
|
97 |
margin-bottom: 30px;
|
98 |
}
|
99 |
.kpi-card {
|
100 |
+
background: var(--glass-effect);
|
101 |
+
padding: 24px;
|
102 |
+
border-radius: 16px;
|
103 |
+
box-shadow: 0 8px 32px var(--shadow-color);
|
104 |
text-align: center;
|
105 |
border: 1px solid var(--border-color);
|
106 |
+
transition: all 0.3s ease;
|
107 |
+
backdrop-filter: blur(8px);
|
108 |
+
position: relative;
|
109 |
+
overflow: hidden;
|
110 |
+
}
|
111 |
+
.kpi-card::before {
|
112 |
+
content: '';
|
113 |
+
position: absolute;
|
114 |
+
top: 0;
|
115 |
+
left: 0;
|
116 |
+
right: 0;
|
117 |
+
height: 2px;
|
118 |
+
background: linear-gradient(90deg, var(--primary-color), transparent);
|
119 |
+
}
|
120 |
+
.kpi-card:hover {
|
121 |
+
transform: translateY(-4px);
|
122 |
+
box-shadow: 0 12px 40px rgba(88, 166, 255, 0.2);
|
123 |
+
border-color: var(--primary-color);
|
124 |
}
|
125 |
.kpi-card h3 {
|
126 |
margin-top: 0;
|
|
|
148 |
margin-bottom: 30px;
|
149 |
}
|
150 |
.plot-container, .table-container {
|
151 |
+
background: var(--glass-effect);
|
152 |
+
padding: 24px;
|
153 |
+
border-radius: 16px;
|
154 |
+
box-shadow: 0 8px 32px var(--shadow-color);
|
155 |
border: 1px solid var(--border-color);
|
156 |
+
transition: all 0.3s ease;
|
157 |
+
min-height: 500px;
|
158 |
+
backdrop-filter: blur(8px);
|
159 |
+
position: relative;
|
160 |
display: flex; /* For centering loading/error inside */
|
161 |
flex-direction: column; /* Allow title and content stacking */
|
162 |
justify-content: flex-start; /* Align content top */
|
style.css
CHANGED
@@ -39,13 +39,28 @@ p {
|
|
39 |
color: var(--muted-text-color);
|
40 |
}
|
41 |
.spinner {
|
42 |
-
border: 3px solid
|
43 |
-
width:
|
44 |
-
height:
|
45 |
border-radius: 50%;
|
|
|
46 |
border-left-color: var(--primary-color);
|
47 |
-
margin-bottom:
|
48 |
-
animation: spin 1s cubic-bezier(0.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
49 |
}
|
50 |
#loading-message {
|
51 |
font-size: 1rem; /* Slightly smaller message */
|
@@ -54,8 +69,13 @@ p {
|
|
54 |
@keyframes spin {
|
55 |
0% {
|
56 |
transform: rotate(0deg);
|
|
|
|
|
|
|
|
|
57 |
}
|
58 |
100% {
|
59 |
transform: rotate(360deg);
|
|
|
60 |
}
|
61 |
}
|
|
|
39 |
color: var(--muted-text-color);
|
40 |
}
|
41 |
.spinner {
|
42 |
+
border: 3px solid transparent;
|
43 |
+
width: 40px;
|
44 |
+
height: 40px;
|
45 |
border-radius: 50%;
|
46 |
+
border-top-color: var(--primary-color);
|
47 |
border-left-color: var(--primary-color);
|
48 |
+
margin-bottom: 20px;
|
49 |
+
animation: spin 1s cubic-bezier(0.68, -0.55, 0.27, 1.55) infinite;
|
50 |
+
position: relative;
|
51 |
+
}
|
52 |
+
.spinner::after {
|
53 |
+
content: '';
|
54 |
+
position: absolute;
|
55 |
+
top: -6px;
|
56 |
+
left: -6px;
|
57 |
+
right: -6px;
|
58 |
+
bottom: -6px;
|
59 |
+
border: 3px solid transparent;
|
60 |
+
border-radius: 50%;
|
61 |
+
border-top-color: rgba(88, 166, 255, 0.3);
|
62 |
+
border-left-color: rgba(88, 166, 255, 0.3);
|
63 |
+
animation: spin 1.5s cubic-bezier(0.68, -0.55, 0.27, 1.55) infinite reverse;
|
64 |
}
|
65 |
#loading-message {
|
66 |
font-size: 1rem; /* Slightly smaller message */
|
|
|
69 |
@keyframes spin {
|
70 |
0% {
|
71 |
transform: rotate(0deg);
|
72 |
+
opacity: 1;
|
73 |
+
}
|
74 |
+
50% {
|
75 |
+
opacity: 0.7;
|
76 |
}
|
77 |
100% {
|
78 |
transform: rotate(360deg);
|
79 |
+
opacity: 1;
|
80 |
}
|
81 |
}
|