Elie Bakouch commited on
Commit ·
eb54ca4
1
Parent(s): 5beecc4
you can just ask things
Browse files- index.html +1633 -0
index.html
CHANGED
|
@@ -1015,6 +1015,1129 @@
|
|
| 1015 |
}
|
| 1016 |
}
|
| 1017 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1018 |
/* Focus Areas */
|
| 1019 |
.focus {
|
| 1020 |
padding: 10rem 4rem;
|
|
@@ -2033,6 +3156,516 @@
|
|
| 2033 |
</div>
|
| 2034 |
</section>
|
| 2035 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2036 |
<section class="focus" id="focus">
|
| 2037 |
<div class="focus-header reveal">
|
| 2038 |
<span class="section-label">Focus Areas</span>
|
|
|
|
| 1015 |
}
|
| 1016 |
}
|
| 1017 |
|
| 1018 |
+
/* ARCADE FIGHTING GAME SECTION */
|
| 1019 |
+
.arcade {
|
| 1020 |
+
padding: 4rem 2rem;
|
| 1021 |
+
background: #0a0a0a;
|
| 1022 |
+
position: relative;
|
| 1023 |
+
overflow: hidden;
|
| 1024 |
+
min-height: 100vh;
|
| 1025 |
+
}
|
| 1026 |
+
|
| 1027 |
+
.arcade::before {
|
| 1028 |
+
content: '';
|
| 1029 |
+
position: absolute;
|
| 1030 |
+
inset: 0;
|
| 1031 |
+
background:
|
| 1032 |
+
repeating-linear-gradient(
|
| 1033 |
+
0deg,
|
| 1034 |
+
transparent,
|
| 1035 |
+
transparent 2px,
|
| 1036 |
+
rgba(0, 255, 255, 0.03) 2px,
|
| 1037 |
+
rgba(0, 255, 255, 0.03) 4px
|
| 1038 |
+
);
|
| 1039 |
+
pointer-events: none;
|
| 1040 |
+
animation: scanlines 8s linear infinite;
|
| 1041 |
+
}
|
| 1042 |
+
|
| 1043 |
+
@keyframes scanlines {
|
| 1044 |
+
0% { transform: translateY(0); }
|
| 1045 |
+
100% { transform: translateY(4px); }
|
| 1046 |
+
}
|
| 1047 |
+
|
| 1048 |
+
.arcade-crt {
|
| 1049 |
+
position: absolute;
|
| 1050 |
+
inset: 0;
|
| 1051 |
+
background: radial-gradient(ellipse at center, transparent 0%, rgba(0,0,0,0.4) 100%);
|
| 1052 |
+
pointer-events: none;
|
| 1053 |
+
}
|
| 1054 |
+
|
| 1055 |
+
.arcade-grid {
|
| 1056 |
+
position: absolute;
|
| 1057 |
+
inset: 0;
|
| 1058 |
+
background-image:
|
| 1059 |
+
linear-gradient(rgba(255, 0, 255, 0.1) 1px, transparent 1px),
|
| 1060 |
+
linear-gradient(90deg, rgba(0, 255, 255, 0.1) 1px, transparent 1px);
|
| 1061 |
+
background-size: 50px 50px;
|
| 1062 |
+
transform: perspective(500px) rotateX(60deg);
|
| 1063 |
+
transform-origin: center top;
|
| 1064 |
+
opacity: 0.5;
|
| 1065 |
+
}
|
| 1066 |
+
|
| 1067 |
+
.arcade-content {
|
| 1068 |
+
position: relative;
|
| 1069 |
+
z-index: 1;
|
| 1070 |
+
max-width: 1400px;
|
| 1071 |
+
margin: 0 auto;
|
| 1072 |
+
}
|
| 1073 |
+
|
| 1074 |
+
/* Main title - arcade style */
|
| 1075 |
+
.arcade-header {
|
| 1076 |
+
text-align: center;
|
| 1077 |
+
margin-bottom: 3rem;
|
| 1078 |
+
}
|
| 1079 |
+
|
| 1080 |
+
.arcade-title {
|
| 1081 |
+
font-family: 'Impact', 'Arial Black', sans-serif;
|
| 1082 |
+
font-size: clamp(3rem, 12vw, 10rem);
|
| 1083 |
+
font-weight: 900;
|
| 1084 |
+
text-transform: uppercase;
|
| 1085 |
+
letter-spacing: -0.02em;
|
| 1086 |
+
line-height: 0.9;
|
| 1087 |
+
background: linear-gradient(180deg,
|
| 1088 |
+
#fff 0%,
|
| 1089 |
+
#ff0 20%,
|
| 1090 |
+
#f0f 40%,
|
| 1091 |
+
#0ff 60%,
|
| 1092 |
+
#0f0 80%,
|
| 1093 |
+
#fff 100%
|
| 1094 |
+
);
|
| 1095 |
+
-webkit-background-clip: text;
|
| 1096 |
+
background-clip: text;
|
| 1097 |
+
-webkit-text-fill-color: transparent;
|
| 1098 |
+
filter: drop-shadow(0 0 10px #ff0) drop-shadow(0 0 20px #f0f) drop-shadow(0 0 40px #0ff);
|
| 1099 |
+
animation: glitch 3s infinite;
|
| 1100 |
+
position: relative;
|
| 1101 |
+
}
|
| 1102 |
+
|
| 1103 |
+
@keyframes glitch {
|
| 1104 |
+
0%, 90%, 100% { transform: translate(0); }
|
| 1105 |
+
91% { transform: translate(-2px, 1px); filter: drop-shadow(2px 0 #f00) drop-shadow(-2px 0 #0ff); }
|
| 1106 |
+
92% { transform: translate(2px, -1px); }
|
| 1107 |
+
93% { transform: translate(-1px, 2px); filter: drop-shadow(2px 0 #0f0) drop-shadow(-2px 0 #f0f); }
|
| 1108 |
+
94% { transform: translate(1px, -2px); }
|
| 1109 |
+
95% { transform: translate(0); }
|
| 1110 |
+
}
|
| 1111 |
+
|
| 1112 |
+
.arcade-subtitle {
|
| 1113 |
+
font-family: 'Courier New', monospace;
|
| 1114 |
+
font-size: 1.25rem;
|
| 1115 |
+
color: #0ff;
|
| 1116 |
+
text-transform: uppercase;
|
| 1117 |
+
letter-spacing: 0.5em;
|
| 1118 |
+
margin-top: 1rem;
|
| 1119 |
+
text-shadow: 0 0 10px #0ff;
|
| 1120 |
+
animation: blink 1s infinite;
|
| 1121 |
+
}
|
| 1122 |
+
|
| 1123 |
+
@keyframes blink {
|
| 1124 |
+
0%, 49% { opacity: 1; }
|
| 1125 |
+
50%, 100% { opacity: 0.7; }
|
| 1126 |
+
}
|
| 1127 |
+
|
| 1128 |
+
.insert-coin {
|
| 1129 |
+
font-family: 'Press Start 2P', 'Courier New', monospace;
|
| 1130 |
+
font-size: 0.875rem;
|
| 1131 |
+
color: #ff0;
|
| 1132 |
+
margin-top: 2rem;
|
| 1133 |
+
animation: pulse 1.5s ease-in-out infinite;
|
| 1134 |
+
text-shadow: 0 0 10px #ff0;
|
| 1135 |
+
}
|
| 1136 |
+
|
| 1137 |
+
@keyframes pulse {
|
| 1138 |
+
0%, 100% { opacity: 1; }
|
| 1139 |
+
50% { opacity: 0.3; }
|
| 1140 |
+
}
|
| 1141 |
+
|
| 1142 |
+
/* Fighter select screen */
|
| 1143 |
+
.fighter-select {
|
| 1144 |
+
display: grid;
|
| 1145 |
+
grid-template-columns: repeat(5, 1fr);
|
| 1146 |
+
gap: 1rem;
|
| 1147 |
+
margin: 3rem 0;
|
| 1148 |
+
padding: 2rem;
|
| 1149 |
+
background: linear-gradient(180deg, #1a0a2e 0%, #0a0a1a 100%);
|
| 1150 |
+
border: 4px solid #f0f;
|
| 1151 |
+
box-shadow:
|
| 1152 |
+
0 0 20px #f0f,
|
| 1153 |
+
inset 0 0 60px rgba(255, 0, 255, 0.1);
|
| 1154 |
+
position: relative;
|
| 1155 |
+
}
|
| 1156 |
+
|
| 1157 |
+
.fighter-select::before {
|
| 1158 |
+
content: '>>> SELECT YOUR OPTIMIZER <<<';
|
| 1159 |
+
position: absolute;
|
| 1160 |
+
top: -1.5rem;
|
| 1161 |
+
left: 50%;
|
| 1162 |
+
transform: translateX(-50%);
|
| 1163 |
+
font-family: 'Courier New', monospace;
|
| 1164 |
+
font-size: 0.875rem;
|
| 1165 |
+
color: #0ff;
|
| 1166 |
+
background: #0a0a1a;
|
| 1167 |
+
padding: 0.25rem 1rem;
|
| 1168 |
+
text-shadow: 0 0 10px #0ff;
|
| 1169 |
+
letter-spacing: 0.1em;
|
| 1170 |
+
}
|
| 1171 |
+
|
| 1172 |
+
.fighter-card {
|
| 1173 |
+
background: linear-gradient(180deg, #2a1a4a 0%, #1a0a2e 100%);
|
| 1174 |
+
border: 2px solid #444;
|
| 1175 |
+
padding: 1rem;
|
| 1176 |
+
text-align: center;
|
| 1177 |
+
position: relative;
|
| 1178 |
+
transition: all 0.2s ease;
|
| 1179 |
+
cursor: pointer;
|
| 1180 |
+
clip-path: polygon(0 10px, 10px 0, 100% 0, 100% calc(100% - 10px), calc(100% - 10px) 100%, 0 100%);
|
| 1181 |
+
}
|
| 1182 |
+
|
| 1183 |
+
.fighter-card:hover, .fighter-card.selected {
|
| 1184 |
+
border-color: #0ff;
|
| 1185 |
+
box-shadow: 0 0 30px rgba(0, 255, 255, 0.5);
|
| 1186 |
+
transform: scale(1.05);
|
| 1187 |
+
}
|
| 1188 |
+
|
| 1189 |
+
.fighter-card.selected::after {
|
| 1190 |
+
content: 'P1';
|
| 1191 |
+
position: absolute;
|
| 1192 |
+
top: 5px;
|
| 1193 |
+
right: 5px;
|
| 1194 |
+
font-family: 'Courier New', monospace;
|
| 1195 |
+
font-size: 0.7rem;
|
| 1196 |
+
color: #0a0a0a;
|
| 1197 |
+
background: #0ff;
|
| 1198 |
+
padding: 2px 6px;
|
| 1199 |
+
font-weight: bold;
|
| 1200 |
+
}
|
| 1201 |
+
|
| 1202 |
+
.fighter-card.legendary {
|
| 1203 |
+
border-color: #ff0;
|
| 1204 |
+
background: linear-gradient(180deg, #3a2a1a 0%, #2a1a0a 100%);
|
| 1205 |
+
}
|
| 1206 |
+
|
| 1207 |
+
.fighter-card.legendary::before {
|
| 1208 |
+
content: '★ LEGENDARY ★';
|
| 1209 |
+
position: absolute;
|
| 1210 |
+
top: -10px;
|
| 1211 |
+
left: 50%;
|
| 1212 |
+
transform: translateX(-50%);
|
| 1213 |
+
font-family: 'Courier New', monospace;
|
| 1214 |
+
font-size: 0.5rem;
|
| 1215 |
+
color: #0a0a0a;
|
| 1216 |
+
background: linear-gradient(90deg, #ff0, #fa0);
|
| 1217 |
+
padding: 2px 8px;
|
| 1218 |
+
white-space: nowrap;
|
| 1219 |
+
}
|
| 1220 |
+
|
| 1221 |
+
.fighter-avatar {
|
| 1222 |
+
width: 80px;
|
| 1223 |
+
height: 80px;
|
| 1224 |
+
margin: 0 auto 1rem;
|
| 1225 |
+
background: #0a0a1a;
|
| 1226 |
+
border: 2px solid currentColor;
|
| 1227 |
+
display: flex;
|
| 1228 |
+
align-items: center;
|
| 1229 |
+
justify-content: center;
|
| 1230 |
+
font-size: 2.5rem;
|
| 1231 |
+
position: relative;
|
| 1232 |
+
overflow: hidden;
|
| 1233 |
+
}
|
| 1234 |
+
|
| 1235 |
+
.fighter-card:nth-child(1) .fighter-avatar { border-color: #888; color: #888; }
|
| 1236 |
+
.fighter-card:nth-child(2) .fighter-avatar { border-color: #f80; color: #f80; }
|
| 1237 |
+
.fighter-card:nth-child(3) .fighter-avatar { border-color: #0f0; color: #0f0; }
|
| 1238 |
+
.fighter-card:nth-child(4) .fighter-avatar { border-color: #08f; color: #08f; }
|
| 1239 |
+
.fighter-card:nth-child(5) .fighter-avatar { border-color: #f08; color: #f08; }
|
| 1240 |
+
|
| 1241 |
+
.fighter-card h4 {
|
| 1242 |
+
font-family: 'Impact', sans-serif;
|
| 1243 |
+
font-size: 1.1rem;
|
| 1244 |
+
color: #fff;
|
| 1245 |
+
text-transform: uppercase;
|
| 1246 |
+
margin-bottom: 0.25rem;
|
| 1247 |
+
text-shadow: 2px 2px 0 #000;
|
| 1248 |
+
}
|
| 1249 |
+
|
| 1250 |
+
.fighter-card .class {
|
| 1251 |
+
font-family: 'Courier New', monospace;
|
| 1252 |
+
font-size: 0.65rem;
|
| 1253 |
+
color: #888;
|
| 1254 |
+
text-transform: uppercase;
|
| 1255 |
+
letter-spacing: 0.1em;
|
| 1256 |
+
}
|
| 1257 |
+
|
| 1258 |
+
/* Main battle arena */
|
| 1259 |
+
.battle-arena {
|
| 1260 |
+
background: linear-gradient(180deg, #1a0a2e 0%, #0a0a1a 50%, #2a0a1a 100%);
|
| 1261 |
+
border: 4px solid;
|
| 1262 |
+
border-image: linear-gradient(90deg, #f0f, #0ff, #ff0, #0f0, #f0f) 1;
|
| 1263 |
+
padding: 2rem;
|
| 1264 |
+
margin: 2rem 0;
|
| 1265 |
+
position: relative;
|
| 1266 |
+
}
|
| 1267 |
+
|
| 1268 |
+
.battle-arena::before {
|
| 1269 |
+
content: 'ROUND 1 — FIGHT!';
|
| 1270 |
+
position: absolute;
|
| 1271 |
+
top: 50%;
|
| 1272 |
+
left: 50%;
|
| 1273 |
+
transform: translate(-50%, -50%);
|
| 1274 |
+
font-family: 'Impact', sans-serif;
|
| 1275 |
+
font-size: 4rem;
|
| 1276 |
+
color: #ff0;
|
| 1277 |
+
text-shadow: 4px 4px 0 #f00, -2px -2px 0 #0ff;
|
| 1278 |
+
opacity: 0;
|
| 1279 |
+
animation: fightIntro 3s ease-out forwards;
|
| 1280 |
+
pointer-events: none;
|
| 1281 |
+
z-index: 10;
|
| 1282 |
+
}
|
| 1283 |
+
|
| 1284 |
+
@keyframes fightIntro {
|
| 1285 |
+
0% { opacity: 1; transform: translate(-50%, -50%) scale(3); }
|
| 1286 |
+
20% { opacity: 1; transform: translate(-50%, -50%) scale(1); }
|
| 1287 |
+
80% { opacity: 1; }
|
| 1288 |
+
100% { opacity: 0; }
|
| 1289 |
+
}
|
| 1290 |
+
|
| 1291 |
+
/* Health bars */
|
| 1292 |
+
.health-bars {
|
| 1293 |
+
display: flex;
|
| 1294 |
+
justify-content: space-between;
|
| 1295 |
+
margin-bottom: 2rem;
|
| 1296 |
+
gap: 2rem;
|
| 1297 |
+
}
|
| 1298 |
+
|
| 1299 |
+
.health-bar-container {
|
| 1300 |
+
flex: 1;
|
| 1301 |
+
position: relative;
|
| 1302 |
+
}
|
| 1303 |
+
|
| 1304 |
+
.health-bar-container.right {
|
| 1305 |
+
text-align: right;
|
| 1306 |
+
}
|
| 1307 |
+
|
| 1308 |
+
.health-bar-name {
|
| 1309 |
+
font-family: 'Impact', sans-serif;
|
| 1310 |
+
font-size: 1.5rem;
|
| 1311 |
+
color: #fff;
|
| 1312 |
+
text-transform: uppercase;
|
| 1313 |
+
text-shadow: 2px 2px 0 #000;
|
| 1314 |
+
margin-bottom: 0.5rem;
|
| 1315 |
+
}
|
| 1316 |
+
|
| 1317 |
+
.health-bar {
|
| 1318 |
+
height: 30px;
|
| 1319 |
+
background: #333;
|
| 1320 |
+
border: 3px solid #fff;
|
| 1321 |
+
position: relative;
|
| 1322 |
+
overflow: hidden;
|
| 1323 |
+
}
|
| 1324 |
+
|
| 1325 |
+
.health-bar-fill {
|
| 1326 |
+
height: 100%;
|
| 1327 |
+
transition: width 1s ease;
|
| 1328 |
+
}
|
| 1329 |
+
|
| 1330 |
+
.health-bar-container:first-child .health-bar-fill {
|
| 1331 |
+
background: linear-gradient(180deg, #0f0 0%, #080 50%, #0f0 100%);
|
| 1332 |
+
width: 95%;
|
| 1333 |
+
}
|
| 1334 |
+
|
| 1335 |
+
.health-bar-container:last-child .health-bar-fill {
|
| 1336 |
+
background: linear-gradient(180deg, #f00 0%, #800 50%, #f00 100%);
|
| 1337 |
+
width: 35%;
|
| 1338 |
+
float: right;
|
| 1339 |
+
}
|
| 1340 |
+
|
| 1341 |
+
.health-bar::after {
|
| 1342 |
+
content: '';
|
| 1343 |
+
position: absolute;
|
| 1344 |
+
top: 0;
|
| 1345 |
+
left: 0;
|
| 1346 |
+
right: 0;
|
| 1347 |
+
height: 50%;
|
| 1348 |
+
background: linear-gradient(180deg, rgba(255,255,255,0.3) 0%, transparent 100%);
|
| 1349 |
+
}
|
| 1350 |
+
|
| 1351 |
+
/* VS display */
|
| 1352 |
+
.vs-badge {
|
| 1353 |
+
position: absolute;
|
| 1354 |
+
top: 50%;
|
| 1355 |
+
left: 50%;
|
| 1356 |
+
transform: translate(-50%, -50%);
|
| 1357 |
+
font-family: 'Impact', sans-serif;
|
| 1358 |
+
font-size: 2rem;
|
| 1359 |
+
color: #ff0;
|
| 1360 |
+
text-shadow: 0 0 20px #f00;
|
| 1361 |
+
z-index: 5;
|
| 1362 |
+
}
|
| 1363 |
+
|
| 1364 |
+
/* Fighter comparison grid */
|
| 1365 |
+
.battle-grid {
|
| 1366 |
+
display: grid;
|
| 1367 |
+
grid-template-columns: 1fr auto 1fr;
|
| 1368 |
+
gap: 2rem;
|
| 1369 |
+
align-items: start;
|
| 1370 |
+
}
|
| 1371 |
+
|
| 1372 |
+
.battle-fighter {
|
| 1373 |
+
text-align: center;
|
| 1374 |
+
}
|
| 1375 |
+
|
| 1376 |
+
.battle-fighter.winner {
|
| 1377 |
+
animation: winnerGlow 0.5s ease-in-out infinite alternate;
|
| 1378 |
+
}
|
| 1379 |
+
|
| 1380 |
+
@keyframes winnerGlow {
|
| 1381 |
+
from { filter: drop-shadow(0 0 10px #0f0); }
|
| 1382 |
+
to { filter: drop-shadow(0 0 30px #0f0); }
|
| 1383 |
+
}
|
| 1384 |
+
|
| 1385 |
+
.fighter-portrait {
|
| 1386 |
+
width: 200px;
|
| 1387 |
+
height: 200px;
|
| 1388 |
+
margin: 0 auto 1.5rem;
|
| 1389 |
+
background: linear-gradient(135deg, #2a1a4a 0%, #1a0a2e 100%);
|
| 1390 |
+
border: 4px solid;
|
| 1391 |
+
display: flex;
|
| 1392 |
+
align-items: center;
|
| 1393 |
+
justify-content: center;
|
| 1394 |
+
font-size: 6rem;
|
| 1395 |
+
position: relative;
|
| 1396 |
+
}
|
| 1397 |
+
|
| 1398 |
+
.battle-fighter:first-child .fighter-portrait {
|
| 1399 |
+
border-color: #0f0;
|
| 1400 |
+
box-shadow: 0 0 30px rgba(0, 255, 0, 0.3);
|
| 1401 |
+
}
|
| 1402 |
+
|
| 1403 |
+
.battle-fighter:last-child .fighter-portrait {
|
| 1404 |
+
border-color: #f00;
|
| 1405 |
+
box-shadow: 0 0 30px rgba(255, 0, 0, 0.3);
|
| 1406 |
+
}
|
| 1407 |
+
|
| 1408 |
+
.fighter-portrait::after {
|
| 1409 |
+
content: '';
|
| 1410 |
+
position: absolute;
|
| 1411 |
+
inset: 0;
|
| 1412 |
+
background: linear-gradient(180deg, rgba(255,255,255,0.1) 0%, transparent 50%);
|
| 1413 |
+
}
|
| 1414 |
+
|
| 1415 |
+
.fighter-name {
|
| 1416 |
+
font-family: 'Impact', sans-serif;
|
| 1417 |
+
font-size: 2rem;
|
| 1418 |
+
color: #fff;
|
| 1419 |
+
text-transform: uppercase;
|
| 1420 |
+
text-shadow: 3px 3px 0 #000;
|
| 1421 |
+
margin-bottom: 0.5rem;
|
| 1422 |
+
}
|
| 1423 |
+
|
| 1424 |
+
.fighter-title {
|
| 1425 |
+
font-family: 'Courier New', monospace;
|
| 1426 |
+
font-size: 0.75rem;
|
| 1427 |
+
color: #0ff;
|
| 1428 |
+
text-transform: uppercase;
|
| 1429 |
+
letter-spacing: 0.2em;
|
| 1430 |
+
margin-bottom: 1rem;
|
| 1431 |
+
}
|
| 1432 |
+
|
| 1433 |
+
/* Stats bars */
|
| 1434 |
+
.stat-bars {
|
| 1435 |
+
text-align: left;
|
| 1436 |
+
padding: 1rem;
|
| 1437 |
+
background: rgba(0,0,0,0.5);
|
| 1438 |
+
border: 1px solid #444;
|
| 1439 |
+
}
|
| 1440 |
+
|
| 1441 |
+
.stat-row {
|
| 1442 |
+
display: flex;
|
| 1443 |
+
align-items: center;
|
| 1444 |
+
margin-bottom: 0.75rem;
|
| 1445 |
+
gap: 0.5rem;
|
| 1446 |
+
}
|
| 1447 |
+
|
| 1448 |
+
.stat-row:last-child {
|
| 1449 |
+
margin-bottom: 0;
|
| 1450 |
+
}
|
| 1451 |
+
|
| 1452 |
+
.stat-label {
|
| 1453 |
+
font-family: 'Courier New', monospace;
|
| 1454 |
+
font-size: 0.7rem;
|
| 1455 |
+
color: #888;
|
| 1456 |
+
width: 60px;
|
| 1457 |
+
text-transform: uppercase;
|
| 1458 |
+
}
|
| 1459 |
+
|
| 1460 |
+
.stat-bar {
|
| 1461 |
+
flex: 1;
|
| 1462 |
+
height: 12px;
|
| 1463 |
+
background: #222;
|
| 1464 |
+
position: relative;
|
| 1465 |
+
overflow: hidden;
|
| 1466 |
+
}
|
| 1467 |
+
|
| 1468 |
+
.stat-bar-fill {
|
| 1469 |
+
height: 100%;
|
| 1470 |
+
background: linear-gradient(90deg, #f00, #ff0, #0f0);
|
| 1471 |
+
transition: width 0.5s ease;
|
| 1472 |
+
}
|
| 1473 |
+
|
| 1474 |
+
.stat-value {
|
| 1475 |
+
font-family: 'Courier New', monospace;
|
| 1476 |
+
font-size: 0.7rem;
|
| 1477 |
+
color: #fff;
|
| 1478 |
+
width: 30px;
|
| 1479 |
+
text-align: right;
|
| 1480 |
+
}
|
| 1481 |
+
|
| 1482 |
+
/* Special moves */
|
| 1483 |
+
.special-moves {
|
| 1484 |
+
margin-top: 1.5rem;
|
| 1485 |
+
padding: 1rem;
|
| 1486 |
+
background: rgba(255, 0, 255, 0.1);
|
| 1487 |
+
border: 1px solid #f0f;
|
| 1488 |
+
}
|
| 1489 |
+
|
| 1490 |
+
.special-moves h5 {
|
| 1491 |
+
font-family: 'Courier New', monospace;
|
| 1492 |
+
font-size: 0.7rem;
|
| 1493 |
+
color: #f0f;
|
| 1494 |
+
text-transform: uppercase;
|
| 1495 |
+
letter-spacing: 0.1em;
|
| 1496 |
+
margin-bottom: 0.75rem;
|
| 1497 |
+
}
|
| 1498 |
+
|
| 1499 |
+
.move {
|
| 1500 |
+
display: flex;
|
| 1501 |
+
align-items: center;
|
| 1502 |
+
gap: 0.5rem;
|
| 1503 |
+
margin-bottom: 0.5rem;
|
| 1504 |
+
font-family: 'Courier New', monospace;
|
| 1505 |
+
font-size: 0.75rem;
|
| 1506 |
+
}
|
| 1507 |
+
|
| 1508 |
+
.move-keys {
|
| 1509 |
+
display: flex;
|
| 1510 |
+
gap: 2px;
|
| 1511 |
+
}
|
| 1512 |
+
|
| 1513 |
+
.key {
|
| 1514 |
+
background: #333;
|
| 1515 |
+
border: 1px solid #666;
|
| 1516 |
+
padding: 2px 6px;
|
| 1517 |
+
color: #fff;
|
| 1518 |
+
font-size: 0.65rem;
|
| 1519 |
+
border-radius: 2px;
|
| 1520 |
+
}
|
| 1521 |
+
|
| 1522 |
+
.move-name {
|
| 1523 |
+
color: #ff0;
|
| 1524 |
+
}
|
| 1525 |
+
|
| 1526 |
+
/* Battle VS center */
|
| 1527 |
+
.battle-vs {
|
| 1528 |
+
display: flex;
|
| 1529 |
+
flex-direction: column;
|
| 1530 |
+
align-items: center;
|
| 1531 |
+
justify-content: center;
|
| 1532 |
+
padding: 2rem;
|
| 1533 |
+
}
|
| 1534 |
+
|
| 1535 |
+
.battle-vs-text {
|
| 1536 |
+
font-family: 'Impact', sans-serif;
|
| 1537 |
+
font-size: 5rem;
|
| 1538 |
+
color: #fff;
|
| 1539 |
+
text-shadow:
|
| 1540 |
+
0 0 10px #ff0,
|
| 1541 |
+
0 0 20px #f00,
|
| 1542 |
+
4px 4px 0 #000;
|
| 1543 |
+
animation: vsPulse 1s ease-in-out infinite;
|
| 1544 |
+
}
|
| 1545 |
+
|
| 1546 |
+
@keyframes vsPulse {
|
| 1547 |
+
0%, 100% { transform: scale(1); }
|
| 1548 |
+
50% { transform: scale(1.1); }
|
| 1549 |
+
}
|
| 1550 |
+
|
| 1551 |
+
/* Combo counter */
|
| 1552 |
+
.combo-display {
|
| 1553 |
+
position: absolute;
|
| 1554 |
+
top: 50%;
|
| 1555 |
+
right: 2rem;
|
| 1556 |
+
transform: translateY(-50%);
|
| 1557 |
+
text-align: right;
|
| 1558 |
+
}
|
| 1559 |
+
|
| 1560 |
+
.combo-number {
|
| 1561 |
+
font-family: 'Impact', sans-serif;
|
| 1562 |
+
font-size: 4rem;
|
| 1563 |
+
color: #ff0;
|
| 1564 |
+
text-shadow: 0 0 20px #f80;
|
| 1565 |
+
line-height: 1;
|
| 1566 |
+
}
|
| 1567 |
+
|
| 1568 |
+
.combo-text {
|
| 1569 |
+
font-family: 'Courier New', monospace;
|
| 1570 |
+
font-size: 0.875rem;
|
| 1571 |
+
color: #f80;
|
| 1572 |
+
text-transform: uppercase;
|
| 1573 |
+
letter-spacing: 0.2em;
|
| 1574 |
+
}
|
| 1575 |
+
|
| 1576 |
+
/* Damage numbers floating */
|
| 1577 |
+
.damage-numbers {
|
| 1578 |
+
position: absolute;
|
| 1579 |
+
font-family: 'Impact', sans-serif;
|
| 1580 |
+
font-size: 2rem;
|
| 1581 |
+
color: #f00;
|
| 1582 |
+
text-shadow: 2px 2px 0 #000;
|
| 1583 |
+
animation: damageFloat 1s ease-out forwards;
|
| 1584 |
+
pointer-events: none;
|
| 1585 |
+
}
|
| 1586 |
+
|
| 1587 |
+
@keyframes damageFloat {
|
| 1588 |
+
0% { opacity: 1; transform: translateY(0) scale(1); }
|
| 1589 |
+
100% { opacity: 0; transform: translateY(-50px) scale(1.5); }
|
| 1590 |
+
}
|
| 1591 |
+
|
| 1592 |
+
/* Winner announcement */
|
| 1593 |
+
.winner-announcement {
|
| 1594 |
+
text-align: center;
|
| 1595 |
+
padding: 3rem;
|
| 1596 |
+
margin-top: 2rem;
|
| 1597 |
+
background: linear-gradient(180deg, rgba(0,255,0,0.1) 0%, transparent 100%);
|
| 1598 |
+
border: 2px solid #0f0;
|
| 1599 |
+
position: relative;
|
| 1600 |
+
}
|
| 1601 |
+
|
| 1602 |
+
.winner-announcement::before {
|
| 1603 |
+
content: '🏆 WINNER 🏆';
|
| 1604 |
+
display: block;
|
| 1605 |
+
font-family: 'Courier New', monospace;
|
| 1606 |
+
font-size: 0.875rem;
|
| 1607 |
+
color: #ff0;
|
| 1608 |
+
letter-spacing: 0.3em;
|
| 1609 |
+
margin-bottom: 1rem;
|
| 1610 |
+
}
|
| 1611 |
+
|
| 1612 |
+
.winner-announcement h3 {
|
| 1613 |
+
font-family: 'Impact', sans-serif;
|
| 1614 |
+
font-size: 3rem;
|
| 1615 |
+
color: #0f0;
|
| 1616 |
+
text-transform: uppercase;
|
| 1617 |
+
text-shadow: 0 0 30px #0f0, 4px 4px 0 #000;
|
| 1618 |
+
animation: winnerFlash 0.5s ease-in-out infinite alternate;
|
| 1619 |
+
}
|
| 1620 |
+
|
| 1621 |
+
@keyframes winnerFlash {
|
| 1622 |
+
from { text-shadow: 0 0 30px #0f0, 4px 4px 0 #000; }
|
| 1623 |
+
to { text-shadow: 0 0 60px #0f0, 0 0 100px #0f0, 4px 4px 0 #000; }
|
| 1624 |
+
}
|
| 1625 |
+
|
| 1626 |
+
.winner-announcement p {
|
| 1627 |
+
font-family: 'Courier New', monospace;
|
| 1628 |
+
font-size: 1rem;
|
| 1629 |
+
color: #0ff;
|
| 1630 |
+
margin-top: 1rem;
|
| 1631 |
+
max-width: 600px;
|
| 1632 |
+
margin-left: auto;
|
| 1633 |
+
margin-right: auto;
|
| 1634 |
+
}
|
| 1635 |
+
|
| 1636 |
+
/* High scores table */
|
| 1637 |
+
.high-scores {
|
| 1638 |
+
margin-top: 3rem;
|
| 1639 |
+
background: #0a0a0a;
|
| 1640 |
+
border: 3px solid #f0f;
|
| 1641 |
+
padding: 1.5rem;
|
| 1642 |
+
}
|
| 1643 |
+
|
| 1644 |
+
.high-scores h4 {
|
| 1645 |
+
font-family: 'Courier New', monospace;
|
| 1646 |
+
font-size: 1rem;
|
| 1647 |
+
color: #f0f;
|
| 1648 |
+
text-align: center;
|
| 1649 |
+
text-transform: uppercase;
|
| 1650 |
+
letter-spacing: 0.3em;
|
| 1651 |
+
margin-bottom: 1.5rem;
|
| 1652 |
+
text-shadow: 0 0 10px #f0f;
|
| 1653 |
+
}
|
| 1654 |
+
|
| 1655 |
+
.score-table {
|
| 1656 |
+
width: 100%;
|
| 1657 |
+
border-collapse: collapse;
|
| 1658 |
+
}
|
| 1659 |
+
|
| 1660 |
+
.score-table th,
|
| 1661 |
+
.score-table td {
|
| 1662 |
+
font-family: 'Courier New', monospace;
|
| 1663 |
+
font-size: 0.875rem;
|
| 1664 |
+
padding: 0.75rem 1rem;
|
| 1665 |
+
text-align: left;
|
| 1666 |
+
border-bottom: 1px solid #333;
|
| 1667 |
+
}
|
| 1668 |
+
|
| 1669 |
+
.score-table th {
|
| 1670 |
+
color: #888;
|
| 1671 |
+
text-transform: uppercase;
|
| 1672 |
+
font-size: 0.7rem;
|
| 1673 |
+
letter-spacing: 0.1em;
|
| 1674 |
+
}
|
| 1675 |
+
|
| 1676 |
+
.score-table td {
|
| 1677 |
+
color: #fff;
|
| 1678 |
+
}
|
| 1679 |
+
|
| 1680 |
+
.score-table tr:hover td {
|
| 1681 |
+
background: rgba(255, 0, 255, 0.1);
|
| 1682 |
+
}
|
| 1683 |
+
|
| 1684 |
+
.score-table .rank {
|
| 1685 |
+
color: #ff0;
|
| 1686 |
+
font-weight: bold;
|
| 1687 |
+
}
|
| 1688 |
+
|
| 1689 |
+
.score-table .optimizer-name {
|
| 1690 |
+
display: flex;
|
| 1691 |
+
align-items: center;
|
| 1692 |
+
gap: 0.5rem;
|
| 1693 |
+
}
|
| 1694 |
+
|
| 1695 |
+
.score-table .optimizer-name span {
|
| 1696 |
+
font-size: 1.25rem;
|
| 1697 |
+
}
|
| 1698 |
+
|
| 1699 |
+
.score-table .score {
|
| 1700 |
+
color: #0f0;
|
| 1701 |
+
font-family: 'Impact', sans-serif;
|
| 1702 |
+
font-size: 1.25rem;
|
| 1703 |
+
}
|
| 1704 |
+
|
| 1705 |
+
.score-table .special {
|
| 1706 |
+
color: #0ff;
|
| 1707 |
+
font-size: 0.75rem;
|
| 1708 |
+
}
|
| 1709 |
+
|
| 1710 |
+
/* Credits scroll */
|
| 1711 |
+
.arcade-credits {
|
| 1712 |
+
text-align: center;
|
| 1713 |
+
padding: 3rem 0;
|
| 1714 |
+
border-top: 1px solid #333;
|
| 1715 |
+
margin-top: 3rem;
|
| 1716 |
+
}
|
| 1717 |
+
|
| 1718 |
+
.arcade-credits p {
|
| 1719 |
+
font-family: 'Courier New', monospace;
|
| 1720 |
+
font-size: 0.75rem;
|
| 1721 |
+
color: #444;
|
| 1722 |
+
text-transform: uppercase;
|
| 1723 |
+
letter-spacing: 0.2em;
|
| 1724 |
+
}
|
| 1725 |
+
|
| 1726 |
+
.arcade-credits .blink {
|
| 1727 |
+
color: #0ff;
|
| 1728 |
+
animation: blink 1s infinite;
|
| 1729 |
+
}
|
| 1730 |
+
|
| 1731 |
+
@media (max-width: 1024px) {
|
| 1732 |
+
.fighter-select {
|
| 1733 |
+
grid-template-columns: repeat(3, 1fr);
|
| 1734 |
+
}
|
| 1735 |
+
|
| 1736 |
+
.battle-grid {
|
| 1737 |
+
grid-template-columns: 1fr;
|
| 1738 |
+
gap: 1rem;
|
| 1739 |
+
}
|
| 1740 |
+
|
| 1741 |
+
.battle-vs {
|
| 1742 |
+
padding: 1rem;
|
| 1743 |
+
}
|
| 1744 |
+
|
| 1745 |
+
.battle-vs-text {
|
| 1746 |
+
font-size: 3rem;
|
| 1747 |
+
}
|
| 1748 |
+
|
| 1749 |
+
.fighter-portrait {
|
| 1750 |
+
width: 150px;
|
| 1751 |
+
height: 150px;
|
| 1752 |
+
font-size: 4rem;
|
| 1753 |
+
}
|
| 1754 |
+
}
|
| 1755 |
+
|
| 1756 |
+
@media (max-width: 768px) {
|
| 1757 |
+
.arcade {
|
| 1758 |
+
padding: 2rem 1rem;
|
| 1759 |
+
}
|
| 1760 |
+
|
| 1761 |
+
.fighter-select {
|
| 1762 |
+
grid-template-columns: repeat(2, 1fr);
|
| 1763 |
+
padding: 1rem;
|
| 1764 |
+
}
|
| 1765 |
+
|
| 1766 |
+
.fighter-avatar {
|
| 1767 |
+
width: 60px;
|
| 1768 |
+
height: 60px;
|
| 1769 |
+
font-size: 2rem;
|
| 1770 |
+
}
|
| 1771 |
+
|
| 1772 |
+
.health-bars {
|
| 1773 |
+
flex-direction: column;
|
| 1774 |
+
gap: 1rem;
|
| 1775 |
+
}
|
| 1776 |
+
|
| 1777 |
+
.battle-arena {
|
| 1778 |
+
padding: 1rem;
|
| 1779 |
+
}
|
| 1780 |
+
|
| 1781 |
+
.combo-display {
|
| 1782 |
+
display: none;
|
| 1783 |
+
}
|
| 1784 |
+
}
|
| 1785 |
+
|
| 1786 |
+
/* Pissarro Impressionist Section */
|
| 1787 |
+
.pissarro {
|
| 1788 |
+
padding: 8rem 4rem;
|
| 1789 |
+
position: relative;
|
| 1790 |
+
overflow: hidden;
|
| 1791 |
+
background: linear-gradient(180deg,
|
| 1792 |
+
#E8DED2 0%,
|
| 1793 |
+
#F4EDE4 20%,
|
| 1794 |
+
#EAE4D8 40%,
|
| 1795 |
+
#D4C8B8 70%,
|
| 1796 |
+
#C9BDA8 100%
|
| 1797 |
+
);
|
| 1798 |
+
min-height: 100vh;
|
| 1799 |
+
}
|
| 1800 |
+
|
| 1801 |
+
.pissarro-sky {
|
| 1802 |
+
position: absolute;
|
| 1803 |
+
top: 0;
|
| 1804 |
+
left: 0;
|
| 1805 |
+
right: 0;
|
| 1806 |
+
height: 40%;
|
| 1807 |
+
background: linear-gradient(180deg,
|
| 1808 |
+
#B8C4D4 0%,
|
| 1809 |
+
#C9D1DC 30%,
|
| 1810 |
+
#DED8CE 70%,
|
| 1811 |
+
#E8DED2 100%
|
| 1812 |
+
);
|
| 1813 |
+
opacity: 0.8;
|
| 1814 |
+
}
|
| 1815 |
+
|
| 1816 |
+
/* Pointillist dots overlay */
|
| 1817 |
+
.pissarro-dots {
|
| 1818 |
+
position: absolute;
|
| 1819 |
+
inset: 0;
|
| 1820 |
+
background-image:
|
| 1821 |
+
radial-gradient(circle at 10% 20%, #8B9D7A 1px, transparent 1px),
|
| 1822 |
+
radial-gradient(circle at 30% 15%, #A67C52 1px, transparent 1px),
|
| 1823 |
+
radial-gradient(circle at 50% 25%, #7A8B6A 1px, transparent 1px),
|
| 1824 |
+
radial-gradient(circle at 70% 10%, #9B8B7A 1px, transparent 1px),
|
| 1825 |
+
radial-gradient(circle at 90% 22%, #8B7B6A 1px, transparent 1px),
|
| 1826 |
+
radial-gradient(circle at 15% 45%, #6B8B5A 1px, transparent 1px),
|
| 1827 |
+
radial-gradient(circle at 35% 55%, #AB9B8A 1px, transparent 1px),
|
| 1828 |
+
radial-gradient(circle at 55% 40%, #7B9B6B 1px, transparent 1px),
|
| 1829 |
+
radial-gradient(circle at 75% 50%, #8B8B7A 1px, transparent 1px),
|
| 1830 |
+
radial-gradient(circle at 95% 42%, #9B7B5A 1px, transparent 1px),
|
| 1831 |
+
radial-gradient(circle at 20% 70%, #5B7B4A 1px, transparent 1px),
|
| 1832 |
+
radial-gradient(circle at 40% 80%, #BB9B7A 1px, transparent 1px),
|
| 1833 |
+
radial-gradient(circle at 60% 75%, #6B7B5A 1px, transparent 1px),
|
| 1834 |
+
radial-gradient(circle at 80% 85%, #AB8B6A 1px, transparent 1px),
|
| 1835 |
+
radial-gradient(circle at 25% 90%, #7B6B5A 1px, transparent 1px);
|
| 1836 |
+
background-size:
|
| 1837 |
+
80px 80px, 90px 90px, 70px 70px, 85px 85px, 75px 75px,
|
| 1838 |
+
95px 95px, 65px 65px, 88px 88px, 72px 72px, 82px 82px,
|
| 1839 |
+
78px 78px, 92px 92px, 68px 68px, 86px 86px, 76px 76px;
|
| 1840 |
+
opacity: 0.4;
|
| 1841 |
+
pointer-events: none;
|
| 1842 |
+
}
|
| 1843 |
+
|
| 1844 |
+
.pissarro-content {
|
| 1845 |
+
position: relative;
|
| 1846 |
+
z-index: 1;
|
| 1847 |
+
max-width: 1400px;
|
| 1848 |
+
margin: 0 auto;
|
| 1849 |
+
}
|
| 1850 |
+
|
| 1851 |
+
.pissarro-header {
|
| 1852 |
+
text-align: center;
|
| 1853 |
+
margin-bottom: 5rem;
|
| 1854 |
+
}
|
| 1855 |
+
|
| 1856 |
+
.pissarro-title {
|
| 1857 |
+
font-family: 'Fraunces', Georgia, serif;
|
| 1858 |
+
font-size: clamp(2.5rem, 6vw, 4.5rem);
|
| 1859 |
+
font-weight: 300;
|
| 1860 |
+
font-style: italic;
|
| 1861 |
+
color: #4A5568;
|
| 1862 |
+
letter-spacing: -0.02em;
|
| 1863 |
+
line-height: 1.2;
|
| 1864 |
+
margin-bottom: 1rem;
|
| 1865 |
+
text-shadow: 2px 2px 4px rgba(255,255,255,0.5);
|
| 1866 |
+
}
|
| 1867 |
+
|
| 1868 |
+
.pissarro-subtitle {
|
| 1869 |
+
font-family: 'Fraunces', Georgia, serif;
|
| 1870 |
+
font-size: 1.125rem;
|
| 1871 |
+
font-style: italic;
|
| 1872 |
+
color: #718096;
|
| 1873 |
+
max-width: 600px;
|
| 1874 |
+
margin: 0 auto;
|
| 1875 |
+
}
|
| 1876 |
+
|
| 1877 |
+
/* Landscape canvas for algorithm comparison */
|
| 1878 |
+
.landscape-canvas {
|
| 1879 |
+
background: white;
|
| 1880 |
+
border-radius: 8px;
|
| 1881 |
+
box-shadow:
|
| 1882 |
+
0 0 0 8px #D4C4B0,
|
| 1883 |
+
0 0 0 10px #A69580,
|
| 1884 |
+
0 20px 60px rgba(0,0,0,0.15);
|
| 1885 |
+
padding: 2rem;
|
| 1886 |
+
margin-bottom: 4rem;
|
| 1887 |
+
position: relative;
|
| 1888 |
+
}
|
| 1889 |
+
|
| 1890 |
+
.landscape-canvas::before {
|
| 1891 |
+
content: 'Les Optimiseurs dans le Paysage de la Perte';
|
| 1892 |
+
position: absolute;
|
| 1893 |
+
bottom: -2.5rem;
|
| 1894 |
+
left: 50%;
|
| 1895 |
+
transform: translateX(-50%);
|
| 1896 |
+
font-family: 'Fraunces', Georgia, serif;
|
| 1897 |
+
font-size: 0.875rem;
|
| 1898 |
+
font-style: italic;
|
| 1899 |
+
color: #8B7355;
|
| 1900 |
+
white-space: nowrap;
|
| 1901 |
+
}
|
| 1902 |
+
|
| 1903 |
+
.landscape-svg {
|
| 1904 |
+
width: 100%;
|
| 1905 |
+
height: auto;
|
| 1906 |
+
display: block;
|
| 1907 |
+
}
|
| 1908 |
+
|
| 1909 |
+
/* Optimizer cards in impressionist style */
|
| 1910 |
+
.optimizer-garden {
|
| 1911 |
+
display: grid;
|
| 1912 |
+
grid-template-columns: repeat(4, 1fr);
|
| 1913 |
+
gap: 2rem;
|
| 1914 |
+
margin-top: 5rem;
|
| 1915 |
+
}
|
| 1916 |
+
|
| 1917 |
+
.optimizer-card {
|
| 1918 |
+
background: linear-gradient(145deg,
|
| 1919 |
+
rgba(255,255,255,0.9) 0%,
|
| 1920 |
+
rgba(248,244,236,0.95) 100%
|
| 1921 |
+
);
|
| 1922 |
+
border-radius: 12px;
|
| 1923 |
+
padding: 2rem;
|
| 1924 |
+
position: relative;
|
| 1925 |
+
box-shadow:
|
| 1926 |
+
4px 4px 0 rgba(139,115,85,0.2),
|
| 1927 |
+
8px 8px 20px rgba(0,0,0,0.08);
|
| 1928 |
+
border: 1px solid rgba(139,115,85,0.2);
|
| 1929 |
+
transition: all 0.4s ease;
|
| 1930 |
+
}
|
| 1931 |
+
|
| 1932 |
+
.optimizer-card::before {
|
| 1933 |
+
content: '';
|
| 1934 |
+
position: absolute;
|
| 1935 |
+
top: 0;
|
| 1936 |
+
left: 0;
|
| 1937 |
+
right: 0;
|
| 1938 |
+
height: 4px;
|
| 1939 |
+
border-radius: 12px 12px 0 0;
|
| 1940 |
+
}
|
| 1941 |
+
|
| 1942 |
+
.optimizer-card.shampoo::before { background: linear-gradient(90deg, #D4A574, #C49A6C); }
|
| 1943 |
+
.optimizer-card.soap::before { background: linear-gradient(90deg, #7BA05B, #6B9B4B); }
|
| 1944 |
+
.optimizer-card.muon::before { background: linear-gradient(90deg, #8B9DC3, #7B8DB3); }
|
| 1945 |
+
.optimizer-card.caspr::before { background: linear-gradient(90deg, #C4849B, #B47488); }
|
| 1946 |
+
|
| 1947 |
+
.optimizer-card:hover {
|
| 1948 |
+
transform: translateY(-8px);
|
| 1949 |
+
box-shadow:
|
| 1950 |
+
4px 4px 0 rgba(139,115,85,0.2),
|
| 1951 |
+
12px 12px 30px rgba(0,0,0,0.12);
|
| 1952 |
+
}
|
| 1953 |
+
|
| 1954 |
+
.optimizer-icon {
|
| 1955 |
+
width: 60px;
|
| 1956 |
+
height: 60px;
|
| 1957 |
+
border-radius: 50%;
|
| 1958 |
+
margin-bottom: 1.5rem;
|
| 1959 |
+
display: flex;
|
| 1960 |
+
align-items: center;
|
| 1961 |
+
justify-content: center;
|
| 1962 |
+
font-size: 1.5rem;
|
| 1963 |
+
position: relative;
|
| 1964 |
+
overflow: hidden;
|
| 1965 |
+
}
|
| 1966 |
+
|
| 1967 |
+
.optimizer-card.shampoo .optimizer-icon {
|
| 1968 |
+
background: linear-gradient(135deg, #F5E6D3 0%, #E8D4BC 100%);
|
| 1969 |
+
border: 2px solid #D4A574;
|
| 1970 |
+
}
|
| 1971 |
+
.optimizer-card.soap .optimizer-icon {
|
| 1972 |
+
background: linear-gradient(135deg, #E8F0E0 0%, #D4E8C8 100%);
|
| 1973 |
+
border: 2px solid #7BA05B;
|
| 1974 |
+
}
|
| 1975 |
+
.optimizer-card.muon .optimizer-icon {
|
| 1976 |
+
background: linear-gradient(135deg, #E8ECF4 0%, #D4DCE8 100%);
|
| 1977 |
+
border: 2px solid #8B9DC3;
|
| 1978 |
+
}
|
| 1979 |
+
.optimizer-card.caspr .optimizer-icon {
|
| 1980 |
+
background: linear-gradient(135deg, #F4E8EC 0%, #E8D4DC 100%);
|
| 1981 |
+
border: 2px solid #C4849B;
|
| 1982 |
+
}
|
| 1983 |
+
|
| 1984 |
+
.optimizer-card h4 {
|
| 1985 |
+
font-family: 'Fraunces', Georgia, serif;
|
| 1986 |
+
font-size: 1.5rem;
|
| 1987 |
+
font-weight: 500;
|
| 1988 |
+
color: #4A5568;
|
| 1989 |
+
margin-bottom: 0.5rem;
|
| 1990 |
+
}
|
| 1991 |
+
|
| 1992 |
+
.optimizer-card .year {
|
| 1993 |
+
font-family: 'Fraunces', Georgia, serif;
|
| 1994 |
+
font-size: 0.8rem;
|
| 1995 |
+
font-style: italic;
|
| 1996 |
+
color: #A0AEC0;
|
| 1997 |
+
margin-bottom: 1rem;
|
| 1998 |
+
}
|
| 1999 |
+
|
| 2000 |
+
.optimizer-card p {
|
| 2001 |
+
font-size: 0.9rem;
|
| 2002 |
+
color: #718096;
|
| 2003 |
+
line-height: 1.7;
|
| 2004 |
+
margin-bottom: 1.25rem;
|
| 2005 |
+
}
|
| 2006 |
+
|
| 2007 |
+
.optimizer-card .equation {
|
| 2008 |
+
font-family: 'Times New Roman', Georgia, serif;
|
| 2009 |
+
font-size: 0.95rem;
|
| 2010 |
+
color: #4A5568;
|
| 2011 |
+
background: rgba(0,0,0,0.03);
|
| 2012 |
+
padding: 0.75rem 1rem;
|
| 2013 |
+
border-radius: 6px;
|
| 2014 |
+
border-left: 3px solid;
|
| 2015 |
+
margin-bottom: 1rem;
|
| 2016 |
+
}
|
| 2017 |
+
|
| 2018 |
+
.optimizer-card.shampoo .equation { border-color: #D4A574; }
|
| 2019 |
+
.optimizer-card.soap .equation { border-color: #7BA05B; }
|
| 2020 |
+
.optimizer-card.muon .equation { border-color: #8B9DC3; }
|
| 2021 |
+
.optimizer-card.caspr .equation { border-color: #C4849B; }
|
| 2022 |
+
|
| 2023 |
+
.optimizer-card .highlight-stat {
|
| 2024 |
+
display: flex;
|
| 2025 |
+
align-items: baseline;
|
| 2026 |
+
gap: 0.5rem;
|
| 2027 |
+
padding-top: 1rem;
|
| 2028 |
+
border-top: 1px solid rgba(0,0,0,0.08);
|
| 2029 |
+
}
|
| 2030 |
+
|
| 2031 |
+
.optimizer-card .highlight-stat .value {
|
| 2032 |
+
font-family: 'Fraunces', Georgia, serif;
|
| 2033 |
+
font-size: 1.75rem;
|
| 2034 |
+
font-weight: 400;
|
| 2035 |
+
}
|
| 2036 |
+
|
| 2037 |
+
.optimizer-card.shampoo .highlight-stat .value { color: #C49A6C; }
|
| 2038 |
+
.optimizer-card.soap .highlight-stat .value { color: #6B9B4B; }
|
| 2039 |
+
.optimizer-card.muon .highlight-stat .value { color: #7B8DB3; }
|
| 2040 |
+
.optimizer-card.caspr .highlight-stat .value { color: #B47488; }
|
| 2041 |
+
|
| 2042 |
+
.optimizer-card .highlight-stat .label {
|
| 2043 |
+
font-size: 0.8rem;
|
| 2044 |
+
color: #A0AEC0;
|
| 2045 |
+
}
|
| 2046 |
+
|
| 2047 |
+
/* The poetic comparison */
|
| 2048 |
+
.impressionist-quote {
|
| 2049 |
+
text-align: center;
|
| 2050 |
+
padding: 4rem 2rem;
|
| 2051 |
+
margin-top: 4rem;
|
| 2052 |
+
position: relative;
|
| 2053 |
+
}
|
| 2054 |
+
|
| 2055 |
+
.impressionist-quote::before {
|
| 2056 |
+
content: '~';
|
| 2057 |
+
font-family: 'Fraunces', Georgia, serif;
|
| 2058 |
+
font-size: 3rem;
|
| 2059 |
+
color: #C4B4A4;
|
| 2060 |
+
display: block;
|
| 2061 |
+
margin-bottom: 1rem;
|
| 2062 |
+
}
|
| 2063 |
+
|
| 2064 |
+
.impressionist-quote blockquote {
|
| 2065 |
+
font-family: 'Fraunces', Georgia, serif;
|
| 2066 |
+
font-size: clamp(1.25rem, 2.5vw, 1.75rem);
|
| 2067 |
+
font-style: italic;
|
| 2068 |
+
color: #5A6978;
|
| 2069 |
+
line-height: 1.8;
|
| 2070 |
+
max-width: 800px;
|
| 2071 |
+
margin: 0 auto;
|
| 2072 |
+
}
|
| 2073 |
+
|
| 2074 |
+
.impressionist-quote cite {
|
| 2075 |
+
display: block;
|
| 2076 |
+
font-family: 'Fraunces', Georgia, serif;
|
| 2077 |
+
font-style: normal;
|
| 2078 |
+
font-size: 0.9rem;
|
| 2079 |
+
color: #A0AEC0;
|
| 2080 |
+
margin-top: 1.5rem;
|
| 2081 |
+
}
|
| 2082 |
+
|
| 2083 |
+
/* Relationship diagram */
|
| 2084 |
+
.family-tree {
|
| 2085 |
+
background: rgba(255,255,255,0.7);
|
| 2086 |
+
border-radius: 12px;
|
| 2087 |
+
padding: 3rem;
|
| 2088 |
+
margin-top: 4rem;
|
| 2089 |
+
box-shadow: 0 8px 32px rgba(0,0,0,0.06);
|
| 2090 |
+
}
|
| 2091 |
+
|
| 2092 |
+
.family-tree h5 {
|
| 2093 |
+
font-family: 'Fraunces', Georgia, serif;
|
| 2094 |
+
font-size: 1.25rem;
|
| 2095 |
+
font-style: italic;
|
| 2096 |
+
color: #5A6978;
|
| 2097 |
+
text-align: center;
|
| 2098 |
+
margin-bottom: 2rem;
|
| 2099 |
+
}
|
| 2100 |
+
|
| 2101 |
+
.family-tree-svg {
|
| 2102 |
+
width: 100%;
|
| 2103 |
+
max-width: 800px;
|
| 2104 |
+
margin: 0 auto;
|
| 2105 |
+
display: block;
|
| 2106 |
+
}
|
| 2107 |
+
|
| 2108 |
+
@media (max-width: 1024px) {
|
| 2109 |
+
.optimizer-garden {
|
| 2110 |
+
grid-template-columns: repeat(2, 1fr);
|
| 2111 |
+
}
|
| 2112 |
+
}
|
| 2113 |
+
|
| 2114 |
+
@media (max-width: 768px) {
|
| 2115 |
+
.pissarro {
|
| 2116 |
+
padding: 4rem 1.5rem;
|
| 2117 |
+
}
|
| 2118 |
+
|
| 2119 |
+
.optimizer-garden {
|
| 2120 |
+
grid-template-columns: 1fr;
|
| 2121 |
+
}
|
| 2122 |
+
|
| 2123 |
+
.landscape-canvas {
|
| 2124 |
+
padding: 1rem;
|
| 2125 |
+
}
|
| 2126 |
+
|
| 2127 |
+
.landscape-canvas::before {
|
| 2128 |
+
font-size: 0.75rem;
|
| 2129 |
+
}
|
| 2130 |
+
|
| 2131 |
+
.family-tree {
|
| 2132 |
+
padding: 1.5rem;
|
| 2133 |
+
overflow-x: auto;
|
| 2134 |
+
}
|
| 2135 |
+
|
| 2136 |
+
.family-tree-svg {
|
| 2137 |
+
min-width: 500px;
|
| 2138 |
+
}
|
| 2139 |
+
}
|
| 2140 |
+
|
| 2141 |
/* Focus Areas */
|
| 2142 |
.focus {
|
| 2143 |
padding: 10rem 4rem;
|
|
|
|
| 3156 |
</div>
|
| 3157 |
</section>
|
| 3158 |
|
| 3159 |
+
<!-- ARCADE FIGHTING GAME SECTION -->
|
| 3160 |
+
<section class="arcade" id="arcade">
|
| 3161 |
+
<div class="arcade-crt"></div>
|
| 3162 |
+
<div class="arcade-grid"></div>
|
| 3163 |
+
|
| 3164 |
+
<div class="arcade-content">
|
| 3165 |
+
<div class="arcade-header">
|
| 3166 |
+
<h2 class="arcade-title">Optimizer<br/>Kombat</h2>
|
| 3167 |
+
<p class="arcade-subtitle">Second Order Showdown</p>
|
| 3168 |
+
<p class="insert-coin">>>> INSERT COIN TO CONTINUE <<<</p>
|
| 3169 |
+
</div>
|
| 3170 |
+
|
| 3171 |
+
<!-- Fighter Select Screen -->
|
| 3172 |
+
<div class="fighter-select">
|
| 3173 |
+
<div class="fighter-card">
|
| 3174 |
+
<div class="fighter-avatar">📉</div>
|
| 3175 |
+
<h4>SGD</h4>
|
| 3176 |
+
<div class="class">First Order • Basic</div>
|
| 3177 |
+
</div>
|
| 3178 |
+
<div class="fighter-card legendary selected">
|
| 3179 |
+
<div class="fighter-avatar">🧴</div>
|
| 3180 |
+
<h4>Shampoo</h4>
|
| 3181 |
+
<div class="class">Second Order • OG</div>
|
| 3182 |
+
</div>
|
| 3183 |
+
<div class="fighter-card">
|
| 3184 |
+
<div class="fighter-avatar">🫧</div>
|
| 3185 |
+
<h4>SOAP</h4>
|
| 3186 |
+
<div class="class">Second Order • Hybrid</div>
|
| 3187 |
+
</div>
|
| 3188 |
+
<div class="fighter-card">
|
| 3189 |
+
<div class="fighter-avatar">μ</div>
|
| 3190 |
+
<h4>Muon</h4>
|
| 3191 |
+
<div class="class">Orthogonal • Speed</div>
|
| 3192 |
+
</div>
|
| 3193 |
+
<div class="fighter-card">
|
| 3194 |
+
<div class="fighter-avatar">∑</div>
|
| 3195 |
+
<h4>CASPR</h4>
|
| 3196 |
+
<div class="class">Kron-Sum • Theory</div>
|
| 3197 |
+
</div>
|
| 3198 |
+
</div>
|
| 3199 |
+
|
| 3200 |
+
<!-- Main Battle Arena -->
|
| 3201 |
+
<div class="battle-arena">
|
| 3202 |
+
<!-- Health Bars -->
|
| 3203 |
+
<div class="health-bars">
|
| 3204 |
+
<div class="health-bar-container">
|
| 3205 |
+
<div class="health-bar-name">Shampoo</div>
|
| 3206 |
+
<div class="health-bar">
|
| 3207 |
+
<div class="health-bar-fill"></div>
|
| 3208 |
+
</div>
|
| 3209 |
+
</div>
|
| 3210 |
+
<div class="health-bar-container right">
|
| 3211 |
+
<div class="health-bar-name">Adam</div>
|
| 3212 |
+
<div class="health-bar">
|
| 3213 |
+
<div class="health-bar-fill"></div>
|
| 3214 |
+
</div>
|
| 3215 |
+
</div>
|
| 3216 |
+
</div>
|
| 3217 |
+
|
| 3218 |
+
<!-- Battle Grid -->
|
| 3219 |
+
<div class="battle-grid">
|
| 3220 |
+
<!-- Left Fighter: Shampoo -->
|
| 3221 |
+
<div class="battle-fighter winner">
|
| 3222 |
+
<div class="fighter-portrait">🧴</div>
|
| 3223 |
+
<div class="fighter-name">Shampoo</div>
|
| 3224 |
+
<div class="fighter-title">The Preconditioner</div>
|
| 3225 |
+
|
| 3226 |
+
<div class="stat-bars">
|
| 3227 |
+
<div class="stat-row">
|
| 3228 |
+
<span class="stat-label">SPEED</span>
|
| 3229 |
+
<div class="stat-bar"><div class="stat-bar-fill" style="width: 85%"></div></div>
|
| 3230 |
+
<span class="stat-value">85</span>
|
| 3231 |
+
</div>
|
| 3232 |
+
<div class="stat-row">
|
| 3233 |
+
<span class="stat-label">POWER</span>
|
| 3234 |
+
<div class="stat-bar"><div class="stat-bar-fill" style="width: 92%"></div></div>
|
| 3235 |
+
<span class="stat-value">92</span>
|
| 3236 |
+
</div>
|
| 3237 |
+
<div class="stat-row">
|
| 3238 |
+
<span class="stat-label">MEMORY</span>
|
| 3239 |
+
<div class="stat-bar"><div class="stat-bar-fill" style="width: 60%"></div></div>
|
| 3240 |
+
<span class="stat-value">60</span>
|
| 3241 |
+
</div>
|
| 3242 |
+
<div class="stat-row">
|
| 3243 |
+
<span class="stat-label">THEORY</span>
|
| 3244 |
+
<div class="stat-bar"><div class="stat-bar-fill" style="width: 95%"></div></div>
|
| 3245 |
+
<span class="stat-value">95</span>
|
| 3246 |
+
</div>
|
| 3247 |
+
</div>
|
| 3248 |
+
|
| 3249 |
+
<div class="special-moves">
|
| 3250 |
+
<h5>Special Moves</h5>
|
| 3251 |
+
<div class="move">
|
| 3252 |
+
<div class="move-keys">
|
| 3253 |
+
<span class="key">↓</span>
|
| 3254 |
+
<span class="key">→</span>
|
| 3255 |
+
<span class="key">L</span>
|
| 3256 |
+
</div>
|
| 3257 |
+
<span class="move-name">Kronecker Factor</span>
|
| 3258 |
+
</div>
|
| 3259 |
+
<div class="move">
|
| 3260 |
+
<div class="move-keys">
|
| 3261 |
+
<span class="key">←</span>
|
| 3262 |
+
<span class="key">→</span>
|
| 3263 |
+
<span class="key">R</span>
|
| 3264 |
+
</div>
|
| 3265 |
+
<span class="move-name">Fourth Root Fury</span>
|
| 3266 |
+
</div>
|
| 3267 |
+
<div class="move">
|
| 3268 |
+
<div class="move-keys">
|
| 3269 |
+
<span class="key">↓</span>
|
| 3270 |
+
<span class="key">↓</span>
|
| 3271 |
+
<span class="key">G</span>
|
| 3272 |
+
</div>
|
| 3273 |
+
<span class="move-name">Preconditioned HADOUKEN</span>
|
| 3274 |
+
</div>
|
| 3275 |
+
</div>
|
| 3276 |
+
</div>
|
| 3277 |
+
|
| 3278 |
+
<!-- VS -->
|
| 3279 |
+
<div class="battle-vs">
|
| 3280 |
+
<div class="battle-vs-text">VS</div>
|
| 3281 |
+
</div>
|
| 3282 |
+
|
| 3283 |
+
<!-- Right Fighter: Adam -->
|
| 3284 |
+
<div class="battle-fighter">
|
| 3285 |
+
<div class="fighter-portrait">📊</div>
|
| 3286 |
+
<div class="fighter-name">Adam</div>
|
| 3287 |
+
<div class="fighter-title">The Adaptive One</div>
|
| 3288 |
+
|
| 3289 |
+
<div class="stat-bars">
|
| 3290 |
+
<div class="stat-row">
|
| 3291 |
+
<span class="stat-label">SPEED</span>
|
| 3292 |
+
<div class="stat-bar"><div class="stat-bar-fill" style="width: 70%"></div></div>
|
| 3293 |
+
<span class="stat-value">70</span>
|
| 3294 |
+
</div>
|
| 3295 |
+
<div class="stat-row">
|
| 3296 |
+
<span class="stat-label">POWER</span>
|
| 3297 |
+
<div class="stat-bar"><div class="stat-bar-fill" style="width: 65%"></div></div>
|
| 3298 |
+
<span class="stat-value">65</span>
|
| 3299 |
+
</div>
|
| 3300 |
+
<div class="stat-row">
|
| 3301 |
+
<span class="stat-label">MEMORY</span>
|
| 3302 |
+
<div class="stat-bar"><div class="stat-bar-fill" style="width: 85%"></div></div>
|
| 3303 |
+
<span class="stat-value">85</span>
|
| 3304 |
+
</div>
|
| 3305 |
+
<div class="stat-row">
|
| 3306 |
+
<span class="stat-label">THEORY</span>
|
| 3307 |
+
<div class="stat-bar"><div class="stat-bar-fill" style="width: 50%"></div></div>
|
| 3308 |
+
<span class="stat-value">50</span>
|
| 3309 |
+
</div>
|
| 3310 |
+
</div>
|
| 3311 |
+
|
| 3312 |
+
<div class="special-moves">
|
| 3313 |
+
<h5>Special Moves</h5>
|
| 3314 |
+
<div class="move">
|
| 3315 |
+
<div class="move-keys">
|
| 3316 |
+
<span class="key">→</span>
|
| 3317 |
+
<span class="key">→</span>
|
| 3318 |
+
<span class="key">M</span>
|
| 3319 |
+
</div>
|
| 3320 |
+
<span class="move-name">Momentum Rush</span>
|
| 3321 |
+
</div>
|
| 3322 |
+
<div class="move">
|
| 3323 |
+
<div class="move-keys">
|
| 3324 |
+
<span class="key">↓</span>
|
| 3325 |
+
<span class="key">↑</span>
|
| 3326 |
+
<span class="key">V</span>
|
| 3327 |
+
</div>
|
| 3328 |
+
<span class="move-name">Variance Vortex</span>
|
| 3329 |
+
</div>
|
| 3330 |
+
<div class="move">
|
| 3331 |
+
<div class="move-keys">
|
| 3332 |
+
<span class="key">←</span>
|
| 3333 |
+
<span class="key">↓</span>
|
| 3334 |
+
<span class="key">β</span>
|
| 3335 |
+
</div>
|
| 3336 |
+
<span class="move-name">Beta Correction</span>
|
| 3337 |
+
</div>
|
| 3338 |
+
</div>
|
| 3339 |
+
</div>
|
| 3340 |
+
</div>
|
| 3341 |
+
|
| 3342 |
+
<!-- Combo Display -->
|
| 3343 |
+
<div class="combo-display">
|
| 3344 |
+
<div class="combo-number">47</div>
|
| 3345 |
+
<div class="combo-text">Hit Combo!</div>
|
| 3346 |
+
</div>
|
| 3347 |
+
</div>
|
| 3348 |
+
|
| 3349 |
+
<!-- Winner Announcement -->
|
| 3350 |
+
<div class="winner-announcement">
|
| 3351 |
+
<h3>Shampoo Wins!</h3>
|
| 3352 |
+
<p>FLAWLESS VICTORY — 40% faster convergence, 2× fewer iterations. The preconditioner has spoken.</p>
|
| 3353 |
+
</div>
|
| 3354 |
+
|
| 3355 |
+
<!-- High Scores Table -->
|
| 3356 |
+
<div class="high-scores">
|
| 3357 |
+
<h4>>>> Global Leaderboard <<<</h4>
|
| 3358 |
+
<table class="score-table">
|
| 3359 |
+
<thead>
|
| 3360 |
+
<tr>
|
| 3361 |
+
<th>Rank</th>
|
| 3362 |
+
<th>Optimizer</th>
|
| 3363 |
+
<th>Steps to 75.9%</th>
|
| 3364 |
+
<th>Special Ability</th>
|
| 3365 |
+
</tr>
|
| 3366 |
+
</thead>
|
| 3367 |
+
<tbody>
|
| 3368 |
+
<tr>
|
| 3369 |
+
<td class="rank">1ST</td>
|
| 3370 |
+
<td class="optimizer-name"><span>μ</span> MUON</td>
|
| 3371 |
+
<td class="score">~1,200</td>
|
| 3372 |
+
<td class="special">2× COMPUTE EFFICIENCY</td>
|
| 3373 |
+
</tr>
|
| 3374 |
+
<tr>
|
| 3375 |
+
<td class="rank">2ND</td>
|
| 3376 |
+
<td class="optimizer-name"><span>🫧</span> SOAP</td>
|
| 3377 |
+
<td class="score">~1,500</td>
|
| 3378 |
+
<td class="special">ADAM IN EIGENBASIS</td>
|
| 3379 |
+
</tr>
|
| 3380 |
+
<tr>
|
| 3381 |
+
<td class="rank">3RD</td>
|
| 3382 |
+
<td class="optimizer-name"><span>🧴</span> SHAMPOO</td>
|
| 3383 |
+
<td class="score">1,729</td>
|
| 3384 |
+
<td class="special">KRONECKER FACTORIZATION</td>
|
| 3385 |
+
</tr>
|
| 3386 |
+
<tr>
|
| 3387 |
+
<td class="rank">4TH</td>
|
| 3388 |
+
<td class="optimizer-name"><span>∑</span> CASPR</td>
|
| 3389 |
+
<td class="score">~1,800</td>
|
| 3390 |
+
<td class="special">TIGHTER BOUNDS</td>
|
| 3391 |
+
</tr>
|
| 3392 |
+
<tr>
|
| 3393 |
+
<td class="rank">5TH</td>
|
| 3394 |
+
<td class="optimizer-name"><span>📊</span> ADAMW</td>
|
| 3395 |
+
<td class="score">2,512</td>
|
| 3396 |
+
<td class="special">WEIGHT DECAY</td>
|
| 3397 |
+
</tr>
|
| 3398 |
+
<tr>
|
| 3399 |
+
<td class="rank">6TH</td>
|
| 3400 |
+
<td class="optimizer-name"><span>📉</span> SGD</td>
|
| 3401 |
+
<td class="score">4,000+</td>
|
| 3402 |
+
<td class="special">SIMPLICITY</td>
|
| 3403 |
+
</tr>
|
| 3404 |
+
</tbody>
|
| 3405 |
+
</table>
|
| 3406 |
+
</div>
|
| 3407 |
+
|
| 3408 |
+
<div class="arcade-credits">
|
| 3409 |
+
<p>© 2018-2025 OPTIMIZATION LABS</p>
|
| 3410 |
+
<p class="blink">GAME OVER — CONTINUE?</p>
|
| 3411 |
+
</div>
|
| 3412 |
+
</div>
|
| 3413 |
+
</section>
|
| 3414 |
+
|
| 3415 |
+
<!-- PISSARRO IMPRESSIONIST SECTION -->
|
| 3416 |
+
<section class="pissarro" id="pissarro">
|
| 3417 |
+
<div class="pissarro-sky"></div>
|
| 3418 |
+
<div class="pissarro-dots"></div>
|
| 3419 |
+
|
| 3420 |
+
<div class="pissarro-content">
|
| 3421 |
+
<div class="pissarro-header">
|
| 3422 |
+
<h2 class="pissarro-title">A Garden of Optimizers</h2>
|
| 3423 |
+
<p class="pissarro-subtitle">Four paths through the landscape of loss, each with its own light and color, converging toward the same distant horizon.</p>
|
| 3424 |
+
</div>
|
| 3425 |
+
|
| 3426 |
+
<!-- Main landscape painting showing optimization paths -->
|
| 3427 |
+
<div class="landscape-canvas">
|
| 3428 |
+
<svg class="landscape-svg" viewBox="0 0 1000 450" fill="none" xmlns="http://www.w3.org/2000/svg">
|
| 3429 |
+
<!-- Sky with impressionist texture -->
|
| 3430 |
+
<defs>
|
| 3431 |
+
<linearGradient id="skyGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
| 3432 |
+
<stop offset="0%" style="stop-color:#B8C4D4"/>
|
| 3433 |
+
<stop offset="50%" style="stop-color:#C9D5E0"/>
|
| 3434 |
+
<stop offset="100%" style="stop-color:#DED8CE"/>
|
| 3435 |
+
</linearGradient>
|
| 3436 |
+
<linearGradient id="fieldGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
| 3437 |
+
<stop offset="0%" style="stop-color:#C4B896"/>
|
| 3438 |
+
<stop offset="50%" style="stop-color:#A8C090"/>
|
| 3439 |
+
<stop offset="100%" style="stop-color:#7BA05B"/>
|
| 3440 |
+
</linearGradient>
|
| 3441 |
+
<linearGradient id="lossGrad" x1="0%" y1="100%" x2="0%" y2="0%">
|
| 3442 |
+
<stop offset="0%" style="stop-color:#6B8B5A"/>
|
| 3443 |
+
<stop offset="30%" style="stop-color:#9BAB7A"/>
|
| 3444 |
+
<stop offset="60%" style="stop-color:#C4B896"/>
|
| 3445 |
+
<stop offset="100%" style="stop-color:#DED8CE"/>
|
| 3446 |
+
</linearGradient>
|
| 3447 |
+
<filter id="impressionist" x="-5%" y="-5%" width="110%" height="110%">
|
| 3448 |
+
<feTurbulence type="fractalNoise" baseFrequency="0.04" numOctaves="3" result="noise"/>
|
| 3449 |
+
<feDisplacementMap in="SourceGraphic" in2="noise" scale="3" xChannelSelector="R" yChannelSelector="G"/>
|
| 3450 |
+
</filter>
|
| 3451 |
+
<filter id="softGlow">
|
| 3452 |
+
<feGaussianBlur stdDeviation="2" result="blur"/>
|
| 3453 |
+
<feMerge>
|
| 3454 |
+
<feMergeNode in="blur"/>
|
| 3455 |
+
<feMergeNode in="SourceGraphic"/>
|
| 3456 |
+
</feMerge>
|
| 3457 |
+
</filter>
|
| 3458 |
+
</defs>
|
| 3459 |
+
|
| 3460 |
+
<!-- Sky -->
|
| 3461 |
+
<rect x="0" y="0" width="1000" height="200" fill="url(#skyGrad)"/>
|
| 3462 |
+
|
| 3463 |
+
<!-- Distant hills -->
|
| 3464 |
+
<ellipse cx="200" cy="200" rx="250" ry="60" fill="#A8B8A0" opacity="0.6"/>
|
| 3465 |
+
<ellipse cx="700" cy="190" rx="300" ry="70" fill="#98A890" opacity="0.5"/>
|
| 3466 |
+
<ellipse cx="500" cy="195" rx="200" ry="50" fill="#B8C4A8" opacity="0.4"/>
|
| 3467 |
+
|
| 3468 |
+
<!-- Loss landscape (the rolling hills/field) -->
|
| 3469 |
+
<path d="M0 200 Q100 280 200 240 Q350 180 500 220 Q650 260 750 200 Q850 140 950 180 L1000 180 L1000 450 L0 450 Z" fill="url(#lossGrad)" filter="url(#impressionist)"/>
|
| 3470 |
+
|
| 3471 |
+
<!-- The minimum point (golden glow) -->
|
| 3472 |
+
<circle cx="850" cy="160" r="25" fill="#FFD700" opacity="0.3" filter="url(#softGlow)"/>
|
| 3473 |
+
<circle cx="850" cy="160" r="12" fill="#FFD700" opacity="0.5"/>
|
| 3474 |
+
<circle cx="850" cy="160" r="5" fill="#FFF8DC"/>
|
| 3475 |
+
<text x="850" y="135" text-anchor="middle" fill="#8B7355" font-family="Fraunces, Georgia" font-size="11" font-style="italic">minimum</text>
|
| 3476 |
+
|
| 3477 |
+
<!-- SGD path (gray, wandering) -->
|
| 3478 |
+
<path d="M80 350 Q100 340 110 355 Q130 370 150 350 Q180 320 200 340 Q230 360 260 330 Q300 290 340 310 Q380 330 420 300 Q470 260 520 280 Q570 300 620 260 Q680 210 740 230 Q800 250 830 200 Q840 180 850 165"
|
| 3479 |
+
stroke="#9CA3AF" stroke-width="2" fill="none" stroke-dasharray="4 4" opacity="0.5"/>
|
| 3480 |
+
<circle cx="80" cy="350" r="6" fill="#9CA3AF"/>
|
| 3481 |
+
<text x="80" y="375" text-anchor="middle" fill="#9CA3AF" font-family="Inter" font-size="9" font-weight="500">SGD</text>
|
| 3482 |
+
|
| 3483 |
+
<!-- Shampoo path (warm ochre, more direct) -->
|
| 3484 |
+
<path d="M120 380 Q180 350 250 320 Q350 280 450 260 Q550 240 650 210 Q750 180 850 165"
|
| 3485 |
+
stroke="#D4A574" stroke-width="3.5" fill="none" stroke-linecap="round" filter="url(#softGlow)"/>
|
| 3486 |
+
<circle cx="120" cy="380" r="8" fill="#D4A574"/>
|
| 3487 |
+
<circle cx="450" cy="260" r="4" fill="#D4A574" opacity="0.6"/>
|
| 3488 |
+
<circle cx="650" cy="210" r="4" fill="#D4A574" opacity="0.6"/>
|
| 3489 |
+
<text x="120" y="405" text-anchor="middle" fill="#C49A6C" font-family="Fraunces, Georgia" font-size="11" font-weight="500">Shampoo</text>
|
| 3490 |
+
|
| 3491 |
+
<!-- SOAP path (green, smooth) -->
|
| 3492 |
+
<path d="M160 360 Q240 320 340 290 Q460 250 580 220 Q700 190 850 165"
|
| 3493 |
+
stroke="#7BA05B" stroke-width="3.5" fill="none" stroke-linecap="round" filter="url(#softGlow)"/>
|
| 3494 |
+
<circle cx="160" cy="360" r="8" fill="#7BA05B"/>
|
| 3495 |
+
<circle cx="460" cy="250" r="4" fill="#7BA05B" opacity="0.6"/>
|
| 3496 |
+
<text x="160" y="385" text-anchor="middle" fill="#6B9B4B" font-family="Fraunces, Georgia" font-size="11" font-weight="500">SOAP</text>
|
| 3497 |
+
|
| 3498 |
+
<!-- Muon path (blue, efficient) -->
|
| 3499 |
+
<path d="M200 340 Q300 300 420 270 Q560 235 700 200 Q790 175 850 165"
|
| 3500 |
+
stroke="#8B9DC3" stroke-width="3.5" fill="none" stroke-linecap="round" filter="url(#softGlow)"/>
|
| 3501 |
+
<circle cx="200" cy="340" r="8" fill="#8B9DC3"/>
|
| 3502 |
+
<circle cx="560" cy="235" r="4" fill="#8B9DC3" opacity="0.6"/>
|
| 3503 |
+
<text x="200" y="365" text-anchor="middle" fill="#7B8DB3" font-family="Fraunces, Georgia" font-size="11" font-weight="500">Muon</text>
|
| 3504 |
+
|
| 3505 |
+
<!-- CASPR path (rose, theoretical) -->
|
| 3506 |
+
<path d="M140 400 Q220 360 320 320 Q440 275 560 245 Q700 210 850 165"
|
| 3507 |
+
stroke="#C4849B" stroke-width="3" fill="none" stroke-linecap="round" stroke-dasharray="8 4" filter="url(#softGlow)"/>
|
| 3508 |
+
<circle cx="140" cy="400" r="8" fill="#C4849B"/>
|
| 3509 |
+
<text x="140" y="425" text-anchor="middle" fill="#B47488" font-family="Fraunces, Georgia" font-size="11" font-weight="500">CASPR</text>
|
| 3510 |
+
|
| 3511 |
+
<!-- Impressionist brushstroke dots -->
|
| 3512 |
+
<g opacity="0.3">
|
| 3513 |
+
<circle cx="300" cy="300" r="3" fill="#8B9D7A"/>
|
| 3514 |
+
<circle cx="450" cy="280" r="2" fill="#A67C52"/>
|
| 3515 |
+
<circle cx="600" cy="240" r="3" fill="#7A8B6A"/>
|
| 3516 |
+
<circle cx="750" cy="200" r="2" fill="#9B8B7A"/>
|
| 3517 |
+
<circle cx="380" cy="320" r="2" fill="#6B8B5A"/>
|
| 3518 |
+
<circle cx="520" cy="260" r="3" fill="#AB9B8A"/>
|
| 3519 |
+
<circle cx="680" cy="220" r="2" fill="#8B8B7A"/>
|
| 3520 |
+
<circle cx="820" cy="180" r="3" fill="#C4A574"/>
|
| 3521 |
+
</g>
|
| 3522 |
+
|
| 3523 |
+
<!-- Trees (impressionist style) -->
|
| 3524 |
+
<g transform="translate(50, 220)">
|
| 3525 |
+
<ellipse cx="20" cy="0" rx="25" ry="35" fill="#5B7B4A" opacity="0.8"/>
|
| 3526 |
+
<ellipse cx="15" cy="-10" rx="20" ry="28" fill="#6B8B5A" opacity="0.7"/>
|
| 3527 |
+
<rect x="15" y="25" width="8" height="30" fill="#8B7355"/>
|
| 3528 |
+
</g>
|
| 3529 |
+
<g transform="translate(920, 180)">
|
| 3530 |
+
<ellipse cx="20" cy="0" rx="22" ry="30" fill="#5B7B4A" opacity="0.7"/>
|
| 3531 |
+
<ellipse cx="18" cy="-8" rx="18" ry="24" fill="#6B8B5A" opacity="0.6"/>
|
| 3532 |
+
<rect x="16" y="22" width="6" height="25" fill="#8B7355"/>
|
| 3533 |
+
</g>
|
| 3534 |
+
|
| 3535 |
+
<!-- Legend box -->
|
| 3536 |
+
<rect x="20" y="20" width="180" height="120" rx="8" fill="rgba(255,255,255,0.85)" stroke="#D4C4B0"/>
|
| 3537 |
+
<text x="110" y="42" text-anchor="middle" fill="#5A6978" font-family="Fraunces, Georgia" font-size="11" font-style="italic">Chemins vers le minimum</text>
|
| 3538 |
+
<line x1="35" y1="58" x2="65" y2="58" stroke="#D4A574" stroke-width="3"/>
|
| 3539 |
+
<text x="75" y="62" fill="#5A6978" font-family="Inter" font-size="9">Shampoo (2018)</text>
|
| 3540 |
+
<line x1="35" y1="78" x2="65" y2="78" stroke="#7BA05B" stroke-width="3"/>
|
| 3541 |
+
<text x="75" y="82" fill="#5A6978" font-family="Inter" font-size="9">SOAP (2024)</text>
|
| 3542 |
+
<line x1="35" y1="98" x2="65" y2="98" stroke="#8B9DC3" stroke-width="3"/>
|
| 3543 |
+
<text x="75" y="102" fill="#5A6978" font-family="Inter" font-size="9">Muon (2024)</text>
|
| 3544 |
+
<line x1="35" y1="118" x2="65" y2="118" stroke="#C4849B" stroke-width="3" stroke-dasharray="8 4"/>
|
| 3545 |
+
<text x="75" y="122" fill="#5A6978" font-family="Inter" font-size="9">CASPR (2023)</text>
|
| 3546 |
+
</svg>
|
| 3547 |
+
</div>
|
| 3548 |
+
|
| 3549 |
+
<!-- Optimizer cards -->
|
| 3550 |
+
<div class="optimizer-garden">
|
| 3551 |
+
<div class="optimizer-card shampoo">
|
| 3552 |
+
<div class="optimizer-icon">🧴</div>
|
| 3553 |
+
<h4>Shampoo</h4>
|
| 3554 |
+
<div class="year">Gupta, Anil et al. — 2018</div>
|
| 3555 |
+
<p>The progenitor. Maintains Kronecker-factored preconditioners L and R, capturing row and column gradient statistics separately.</p>
|
| 3556 |
+
<div class="equation">
|
| 3557 |
+
H = L<sup>−¼</sup> G R<sup>−¼</sup>
|
| 3558 |
+
</div>
|
| 3559 |
+
<div class="highlight-stat">
|
| 3560 |
+
<span class="value">40%</span>
|
| 3561 |
+
<span class="label">faster wall-clock vs Adam</span>
|
| 3562 |
+
</div>
|
| 3563 |
+
</div>
|
| 3564 |
+
|
| 3565 |
+
<div class="optimizer-card soap">
|
| 3566 |
+
<div class="optimizer-icon">🫧</div>
|
| 3567 |
+
<h4>SOAP</h4>
|
| 3568 |
+
<div class="year">Vyas et al. — 2024</div>
|
| 3569 |
+
<p>Shampoo's refined heir. Runs Adam in the eigenbasis of Shampoo's preconditioner, combining the best of both worlds.</p>
|
| 3570 |
+
<div class="equation">
|
| 3571 |
+
Adam in Q<sup>T</sup>WP basis
|
| 3572 |
+
</div>
|
| 3573 |
+
<div class="highlight-stat">
|
| 3574 |
+
<span class="value">40%+</span>
|
| 3575 |
+
<span class="label">fewer iterations vs AdamW</span>
|
| 3576 |
+
</div>
|
| 3577 |
+
</div>
|
| 3578 |
+
|
| 3579 |
+
<div class="optimizer-card muon">
|
| 3580 |
+
<div class="optimizer-icon">μ</div>
|
| 3581 |
+
<h4>Muon</h4>
|
| 3582 |
+
<div class="year">Keller Jordan — 2024</div>
|
| 3583 |
+
<p>The minimalist. Orthogonalizes momentum via Newton-Schulz iteration. No second moments, half the memory of Adam.</p>
|
| 3584 |
+
<div class="equation">
|
| 3585 |
+
G̃ = NS(momentum)
|
| 3586 |
+
</div>
|
| 3587 |
+
<div class="highlight-stat">
|
| 3588 |
+
<span class="value">2×</span>
|
| 3589 |
+
<span class="label">compute efficiency vs AdamW</span>
|
| 3590 |
+
</div>
|
| 3591 |
+
</div>
|
| 3592 |
+
|
| 3593 |
+
<div class="optimizer-card caspr">
|
| 3594 |
+
<div class="optimizer-icon">∑</div>
|
| 3595 |
+
<h4>CASPR</h4>
|
| 3596 |
+
<div class="year">OpenReview — 2023</div>
|
| 3597 |
+
<p>The theoretician. Combines axis preconditioners via Kronecker-sum approximation. Shampoo is its special case.</p>
|
| 3598 |
+
<div class="equation">
|
| 3599 |
+
P ≈ L ⊕ R (Kron-sum)
|
| 3600 |
+
</div>
|
| 3601 |
+
<div class="highlight-stat">
|
| 3602 |
+
<span class="value">Tighter</span>
|
| 3603 |
+
<span class="label">convergence bounds</span>
|
| 3604 |
+
</div>
|
| 3605 |
+
</div>
|
| 3606 |
+
</div>
|
| 3607 |
+
|
| 3608 |
+
<!-- Family tree / relationship diagram -->
|
| 3609 |
+
<div class="family-tree">
|
| 3610 |
+
<h5>L'Arbre Généalogique des Optimiseurs</h5>
|
| 3611 |
+
<svg class="family-tree-svg" viewBox="0 0 700 280" fill="none" xmlns="http://www.w3.org/2000/svg">
|
| 3612 |
+
<!-- Full-Matrix Adagrad (ancestor) -->
|
| 3613 |
+
<rect x="275" y="10" width="150" height="50" rx="8" fill="#F5F0E8" stroke="#C4B4A4" stroke-width="1.5"/>
|
| 3614 |
+
<text x="350" y="32" text-anchor="middle" fill="#5A6978" font-family="Fraunces, Georgia" font-size="11">Full-Matrix Adagrad</text>
|
| 3615 |
+
<text x="350" y="48" text-anchor="middle" fill="#A0AEC0" font-family="Inter" font-size="9">O(n⁴) — impractical</text>
|
| 3616 |
+
|
| 3617 |
+
<!-- Arrow down to Shampoo -->
|
| 3618 |
+
<path d="M350 60 L350 90" stroke="#C4B4A4" stroke-width="1.5" marker-end="url(#arrowhead)"/>
|
| 3619 |
+
<defs>
|
| 3620 |
+
<marker id="arrowhead" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
|
| 3621 |
+
<polygon points="0 0, 10 3.5, 0 7" fill="#C4B4A4"/>
|
| 3622 |
+
</marker>
|
| 3623 |
+
</defs>
|
| 3624 |
+
|
| 3625 |
+
<!-- Shampoo (central) -->
|
| 3626 |
+
<rect x="275" y="95" width="150" height="55" rx="8" fill="#FFF8F0" stroke="#D4A574" stroke-width="2"/>
|
| 3627 |
+
<text x="350" y="118" text-anchor="middle" fill="#C49A6C" font-family="Fraunces, Georgia" font-size="13" font-weight="500">Shampoo</text>
|
| 3628 |
+
<text x="350" y="136" text-anchor="middle" fill="#718096" font-family="Inter" font-size="9">Kronecker factorization</text>
|
| 3629 |
+
|
| 3630 |
+
<!-- Arrows branching out -->
|
| 3631 |
+
<path d="M275 122 L180 122 L180 175" stroke="#C4B4A4" stroke-width="1.5"/>
|
| 3632 |
+
<path d="M425 122 L520 122 L520 175" stroke="#C4B4A4" stroke-width="1.5"/>
|
| 3633 |
+
<path d="M350 150 L350 175" stroke="#C4B4A4" stroke-width="1.5"/>
|
| 3634 |
+
|
| 3635 |
+
<!-- CASPR (left) -->
|
| 3636 |
+
<rect x="105" y="180" width="150" height="55" rx="8" fill="#FFF5F8" stroke="#C4849B" stroke-width="2"/>
|
| 3637 |
+
<text x="180" y="203" text-anchor="middle" fill="#B47488" font-family="Fraunces, Georgia" font-size="12" font-weight="500">CASPR</text>
|
| 3638 |
+
<text x="180" y="221" text-anchor="middle" fill="#718096" font-family="Inter" font-size="9">Kronecker-sum approx.</text>
|
| 3639 |
+
|
| 3640 |
+
<!-- SOAP (center) -->
|
| 3641 |
+
<rect x="275" y="180" width="150" height="55" rx="8" fill="#F0FFF4" stroke="#7BA05B" stroke-width="2"/>
|
| 3642 |
+
<text x="350" y="203" text-anchor="middle" fill="#6B9B4B" font-family="Fraunces, Georgia" font-size="12" font-weight="500">SOAP</text>
|
| 3643 |
+
<text x="350" y="221" text-anchor="middle" fill="#718096" font-family="Inter" font-size="9">+ Adam in eigenbasis</text>
|
| 3644 |
+
|
| 3645 |
+
<!-- Connection from CASPR to Muon -->
|
| 3646 |
+
<path d="M180 235 L180 260 L350 260 L350 280" stroke="#C4B4A4" stroke-width="1.5" stroke-dasharray="4 4"/>
|
| 3647 |
+
<text x="265" y="272" fill="#A0AEC0" font-family="Inter" font-size="8" font-style="italic">without accumulation</text>
|
| 3648 |
+
|
| 3649 |
+
<!-- Muon (bottom, connected to CASPR) -->
|
| 3650 |
+
<rect x="445" y="180" width="150" height="55" rx="8" fill="#F0F4FF" stroke="#8B9DC3" stroke-width="2"/>
|
| 3651 |
+
<text x="520" y="203" text-anchor="middle" fill="#7B8DB3" font-family="Fraunces, Georgia" font-size="12" font-weight="500">Muon</text>
|
| 3652 |
+
<text x="520" y="221" text-anchor="middle" fill="#718096" font-family="Inter" font-size="9">Newton-Schulz orthog.</text>
|
| 3653 |
+
|
| 3654 |
+
<!-- Insight annotation -->
|
| 3655 |
+
<rect x="480" y="245" width="180" height="30" rx="6" fill="#FFF8DC" stroke="#D4A574" stroke-width="1" stroke-dasharray="3 3"/>
|
| 3656 |
+
<text x="570" y="265" text-anchor="middle" fill="#8B7355" font-family="Fraunces, Georgia" font-size="9" font-style="italic">"CASPR − accumulation = Muon"</text>
|
| 3657 |
+
</svg>
|
| 3658 |
+
</div>
|
| 3659 |
+
|
| 3660 |
+
<div class="impressionist-quote">
|
| 3661 |
+
<blockquote>
|
| 3662 |
+
"As the impressionists captured light through countless small brushstrokes, so too do these optimizers approximate the curvature of loss through elegant factorizations — each revealing truth through its own particular lens."
|
| 3663 |
+
</blockquote>
|
| 3664 |
+
<cite>— On the Art of Optimization</cite>
|
| 3665 |
+
</div>
|
| 3666 |
+
</div>
|
| 3667 |
+
</section>
|
| 3668 |
+
|
| 3669 |
<section class="focus" id="focus">
|
| 3670 |
<div class="focus-header reveal">
|
| 3671 |
<span class="section-label">Focus Areas</span>
|