[license]: /LICENSE [license-badge]: https://img.shields.io/github/license/zzsj0928/luci-theme-liquid?style=flat-square&a=1 [prs]: https://github.com/zzsj0928/luci-theme-liquid/pulls [prs-badge]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square [issues]: https://github.com/zzsj0928/luci-theme-liquid/issues/new [issues-badge]: https://img.shields.io/badge/Issues-welcome-brightgreen.svg?style=flat-square [release]: https://github.com/zzsj0928/luci-theme-liquid/releases [release-badge]: https://img.shields.io/github/v/release/zzsj0928/luci-theme-liquid?style=flat-square [download]: https://github.com/zzsj0928/luci-theme-liquid/releases [download-badge]: https://img.shields.io/github/downloads/zzsj0928/luci-theme-liquid/total?style=flat-square [en-us-link]: /README_EN.md [zh-cn-link]: /README.md [official]: https://github.com/openwrt/openwrt [immortalwrt]: https://github.com/immortalwrt/immortalwrt [luci-mod]: https://github.com/xylz0928/luci-mod

# ๐Ÿ’ง luci-theme-liquid **macOS-style Liquid Glass OpenWrt LuCI theme**, for **LuCI โ‰ฅ 23** (OpenWrt 23.05 / 24.10 / master). Supports **light / dark / auto** modes, **5 accent colors + a custom color picker** and adjustable blur & transparency; frosted glass design across the login page, sidebar, content cards, dropdowns and tooltips. [![license][license-badge]][license] [![prs][prs-badge]][prs] [![issues][issues-badge]][issues] [![release][release-badge]][release] [![download][download-badge]][download] **English** | [็ฎ€ไฝ“ไธญๆ–‡][zh-cn-link] [Features](#features) โ€ข [Changelog](#changelog) โ€ข [Compatibility](#compatibility) โ€ข [Building & Installation](#building--installation) โ€ข [Screenshots](#screenshots) โ€ข [Credits](#credits)
## Features - **Liquid glass design language**: sidebar, content cards, login card and footer share a frosted-glass look (blur + highlight + accent glow); the dark mode glass is more solid for readable text. - **Light / dark / system**: one tap in the top bar; settings are stored on your router so they survive new browsers and devices; applied before paint with no flash โ€” the lock screen has the switch too. - **Accent colors**: **Distant Blue**, **Burgundy Red**, **Sunset Gold**, **Dusk Purple**, **Peridot Essence**, plus a custom hex color (`#RRGGBB`) โ€” menus, hover slider, buttons, tabs and the logo all follow. - **Glass opacity slider**: drag 0โ€“100 in the top-bar color area to tune the glass live, click the default tick to reset; separate light / dark defaults; menus, buttons and accent backgrounds follow; also on the lock screen. - **Menu search**: the top-bar search button pushes down a drawer-style search box that filters menu items as you type, matching both Chinese names and English titles; click outside or the button again to close. - **Sidebar menu**: all top-level menus collapsed by default โ€” click a level-1 menu to expand its submenu; hover-tracking slider + selected glass capsule; multi-instance entries (e.g. Dropbear) split into their own cards; the mobile slide-out menu avoids the top bar and closes on outside taps. - **Dropdown controls**: glass capsule look, width follows the longest option, the opened list flips upward near the window edge and never flashes when clicking the content area; clearer highlights in dark mode. - **Adaptive tables**: equal-height cells per row; when a table no longer fits the screen, action buttons stack one per line so text keeps its width โ€” no squeezed or clipped columns; on phones the table stays inside the screen with no sideways scrolling. - **Interfaces / Devices pages**: uniform 24px interface icons, forced opaque (link state is told by the icon itself); rows keep equal heights, buttons stay on one line and stack only when space runs short; interface boxes keep a 4px gap from their row card on mobile. - **Mobile adaptation**: modals at 95% width with nested cards stepping in per layer; the drawer menu closes on tapping outside and starts collapsed with no first-load flash; toast buttons wrap instead of overflowing. - **Online update check**: click the footer version to check for a new release and install it in one click, with four clear states (checking / up to date / update available / failed); mobile footers show the theme version too. - **Notifications**: success messages (e.g. "password changed") appear as a centered glass dialog that closes after 6 seconds. - **Lock screen (login)**: macOS-style frosted login card + Monterey wallpaper (light/dark) + optional **Bing daily wallpaper** (auto-fetched and cached) + a glowing waterdrop logo; mode, accent and opacity picked before signing in can be applied with one click after login. - **Tooltips**: frosted glass background, shown at the page top level (never hidden behind a neighbouring card), auto-avoid viewport edges, mutual exclusion against stale popups. - **SVG icons**: network / interface status icons taken from [xylz0928/luci-mod][luci-mod] `immortalwrt-24.10`; UI element icons (sun / moon / auto / refresh / lock / search / close / chevron) are built-in SVGs. ## Changelog - **2026-09-28 ยท v1.0 (major release)**: opacity slider + online update + lock screen polish + wide-table adaptivity - **Glass opacity slider**: drag 0โ€“100 in the top-bar color area for an instant preview, click the tick to reset; menus, buttons and accent backgrounds follow along, with separate light / dark defaults; also on the lock screen, and the setting stays on your router across devices - **Online update check**: click the footer version to check and install a new release; checking / up to date / update available / failed are all clearly shown, and failures report an error instead of hanging; mobile footers show the version too, with bigger buttons - **Lock screen**: mode, accent and opacity picked before signing in are offered with one click after login (30-second countdown, dismissible); the logo gets a frosted glass glow; fixed mode-switch flicker and accidental submits - **Dropdowns**: refreshed glass look โ€” width follows the longest option, menus flip up near the edge, no flash on click; clearer highlights in dark mode; previously broken dropdowns (e.g. wireless settings) work again - **Notifications**: success messages (e.g. "password changed") now show as a centered glass dialog that closes after 6 seconds; buttons wrap on phones instead of overflowing - **Wide tables**: when a table no longer fits the screen, action buttons stack one per line so text keeps its width โ€” no more squeezed or clipped columns; on phones the table stays on screen with no sideways scrolling - **Fixes**: the sidebar slider no longer sticks to the previous category; OpenClash no longer flashes dark on open; the selected tab uses a high-contrast color for dark mode > ๐Ÿ“œ Full changelog (all versions since v0.1) lives in **[ChangeLogs_EN.md](ChangeLogs_EN.md)**. ## Compatibility Targets modern LuCI environments based on [OpenWrt][official] and [ImmortalWrt][immortalwrt] (LuCI โ‰ฅ 23, OpenWrt 23.05 / 24.10 / master). ## Building & Installation This package uses LuCI's `luci.mk` packaging (`include $(TOPDIR)/feeds/luci/luci.mk`), so the build tree needs `./scripts/feeds update -a && ./scripts/feeds install -a` (includes the luci feed). Put this directory into `package/luci-theme-liquid/` (or `feeds/luci/themes/luci-theme-liquid/`) of the OpenWrt source tree, enable the package in `.config`, then build: ```bash cd openwrt/package git clone https://github.com/xylz0928/luci-theme-liquid.git make menuconfig # choose LUCI โ†’ Themes โ†’ luci-theme-liquid make -j1 V=s ``` Or build only this package: ```sh # enable it in .config (either way) make menuconfig # LuCI โ†’ Themes โ†’ luci-theme-liquid # or echo 'CONFIG_PACKAGE_luci-theme-liquid=y' >> .config && make defconfig make package/luci-theme-liquid/compile -j4 V=s ``` > Note: `make package//compile` only really builds packages enabled (`=y`/`=m`) in `.config`; otherwise make no-ops (just prints `Entering/Leaving`), which is not a successful build. The produced `bin/packages//base/luci-theme-liquid-0.3-r.apk` (or `.ipk`) can be installed with `apk` / `opkg`: ```sh apk add --allow-untrusted luci-theme-liquid-0.3-r1.apk ``` On first install the theme is registered automatically (`luci.themes.Liquid=/luci-static/liquid`); if `luci.main.mediaurlbase` is not set it is set to the theme, otherwise pick **Liquid** manually at **System โ†’ Advanced โ†’ Theme**. ### Directory layout ``` luci-theme-liquid/ โ”œโ”€โ”€ Makefile # OpenWrt package (works inside luci feed or a standalone package dir) โ”œโ”€โ”€ logo.svg # theme logo (waterdrop + Liquid) โ”œโ”€โ”€ htdocs/luci-static/liquid/ # theme assets (/luci-static/liquid/) โ”‚ โ”œโ”€โ”€ cascade.css # all styles (vars / menu / tab / cbi / dashboard / lock screen) โ”‚ โ”œโ”€โ”€ main.js # mode switch, dropdown flip, tooltip portal, config saving โ”‚ โ”œโ”€โ”€ logo.svg / logo.png # theme logo โ”‚ โ”œโ”€โ”€ img/ # lock screen wallpapers (MontereyDark / MontereyLight) โ”‚ โ”œโ”€โ”€ icons/ # network status SVG icons (from luci-mod immortalwrt-24.10) โ”‚ โ””โ”€โ”€ svg/ # UI element SVGs + dashboard icons โ”œโ”€โ”€ htdocs/luci-static/resources/ # shared resources (/luci-static/resources/) โ”‚ โ”œโ”€โ”€ menu-liquid.js # sidebar menu / tab rendering (L.require('menu-liquid')) โ”‚ โ””โ”€โ”€ view/liquid/sysauth.js # lock screen login view (ui.showModal 'login') โ”œโ”€โ”€ root/usr/share/ucode/luci/ # ucode controller (config save endpoint) โ”‚ โ””โ”€โ”€ controller/liquid.uc โ”œโ”€โ”€ root/usr/share/luci/menu.d/ # dispatcher route registration โ”‚ โ””โ”€โ”€ liquid.json โ”œโ”€โ”€ ucode/template/themes/liquid/ # theme ucode templates โ”‚ โ”œโ”€โ”€ header.ut / footer.ut # page skeleton (uci config / anti-flash / Bing wallpaper cache) โ”‚ โ””โ”€โ”€ sysauth.ut # login template (blank_page + centered login box) โ””โ”€โ”€ root/etc/uci-defaults/ # registers luci.themes.Liquid on install ``` ## Screenshots - ๆกŒ้ข็ซฏ ![ๆกŒ้ข็ซฏ-้”ๅฑ-ๆš—้ป‘ๆจกๅผ](https://raw.githubusercontent.com/zzsj0928/ReadmeContents/master/liquid/luci-theme-liquid_pc-lock-dark.png) ![ๆกŒ้ข็ซฏ-ไธป็•Œ้ข-ๆš—้ป‘ๆจกๅผ](https://raw.githubusercontent.com/zzsj0928/ReadmeContents/master/liquid/luci-theme-liquid_pc-mainpage-dark.png) ![ๆกŒ้ข็ซฏ-้”ๅฑ-ๆ˜Žไบฎๆจกๅผ](https://raw.githubusercontent.com/zzsj0928/ReadmeContents/master/liquid/luci-theme-liquid_pc-lock-light.png) ![ๆกŒ้ข็ซฏ-ไธป็•Œ้ข-ๆ˜Žไบฎๆจกๅผ](https://raw.githubusercontent.com/zzsj0928/ReadmeContents/master/liquid/luci-theme-liquid_pc-mainpage-light.png) - ็งปๅŠจ็ซฏ ![็งปๅŠจ็ซฏ-ๆš—้ป‘ๆจกๅผ](https://raw.githubusercontent.com/zzsj0928/ReadmeContents/master/liquid/luci-theme-liquid_mobile-dark.jpg) ![็งปๅŠจ็ซฏ-ๆ˜Žไบฎๆจกๅผ](https://raw.githubusercontent.com/zzsj0928/ReadmeContents/master/liquid/luci-theme-liquid_mobile-light.jpg) ## Credits - Wallpapers: macOS Monterey (Bright/Dark), from [xylz0928/luci-mod][luci-mod] `Background/`. - Network status SVG icons: from [xylz0928/luci-mod][luci-mod] `immortalwrt-24.10` branch `feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/`. - dashboard module icons (router / internet / wireless / devices): from official OpenWrt [luci-mod-dashboard](https://github.com/openwrt/luci/tree/master/modules/luci-mod-dashboard). - Menu rendering logic references [luci-theme-openwrt-2020](https://github.com/openwrt/luci/tree/master/themes/luci-theme-openwrt-2020), lock screen view references [luci-theme-bootstrap](https://github.com/openwrt/luci/tree/master/themes/luci-theme-bootstrap) (Apache-2.0). ## ๐Ÿก Buy me a cup of TOKEN ๐Ÿ˜œ **Appreciate Your Like!** ![Awards](https://raw.githubusercontent.com/zzsj0928/ReadmeContents/master/general/donate-zed.jpg) ## License Apache-2.0