Skip to content

v4.8.1

Choose a tag to compare

@github-actions github-actions released this 27 Aug 11:18
· 1 commit to main since this release

Changelog

All notable changes to Velox. This file is the single source of truth — it shows
up both on the GitHub release and in the WordPress "View details" → Changelog tab.
Add a new section at the top for each release.

4.8.1 — The site scan stops crying wolf

  • Every folder guard file was reported as malware. Plugins drop an inert index.php into their own upload folders so the folder cannot be listed — WP All Import, WooCommerce and most others do it, several folders deep. The scan reported each one as runnable code, so a perfectly healthy site opened the screen to a wall of serious findings. A file that does nothing is no longer reported, decided by whether it actually runs anything rather than by what it is named. One named index.php that does contain code is still reported.
  • A folder protecting itself was reported too. Most .htaccess files in uploads deny access, which is the opposite of a problem. Only one that switches a handler on is now reported — and it is reported as serious, because that is how an uploaded image gets run as code.
  • The Shop card in Utilities showed a stray \u2014 instead of a dash.

4.8.0 — Site scan

Checks that your WordPress files are the ones WordPress shipped, and that nothing runnable is hiding in your media folder.

  • Core files are verified against the checksums WordPress.org publishes for your exact version and site language. Anything altered, missing, or sitting in wp-admin or wp-includes without belonging there is listed with the reason it was flagged.
  • The uploads folder is checked for runnable code. That folder is for media; a .php file in it is one of the few signals that is both cheap to check and almost never a false alarm. Files with a hidden second extension, and .htaccess files that change how the folder is served, are listed separately as worth a look rather than as an alarm.
  • It does not pattern-match for malware, and the screen says so. Scanning file contents for "known bad" code fails in both directions — ordinary minified code sets it off constantly, and any infection not already on the list walks straight past, which is worse than no scan at all because it reads as an all-clear. A clean result here means your core files match and uploads holds no code, nothing more.
  • Plugins, themes and the rest of wp-content are not checked, because there is no published list of what those files should contain. Said plainly on the screen rather than left to be assumed.
  • If the checksums cannot be fetched, or the uploads folder is too large to walk to the end, the report says which part was skipped instead of quietly reporting less.

Also fixed

  • An expired unlock link from login protection still worked. The email promises the link stops working after 24 hours; it was honoured whatever its age, so an old message in an inbox stayed live. It is now refused once it expires.

4.7.0 — Login protection

Blocks an address after repeated failed sign-ins and keeps it blocked until you let it back in.

  • Blocks by address, not by account. Locking an account after failed attempts would let anyone lock you out of your own site simply by typing your username wrong a few times.
  • A blocked address is refused before the password is even checked, so the guessing stops rather than merely being recorded.
  • You can never be shut out by this. Every block emails you a one-click unlock link, valid once and for 24 hours, alongside the unlock buttons in the admin.
  • Blocked addresses are listed with the attempt count and the username that was tried, and can be released one at a time or all at once.
  • A successful sign-in clears the counter for that address.
  • If the site sits behind a proxy or CDN, say so and the forwarded address is used. It is off by default, because trusting that header on a site without a proxy would let anyone forge it and walk past every block.

4.6.8 — Checking out places the order

  • Pressing the order button removed an item from the cart instead. The cart summary on the checkout page carried its own remove buttons, each in a form nested inside the checkout form. Nested forms are invalid HTML and the browser attributed the submission to the wrong one. That summary is now read-only.

4.6.6 — Cart pages are no longer served from cache by the drop-in

  • The built-in cookie exclusions never reached the cache drop-in. Because the drop-in serves a page before WordPress loads, it only knew about cookies added by hand in the settings — so a visitor with a WooCommerce, Easy Digital Downloads or Velox cart could still be served someone else'''s cached page. The built-in list is now written into the drop-in'''s own configuration, and both sides read the same source.

4.6.5 — Placing an order shows the confirmation

  • After placing an order you were sent to the home page instead of the confirmation with your reference number. The checkout now returns to wherever it was placed, so it works on any page the shortcode is used.

4.6.4 — The cart is never served from the page cache

  • A visitor with something in their cart was being shown a cached page, so the cart looked empty however much they added. The cart cookie now excludes a request from the page cache, exactly as the WooCommerce and Easy Digital Downloads cookies already did.
  • Cart, checkout and account pages opt out of caching on their own, so one visitor'''s view can never be served to the next.
  • Modules can now veto caching for a request they know is personal.

4.6.3 — Product details are readable and writable through the API

  • A work'''s price, dimensions and availability were invisible to the REST API, so importing a catalogue programmatically appeared to succeed while saving nothing. The product type now declares the support WordPress requires for that.

4.6.2 — Adding to the cart returns you to where you were

  • After adding a work you landed on the home page instead of staying on the catalogue. The form now carries where it came from, and only ever returns to a URL on this site.

4.6.1 — Adding to the cart works on builder-built pages

  • Add to cart did nothing on a page built with Velox Builder. The builder renders its own document and stops there, so the shop's form handler — which ran at the same point — never got a turn. It now runs earlier, which is also the last safe moment to set the cart cookie.

4.6.0 — Shop

A small commerce layer for sites that sell individual pieces rather than stock.

  • Works get their own area in the admin, each with a price, dimensions, medium, year and an availability state — available, sold, or on commission.
  • A cart and checkout that work without JavaScript. Ordering records the order, emails the customer and you, and marks the piece as sold so a one-off cannot be bought twice.
  • Orders are listed with customer, total and state, and are never public.
  • A customer area showing order history, using ordinary WordPress accounts.
  • Four shortcodes place it anywhere: the catalogue, the cart, the checkout and the account area.

Two things it deliberately does not do. No card details are handled or stored — an order is recorded and payment agreed separately, so a payment provider can be added behind a redirect later. And sign-in, registration and password resets are WordPress's own, so there is no second set of credentials to protect.

4.5.0 — A template can carry its own styles, and three dead controls now work

  • A template's own CSS and JavaScript are now used. Only the page being rendered was consulted, so anything written against a template was silently discarded and every shell style had to be duplicated into each page. Template assets are emitted first, so a page can still override them.
  • Saved reply templates can be removed. Creating them worked; there was no way to delete one.
  • The llms.txt editor can preview what auto-generation would produce, without overwriting whatever you have typed.

4.4.1 — Font family is no longer discarded

  • Setting a font on an element did nothing: font-family was missing from the properties the builder knows how to write out, so the rule was dropped and the element kept the theme's font. Font-style and white-space were missing for the same reason.

4.4.0 — Shortcodes typed into the builder now run

  • A shortcode placed in builder text was printed on the page as literal text. Putting a Velox form, or anything else that uses a shortcode, into a page built with the builder simply did not work. Shortcodes are now run after the text is sanitised, so the content is still filtered but registered shortcodes render as intended.

4.3.2 — Builder images can carry alt text

  • Images placed with the builder always output an empty alt attribute, whatever was set, so they were invisible to search engines and unusable for anyone on a screen reader. The element's alt text now reaches the page.

4.3.1 — Element styling was being thrown away on pages without a navigation element

  • Per-element styling only reached the page when the page happened to contain a navigation element. The text effects, the utility presets, the grid layouts, the aspect-ratio box and the Google Reviews styling all write their CSS into the same place, and that place was only ever printed as part of the navigation block. A page without navigation lost every one of them.
  • Align-self, justify-self, grid-column, grid-row and text-wrap are now understood, so rules using them are no longer discarded.

4.3.0 — Google Reviews ships with designs, and says how to preview them

The reviews element asked you to pick a design, but no designs existed until you built one yourself — and the only way to see anything at all was to connect Google first.

  • Five designs are included: Cards, Slider, Minimal, Compact list and Single spotlight. They are always available, including on a site that has never opened the Reviews screen, and any of them can be duplicated and changed.
  • The element now says how to see example reviews instead of only pointing at a connection you may not have yet, and says so on the canvas once they are switched on.
  • Your own saved designs always take precedence over an included one of the same name.

4.2.0 — After purging, Velox offers to measure

Clearing the cache used to be a dead end. It now offers the obvious next step: run the built-in PageSpeed check, or test on Google's PageSpeed Insights.

  • The offer appears wherever you purge from. It was already written, but the markup it needed only existed on the Performance screen, so purging anywhere else showed nothing.
  • Purging from the front-end bar tests the page you are actually on, rather than the home page — that is the one place the exact page is known. Only URLs on this site are ever accepted.

4.1.2 — The character count on the Pages list updates as you edit

Editing an SEO title or description straight from the Pages list saved the new text but left the little character count beside it showing the old number — and a field that started out empty never got a count at all until the page was reloaded. The count is now rebuilt, added or removed the moment the edit is saved, and still colours itself against the same length guidance.

4.1.1 — The last of the preset elements get their settings

Small on purpose: each of these only gained the one or two things the ordinary style controls cannot express.

  • Aspect-ratio box: pick a shape from a list — widescreen, square, portrait and so on — or give your own, and choose whether the contents fill and crop or fit inside. The shape can differ per screen size.
  • Trust badges and payment icons: force every badge to a common height so logos supplied at different sizes stop appearing at wildly different scales. Height and spacing are per screen size, with optional grey-until-hovered.
  • Pull quote: an optional quotation mark above or beside the text, and an accent line down the left or underneath.
  • Eyebrow: an optional short rule before or after the text, with adjustable length and colour.

4.1.0 — Column counts you can set per screen size

The bento grid, stats row, feature grid, split screen, content-and-sidebar and logo strip could only be changed by typing a raw CSS value, which meant no per-screen control: a four-column stats row stayed four columns on a phone.

  • Bento, stats row and feature grid: set the number of columns, the spacing, and how items line up — each per screen size. Optionally give a minimum column width and the grid wraps by itself.
  • Split screen: choose an even or weighted split, the spacing, and which screen size it stacks below.
  • Content and sidebar: set the sidebar's width and which side it sits on, and where it stacks. Putting the sidebar on the left reorders it visually without changing the markup, so reading order stays sensible.
  • Logo strip: set a uniform logo height and spacing per screen size, with an optional grey-until-hovered treatment.

4.0.2 — Reading time and Last updated now show something

Both elements produced an empty space on the page: neither had any code behind it. They now read from the post itself.

  • Reading time counts the words in the post and divides by a reading speed you set, ignoring markup and shortcodes so the count is honest. The wording either side of the number is yours, and you can set a floor so a very short page does not say "0".
  • Last updated shows when the post was last edited, in the site's date format or one you give it, or as "3 days ago". It can fall back to the published date for a post that has never been edited, and it outputs a real time element so search engines can read the date.

4.0.1 — Five more elements that did not do what they promised

  • Screen-reader text is now actually hidden. It only moved itself off to one side, which leaves the text selectable and can add stray scrollbars. It can optionally appear when tabbed to.
  • The skip link now appears when focused, which is the entire point of one. Its colours and position are adjustable.
  • The anchor target no longer scrolls under a sticky header — set how far below the top it should stop, per screen size.
  • Avatars in an avatar group overlap, with adjustable size, overlap, ring colour and thickness, and a choice of which face sits in front.
  • The loading skeleton shimmers, with adjustable speed and colour. It holds still for visitors who have asked for reduced motion.

4.0.0 — The five text-effect elements now produce their effect

Gradient text, Outlined text, Drop cap, Vertical text and Highlighted text were named after effects none of them implemented — inserting "Gradient text" gave you plain bold text. Each now renders properly and comes with the handful of settings that actually control it.

  • Gradient text: start colour, end colour and angle.
  • Outlined text: outline thickness (per screen size), outline colour, and an optional fill instead of the hollow look.
  • Drop cap: how many lines tall (per screen size), letter colour and weight.
  • Highlighted text: colour, and whether it fills the whole block, sits under the words, or sweeps like a marker pen.
  • Vertical text: reads top-to-bottom or bottom-to-top.

3.99.4 — Twenty-three elements were losing their styling on the live page

  • Cards, callouts, badges, notices, CTA bands, empty states, popups, offcanvas panels and dropdowns had no padding on the front end. They set it as a shorthand, and the shorthand was not among the properties the page builder knew how to write out, so it was discarded every time. Thirteen elements were affected.
  • The bento grid, feature grid, split screen, stats row and sidebar layout had no grid. They were setting a property name the builder does not recognise; they now set the one it does, and lay out as intended.
  • The aspect-ratio box now keeps its ratio, and the overlap wrapper overlaps. Both relied on properties that were being dropped for the same reason.
  • Padding, margin, position, z-index, overflow, aspect-ratio and object-fit are now understood everywhere, so a rule using one is no longer silently lost.

3.99.3 — Completes the block-editor script fix

  • The remaining script error when opening a post from the SEO health list is gone. 3.99.2 fixed one of the blocks in this file; the resize handle sits in a different one and still could not reach the translation helper. There is now a single helper shared by the whole file rather than a copy per block, so no part of it can be missed again.

