cyberai-1 commited on
Commit Β·
e48e5be
1
Parent(s): 98ecda7
Add
Browse files- templates/index.html +212 -197
templates/index.html
CHANGED
|
@@ -3,32 +3,31 @@
|
|
| 3 |
<head>
|
| 4 |
<meta charset="UTF-8"/>
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
| 6 |
-
<title>SCENEIQ β Intel Scene Classifier</title>
|
| 7 |
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 8 |
<link href="https://fonts.googleapis.com/css2?family=Share+Tech+Mono&family=Rajdhani:wght@400;500;600;700&family=Exo+2:wght@300;400;600&display=swap" rel="stylesheet">
|
| 9 |
<style>
|
| 10 |
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
/* ββ TOKENS ββ */
|
| 14 |
:root {
|
| 15 |
-
--g0:#000000; --g1:#
|
| 16 |
-
--
|
| 17 |
-
--green
|
| 18 |
-
--
|
| 19 |
-
--
|
|
|
|
| 20 |
--ff-mono:'Share Tech Mono',monospace;
|
| 21 |
--ff-head:'Rajdhani',sans-serif;
|
| 22 |
--ff-body:'Exo 2',sans-serif;
|
| 23 |
-
--r:
|
| 24 |
}
|
| 25 |
|
| 26 |
*, *::before, *::after { box-sizing:border-box; margin:0; padding:0; }
|
| 27 |
|
| 28 |
-
/* ββ FULL VIEWPORT β no scroll ββ */
|
| 29 |
html, body {
|
| 30 |
height: 100vh;
|
| 31 |
overflow: hidden;
|
|
|
|
| 32 |
}
|
| 33 |
|
| 34 |
body {
|
|
@@ -37,371 +36,389 @@
|
|
| 37 |
font-family: var(--ff-body);
|
| 38 |
display: flex;
|
| 39 |
flex-direction: column;
|
|
|
|
| 40 |
}
|
| 41 |
|
| 42 |
-
/* ββ Background layers ββ */
|
| 43 |
#plexus-bg {
|
| 44 |
position: fixed; inset: 0; z-index: 0; pointer-events: none;
|
| 45 |
}
|
| 46 |
body::before {
|
| 47 |
content: ''; position: fixed; inset: 0; z-index: 0; pointer-events: none;
|
| 48 |
background-image:
|
| 49 |
-
linear-gradient(rgba(0,255,65,0.
|
| 50 |
-
linear-gradient(90deg, rgba(0,255,65,0.
|
| 51 |
background-size: 40px 40px;
|
| 52 |
}
|
| 53 |
body::after {
|
| 54 |
content: ''; position: fixed; inset: 0; z-index: 0; pointer-events: none;
|
| 55 |
background: repeating-linear-gradient(
|
| 56 |
0deg, transparent, transparent 2px,
|
| 57 |
-
rgba(0,0,0,0.
|
| 58 |
);
|
| 59 |
}
|
| 60 |
|
| 61 |
-
/* ββ WRAPPER β
|
| 62 |
-
.wrapper {
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
|
|
|
|
|
|
| 72 |
|
| 73 |
-
/* ββ HEADER β
|
| 74 |
header {
|
| 75 |
flex-shrink: 0;
|
| 76 |
-
border-bottom:
|
| 77 |
-
padding:
|
| 78 |
display: flex; align-items: center; justify-content: space-between;
|
| 79 |
animation: fadeIn .5s ease both;
|
| 80 |
}
|
| 81 |
-
.logo { display:flex; align-items:center; gap:
|
| 82 |
.logo-icon {
|
| 83 |
-
width:
|
| 84 |
-
display:grid; place-items:center; font-size:1.
|
| 85 |
-
box-shadow: 0 0
|
| 86 |
animation: pulse-box 3s ease-in-out infinite;
|
|
|
|
| 87 |
}
|
| 88 |
@keyframes pulse-box {
|
| 89 |
-
0%,100%{box-shadow:0 0
|
| 90 |
-
50%{box-shadow:0 0
|
| 91 |
}
|
| 92 |
.logo-text {
|
| 93 |
-
font-family:var(--ff-head); font-size:
|
| 94 |
-
letter-spacing:.
|
| 95 |
}
|
| 96 |
.logo-text span { color:var(--green3); }
|
| 97 |
|
| 98 |
-
|
| 99 |
-
.hero-inline {
|
| 100 |
-
font-family:var(--ff-mono); font-size:0.5rem;
|
| 101 |
-
color:var(--muted); letter-spacing:.06em;
|
| 102 |
-
display:none;
|
| 103 |
-
}
|
| 104 |
-
|
| 105 |
-
.header-right { display:flex; align-items:center; gap:1.2rem; }
|
| 106 |
.status-dot {
|
| 107 |
display:flex; align-items:center; gap:.9rem;
|
| 108 |
-
font-family:var(--ff-mono); font-size:0.
|
|
|
|
| 109 |
}
|
| 110 |
.dot {
|
| 111 |
-
width:
|
| 112 |
-
background:var(--green); box-shadow:0 0
|
| 113 |
animation:blink 2s step-end infinite;
|
| 114 |
}
|
| 115 |
@keyframes blink{0%,100%{opacity:1}50%{opacity:.2}}
|
| 116 |
-
.version { font-family:var(--ff-mono); font-size:.
|
| 117 |
|
| 118 |
-
/* ββ
|
| 119 |
.classes-bar {
|
| 120 |
flex-shrink: 0;
|
| 121 |
-
display: flex; align-items: center; gap:
|
| 122 |
-
padding: .
|
| 123 |
border-bottom: 1px solid var(--border);
|
| 124 |
animation: fadeIn .6s ease .1s both;
|
| 125 |
}
|
| 126 |
-
.cs-label {
|
| 127 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 128 |
.cs-pill {
|
| 129 |
-
font-family:var(--ff-mono); font-size:.
|
| 130 |
-
padding:.
|
| 131 |
-
border:1px solid var(--border); border-radius:
|
| 132 |
color:var(--green-dim); transition:all .2s; cursor:default;
|
|
|
|
|
|
|
| 133 |
}
|
| 134 |
-
.cs-pill:hover { border-color:var(--
|
| 135 |
|
| 136 |
-
/* ββ MAIN GRID β
|
| 137 |
.main-grid {
|
| 138 |
flex: 1;
|
| 139 |
-
min-height: 0;
|
| 140 |
display: grid;
|
| 141 |
grid-template-columns: 1fr 1fr;
|
| 142 |
-
gap:
|
| 143 |
-
padding: .75rem 0;
|
| 144 |
animation: fadeIn .7s ease .15s both;
|
| 145 |
}
|
| 146 |
|
| 147 |
-
/* ββ PANELS β
|
| 148 |
.panel {
|
| 149 |
-
background:
|
|
|
|
| 150 |
border: 1px solid var(--border);
|
| 151 |
border-radius: var(--r);
|
| 152 |
-
padding: 1.
|
| 153 |
position: relative;
|
| 154 |
-
overflow: hidden;
|
| 155 |
display: flex;
|
| 156 |
flex-direction: column;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 157 |
}
|
| 158 |
.panel::before {
|
| 159 |
-
content:''; position:absolute; top:0; left:0; right:0; height:
|
| 160 |
-
background:linear-gradient(90deg,transparent,var(--
|
| 161 |
}
|
| 162 |
.panel-title {
|
| 163 |
flex-shrink: 0;
|
| 164 |
-
font-family:var(--ff-mono); font-size:.
|
| 165 |
-
letter-spacing:.
|
| 166 |
-
text-transform:uppercase; margin-bottom:
|
| 167 |
-
display:flex; align-items:center; gap:.
|
|
|
|
| 168 |
}
|
| 169 |
-
.panel-title::after { content:''; flex:1; height:
|
| 170 |
|
| 171 |
-
/*
|
| 172 |
.panel-scroll {
|
| 173 |
flex: 1;
|
| 174 |
min-height: 0;
|
| 175 |
overflow-y: auto;
|
| 176 |
overflow-x: hidden;
|
| 177 |
-
scrollbar-width:
|
|
|
|
|
|
|
| 178 |
}
|
| 179 |
-
.panel-scroll::-webkit-scrollbar {
|
|
|
|
|
|
|
| 180 |
|
| 181 |
-
/* ββ MODEL SELECTOR ββ */
|
| 182 |
.model-grid {
|
| 183 |
-
display:grid; grid-template-columns:1fr 1fr; gap:
|
| 184 |
-
margin-bottom:.
|
| 185 |
}
|
| 186 |
.model-card {
|
| 187 |
-
border:
|
| 188 |
-
padding:.
|
| 189 |
background:var(--g1);
|
| 190 |
-
display:flex; flex-direction:column; gap:.
|
| 191 |
}
|
| 192 |
-
.model-card:hover { border-color:var(--
|
| 193 |
.model-card.active {
|
| 194 |
-
border-color:var(--green); background:rgba(0,255,65,.
|
| 195 |
-
box-shadow:0 0
|
| 196 |
}
|
| 197 |
-
.model-card.active .mc-name { color:var(--green); }
|
| 198 |
-
.mc-icon { font-size:1.
|
| 199 |
-
.mc-name { font-family:var(--ff-head); font-weight:
|
| 200 |
-
.mc-sub { font-family:var(--ff-mono); font-size:.
|
| 201 |
|
| 202 |
-
/* ββ INPUT TABS ββ */
|
| 203 |
.input-tabs {
|
| 204 |
-
display:flex; margin-bottom:
|
| 205 |
-
border:1px solid var(--border); border-radius:
|
| 206 |
}
|
| 207 |
.tab-btn {
|
| 208 |
-
flex:1; padding:.
|
| 209 |
border:none; color:var(--muted); font-family:var(--ff-mono);
|
| 210 |
-
font-size:0.
|
| 211 |
-
transition:all .2s; text-transform:uppercase;
|
| 212 |
}
|
| 213 |
.tab-btn:hover { background:var(--g3); color:var(--green2); }
|
| 214 |
.tab-btn.active {
|
| 215 |
-
background:rgba(0,255,65,.
|
| 216 |
-
box-shadow:inset 0 -
|
| 217 |
}
|
| 218 |
|
| 219 |
-
/* ββ DROP ZONE β
|
| 220 |
.drop-zone {
|
| 221 |
-
border:
|
| 222 |
-
height:
|
| 223 |
display:flex; flex-direction:column;
|
| 224 |
align-items:center; justify-content:center;
|
| 225 |
-
gap:.
|
| 226 |
transition:all .25s; background:var(--g1);
|
| 227 |
position:relative; overflow:hidden;
|
| 228 |
}
|
| 229 |
.drop-zone:hover,.drop-zone.drag {
|
| 230 |
-
border-color:var(--green); background:rgba(0,255,65,.
|
| 231 |
-
box-shadow:0 0
|
| 232 |
}
|
| 233 |
.drop-zone.has-img .dz-ph { display:none; }
|
| 234 |
#preview-img {
|
| 235 |
position:absolute; inset:0; width:100%; height:100%;
|
| 236 |
object-fit:cover; display:none;
|
| 237 |
-
border-radius:
|
| 238 |
}
|
| 239 |
.drop-zone.has-img #preview-img { display:block; }
|
| 240 |
-
.dz-corner { position:absolute; width:
|
| 241 |
-
.dz-corner.tl{top:
|
| 242 |
-
.dz-corner.tr{top:
|
| 243 |
-
.dz-corner.bl{bottom:
|
| 244 |
-
.dz-corner.br{bottom:
|
| 245 |
-
.dz-ph { display:flex; flex-direction:column; align-items:center; gap:.
|
| 246 |
.dz-icon {
|
| 247 |
-
width:
|
| 248 |
border-radius:50%; display:grid; place-items:center;
|
| 249 |
-
font-size:
|
| 250 |
}
|
| 251 |
-
.dz-ph p { font-family:var(--ff-mono); font-size:.
|
| 252 |
-
.dz-ph em { font-family:var(--ff-mono); font-size:.
|
| 253 |
#file-input { display:none; }
|
| 254 |
|
| 255 |
-
/* ββ URL INPUT ββ */
|
| 256 |
-
.url-input-wrap { display:none; flex-direction:column; gap:.
|
| 257 |
.url-input-wrap.show { display:flex; }
|
| 258 |
.url-field {
|
| 259 |
display:flex; align-items:center;
|
| 260 |
-
border:
|
| 261 |
background:var(--g1); overflow:hidden;
|
| 262 |
}
|
| 263 |
-
.url-prefix { font-family:var(--ff-mono); font-size:0.
|
| 264 |
.url-input {
|
| 265 |
flex:1; background:transparent; border:none; outline:none;
|
| 266 |
-
color:var(--green); font-family:var(--ff-mono); font-size:.
|
| 267 |
-
padding:.
|
| 268 |
}
|
| 269 |
-
.url-input::placeholder { color:var(--green-dim); }
|
| 270 |
.url-load-btn {
|
| 271 |
-
padding:.
|
| 272 |
-
border-left:
|
| 273 |
-
color:var(--green2); font-family:var(--ff-mono); font-size:0.
|
| 274 |
cursor:pointer; transition:background .2s; white-space:nowrap;
|
|
|
|
| 275 |
}
|
| 276 |
-
.url-load-btn:hover { background:rgba(0,255,65,.
|
| 277 |
.url-preview {
|
| 278 |
-
width:100%; height:
|
| 279 |
-
border-radius:
|
| 280 |
}
|
| 281 |
.url-preview.show { display:block; }
|
| 282 |
|
| 283 |
-
/* ββ CLASSIFY BTN ββ */
|
| 284 |
.classify-btn {
|
| 285 |
flex-shrink: 0;
|
| 286 |
-
width:100%; margin-top:
|
| 287 |
-
padding:.
|
| 288 |
background:linear-gradient(135deg,var(--green3),var(--green-dim));
|
| 289 |
-
border:
|
| 290 |
color:var(--green); font-family:var(--ff-head);
|
| 291 |
-
font-size:1.
|
| 292 |
cursor:pointer; position:relative; overflow:hidden;
|
| 293 |
-
transition:all .
|
|
|
|
| 294 |
}
|
| 295 |
.classify-btn::before {
|
| 296 |
content:''; position:absolute; top:-2px; left:-100%;
|
| 297 |
width:60%; height:calc(100% + 4px);
|
| 298 |
-
background:linear-gradient(90deg,transparent,rgba(0,255,65,.
|
| 299 |
transform:skewX(-15deg);
|
| 300 |
}
|
| 301 |
.classify-btn.loading::before { animation:sweep 1.2s linear infinite; }
|
| 302 |
@keyframes sweep { to { left:150%; } }
|
| 303 |
.classify-btn:not(:disabled):hover {
|
| 304 |
background:linear-gradient(135deg,var(--green2),var(--green3));
|
| 305 |
-
box-shadow:0 0
|
|
|
|
| 306 |
}
|
| 307 |
-
.classify-btn:disabled { opacity:.
|
| 308 |
|
| 309 |
-
/* ββ RIGHT PANEL β results ββ */
|
| 310 |
.result-panel-inner {
|
| 311 |
flex: 1;
|
| 312 |
min-height: 0;
|
| 313 |
overflow-y: auto;
|
| 314 |
overflow-x: hidden;
|
| 315 |
-
scrollbar-width:
|
| 316 |
-
|
| 317 |
-
flex-direction: column;
|
| 318 |
}
|
| 319 |
-
.result-panel-inner::-webkit-scrollbar {
|
| 320 |
|
| 321 |
.result-waiting {
|
| 322 |
display:flex; flex-direction:column;
|
| 323 |
align-items:flex-start; justify-content:center;
|
| 324 |
-
flex:1; gap:.
|
| 325 |
}
|
| 326 |
-
.result-waiting .rw-title { font-family:var(--ff-head); font-size:1.
|
| 327 |
-
.result-waiting .rw-sub { font-family:var(--ff-mono); font-size:
|
| 328 |
.terminal-cursor {
|
| 329 |
-
display:inline-block; width:
|
| 330 |
-
background:var(--green); margin-left:
|
| 331 |
animation:blink-c .8s step-end infinite; vertical-align:middle;
|
| 332 |
}
|
| 333 |
@keyframes blink-c{0%,100%{opacity:1}50%{opacity:0}}
|
| 334 |
|
| 335 |
-
.result-content { display:none; flex-direction:column; gap:
|
| 336 |
-
.result-content.show { display:flex; animation:scanIn .
|
| 337 |
@keyframes scanIn {
|
| 338 |
from{opacity:0;clip-path:inset(0 0 100% 0)}
|
| 339 |
to{opacity:1;clip-path:inset(0 0 0% 0)}
|
| 340 |
}
|
| 341 |
|
| 342 |
-
.rc-header { display:flex; flex-direction:column; gap:.
|
| 343 |
-
.rc-label { font-family:var(--ff-mono); font-size:.
|
| 344 |
.rc-class {
|
| 345 |
-
font-family:var(--ff-head); font-size:
|
| 346 |
-
letter-spacing:-.
|
| 347 |
-
text-shadow:0 0
|
|
|
|
| 348 |
}
|
| 349 |
-
.rc-conf { font-family:var(--ff-mono); font-size:
|
| 350 |
-
.rc-conf strong { color:var(--green2); font-size:
|
| 351 |
|
| 352 |
.conf-track {
|
| 353 |
-
height:
|
| 354 |
}
|
| 355 |
.conf-fill {
|
| 356 |
height:100%;
|
| 357 |
background:linear-gradient(90deg,var(--green3),var(--green));
|
| 358 |
-
border-radius:
|
| 359 |
-
transition:width 1s cubic-bezier(.
|
| 360 |
-
box-shadow:0 0
|
| 361 |
}
|
| 362 |
|
| 363 |
-
.rc-divider { height:
|
| 364 |
|
| 365 |
-
.prob-list { display:flex; flex-direction:column; gap:.
|
| 366 |
-
.prob-row { display:flex; flex-direction:column; gap:.
|
| 367 |
.prob-meta { display:flex; justify-content:space-between; align-items:baseline; }
|
| 368 |
.prob-name {
|
| 369 |
-
font-family:var(--ff-body); font-size:
|
| 370 |
-
color:var(--muted); display:flex; align-items:center; gap:.
|
| 371 |
}
|
| 372 |
-
.prob-row.top .prob-name { color:var(--green); font-weight:
|
| 373 |
-
.prob-pct { font-family:var(--ff-mono); font-size:.
|
| 374 |
-
.prob-row.top .prob-pct { color:var(--green2); }
|
| 375 |
-
.prob-track { height:
|
| 376 |
.prob-fill {
|
| 377 |
height:100%; background:var(--green-dim);
|
| 378 |
-
border-radius:
|
| 379 |
-
transition:width .8s cubic-bezier(.
|
| 380 |
}
|
| 381 |
.prob-row.top .prob-fill {
|
| 382 |
background:linear-gradient(90deg,var(--green3),var(--green));
|
| 383 |
-
box-shadow:0 0
|
| 384 |
}
|
| 385 |
|
| 386 |
.result-error {
|
| 387 |
-
display:none; padding:
|
| 388 |
-
border:1px solid rgba(255,
|
| 389 |
-
background:rgba(255,
|
| 390 |
-
font-family:var(--ff-mono); font-size:.
|
| 391 |
}
|
| 392 |
.result-error.show { display:block; animation:fadeIn .3s ease; }
|
| 393 |
|
| 394 |
-
/* ββ FOOTER BAR β
|
| 395 |
.footer-bar {
|
| 396 |
flex-shrink: 0;
|
| 397 |
-
border-top:
|
| 398 |
-
padding: .
|
| 399 |
display: flex; justify-content: space-between; align-items: center;
|
| 400 |
animation: fadeIn .8s ease .25s both;
|
| 401 |
}
|
| 402 |
-
.footer-bar p { font-family:var(--ff-mono); font-size:.
|
| 403 |
|
| 404 |
-
@keyframes fadeIn{from{opacity:0;transform:translateY(
|
| 405 |
</style>
|
| 406 |
</head>
|
| 407 |
<body>
|
|
@@ -422,7 +439,7 @@
|
|
| 422 |
</div>
|
| 423 |
</header>
|
| 424 |
|
| 425 |
-
<!-- CLASSES BAR
|
| 426 |
<div class="classes-bar">
|
| 427 |
<span class="cs-label">CLASSES //</span>
|
| 428 |
<div class="cs-pills">
|
|
@@ -441,8 +458,6 @@
|
|
| 441 |
<!-- LEFT : inputs -->
|
| 442 |
<div class="panel">
|
| 443 |
<div class="panel-title">01 // MODEL_SELECT</div>
|
| 444 |
-
|
| 445 |
-
<!-- scrollable zone so nothing overflows -->
|
| 446 |
<div class="panel-scroll">
|
| 447 |
<div class="model-grid">
|
| 448 |
<div class="model-card active" data-fw="pytorch" onclick="selectModel(this)">
|
|
@@ -490,10 +505,9 @@
|
|
| 490 |
<img id="url-preview" class="url-preview" src="" alt="URL preview"/>
|
| 491 |
</div>
|
| 492 |
|
| 493 |
-
<div class="panel-title" style="margin-top:
|
| 494 |
</div><!-- /panel-scroll -->
|
| 495 |
|
| 496 |
-
<!-- Btn outside scroll so it stays at bottom -->
|
| 497 |
<button class="classify-btn" id="classify-btn" disabled onclick="classify()">
|
| 498 |
RUN CLASSIFICATION β
|
| 499 |
</button>
|
|
@@ -523,7 +537,7 @@
|
|
| 523 |
</div>
|
| 524 |
<div class="rc-divider"></div>
|
| 525 |
<div>
|
| 526 |
-
<div class="panel-title" style="margin-bottom:.
|
| 527 |
<div class="prob-list" id="prob-list"></div>
|
| 528 |
</div>
|
| 529 |
</div>
|
|
@@ -679,7 +693,7 @@
|
|
| 679 |
document.getElementById("tab-file").style.display = "block";
|
| 680 |
</script>
|
| 681 |
|
| 682 |
-
<!-- PLEXUS BACKGROUND -->
|
| 683 |
<script>
|
| 684 |
(function(){
|
| 685 |
const canvas = document.getElementById('plexus-bg');
|
|
@@ -708,23 +722,23 @@
|
|
| 708 |
}
|
| 709 |
for(let i=0;i<nodes.length;i++)for(let j=i+1;j<nodes.length;j++){
|
| 710 |
const a=nodes[i],b=nodes[j],dx=a.x-b.x,dy=a.y-b.y,d=Math.sqrt(dx*dx+dy*dy);
|
| 711 |
-
if(d<MAX_DIST){const al=(1-d/MAX_DIST)*.28;ctx.beginPath();ctx.moveTo(a.x,a.y);ctx.lineTo(b.x,b.y);ctx.strokeStyle=LINE_COLOR+al+')';ctx.lineWidth=.
|
| 712 |
}
|
| 713 |
for(const n of nodes){
|
| 714 |
const dxM=mouse.x-n.x,dyM=mouse.y-n.y,dM=Math.sqrt(dxM*dxM+dyM*dyM);
|
| 715 |
-
if(dM<MOUSE_DIST){const al=(1-dM/MOUSE_DIST)*.35;ctx.beginPath();ctx.moveTo(mouse.x,mouse.y);ctx.lineTo(n.x,n.y);ctx.strokeStyle=LINE_COLOR+al+')';ctx.lineWidth=.
|
| 716 |
}
|
| 717 |
if(mouse.x>0){
|
| 718 |
-
const g=ctx.createRadialGradient(mouse.x,mouse.y,0,mouse.x,mouse.y,
|
| 719 |
-
g.addColorStop(0,'rgba(0,255,65,0.
|
| 720 |
-
ctx.beginPath();ctx.arc(mouse.x,mouse.y,
|
| 721 |
-
ctx.beginPath();ctx.arc(mouse.x,mouse.y,
|
| 722 |
}
|
| 723 |
for(const n of nodes){
|
| 724 |
-
const g=ctx.createRadialGradient(n.x,n.y,0,n.x,n.y,n.r*
|
| 725 |
-
g.addColorStop(0,NODE_COLOR+'0.
|
| 726 |
-
ctx.beginPath();ctx.arc(n.x,n.y,n.r*
|
| 727 |
-
ctx.beginPath();ctx.arc(n.x,n.y,n.r,0,Math.PI*2);ctx.fillStyle=NODE_COLOR+'0.
|
| 728 |
}
|
| 729 |
requestAnimationFrame(draw);
|
| 730 |
}
|
|
@@ -734,3 +748,4 @@
|
|
| 734 |
</script>
|
| 735 |
</body>
|
| 736 |
</html>
|
|
|
|
|
|
| 3 |
<head>
|
| 4 |
<meta charset="UTF-8"/>
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
| 6 |
+
<title>SCENEIQ β Intel Scene Classifier | Enhanced Readability</title>
|
| 7 |
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 8 |
<link href="https://fonts.googleapis.com/css2?family=Share+Tech+Mono&family=Rajdhani:wght@400;500;600;700&family=Exo+2:wght@300;400;600&display=swap" rel="stylesheet">
|
| 9 |
<style>
|
| 10 |
|
| 11 |
+
/* ββ TOKENS β SCALED FOR READABILITY ββ */
|
|
|
|
|
|
|
| 12 |
:root {
|
| 13 |
+
--g0:#000000; --g1:#071007; --g2:#0f1a0f; --g3:#152215;
|
| 14 |
+
--g4:#1f331f;
|
| 15 |
+
--green:#00ff41; --green2:#00dd33; --green3:#00aa22;
|
| 16 |
+
--green-dim:#00661a; --green-glow:rgba(0,255,65,0.2);
|
| 17 |
+
--border:rgba(0,255,65,0.22); --border2:rgba(0,255,65,0.45);
|
| 18 |
+
--muted:rgba(0,255,65,0.55);
|
| 19 |
--ff-mono:'Share Tech Mono',monospace;
|
| 20 |
--ff-head:'Rajdhani',sans-serif;
|
| 21 |
--ff-body:'Exo 2',sans-serif;
|
| 22 |
+
--r:8px;
|
| 23 |
}
|
| 24 |
|
| 25 |
*, *::before, *::after { box-sizing:border-box; margin:0; padding:0; }
|
| 26 |
|
|
|
|
| 27 |
html, body {
|
| 28 |
height: 100vh;
|
| 29 |
overflow: hidden;
|
| 30 |
+
font-size: 18px; /* base boost for readability */
|
| 31 |
}
|
| 32 |
|
| 33 |
body {
|
|
|
|
| 36 |
font-family: var(--ff-body);
|
| 37 |
display: flex;
|
| 38 |
flex-direction: column;
|
| 39 |
+
line-height: 1.45;
|
| 40 |
}
|
| 41 |
|
| 42 |
+
/* ββ Background layers (enhanced depth) ββ */
|
| 43 |
#plexus-bg {
|
| 44 |
position: fixed; inset: 0; z-index: 0; pointer-events: none;
|
| 45 |
}
|
| 46 |
body::before {
|
| 47 |
content: ''; position: fixed; inset: 0; z-index: 0; pointer-events: none;
|
| 48 |
background-image:
|
| 49 |
+
linear-gradient(rgba(0,255,65,0.045) 1px, transparent 1px),
|
| 50 |
+
linear-gradient(90deg, rgba(0,255,65,0.045) 1px, transparent 1px);
|
| 51 |
background-size: 40px 40px;
|
| 52 |
}
|
| 53 |
body::after {
|
| 54 |
content: ''; position: fixed; inset: 0; z-index: 0; pointer-events: none;
|
| 55 |
background: repeating-linear-gradient(
|
| 56 |
0deg, transparent, transparent 2px,
|
| 57 |
+
rgba(0,0,0,0.1) 2px, rgba(0,0,0,0.1) 5px
|
| 58 |
);
|
| 59 |
}
|
| 60 |
|
| 61 |
+
/* ββ WRAPPER β full height, spacious inner layout ββ */
|
| 62 |
+
.wrapper {
|
| 63 |
+
width: 100%;
|
| 64 |
+
max-width: 1400px;
|
| 65 |
+
margin: 0 auto;
|
| 66 |
+
padding: 0 1.5rem;
|
| 67 |
+
height: 100vh;
|
| 68 |
+
display: flex;
|
| 69 |
+
flex-direction: column;
|
| 70 |
+
gap: 0.25rem;
|
| 71 |
+
position: relative;
|
| 72 |
+
z-index: 2;
|
| 73 |
+
}
|
| 74 |
|
| 75 |
+
/* ββ HEADER β bold, crisp ββ */
|
| 76 |
header {
|
| 77 |
flex-shrink: 0;
|
| 78 |
+
border-bottom: 2px solid var(--border);
|
| 79 |
+
padding: 1.2rem 0 0.8rem 0;
|
| 80 |
display: flex; align-items: center; justify-content: space-between;
|
| 81 |
animation: fadeIn .5s ease both;
|
| 82 |
}
|
| 83 |
+
.logo { display:flex; align-items:center; gap:1rem; }
|
| 84 |
.logo-icon {
|
| 85 |
+
width:50px; height:50px; border:1.8px solid var(--green);
|
| 86 |
+
display:grid; place-items:center; font-size:1.4rem;
|
| 87 |
+
box-shadow: 0 0 18px var(--green-glow), inset 0 0 12px var(--green-glow);
|
| 88 |
animation: pulse-box 3s ease-in-out infinite;
|
| 89 |
+
background: rgba(0,255,65,0.02);
|
| 90 |
}
|
| 91 |
@keyframes pulse-box {
|
| 92 |
+
0%,100%{box-shadow:0 0 14px var(--green-glow),inset 0 0 8px var(--green-glow);}
|
| 93 |
+
50%{box-shadow:0 0 28px rgba(0,255,65,.4),inset 0 0 18px rgba(0,255,65,.2);}
|
| 94 |
}
|
| 95 |
.logo-text {
|
| 96 |
+
font-family:var(--ff-head); font-size:2.5rem; font-weight:700;
|
| 97 |
+
letter-spacing:.12em; text-shadow:0 0 22px rgba(0,255,65,.7);
|
| 98 |
}
|
| 99 |
.logo-text span { color:var(--green3); }
|
| 100 |
|
| 101 |
+
.header-right { display:flex; align-items:center; gap:1.6rem; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 102 |
.status-dot {
|
| 103 |
display:flex; align-items:center; gap:.9rem;
|
| 104 |
+
font-family:var(--ff-mono); font-size:0.85rem; color:var(--muted);
|
| 105 |
+
letter-spacing: 0.5px;
|
| 106 |
}
|
| 107 |
.dot {
|
| 108 |
+
width:9px; height:9px; border-radius:50%;
|
| 109 |
+
background:var(--green); box-shadow:0 0 12px var(--green);
|
| 110 |
animation:blink 2s step-end infinite;
|
| 111 |
}
|
| 112 |
@keyframes blink{0%,100%{opacity:1}50%{opacity:.2}}
|
| 113 |
+
.version { font-family:var(--ff-mono); font-size:.85rem; color:var(--green-dim); letter-spacing:.12em; }
|
| 114 |
|
| 115 |
+
/* ββ CLASSES BAR β bigger pills, readable ββ */
|
| 116 |
.classes-bar {
|
| 117 |
flex-shrink: 0;
|
| 118 |
+
display: flex; align-items: center; gap: 1rem;
|
| 119 |
+
padding: 0.7rem 0;
|
| 120 |
border-bottom: 1px solid var(--border);
|
| 121 |
animation: fadeIn .6s ease .1s both;
|
| 122 |
}
|
| 123 |
+
.cs-label {
|
| 124 |
+
font-family:var(--ff-mono); font-size:0.85rem;
|
| 125 |
+
color:var(--green-dim); letter-spacing:.2em;
|
| 126 |
+
white-space:nowrap; font-weight:500;
|
| 127 |
+
}
|
| 128 |
+
.cs-pills { display:flex; gap:0.6rem; flex-wrap:wrap; }
|
| 129 |
.cs-pill {
|
| 130 |
+
font-family:var(--ff-mono); font-size:0.85rem;
|
| 131 |
+
padding:0.3rem 0.9rem;
|
| 132 |
+
border:1px solid var(--border); border-radius:20px;
|
| 133 |
color:var(--green-dim); transition:all .2s; cursor:default;
|
| 134 |
+
background: rgba(0,20,0,0.4);
|
| 135 |
+
backdrop-filter: blur(1px);
|
| 136 |
}
|
| 137 |
+
.cs-pill:hover { border-color:var(--green2); color:var(--green); background:rgba(0,255,65,0.08); }
|
| 138 |
|
| 139 |
+
/* ββ MAIN GRID β generous spacing, bigger cards ββ */
|
| 140 |
.main-grid {
|
| 141 |
flex: 1;
|
| 142 |
+
min-height: 0;
|
| 143 |
display: grid;
|
| 144 |
grid-template-columns: 1fr 1fr;
|
| 145 |
+
gap: 1.5rem;
|
| 146 |
+
padding: 1rem 0 0.75rem 0;
|
| 147 |
animation: fadeIn .7s ease .15s both;
|
| 148 |
}
|
| 149 |
|
| 150 |
+
/* ββ PANELS β elevated, more padding, readable containers ββ */
|
| 151 |
.panel {
|
| 152 |
+
background: rgba(10, 21, 10, 0.92);
|
| 153 |
+
backdrop-filter: blur(2px);
|
| 154 |
border: 1px solid var(--border);
|
| 155 |
border-radius: var(--r);
|
| 156 |
+
padding: 1.5rem 1.6rem;
|
| 157 |
position: relative;
|
| 158 |
+
overflow: hidden;
|
| 159 |
display: flex;
|
| 160 |
flex-direction: column;
|
| 161 |
+
box-shadow: 0 8px 20px rgba(0,0,0,0.6), 0 0 0 1px rgba(0,255,65,0.05) inset;
|
| 162 |
+
transition: box-shadow 0.2s;
|
| 163 |
+
}
|
| 164 |
+
.panel:hover {
|
| 165 |
+
box-shadow: 0 10px 28px rgba(0,0,0,0.7), 0 0 0 1px rgba(0,255,65,0.15) inset;
|
| 166 |
}
|
| 167 |
.panel::before {
|
| 168 |
+
content:''; position:absolute; top:0; left:0; right:0; height:3px;
|
| 169 |
+
background:linear-gradient(90deg,transparent,var(--green2),transparent);
|
| 170 |
}
|
| 171 |
.panel-title {
|
| 172 |
flex-shrink: 0;
|
| 173 |
+
font-family:var(--ff-mono); font-size:0.9rem;
|
| 174 |
+
letter-spacing:.25em; color:var(--green3);
|
| 175 |
+
text-transform:uppercase; margin-bottom:1rem;
|
| 176 |
+
display:flex; align-items:center; gap:.8rem;
|
| 177 |
+
font-weight: 500;
|
| 178 |
}
|
| 179 |
+
.panel-title::after { content:''; flex:1; height:1.5px; background:var(--border); }
|
| 180 |
|
| 181 |
+
/* scrollable zones β smooth, no visible scrollbar */
|
| 182 |
.panel-scroll {
|
| 183 |
flex: 1;
|
| 184 |
min-height: 0;
|
| 185 |
overflow-y: auto;
|
| 186 |
overflow-x: hidden;
|
| 187 |
+
scrollbar-width: thin;
|
| 188 |
+
scrollbar-color: var(--green3) var(--g2);
|
| 189 |
+
padding-right: 3px;
|
| 190 |
}
|
| 191 |
+
.panel-scroll::-webkit-scrollbar { width: 5px; }
|
| 192 |
+
.panel-scroll::-webkit-scrollbar-track { background: var(--g2); border-radius: 4px; }
|
| 193 |
+
.panel-scroll::-webkit-scrollbar-thumb { background: var(--green-dim); border-radius: 4px; }
|
| 194 |
|
| 195 |
+
/* ββ MODEL SELECTOR (larger cards) ββ */
|
| 196 |
.model-grid {
|
| 197 |
+
display:grid; grid-template-columns:1fr 1fr; gap:1rem;
|
| 198 |
+
margin-bottom:1.4rem;
|
| 199 |
}
|
| 200 |
.model-card {
|
| 201 |
+
border:1.5px solid var(--border); border-radius:12px;
|
| 202 |
+
padding:0.9rem 0.8rem; cursor:pointer; transition:all .2s;
|
| 203 |
background:var(--g1);
|
| 204 |
+
display:flex; flex-direction:column; gap:0.4rem;
|
| 205 |
}
|
| 206 |
+
.model-card:hover { border-color:var(--green2); background:rgba(0,255,65,0.08); transform:translateY(-2px); }
|
| 207 |
.model-card.active {
|
| 208 |
+
border-color:var(--green); background:rgba(0,255,65,.1);
|
| 209 |
+
box-shadow:0 0 20px rgba(0,255,65,.18),inset 0 0 12px rgba(0,255,65,.06);
|
| 210 |
}
|
| 211 |
+
.model-card.active .mc-name { color:var(--green); text-shadow:0 0 5px var(--green-glow);}
|
| 212 |
+
.mc-icon { font-size:1.6rem; }
|
| 213 |
+
.mc-name { font-family:var(--ff-head); font-weight:700; font-size:1.3rem; color:var(--green2); transition:color .2s; }
|
| 214 |
+
.mc-sub { font-family:var(--ff-mono); font-size:0.75rem; color:var(--muted); letter-spacing: -0.2px;}
|
| 215 |
|
| 216 |
+
/* ββ INPUT TABS (bigger click area) ββ */
|
| 217 |
.input-tabs {
|
| 218 |
+
display:flex; margin-bottom:1rem;
|
| 219 |
+
border:1px solid var(--border); border-radius:12px; overflow:hidden;
|
| 220 |
}
|
| 221 |
.tab-btn {
|
| 222 |
+
flex:1; padding:0.7rem 0.5rem; background:var(--g1);
|
| 223 |
border:none; color:var(--muted); font-family:var(--ff-mono);
|
| 224 |
+
font-size:0.85rem; letter-spacing:.1em; cursor:pointer;
|
| 225 |
+
transition:all .2s; text-transform:uppercase; font-weight:500;
|
| 226 |
}
|
| 227 |
.tab-btn:hover { background:var(--g3); color:var(--green2); }
|
| 228 |
.tab-btn.active {
|
| 229 |
+
background:rgba(0,255,65,.12); color:var(--green);
|
| 230 |
+
box-shadow:inset 0 -3px 0 var(--green);
|
| 231 |
}
|
| 232 |
|
| 233 |
+
/* ββ DROP ZONE β taller, clearer text ββ */
|
| 234 |
.drop-zone {
|
| 235 |
+
border:2px dashed var(--border2); border-radius:16px;
|
| 236 |
+
height: 210px;
|
| 237 |
display:flex; flex-direction:column;
|
| 238 |
align-items:center; justify-content:center;
|
| 239 |
+
gap:.7rem; cursor:pointer;
|
| 240 |
transition:all .25s; background:var(--g1);
|
| 241 |
position:relative; overflow:hidden;
|
| 242 |
}
|
| 243 |
.drop-zone:hover,.drop-zone.drag {
|
| 244 |
+
border-color:var(--green); background:rgba(0,255,65,.08);
|
| 245 |
+
box-shadow:0 0 28px rgba(0,255,65,.12);
|
| 246 |
}
|
| 247 |
.drop-zone.has-img .dz-ph { display:none; }
|
| 248 |
#preview-img {
|
| 249 |
position:absolute; inset:0; width:100%; height:100%;
|
| 250 |
object-fit:cover; display:none;
|
| 251 |
+
border-radius:14px; opacity:.9;
|
| 252 |
}
|
| 253 |
.drop-zone.has-img #preview-img { display:block; }
|
| 254 |
+
.dz-corner { position:absolute; width:14px; height:14px; border-color:var(--green2); border-style:solid; }
|
| 255 |
+
.dz-corner.tl{top:10px;left:10px;border-width:2px 0 0 2px;}
|
| 256 |
+
.dz-corner.tr{top:10px;right:10px;border-width:2px 2px 0 0;}
|
| 257 |
+
.dz-corner.bl{bottom:10px;left:10px;border-width:0 0 2px 2px;}
|
| 258 |
+
.dz-corner.br{bottom:10px;right:10px;border-width:0 2px 2px 0;}
|
| 259 |
+
.dz-ph { display:flex; flex-direction:column; align-items:center; gap:.5rem; pointer-events:none; }
|
| 260 |
.dz-icon {
|
| 261 |
+
width:48px; height:48px; border:1.5px solid var(--border2);
|
| 262 |
border-radius:50%; display:grid; place-items:center;
|
| 263 |
+
font-size:1.5rem; color:var(--green2);
|
| 264 |
}
|
| 265 |
+
.dz-ph p { font-family:var(--ff-mono); font-size:0.95rem; color:var(--muted); font-weight:500; }
|
| 266 |
+
.dz-ph em { font-family:var(--ff-mono); font-size:0.75rem; color:var(--green-dim); font-style:normal; }
|
| 267 |
#file-input { display:none; }
|
| 268 |
|
| 269 |
+
/* ββ URL INPUT β bigger controls ββ */
|
| 270 |
+
.url-input-wrap { display:none; flex-direction:column; gap:.8rem; }
|
| 271 |
.url-input-wrap.show { display:flex; }
|
| 272 |
.url-field {
|
| 273 |
display:flex; align-items:center;
|
| 274 |
+
border:1.5px solid var(--border2); border-radius:12px;
|
| 275 |
background:var(--g1); overflow:hidden;
|
| 276 |
}
|
| 277 |
+
.url-prefix { font-family:var(--ff-mono); font-size:0.85rem; color:var(--green2); padding:0 0.8rem; white-space:nowrap; border-right:1.5px solid var(--border); }
|
| 278 |
.url-input {
|
| 279 |
flex:1; background:transparent; border:none; outline:none;
|
| 280 |
+
color:var(--green); font-family:var(--ff-mono); font-size:0.9rem;
|
| 281 |
+
padding:0.8rem 1rem; caret-color:var(--green);
|
| 282 |
}
|
| 283 |
+
.url-input::placeholder { color:var(--green-dim); font-size:0.8rem; }
|
| 284 |
.url-load-btn {
|
| 285 |
+
padding:0.7rem 1rem; background:rgba(0,255,65,.12); border:none;
|
| 286 |
+
border-left:1.5px solid var(--border);
|
| 287 |
+
color:var(--green2); font-family:var(--ff-mono); font-size:0.85rem;
|
| 288 |
cursor:pointer; transition:background .2s; white-space:nowrap;
|
| 289 |
+
font-weight:600;
|
| 290 |
}
|
| 291 |
+
.url-load-btn:hover { background:rgba(0,255,65,.25); }
|
| 292 |
.url-preview {
|
| 293 |
+
width:100%; height:130px; object-fit:cover;
|
| 294 |
+
border-radius:12px; border:1px solid var(--border); display:none;
|
| 295 |
}
|
| 296 |
.url-preview.show { display:block; }
|
| 297 |
|
| 298 |
+
/* ββ CLASSIFY BTN β bold, interactive ββ */
|
| 299 |
.classify-btn {
|
| 300 |
flex-shrink: 0;
|
| 301 |
+
width:100%; margin-top:1rem;
|
| 302 |
+
padding:0.9rem 0.5rem;
|
| 303 |
background:linear-gradient(135deg,var(--green3),var(--green-dim));
|
| 304 |
+
border:1.5px solid var(--green3); border-radius:60px;
|
| 305 |
color:var(--green); font-family:var(--ff-head);
|
| 306 |
+
font-size:1.3rem; font-weight:700; letter-spacing:.12em;
|
| 307 |
cursor:pointer; position:relative; overflow:hidden;
|
| 308 |
+
transition:all .25s; text-transform:uppercase;
|
| 309 |
+
box-shadow:0 2px 8px rgba(0,0,0,0.3);
|
| 310 |
}
|
| 311 |
.classify-btn::before {
|
| 312 |
content:''; position:absolute; top:-2px; left:-100%;
|
| 313 |
width:60%; height:calc(100% + 4px);
|
| 314 |
+
background:linear-gradient(90deg,transparent,rgba(0,255,65,.25),transparent);
|
| 315 |
transform:skewX(-15deg);
|
| 316 |
}
|
| 317 |
.classify-btn.loading::before { animation:sweep 1.2s linear infinite; }
|
| 318 |
@keyframes sweep { to { left:150%; } }
|
| 319 |
.classify-btn:not(:disabled):hover {
|
| 320 |
background:linear-gradient(135deg,var(--green2),var(--green3));
|
| 321 |
+
box-shadow:0 0 30px rgba(0,255,65,.45); transform:translateY(-2px);
|
| 322 |
+
border-color: var(--green);
|
| 323 |
}
|
| 324 |
+
.classify-btn:disabled { opacity:.4; cursor:not-allowed; transform: none; }
|
| 325 |
|
| 326 |
+
/* ββ RIGHT PANEL β results, big class display, crisp probabilities ββ */
|
| 327 |
.result-panel-inner {
|
| 328 |
flex: 1;
|
| 329 |
min-height: 0;
|
| 330 |
overflow-y: auto;
|
| 331 |
overflow-x: hidden;
|
| 332 |
+
scrollbar-width: thin;
|
| 333 |
+
padding-right: 4px;
|
|
|
|
| 334 |
}
|
| 335 |
+
.result-panel-inner::-webkit-scrollbar { width: 5px; }
|
| 336 |
|
| 337 |
.result-waiting {
|
| 338 |
display:flex; flex-direction:column;
|
| 339 |
align-items:flex-start; justify-content:center;
|
| 340 |
+
flex:1; gap:.8rem; padding:0.6rem 0;
|
| 341 |
}
|
| 342 |
+
.result-waiting .rw-title { font-family:var(--ff-head); font-size:1.5rem; font-weight:600; color:var(--green2); letter-spacing:-0.2px; }
|
| 343 |
+
.result-waiting .rw-sub { font-family:var(--ff-mono); font-size:1rem; color:var(--green-dim); line-height:1.9; }
|
| 344 |
.terminal-cursor {
|
| 345 |
+
display:inline-block; width:9px; height:18px;
|
| 346 |
+
background:var(--green); margin-left:4px;
|
| 347 |
animation:blink-c .8s step-end infinite; vertical-align:middle;
|
| 348 |
}
|
| 349 |
@keyframes blink-c{0%,100%{opacity:1}50%{opacity:0}}
|
| 350 |
|
| 351 |
+
.result-content { display:none; flex-direction:column; gap:1.4rem; }
|
| 352 |
+
.result-content.show { display:flex; animation:scanIn .45s ease; }
|
| 353 |
@keyframes scanIn {
|
| 354 |
from{opacity:0;clip-path:inset(0 0 100% 0)}
|
| 355 |
to{opacity:1;clip-path:inset(0 0 0% 0)}
|
| 356 |
}
|
| 357 |
|
| 358 |
+
.rc-header { display:flex; flex-direction:column; gap:.5rem; }
|
| 359 |
+
.rc-label { font-family:var(--ff-mono); font-size:0.7rem; letter-spacing:.25em; color:var(--green3); font-weight:500; }
|
| 360 |
.rc-class {
|
| 361 |
+
font-family:var(--ff-head); font-size:4rem; font-weight:800;
|
| 362 |
+
letter-spacing:-0.02em; line-height:1.1; color:var(--green);
|
| 363 |
+
text-shadow:0 0 28px rgba(0,255,65,.7);
|
| 364 |
+
word-break: break-word;
|
| 365 |
}
|
| 366 |
+
.rc-conf { font-family:var(--ff-mono); font-size:1rem; color:var(--muted); margin-top:.2rem; }
|
| 367 |
+
.rc-conf strong { color:var(--green2); font-size:1.2rem; }
|
| 368 |
|
| 369 |
.conf-track {
|
| 370 |
+
height:8px; background:var(--g4); border-radius:40px; overflow:hidden; margin-top:.6rem;
|
| 371 |
}
|
| 372 |
.conf-fill {
|
| 373 |
height:100%;
|
| 374 |
background:linear-gradient(90deg,var(--green3),var(--green));
|
| 375 |
+
border-radius:40px; width:0%;
|
| 376 |
+
transition:width 1s cubic-bezier(.2,.9,.3,1.1);
|
| 377 |
+
box-shadow:0 0 12px var(--green);
|
| 378 |
}
|
| 379 |
|
| 380 |
+
.rc-divider { height:1.5px; background:var(--border); flex-shrink:0; margin:.2rem 0; }
|
| 381 |
|
| 382 |
+
.prob-list { display:flex; flex-direction:column; gap:1rem; margin-top:0.3rem; }
|
| 383 |
+
.prob-row { display:flex; flex-direction:column; gap:.3rem; }
|
| 384 |
.prob-meta { display:flex; justify-content:space-between; align-items:baseline; }
|
| 385 |
.prob-name {
|
| 386 |
+
font-family:var(--ff-body); font-size:1rem; font-weight:500;
|
| 387 |
+
color:var(--muted); display:flex; align-items:center; gap:.5rem; text-transform:capitalize;
|
| 388 |
}
|
| 389 |
+
.prob-row.top .prob-name { color:var(--green); font-weight:700; text-shadow:0 0 3px rgba(0,255,65,0.3);}
|
| 390 |
+
.prob-pct { font-family:var(--ff-mono); font-size:0.85rem; color:var(--green-dim); font-weight:500; }
|
| 391 |
+
.prob-row.top .prob-pct { color:var(--green2); font-weight:600; }
|
| 392 |
+
.prob-track { height:7px; background:var(--g4); border-radius:40px; overflow:hidden; }
|
| 393 |
.prob-fill {
|
| 394 |
height:100%; background:var(--green-dim);
|
| 395 |
+
border-radius:40px; width:0%;
|
| 396 |
+
transition:width .8s cubic-bezier(.3,.8,.4,1);
|
| 397 |
}
|
| 398 |
.prob-row.top .prob-fill {
|
| 399 |
background:linear-gradient(90deg,var(--green3),var(--green));
|
| 400 |
+
box-shadow:0 0 10px rgba(0,255,65,.5);
|
| 401 |
}
|
| 402 |
|
| 403 |
.result-error {
|
| 404 |
+
display:none; padding:1rem;
|
| 405 |
+
border:1px solid rgba(255,70,70,.5); border-radius:12px;
|
| 406 |
+
background:rgba(255,30,30,.08);
|
| 407 |
+
font-family:var(--ff-mono); font-size:0.85rem; color:#ff7a7a; line-height:1.7;
|
| 408 |
}
|
| 409 |
.result-error.show { display:block; animation:fadeIn .3s ease; }
|
| 410 |
|
| 411 |
+
/* ββ FOOTER BAR β readable, relaxed ββ */
|
| 412 |
.footer-bar {
|
| 413 |
flex-shrink: 0;
|
| 414 |
+
border-top: 1.5px solid var(--border);
|
| 415 |
+
padding: 0.5rem 0;
|
| 416 |
display: flex; justify-content: space-between; align-items: center;
|
| 417 |
animation: fadeIn .8s ease .25s both;
|
| 418 |
}
|
| 419 |
+
.footer-bar p { font-family:var(--ff-mono); font-size:0.8rem; color:var(--green-dim); letter-spacing:0.3px; }
|
| 420 |
|
| 421 |
+
@keyframes fadeIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
|
| 422 |
</style>
|
| 423 |
</head>
|
| 424 |
<body>
|
|
|
|
| 439 |
</div>
|
| 440 |
</header>
|
| 441 |
|
| 442 |
+
<!-- CLASSES BAR -->
|
| 443 |
<div class="classes-bar">
|
| 444 |
<span class="cs-label">CLASSES //</span>
|
| 445 |
<div class="cs-pills">
|
|
|
|
| 458 |
<!-- LEFT : inputs -->
|
| 459 |
<div class="panel">
|
| 460 |
<div class="panel-title">01 // MODEL_SELECT</div>
|
|
|
|
|
|
|
| 461 |
<div class="panel-scroll">
|
| 462 |
<div class="model-grid">
|
| 463 |
<div class="model-card active" data-fw="pytorch" onclick="selectModel(this)">
|
|
|
|
| 505 |
<img id="url-preview" class="url-preview" src="" alt="URL preview"/>
|
| 506 |
</div>
|
| 507 |
|
| 508 |
+
<div class="panel-title" style="margin-top:1rem;">03 // ANALYZE</div>
|
| 509 |
</div><!-- /panel-scroll -->
|
| 510 |
|
|
|
|
| 511 |
<button class="classify-btn" id="classify-btn" disabled onclick="classify()">
|
| 512 |
RUN CLASSIFICATION β
|
| 513 |
</button>
|
|
|
|
| 537 |
</div>
|
| 538 |
<div class="rc-divider"></div>
|
| 539 |
<div>
|
| 540 |
+
<div class="panel-title" style="margin-bottom:.8rem;">// CLASS_SCORES</div>
|
| 541 |
<div class="prob-list" id="prob-list"></div>
|
| 542 |
</div>
|
| 543 |
</div>
|
|
|
|
| 693 |
document.getElementById("tab-file").style.display = "block";
|
| 694 |
</script>
|
| 695 |
|
| 696 |
+
<!-- PLEXUS BACKGROUND (enhanced) -->
|
| 697 |
<script>
|
| 698 |
(function(){
|
| 699 |
const canvas = document.getElementById('plexus-bg');
|
|
|
|
| 722 |
}
|
| 723 |
for(let i=0;i<nodes.length;i++)for(let j=i+1;j<nodes.length;j++){
|
| 724 |
const a=nodes[i],b=nodes[j],dx=a.x-b.x,dy=a.y-b.y,d=Math.sqrt(dx*dx+dy*dy);
|
| 725 |
+
if(d<MAX_DIST){const al=(1-d/MAX_DIST)*.28;ctx.beginPath();ctx.moveTo(a.x,a.y);ctx.lineTo(b.x,b.y);ctx.strokeStyle=LINE_COLOR+al+')';ctx.lineWidth=.9;ctx.stroke();}
|
| 726 |
}
|
| 727 |
for(const n of nodes){
|
| 728 |
const dxM=mouse.x-n.x,dyM=mouse.y-n.y,dM=Math.sqrt(dxM*dxM+dyM*dyM);
|
| 729 |
+
if(dM<MOUSE_DIST){const al=(1-dM/MOUSE_DIST)*.35;ctx.beginPath();ctx.moveTo(mouse.x,mouse.y);ctx.lineTo(n.x,n.y);ctx.strokeStyle=LINE_COLOR+al+')';ctx.lineWidth=.7;ctx.stroke();}
|
| 730 |
}
|
| 731 |
if(mouse.x>0){
|
| 732 |
+
const g=ctx.createRadialGradient(mouse.x,mouse.y,0,mouse.x,mouse.y,22);
|
| 733 |
+
g.addColorStop(0,'rgba(0,255,65,0.45)');g.addColorStop(1,'rgba(0,255,65,0)');
|
| 734 |
+
ctx.beginPath();ctx.arc(mouse.x,mouse.y,22,0,Math.PI*2);ctx.fillStyle=g;ctx.fill();
|
| 735 |
+
ctx.beginPath();ctx.arc(mouse.x,mouse.y,3,0,Math.PI*2);ctx.fillStyle='rgba(0,255,65,0.95)';ctx.fill();
|
| 736 |
}
|
| 737 |
for(const n of nodes){
|
| 738 |
+
const g=ctx.createRadialGradient(n.x,n.y,0,n.x,n.y,n.r*6);
|
| 739 |
+
g.addColorStop(0,NODE_COLOR+'0.35)');g.addColorStop(1,NODE_COLOR+'0)');
|
| 740 |
+
ctx.beginPath();ctx.arc(n.x,n.y,n.r*6,0,Math.PI*2);ctx.fillStyle=g;ctx.fill();
|
| 741 |
+
ctx.beginPath();ctx.arc(n.x,n.y,n.r,0,Math.PI*2);ctx.fillStyle=NODE_COLOR+'0.9)';ctx.fill();
|
| 742 |
}
|
| 743 |
requestAnimationFrame(draw);
|
| 744 |
}
|
|
|
|
| 748 |
</script>
|
| 749 |
</body>
|
| 750 |
</html>
|
| 751 |
+
```
|