Changelog

Every update to the website and the server mod, newest first

This is the full history of the CloudRidge website and the server mod, newest first, so you can look back and see when a feature arrived or when a bug was fixed.

By version Clear

Filtered: showing 65 of 127

v1.9.86 Website 2026-10-31

换页不再白屏一下、注册页的「手机号注册」能点了

  • 点站内链接时,旧页面不再先淡成一片白底 —— 之前新页面要等网络往返才到,中间那一下就是白屏。现在旧页面保持原样,换页后新页面照旧淡入、内容依次上滑。
  • 注册页的「手机号注册」原来点了像是没反应:它只是把单选按钮选中,页面上的提示文案与「发验证码」的去向都没变。现在切一下就整页重渲染,提示、去向、表单都跟着变。
  • 如果站点没有配置短信服务,注册页不会再把你留在「手机号注册」这个空壳上,而是自动退回邮箱注册。
v1.9.85 Website 2026-10-31

One sign-in button in the header, and a 3D hero sized right

  • The QQ entry is gone from the header — signed-out visitors used to see two buttons side by side, now only “Sign in”. QQ shows up on the sign-in and sign-up pages only.
  • The 3D camera now frames by the model height instead of a fixed distance, so the scene no longer swamps a taller window or shrinks to a lump in a shorter one.
  • Block colours are pulled into the cherry palette: crimson planks, nether wart and coral now map onto cherry wood, petals and leaves, so it stops looking like coloured noise. Not a single block moved.
v1.9.84 Website 2026-10-31

The hero is now a 3D scene you can drag around

  • The whole hero is now a 3D garden scene: drag to rotate, scroll to zoom, click a block to break it — it grows back after ten seconds.
  • Phones and browsers without WebGL2 never force-load the 3D: they get a static poster shot from the same angle, with an Enter 3D button in the corner.
  • Page changes flow too: the current page fades out, the next one fades in with its sections sliding up one after another. With reduced motion on, links behave exactly as before.
  • The loud blue QQ tile is gone — it now uses Tencent official smallest 16×16 icon, sitting at the same weight as every other icon.
v1.9.83 Website 2026-10-31

One QQ button, everywhere

  • The login page, the register page, the header and the account page now share a single QQ button: the official Tencent icon inside our own outlined pill. Tencent allows the “small icon + text” form, and the icon itself is still the official one.
  • Account and security now has a QQ binding row: bind, rebind or unbind. Accounts without a login password cannot unbind — a QQ-only account has no password, so unbinding would lock it out for good.
  • Typography and texture: tighter, heavier headings, roomier sections, and a soft glow that follows the pointer across cards.
  • Motion: the hero rises line by line, counters roll, a reading progress bar sits at the top, and home cards drift slightly. Turn on “reduce motion” in your system and all of it switches off; devices without hover never get the glow.
v1.9.82 Website 2026-10-31

QQ sign-in now uses Tencent’s official button — on the login page, the register page and the top nav

  • The login and register pages used to show a hand-drawn penguin icon with the wording “QQ one-click sign-in”. Tencent’s front-end page spec requires the official “QQ登录” mark and forbids modifying it, so both places now use Tencent’s original 230×48 long-icon image at its native size — no stretching, no scaling.
  • The top navigation gets one too: the official 76×24 “QQ登录” button on wide screens, switching to the official 24×24 icon below 375px so the header never needs a horizontal scrollbar.
  • Two details fixed while we were here. The official button never greys out: if the Terms box is unchecked, clicking it scrolls to the checkbox and highlights it in red instead of disabling the button (a greyed-out button looks exactly like a misplaced one). And the login page’s line “this site signs in with email + password” had gone stale — all ten languages now say only the half about registering.
v1.9.81 Website 2026-10-18

On a phone the Server Guide text was hidden under its own contents list — fixed

  • On a desktop the guide sidebar is a narrow column pinned to the top-left. Once the layout collapses to a single column it becomes full-width and more than a screen tall, yet it stayed pinned to the top of the viewport — the article scrolled underneath it, so text looked overlapped, white boxes floated over the words, and the content seemed to be missing. On narrow screens (900px and below) it now scrolls with the page; desktop still pins it. The bug predates this round; it simply had not been noticed on a phone before.
v1.9.80 Website 2026-10-18

Tools fixed up: the tab strip actually works, gradients are freer, and the calculator hands you a checklist you can fill in and start from

  • All ten tools used to sit on one page, and tapping a capsule at the top only jumped to an anchor, so it looked like nothing happened. It is a real tab strip now and only one tool shows at a time; a #t-xxx address still opens that tool directly, and on a phone the strip scrolls sideways. Gradient text went from two hard-coded colors to 2~6 stops: click the bar to add one, drag to move it, select a stop and hit “Remove this color”, and colors interpolate character by character down the string, so § codes / MiniMessage / tellraw / MOTD all change together, and an overlong MOTD gets a warning
  • The server config calculator grew from three budget tiers to nine inputs. Mod count, view distance, simulation distance, whether you run redstone, target TPS and version are all fillable. The output is no longer a few numbers: memory tells you why it grows, and you also get a copy-ready start command with Aikar’s flags, line-by-line advice for server.properties and spigot.yml, and a mod and plugin list split by play style. The three values that change most often — memory per player, the mod factor and the redstone factor — moved into the Tools section of the admin, and a refresh applies them
  • The lag check-up now attributes cost item by item, and compares against this site live data. You now enter four more things: persisting entities, chunk loaders, redstone wire and automatic farms. The output splits MSPT into seven items with each one share and milliseconds, and it only names the culprit — this is what drags — when it really takes the biggest share (over 45%); otherwise it says plainly that the largest item is still modest overall. Every item comes with a fix you can act on, and it also pulls this site live data to tell you how much your scale should cost in theory and how much headroom the site has right now; when the data is unreachable it stays a local estimate and shows no error
v1.9.79 Website 2026-10-18

Liquid glass rebuilt the Apple way: it refracts, it has highlights, and it holds up on white

  • ① Last round the glass was basically a flat wash of white, so it vanished the moment it sat on a white card. This time the material is rebuilt along the iOS 26 lines: a bright line along the top, a dark one along the bottom, a 1px hairline ring outside, a soft glow inside, plus a very light drop shadow; on desktop it still refracts for real (the backdrop is bent slightly, the whole plate lifts 1px on hover and settles back on press). The primary and danger buttons used to be excluded from the glass entirely, and they are in now: the brand gradient stays on the button itself, white text keeps its contrast, and the glass layer only contributes highlight and stroke, no refraction on top. The same material is laid onto inputs, selects, tags, the game, tool and player badges, and the top navigation.
  • ② Phones no longer run refraction (it is the most expensive step) and degrade to blur plus a highlight stroke on their own: it still reads as glass, but costs almost no GPU. Along the way one real bug is fixed: the mobile branch used to return early and never reached the degraded path, which meant there was no glass on phones at all. Desktop got two things as well: plates of the same size share a single displacement map (the 7 plates on the home page use only 4), and ones scrolled off screen are no longer computed; on top of that, a plate over 300,000 pixels or a page with more than 80 of them stops generating new ones — dropping one plate beats a stuttering scroll.
  • ③ The same switch is still under Appearance in the admin, now on by default; browsers without backdrop-filter (Safari, Firefox) fall back to a frosted fill rather than looking broken. No palette and no layout was touched this round, the theme is still Cloudridge Blue; last round’s Apple white background has been rolled back site-wide (admin, forum, gallery and map all returned to their old look), leaving only two genuine bug fixes: the confirmation dialog for dangerous admin actions had no styling at all (all 43 confirm-delete prompts opened as a bare box with no overlay), and gallery titles on narrow screens only appeared on mouse hover.