3.99.2 — Fixes a script error on every block-editor page load

  • The SEO sidebar threw a ReferenceError twice on every editor load. The code that adds the drag-to-resize handle sits in its own block and was calling the translation helper defined in a different one. The handle lost its tooltip and two errors were logged each time a post was opened.

3.99.1 — Ten more slider settings

  • Card sizing: set a card width outright, or a minimum and maximum width, or force a height — each per screen size. Cards can be made the same height as each other, or left to their own.
  • Show a sliver of the next card so it is obvious the row scrolls.
  • Snapping can be always, only when a card is already close, or off entirely for free scrolling. Movement can glide or jump.
  • Arrows can sit below as before, over the slides, or outside the edges.

3.99.0 — Element settings marked responsive finally are

  • Settings marked "can differ per screen size" now actually do. That badge has been shown on slides-shown, spacing, review columns, floating-button offsets and popup width for some time, but the value underneath was stored once and used everywhere — the badge was the only part that was responsive. Element settings now carry a breakpoint the same way styles always have, set at whichever viewport you are editing.
  • A slider's slides-shown and spacing now change per breakpoint on the live page. They were previously written into each slide as an inline style, which cannot carry a media query and outranks every stylesheet, so the widest value won everywhere and nothing could override it. They are emitted as ordinary rules now.
  • Nothing is migrated. A setting with no per-screen values behaves exactly as before and is still stored the same way.

3.98.1 — Reverts a no-op change from 3.97.2

  • Reverts the four inspector controls added in 3.97.2. They were added to a list the Spacing and Size panels never read, so they never appeared and changed nothing. Those panels already offer all four padding and margin sides and both width and height with min and max. A comment now records this so the same mistake isn't repeated.

3.98.0 — Builder breakpoints now match Bootstrap 5

  • Six viewports instead of three. The builder had Desktop, Tablet and Mobile; it now has Desktop plus xxl, xl, lg, md and sm, on Bootstrap 5's own boundaries (1400 / 1200 / 992 / 768 / 576, using the same .98 down-mixin edges Bootstrap uses). A Velox layout and a Bootstrap utility on the same page no longer disagree about where a viewport ends.
  • Existing pages are not migrated and cannot lose styling. Rules saved under the old Tablet and Mobile keys are read as lg and md and still render at the same widths. They are emitted just before the matching new breakpoint, so if both exist the newer value wins. Nothing is rewritten on disk.
  • The small breakpoint is a real breakpoint now. The 'portrait' global width was stored but never actually produced a media query.

3.97.2 — Four builder controls that existed but were never shown

  • Margin left and margin right are now editable. Both were already supported everywhere — the model, the editor's CSS generator and the front-end renderer all handled them — but the inspector only ever offered top and bottom, so there was no way to set them.
  • Min width and max height are now editable, for the same reason.

3.97.1 — Attribute and translation fixes in the admin

  • Fixed: 54 broken aria-label and title attributes across the admin. An earlier translation pass wrapped these values in vxT( … ) without escaping out of the surrounding string, so the browser received the literal function call as attribute text instead of a label. Screen readers got nonsense on the media library checkboxes, the mail folder and connection controls, the field-type picker, the image lightbox and the builder size steppers, among others.
  • The maintenance indexing prompt is now translatable. Its heading, the three choices, the select-all label and the footer note were hardcoded English while the rest of the screen switched to German. Item counts now use proper singular and plural forms rather than being assembled from fragments.

3.97.0 — Reviews gets its own home, and three fixes

  • Fixed: the indexing prompt after maintenance mode never appeared. Since maintenance can be switched from the admin bar on any screen, but the prompt lived in a script that only loaded on Velox pages, it was invisible everywhere else. It now loads wherever there is something to decide.
  • Fixed: the snippet code box was completely unlabelled. The language badge and placeholder are now written into the page itself instead of being added by a script, so an empty editor always says what it expects.
  • Google Reviews is now its own section in the sidebar and has a card on the dashboard, instead of being buried three levels down in Utilities.
  • Example reviews in the Reviews tool: switch them on to see how reviews look before connecting Google. Clearly fake, and nothing leaves the screen.

3.96.0 — Accordion, tab and slide items in the outline

  • The Structure panel now lists the items inside an accordion, tabs or a slider, each with the container that holds its content. A slider with six slides was previously a single line, so its slides could not be found or selected from the outline.
  • Reorder items straight from the outline with the arrows that appear on hover. The content container moves with its item, so nothing ends up on the wrong panel.
  • Clicking an item selects its element and opens the Settings tab where that item is edited.

3.95.0 — Icons you can actually pick

  • New icon picker. Anywhere an element asks for an icon you now get a searchable, grouped picker with a live preview, instead of typing a name from memory and hoping.
  • 70 icons covering contact, interface, trust and commerce, people and places, trades and services, and media and data — chosen for the work rather than shipping a library of thousands.
  • Icons are drawn into the page directly. Nothing is fetched from an icon CDN, so no visitor IP addresses are shared with a third party and no icon font is downloaded for the sake of a few symbols.
  • Floating buttons and the sticky contact bar now use the icon you choose, with a sensible fallback when you have not chosen one.

3.94.0 — Fixes and clearer settings across the admin

Fixes

  • Fixed: saving a mail template made a copy instead of updating it. Saving the same template repeatedly piled up duplicates; it now updates in place.
  • Fixed: the setup wizard started again after a reload. It only counted as finished if you explicitly dismissed it. Re-run it any time with ?velox_wizard=1.
  • Fixed: SEO title and description counters only updated after a reload. They now count as you type.
  • Fixed: risky settings sat flush against the amber line and some fields ran past the edge. The spacing rule was competing with another of equal weight, so whether it applied was down to chance.

Clearer

  • Cache lifetime now has one-click presets (1 hour, 6 hours, 12 hours, 1 day, 1 week, 30 days, or until purged) and tells you in plain words what any number means — 36000 seconds reads as "= 10 hours".
  • After purging the cache Velox no longer reports "WP Fastest Cache not active" as something skipped; not having it is normal. Instead you get links to check the result, both in Velox and on Google PageSpeed Insights.
  • The snippet editor shows which language you are writing, with the wrapper Velox adds for you, so a PHP snippet is not mistaken for plain output.
  • Maintenance mode now confirms itself wherever you are in the admin, instead of only inside Velox.
  • SEO: import and export moved to the bottom of the page, out of the way of everyday settings.

Google Reviews

  • Full styling controls: layout as a grid, list or slider, columns, spacing, card background, rounding, padding, border and shadow, star colour and size, name and text colours and sizes, and switches for the profile picture, date and Google logo.
  • Example reviews for designing. Turn them on to style the block before the Google connection exists; they are clearly labelled and never appear once real reviews are in place.
  • Filter by minimum rating and shorten long reviews.

3.93.0 — Real content inside accordions, tabs and slides

  • Accordion panels, tab panels and slides can now hold anything — buttons, images, grids, any element — instead of plain text only. Each item gets its own container you can drop elements into, and the text fields stay as a shortcut for simple content.
  • Adding or removing an item adds or removes its container to match.
  • Fixed: the Navigation element ignored the "A WordPress menu" setting entirely. Choosing it produced no links at all; it now reads the menu, including submenus.
  • A navigation with no menu found falls back to its typed links rather than rendering nothing.

3.92.0 — Navigation and floating elements

New elements

  • Navigation — links from a WordPress menu or typed by hand, submenus, a burger menu with a breakpoint you choose, submenus on hover or click, and optional sticky behaviour that can shrink or hide as you scroll.
  • Breadcrumbs — with optional search-engine markup.
  • Anchor navigation — jump links that highlight the section currently on screen.
  • Floating button — nine placements, offsets, and actions for links, phone calls, WhatsApp, email, scroll-to-top or opening a popup. Optional attention animation.
  • Back to top, Announcement bar (dismissible, remembers the dismissal), Sticky contact bar (phone-friendly button row) and Reading progress.

How they behave

  • Floating elements share one system for when they appear (page load, delay, scroll depth, an element coming into view, inactivity, or leaving the page) and how often (every time, once a visit, once a day, once ever).
  • Placement and per-device hiding are written as real CSS, so nothing flashes in the wrong place while the page loads and hidden elements are genuinely hidden.
  • On phones, where there is no cursor to detect, the leaving-the-page trigger becomes a scroll trigger instead of never running.
  • Navigation uses one set of links for desktop and mobile, so search engines and screen readers see them once.

Fixes

  • Fixed: hover never worked on submenus or tabs. The events used for hover do not travel up the page the way the code assumed, so hover mode did nothing at all.
  • Fixed: clicking a hover submenu closed it. Hovering opened the menu and the click immediately shut it again, making it impossible to click through.
  • Fixed: elements shown by a trigger stayed marked as hidden, so assistive technology was told the opposite of what was on screen.
  • Fixed: closing an announcement bar did not stick when it was set to show every time. Closing something is deliberate and now lasts the visit.

3.91.0 — Interactive elements, and the foundation under them

New elements

  • Accordion and FAQ — add sections, choose one-at-a-time or several open at once, set the icon side and heading level. Optional FAQ structured data, off by default.
  • Tabs — above or beside, click or hover, and an option to become an accordion on mobile using the same content rather than a duplicate copy.
  • Slider — slides shown, spacing, looping, autoplay with a play/pause control, arrows, dots and a position counter.
  • Offcanvas panel, Popup / modal and Dropdown — edge, size, whether the page is pushed or stays put, backdrop, and how it can be closed.
  • 36 layout, typography, content and utility elements: split screen, full-height section, aspect-ratio box, bento grid, auto stack, cluster, content + sidebar, gradient/outlined/highlighted text, drop cap, eyebrow, pull quote, vertical text, icon box, card, stats row, team member, logo strip, callout, badge, avatar group, trust badges, payment icons, case study card, CTA band, notice box, feature grid, skip link, screen-reader text, reading time, last updated, loading skeleton, empty state and anchor target.

Under the hood

  • Elements now carry their own settings, so every element gets a properly organised Settings tab with sections, plain-language labels and controls that appear only when they are relevant.
  • Interactive elements are keyboard-accessible and screen-reader-correct by default, following the W3C accessibility patterns for accordions, tabs, dialogs and carousels.
  • The slider uses no carousel library. Slides are ordinary content in the page, so they are visible to search engines without JavaScript, nothing jumps while the page loads, and the first slide is prioritised for speed.
  • Element code is only sent to a page that actually uses it — a page with an accordion does not carry the code for sliders.
  • Anything that animates respects the visitor's reduced-motion setting.

Fixes

  • Fixed: a setting switched off came back on. Turning any toggle off removed the setting entirely, so it fell back to its default — meaning "off" was impossible to save.
  • Fixed: an empty popup could not be closed, because it collapsed to nothing and hid its own close button.

3.90.1 — Nothing shows through a floating panel

  • Fixed: the style panel stayed visible behind an unpinned Add panel. The Add panel is narrower than the style panel, so its right edge stuck out and remained readable through the dimming. Dimming is not hiding — the column is now removed while a panel floats over it, and comes back the moment the panel is pinned or closed.

3.90.0 — Panels and shortcuts behave

  • Fixed: the Add panel's pin did nothing. It was pinning the right-hand side instead of its own, so clicking it appeared to have no effect at all.
  • Fixed: opening a panel closed the one on the other side. Structure and Add can now be open together, as can Settings and Add. Panels on the same side still replace each other, since they share the space. Pinning decides whether a panel pushes or overlays the canvas — nothing more.
  • Fixed: Ctrl/Cmd + S sometimes opened the browser's own save dialog. Two causes: the shortcut only matched a lowercase "s", so Shift or Caps Lock missed it; and it listened after other handlers, any of which could stop it. It now matches regardless of case and runs before anything can swallow it.
  • Fixed: canvas event listeners stacked up on every render. A click, double-click or shortcut on the page ran its handler once for every time the canvas had been redrawn since opening the editor — so a single Ctrl+S could fire several saves.

3.89.0 — Colours are editable again

  • Fixed a regression: there was no way to edit your colours. Rebuilding the Global styles screen in 3.82.0 dropped the colour and spacing editors, and nothing replaced them — the in-editor Colors page only listed them. Both are now editable in Settings → Global styles, with add, rename, recolour and remove.
  • Spacing scale is editable there too, available as var(--space-0), var(--space-1) and so on.
  • Unpublish is now reachable. A published page could only be taken off the site by deleting it, even though the ability to unpublish already existed with no button attached. It also clears the cache, which it previously did not — the page would have stayed visible to logged-out visitors.
  • Removed the leftover header/footer role endpoint; its interface was retired in 3.80.0.

