diff --git a/files.css b/files.css
index 9ad714b..51eef77 100644
--- a/files.css
+++ b/files.css
@@ -1,240 +1,446 @@
-:root {
- --bg: #0b0b0b;
- --surface: #121212;
- --surface-2: #1a1a1a;
- --border: #2a2a2a;
- --border-strong: #3a3a3a;
+@import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500&display=swap');
- --text: #d0d0d0;
- --text-muted: #8a8a8a;
- --text-dim: #666;
- --text-invert: #111;
+:root {
+ --bg: #080808;
+ --surface: #0f0f0f;
+ --surface-2: #161616;
+ --surface-3: #1e1e1e;
+ --border: rgba(255,255,255,0.06);
+ --border-mid: rgba(255,255,255,0.09);
+ --border-hover: rgba(255,255,255,0.14);
- --accent: #ffffff;
+ --text: #d4d4d4;
+ --text-muted: #5a5a5a;
+ --text-dim: #333;
+ --text-invert: #080808;
- --radius-sm: 6px;
- --radius-md: 10px;
- --radius-lg: 16px;
+ --white: #ffffff;
+ --off-white: #e8e8e8;
- --transition: 0.2s ease;
+ --r: 8px;
+ --r-lg: 12px;
+ --r-xl: 16px;
+ --ease: 0.16s ease;
}
-*,
-*::before,
-*::after {
- box-sizing: border-box;
- margin: 0;
- padding: 0;
-}
+*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
+html { -webkit-font-smoothing: antialiased; }
body {
min-height: 100vh;
- background: radial-gradient(1200px 600px at top, #111 0%, var(--bg) 60%);
- font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
+ background: var(--bg);
+ font-family: 'Plus Jakarta Sans', system-ui, sans-serif;
color: var(--text);
line-height: 1.6;
display: flex;
- align-items: center;
justify-content: center;
- padding: 40px;
+ align-items: flex-start;
+ padding: 48px 20px 80px;
+ position: relative;
+}
+
+body::before {
+ content: '';
+ position: fixed;
+ top: -200px;
+ left: 50%;
+ transform: translateX(-50%);
+ width: 800px;
+ height: 500px;
+ background: radial-gradient(ellipse at center, rgba(255,255,255,0.025) 0%, transparent 65%);
+ pointer-events: none;
}
.container {
width: 100%;
- max-width: 620px;
- background: var(--surface);
- border: 1px solid var(--border-strong);
- border-radius: var(--radius-lg);
- padding: 28px;
- box-shadow: 0 20px 40px rgba(0, 0, 0, 0.4);
+ max-width: 680px;
+ animation: up 0.4s cubic-bezier(0.22,1,0.36,1) both;
+}
+
+@keyframes up {
+ from { opacity: 0; transform: translateY(14px); }
+ to { opacity: 1; transform: translateY(0); }
}
.header {
- margin-bottom: 22px;
- padding-bottom: 16px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 32px;
+ padding-bottom: 20px;
border-bottom: 1px solid var(--border);
+ gap: 12px;
+ flex-wrap: wrap;
+}
+
+.logo-row {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+}
+
+.logo-icon {
+ width: 26px;
+ height: 26px;
+ border-radius: 7px;
+ background: var(--white);
+ flex-shrink: 0;
}
.logo {
- font-size: 20px;
- font-weight: 600;
- color: var(--accent);
- margin-bottom: 12px;
- letter-spacing: -0.01em;
+ font-size: 16px;
+ font-weight: 700;
+ color: var(--white);
+ letter-spacing: -0.02em;
+}
+
+.logo-pill {
+ font-family: 'JetBrains Mono', monospace;
+ font-size: 9px;
+ font-weight: 500;
+ letter-spacing: 0.1em;
+ color: var(--text-muted);
+ background: var(--surface-2);
+ border: 1px solid var(--border-mid);
+ padding: 3px 7px;
+ border-radius: 4px;
+ text-transform: uppercase;
}
.nav {
display: flex;
- gap: 6px;
+ gap: 2px;
+ background: var(--surface-2);
+ border: 1px solid var(--border);
+ border-radius: var(--r);
+ padding: 3px;
}
.nav-btn {
appearance: none;
background: transparent;
- border: 1px solid transparent;
- padding: 6px 12px;
+ border: none;
+ padding: 6px 14px;
+ font-family: 'Plus Jakarta Sans', sans-serif;
font-size: 13px;
font-weight: 500;
color: var(--text-muted);
- border-radius: var(--radius-sm);
+ border-radius: 6px;
cursor: pointer;
- transition: background var(--transition), color var(--transition), border var(--transition);
+ transition: background var(--ease), color var(--ease);
+ white-space: nowrap;
}
-.nav-btn:hover {
- background: var(--surface-2);
- color: var(--accent);
-}
+.nav-btn:hover { color: var(--text); }
.nav-btn.active {
- background: var(--accent);
- color: var(--text-invert);
- border-color: var(--accent);
-}
-
-.section {
- display: none;
+ background: var(--surface-3);
+ color: var(--white);
}
+.section { display: none; }
.section.active {
display: block;
+ animation: sectionIn 0.2s ease both;
+}
+
+@keyframes sectionIn {
+ from { opacity: 0; transform: translateY(4px); }
+ to { opacity: 1; transform: translateY(0); }
}
-.section-header {
+.release-banner {
+ background: var(--surface);
+ border: 1px solid var(--border-mid);
+ border-radius: var(--r-xl);
+ padding: 28px 30px;
display: flex;
align-items: center;
- gap: 10px;
- margin-bottom: 14px;
+ justify-content: space-between;
+ gap: 20px;
+ margin-bottom: 10px;
+ flex-wrap: wrap;
+ position: relative;
+ overflow: hidden;
}
-.section-header h2 {
- font-size: 15px;
- font-weight: 600;
- color: var(--accent);
+.release-banner::after {
+ content: '';
+ position: absolute;
+ top: -1px; left: 0; right: 0;
+ height: 1px;
+ background: linear-gradient(90deg, transparent 10%, rgba(255,255,255,0.1) 50%, transparent 90%);
}
-.badge {
- font-size: 11px;
- font-weight: 500;
- padding: 3px 8px;
- background: var(--accent);
- color: var(--text-invert);
- border-radius: 999px;
+.release-eyebrow {
+ font-family: 'JetBrains Mono', monospace;
+ font-size: 10px;
+ letter-spacing: 0.1em;
+ text-transform: uppercase;
+ color: var(--text-muted);
+ margin-bottom: 8px;
+}
+
+.release-ver {
+ font-size: 38px;
+ font-weight: 800;
+ color: var(--white);
+ letter-spacing: -0.03em;
+ line-height: 1;
+ margin-bottom: 8px;
+}
+
+.release-date {
+ font-size: 12px;
+ color: var(--text-muted);
+ font-weight: 400;
+}
+
+.release-actions {
+ display: flex;
+ gap: 8px;
+ flex-shrink: 0;
+ align-items: center;
+}
+
+.two-col {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: 10px;
+ margin-bottom: 10px;
}
.card {
- background: var(--surface-2);
+ background: var(--surface);
border: 1px solid var(--border);
- border-radius: var(--radius-md);
- padding: 14px;
- margin-bottom: 10px;
+ border-radius: var(--r-lg);
+ padding: 20px 22px;
+ transition: border-color var(--ease);
}
-.card h3 {
- font-size: 14px;
+.card:hover { border-color: var(--border-mid); }
+
+.card--notes { margin-bottom: 0; }
+
+.card-title {
+ font-size: 12px;
font-weight: 600;
- color: var(--accent);
+ color: var(--white);
+ letter-spacing: 0.01em;
margin-bottom: 6px;
+ text-transform: uppercase;
+ font-family: 'JetBrains Mono', monospace;
+ font-size: 10px;
+ letter-spacing: 0.09em;
+ color: var(--text-muted);
}
-.card p {
+.card-desc {
font-size: 13px;
color: var(--text-muted);
- margin-bottom: 10px;
+ margin-bottom: 14px;
+ font-weight: 400;
+ line-height: 1.5;
}
-.card ul {
+.btn-group {
+ display: flex;
+ gap: 7px;
+ flex-wrap: wrap;
+}
+
+.notes {
list-style: none;
+ columns: 2;
+ column-gap: 0;
}
-.card li {
- padding: 6px 0;
+.notes li {
font-size: 13px;
color: var(--text);
+ padding: 8px 16px 8px 0;
border-bottom: 1px solid var(--border);
+ break-inside: avoid;
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ line-height: 1.4;
+ transition: color var(--ease);
}
-.card li:last-child {
- border-bottom: none;
-}
-
-.version-info {
- font-size: 12px;
- color: var(--text-dim);
-}
+.notes li:hover { color: var(--white); }
-.link-group {
- display: flex;
- gap: 8px;
- flex-wrap: wrap;
+.notes li::before {
+ content: '';
+ width: 3px;
+ height: 3px;
+ border-radius: 50%;
+ background: var(--text-muted);
+ flex-shrink: 0;
}
.btn {
display: inline-flex;
align-items: center;
- justify-content: center;
- padding: 8px 14px;
+ gap: 6px;
+ padding: 9px 18px;
+ font-family: 'Plus Jakarta Sans', sans-serif;
font-size: 13px;
- font-weight: 500;
+ font-weight: 600;
text-decoration: none;
- border-radius: var(--radius-sm);
- transition: background var(--transition), color var(--transition), border var(--transition);
+ border-radius: var(--r);
+ border: 1px solid transparent;
+ white-space: nowrap;
+ cursor: pointer;
+ transition: background var(--ease), border-color var(--ease), color var(--ease), box-shadow var(--ease), transform 0.12s ease;
}
+.btn:active { transform: scale(0.97); }
+
.btn-primary {
- background: var(--accent);
+ background: var(--white);
color: var(--text-invert);
+ border-color: var(--white);
}
.btn-primary:hover {
- background: #e5e5e5;
+ background: var(--off-white);
+ box-shadow: 0 0 28px rgba(255,255,255,0.1);
}
-.btn-secondary {
+.btn-ghost {
+ background: transparent;
+ color: var(--text);
+ border-color: var(--border-mid);
+}
+
+.btn-ghost:hover {
+ background: var(--surface-2);
+ border-color: var(--border-hover);
+}
+
+.btn-sm {
+ padding: 7px 14px;
+ font-size: 12.5px;
background: var(--surface-2);
color: var(--text);
- border: 1px solid var(--border);
+ border-color: var(--border);
+ border-radius: var(--r);
}
-.btn-secondary:hover {
- background: #222;
+.btn-sm:hover {
+ background: var(--surface-3);
+ border-color: var(--border-mid);
+ transform: translateY(-1px);
+}
+
+.btn-sm--accent {
+ background: var(--white);
+ color: var(--text-invert);
+ border-color: var(--white);
+}
+
+.btn-sm--accent:hover {
+ background: var(--off-white);
+ box-shadow: 0 0 20px rgba(255,255,255,0.08);
+}
+
+.section-heading {
+ font-size: 11px;
+ font-family: 'JetBrains Mono', monospace;
+ letter-spacing: 0.1em;
+ text-transform: uppercase;
+ color: var(--text-muted);
+ margin-bottom: 14px;
}
.archive-list {
- display: flex;
- flex-direction: column;
- gap: 8px;
+ background: var(--surface);
+ border: 1px solid var(--border);
+ border-radius: var(--r-lg);
+ overflow: hidden;
}
-.archive-item {
+.archive-row {
display: flex;
- justify-content: space-between;
align-items: center;
- padding: 10px 12px;
- background: var(--surface-2);
- border: 1px solid var(--border);
- border-radius: var(--radius-sm);
+ padding: 14px 20px;
+ border-bottom: 1px solid var(--border);
text-decoration: none;
- color: var(--text);
- transition: background var(--transition), border var(--transition), transform var(--transition);
+ transition: background var(--ease);
+ gap: 12px;
}
-.archive-item:hover {
- background: #232323;
- border-color: var(--border-strong);
- transform: translateY(-1px);
-}
+.archive-row:last-child { border-bottom: none; }
+
+.archive-row:hover { background: var(--surface-2); }
-.archive-item .version {
+.archive-row:hover .aa { opacity: 1; color: var(--white); }
+
+.av {
+ font-family: 'JetBrains Mono', monospace;
font-size: 13px;
font-weight: 500;
- color: var(--accent);
+ color: var(--white);
+ flex: 1;
}
-.archive-item .type {
+.at {
+ font-family: 'JetBrains Mono', monospace;
font-size: 11px;
color: var(--text-muted);
- background: #2a2a2a;
- padding: 2px 6px;
- border-radius: 999px;
+ background: var(--surface-2);
+ border: 1px solid var(--border);
+ padding: 2px 8px;
+ border-radius: 4px;
+ letter-spacing: 0.06em;
+}
+
+.aa {
+ font-size: 14px;
+ color: var(--text-dim);
+ opacity: 0.4;
+ transition: color var(--ease), opacity var(--ease);
+ margin-left: 4px;
+}
+
+.support-list {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+}
+
+.support-card {
+ background: var(--surface);
+ border: 1px solid var(--border);
+ border-radius: var(--r-lg);
+ padding: 20px 22px;
+ transition: border-color var(--ease);
+}
+
+.support-card:hover { border-color: var(--border-mid); }
+
+.support-card-title {
+ font-size: 14px;
+ font-weight: 700;
+ color: var(--white);
+ margin-bottom: 6px;
+ letter-spacing: -0.01em;
+}
+
+.support-card p {
+ font-size: 13px;
+ color: var(--text-muted);
+ margin-bottom: 14px;
+ line-height: 1.55;
+ font-weight: 400;
+}
+
+@media (max-width: 520px) {
+ body { padding: 24px 16px 60px; }
+ .two-col { grid-template-columns: 1fr; }
+ .notes { columns: 1; }
+ .header { flex-direction: column; align-items: flex-start; }
+ .release-banner { flex-direction: column; align-items: flex-start; }
+ .release-ver { font-size: 28px; }
}
diff --git a/index.html b/index.html
index cdeb154..dce12a0 100644
--- a/index.html
+++ b/index.html
@@ -1,17 +1,25 @@
-
TuffClient
-
-
+
+
+
+
+
-
+
+
-
-
-
-
-
Download Offline
-
-
WASM Offline
-
JS Offline
+
+
+
Current release
+
1.1UT13
+
February 9, 2026
+
+
-
-
Quick Links
-
-
Download TuffX+ Plugin 1.0.0
-
GitHub Releases
+
+
+
Download Offline
+
Save a local copy to play without internet.
+
+
+
+
Quick Links
+
Server-side plugin and source releases.
+
-
-
Release Notes
-
Version 1.1UT13 — Feb 9, 2026
-
+
+
Release Notes
+
- Full trident support with riptide
- Redid Y0
- Viablocks WALIA support
- - Huge optimizations
- - Scrollable Zoom
+ - Huge optimisations
+ - Scrollable zoom
- Fixed trims
- Viasounds
- Server-side Viaentities
@@ -72,108 +86,75 @@ Release Notes
-
-
-
-
+
Archived Builds
+
-
-
-
-
Having Issues?
-
If you're experiencing errors, try clearing your browser cookies first.
-
Clear Cookies Guide
-
-
-
-
Report Bugs
-
Found a bug? Let us know on Discord.
-
Join Discord
-
-
-
-
Self-Hosting
-
Want to host your own instance?
-
View on GitHub
+
Support
+
+
+
+
Errors or broken behaviour? Clearing your browser cookies usually fixes it.
+
Clear Cookies Guide
+
+
+
+
Found something broken? Let us know on Discord.
+
Join Discord
+
+
+
-
diff --git a/js/eags-servers.js b/js/eags-servers.js
index 37870d1..c230484 100644
--- a/js/eags-servers.js
+++ b/js/eags-servers.js
@@ -1,22 +1,28 @@
(function () {
var servers = [
+ { addr: "wss://play.aethermc.cc", name: "§c§lAetherMC" },
+ { addr: "wss://eag.aethermc.cc", name: "§c§lAetherMC" },
{ addr: "wss://tuffest.org", name: "§c§ltuffnet" },
{ addr: "wss://tuff.ws", name: "§c§ltuffnet" }
];
- var real = Object.defineProperty;
- Object.defineProperty = function (obj, prop, desc) {
- if (obj === window && prop === "eaglercraftXOpts") {
- var get = desc.get, set = desc.set;
- if (get && set) {
- desc.set = function (v) {
- set.call(this, v);
- var opts = get.call(this);
- if (opts) opts.servers = servers;
- };
+ var internalValue;
+
+ Object.defineProperty(window, "eaglercraftXOpts", {
+ configurable: true,
+ enumerable: true,
+ get: function () {
+ return internalValue;
+ },
+ set: function (v) {
+ if (v && typeof v === "object") {
+ v.servers = servers;
}
- Object.defineProperty = real;
+ internalValue = v;
}
- return real.call(this, obj, prop, desc);
- };
+ });
+
+ if (window.eaglercraftXOpts) {
+ window.eaglercraftXOpts.servers = servers;
+ }
})();