v1.9.78 Website 2026-10-17

The whole site goes Apple style: white background, hairline rules, pill buttons, plus a batch of wrong numbers fixed

  • The whole site look was rebuilt the Apple way: white background, near-black text, a single 1px hairline instead of shadows, buttons and filter chips unified into 44-high pills, and the top bar turning from translucent to solid once you scroll past it. The frosted glass is gone entirely — the blur layers on data cards, the timeline and status cards are all removed, leaving only one very faint translucent layer on the top bar. Chinese headings no longer get negative letter-spacing: Chinese glyphs already fill their em box, so tightening them squeezes the text into a clump that looks like bold; only digits actually need tightening. The admin area was re-laid-out along the way, and one real bug is fixed: confirmation dialogs for dangerous operations had no styling at all in the admin, popping up as a bare box with no overlay and no positioning, affecting all 51 confirm-delete spots across the site; it is now a centred card with a proper overlay and a red title. The whole set hangs off the Apple colour scheme (picked under Admin → Appearance), and switching back to Cloudridge Blue rolls everything back without touching code.
  • The mobile pass this time was aimed squarely at the things that did not feel good to use: the four big numbers on the data page each took a full row, now they fit 2×2 on one screen; the player search box and the Search button used to be stacked (the button covered nearly 70 pixels of the placeholder text), now they sit side by side on one row; on the leaderboard each row had its top and bottom grey lines stacking into one thick bar, now it is a single 1px hairline; the double border of card-inside-a-card on the timeline, the various dashed boxes, and the thick dark grey scrollbar on Windows are all cleaned up together; in the server status sidebar on the guide page the label and the value used to be glued together (showing as Version1.21.1), now they are left-right aligned with a divider between.
  • Ten data problems from the audit are fixed. The two that matter most: the homepage cumulative online time displayed seconds as hours (it said 35.7M h, the real value is 9907 hours, off by 3600 times); and four people on the ban list showed as lifted while actually still in force — when the heartbeat reported already-exists, only the status was quietly flipped back to active, with no history written and no player ban flag restored. The rest: the installed-mods figure on the status page showed 0 / 12 / 160 in three different places (the real value is 160), and the operating system showed a dash, both for the same reason — the underlying query returns a whitelist that does not include those two fields; a string of UUIDs was dominating the leaderboard as names, and now shows as Unknown player · 87274f; the ceiling on availability was hard-coded at 99.2 percent (computed from a fixed 30-second interval, while heartbeats actually arrive every 31 seconds); and K/D produced astronomical numbers when there were no deaths, and now shows a dash. Two more are leaderboard policy (two merging conventions, one by role and one by account, and a shadow account that only has kills) and were not forced — the differences and their cost are written in the code comments for the site owner to decide.
v1.9.77 Website 2026-10-11

Forging your real IP is now closed off from nginx all the way up to the application layer

  • ① Measure before changing: a live probe produced two facts — BT Panel’s nginx uses the PROXY protocol, so the real client address is already there in REMOTE_ADDR (measured as 222.212.76.94, not 127.0.0.1); and client-supplied X-Real-IP / X-Forwarded-For / CF-Connecting-IP are passed through to PHP verbatim, all three forged headers arriving untouched, with nginx overwriting none of them. ② Harden both ends: nginx injects a secret only its own proxy knows (even a client that forges that header gets it overwritten by nginx), and the application adds a second guard — if REMOTE_ADDR is a public address, use it directly and stop looking at proxy headers at all — so even if trust_proxy is ever switched on by mistake, the IP in rate limiting, lockouts and audit logs never becomes a value the visitor chose.
  • Three things done along the way: the misleading comment in site/config/config.php (“set to true when behind a CDN / reverse proxy”) is replaced with the measured conclusion and a warning — following it on this site would only promote a forgeable header to an authoritative value; this change got automated tests (trust_proxy on + public REMOTE_ADDR + forged headers ⇒ the real address is still returned), and the suite went from 81 to 83 checks, all green; the temporary live-troubleshooting probe was removed as agreed, and requesting it now returns 404.
v1.9.76 Website 2026-10-11

Smoother scrolling on phones, a few security holes closed, and chat no longer losing the middle stretch

  • Four mobile-smoothness items: the frosted glass on the header while scrolling, the frosted glass on every card at narrow widths, the compositing layer the entrance animation kept alive for every element, and the reading-progress bar that forced a reflow on every pixel scrolled — all replaced with equivalent but cheaper approaches (the scrolled header is opaque anyway, so that blur was pure waste; and when an animation really starts, the browser promotes the layer itself). Measured on a 390-wide phone viewport with 20× CPU throttling: worst frame went from 364 ms to 57 ms. The difference in overall frame counts sits inside this machine’s noise, so no stable conclusion can be drawn there — which is why each item above was only touched when it made sense mechanically.
  • Three security items (high/medium severity, fixed straight away): ① the local-debug _admlogin.php must now 404 on the live site (it could turn a visitor straight into an administrator), and ?to= can no longer point off-site; ② the speed-test page’s ping / dns sent a hostname to probe a port, which a DNS rebinding attack could steer into the internal network — it now connects only to the already-validated IP; ③ forged X-Real-IP / CF-Connecting-IP headers used to get around per-IP rate limiting, and such headers are now trusted only when the request truly comes from loopback. Closing ③ completely needs X-CDR-Proxy-Secret injected in nginx plus security.proxy_secret set in site/config/config.php — that one touches the server configuration, so it waits for your go-ahead.
  • Three real bugs in the chat log: ① once a day passed 200 messages, that whole middle stretch was permanently invisible on the page (the busiest day has 2796 messages, and the old path could only page back to 500, leaving 2296 of them unreachable); ② messages were ordered by primary key id alone, so on days that straddle a boundary the after-midnight messages got pushed out of the window (measured: 53 newer messages permanently skipped); ③ when sending failed, the interface pretended the message had gone out. It now fetches by time, adds a “load earlier” button to page backwards, and a failed send says so plainly and lets you retry.
  • While at it: pages for visitors are no longer blanket no-cache (back and forward feel a little quicker), while the logged-in state is still never cached at all. All 218 PHP files on the site lint clean, and all 59 self-test scripts were run — the 15 suites related to this change came out exactly the same as before (not one extra locally-failing item).
v1.9.75 Website 2026-10-10

Server-side mod slimmed down: the costs that scale with player count moved off the main thread

  • The biggest block in the mod report is the map: three maps of 256×256 each, roughly 197,000 points. Those points used to be assembled into JSON right inside the server tick, and the server only carried on once the assembly was done — one round every half hour, which lines up exactly with those occasional “it froze for a moment” spikes. Now that tick only hands the data over and the assembly happens on a background thread: the data was already there, and building JSON never needed to hold the main thread.
  • While at it, several other costs that scale with the number of players online were reined in: the numbers in the TAB list (playtime, player count and so on) used to be recomputed for every row of every player, even though they only change once every 30 seconds; looking a player up by name fell back to scanning the whole table row by row (10 players meant 100 lookups); the advancement list walked through a thousand-plus recipe entries every 10 minutes; and once every 30 seconds, just to count entities, every world was traversed in full while the config files and the ban list were read on the main thread. These are now cached, indexed, computed once and read in the background respectively — not a single byte of what gets reported to the site has changed, and the pages look exactly as before.