3.88.0 — The Settings screen now does something

  • Fixed: every setting on the Builder Settings screen was ignored. CSS output, Minify CSS and Default container width were all saved to the database and read by nothing — changing them had no effect whatsoever.
  • CSS output now works: "Inline" puts the page CSS in the head instead of writing a static file.
  • Minify CSS now works: comments and whitespace are stripped from the generated stylesheet.
  • Default container width is gone, because page width already lives in Global styles and two controls for one value is worse than one. The Settings screen shows the current value and links to it, and any width previously saved here is carried over.
  • Saving these settings clears the page cache, so a change to CSS output takes effect immediately.

3.87.0 — Reusables show where they are used

  • Each reusable now says how many pages it appears on, and hovering lists them. Templates count too.
  • Deleting a reusable that is in use warns you first and says how many pages will lose the block, instead of asking a blank "are you sure".
  • Reusables get the same row actions as pages and templates: Edit, Rename, Duplicate, Delete.
  • A clearer empty state pointing at "Make re-usable" in the builder's right-click menu, which is how most reusables actually get created.

3.86.0 — Page settings gains real depth

  • Page background colour, per page.
  • Animate On Scroll per page: override the site-wide animation, its duration and delay — or switch animation off for this page alone. Precedence runs element, then page, then site.
  • Scripts per page: CSS and JavaScript that apply to this page only. The CSS is written after everything Velox generates, so it wins; the JavaScript runs in the footer of the published page.
  • Both sit behind their own entries under Page settings, matching the rest of the settings navigation.

3.85.0 — Global styles in the editor, and pinning per side

  • Global styles now live inside the builder, not on a separate admin screen. Settings → Global styles opens Colors, Fonts, Headings, Body Text, Links, Width & Breakpoints, Sections & Columns and Animate On Scroll, each on its own page. Changes save as you type, through the same store the admin screen uses, so the two can never disagree.
  • The pin button is now per side. One pin for both stacks meant you could never dock the inspector while leaving a panel floating. Left and right are remembered separately.
  • An unpinned panel now properly hides what is behind it. The dimming was too light, so the inspector stayed legible through it and the two panels read as one.
  • Settings navigation rows are all the same width; the longest label used to stretch its own row.
  • Clearer icons in the settings navigation.

3.84.0 — Settings inside the builder

  • A Settings button in the top bar opens a panel with three areas: Page settings, Editor settings, and a link to Global styles.
  • Page settings — page width and overlay header — apply to the document you are editing and are saved with it. Overlay lets the header sit on top of the first section instead of pushing it down, always or only from tablet or desktop up.
  • Editor settings — indicate parent elements on hover, and the class suggestions limit. These are your own preferences, stored in your browser, and never change the site.
  • Global styles stay on their own screen rather than being squeezed into a narrow panel; the entry links straight there.
  • The panel pins and collapses like every other panel in the editor.

3.83.0 — Animate on scroll

  • Elements can now animate as they scroll into view: fade, fade up/down/left/right, zoom in and zoom out.
  • Set a site-wide default in Global styles — animation, duration, easing, trigger offset, delay, play once or every time, and turn it off on mobile or tablet.
  • Every element can override it or opt out from the Settings tab in the builder, including its own duration and delay.
  • Visitors who ask their system for reduced motion never see animations, whatever is configured.
  • The animation code only ships on pages that actually animate something, and browsers without IntersectionObserver simply show everything rather than leaving the page blank.
  • Animations do not play inside the editor, so they never fight the builder while you work.

3.82.0 — Global styles

  • Body text: font family, size, weight, line height and colour, applied to every built page.
  • Headings: a shared heading font plus size, weight, line height and colour for H1 through H6 individually.
  • Links: colour, hover colour, underline and weight.
  • Width & breakpoints: page width, and the tablet, landscape and portrait breakpoints are now editable.
  • Sections & columns: default padding on all four sides.
  • Breakpoints were hardcoded in four separate places — the editor, the front-end renderer, and both halves of the class CSS editor. Editing a class could silently drop its responsive rules because the parser matched the old fixed numbers. They now come from one setting everywhere, including the editor's tablet and mobile preview widths.
  • Leaving a field empty means inherit: Velox writes no rule at all rather than forcing a default over your own styling.

3.81.0 — Self-hosted fonts and per-weight preloading

  • Preload is now per weight, not per family. Preloading a whole family pulls files the page may never use, which is worse than not preloading at all. Pick the one or two weights your first screen actually needs.
  • "While fonts load" is a single site-wide choice instead of being set separately on every family.
  • New Local files source. Point Velox at .woff2 files in your media library, one per weight, and it writes the @font-face rules for you. Self-hosted fonts preload the actual font file rather than a stylesheet, which is what preload is for.
  • Each family is now a titled card and the weight sections name the font they belong to, so it is always clear which family you are editing.
  • Weights you are not loading are dimmed out of the preload and file lists rather than offering choices that do nothing.

3.80.0 — Templates know what they are for

  • Every template now has a purpose: Front page, 404, Search, Archives, Posts, Pages, or Catch-all. Set it from a dropdown on the row. When more than one template could apply, the most specific wins — a Front page template beats a Pages template, which beats Catch-all.
  • Creating a template asks for a name and a purpose first, instead of dropping you into an untitled document.
  • New templates start with an Inner Content element already in place, so a template can show page content from the moment it is created. Not having one was the single most confusing thing about building a template from scratch.
  • Templates now have the same row actions as pages: Edit, Rename, Duplicate and Delete.
  • The old unexplained "Header" and "Footer" buttons are gone; a template is a whole page frame, and its purpose says where it applies.

3.79.0 — The Velox Builder screens are readable again

  • Fixed: headings, numbers and labels were nearly invisible. These screens are dark, but WordPress colours admin text for a light background and nothing overrode it — so section titles, the counters on the overview and most secondary text were dark grey on near-black.
  • Fixed: every text field, dropdown and textarea was unstyled — WordPress painted them white with its own borders. All form controls on these screens now share one dark style with proper focus rings.
  • The search field is shorter and wider, the type dropdowns read as small chips rather than full-size form controls, and rows no longer run into the edge of the card.
  • "Not live" and "No Velox layout" now say something you can act on: "Build this page →", "Draft — publish it →", or "On your site". The first two are links straight to the fix.

3.78.0 — Text you type on the canvas is no longer lost

  • Fixed: text typed directly on the page could vanish when you saved. The canvas is an iframe, and clicking a button in the top bar does not reliably tell the browser you have finished editing — so the text was still only on screen and never reached the saved document. It looked especially bad on templates: the heading saved empty, so the whole template appeared to render nothing on the front end.
  • Text is now committed before every save and publish, and whenever you click anywhere outside the canvas.
  • Fixed: keyboard shortcuts did nothing while the cursor was on the page. Ctrl/Cmd + S, P, Z, D and \ now work whether you are typing on the canvas or not.
  • A document saved without a content, tree or class map no longer breaks editing.

3.77.1 — Cache purging, and a status that cannot lie

  • Fixed: publishing never cleared the page cache. Logged-in users bypass the cache, so changes looked fine to you while logged-out visitors kept being served the old page indefinitely. Publishing a page, publishing a template, changing global CSS or JavaScript, and switching the catch-all option now all clear the cache.
  • Fixed: the page editor could show two contradictory statuses at once — "No Velox layout is attached" alongside a message saying the template wraps the page. The status now runs the same code the front end runs, so the two cannot disagree.

3.77.0 — Templates can now wrap pages you never built in Velox

  • New catch-all option. Turn it on and your default template also wraps pages that have no Velox layout — their normal WordPress content is placed in the template's Inner Content slot. That is how you get one shared navbar and footer across an existing site without rebuilding every page.
  • Off by default, deliberately. Switching it on makes Velox render every page on the site, which is not something to do silently — WooCommerce checkout and cart pages included. The switch lives in the Velox Builder box on any page editor.
  • Refuses to apply when the template has no Inner Content element, because the page content would have nowhere to go and would vanish. It says so instead.
  • Any page can still opt out individually with "No template — this page only".
  • Fixed: the page editor contradicted itself, showing "Not live with Velox" and a template selection at the same time with no explanation of why the template was doing nothing.

3.76.1 — Dropdowns on the dark screens

  • Fixed: the document-type and font dropdowns rendered as white boxes. WordPress styles every select in the admin with its own light theme, which overrode the dark styling on the Velox Builder screens and stretched the rows.
  • Rows on the Pages overview are now a consistent height.

3.76.0 — View as, and a Live column on the overview

  • "View as" now lists every page and post on the site, grouped into Velox pages, WordPress pages and Posts — not just Velox-built pages. A plain WordPress page previews with its own content.
  • A preview bar now says what you are looking at: "Previewing as [page]", a reminder that the content is not part of the template and is not saved, and a Stop preview button. The dropdown alone was too quiet a signal.
  • The View as control is styled properly and grouped, rather than a bare dropdown.
  • Every row on the Pages overview now shows Live or Not live, and hovering explains why — no layout attached, still a draft, or saved as a Template/Reusable rather than a Page.
  • Fixed: the top bar controls could overlap. The centre cluster was positioned independently of the rest of the bar, so the right-hand buttons slid underneath it as the bar filled up.

3.75.0 — Font loading you control

  • Pick exactly which weights load for each font family. Velox previously requested 400, 600, 700 and 800 for every Google font whether you used them or not — four files per family, on every page.
  • Italics are now opt-in per family rather than never available.
  • font-display is now a choice (swap, optional, fallback, block, auto) instead of always swap, with each option explained in plain language.
  • Preload any family to fetch its stylesheet at high priority, with a no-JavaScript fallback.
  • Pages using Google Fonts now preconnect to both Google hosts, saving a round trip before text can paint.
  • Fonts saved before this release keep working and default to 400 and 700.

3.74.0 — Global JavaScript

  • New Global JavaScript manager, alongside the existing Global CSS files. The code button in the builder now has CSS and JavaScript tabs.
  • Each script can be named, switched on or off without deleting it, and set to load in the head or the footer, either immediately, after the page loads, or without blocking.
  • Scripts run on every Velox-rendered page. They deliberately do not run inside the editor — a global script that rewrites the page would fight the builder — so test them on the published page.
  • Only users who are allowed to post unfiltered HTML can save scripts.

3.73.0 — Three long-standing annoyances

  • Fixed: style sections closed themselves while you were typing. The style panel rebuilds on every keystroke, and each rebuild reset which sections were open — so a section could collapse under your cursor mid-edit. Your open and closed sections are now remembered.
  • Fixed: two navbars when a template and a header/footer template were both set. The older header/footer roles and the newer template system were both wrapping the page. A template now takes precedence; header/footer roles still work on their own when no template applies.
  • Fixed: the Insert Data panel opened in the wrong place, offset to a position left over from the old sidebar that was removed in 3.67.0.

3.72.1 — View page opens the homepage for templates

  • A template has no URL of its own, so "View page" now opens the site homepage while you are editing one, instead of doing nothing. The same applies to the View and Open frontend entries in the exit menu.

3.72.0 — Template previews, Inner Content rules, and a front-end diagnosis

  • The page editor now tells you whether Velox is actually serving the page, and if not, exactly why: no layout attached, still a draft, or the document is saved as a Template/Reusable rather than a Page.
  • Front-end lookup made more forgiving: it now also finds the layout through the binding stored on the page itself, resolves revision IDs when previewing, and lets logged-in editors preview an unpublished layout.
  • "View as" for templates: pick any built page from the top bar and its content appears inside the template's Inner Content slot, so you can see how a real page sits in the frame. Preview only — nothing is saved.
  • Inner Content is now template-only — it no longer appears in the element list for pages or reusables, it can only sit at the top level (never inside a section or div, including by dragging), and a template can only have one.
  • Open panels now dim the editor behind them instead of letting it show through. Pinned panels do not dim, since they own their own space. Clicking the dimmed area closes the panel.
  • "Go to backend" returns where you came from: the WordPress editor if you opened the page there, the Templates or Reusables list for those, and the Velox overview otherwise.

3.71.0 — Three fixes, including a white-screen crash

  • Fixed: a page could return a 500 error. If a document was used as its own template, the Inner Content slot kept inserting the page into itself until PHP ran out of memory. The slot is now filled once and nested repeats are ignored.
  • Fixed: typing a unit into a number field produced values like "24%px". Half-typed units are ignored until they are complete, so typing "px" over an existing "%" now lands on 24px instead of garbage.
  • Fixed: Backspace sometimes deleted the element you were styling. Every keystroke rebuilt the style panel, which threw away the field you were typing in — the next Backspace then hit the delete-element shortcut. The panel now keeps your field and cursor position, and Backspace no longer deletes elements at all (Delete still does).
  • Change a document between Page, Template and Reusable straight from the overview, without opening the editor.
  • When no templates exist, the page editor now links straight to creating one and explains that an existing page can simply be converted.

