换页不再白屏一下、注册页的「手机号注册」能点了
- 点站内链接时,旧页面不再先淡成一片白底 —— 之前新页面要等网络往返才到,中间那一下就是白屏。现在旧页面保持原样,换页后新页面照旧淡入、内容依次上滑。
- 注册页的「手机号注册」原来点了像是没反应:它只是把单选按钮选中,页面上的提示文案与「发验证码」的去向都没变。现在切一下就整页重渲染,提示、去向、表单都跟着变。
- 如果站点没有配置短信服务,注册页不会再把你留在「手机号注册」这个空壳上,而是自动退回邮箱注册。
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.
#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_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.127.0.0.1:8100 (an internal address, only used for probing). It now shows the public web map address.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.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 scrollpointer-events: none is inherited: the entire document tree stopped receiving the mouse, only <html> caught it, and the Back button became unreachablepub-bg-on and narrow the element rule to video.pub-bg-video, so the two can never collide again<html> while believing they measured the video layerblur(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/* 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 itbackground: 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 entirelybackground: 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 backtransition 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 settlesbackdrop-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 safebackdrop-filter; the map is drawn once with canvas when the page opens, and there is no per-frame script.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)/players/zlc) were not touched by a single byte.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--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.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"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 upradial-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.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 unreadablecubic-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 engineprefers-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$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 thatbody 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"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--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 otherwisetext-shadow halo on glass surfaces was removed as well —— with a stable card it no longer helps and only eats the stems of 12px textbackground-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/players/zlc) never emit this glass stylesheet at all, so not a single byte changed for themtext-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 shipsaturate(180%) and brightness(1.12). Apple-style glass picks up the colour behind it and lifts it slightly; blur alone just looks frosted00000000-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 ownerbirdzhonghuifei's numbers are now more complete‹ one month at a time. The back/forward buttons and "Today" are still there, and the dropdowns follow along as you page aroundTrChat 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-11TrChat 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 duplicatesTrChat 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 saidWinter 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 tableFruity_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/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 existswwwsum now honestly reads 2024-08-22 and 7Strawberry 2024-03-07, and the login total went from 291 to 21,766Dates are the release date of each version. Found a new problem? Tell us on the forum or contact the server owner.