v1.9.74 Website 2026-10-05

Admin and profile privacy improved

  • The sidebar pending-review badge only counted the forum and gallery queues while the admin panel counted five; everything now comes from one function and each menu item carries its own count. Destructive actions (delete a user group, delete a nav entry, prune the chat log, clear the cache) ran without asking; they now ask first. The skin, avatar-background and chat-log lists were capped at 200 and 60 rows and can now be paged through.
  • The allow-others-to-view-my-profile switch only affected the team page before — your profile stayed visible to everyone. It now really applies, except to yourself. Changing your password and signing out other devices are also written to the audit log now.
v1.9.73 Website 2026-10-05

Red confirm and delete buttons are visible again

  • The confirm button in the retract-message dialog came up blank: with liquid glass on, the glass rule clears a button background but keeps its white text, so a red button turned into white on white. Solid red buttons now stay out of the glass, exactly like the blue primary button.
  • The same problem hit every red button on the site (retract, delete, unbind and more), so all of them are fixed together.
v1.9.72 Website 2026-10-05

Paging no longer jumps back to the top

  • Clicking next page from further down used to fling you back to the very top. The pager now lines up the list above it instead, and does nothing at all when that list is already in view. Back and forward return to the previous scroll position.
  • A few small things along the way: the seed map is now in the Servers menu, in-page anchors are no longer hidden under the sticky header, gallery cards show their author, and the online players on the home page link to their profiles.
v1.9.71 Website 2026-10-05

Tighter backend permissions, smaller fixes

  • Settings, key rotation, backups and system tools are now owner-only — server managers keep content, reports and the whitelist.
  • Several small issues with paging without a reload were fixed: dark mode stays on, forms are no longer submitted twice, the countdown runs at normal speed and the sort dropdown no longer reloads the page.
v1.9.70 Website 2026-10-05

Paging without a full reload

  • Paging, filtering, search and sorting now swap only the content — the address bar still updates and the back button still works.
  • Saving, reviewing and deleting still navigate to a new page as before.
v1.9.69 Website 2026-10-05

Fixed the player-list search box being covered by the cards

  • Elements with reveal animation carry will-change, and will-change creates a stacking context, so the dropdown z-index only counted inside its own card and lost to the stat cards that come later in the DOM
  • The whole search card is now lifted, so the dropdown floats fully on top
v1.9.68 Website 2026-10-04

Fixed the mobile profile page refusing to scroll

  • The 3D skin viewer hard-coded touch-action:none and called preventDefault unconditionally on touchstart/touchmove, so a finger resting on it froze the whole page — vertical swipes now go to the browser and only horizontal ones rotate the model
  • The drag-the-background gesture on the header is now mouse-only as well
v1.9.67 Website 2026-10-04

Server guide rewritten: twice the content, and commands now say which ones are for players

  • All four pages — getting started, rules, FAQ and about — have been rewritten, each explaining why a step matters and what to do when it fails
  • The commands page now opens with a hand-written Player commands section grouped into first steps, travel, chat and status; the full 435-row table is still there below
v1.9.66 Website 2026-10-04

The mobile scroll hint no longer sticks to the table

  • The hint above the table used to sit right on its top border and read as if the two were stacked; it now has proper spacing
  • The header is fully opaque once you scroll: it used to be translucent, letting large page text show through
v1.9.65 Website 2026-10-04

Closed a security hole in uploaded SVG files

  • Previously, a specially crafted SVG avatar or banner could reveal the IP address and browser details of everyone who viewed it. Such external references are now stripped out, without changing how the artwork looks.
  • Also added HSTS and a few conservative content security policies.
v1.9.64 Website 2026-10-04

The review badge no longer stays lit + the status page hides internal IPs

  • The admin “review” badge counted five queues, but the “server management” drawer can only handle two of them — so the badge stayed lit with nothing to review. Both now use the same measure, and the drawer gained a “more pending” row: gallery / skins / forum, each linking straight to its existing admin page.
  • The “web map” row on the status page used to read 127.0.0.1:8100 (an internal address, only used for probing). It now shows the public web map address.
v1.9.63 Website 2026-10-04

Review videos right in the admin card

  • Backgrounds with a dynamic background video now show that video directly on the review card — press play to watch it, loading only the head by default (no wasted bandwidth), with an “has video” tag.
  • Previously the card only showed the separate cover image the player picked, which may have nothing to do with the video. No more approving blind.
  • Also fixed “upload time showing 1970-01-01”: my asset-upload helper wrote the wrong time format. Both the data and the helper are corrected.
v1.9.62 Website 2026-10-04

Sign-in 500 fixed + two visual tweaks

  • Fixed a 500: in the previous release I put the arguments of the post-sign-in audit log in the wrong positions, so every successful sign-in threw an internal error. Signing in now redirects normally.
  • The "I have read and agree to the Terms of Service and Privacy Policy" line has moved to the bottom of the form (after the Sign in button), matching common login pages. You still cannot sign in without ticking it.
  • The player page header scrim is now a smooth gradient — the obvious horizontal line is gone, so it fades out naturally instead of looking like a strip of tape across the header.
v1.9.61 Website 2026-10-04

You must accept the terms to sign in

  • The login page now has a checkbox: "I have read and agree to the Terms of Service and Privacy Policy" — you cannot sign in without ticking it. Both entry points are gated (QQ one-click and email + password), and the server checks it too, since disabling a button alone stops nobody.
  • We wrote two real pages, Terms of Service and Privacy Policy, listing item by item what this site stores about you: the nickname and openid QQ gives us, your email and password hash, linked characters, gameplay stats, images you upload, and the IP and time of each sign-in.
  • They also state exactly who we share with — only three parties: QQ Connect (sign-in), mc-heads.net (skin avatar when you have not uploaded one), and 126 Mail (verification codes). No ad networks, and we do not sell data.
  • Retention, how to request deletion or export, and how we treat minors are covered too. Both pages are also linked in the footer under Quick links.
v1.9.60 Website 2026-10-04

Header text is readable on the bright frames now

  • After the video replaced the photo, the white header text sat on bright sky and clouds at a worst case of 1.16:1 — practically invisible. The cause was paint order: the video is a real child element while the darkening gradient lived on body.cdr-body::before (generated content), and generated content always paints before real children, so the video covered the gradient entirely and it did nothing at all
  • The fix turns the darkening into the own background of the header: a single top-to-bottom gradient (62 percent at the top, gone by 350px) that covers only the header strip and leaves the subject, the ground and the water untouched pixel for pixel; no new fixed layer was added, so the page height stays at 6816px
  • On the brightest frame the header contrast rose from 1.16-2.63:1 to 4.85-6.91:1 (the white-text standard is 4.5:1). A live-only regression was fixed along the way: under liquid glass the Back button has a translucent surface, so the scrim darkened it too (5.19:1 fell to 2.14:1); its label now turns white as well, worst case 6.04:1
  • Only pages that have a banner are affected; pages without one are byte for byte unchanged. Wheel scrolling, buttons and video playback were all re-tested
v1.9.59 Website 2026-10-04