3.70.0 — Inspector rework, drag-to-move, and a real page & class manager

Editor

  • Padding and margin now sit side by side in a box layout, each with an All / Individual switch — one field for all four sides, or one per side. Your choice is remembered.
  • Width, min-width and max-width share a row; height does the same. The style panel is wider.
  • The class area was rebuilt. The active class used to be printed twice — once in a card, once as a chip — and nothing told you that editing a class changes every element using it. Now it says so, and the state picker is its own panel.
  • Drag elements anywhere in the page structure: drop above, below, inside a container, or into empty space to pull something back out to page level.
  • Elements can no longer be dropped into their own children.
  • The "Add element" button is now flat text-and-icon rather than a filled block.

Fixes

  • Fixed: dragging in the page structure did nothing. It was still wired to the old sidebar that was removed in 3.67.0.
  • Fixed: min-width and max-height were silently thrown away — neither was registered in the style engine, so any value you typed vanished.
  • Fixed: choosing a unit before typing a number snapped back to px.
  • Fixed: opening the Add panel closed a pinned Structure panel even though they sit on opposite sides.

Pages overview

  • Shows every page on the site, including ones never touched by Velox, with a Build button to start one.
  • Filter by All / Velox pages / Templates / Reusables / Without Velox, plus search.
  • Rename, Duplicate, View, Delete and open in WordPress straight from each row.
  • Fixed: the counters at the top always read zero. They were hardcoded.

Classes

  • Filter between your own classes and the ones Velox creates for new elements.
  • Edit opens the class's full CSS — including :hover states and media queries — as editable text, and you can rename it in the same window.
  • Anything unsafe or unrecognised in the CSS is dropped on save rather than stored.

3.69.0 — Units you can pick, and two template/reusable fixes

  • Units are now a dropdown. Click the "px" next to any size field and switch to %, em, rem, vh, vw or auto. Typing a unit straight into the number field works too — enter "100%" and the % moves onto the chip by itself.
  • Ctrl/Cmd + D duplicates the selected element.
  • Fixed: reusables lost their text. Saved reusables only stored the structure and styling, so pasting one gave you correctly-styled empty boxes. They now carry their content, and a reusable you just created is insertable immediately instead of after a reload.
  • Fixed: a document could not be turned into a template. The type was only ever set from the URL, so anything started via "New page" was stuck as a page. There is now a Page / Template / Reusable picker beside the title in the builder.
  • Publishing a template or reusable no longer creates a stray WordPress page for it.
  • Switching a document to "Template" makes it the site default if no default is set yet.

3.68.0 — Templates that actually wrap your pages

  • New "Inner Content" element. Drop it into a template to mark where each page's own layout belongs. A template can now be a real navbar + content + footer instead of just a header and footer with a gap between them.
  • "Render page using template" now appears on every page and post editor, under the Velox Builder box. Pick a specific template, opt this page out entirely, or leave it following the site default.
  • The first template you create becomes the site default automatically — and because the default lives in one setting rather than being copied onto each page, pages you built before that template existed pick it up too.
  • If a template has no Inner Content element, the page content is appended after the template rather than disappearing.
  • The builder's "Add element" button is now a flat icon-and-text button in the top bar instead of a filled blue block.

3.67.0 — Builder: one left column, richer right-click menu

  • The left sidebar is gone. "Add element" is now a button in the top bar, Reusables moved in with the other tool icons, and the duplicate Settings shortcut was dropped (it was already in the logo menu). The editor went from three stacked left columns down to one.
  • The style panel only appears when you select something. With nothing selected the canvas gets the full width instead of showing an empty column. Add an element and the panel slides straight in for it.
  • Right-click menu rebuilt: Copy, Paste, Duplicate, Delete, Rename, Export, Wrap with div, Hide, Make re-usable — with keyboard shortcuts shown next to each.
  • Rename gives an element a friendly name in the page structure without touching its markup or classes.
  • Export copies an element and all its styles as JSON to your clipboard.
  • Wrap with div puts a container around an element in place.
  • Hide keeps an element in the builder — ghosted, still editable — but leaves it off the published page entirely.
  • Conditions is listed in the menu but not built yet; it is greyed out and marked SOON rather than quietly missing.

3.66.0 — Pin and collapse the builder panels

  • Panels can now be pinned: a pinned Structure, History, Global CSS or Add-element panel pushes the canvas across instead of covering it, so you can style and see your page at the same time. The pin is shared — set it once and every panel opens the same way.
  • New Hide left panels and Hide right panel buttons in the top bar slide the side panels off screen to give the canvas the full width. Shortcuts: Ctrl/Cmd + \ for the left stack, Ctrl/Cmd + Shift + \ for the right one.
  • The right-hand toggle remembers which panel you last had open and brings that one back.
  • Your pin and collapse choices are remembered between sessions.
  • Fixed the missing WordPress icon, which showed as a blank square in the Add-element list, the page structure and on WordPress data elements in the canvas.

3.65.0 — Velox Builder: states, spine cleanup, styled inputs (wave F)

  • State selector now includes :active out of the box plus a + button to add any custom pseudo-class (:visited, :nth-child(2), etc.); the generated CSS renders whatever states you use.
  • Removed the separate Layers list from the left spine — element editing lives in the inspector and the full tree is in the Structure panel (reachable from the spine or the top bar).
  • Styled the settings/inputs properly: focus ring, hover states, custom dropdown chevron, and clearer read-only fields. Inspector is wider for more room.

3.64.0 — Velox Builder: exit fix, contrast, duplicate, shortcuts + right-click (wave E)

  • Fixed the Exit menu: Open frontend / Go to backend / View page now resolve to real URLs even when you opened the builder by document (they were dead when no post was bound).
  • Right-click any element (in the canvas, layer tree or structure) for a context menu: Copy, Paste, Duplicate, Make reusable, Remove.
  • Keyboard shortcuts: Ctrl/Cmd+S saves, Ctrl/Cmd+P publishes, Ctrl/Cmd+C copies the selected element, Ctrl/Cmd+V pastes it into the element you right-clicked/selected (inside it if it is a container).
  • "Make reusable" saves the selected element (with its classes) as a reusable block.
  • Raised the contrast of icons, labels and muted text so they are no longer hard to see against the dark panels.