Animated backgrounds: the real cause of the dead scroll wheel and click is found

  • The cause was a class-name collision: .pub-bg-video was both the video element class and the toggle class put on <html>. So the whole full-screen fixed video layer rule landed on the root element — the root became position: fixed, the page height collapsed to one screen, and the wheel had nothing to scroll
  • Sneakier still, pointer-events: none is inherited: the entire document tree stopped receiving the mouse, only <html> caught it, and the Back button became unreachable
  • The fix: rename the state class to pub-bg-on and narrow the element rule to video.pub-bg-video, so the two can never collide again
  • The background material is back to the first version (4.50 MB to 4.41 MB) with no darkening baked into the frames, so the colours are normal again; three local inspection harnesses were also corrected — they were measuring <html> while believing they measured the video layer
v1.9.58 Website 2026-10-04

Animated backgrounds: removed a free screen of height, drag is easier to find

  • New video (15.98 MB to 4.50 MB) with the darkening baked straight into the frames; the still on mobile is the very same image
  • Dropped a redundant overlay layer that was invisible yet silently added over a screen of height to every page
  • The cursor now turns into a grab hand over the page header, so you can tell where to drag; the gate is relaxed so touchscreen laptops work too
  • The scroll-wheel issue is still being chased; this release fixes the three above
v1.9.57 Website 2026-10-04

Your profile can have an animated background now

  • Upload a silent clip of 5 seconds to 1 minute; it loops on desktop, while phones keep the still image and download nothing extra
  • Only the banner slot takes a video, and it goes through the same review as images; the limit is 6 MB — over that you get a clear error, never a silent failure
  • The still image phones see is your banner, so pick one that matches the clip
  • This is off by default — turn it on in the admin switches and the upload box appears
v1.9.56 Website 2026-10-03

Fixed: "I picked an image, hit save, and nothing happened"

  • A player uploaded an avatar and a banner — even sent a video — yet nothing showed up for review. The image never reached the server; $_FILES was empty from start to finish
  • The cause was iPhone HEIC: the browser can't decode it, the crop dialog treated that as "cancel", and cancel wipes the file out of the form. With no file in the form, the server could only assume "not changing the image" and replied with a green success message
  • Images the browser can't decode are no longer discarded — the original is uploaded as-is (just uncropped), and you're told why
  • There's also a server-side safety net now: if the browser says an image was picked but no file arrives, it reports an error instead of pretending to succeed. Actually cancelling says so plainly too
v1.9.55 Website 2026-10-03

Fixing "Unknown player" names moved into the admin panel

  • The CLI script .tools/_backfill-names.php is now a button under Admin -> System tools, no command line needed
  • It reads usercache.json from the historical backups, restores real names for rows still named after a UUID, and carries the session log / achievements / skins along
  • The page first shows exactly which rows change and to what; a database snapshot is taken before anything is written
  • Only rows whose whole name is a UUID are touched; if the real name is taken the two rows are merged, and normal players are never renamed
v1.9.54 Website 2026-10-03

Leaderboards: the top ten in nine categories, on one screen

  • This is the "breakdown leaderboards" you asked for. The sort dropdown on the player list shows one dimension at a time, so comparing "who mined the most" against "who died the most" meant switching back and forth. /ranking puts the top ten of nine categories on a single screen
  • One card per category, each listing rank, avatar, name and that category's value —
  • the numbers are identical, character for character, to the player list, because both read the same formatting code. Click a name to open that player's page
  • The "View all" link in each card header opens the full list already sorted by that column (?sort=). The entry point is the "Leaderboards" button under the player-list title. Categories with no data produce no empty card, and bots stay excluded as before
v1.9.53 Website 2026-10-03

The profile background is now draggable

  • On profiles with a banner you can hold the mouse down and drag the background photo — like pushing a landscape print around, with the header, avatar and name sitting firmly on top
  • Only the top area (the page header) responds. Cards, tables and buttons below work as usual and text selection is untouched; pressing a button never starts a drag
  • Let go and it springs back into place; drag to the edge and it stops (a small margin is kept all round), so the photo never leaves the screen and exposes the background colour
  • Mouse and trackpad only. Touch screens and anyone with “reduce motion” turned on are excluded and behave exactly as before
v1.9.52 Website 2026-10-03

“Unknown player” rows will now fix themselves

  • A few rows in the list read “Unknown player · 87274f” — that string is actually the player’s UUID. The server’s name cache only keeps about a month, so once a long-time member stops playing for a while the mod can no longer resolve a name and reports the UUID instead
  • The problem was that such a row could never heal: when the player came back and the server learned their name again, the rename collided with the unique-name constraint (a row for the real name usually already existed), the error was swallowed, and the row kept its UUID
  • Both paths now work: if the real name is free we rename the row and carry its session history, achievements and skin across; if the name is taken we merge into it — playtime added, progress unioned, first/last seen widened
  • Nothing for you to do — it repairs itself the next time they log in. The sync log records “adopted=N”, visible under System tools in the admin panel
v1.9.51 Website 2026-10-03

Your avatar now shows everywhere; login history is paged; soft buttons are no longer washed out

  • The avatar you uploaded used to appear only on your own profile — every other avatar on the site went through a different path that had no idea you had uploaded one. Player lists, comments and the navigation now use it too; players who never uploaded anything look exactly as before
  • The recent login history showed 30 rows at once. It is now 10 per page, with the same pager the rest of the site uses (hidden when there is only one page)
  • The "expand all badges" button looked grey and disabled — a specificity problem: the soft button's blue tint lost to the base white layer, and its own background was wiped as well. Fixed
  • The empty space under the left column of a profile: the left column now stretches to match the right one, with the rank card filling the rest, so there is no gap whether badges are folded or expanded. The radar notes are now collapsed by default too
v1.9.50 Website 2026-10-03

Liquid glass rewritten from the reference: this time it is actual glass

  • The previous version was just "one gradient map + a displacement", and no amount of tuning made it look right. Comparing line by line with the reference showed three missing pieces; all three are here now
  • Refraction is now real optics: glass thickness, bezel width, index of refraction (1.0-3.0) and the rounded surface all feed the calculation, which is what gives the edge that "thick glass" magnification
  • A specular layer was added - a rim reflection along the edge facing one direction. It is the single most recognisable feature of liquid glass and the previous version had none
  • Saturation is restored after the displacement (refraction greys colours out) plus a touch of antialiasing. Blur stays at 0.3px: any more and neighbouring pixels stop differing, which erases the refraction entirely
v1.9.49 Website 2026-10-03

You can crop your avatar now — drag it, and what is in the frame is what you get

  • Previously you uploaded the whole image and the site scaled it down from the centre — if your face sat off to one side, that was just how it looked. Now picking an image opens a crop frame: drag to reposition, scroll or use the slider to zoom, and what is inside the frame is your final avatar
  • The export is 512×512 (the same cap the server uses) in WebP. Small images are never upscaled — that only makes them blurrier, so they are cropped at their own size. The frame narrows automatically on small screens, so it works on a phone too
  • Two kinds of image are deliberately left alone: animated GIFs (cropping would keep a single frame and kill the motion) and SVG — both go through the old path unchanged. If anything fails mid-crop (unsupported browser, out of memory) the original file is sent instead, so you can never get stuck on "I picked a file and nothing happened"
  • Banners are not cropped — they are wide by nature and squaring them makes no sense. The frame only appears when you upload an avatar under Me → My profile.
v1.9.48 Website 2026-10-03

Frosted glass drops a notch on narrow screens, so mobile stutter should ease

  • The jank on the mobile profile page was not a badly written animation — the blur itself was too expensive: every card carried blur(32px) saturate(180%), and seven or eight glass surfaces are visible at once on this page, so every scrolled frame had to re-sample all the pixels behind them
  • The difference between 32px and 14px is almost invisible to the eye — the cards already sit on .70–.78 white and the blur only softens the photo behind them; but sampling cost scales roughly with the square of the radius. Saturation drops from 180% to 150% too; nothing on this page needed more vivid colour
  • Only narrow screens drop a notch: desktop is unchanged, not a pixel moved. This is a pure performance change you will barely see — but scrolling on a phone will feel a lot smoother
  • This is a pure performance change you will barely notice — if scrolling still feels rough on your phone, tell me which screen and I will keep digging.
v1.9.47 Website 2026-10-03

The mobile status page is far shorter; the ban list no longer repeats "QQ not linked" on every row

  • On phones, every service row used to wrap onto two or three lines. The reason was concrete: the row was a three-column grid whose minimum widths added up to 504 px, while a phone viewport is only 492 px — just barely too narrow, so each row was forced to wrap. Narrow screens now use two columns with the note on its own line, cutting over 500 px off the page
  • Panel padding, the availability strip and the node cards were tightened a notch on narrow screens too. These changes live only in a style block inside the status page itself — not a single pixel moves on any other page
  • In the ban list, every row carried the identical line "QQ not linked" under the player name, making the table look broken. It turned out the back-office "hide QQ on the ban page" switch was computed and then never used — the setting had always been dead
  • All three places now honour that switch: the list row, the QQ badge and tooltip on the avatar, and the expanded detail. Ban reasons are still hard-coded in Chinese (all ten languages show Chinese); I will handle that separately
v1.9.46 Website 2026-10-03

Background images move now, and they lean away from your mouse

  • Animated GIF banners are supported now. It was never "unsupported" — it was "supported, then flattened": every upload was re-encoded to WebP, and decoding a GIF yields only its first frame, so an animation arrived as a still image
  • The fix: a multi-frame GIF is stored byte-for-byte, without re-encoding, so the animation survives. The trade-off is that animated banners are not resized to 1920x1080 — re-encoding would kill the animation, so this is deliberate
  • The background now follows your mouse: as the pointer moves, the background layer drifts up to 10 pixels the other way, so the photo reads as having depth
  • Each frame only changes one CSS variable, so the photo itself is never redrawn; once the pointer settles the loop stops, leaving an idle page exactly as cheap as before. Mouse and trackpad only, and fully off under reduced-motion
v1.9.45 Website 2026-10-03

The cross on the Back button: four rounds, and the cause was inside a comment

  • The cross is gone. It was a bright spot the browser leaves at the top-centre edge when it samples the backdrop on a small box —— this button is only 58x35, so the spot covers a noticeable share of it; on a large card the same spot is diluted and invisible
  • The fix: this small button no longer carries a backdrop sample, and its tint went from 8% to 14% to keep it feeling translucent. The cost is zero: with and without refraction this button differs by 0 of 1,766,688 pixels (max channel difference 1)
  • The harder layer came next: the rules were right but had no effect. Quoting the reference CSS verbatim inside a comment, I wrote /* 6% */ —— CSS comments do not nest, so that */ closed the outer comment early, the following } closed the rule early, and the parser swallowed every rule after it
  • That bad comment had been there since 1.9.42, so for three whole versions the button glass was missing its inner glow and outer shadow —— both are back now. The lesson is now a test: never put anything in a comment that ends the comment early (the same trap has already caught me twice in PHP)
v1.9.44 Website 2026-10-03

That flickering line on mouse move: eight versions later, the cause was a 2px hover lift

  • The cause was not the highlight, and not the area of frosted glass — it was a site-wide hover rule: every time the pointer crossed a card, the card was lifted 2px. The cards carry a frosted backdrop, so the moment one moves the browser has to re-sample the image behind it, and that sampling is cut into tiles — the tile seams are the line
  • Five dead ends along the way (moving the highlight from the background to a pseudo-element, switching it to transform, making it a real child element, moving it out of the glass, deleting it entirely). Each looked like it «should» work, and none of them touched the cause
  • The fix: glass surfaces no longer move on hover — they answer with a border and a shadow instead. Two full-width frosted bars (the nav bar and the pinned name row) also lost their blur; large-area sampling is the most expensive kind
  • Two visible things came out of the same batch: the pointer-following highlight is gone entirely (too distracting), and the button glass was rewritten into the reference's three layers (refraction and tint separated)
v1.9.43 Website 2026-10-03

The admin login button vanished: a specificity bug I introduced in the previous version

  • The button glass added in v1.9.42 had a specificity mistake: the base 8% white tint layer counted as "five classes plus two elements", while the primary button's navy gradient counted as only "three classes" —— so the base layer always won and the gradient never rendered. On top of that, background: none in the same block stripped the primary button's own gradient. Navy background with white text therefore became white on white, and the button disappeared entirely
  • Fix: solid brand buttons (the primary button) no longer take part in the glass at all. It is a navy button with white text; this glass treatment only suits light buttons. The primary button is back to its original solid style
  • The same bug had also been silently eating the hover highlight (it counted as "four classes" and lost to five) —— so the previous version's "hovering now makes a difference" never actually took effect. It does now
  • One more knock-on bug: background: none also wiped busy buttons, while the glass layers skip them —— so a loading button went completely transparent for those few seconds. Busy buttons now get their background back
v1.9.41 Website 2026-10-02

The pointer-following glow is gone

  • What was removed: the cool blue soft light that followed the cursor across the cards. The whole thing is gone — the variables, the switch, the layer, the script, every fragment of it
  • Why: you reported the same problem four times — "a patch flickers as soon as the mouse moves" / "a horizontal line". I rewrote it four ways (painted into the card background, moved into a pseudo-element, made into a real child element, moved out to a full-page standalone layer) and none of them cured it. Your last word on it was "delete the pointer glow, it is too distracting" — so it is gone
  • A side benefit: with it removed, moving the pointer no longer causes any repaint at all. That also turned out to be the last piece of the flickering-line puzzle — while anything inside a frosted-glass element changes frame by frame, the browser has to keep recomputing the picture behind it, and it recomputes that picture in tiles, so the tile seams are the line you saw
  • Nothing else changed: the glass transparency, the photo-only first screen, the pinned name row and the liquid-glass buttons are all exactly as they were. Visitors without a mouse and touch visitors never saw this glow in the first place, so for them this update is a no-op
v1.9.36 Website 2026-10-02

The pointer glow no longer jumps between elements, and the buttons got a stronger liquid glass

  • The pointer glow no longer "jumps": moving the pointer from one card to another used to teleport the glow —— the old one vanished and the new one appeared instantly. Now the old one fades out where it sits while the new one fades in under the pointer, with the centre point gliding along; the whole move takes about 180ms
  • Why not a CSS transition: transition replaces an entire declaration, and there is no way to add a transition to just one property; doing it that way would need a selector that also overrides the card entrance and hover animations, turning the scroll-in from a fade-and-rise into a hard cut. So the script instead eases a single number (the glow intensity) frame by frame, and stops as soon as it settles
  • The buttons' liquid glass is stronger: the refraction displacement went from 14 to 50, the bevel band was widened, and the things that actually make it read as glass were added —— a specular highlight along the top edge, warm and cool dispersion fringes on the left and right edges, and an inner sheen. The blur was tightened from 1.5px to 0.8px at the same time (blur erases exactly the detail the displacement needs to chew on)
  • The honest caveat stands: only Chrome and Edge render it, and refraction is only visible when there is something to refract —— on a plain white card it is essentially zero, while over a banner photo with real light and shade it shows. The switch lives in the admin panel under "System settings → Appearance effects" and is off by default