3.63.0 — Velox Builder: rich text toolbar + Insert Dynamic Data (wave D, #1)

  • Text elements now get a formatting toolbar in the left panel: bold, italic, underline, strikethrough, align left/center/right and link. Formatting is kept when you save.
  • New "Insert Data" picker with the full dynamic-data list (Post, Featured Image, Author, Current User, Blog Info, Archive, Advanced). Inserting a field drops a token into the text that renders the real WordPress value on the front end (post title/content/excerpt/date, author, site info, custom fields, etc.).
  • For safety, the "PHP Function Return value" token is inserted as a placeholder and is not executed on the front end.

3.62.0 — Velox Builder: real element settings (wave D, #5)

  • Elements with their own settings now surface them properly. Selecting a Google Reviews element jumps straight to its Settings, showing a prominent Connection + Design preset picker (with a hint to set up a source under Velox → Utilities → Google Reviews if none exist).
  • WordPress-data elements get a "Show which field" picker (post title / content / featured image / menu). Links/buttons get a URL field plus an Open-in-same/new-tab choice that is honoured on the front end.
  • Element settings are grouped into clear sections instead of being mixed in with style controls.

3.61.0 — Velox Builder: element-specific inspector (wave C)

  • The inspector now adapts to the selected element: each element type shows its style groups in an order that fits it, and picks sensible Essentials.
  • Text and headings lead with Typography; sections/divs/columns lead with Layout; buttons foreground Typography + Background; images and video lead with Size. No more Display-first on a text element.

3.60.0 — Velox Builder: layout + chrome rework (wave B)

  • Moved all working panels to the left: the Add element / Layers spine and the element inspector now sit side by side on the left, with the canvas filling the rest.
  • The Structure panel now opens on the right.
  • Brightened the whole editor a step and unified every button to one consistent style (no more mixed colours/gradients).
  • Reworked the top-bar right side: tool icons, then Publish and View page, then an Exit icon on the far right. The Exit icon opens a menu: Open frontend, Go to backend (WordPress editor), or View page in a new tab.

3.59.0 — Velox Builder: undo/redo + revert fixes, structure panel, delete sync (wave A)

  • Fixed the top-bar undo/redo arrows — they now step one change at a time instead of jumping two or doing nothing. Selecting elements no longer pollutes the history.
  • Fixed session-history revert: reverting to a point now restores exactly that state instead of wiping the page.
  • Added a Structure button in the top bar that opens a collapsible outline of the whole page; click a node to select it, click the caret to collapse/expand.
  • Only one panel (add element, CSS, history, structure, page switcher) can be open at a time now — opening one closes the others.
  • Overview no longer shows pages whose WordPress post was deleted, and delete now syncs both ways: deleting a page in the Velox overview trashes the bound WordPress page, and trashing/deleting a WordPress page removes its Velox document.

3.58.0 — Velox Builder: session history

  • The history (clock) button opens a session history panel: it starts empty when you open a page, lists each edit you make (add, delete, style, class, text…) newest-first, and lets you click any point to revert to it.
  • History is in-memory only — it clears when you close the editor, so nothing is stored on the server.

3.57.0 — Velox Builder: global CSS files editor

  • The code (</>) button now opens a right-side Global CSS panel where you create named CSS files and write CSS that applies to every Velox page.
  • Changes apply live in the editor canvas and save automatically; the concatenated global CSS is output on every built page. Basic sanitising strips any </style> or <script> breakout attempts.

3.56.0 — Velox Builder: entry/exit fixes + Edit-with-Velox meta box

  • Opening a page with Velox now inherits that page’s title instead of resetting to “Untitled”, and Exit returns you to that page’s WordPress editor (not the builder home).
  • Added an “Edit with Velox” meta box on the page/post editor (like Oxygen’s), showing Build or Edit depending on whether the page already has a Velox layout.
  • The page switcher loads the chosen document into the editor and updates the current title.

3.55.0 — Velox Builder: topbar full-width + missing icons

  • Fixed the top bar collapsing to a centred cluster — it now spans the full width, with the three zones (logo/title, breakpoints/undo-redo, actions) pushed to left/centre/right as designed.
  • Added the search, code (page CSS/JS) and history icons to the top bar right zone (they were in the design but missing from the build). Code toggles the live-CSS panel; search opens the page switcher.

3.54.0 — Velox Builder: Google Reviews + WordPress elements render live (waves 3–4)

  • The Google Reviews element now renders your real reviews on published pages, using the connection and preset you pick in the element Settings (via the [velox_reviews] shortcode). In the editor it shows a labelled placeholder.
  • WordPress-data elements now pull live data: Post title, Post content, Featured image and Menu/Nav render from the current post on the front end, with labelled placeholders in the editor.

3.53.0 — Velox Builder: inspector tabs (wave)

  • The inspector now has Essentials / All styles / Settings tabs: Essentials shows the common controls, All styles shows everything, Settings holds element-level options.
  • Class chips can be removed with an × and new classes added with “+ class”.
  • Settings tab: pick the heading level (H1–H6), set a link URL for buttons/links, and (for the Google Reviews element) choose a reviews connection and design preset from your Velox Reviews setup.

3.52.0 — Velox Builder: page switcher (wave 2)

  • Click the caret next to the page title to open a switcher: search across pages, posts and reusables, filter by All / Pages / Posts / Templates / Reusables, and see your Velox documents with status badges.
  • The switcher also lists WordPress pages and posts that aren’t built with Velox yet, each with a "Build →" action to open them in the builder.

3.51.0 — Velox Builder: new add-element panel (wave 1)

  • Replaced the old flat add-element list with a searchable, categorized accordion panel that opens on the left: Containers, Text, Links, Media, WordPress and Velox categories, each collapsible with icon element cards.
  • Many more elements: Grid, Spacer, Divider, List, Quote, Text link, Video, Icon, plus WordPress-data placeholders (post title/content/featured image/menu) and a Velox “Google Reviews” element.
  • Type-to-filter search across all elements. (Note: Video, Icon, WordPress-data and Google Reviews elements insert now; their live rendering lands in the next waves.)

3.50.0 — Velox Builder: editor chrome overhaul (wave 1)

  • Rebuilt the editor top bar into three zones: left = Velox logo (with a menu: Builder settings / Back to WordPress) + editable page title; center = breakpoints + undo/redo; right = Exit, View page, and the save/publish actions.
  • Save/Publish behaviour: a brand-new page shows a single Publish button; once a page has been published it shows both Save (admin-only draft) and Publish (live for everyone).
  • Left panel now has Add element, Reusables and Settings buttons plus a "Find layer" search that filters the layer tree.
  • Bigger editor canvas (up to 1200px) with tighter padding.

3.49.1 — Velox Builder: editor full-width fix

  • Fixed the editor not filling the screen — the canvas column was collapsing to content width, leaving a large empty area on the right. The three panes (layers, canvas, inspector) now span the full viewport.

3.49.0 — Velox Builder: name your pages

  • Added an editable title field in the editor top bar. Pages, templates and reusables can now be named (and renamed) instead of all saving as "Untitled" — the name is stored with the document and shows in every list.

3.48.0 — Velox Builder: reusables & template apply-rules, working

  • Reusables now insert into pages. The editor Add menu lists your reusable blocks; pick one and it drops in as a live reference — it renders inline (styled) in the canvas and on the front end. Editing the reusable updates every page that uses it.
  • Templates now apply as headers/footers. On the Templates screen, set any template as the site header or footer. Built pages are wrapped with them automatically, and all their CSS is merged into the page's single stylesheet.
  • The renderer compiles one only-used stylesheet covering the page, every reusable it references, and the active header/footer templates — so nothing is missing and nothing is duplicated.

3.47.0 — Velox Builder: all admin sections, working

  • Restored the full Velox Builder menu — Overview, Templates, Reusables, Classes, Global styles, Fonts & icons, Settings — and built each one for real (no placeholders).
  • Classes: a real manager listing every class used across your pages with usage counts; rename or delete a class site-wide (rewrites every page that uses it and regenerates their CSS).
  • Templates / Reusables: create, list, open and delete template and reusable documents (stored by kind); the editor now tracks which kind it is building.
  • Global styles: define colour tokens and a spacing scale that output as CSS custom properties (:root variables) on every built page.
  • Fonts & icons: register font families (Google Fonts by name or a self-hosted CSS URL) that load on every built page.
  • Settings: choose static-file vs inline CSS output, toggle minification, set the default container width — all persisted.

3.46.0 — Velox Builder: full-bleed admin, blank canvas, honest menu

  • The Velox Builder admin section is now full-bleed: WordPress update nags, other plugins' notices, Velox's own notices and the footer are all hidden on Builder screens, and the panel fills the whole content area.
  • New pages open on a blank canvas (no demo content). Empty pages show a clear "Add element" prompt instead of a white void.
  • Removed the placeholder Templates / Reusables / Classes / Global styles / Fonts / Settings menu items — these were non-functional stubs and should not have been shown. The menu now surfaces only what works: the Overview (which lists your real built pages) and the editor.
  • Overview lists your actual Velox Builder pages with their draft/published status; "New page" and "Edit with Velox" are the ways in.

3.45.1 — Velox Builder: admin layout fix + edit entry points

  • Fixed the Velox Builder admin section rendering as a blank white area — the panel was absolutely positioned and collapsed out of the wp-admin layout; it now sits correctly in the content area.
  • Added "Edit with Velox" entry points: a row action in the Pages and Posts list tables, and an admin-bar link when viewing or editing a page. Opening one binds (or creates) a builder document for that page so publishing updates the real page.

3.45.0 — Velox Builder: image element

  • The Image element is now real. Double-click it on the canvas (or use "Choose image" in the inspector) to open the WordPress media library, pick an image, and it renders in place — stored as its URL and shipped as a plain, lazy-friendly on the front end.
  • The standalone editor now loads the WordPress media library (wp.media) into its own document so the picker works inside the full-screen builder.
  • Empty images show a clear placeholder in the editor and simply output nothing on the live page until set.

3.44.0 — Velox Builder: hover & focus states

  • Every element can now be styled per interaction state. A Normal / :hover / :focus switcher sits under the class chips; pick a state and any property you set applies only in that state, falling back to Normal otherwise — exactly like a hand-written stylesheet.
  • States compose with the class cascade and breakpoints, so you can have (for example) a different button hover colour on mobile. The front-end renderer emits the matching :hover / :focus selectors, so states work identically on the live page — verified byte-for-byte against the editor output.
  • Backward compatible: existing documents (which only had normal-state rules) load and render unchanged.

3.43.0 — Velox Builder: full style controls

  • The inspector now covers a real styling surface — six sections: Layout (flex/grid, wrap, justify, align, gap, grid columns), Size (width/height, max-width, min-height), Spacing (all paddings & margins), Typography (size, weight, line-height, letter-spacing, align, transform, decoration, colour), Background & effects (background, opacity, box-shadow), and Border (width, style, colour, radius).
  • Sections collapse to keep the panel calm; the first three stay open by default.
  • Every property runs through the same cascade resolver (blue/orange/pink source dots) and the same static-CSS output, so all of it is class-first, responsive, and ships only-used CSS. The renderer whitelist and value sanitiser were extended to match — only known properties reach the page and values still cannot break out of a rule.

3.42.0 — Velox Builder: canvas text editing & drag-reorder

  • Edit text on the canvas: double-click any text element (heading, text, button) to edit it inline, right where it sits. Enter commits, Escape cancels — and it flows straight into the document like any other change (undoable, saved, published).
  • Drag to reorder & renest: drag any layer in the Layers panel to move it — drop above/below a sibling to reorder, or onto a container to nest inside it. Drop indicators show exactly where it will land, and a node moves with its whole subtree.

3.41.0 — Velox Builder: publish flow

  • Publish now takes a page live end to end. Hitting Publish saves the latest edits, binds the document to a WordPress page (creating one on first publish), flips it to published, and writes the static CSS — so the front-end renderer immediately serves it.
  • The editor reflects live state: a green "Published" button and a View page link straight to the live URL. Reopening a published document restores that state.
  • Unpublish reverts the page to draft; visitors fall back to the normal theme. The bound page is tagged so Velox-built pages stay identifiable.

3.40.0 — Velox Builder: front-end rendering

  • Saved Velox Builder pages now render on the live site. When a page is bound to a published builder document, Velox outputs its own standalone document — clean semantic HTML, no theme wrapper — via template_include.
  • Only-used CSS, as a static file: the page CSS is compiled from the document and written to uploads/velox/builder/doc-{id}.css, content-hashed for cache-busting, and rewritten on every save. If the uploads dir is not writable it falls back to a single inline style block. Either way, only the CSS the page actually uses ships — keeping Core Web Vitals green.
  • The PHP renderer produces byte-for-byte the same HTML and CSS (including responsive media queries) that the editor shows, so what you build is exactly what visitors get. Only known CSS properties reach the output and all values are sanitised, so the document model can never inject arbitrary CSS.

3.39.0 — Velox Builder: insert & save

  • Add elements: the Add button (top bar and layers panel) now opens a picker — Section, Div, Heading, Text, Button, Image, Columns — and inserts into the current container or after the selection. New elements render on the canvas immediately and seed a starter class.
  • Duplicate & delete: every selected element has duplicate and delete actions in the inspector header (Delete/Backspace works too); both are fully undoable.
  • Save & load: documents persist to the database. Save (button or ⌘S) writes the full document — tree, classes and content — and the editor reopens it on the same route. Save state is shown live in the top bar.

3.38.0 — Velox Builder: the editing engine

  • The Velox Builder editor is now live and functional. Opening the editor mounts a real three-pane workspace — layers spine, live canvas, and a class-first inspector — driven by a central store.
  • Live styling: changing a value in the inspector regenerates and injects CSS into the canvas instantly (no reload), the way a modern builder should feel.
  • Class-first cascade: the inspector computes where each style comes from — set on the active class (blue), inherited from a base/combo/wider breakpoint (orange), or an element-only override (pink) — matching Webflow-style resolution. Switching the active class re-points every indicator live.
  • Responsive: per-breakpoint editing (Desktop / Tablet ≤991 / Mobile ≤767) writes real media queries, desktop-first.
  • Undo/redo across the whole document. Element insertion, persistence (save/load) and front-end rendering are the next passes.

3.37.0 — Velox Builder (foundation)

  • New opt-in module: Velox Builder, a clean class-first visual page builder. This release lays the foundation — enable it under Utilities and a dedicated "Velox Builder" section appears in the menu (Overview, Templates, Reusables, Classes, Global styles, Fonts & icons, Settings), and the full-screen editor opens on its own route with no WordPress chrome.
  • The builder renders its own standalone document and is being built to ship only the CSS each page actually uses, keeping Core Web Vitals green. The editing engine and front-end rendering land in the next releases.

3.36.0 — Media Editor: choose how many images to show

  • The Media Editor (Alt text & titles) now has a "Show" control: pick 20, 50, 100, or All, or type a custom number. "All" loads every image in the library on one page instead of the old fixed 40-per-page cap.
  • Fixed: search on the Media Editor page was sending the wrong parameter name and being ignored — it now filters correctly.

3.35.0 — Google Reviews: Oxygen builder element

  • Added a "Velox Reviews" element to the Oxygen builder. Drop it on a page, pick a Connection and a Preset from two dropdowns, and it renders your reviews live in the builder — the same output as the shortcode, so styling stays driven by the preset (one source of truth).
  • The integration is defensive: it only loads inside Oxygen, and if the Oxygen element API differs on your version it degrades gracefully rather than breaking the builder — the [velox_reviews] shortcode always remains as a fallback.

3.34.0 — Google Reviews utility

  • New utility: Google Reviews. Show your Google reviews on the front end as a styleable slider or static grid.
  • Connect via Featurable (free, caches many reviews) or the Google Places API (official, max 5). Every connection must be named before it can be saved.
  • Build reusable design presets (slider or static grid) with full control: number of reviews, minimum rating, columns, slides per breakpoint, autoplay + speed, card background/radius/padding/gap/shadow, text/meta/star colours, name/text/avatar sizes, and toggles for avatar, date and stars.
  • Embed anywhere with a shortcode: [velox_reviews connection="…" preset="…"]. Reviews are cached for 6 hours so page loads never hit the API.
  • Note: an Oxygen editor tab for placing reviews visually is coming in a follow-up; for now use the shortcode.

3.33.0 — Bulk SEO actions in the Posts/Pages lists

  • Select any number of posts or pages and apply a Velox SEO change to all of them at once from the native Bulk Actions dropdown: set Noindex / Index, set Nofollow / Follow, and exclude from / include in the sitemap. A confirmation notice reports how many items changed, and the sitemap is rebuilt automatically after a bulk sitemap change.

3.32.0 — Webmaster verification + settings import/export

  • New SEO panel: Webmaster verification. Add site-verification tags for Google Search Console, Bing, Baidu, Yandex, Pinterest and Norton Safe Web. Paste either the bare token or the full tag the provider gives you — Velox extracts the token and outputs a clean tag in your on every page.
  • New SEO panel: Import / Export settings. Export all your Velox settings to a JSON file and import it on another site to replicate a setup in one go. Imports are whitelisted against known settings and type-checked, so a stale or hand-edited file can’t inject junk.

3.31.0 — Resize fix, risky-row spacing, builder-aware frontend bar, sitemap toggle, full dashboard catalog

  • Resizable SEO sidebar: the content inside now stretches to fill the new width instead of staying pinned at ~280px (no more empty gap).
  • Performance risky mode: fields and toggles no longer sit flush on the yellow warning line — added proper padding so nothing overlaps it.
  • Frontend admin tools now hide while you are editing a page in ANY builder (Oxygen, Bricks, Elementor, Divi, Beaver, Brizy, WPBakery, Cornerstone/Pro, Fusion/Avada, Thrive, Zion, Breakdance) and in the customizer preview.
  • Posts/Pages list: the Index column is now "Index, Links & Sitemap" with a third toggle to include/exclude a page from the sitemap right from the list (blue "Included" / red "Excluded"), saved instantly and the sitemap rebuilt on the spot. The separate Sitemap column was merged into this.
  • Dashboard "Everything in Velox" catalog now shows every utility — including Error Logger, Frontend Tools and PageSpeed — and displays switched-off utilities dimmed with an "Off" tag instead of hiding them.

3.30.0 — Editable Index & Links column, resizable SEO sidebar, sitemap independent of noindex

  • The "Index" column in the Posts/Pages list is now "Index & Links" and is clickable: toggle Index/Noindex and Follow/Nofollow straight from the list, saved instantly, badges update live.
  • The Velox SEO panel in the page editor is now horizontally resizable — drag its left edge to make it wider or narrower; the width is remembered per browser.
  • Sitemap inclusion is now controlled ONLY by the "Exclude from sitemap" toggle. noindex / nofollow no longer affect whether a page is in the sitemap — a noindex page stays in the sitemap unless explicitly excluded. The sitemap column reflects this (a noindex page shows "In sitemap").

3.29.0 — More SEO columns in the Posts/Pages lists

  • Added three columns and a length indicator to the Posts/Pages list (all shown only when the SEO module is on, toggled from Screen Options like the others):
    • Focus keyword — shows each page’s focus keyword (or "— none —").
    • Index — an Index / Noindex badge so you can spot pages accidentally hidden from search at a glance.
    • Sitemap — In sitemap / Excluded / Not listed (honest: a noindex page shows "Not listed" since it never reaches the sitemap).
    • Length badges on the SEO Title and Description columns: a colour-coded character count (green = good length, orange = short/long, red = way off) so bad-length meta stands out. Titles target 30–60 chars, descriptions 120–160.
  • The three new columns are display-only; the SEO Title and Description remain click-to-edit inline.

3.28.1 — Sitemap updates instantly when you exclude/include a page

  • Ticking "Exclude from sitemap" on a page now removes it from the sitemap immediately on save, and unticking adds it back — no manual Regenerate click needed. The bug: the sitemap was being rebuilt at the same moment the exclude value was written (same save_post priority), so it used the old value and lagged one save behind. The rebuild now runs late (priority 99), after every panel has saved its meta, so it always reflects the final state.
  • Removed a now-redundant early sitemap rebuild that regenerated with stale values.

3.28.0 — "Force-include all pages" sitemap repair

  • New button in SEO → XML sitemap: "Force-include all pages". If your sitemap only shows the homepage, this clears any leftover sitemap_exclude / noindex flags from every published page and post (including stuck maintenance-mode markers), switches the sitemap post types on, and regenerates. It reports how many hidden flags it cleared and how many URLs ended up in the sitemap.
  • Hardened the sitemap query with suppress_filters + ignore_sticky_posts so another plugin's query filters can no longer accidentally empty it.

3.27.0 — "Exclude from sitemap" moved to the Velox page panel + maintenance safety

  • The "Exclude this page from the sitemap" checkbox now lives in the Velox panel in the page editor (with the per-page optimization overrides), and has been removed from the SEO panel so there is only one control writing the flag — no more conflicting saves. The SEO panel still shows an "In sitemap / Not in sitemap" status indicator.
  • Fixed the root cause of "sitemap only contains the homepage": Velox maintenance mode noindexes all pages while the site is under construction, and toggling maintenance off from the frontend quick-panel did not release them, leaving pages stuck noindexed and out of the sitemap. Turning maintenance off from the quick-panel now automatically releases every page it had hidden. (The Maintenance page still offers the deliberate keep/release choice.)

3.26.0 — SEO title & description columns in Posts/Pages lists

  • The Posts and Pages list tables now show "SEO Title" and "SEO Description" columns (only when the SEO module is on). Toggle them from Screen Options ("Ansicht anpassen") like any column. Empty values show a clear "— add —" placeholder so you can see at a glance what still needs writing.
  • Edit them two ways without opening each page: WordPress Quick Edit (the SEO fields are added there and pre-filled), or click a cell to edit it inline and save instantly (Enter to save, Esc to cancel; Ctrl/Cmd+Enter for the description).
  • Also folds in the frontend admin bar fixes: the panel now renders reliably regardless of script load order, and the admin-bar toggle reloads so the page correctly reclaims/re-adds the reserved space and re-activates cleanly.

3.25.0 — Frontend admin tools (quick panel)

  • New utility: a small arrow pinned to the bottom-left of the FRONT END, visible to admins only. Click it to open a quick-action panel and click again (or Esc / click away) to hide it.
  • Panel actions: toggle the WP admin bar on/off (remembered per admin), purge the Velox cache, toggle maintenance mode, edit this page, open the Oxygen editor and Oxygen settings (shown only when Oxygen is active), open WordPress settings, and "View as visitor" which opens the current page rendered as a logged-out guest in a new tab (a signed guest render — it never touches your real login session).
  • It is its own on/off utility (Utilities → Frontend admin tools), off by default.

3.24.4 — Fix "meta value could not be updated" when saving an unchanged SEO flag

  • Publishing a page (typically a freshly-duplicated noindex/nofollow one) failed with the _velox_seo_noindex database error on the FIRST save when the flag was left as-is. Cause: when the value the editor sends already equals what is stored, WordPress's update_metadata() returns false (nothing changed), and the REST layer reports that as a database error. Toggling the flag made it a real change, which is why switching to index/follow and back "fixed" it. Two fixes: (1) duplicated pages now store the SEO flags in canonical boolean form, and (2) an update_post_metadata guard treats an unchanged flag save as success so the publish always goes through.

3.24.3 — Fix Duplicate not copying page-builder content

  • Duplicating a page built with Elementor, Oxygen, Bricks, WPBakery or similar produced a blank copy. The meta-copy step ran maybe_unserialize() on each value before add_post_meta(), which stripped the escaped slashes out of builder JSON blobs (e.g. Elementor's _elementor_data) and corrupted them. Meta values are now copied raw with correct slashing, so PHP-serialized arrays AND builder JSON round-trip byte-for-byte. Gutenberg/classic pages were unaffected (their content lives in post_content, which was always copied correctly).

3.24.2 — Properly fix SEO flag save error (boolean meta)

  • The 3.24.1 string-coercion approach did not fully fix the "Der Metawert von _velox_seo_noindex konnte in der Datenbank nicht aktualisiert werden" publish error. Root cause: the noindex / nofollow / sitemap-exclude toggles were registered as string meta, but the block editor and duplicate plugins send real booleans, and WordPress's REST round-trip comparison mismatched string vs boolean. These three flags are now registered as proper boolean meta (the standard Gutenberg toggle pattern) and the editor sends/reads real booleans. Existing '1'/'0' values still read correctly, so no data migration is needed.

3.24.1 — Fix "meta value could not be updated" on SEO flags

  • Publishing a page (often a duplicated one) could fail with "Der Metawert von _velox_seo_noindex konnte in der Datenbank nicht aktualisiert werden." The noindex / nofollow / sitemap-exclude flags are registered as string meta, but a duplicate plugin or REST client can send a real boolean, which the strict schema rejected. Their sanitize now coerces any value (boolean, int, '1'/'0', 'true'/'false', 'on'/'yes') to a clean '1'/'0', so the save always succeeds. No data migration needed — existing values keep working.

3.24.0 — Import All-in-One WP Migration (.wpress) backups

  • Backup & Restore now accepts All-in-One WP Migration .wpress files alongside Velox’s own .sql/.zip. Velox unpacks the .wpress container, extracts the database and wp-content files, and — the important part — rewrites the old site’s URL to this domain in a serialization-safe way (PHP-serialized option/widget values keep their correct byte lengths, so nothing corrupts). The result registers as a normal Velox backup and restores through the same path, with a safety backup taken first.
  • Large files are streamed in chunks during unpack, so memory stays flat.

3.23.0 — AI crawler control & llms.txt (SEO)

  • New AI crawlers panel in SEO: allow or block AI bots by what they do — training crawlers (GPTBot, ClaudeBot, CCBot, Google-Extended…), AI-search crawlers (OAI-SearchBot, PerplexityBot…) and on-demand fetchers (ChatGPT-User, Perplexity-User…). Your choices are added to robots.txt automatically, per group, with no hand-editing. Nothing is added when everything is allowed, so robots.txt stays clean.
  • New llms.txt: an optional virtual /llms.txt, auto-generated from your pages (title, tagline, key pages and posts as Markdown links) and fully editable. It is served like the virtual robots.txt. Note: Google has said it ignores llms.txt, so this is for the AI systems that do read it, not a Google-ranking boost.

3.22.0 — Email log now captures every email, plus failure alerts

  • The Mail & forms send log now records EVERY email your site sends — password resets, new-user notices, WooCommerce receipts and anything other plugins send — not just Velox contact-form and test emails. If an email goes missing, you can finally see whether it was even attempted and whether it failed.
  • New "Alert me when a send fails" switch: emails the site admin when an outgoing email fails (rate-limited to once per hour so a burst can’t flood your inbox). The alert itself is never logged or looped.

3.21.1 — Error Logger in the sidebar & off-canvas

  • The Error Logger now shows in the Velox sidebar and off-canvas menu under System once switched on, matching every other utility — it was reachable only from the Utilities hub before.

3.21.0 — Error Logger, and SEO moves into Utilities

  • New Error Logger utility: catches every PHP error, fatal and failed API/HTTP request as it happens, grouped into clean accordions by type (fatal / PHP warnings / API & HTTP). Each error shows where it happened, how often, and — in plain English — what it means and how to fix it, from a built-in knowledge base of common WordPress issues. Switch it on under Utilities; clear all or dismiss errors one at a time. Appears in the Velox sidebar and off-canvas menu under System when switched on.
  • PageSpeed is now a switch under Utilities like every other tool — turn it on or off whenever you want, and it appears in the sidebar under Essentials only when enabled. Its page is unchanged.

3.20.0 — Full German coverage across the entire plugin (PHP + JavaScript)

  • Completed German translation of everything the user sees. Every PHP admin string (1035) and every JavaScript-rendered string (723) now has a German entry — 1727 total.
  • Wrapped all the JavaScript UI that a PHP filter can never reach: toasts, the Custom Fields editor and field types, the Mail/SMTP setup, the block-editor SEO panel, the media picker, the snippets manager, and the dashboard. Each admin script now shares one translation dictionary through a small helper.
  • Added bin/check-i18n.php, a regression guard that scans all PHP and JS for any translatable string missing a German entry, so future features can be checked before shipping.
  • Fixed two translation-wrapping bugs found during the sweep: a local variable that shadowed the translate helper, and a value used in a comparison that must not be translated.

3.19.4 — Translate the "Everything in Velox" cards

  • The catalog grid tiles on the dashboard (Custom Fields / Field groups, Media Editor / Alt text & files, etc.) were rendered from a hardcoded array with plain escaping, so both the names and descriptions stayed English. Both are now wrapped and translated.

3.19.3 — Translate the sidebar, dashboard stats and action messages

  • The sidebar navigation labels and section headings (Utilities, Media Editor, Essentials, etc.) were rendered from hardcoded arrays and never translated — now wrapped and translated.
  • Dashboard stat lines (grade, "N views", "vs last week", "updated X ago", "N of M optimizations on", "/ N pages", the intro subtitle) were bare English literals — now wrapped and translated.
  • Added a JavaScript translation bridge (VELOX.i18n + a t() helper) and routed the action/confirmation toast messages through it, so those now appear in German too.

3.19.2 — Language actually applies everywhere + clearer switcher

  • Fixed the translation only partially applying (most of the UI stayed English). The gettext filter was caching an early "no translation" decision made before the admin language setting was readable, which locked the whole page into English. It now resolves the chosen language only once it is actually available, so the entire admin UI switches to German.
  • Removed the confusing "Follow WordPress" option — the switcher is now simply English / Deutsch.

3.19.1 — Restore clean pill look on the switcher

  • Removed the visible chevron from the language switcher button so it keeps the clean globe + label pill look. The menu still opens on click, with the checkmark on the active language.

3.19.0 — Working English/German switcher, full German translation

  • Rebuilt language switching from scratch. Instead of WordPress .mo files + locale (which never reliably applied because of just-in-time loading and caching), Velox now swaps strings directly through the gettext filter using a shipped PHP dictionary. This actually works, is scoped to Velox only (never touches the rest of wp-admin), and applies instantly on reload.
  • Added German back with a complete dictionary covering every translatable string in the plugin admin UI — 1031 entries, nothing left out.
  • New custom dropdown switcher (globe + current language + chevron, with a checkmark menu) that replaces the native select, so WordPress admin styling can no longer break its appearance.

3.18.3 — Language indicator is now a clean static pill

  • Removed the dropdown entirely (it only had English anyway, and WordPress kept rendering its own select box + arrow inside the pill). The top-right indicator is now a simple static pill: globe icon + "English". The picker returns properly when more languages are re-added.

3.18.2 — Fix double-chevron on language switcher

  • The switcher was showing two dropdown arrows (the custom chevron plus WordPress’s native select arrow) and splitting into two chunks. Forced appearance:none and removed the native background arrow so it renders as one clean pill.

3.18.1 — Reset to English + modern language switcher

  • Removed all translation files and trimmed the switcher to English only, as a clean baseline while the language-switching mechanism is reworked.
  • Redesigned the language switcher as a modern pill button that matches the Velox theme: white surface, hairline border, accent globe icon, custom chevron, and a subtle hover lift.

3.18.0 — Fixed 100+ untranslated strings across the whole admin

  • The original translation pass missed ~103 hardcoded English strings (buttons, card titles, panel headings, tooltips, the cookie-banner builder, PageSpeed labels) — so things like "Purge caches", "Edit", "Recommendations", "Mobile/Desktop" stayed English in every language. Every one of those is now wrapped and translated.
  • Regenerated the translation template with xgettext (canonical extraction) and rebuilt all 8 completed languages (German, Spanish, French, Italian, Portuguese, Dutch, Polish, Japanese) to 100% coverage of the human-readable admin UI.
  • Turkish remains an English-fallback scaffold and will be completed next.

3.17.3 — Language switcher actually applies now

  • Fixed the chosen language never taking effect (UI stayed English). WordPress 6.5+ loads translations just-in-time using the site locale, which bypassed the plugin_locale filter. Velox now explicitly unloads and force-loads the selected .mo up front in wp-admin, so the picked language is what renders.

3.17.2 — Language switcher background fix

  • Removed the full-width white bar behind the language switcher. It was caused by reusing an existing .velox-topbar class that had its own background; renamed to .velox-langbar so the switcher now sits transparently in the top-right with no bar behind it.

3.17.1 — Language switcher scope + style fix

  • Fixed the switcher changing ALL of WordPress admin instead of just Velox. Removed the determine_locale filter (which has no text domain and affected the whole admin); the language is now applied only through the domain-scoped plugin_locale filter, so it changes Velox screens and nothing else.
  • Made the top-bar language switcher smaller and removed its background and border.

3.17.0 — Language switcher fix + moved to top bar

  • Fixed the admin language never changing: translations now load on the init hook and the chosen language is applied via the determine_locale filter (which WordPress 6.x consults first in wp-admin), so picking a language now actually switches the UI instead of staying English.
  • Moved the language switcher out of Settings. It now lives in a compact top bar, pinned to the top-right of every Velox page next to the header, with a globe icon. Changing it saves and reloads immediately.

3.16.9 — Japanese complete

  • Japanese (ja) now covers 100% of the human-readable admin UI — every label, button, message, hint and long description, including all reconstructed sentences with placeholders. Uses WordPress-JP terminology (ダッシュボード, 投稿, 外観, 固定ページ) and consistent polite keigo (です/ます). Only literal code tokens stay untranslated.

3.16.8 — Polish complete

  • Polish (pl_PL) now covers 100% of the human-readable admin UI — every label, button, message, hint and long description, including all reconstructed sentences with placeholders. Uses WordPress-PL terminology (Kokpit, Wpisy, Wygląd) and the correct 3-form plural rule. Only literal code tokens stay untranslated.

3.16.7 — Dutch complete

  • Dutch (nl_NL, formal "u") now covers 100% of the human-readable admin UI — every label, button, message, hint and long description, including all reconstructed sentences with placeholders. Only literal code tokens stay untranslated.

3.16.6 — Brazilian Portuguese complete

  • Brazilian Portuguese (pt_BR) now covers 100% of the human-readable admin UI — every label, button, message, hint and long description, including all reconstructed sentences with placeholders. Only literal code tokens stay untranslated.

3.16.5 — Italian complete

  • Italian (formal "Lei") now covers 100% of the human-readable admin UI — every label, button, message, hint and long description, including all reconstructed sentences with placeholders. Only literal code tokens stay untranslated.

3.16.4 — French complete

  • French (formal "vous") now covers 100% of the human-readable admin UI — every label, button, message, hint and long description, including all reconstructed sentences with placeholders. Only literal code tokens stay untranslated.

3.16.3 — Spanish complete

  • Spanish (formal "usted") now covers 100% of the human-readable admin UI — every label, button, message, hint and long description, including all reconstructed sentences with placeholders. Only literal code tokens (robots.txt, type:post, etc.) stay untranslated.

3.16.2 — German 100% + sentence reconstruction

  • Reconstructed 70 split sentence-fragments across all admin views into whole translatable strings (printf with placeholders for inline code/links), so long help text no longer mixes languages.
  • German (formal "Sie") now covers 100% of the human-readable admin UI — every label, button, message, hint and long description. Only literal code tokens (dashicons, type:post, .htaccess, etc.) remain untranslated, as they must.

3.16.1 — German translation expanded

  • German (formal "Sie") now covers 96% of the admin UI, including all the longer descriptions and hints. The remaining few are short sentence-fragments that will be completed in a later pass.

3.16.0 — Velox speaks your language

  • New Language switcher in Settings: choose which language Velox's own admin screens are shown in, independent of your WordPress site language. WordPress and your other plugins are unaffected.
  • English and German (formal "Sie") ship complete. Spanish, French, Italian, Portuguese (BR), Dutch, Polish, Japanese and Turkish are scaffolded and fall back to English until their translations are filled in.
  • The entire admin UI — every screen, panel, label, button and hint — is now translatable, wired through the standard WordPress translation system.

3.15.2 — Snippets never silently deactivate themselves

  • Velox no longer switches a PHP snippet off on its own. Previously a snippet could quietly flip to inactive after a runtime error, a leftover "execution breadcrumb" from an earlier request, or a shutdown-time fatal — often with nothing written to the error log, so it looked like the snippet "deactivated itself" for no reason. All three of those paths now log a clear [Velox] line (naming the snippet, the message, and the file/line) and leave the snippet active. You stay in control of what's on.
  • Fixed the crash guard referencing an undefined E_COMPILE constant, which made the guard itself fatal instead of doing its job.
  • Snippet syntax-checking now uses a proper tokenizer pass instead of an if (false) { … } eval wrapper, so validating a snippet can never collide with or redeclare the live copy.

3.15.1 — Maintenance now really does hide everything

  • 3.15.0 put the hide-from-search behaviour behind its own switch that defaulted to off, so turning maintenance on did nothing. The switch is gone: maintenance mode hides everything from search, full stop.
  • Pages now report noindex, nofollow the moment maintenance goes on, rather than only once the background pass had finished writing to every post — and it no longer depends on the SEO module being switched on.
  • The "what should happen now?" question is worked out from the pages themselves instead of from a flag set at the moment you flipped the switch. If it was ever missed there was no way back to it; now it keeps asking until you answer, and closing it snoozes it only until the next time maintenance is touched.

3.15.0 — Maintenance mode can hide everything from search

  • New switch on the Maintenance page: Hide all content from search engines. Turn it on with maintenance and every page, post and product is set to noindex, nofollow.
  • Anything you create or duplicate while the window is open starts hidden too, so work done during a rebuild cannot go live in search before you have looked at it.
  • Pages that were already set to noindex before you switched this on are left completely alone. Velox only records the ones it hid itself, so nobody's existing setting gets trampled and there is nothing to restore afterwards.
  • Switching maintenance back off asks what should happen: make everything visible again, keep it all hidden, or pick page by page — anything left unticked stays hidden. The question appears wherever you switched maintenance off, including the admin-bar shortcut.
  • Both jobs run in batches, so a site with thousands of posts will not time out.

3.14.1 — HTML lang switcher now appears in the navigation

  • The new HTML lang switcher was reachable only from the Utilities hub. It now sits in the Velox side navigation under "Site & visitors" and in the dashboard shortcut grid, like every other tool.
  • File Manager had the same problem and was missing from both lists since it shipped. It is now in the navigation under "System" and in the shortcut grid.

3.14.0 — HTML lang switcher

  • New utility: HTML lang switcher. Sets the lang attribute on the <html> tag for sites where a theme or builder hard-codes it and the WordPress site language never reaches the page. Screen readers and search engines both read that attribute to decide what language a page is in, so a German site serving lang="en-US" is worth fixing.
  • The page reads your live front page in the browser and shows the attribute that is actually being served, rather than assuming the setting worked — which is the whole reason the tool exists. A coloured dot flags whether it matches what WordPress thinks it should be.
  • Pick a language from the dropdown, or type your own tag. A before/after line shows exactly what the <html> tag will look like once you save.
  • Switches on and off from Utilities like every other tool, and does nothing at all while it is off.
  • Fixed: --vx-mono was used in eight places across the admin stylesheet but never defined, so code chips, file paths and URL rows had been falling back to the normal interface font instead of monospace.

3.13.5 — SEO sidebar rebuilt to the approved design

  • The score ring and the long checklist are gone. Status now reads as a row of pills — Indexed, In sitemap, No description — so the state of the page is one glance instead of seven lines.
  • A Desktop / Mobile switch sits at the top and the search preview follows it, including the shorter description Google shows on phones.
  • Sections are titled and separated properly, the field labels read as sentences with the character count on the same line, and the inputs got a proper reset so WordPress admin styling stops overriding them.
  • Social preview and Advanced are collapsed rows with a summary of what is inside, and the focus keyword moved to Advanced next to the canonical URL.
  • The sitemap control is now "Include in sitemap" and reads on when the page is included, instead of an inverted "exclude" toggle.

3.13.4 — The sidebar content actually widens now

  • Dragging the sidebar moved its edge but the fields stayed narrow. WordPress re-applies its own width to one of the wrappers after Velox sets it, so the value Velox wrote was overwritten on the next render and the content snapped back to 280px.
  • The width is now applied from a stylesheet rather than written onto the elements, which WordPress cannot overwrite. The preview and the fields fill whatever width you drag out, and stay there while you type.

3.13.3 — Dragging the sidebar wider now widens the content too

  • Resizing the sidebar moved its edge but left the fields at their old width. WordPress puts wrappers between the sidebar and the panel that carry their own fixed width, and only one of them was being cleared. All of them are now, so the preview and the fields fill the space you drag out.
  • The widths are re-applied if the editor re-renders and swaps those wrappers out, which previously snapped the content back to its original width mid-edit.

3.13.2 — Resizable SEO sidebar, and the counter bar stops crossing out the count

  • The editor sidebar can now be dragged wider. WordPress fixes it at 280px with no way to change that, so Velox adds a handle on its left edge — drag to resize, double-click to go back to normal. The width is remembered, and only applies while the Velox SEO panel is open.
  • A long search title used to push the whole panel sideways and leave a horizontal scrollbar under it. Long words now wrap instead.
  • The character-count bar sat on top of the count itself and struck it through. The count has moved up next to the field label, where it reads as "48 / 60", and the bar sits under the input.
  • The search preview shows the domain and a breadcrumb on separate lines, the way Google renders it, instead of one long URL broken mid-word.
  • Search title and meta description gained placeholders showing what happens if you leave them empty.

3.13.1 — Field group header no longer goes dark on hover

  • Hovering a Velox field group in the post editor turned its header near-black. Oxygen's admin stylesheet paints every meta box header with its dark colour on hover, and its selector outranked ours, so our styling never applied.
  • The field group header now shows a light grey hover instead, with the title and the collapse arrow kept legible.
  • The per-page "Velox" optimizations box was one selector away from the same problem and got the same guard.

3.13.0 — Velox SEO panel rebuilt

  • The SEO sidebar now tells you how the page is doing instead of only holding fields. A score and a checklist sit at the top, in the same spirit as the SEO health screen but for the page you are editing.
  • Each check names the consequence rather than the rule — "No meta description, Google writes its own" — and covers the search title, description, focus keyword, indexing, sitemap, whether the page has an H1, and whether its images have alt text.
  • Missing title and missing description are now reported separately. Previously only the description was flagged, so a page with neither showed a single vague warning.
  • Focus keyword moved up next to the fields it judges, and now reports whether it actually appears in the title and description.
  • Character counts gained a bar under each field that turns amber near the limit and red past it, and the preview shows a proper empty state instead of instructions.
  • Search engines, Social and Advanced are collapsed by default, so the checklist and preview are what you see first.
  • Checks that need the page content (H1, image alt text) are skipped rather than failed on builder-made pages, which have no blocks to read.

3.12.4 — Actually beat Oxygen’s meta box styling

  • The previous fix did not work. Oxygen ships "#editor .postbox > .postbox-header:hover { background: var(--oxy-dark) !important }", and since both rules were marked important the more specific selector won — which was Oxygen’s. Velox now matches that structure with two ids so its own box keeps normal colours on hover. Verified in a browser against the real rule; other meta boxes on the screen are left exactly as they were.

3.12.3 — Fix the Velox meta box turning dark

  • The Velox box in the page editor changed colour on hover, with the header going black and the title becoming unreadable. That comes from other editor styling on that screen — Oxygen renders its own meta boxes dark, and it bleeds into every box on the page. Velox now pins its own box to normal WordPress colours so it stays readable whatever else is loaded, scoped to that box alone so nothing else on the screen is touched.

3.12.2 — Edit SEO opens the panel for you

  • Clicking Edit SEO in the health list now opens that page in the editor with the Velox SEO sidebar already open, and puts the cursor in the first field that is still empty — so you land on the thing you came to fix instead of hunting for the panel.
  • Works with both the current and older editor sidebar APIs, and retries briefly while the editor mounts rather than firing once and missing.

3.12.1 — SEO health: pages with no SEO at all

  • Added two checks that were missing: pages with no search title, and pages with no SEO set at all — neither a title nor a description, where Google is guessing both. The summary now counts pages with SEO set against pages with none.
  • Made the drill-down visible. Expanding an issue was a faint grey chevron that did not look clickable; it is now a proper "View pages" button that flips to "Hide" when open.
  • Expanding is handled by one delegated listener on the list rather than re-binding every row on each render, so it cannot silently stop working.

3.12.0 — SEO health

  • Added an SEO health panel to the SEO screen. It checks every published page and shows the counts at a glance: pages checked, indexable, set to noindex, with a description, and missing one.
  • Below that, the issues worth fixing — pages with no meta description, images with no alt text, titles over 60 characters, duplicate titles competing for the same search, and anything set to noindex. Checks that come back clean are shown as Clear rather than hidden, so you can see they were actually run.
  • Click any issue to see exactly which pages are affected, each with a link to edit its SEO and to open the page itself. Alt text links through to the Media Editor, which is where that gets fixed.
  • The scan reads the database directly, so it is immediate and needs no crawling.

3.11.2 — Fix: resize controls missing from the media modal

  • The resize controls added in 3.11.1 never appeared in WordPress’s Attachment details panel. The media modal builds that panel over AJAX, and the filter that adds the controls was deliberately skipped on AJAX requests — so the field was never generated. It is now registered for those requests too.

3.11.1 — Resize from the WordPress media library too

  • The resize controls now also appear in WordPress’s own Attachment details panel, so you can resize straight from the media library or the picker in any editor, not only from Velox’s Media Editor.
  • Same behaviour there: type a width and the height follows the original proportions, the link button unlocks it, quick presets from 50% to 200%, and the thumbnail refreshes in place once it is done.
  • Only shown for images (never SVGs) and only to users who can manage options, since that is what the resize endpoint requires.

3.11.0 — Resize images from the Media editor

  • Click any image in the Media editor to resize it. Enter a width and the height follows automatically from the original proportions (and the other way round); the link button turns that off if you want to stretch it deliberately.
  • Quick presets for 50%, 75%, original, 150% and 200%, and hovering a thumbnail now shows its current dimensions.
  • Images can be scaled up as well as down. WordPress refuses to enlarge through its normal resize call, so this scales through a full-frame crop instead.
  • The file is replaced in place and its thumbnails and srcset are rebuilt, so the filename and every existing link to the image keep working. SVGs are refused, since vectors scale on their own.

3.10.6 — Two groups, working sizes, readable provenance

  • Dropped the Possibly used group. Anything merely mentioned in the database but never rendered on a page now sits in Not in use, where it belongs — with a note saying where it was mentioned, so you can still see why it turned up.
  • Renamed Not found to Not in use.
  • Fixed the size total always reading 0 KB. The rewritten scanner returned a pre-formatted size string while the view still expected raw bytes, so every total added up to nothing. It sends real byte counts again.
  • Fixed the "Seen on" line being cut off. It was locked to a single line with an ellipsis, so anything longer than the card was unreadable; it now wraps to two lines.

3.10.5 — Possibly-used cleaned up, archives crawled

  • Builder templates are now excluded from the database passes as well, not just the crawl. Their stored layout data was still producing a database "mention", which pushed template demo images into Possibly used even though they appear nowhere on the site.
  • The crawl now also reads archive pages: custom post type archives, the blog page, and category and tag listings. Images that only ever appear on a listing page — never on an individual permalink — were being missed and reported as unused.

3.10.4 — Stop crawling builder templates

  • The crawl was walking page-builder template posts. Oxygen (and Elementor, Bricks, Divi, Beaver, WPBakery and block themes) register their templates and design libraries as public post types, so the crawler was opening each template on its own and marking whatever demo content it contained as "in use" — which is why artwork that appears nowhere on the site kept showing up as used, credited to a /?ct_template= URL.
  • Builder template and library post types are now excluded, and any permalink that is a builder preview URL is skipped. Templates that are genuinely in use are still covered, because they render as part of the pages that use them.

3.10.3 — "In use" now means proven, not guessed

  • Reworked how a verdict is reached. A string found somewhere in the database can no longer mark an image as in use — only real evidence can: the crawl actually rendering it on a page, or WordPress structurally pointing at it (featured image, product gallery, site logo or icon). Everything else that is merely mentioned somewhere is now "Possibly used".
  • This is why wrong files kept appearing under Used: a mention in a draft, an old theme setting, or a stale builder CSS cache file was enough to promote an image to "in use".
  • Stopped scanning page-builder CSS caches. Builders keep generated stylesheets for pages that no longer exist, so images from deleted pages looked used forever. The crawl reads the stylesheets pages genuinely load instead, which is both accurate and current.
  • The media view now has three real groups — Not found, Possibly used, In use — and only Not found can be selected for deletion.

3.10.2 — The media scan now reads your actual pages

  • Added a real crawl. The scan now reads every published page, post and custom post type, plus the homepage, and records which images are genuinely rendered — rather than inferring usage from database strings. Because it reads finished markup, it works the same for Oxygen, Elementor, Bricks, Divi, Beaver and anything else: by the time a page is output, it is all just img tags and url().
  • The crawl runs from your browser rather than the server, so it is unaffected by hosts that block loopback requests — which is why the old front-end pass silently did nothing on some setups.
  • Linked stylesheets are fetched and read too, so CSS background images are caught. That was the single biggest blind spot: a background defined in a stylesheet is mentioned nowhere in the database.
  • Anything the crawl actually rendered is marked used outright and says which page it appeared on, overriding weaker database guesses.
  • The summary now reports crawl coverage (for example "read 47 of 52 pages"), so "no reference found" is a statement about pages actually checked instead of an assumption.

3.10.1 — Media scan: stop images vouching for themselves

  • Fixed the big one: every attachment stores its own file path in its own postmeta (_wp_attached_file, and every generated size in _wp_attachment_metadata). The scan read all postmeta, so every image referenced itself and the entire library came back "used". Attachment-owned meta is now excluded, along with revisions and trashed posts.
  • A bare number in a custom field is no longer treated as an image reference. Prices, counts, order numbers and timestamps all look like attachment ids; it now only counts when ACF has registered a matching image field alongside it.
  • An "id" in builder or block JSON only counts when it sits next to an uploads URL, so navigation items, form fields and settings no longer mark random images as used.
  • The scanner no longer reads its own saved results, blueprints or transients back as evidence of usage.

3.10.0 — Unused media rebuilt

  • Replaced the media scanner. It used to ask "for each image, does it appear anywhere?", which meant building huge content blobs, capping the work at 400 images and 20 pages, and guessing. It now walks every place a reference can live once, indexes what it finds, and checks attachments against that index — in resumable batches with a progress bar, so a large library cannot time out.
  • Removed the dependency on loopback HTTP requests. The old front-end pass fetched pages over HTTP and silently skipped everything when the host blocked loopback (common on IONOS and similar), so on those sites it contributed nothing at all.
  • Much wider coverage: posts and pages, custom fields and page-builder data, the options table (theme mods, widgets, customizer, Oxygen settings), category and user meta, theme and child-theme files, builder CSS caches, and Additional CSS. Featured images, product galleries and the site logo and icon are recognised as hard references.
  • Fixed images being wrongly reported as unused. Resized, scaled and WebP-converted variants now normalise to the same key as the original, so an optimiser rewriting hero.jpg to hero.webp no longer makes the original look unused. JSON-escaped URLs and relative ../uploads/ paths in stylesheets are matched too.
  • Fixed images being wrongly reported as used. Post revisions are no longer scanned, so an image removed from a page is no longer kept alive forever by an old revision.
  • Results now say where a file was found, and separate "possibly used" (a weak match, such as a bare ID in a custom field) from "no reference found", so only genuinely unreferenced files are offered for deletion.

3.09.79 — Style panel controls stop fighting WordPress

  • Fixed the number fields and dropdowns in the Style editor rendering wrong. WordPress’s own admin stylesheet puts a border, padding, line-height and a 30px minimum height on every input and select, and its selectors were outranking ours — so the input drew its own box inside the field and pushed the unit outside it, and dropdowns came out taller than everything else.
  • All controls in the panel now carry a scoped reset that WordPress cannot override, so a control is always exactly one 32px box: value, stepper and unit inside a single border, and dropdowns matching the number fields. The folder manager’s name field uses the same reset.

3.09.78 — Gradient fixes and quieter number fields

  • The gradient preview bar is now live. It was only redrawn when the whole panel re-rendered, so it kept showing the default blue-to-purple while your actual colours were something else entirely. It now follows the From, To, Type and Angle controls as you change them.
  • Choosing Gradient seeds the From and To colours instead of leaving them on Inherit, so the bar and the form always agree.
  • Fixed the Angle field showing px. A number field now defaults to the first unit it actually allows, so Angle shows deg and line height shows no unit at all.
  • Fixed a stored angle like "135deg" being written into the preview as "135degdeg", which silently broke the gradient in the live preview.
  • Toned down the unit chip in number fields. It had a grey pill background that made every field look like two separate boxes; it is now quiet text that only lifts on hover, so the value, stepper and unit read as one control. Non-px units still tint so they stand out.

3.09.77 — Folders: default names and a cleaner manager

  • Folders left without a name are no longer silently discarded when you save. They get a sensible default (Folder 1, Folder 2 and so on) instead of vanishing.
  • Rebuilt the folder manager to match the style editor: a proper header with a subtitle, colour swatches that show the chosen colour directly rather than a raw colour input, slim 32px name fields, an icon delete button that turns red on hover, a dashed Add folder button, an empty state, and a footer with Cancel next to Save.

3.09.76 — Deleted view fixed, and counts stop lying

  • Fixed the Deleted button in the new rail doing nothing. The rail buttons were missing the class the filter handler looks for, and the handler was bound to the top bar only, so clicks in the rail never reached it. Inbox and Deleted in the rail both work now.
  • Entry counts no longer include deleted submissions. A form showing "4 entries" with an empty list was counting four entries sitting in Deleted; totals, the per-form count and the last-7-days figure now count only live entries.
  • Added a separate Deleted box beside the other stats, and the per-form entries page shows how many of that form’s entries are in Deleted.

3.09.75 — Inbox folder rail

  • Folders and Deleted moved out of the top filter bar into a left rail, so they read as places you go rather than chips squeezed in beside the filters.
  • The rail lists Inbox with a total count, then your folders as full rows with their colour dot, name and a count of what is in them, then New folder, with Deleted pinned to the bottom behind a divider. Deleted turns red when active.
  • The top bar now carries only the status filters — All, Unread, Pinned and Done — each with an icon and count.
  • On screens under 1180px the rail collapses to icons only so the reading pane keeps its room.

3.09.74 — Style fields rebuilt, icon actions, copyable shortcode

  • Fixed the number fields in the Style editor. The stepper buttons had their own grey background, so every field read as three separate boxes instead of one control. The stepper is now transparent and only fades in on hover or focus, and the value, stepper and unit all sit inside a single bordered field.
  • Dropdowns (Weight, Type, Position and the rest) now render without native browser chrome, so they are exactly the same 32px height as every other control. Verified across all nine controls in the panel.
  • Deleted submissions use icon buttons with tooltips instead of full-width Restore and Delete forever buttons, and the "No submissions yet" panel no longer shows while viewing Deleted.
  • Form rows use icon buttons for entries, edit and delete instead of three text buttons.
  • The shortcode in the forms list is now click-to-copy, the same as in the editor, and flashes green when copied.

3.09.73 — Style editor: full control set, and custom styles win again

  • FIXED: custom form styles were being overridden by the plugin’s own base stylesheet. The base input rule used a chain of :not() selectors, and each one adds specificity, so it outscored the per-form rules and silently killed them. The exclusions now sit inside :where(), which adds none, and per-form styles are printed after the base sheet instead of before. Anything you set in the Style editor now actually applies.
  • Every target now has the full set of controls: background (solid colour, linear or radial gradient with angle and both stops, or an image with size, position and repeat), size (width, height, min height, max width), text (size, weight, line height, letter spacing, colour), shape (corner, border, border colour), spacing (padding and margin on all four sides) and shadow.
  • Shadow keeps the None / Soft / Med / Strong presets and adds Custom, with X, Y, blur, spread, colour and inset, plus a live preview of the result.
  • Colour rows are now laid out with the label on the left and the swatch, hex and reset pinned right, so the value no longer sits underneath the label text.
  • Every control in the panel is the same slim 32px height — number fields, dropdowns and colour inputs all match, and one spacing scale is used throughout.
  • Number fields gained stepper arrows and keyboard support: click the arrows or use up and down (hold shift for steps of ten).

3.09.72 — Mail & forms: live updates, inbox actions, delete fix

  • Fixed entries not deleting. Deleting an entry soft-deletes it, but the entries list never filtered deleted rows out, so everything reappeared on reload. It now excludes them, and the confirmation says the entry moves to Deleted (restorable from the inbox) rather than claiming to delete permanently.
  • The inbox and the per-form entries list now update on their own — new submissions appear and removed ones disappear without reloading the page.
  • The inbox always shows its full interface. An empty inbox now shows a small message inside the list instead of replacing the filters, folders and reading pane with a paragraph.
  • Inbox rows gained hover actions: pin, mark done,