v1.9.35 Website 2026-10-02

The first screen is just the photo now, the content rises on scroll, and the buttons got liquid glass

  • The first screen became a hero: on a player page with a banner, arriving shows only the page head and the background photo filling the viewport — the content area is not displayed at all. One turn of the wheel down fades and lifts the whole content block in (still at 28% transparency), and scrolling back to the top tucks it away again, so you can watch it repeatedly
  • Why the content blocks themselves move instead of a wrapper: any ancestor with an opacity below 1 creates a new backdrop root, and every backdrop-filter surface inside it then samples an empty background — the frosted glass breaks completely. Fading the blocks individually has no such ancestor. The only two position: fixed elements in the body (the background layer and the pinned name row) are outside that set, so moving them is safe
  • Liquid-glass refraction on buttons (a new switch under Admin → System Settings → Appearance Effects, off by default): a button edge now bends the pattern behind it slightly, the way a thick piece of glass would. It uses an SVG displacement map plus backdrop-filter; the map is drawn once with canvas when the page opens, and there is no per-frame script
  • Only Chrome and Edge render it: Safari and Firefox do not support this CSS feature and fail silently (no error, no drawing), so they fall back to the frosted glass you already have. And refraction needs something to refract — over a flat surface like a white card the effect is essentially zero; it only shows over something with light and dark detail, such as the banner photo
v1.9.34 Website 2026-10-02

The cards let a little more photo through, the pointer glow is smaller, and the pinned row slides in

  • What changed: on a player page with a banner, the big cards now let roughly 28% of the photo through instead of 5-10% (you can actually see it), and the stat chips and the radar card were lightened to match
  • Why the stat chips looked like two different colours: the pointer-follow glow used to be a 320px-radius blob of cool blue at alpha .22. When it covered the left half of the card, chip 1 measured rgb(189,193,197) while chip 4, outside the blob, measured rgb(245,246,247) —— a 56-level spread in one row. The blob is now 200px at alpha .10, and the chips no longer light up on their own (the outermost card is always the lit one); the same row now measures a 3-level spread
  • The other half of the "flicker": moving the pointer from empty card space onto a chip used to flip the script's target between the whole card and that single chip, so the glow jumped from a large wash to a tiny spot. Taking the chips out of the glow removes that jump
  • Pinning now has a slide: the name row drops 10px and fades in below the navigation over 180ms. With "reduce motion" enabled, that animation and the button spring turn off (the pointer glow stays)
v1.9.33 Website 2026-10-02

The name row now pins itself below the navigation as you scroll

  • What changed: on a player page with a banner, scrolling down pins the "avatar + name + level + badges" row just below the site navigation while the cards slide underneath it. The signature is not part of that row and scrolls away as before; the Back button pins along with the name
  • Why `position: sticky` could not do it: the row's parent is .cdr-container, which is only as tall as the page head, so sticky's travel range is trapped inside it —— past the head the row walks away with everything else. The row is therefore position: fixed, and a script inserts an equal-height placeholder where it used to sit (fixed removes it from the flow; without the placeholder the whole page jumps up by 86px the moment it pins)
  • Pinning also has to flip the ink colour: this row normally carries white text over the banner photo, but once pinned it sits on light glass, and white on white is invisible (a measured build showed the avatar and the "online" badge fine with the name cell completely empty). The pinned state therefore switches the name, level and badges to the ink colour used on glass surfaces
  • Only pages whose player uploaded a banner are affected —— pages without one (say /players/zlc) were not touched by a single byte
v1.9.32 Website 2026-10-02

The pointer highlight now lights only the one surface it should

  • The root cause was custom-property inheritance. The script puts .is-lit on the card under the pointer, and --glass-spot then travels down the inheritance chain into every .stat-mini inside that card —— one switch became seven or eight lit surfaces. That is exactly what you saw: "my pointer is somewhere else, why did everything light up?" The evidence: the probe status bar gained a spot= counter that counts not how many elements have .is-lit but how many computed --glass-spot values are not transparent —— before the fix, parking the pointer on a card's blank title area read lit=1 spot=8/27
  • The fix: every glass surface now resets --glass-spot to transparent for itself, so the inheritance chain stops right there; whichever surface the pointer actually sits on gets .is-lit from the script. After the change: spot=1/27
  • A second trap fixed along the way: that reset has the same specificity as the .is-lit rule and is written later, so by "last one wins" a bare body.cdr-body .is-lit would be overridden entirely and the highlight would vanish (measured lit=1 spot=0/27). The .is-lit rule therefore has to list all four selectors and raise its specificity. Miss this step and the bug goes from "lights up too much" straight to "lights up nothing at all"
  • The coordinates are also written synchronously on entering a new element instead of only waiting for requestAnimationFrame: otherwise the first frame has no coordinates and the glow flashes in the middle of the card before jumping to the pointer. One .is-lit is now one lit surface —— wherever the pointer is, that is what lights up
v1.9.31 Website 2026-10-02

Liquid glass gains two tactile touches: pointer-following highlight and a springy button

  • Pointer-following highlight: as the pointer moves across any glass surface, a small pool of cool blue-white light follows it —— only the card under the pointer lights up, everything else stays as it was. It is a radial-gradient layer painted into the card's background, reading --glass-mx / --glass-my as the script writes them. No extra nodes, no stacking-context games, no interference with the card's blur. Light mode uses cool blue-white rather than plain white: a white card (rgb 229~245) can only be lifted 6 levels by white light, which the eye simply does not register
  • Taller page-head photo band: .page-head's bottom padding went from 30px to 160px (about 317px in total), pushing the whole row of white cards down so the avatar, name and level badge now sit directly on the banner image —— that is the "show more of the background" you asked for. Height only, no new content, and it narrows to 72px on small screens. The content was deliberately not shifted down as a block: that would waste the darkest part of the top mask and make the whitened lines unreadable
  • Springy buttons: pressing compresses to .955 and releasing eases back with cubic-bezier(.34, 1.56, .64, 1) —— the second control point has y = 1.56 > 1, so the curve overshoots its target and settles back; that overshoot is the "spring". Pure CSS, no JavaScript and no physics engine
  • The prefers-reduced-motion fallback now reduces autonomous motion only: the button spring (which bounces on its own after release) becomes a plain short transition, still with press feedback, while the pointer highlight is kept —— following the pointer is direct manipulation; the pointer moves, the page does not. Your own liquid-glass reference says exactly this: drop displacement, keep blur + highlight. It is also the only way this machine can see the highlight at all: Windows animation effects measure as off here (MinAnimate = 0 / DragFullWindows = 0 / VisualFXSetting = 2), which browsers truthfully report as reduce —— gating the highlight on that would hide it forever
  • Everything above applies only to profiles with an uploaded banner (the block is still inside $pubBgCss !== ''); every other page —— including profiles without a banner —— was not changed by a single byte, and four assertions in the test suite guard exactly that
  • One honest note: both of these are "feel" effects and cannot be seen in a static screenshot —— you have to actually move the pointer across a card and actually press a button. It is also worth switching Windows animations back on (Settings → Accessibility → Visual effects → Animation effects), otherwise your browser tells every website that the user asked for reduced motion
v1.9.30 Website 2026-10-02

Liquid glass rebuilt: card colour no longer shifts as you scroll

  • The cause was not the rendering engine. Profile pages hung the banner image on body with background-attachment: fixed. That statement means "the image stays pinned to the viewport", and it is not its own composited layer —— the browser has to re-sample it every frame for each card's backdrop-filter; when the sampling window and the scroll position drift apart you get a colour jump. At the same time the cards move while the image does not, so every translucent card sweeps across the whole photo. Both effects together are what produced "sometimes dark, sometimes light, sometimes normal"
  • Fixing the flicker while scrolling: the background moved off body into a dedicated position: fixed layer (body::before, z-index: -1, pointer-events: none, will-change: transform). A dedicated layer can be promoted to a composited layer, so the sampling source is one already-composited bitmap for the entire scroll instead of being re-sampled every frame
  • Fixing the steady-state difference: the cards now set their own colour. This is based on a linear extrapolation from measurement —— drift ≈ (1−alpha)×53, so keeping it under 4 levels needs alpha ≥ .925. Large cards go from 72% → 95% at the top edge and 60% → 90% at the bottom; stat chips 80%/70% → 97%/94%; the radar card 76%/66% → 96%/92%. The photo still shows through by 5~10%, which is where the glass gets its tint
  • The glass is now a multi-layer material: noise layer + vertical gradient + edge grazing highlight + inner refraction bevel, with every parameter exposed as a variable (--glass-blur --glass-sat --glass-highlight --glass-displacement --glass-noise). One honest note: true SVG feDisplacementMap refraction is not achievable here —— Chromium and Safari accept only filter functions in backdrop-filter, never url(#svgfilter), so an inner refraction bevel approximates that look instead of pretending otherwise
  • Result: across scroll positions the same spot now differs by only 3~6 levels (18 in the previous release, 100 originally), with overall brightness at 229~245; dark mode differs by just 1~3 levels. The text-shadow halo on glass surfaces was removed as well —— with a stable card it no longer helps and only eats the stems of 12px text
  • Also fixed "the ability radar labels are hard to read": no transparency was touched. The "server average" sub-labels simply went from .76rem to the main row's .84rem, from muted grey to body-text colour, plus a little weight. The real cause is that 12px and 13px CJK take different antialiasing paths on Windows. All of the above affects only profiles with an uploaded banner; pages without one did not change by a single byte
v1.9.29 Website 2026-10-02

Card brightness no longer shifts while you scroll

  • The cause was not a rendering bug. Profile pages set background-attachment: fixed for the banner, so the photo stays pinned to the viewport while the cards scroll past it —— every translucent card sweeps across the entire image: dark sky makes it dim, bright buildings make it wash out. The same card measured anywhere from rgb(99,107,125) to rgb(201,197,200) depending on scroll position, a 100-level swing
  • The fix is to make the glass itself denser, because alpha is the only lever that preserves both transparency and stability: large cards go from 56% → 72% at the top edge and 34% → 60% at the bottom; stat chips 76%/60% → 80%/70%; the radar card 70%/52% → 76%/66%. The density order (large cards lightest, chips densest) is unchanged
  • Result: the same spot now varies by only 14 levels across scroll positions instead of 47, and overall brightness sits at 163~206 —— a clearly light frosted panel rather than a murky grey. Dark mode was densified to match (the 82%/72% tier), where the remaining drift is just 4~8 levels
  • Only profiles with an uploaded banner are affected. Pages without a banner (such as /players/zlc) never emit this glass stylesheet at all, so not a single byte changed for them
v1.9.28 Website 2026-10-02

"86 hours of play per day" is fixed

  • The old formula was "lifetime playtime ÷ days that have session records" —— the numerator spans ten years, but the denominator only covered the 11 days since 2026-09-12. Dividing two different eras gave "86 hours a day". The numerator was never wrong; the denominator was missing most of the history
  • The denominator is now your lifetime active days: chat messages, achievement unlocks and play sessions are unioned per calendar day —— 423 days for this account. 941 hours ÷ 423 days = 2 hours a day, which is finally the right order of magnitude
  • Two more things fixed along the way: login count now uses the lifetime total (1,655, where 929 older players used to show 0), and longest single session can no longer show the impossible pair "21 minutes average, 0 hours longest"
  • Three achievements were also unblocked: 7 / 30 / 100 active days could never be earned because of that same denominator —— server-wide session records only ever covered 16 days, so the thresholds were unreachable
  • Security audit, part one: several genuinely exploitable issues were closed —— CSS escapes could hide an external URL inside an uploaded SVG (an avatar could be used to leak visitor IPs), the admin panel could delete files outside uploads, login had an open redirect, a script inside a backup archive could land as a web shell, and two local debug scripts were reachable on the live site
  • Security audit, part two: API and admin hardening —— an empty ban list can no longer wipe every ban on the server in one request, uploads of server reports now have row caps, whitelist names are validated, one bad chat line no longer fails the whole batch, and database errors no longer echo their details to visitors
v1.9.27 Website 2026-10-02

The fine print in the radar panel is legible now

  • The small text in the ability-radar panel (axis names, the numbers on the right, the "server average" rows and the note underneath) sat on 34% glass whose darkest spots gave only 3.3 : 1 contrast —— below the 4.5 : 1 that small type needs. That is the "I can't read this" you reported, and it was my miss in the previous release
  • Two changes: the secondary text colour was pushed one step darker, and the radar panel got a backing of its own —— nearly every line in that card is small print, so it should not share one transparency with the big cards
  • The big cards were left alone: the skin panel, the achievements card and the footer are still at 34%, with the image showing through as before, and the stat chips keep the denser backing they already had
  • The dark theme got the same treatment. And this still only happens on pages whose owner uploaded a banner —— character pages without one did not move a single pixel
v1.9.26 Website 2026-10-02

One notch clearer, and the text still holds up

  • Profiles: the top went from 62% to 56% and the bottom from 40% to 34%. You can genuinely see the image behind now —— the vertical tower lights, the horizon and the blocky skyline all read through, instead of a slab of frosted panel
  • "Seeing the image" and "reading the text" pull against each other, so they are handled separately: the stat chips (the small-print areas like "time played" and "logins") keep a denser backing of their own (76% → 60%), while the large cards stay very clear. Small is more solid, large is clearer —— the opposite of the usual Apple hierarchy, and deliberately so
  • The text gained a very faint halo in the same direction (text-shadow) —— invisible when the backdrop is bright, only showing up when it is dark, so the type carries its own local backing. That is what makes 34% safe to ship
  • The dark theme got matching dark-glass and dark-halo values. And this still only happens on pages whose owner uploaded a banner —— character pages without one did not move a single pixel
v1.9.25 Website 2026-10-01

More translucent glass, and more Apple-like

  • Profiles: no longer a flat 68% white —— it is now a vertical gradient that is bright at the top and clearer at the bottom (62% → 40%), the gaussian blur went from 22px to 32px, plus saturate(180%) and brightness(1.12). Apple-style glass picks up the colour behind it and lifts it slightly; blur alone just looks frosted
  • The glass now has a refraction edge all round —— a 1px grazing highlight along the top plus a very faint inner stroke. The shadow is split into two layers (a tight contact shadow and a wide ambient one), so the pane reads as floating above the image instead of lying on it like paper
  • Fixed something that only surfaced once it got clearer: secondary labels like "time played" and "logins" were close to invisible —— the grey they use only reaches 2.5:1 on translucent white. They now get a darker shade inside the glass, while the small print that sits directly on the banner is left untouched
  • The dark theme got a matching set of dark-glass values. And all of this still only happens on pages whose owner uploaded a banner —— character pages without one did not move a single pixel
v1.9.24 Website 2026-10-01

Profiles went "liquid glass"

  • Cards, the skin panel, the six stat tiles and the whole footer are now translucent glass (68% white + a 22px gaussian blur), with your banner showing through, blurred, behind them. The text stays dark so it is still legible on top of the image; the dark theme swaps in dark glass
  • The achievements card header now has Collapse all / Expand all, folding all 8 categories at once —— no more scrolling to the bottom of the 98-badge wall to reach that button
  • The admin drawer in the bottom-right corner has a fourth tab, Avatars / Backgrounds, where pending uploads can be approved or rejected. It is the same data as "Players & data → Avatars / backgrounds", so reviewing from either place does the same thing
  • All of this only happens on pages whose owner uploaded a banner —— character pages without one did not move by a single pixel (I compared the before and after screenshots pixel by pixel)
  • Where glass is not available (older browsers) it falls back to the old solid cards. It deliberately does not follow the system "reduce transparency" preference —— the site owner's own Windows has transparency effects switched off, so honouring it would mean he never sees the glass at all
v1.9.23 Website 2026-10-01

Your profile page can now fill the screen

  • Background —— if you have uploaded a banner, your character page uses that image to fill the whole browser window, with your avatar, name, level and location sitting on top of it. Pages without a banner do not change by a single pixel
  • Location —— in Me → Personalise you can pick a country (plus a province if you choose China); it shows up on your profile next to "offline / rank #8". Leave it unset and nothing is shown
  • Avatars in the player list now prefer the one you uploaded. They used to always fetch the official skin avatar from an overseas host, which mostly fails to load here —— which is why you only ever saw coloured letter tiles
  • Uploaded avatars and backgrounds are reviewed before they go live. While a new one is waiting, the old picture keeps showing, so you never get a half-new page; removing one takes effect immediately
  • The upload limit is wider: banners up to 3840×2160 (was 1920×1080), and SVG is now accepted —— SVGs are sanitised, so scripts, external references and embedded HTML are all stripped out
v1.9.22 Website 2026-10-01

A new look for pop-ups · and old bans are back

  • All 16 pop-ups across the site now use the site's own dialog. They used to be the browser's own boxes, topped with "cloudridge.cn says", which looked out of place on mobile and ignored the site's styling entirely. Titles, body text and buttons are now ours; destructive actions get a red button, Esc cancels, Enter confirms, and focus returns to the button you clicked
  • The 8 players and 3 IPs still banned when the old server shut down have been restored to the ban list — the public page now shows 12 players and 7 IPs. Names, IPs, ban times and the operator who issued them are copied verbatim from the archives; nothing was invented. One caveat: the mod only reads the server's ban files and reports them — who actually gets blocked in game is still decided by the server's own list, so the entries take effect once the server reloads it
v1.9.21 Website 2026-10-01

That "Unknown player" was the same person all along

  • The player list always carried a row reading 「未知玩家 · 000000」 (unknown player), looking like a fourth person nobody had counted. Now it is clear: the old server's floodgate handed Bedrock players a UUID in the 00000000-0000-0000-0009-… placeholder range, and the mod could only report a *name* —— which at that moment happened to be that very UUID. It was really birdzhonghuifei playing on Bedrock, and it has been merged back into its owner
  • The rule for merging: counters (playtime, logins, deaths, blocks mined and placed, distance) are added up, advancements are unioned, and first-join takes the earlier of the two while last-seen takes the later —— timestamps must never be added. All nine badges on the stray row already existed on the owner, so the duplicates were dropped. The board is one row shorter, and birdzhonghuifei's numbers are now more complete
v1.9.20 Website 2026-10-01

Jump straight to any month on the calendar

  • The calendar popup now has a year and a month dropdown in its top-left corner: pick a year, pick a month, and you are two clicks away from any month —— no more tapping ‹ one month at a time. The back/forward buttons and "Today" are still there, and the dropdowns follow along as you page around
  • Also fixed a sorting quirk: sorting by "first joined" used to push rows with an unknown date to ranks 1–4, which made the whole board look broken —— "no value" is not the same as "the earliest". Such rows now sink to the bottom of the list, in either direction
v1.9.19 Website 2026-10-01

229 more chat lines recovered

  • The TrChat plugin log only starts on 2023-09-01, so parts of late 2024 were missing. Three old CoreProtect databases that had never been imported turned up 34,417 chat lines from 2024-07 to 2024-12; after de-duplication that is a net 229 messages across 37 days, the earliest from 2024-07-11
  • De-duplication works on "this player already said this within ±5 seconds" —— the same message is recorded once by TrChat and once by CoreProtect, their timestamps usually differ by a second and occasionally straddle a minute boundary, so comparing by minute would let those few dozen back in as duplicates
  • Those 37 days were not blank to begin with —— TrChat had recorded most of the conversation; what came back are the scattered lines it missed. Browsing those July–December 2024 days now shows a more complete picture of what was said
v1.9.18 Website 2026-10-01

Small accounts unfold inside their main row

  • Rows on the player list that own more than one character now start with a caret: collapsed by default, and one click unfolds each character into its own line with its own playtime, login count, last-seen and status (the main row is the sum, the sub-rows are the parts). Click again to fold back
  • Searching for a small account's name unfolds that row automatically —— searching for Winter shows its own figures right next to Fruity_oxygen's, instead of making you guess whose row it hides in. Also fixed an old glitch: sorting by player name left the header one column short of the body, which skewed the whole table
v1.9.17 Website 2026-10-01

Player board now ranks accounts · three years of chat recovered

  • The player list is now one row per website account: characters under the same account are added together (Fruity_oxygen and Winter merge into one row, ElfinLettuc and Faithe into another), while players who never linked an account keep a row each. The "N characters" badge next to a name opens up who was merged into whom — the old board split an alt from its main and made the alt look like wasted time
  • A new account page (/accounts/<id>): every character under the account is listed with its own playtime and login count, and the summary figures above are the sum of them. The page is fully public — no login needed. A stale row was cleaned up along the way: one character pointed at an account id that no longer exists
  • Three fields that had been stuck on placeholder values are now filled in: last seen (929 characters all claimed 2026-09-13), first joined (936 equally fake 2026-09-13), and login count (291 across the whole site, with 928 players showing "—"). Last seen comes from the server save files' modification time; first joined and login count come from the logs of every server generation. wwwsum now honestly reads 2024-08-22 and 7Strawberry 2024-03-07, and the login total went from 291 to 21,766
  • The chat panel has recovered everything since the server opened: from the very first line on 2022-12-16 up to where the mod took over live reporting on 2026-09-25, that is 174,457 messages and join/leave records (124,024 chats, 25,424 joins, 25,009 leaves). Previously only the few days with the mod installed had any history; now any day you click on the web map shows the conversation from that day
  • The calendar used to mark only the last 400 days as clickable, so 492 of the 729 recovered days could not be opened — restored but unreachable. Every day with records is clickable now. Also, the "registered players" figure differed by 2 between the home page and the player list (791 vs 789); both now use the account count

Dates are the release date of each version. Found a new problem? Tell us on the forum or contact the server owner.