🎉 Sync 2026-08-28 21:44:02

This commit is contained in:
github-actions[bot]
2026-08-28 21:44:02 +08:00
parent 82aaee7f65
commit 04e8cdd08f
27 changed files with 6062 additions and 201 deletions
+2
View File
@@ -0,0 +1,2 @@
Screenshots
.DS_Store
+201
View File
@@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+4 -10
View File
@@ -7,17 +7,11 @@
include $(TOPDIR)/rules.mk
LUCI_TITLE:=Argon Theme
LUCI_DEPENDS:=+wget-any +jsonfilter
LUCI_DEPENDS:=+USE_APK:wget-any +!USE_APK:wget +jsonfilter
PKG_VERSION:=2.4.7
PKG_RELEASE:=4
PKG_VERSION:=2.4.3
PKG_RELEASE:=3
LUCI_MINIFY_CSS:=0
define Package/luci-theme-argon/conffiles
/etc/config/argon
/www/luci-static/argon/background/
endef
CONFIG_LUCI_CSSTIDY:=
include $(TOPDIR)/feeds/luci/luci.mk
+128
View File
@@ -0,0 +1,128 @@
<!-- markdownlint-configure-file {
"MD013": {
"code_blocks": false,
"tables": false,
"line_length":200
},
"MD033": false,
"MD041": false
} -->
[license]: /LICENSE
[license-badge]: https://img.shields.io/github/license/jerrykuku/luci-theme-argon?style=flat-square&a=1
[prs]: https://github.com/jerrykuku/luci-theme-argon/pulls
[prs-badge]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square
[issues]: https://github.com/jerrykuku/luci-theme-argon/issues/new
[issues-badge]: https://img.shields.io/badge/Issues-welcome-brightgreen.svg?style=flat-square
[release]: https://github.com/jerrykuku/luci-theme-argon/releases
[release-badge]: https://img.shields.io/github/v/release/jerrykuku/luci-theme-argon?style=flat-square
[download]: https://github.com/jerrykuku/luci-theme-argon/releases
[download-badge]: https://img.shields.io/github/downloads/jerrykuku/luci-theme-argon/total?style=flat-square
[contact]: https://t.me/jerryk6
[contact-badge]: https://img.shields.io/badge/Contact-telegram-blue?style=flat-square
[en-us-link]: /README.md
[zh-cn-link]: /README_ZH.md
[en-us-release-log]: /RELEASE.md
[zh-cn-release-log]: /RELEASE_ZH.md
[config-link]: https://github.com/jerrykuku/luci-app-argon-config/releases
[official]: https://github.com/openwrt/openwrt
[immortalwrt]: https://github.com/immortalwrt/immortalwrt
<div align="center">
<img src="https://raw.githubusercontent.com/jerrykuku/staff/master/argon_title4.svg">
# A brand new OpenWrt LuCI theme
Argon is **a clean and tidy OpenWrt LuCI theme** that allows<br/>
users to customize their login interface with images or videos.
It also supports automatic and manual switching between light and dark modes.
[![license][license-badge]][license]
[![prs][prs-badge]][prs]
[![issues][issues-badge]][issues]
[![release][release-badge]][release]
[![download][download-badge]][download]
[![contact][contact-badge]][contact]
**English** |
[简体中文][zh-cn-link]
[Key Features](#key-features) •
[Compatibility](#compatibility) •
[Version History](#version-history) •
[Getting started](#getting-started) •
[Screenshots](#screenshots) •
[Contributors](#contributors) •
[Credits](#credits)
<img src="https://raw.githubusercontent.com/jerrykuku/staff/master/argon2.gif">
</div>
## Key Features
- Clean and modern Argon-style interface design.
- Fully adapted for both desktop and mobile displays.
- Supports automatic or manual switching between light and dark modes.
- Supports custom theme colors, along with adjustable blur and transparency effects.
- The login page supports local images, videos, and online wallpapers as backgrounds.
- Works with [luci-app-argon-config][config-link] for a more complete theme configuration experience.
## Compatibility
Only the `master` branch is maintained now.
Support is focused on modern LuCI environments based on [Official OpenWrt][official] and [ImmortalWrt][immortalwrt].
## Version History
The latest version is v2.4.7 [Click here][en-us-release-log] to view the full version history record.
## Getting started
### Build from source
```bash
cd openwrt/package
git clone https://github.com/jerrykuku/luci-theme-argon.git
make menuconfig #choose LUCI->Theme->Luci-theme-argon
make -j1 V=s
```
### Install release packages (`ipk`)
```bash
wget https://github.com/jerrykuku/luci-theme-argon/releases/download/v2.4.7/luci-theme-argon_2.4.7-1_all.ipk
wget https://github.com/jerrykuku/luci-theme-argon/releases/download/v2.4.7/luci-app-argon-config_2.4.7-1_all.ipk
opkg install ./luci-theme-argon_2.4.7-1_all.ipk ./luci-app-argon-config_2.4.7-1_all.ipk
```
### Install release packages (`apk`)
```bash
wget https://github.com/jerrykuku/luci-theme-argon/releases/download/v2.4.7/luci-theme-argon-2.4.7-r1.apk
wget https://github.com/jerrykuku/luci-theme-argon/releases/download/v2.4.7/luci-app-argon-config-2.4.7-r1.apk
apk add --allow-untrusted ./luci-theme-argon-2.4.7-r1.apk ./luci-app-argon-config-2.4.7-r1.apk
```
## Screenshots
![desktop](/Screenshots/screenshot_pc.jpg)
![mobile](/Screenshots/screenshot_phone.jpg)
## Contributors
<a href="https://github.com/jerrykuku/luci-theme-argon/graphs/contributors">
<img src="https://contrib.rocks/image?repo=jerrykuku/luci-theme-argon&v=2" />
</a>
Made with [contrib.rocks](https://contrib.rocks).
## Related Projects
- [luci-app-argon-config](https://github.com/jerrykuku/luci-app-argon-config): Configuration plugin for the Argon theme
- [openwrt-package](https://github.com/jerrykuku/openwrt-package): My OpenWrt package collection
- [CasaOS](https://github.com/IceWhaleTech/CasaOS): A simple, elegant open-source personal cloud system and my current primary project
## Credits
[luci-theme-material](https://github.com/LuttyYang/luci-theme-material/)
+128
View File
@@ -0,0 +1,128 @@
<!-- markdownlint-configure-file {
"MD013": {
"code_blocks": false,
"tables": false,
"line_length":200
},
"MD033": false,
"MD041": false
} -->
[license]: /LICENSE
[license-badge]: https://img.shields.io/github/license/jerrykuku/luci-theme-argon?style=flat-square&a=1
[prs]: https://github.com/jerrykuku/luci-theme-argon/pulls
[prs-badge]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square
[issues]: https://github.com/jerrykuku/luci-theme-argon/issues/new
[issues-badge]: https://img.shields.io/badge/Issues-welcome-brightgreen.svg?style=flat-square
[release]: https://github.com/jerrykuku/luci-theme-argon/releases
[release-badge]: https://img.shields.io/github/v/release/jerrykuku/luci-theme-argon?style=flat-square
[download]: https://github.com/jerrykuku/luci-theme-argon/releases
[download-badge]: https://img.shields.io/github/downloads/jerrykuku/luci-theme-argon/total?style=flat-square
[contact]: https://t.me/jerryk6
[contact-badge]: https://img.shields.io/badge/Contact-telegram-blue?style=flat-square
[en-us-link]: /README.md
[zh-cn-link]: /README_ZH.md
[en-us-release-log]: /RELEASE.md
[zh-cn-release-log]: /RELEASE_ZH.md
[config-link]: https://github.com/jerrykuku/luci-app-argon-config/releases
[official]: https://github.com/openwrt/openwrt
[immortalwrt]: https://github.com/immortalwrt/immortalwrt
<div align="center">
<img src="https://raw.githubusercontent.com/jerrykuku/staff/master/argon_title4.svg">
# 一个全新的 OpenWrt 主题
Argon 是**一款干净整洁的 OpenWrt LuCI 主题**
允许用户使用图片或视频自定义其登录界面。
它还支持在浅色模式和深色模式之间自动或手动切换。
[![license][license-badge]][license]
[![prs][prs-badge]][prs]
[![issues][issues-badge]][issues]
[![release][release-badge]][release]
[![download][download-badge]][download]
[![contact][contact-badge]][contact]
[English][en-us-link] |
**简体中文**
[特色](#特色) •
[兼容性](#兼容性) •
[版本历史](#版本历史) •
[快速开始](#快速开始) •
[屏幕截图](#屏幕截图) •
[贡献者](#贡献者) •
[鸣谢](#鸣谢)
<img src="https://raw.githubusercontent.com/jerrykuku/staff/master/argon2.gif">
</div>
## 特色
- 简洁清爽的 Argon 风格界面设计。
- 完整适配桌面端与移动端显示。
- 支持浅色 / 深色模式自动或手动切换。
- 支持自定义主题主色,以及毛玻璃的模糊与透明度。
- 登录页支持本地图片、视频和在线壁纸背景。
- 可搭配 [luci-app-argon-config][config-link] 实现更完整的主题设置体验。
## 兼容性
目前仅维护 `master` 分支。
当前主要面向 [官方 OpenWrt][official] 和 [ImmortalWrt][immortalwrt] 的较新版本 LuCI 环境。
## 版本历史
当前最新的版本为 v2.4.7 [点击这里][zh-cn-release-log]查看完整的版本历史日志.
## 快速开始
### 从源码编译
```bash
cd openwrt/package
git clone https://github.com/jerrykuku/luci-theme-argon.git
make menuconfig #choose LUCI->Theme->Luci-theme-argon
make -j1 V=s
```
### 安装 release 包 (`ipk`)
```bash
wget https://github.com/jerrykuku/luci-theme-argon/releases/download/v2.4.7/luci-theme-argon_2.4.7-1_all.ipk
wget https://github.com/jerrykuku/luci-theme-argon/releases/download/v2.4.7/luci-app-argon-config_2.4.7-1_all.ipk
opkg install ./luci-theme-argon_2.4.7-1_all.ipk ./luci-app-argon-config_2.4.7-1_all.ipk
```
### 安装 release 包 (`apk`)
```bash
wget https://github.com/jerrykuku/luci-theme-argon/releases/download/v2.4.7/luci-theme-argon-2.4.7-r1.apk
wget https://github.com/jerrykuku/luci-theme-argon/releases/download/v2.4.7/luci-app-argon-config-2.4.7-r1.apk
apk add --allow-untrusted ./luci-theme-argon-2.4.7-r1.apk ./luci-app-argon-config-2.4.7-r1.apk
```
## 屏幕截图
![desktop](/Screenshots/screenshot_pc.jpg)
![mobile](/Screenshots/screenshot_phone.jpg)
## 贡献者
<a href="https://github.com/jerrykuku/luci-theme-argon/graphs/contributors">
<img src="https://contrib.rocks/image?repo=jerrykuku/luci-theme-argon" />
</a>
Made with [contrib.rocks](https://contrib.rocks).
## 相关项目
- [luci-app-argon-config](https://github.com/jerrykuku/luci-app-argon-config): Argon 主题设置插件
- [openwrt-package](https://github.com/jerrykuku/openwrt-package): 我的 OpenWrt 软件包集合
- [CasaOS](https://github.com/IceWhaleTech/CasaOS): 一个简单、易用且优雅的开源个人云系统,也是我目前主要投入的项目
## 鸣谢
[luci-theme-material](https://github.com/LuttyYang/luci-theme-material/)
+161
View File
@@ -0,0 +1,161 @@
# Update log for master branch
## v2.4.7 [ 2026.08.24 ]
### What's Changed
* fix(openclash): correct form spacing and custom table styles by @Aethersailor in https://github.com/jerrykuku/luci-theme-argon/pull/698
* fixed: Issue where browser tabs were displayed incorrectly. by @smallprogram in https://github.com/jerrykuku/luci-theme-argon/pull/700
* refactor(openclash): unify Argon theme integration by @Aethersailor in https://github.com/jerrykuku/luci-theme-argon/pull/702
### New Contributors
* @smallprogram made their first contribution in https://github.com/jerrykuku/luci-theme-argon/pull/700
**Full Changelog**: https://github.com/jerrykuku/luci-theme-argon/compare/v2.4.6...v2.4.7
## v2.4.6 [ 2026.07.31 ]
### What's Changed
* 修改警告提示对比度弱、系统设置按钮组间距,新增新版隐藏按钮样式 by @sydnkj in https://github.com/jerrykuku/luci-theme-argon/pull/688
* fix(openclash): normalize config switcher tab height by @Aethersailor in https://github.com/jerrykuku/luci-theme-argon/pull/689
* fix(pr) 修复#688,仅修改了编译产物,没有修改less源代码的问题 by @sydnkj in https://github.com/jerrykuku/luci-theme-argon/pull/692
* fix(issues) 解决#691提到的暗黑主题白色线问题 by @sydnkj in https://github.com/jerrykuku/luci-theme-argon/pull/693
**Full Changelog**: https://github.com/jerrykuku/luci-theme-argon/compare/v2.4.5...v2.4.6
## v2.4.5 [ 2026.07.18 ]
### What's Changed
* 修复输入框显示不全 by @Rain-Maple in https://github.com/jerrykuku/luci-theme-argon/pull/684
* fix(apk): avoid replacing uclient-fetch with wget-nossl by @jelipo in https://github.com/jerrykuku/luci-theme-argon/pull/685
* fix(openclash): align CBI zebra row spacing by @Aethersailor in https://github.com/jerrykuku/luci-theme-argon/pull/686
### New Contributors
* @Rain-Maple made their first contribution in https://github.com/jerrykuku/luci-theme-argon/pull/684
* @jelipo made their first contribution in https://github.com/jerrykuku/luci-theme-argon/pull/685
* @Aethersailor made their first contribution in https://github.com/jerrykuku/luci-theme-argon/pull/686
**Full Changelog**: https://github.com/jerrykuku/luci-theme-argon/compare/v2.4.4...v2.4.5
## v2.4.4 [ 2026.07.16 ]
### What's Changed
* Dynlist indicate drop target by @jjm2473 in https://github.com/jerrykuku/luci-theme-argon/pull/590
* feat(online_wallpaper): get rid of curl by @1715173329 in https://github.com/jerrykuku/luci-theme-argon/pull/603
* chore(template): rewrite into ucode by @msylgj in https://github.com/jerrykuku/luci-theme-argon/pull/602
* fix some css style error by @msylgj in https://github.com/jerrykuku/luci-theme-argon/pull/607
* WIP: fix(css): fix some css issues by @msylgj in https://github.com/jerrykuku/luci-theme-argon/pull/617
* 修复luci-app-poweroffdevice、admin-system-reboot的按钮宽度问题,修复首页/状态页的 Hide、Show 按钮 by @yhl452493373 in https://github.com/jerrykuku/luci-theme-argon/pull/622
* 修复两处样式异常 by @guowenju in https://github.com/jerrykuku/luci-theme-argon/pull/632
* Wallhaven.cc loading fix by @AcidSlide in https://github.com/jerrykuku/luci-theme-argon/pull/634
* MWAN3 specific only - css fix by @AcidSlide in https://github.com/jerrykuku/luci-theme-argon/pull/633
* 优化openclash的公告栏边距 by @yhl452493373 in https://github.com/jerrykuku/luci-theme-argon/pull/637
* fix(nlbw): 修复`带宽监控`页面选择器并优化按钮布局 by @guowenju in https://github.com/jerrykuku/luci-theme-argon/pull/649
* fix: smartdns: fix padding loss in layout style by @sydnkj in https://github.com/jerrykuku/luci-theme-argon/pull/650
* luci-static/menu-argon: add missing ModeMenu handling by @feckert in https://github.com/jerrykuku/luci-theme-argon/pull/651
* fix(nftables): 修复`检测到旧版规则` `alert-message` 弹窗点击关闭按钮无效的问题 by @guowenju in https://github.com/jerrykuku/luci-theme-argon/pull/652
* 修复某些弹窗loading图标位置问题 by @yhl452493373 in https://github.com/jerrykuku/luci-theme-argon/pull/659
* Comment out X-Frame-Options meta tag by @yws112358 in https://github.com/jerrykuku/luci-theme-argon/pull/663
* 修复在最新openwrt上的一些问题 by @yhl452493373 in https://github.com/jerrykuku/luci-theme-argon/pull/666
* 修复OpenWrt 25.12主页样式异常 by @guowenju in https://github.com/jerrykuku/luci-theme-argon/pull/658
* 修复一些发现的问题 by @yhl452493373 in https://github.com/jerrykuku/luci-theme-argon/pull/668
* Fix Safari rendering issues on login and LuCI pages by @Nonosword in https://github.com/jerrykuku/luci-theme-argon/pull/670
* Update LUCI_DEPENDS to use wget-any by @1-1-2 in https://github.com/jerrykuku/luci-theme-argon/pull/671
* Revert "Update LUCI_DEPENDS to use wget-any" by @jerrykuku in https://github.com/jerrykuku/luci-theme-argon/pull/673
* 修复主页(dashboard)DHCP设备表格布局异常 by @guowenju in https://github.com/jerrykuku/luci-theme-argon/pull/674
* fix(css): remove transform on tooltip by @ckorber in https://github.com/jerrykuku/luci-theme-argon/pull/678
### New Contributors
* @1715173329 made their first contribution in https://github.com/jerrykuku/luci-theme-argon/pull/603
* @guowenju made their first contribution in https://github.com/jerrykuku/luci-theme-argon/pull/632
* @sydnkj made their first contribution in https://github.com/jerrykuku/luci-theme-argon/pull/650
* @feckert made their first contribution in https://github.com/jerrykuku/luci-theme-argon/pull/651
* @yws112358 made their first contribution in https://github.com/jerrykuku/luci-theme-argon/pull/663
* @Nonosword made their first contribution in https://github.com/jerrykuku/luci-theme-argon/pull/670
* @1-1-2 made their first contribution in https://github.com/jerrykuku/luci-theme-argon/pull/671
* @ckorber made their first contribution in https://github.com/jerrykuku/luci-theme-argon/pull/678
**Full Changelog**: https://github.com/jerrykuku/luci-theme-argon/compare/v2.4.3...v2.4.4
## v2.4.3 [ 2025.07.22 ]
- **Refactor**: Remove jQuery dependency, fully replace with vanilla JavaScript
- **Modernize**: Upgrade HTML meta tags for better security and compatibility
- **Security**: Add security-related HTTP headers (CSP, XSS protection, clickjacking protection, etc.)
- **Font System**: Modernize font system with Google Sans font support
- **Font Optimization**: Replace legacy font formats (eot/svg/ttf) with woff2 for better performance
- **CSS Upgrade**: Upgrade Pure CSS to v3.0.0
- **Menu Enhancement**: Improve menu animations, remove jQuery dependency and sync animation timing
- **Style Improvement**: Add dockerman related style support
- **Mobile Optimization**: Optimize mobile and PWA related meta tag configurations
- **Icon Organization**: Reorganize website icon links following modern standards
- **Accessibility**: Improve web accessibility by allowing user scaling
- **Code Structure**: Optimize code structure with logical grouping comments
## v2.3.1 [ 2023.04.20 ]
- Fixed the issue where the dropdown menu was being clipped.
- Fixed the problem where the exit icon was replaced with the app store icon.
- Fixed the issue where some colors were out of control in dark mode.
- Fixed the problem where the local startup script textarea could not be scrolled in the startup item.
- Fixed the problem where the Passwall node list button was misaligned.
- Fixed the text overflow problem in dynlist
- Support wallpaper from Unsplashargon
- Fix menu style mis-match on macOS+Chrome
- Fixed the issue of the login page icon becoming larger
- Support wallpaper from wallhaven
> open footer links in new tab
- Remake theme icon
## v2.3 [ 2023.04.03 ]
- Updated the style of Loading.
- Fixed a large number of CSS style errors and made the overall more uniform.
- Fixed the problem of uncontrolled individual colors in dark mode.
## v2.2.9
- Unify the settings of css spacing
- Refactored the code of the login page
- Fix the problem that the Minify Css option is turned on when compiling, which causes the
- Fix the problem that the menu could not pop up in mobile mode
- Unify the settings of css spacing
- Refactored the code of the login page
## v2.2.8
- Fix the problem that the Minify Css option is turned on when compiling, which causes the frosted glass effect to be invalid and the logo font is lost.
## v2.2.5
- New config app for argon theme. You can set the blur and transparency of the login page of argon theme, and manage the background pictures and videos.[Chrome is recommended] [Download](https://github.com/jerrykuku/luci-app-argon-config/releases/download/v0.8-beta/luci-app-argon-config_0.8-beta_all.ipk)
- Automatically set as the default theme when compiling.
- Modify the file structure to adapt to luci-app-argon-config. The old method of turning on dark mode is no longer applicable, please use it with luci-app-argon-config.
- Adapt to Koolshare lede 2.3.6。
- Fix some Bug。
## v2.2.4
- Fix the problem that the login background cannot be displayed on some phones.
- Remove the dependency of luasocket.
## v2.2.3
- Fix Firmware flash page display error in dark mode.
- Update font icon, add a default icon of undefined menu.
## v2.2.2
- Add custom login background,put your image (allow png jpg gif) or MP4 video into /www/luci-static/argon/background, random change.
- Add force dark mode, login ssh and type "touch /etc/dark" to open dark mode.
- Add a volume mute button for video background, default is muted.
- fix login page when keyboard show the bottom text overlay the button on mobile.
- fix select color in dark mode,and add a style for scrollbar.
- jquery update to v3.5.1.
- change request bing api method form wget to luasocket (DEPENDS).
## v2.2.1
- Add blur effect for login form.
- New login theme, Request background imge from bing.com, Auto change everyday.
- New theme icon.
- Add more menu category icon.
- Fix font-size and padding margin.
- Restructure css file.
- Auto adapt to dark mode.
+102
View File
@@ -0,0 +1,102 @@
# Master 分支的更新日志
## v2.4.7 [ 2026.08.24 ]
- GitHub Release: https://github.com/jerrykuku/luci-theme-argon/releases/tag/v2.4.7
- 详细更新内容请以 Release 页面为准。
## v2.4.6 [ 2026.07.31 ]
- GitHub Release: https://github.com/jerrykuku/luci-theme-argon/releases/tag/v2.4.6
- 详细更新内容请以 Release 页面为准。
## v2.4.5 [ 2026.07.18 ]
- GitHub Release: https://github.com/jerrykuku/luci-theme-argon/releases/tag/v2.4.5
- 详细更新内容请以 Release 页面为准。
## v2.4.4 [ 2026.07.16 ]
- GitHub Release: https://github.com/jerrykuku/luci-theme-argon/releases/tag/v2.4.4
- 详细更新内容请以 Release 页面为准。
## v2.4.3 [ 2025.07.22 ]
- **重构**: 移除了对 jQuery 库的依赖,全面使用原生 JavaScript 替代
- **现代化**: 升级 HTML meta 标签,提升网页安全性和兼容性
- **安全增强**: 添加安全相关的 HTTP 头信息(CSP、XSS 防护、点击劫持防护等)
- **字体系统**: 现代化字体系统,新增 Google Sans 字体支持
- **字体优化**: 替换过时的字体格式(eot/svg/ttf)为 woff2,提升加载性能
- **CSS升级**: Pure CSS 升级到 v3.0.0 版本
- **菜单优化**: 改进菜单动画,移除 jQuery 依赖并同步动画时序
- **样式改进**: 新增 dockerman 相关样式支持
- **移动端优化**: 优化移动端和 PWA 相关的 meta 标签配置
- **图标整理**: 重新整理网站图标链接,按现代标准排序
- **无障碍性**: 改善网页无障碍性,允许用户缩放页面
- **代码结构**: 优化代码结构,添加逻辑分组注释
## v2.3.1 [ 2023.04.20 ]
- 修复了下拉菜单被裁切的问题
- 修复了退出图标变成了应用商店图标的问题
- 修复了暗色模式下个别颜色不受控制的问题
- 修复了启动项--本地启动脚本文本框不能滑动的问题
- 修复了Passwall节点列表按钮错位的问题
- 修复在dynlist中的文本溢出问题
- 登录页面 支持自来 Unsplash 的在线壁纸
- 修复在macOS的Chrome中,菜单的style异常
- 修复在登录页面中,主题图标变大的问题
- 登录页面 支持自来 wallhaven 的在线壁纸
> 打开页脚链接时使用新标签页
- 重制主题图标
## v2.3 [ 2023.04.03 ]
- 更新了 Loading 的样式
- 修复了大量的 CSS 样式错误,整体更加统一
- 修复了暗色模式下个别颜色不受控制的问题
## v2.2.9
- 修复了在手机模式下无法弹出菜单的 bug
- 统一 css 间距的设置
- 重构了登录页面的代码
- 为导航菜单添加滑动效果
## v2.2.8
- 【v2.2.8】修复编译时打开 Minify Css 选项,导致磨砂玻璃效果无效,logo 字体丢失的问题
## v2.2.5
- 全新的设置 app.你可以设置 argon 主题的登录页面的模糊和透明度,并管理背景图片与视频。[建议使用 Chrome][点击下载](https://github.com/jerrykuku/luci-app-argon-config/releases/download/v0.8-beta/luci-app-argon-config_0.8-beta_all.ipk)
- 当编译固件时,将自动设置为默认主题。
- 修改文件结构,以适应 luci-app-argon-config,旧的开启暗色模式方法将不再适用,请搭配 luci-app-argon-config 使用。
- 适配 Koolshare lede 2.3.6。
- 修复了一些 Bug。
## v2.2.4
- 修复了在某些手机下图片背景第一次加载不能显示的问题。
- 取消 luasocket 的依赖,无需再担心依赖问题。
## v2.2.3
- 修正了在暗色模式下,固件刷写弹窗内的显示错误。
- 更新了图标库,为未定义的菜单增加了一个默认的图标。
## v2.2.2
- 背景文件策略调整为,同时接受 jpg png gif mp4, 自行上传文件至 /www/luci-static/argon/background 图片和视频同时随机。
- 增加强制暗色模式,进入 ssh 输入 "touch /etc/dark" 进行开启。
- 视频背景加了一个音量开关,喜欢带声音的可以自行点击开启,默认为静音模式。
- 修复了手机模式下,登录页面出现键盘时,文字覆盖按钮的问题。
- 修正了暗黑模式下下拉选项的背景颜色,同时修改了滚动条的样式。
- jquery 更新到 v3.5.1。
- 获取 Bing Api 的方法从 wget 更新到 luasocket 并添加依赖。
## v2.2.1
- 登录背景添加毛玻璃效果。
- 全新的登录界面,图片背景跟随 Bing.com,每天自动切换。
- 全新的主题 icon。
- 增加多个导航 icon。
- 细致的微调了 字号大小边距等等。
- 重构了 css 文件。
- 自动适应的暗黑模式。
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

@@ -1,2 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<browserconfig><msapplication><tile><square70x70logo src="/ms-icon-70x70.png"/><square150x150logo src="/ms-icon-150x150.png"/><square310x310logo src="/ms-icon-310x310.png"/><TileColor>#ffffff</TileColor></tile></msapplication></browserconfig>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

@@ -1,41 +1,11 @@
{
"name": "Openwrt",
"display": "standalone",
"icons": [
{
"src": "\/android-icon-36x36.png",
"sizes": "36x36",
"type": "image\/png",
"density": "0.75"
},
{
"src": "\/android-icon-48x48.png",
"sizes": "48x48",
"type": "image\/png",
"density": "1.0"
},
{
"src": "\/android-icon-72x72.png",
"sizes": "72x72",
"type": "image\/png",
"density": "1.5"
},
{
"src": "\/android-icon-96x96.png",
"sizes": "96x96",
"type": "image\/png",
"density": "2.0"
},
{
"src": "\/android-icon-144x144.png",
"sizes": "144x144",
"type": "image\/png",
"density": "3.0"
},
{
"src": "\/android-icon-192x192.png",
"src": "android-icon-192x192.png",
"sizes": "192x192",
"type": "image\/png",
"density": "4.0"
"type": "image/png"
}
]
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

+37 -2
View File
@@ -40,7 +40,6 @@
--gray-dark: #32325d;
--light: #ced4da;
--lighter: #e9ecef;
--success: #2dce89;
--info: #11cdef;
--warning: #fb6340;
@@ -234,6 +233,7 @@ select[multiple="multiple"] {
&.error {
background-color: var(--warning);
color: var(--yellow);
}
h4 {
@@ -275,6 +275,31 @@ select[multiple="multiple"] {
padding: .3rem .6rem;
}
/* LuCI's ui.js dismisses notification banners by adding the .fade-out
class and removing the banner node once a transitionend event fires
on it. Without a transitioned opacity on .alert-message the Dismiss
button has no visible effect and the banner stays open forever. */
.alert-message {
transition: opacity .4s ease;
&.fade-out {
opacity: 0;
}
&.fade-in {
animation: alert-message-fade-in .4s ease;
}
}
@keyframes alert-message-fade-in {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
#maincontent > .alert-message {
position: fixed;
transform: translate(-50%, -50%);
@@ -486,6 +511,17 @@ body:not([data-page="admin-dashboard"]) {
}
}
@media (prefers-color-scheme: dark) {
body:not([data-page="admin-dashboard"]) {
tr>td,
tr>th,
.tr>.td,
.tr>.th {
border-top: thin solid #444 !important;
}
}
}
#cbi-wireless .td,
.table[width="100%"]>.tr:first-child>.td,
[data-page="admin-network-diagnostics"] .tr>.td,
@@ -2251,7 +2287,6 @@ span[data-tooltip] .label {
padding: 0.5rem;
opacity: 0;
transition: opacity .25s ease-in;
transform: translate(-50%, 10%);
}
.cbi-tooltip-container:hover .cbi-tooltip:not(:empty) {
+12 -34
View File
@@ -1063,40 +1063,18 @@ input,
}
}
[data-page^="admin-services-openclash"] {
.oc {
--bg-light: #1e1e1e !important;
--bg-gray: #1e1e1e !important;
.developer-container {
background: transparent !important;
}
.config-upload-content{
background: #1e1e1e !important;
}
}
.cbi-tabmenu::-webkit-scrollbar-thumb {
background-color: #5b5b5b;
}
.cbi-tabmenu::-webkit-scrollbar-track {
background-color: rgba(60, 60, 60, 0.75);
}
#tab {
border-color: #3c3c3c;
}
#diag-rc-output > pre,
#dns-rc-output > pre {
color: #ccc;
border: 1px solid #3c3c3c !important;
background-color: #1e1e1e;
}
img[src$="arrow-clockwise-light.svg"],
[data-page^="admin-services-openclash"] {
--oc-accent: var(--dark-primary);
--oc-surface: #1e1e1e;
--oc-surface-muted: #252526;
--oc-control-bg: #1e1e1e;
--oc-border: #3c3c3c;
--oc-text: #ccc;
--oc-text-muted: #a1a1aa;
--oc-neutral: #5b5b5b;
--oc-scrollbar: #5b5b5b;
img[src$="arrow-clockwise-light.svg"],
img[src$="wrench-light.svg"],
img[src$="eye-light.svg"] {
filter: invert(0.9);
+4
View File
@@ -433,6 +433,10 @@
background-color: #fff;
}
.table {
width: 100%;
}
.settings-info {
padding-top: 1em;
padding-bottom: 1em;
+447 -28
View File
@@ -18,6 +18,7 @@
[data-page="admin-system-system"] {
.control-group {
gap: .875rem;
margin: 0.25rem 0;
}
.cbi-dynlist {
@@ -550,6 +551,10 @@
.cbi-section.fade-in {
.cbi-title {
position: relative;
.label {
cursor: pointer;
}
> div:last-child {
position: absolute;
@@ -712,18 +717,354 @@
// Services - OpenClash
[data-page^="admin-services-openclash"] {
// One adapter contract for OpenClash's current component set.
// Semantic colours remain owned by OpenClash; primary interactions and
// neutral surfaces follow Argon's runtime-configurable palette.
--oc-accent: var(--primary);
--oc-accent-hover: var(--primary);
--oc-accent-strong: var(--primary);
--oc-accent-a5: transparent;
--oc-accent-a10: transparent;
--oc-accent-a20: transparent;
--oc-accent-a30: transparent;
--oc-accent-a40: transparent;
--oc-accent-a50: transparent;
--oc-accent-a60: transparent;
--oc-surface: #fff;
--oc-surface-muted: #f6f9fc;
--oc-control-bg: #fff;
--oc-border: #dee2e6;
--oc-text: #525f7f;
--oc-text-muted: #8898aa;
--oc-neutral: #8898aa;
--oc-scrollbar: #f6f9fc;
@supports (color: color-mix(in srgb, red, blue)) {
--oc-accent-hover: color-mix(in srgb, var(--oc-accent) 88%, black);
--oc-accent-strong: color-mix(in srgb, var(--oc-accent) 78%, black);
--oc-accent-a5: color-mix(in srgb, var(--oc-accent) 5%, transparent);
--oc-accent-a10: color-mix(in srgb, var(--oc-accent) 10%, transparent);
--oc-accent-a20: color-mix(in srgb, var(--oc-accent) 20%, transparent);
--oc-accent-a30: color-mix(in srgb, var(--oc-accent) 30%, transparent);
--oc-accent-a40: color-mix(in srgb, var(--oc-accent) 40%, transparent);
--oc-accent-a50: color-mix(in srgb, var(--oc-accent) 50%, transparent);
--oc-accent-a60: color-mix(in srgb, var(--oc-accent) 60%, transparent);
}
.oc {
--bg-light: #fff;
--bg-gray: #fff;
--bg-white: var(--oc-surface) !important;
--bg-light: var(--oc-surface) !important;
--bg-gray: var(--oc-surface) !important;
--bg-dark: var(--oc-surface) !important;
--hover-bg: var(--oc-surface-muted) !important;
--editor-bg: var(--oc-control-bg) !important;
--card-bg-start: var(--oc-surface) !important;
--border-color: var(--oc-border) !important;
--border-light: var(--oc-border) !important;
--border-dark: var(--oc-border) !important;
--tab-border: var(--oc-border) !important;
--divider: var(--oc-border) !important;
--text-primary: var(--oc-text) !important;
--text-secondary: var(--oc-text-muted) !important;
--text-title: var(--oc-text) !important;
--primary-color: var(--oc-accent) !important;
--primary-bright: var(--oc-accent) !important;
--btn-primary-hover: var(--oc-accent-hover) !important;
--announcement-end: var(--oc-accent-strong) !important;
--card-btn-bg: var(--oc-accent) !important;
--card-accent: var(--oc-accent) !important;
--primary-a5: var(--oc-accent-a5) !important;
--primary-a10: var(--oc-accent-a10) !important;
--primary-a20: var(--oc-accent-a20) !important;
--primary-a30: var(--oc-accent-a30) !important;
--primary-a40: var(--oc-accent-a40) !important;
--primary-a50: var(--oc-accent-a50) !important;
--primary-a60: var(--oc-accent-a60) !important;
--radio-hover-bg: var(--oc-accent-a10) !important;
--tab-hover-dark-bg: var(--oc-accent-a10) !important;
--scrollbar-thumb: var(--oc-neutral) !important;
--scrollbar-thumb-hover: var(--oc-text-muted) !important;
border-radius: 8px;
.developer-container {
background: transparent;
.developer-container,
.subscription-info-container {
background: transparent !important;
}
.announcement-card {
width: auto!important;
margin: 10px!important;
width: auto !important;
margin: 10px !important;
}
.config-upload-content {
background: var(--oc-surface) !important;
}
}
// Standard LuCI controls
.cbi-button.cbi-button-add,
.cbi-button.cbi-button-apply,
.cbi-button.cbi-button-edit,
.cbi-button.cbi-button-link,
.cbi-button.cbi-button-positive,
.cbi-button.cbi-button-reload,
.cbi-button.cbi-button-save,
.cbi-button.cbi-button-action,
input.cbi-input-apply,
input.cbi-input-reload,
input.cbi-input-save,
.btn.primary {
color: #fff !important;
border-color: var(--oc-accent) !important;
background: var(--oc-accent) !important;
}
.cbi-button.cbi-button-remove,
.cbi-button.cbi-button-negative,
input.cbi-input-remove {
color: #fff !important;
border-color: var(--danger) !important;
background: var(--danger) !important;
}
.cbi-button.cbi-button-reset {
color: #fff !important;
border-color: var(--warning) !important;
background: var(--warning) !important;
}
.cbi-button.cbi-button-find,
input.cbi-input-find {
color: #fff !important;
border-color: var(--oc-neutral) !important;
background-color: var(--oc-neutral) !important;
}
// Sorting controls are compact icon buttons. A neutral outline keeps the
// bundled gray arrow legible on light surfaces without implying disabled.
#cbi-openclash .cbi-button-up,
#cbi-openclash .cbi-button-down {
border-color: var(--oc-neutral) !important;
background-color: var(--oc-control-bg) !important;
}
#cbi-openclash .cbi-button-up:not(:disabled):hover,
#cbi-openclash .cbi-button-up:not(:disabled):focus,
#cbi-openclash .cbi-button-down:not(:disabled):hover,
#cbi-openclash .cbi-button-down:not(:disabled):focus {
border-color: var(--oc-accent) !important;
background-color: var(--oc-accent-a10) !important;
box-shadow: 0 0 0 2px var(--oc-accent-a10) !important;
}
input[type="checkbox"] {
border-color: var(--oc-accent) !important;
&:checked {
border-color: var(--oc-accent) !important;
background-color: var(--oc-accent) !important;
}
}
input[type="text"],
input[type="password"],
input[type="number"],
input[type="search"],
input[type="url"],
select,
textarea,
.cbi-dropdown,
.oc .oc-input-textarea,
.oc .sub-info-url-form-textarea,
.oc .select-class,
.oc .custom-option-input {
color: var(--oc-text) !important;
border-color: var(--oc-border) !important;
background-color: var(--oc-control-bg) !important;
}
input[type="text"]:focus,
input[type="password"]:focus,
input[type="number"]:focus,
input[type="search"]:focus,
input[type="url"]:focus,
select:focus,
textarea:focus,
.cbi-dropdown:focus,
.cbi-dropdown[open],
.oc .oc-input-textarea:focus,
.oc .sub-info-url-form-textarea:focus,
.oc .select-class:focus,
.oc .custom-option-input:focus {
border-color: var(--oc-accent) !important;
box-shadow: 0 0 0 2px var(--oc-accent-a10) !important;
outline: 0 !important;
}
.CodeMirror,
.oc .cm-editor {
color: var(--oc-text) !important;
border: 1px solid var(--oc-border) !important;
background: var(--oc-control-bg) !important;
}
.CodeMirror-gutters,
.oc .cm-gutters {
border-color: var(--oc-border) !important;
background: var(--oc-surface-muted) !important;
}
.CodeMirror.CodeMirror-focused,
.oc .cm-editor.cm-focused {
border-color: var(--oc-accent) !important;
box-shadow: 0 0 0 2px var(--oc-accent-a10) !important;
outline: 0 !important;
}
// Both tab classes are current component variants, not version branches.
.oc .radio-button input[type="radio"]:checked+label,
.oc #tab-header>ul.cbi-tabmenu>li.cbi-tab,
.oc #tab-header>ul.oc-tabmenu>li.oc-tab {
color: #fff !important;
border-color: var(--oc-accent) !important;
background: var(--oc-accent) !important;
}
.oc .radio-button input[type="radio"]:checked+label {
box-shadow: 0 1px 2px var(--oc-accent-a10) !important;
}
.oc .radio-button label:hover,
.oc #tab-header>ul.cbi-tabmenu>li:not(.cbi-tab):hover,
.oc #tab-header>ul.cbi-tabmenu>li:not(.cbi-tab):focus,
.oc #tab-header>ul.oc-tabmenu>li:not(.oc-tab):hover,
.oc #tab-header>ul.oc-tabmenu>li:not(.oc-tab):focus {
color: var(--oc-accent) !important;
border-color: var(--oc-accent) !important;
background: var(--oc-accent-a10) !important;
}
.oc #tab-header>ul.cbi-tabmenu>li:not(.cbi-tab):hover>a,
.oc #tab-header>ul.cbi-tabmenu>li:not(.cbi-tab):focus>a,
.oc #tab-header>ul.oc-tabmenu>li:not(.oc-tab):hover>a,
.oc #tab-header>ul.oc-tabmenu>li:not(.oc-tab):focus>a {
color: var(--oc-accent) !important;
}
.oc .card .general .btn:hover,
.oc #addCustomOption:hover {
background: var(--oc-accent-hover) !important;
}
.oc .help-link:hover {
background: var(--oc-accent-a10) !important;
}
.oc .select-option[data-value="custom"] {
border-color: var(--oc-accent-a20) !important;
background: var(--oc-accent-a10) !important;
&:hover {
background: var(--oc-accent-a20) !important;
}
}
.oc .announcement-banner,
.oc .oix-announcement {
background: linear-gradient(275deg, var(--oc-accent), var(--oc-accent-strong)) !important;
}
.oc .announcement-banner::before,
.oc .oix-announcement::before {
background: var(--oc-accent-strong) !important;
}
// The literal fill is a JavaScript state marker; change presentation only.
.oc #mode-icon rect[fill="#2F88FF"] {
fill: var(--oc-accent) !important;
}
// Argon cards use colour and shadow for hover feedback, not layout motion.
.oc .sub-card:hover,
.oc .myip-ip-item:hover,
.oc .myip-check-item:hover,
.oc .myip-card-item:hover,
.oc .card:hover,
.oc .oix-header:hover,
.oc .oix-card:hover,
.oc .config-upload-btn-large:hover {
transform: none !important;
}
// Legacy help text is primary emphasis; success and error remain semantic.
b[style*="color:green"],
b[style*="color: green"],
b[color="green"] {
color: var(--oc-accent) !important;
}
font[style*="color:green"],
font[style*="color: green"],
font[color="green"] {
color: var(--success) !important;
}
b[style*="color:red"],
b[style*="color: red"],
b[color="red"],
font[style*="color:red"],
font[style*="color: red"],
font[color="red"] {
color: var(--danger) !important;
}
// Normalize the config switcher and top-level navigation height.
.tabs>#tool_label {
padding-top: 0;
padding-bottom: 0;
vertical-align: middle;
.tool_label_span {
display: inline-flex;
align-items: center;
}
}
.cbi-section-node-tabbed>.cbi-tabcontainer {
gap: 0;
>.cbi-value {
padding-top: 0.4375rem;
padding-bottom: 0.4375rem;
}
}
&[data-page="admin-services-openclash-config"],
&[data-page="admin-services-openclash-config-subscribe"],
&[data-page^="admin-services-openclash-custom-dns-edit"],
&[data-page^="admin-services-openclash-config-subscribe-edit"],
&[data-page^="admin-services-openclash-groups-config"],
&[data-page^="admin-services-openclash-proxy-provider-config"],
&[data-page^="admin-services-openclash-servers-config"],
&[data-page^="admin-services-openclash-other-file-edit"] {
.cbi-map>.cbi-section>.cbi-section-node:not(.cbi-section-node-tabbed) {
padding-top: 1rem;
padding-bottom: 1rem;
}
}
&[data-page^="admin-services-openclash-config-subscribe-edit"] {
[id^="cbi-openclash-"][id$="-de_ex_keyword"] {
>.cbi-value-field {
>div:not([class])>span.cbi-checkbox {
display: inline-flex;
vertical-align: middle;
}
>.cbi-dropdown[multiple] {
max-width: 100%;
}
}
}
}
@@ -760,15 +1101,6 @@
margin-top: 5px;
}
.oc .sub-card:hover {
transform: none;
}
.oc .myip-ip-item:hover,
.oc .myip-check-item:hover {
transform: none;
}
.oc .main-cards-container {
margin: 0 !important;
gap: 0 !important;
@@ -804,14 +1136,6 @@
min-width: auto !important;
}
.oc .config-upload-content {
background: #fff !important;
}
.oc .subscription-info-container {
background: transparent !important;
}
.cbi-tabmenu>li {
border-right: none !important;
margin: 0 0.4rem 0 0 !important;
@@ -821,10 +1145,77 @@
}
}
// The custom table renderer carries release-owned inline colours. Keep its
// layout, but make colour and row rhythm match ordinary Argon pages.
#cbi-openclash .cbi-section-table-row,
#cbi-openclash .cbi-rowstyle-1,
#cbi-openclash .cbi-rowstyle-2,
#cbi-openclash .cbi-tabcontainer>.cbi-value:nth-of-type(2n),
#cbi-openclash table>tbody>tr:nth-of-type(2n) {
background: var(--oc-surface) !important;
}
#cbi-openclash [id^="tab-header-openclash-"] {
border-bottom-color: var(--oc-border) !important;
background: var(--oc-surface) !important;
>ul.cbi-tabmenu {
background: var(--oc-surface) !important;
>li {
color: var(--oc-text-muted) !important;
border-color: var(--oc-border) !important;
background: var(--oc-surface) !important;
&.cbi-tab {
color: #fff !important;
border-color: var(--oc-accent) !important;
background: var(--oc-accent) !important;
>a {
color: #fff !important;
}
}
&:not(.cbi-tab):hover,
&:not(.cbi-tab):focus {
color: var(--oc-accent) !important;
border-color: var(--oc-accent) !important;
background: var(--oc-accent-a10) !important;
>a {
color: var(--oc-accent) !important;
}
}
}
}
}
[id^="tab-header-openclash-"]>ul.cbi-tabmenu>li {
margin: 0 !important;
border-right: 1px solid var(--oc-border) !important;
}
[id^="tab-header-openclash-"]+[id="tab-content"] {
.td.cbi-section-table-cell>p {
padding: 0;
}
}
#tab-content .dom {
padding: 0 1rem 1rem 1rem;
}
#cbi-openclash-dns_servers .cbi-section-table-row>
.cbi-section-table-cell:last-child {
min-width: 7.25rem;
white-space: nowrap;
>.cbi-button {
margin: 0 0.125rem !important;
}
}
.cbi-input-file {
padding: 0.2813rem;
width: 15rem !important;
@@ -838,9 +1229,9 @@
#diag-rc-output>pre,
#dns-rc-output>pre {
font-size: 0.875rem;
color: #8898aa;
border: 1px solid #dee2e6;
background-color: transparent;
color: var(--oc-text-muted);
border: 1px solid var(--oc-border);
background-color: var(--oc-control-bg);
border-radius: 0.25rem;
font-family: 'Google Sans' !important;
box-shadow: none;
@@ -850,7 +1241,8 @@
font-family: 'Google Sans' !important;
}
.CodeMirror {
.CodeMirror,
.cm-editor {
font-size: inherit;
font-family: 'Google Sans' !important;
}
@@ -858,7 +1250,6 @@
.cbi-button-up,
.cbi-button-down {
padding: 0.8rem 1.5rem;
background-color: #f1f1f1;
font-size: 0;
}
@@ -866,6 +1257,34 @@
select#RELEASE_BRANCH {
width: auto;
}
@media screen and (max-width: 600px) {
&[data-page^="admin-services-openclash-config-subscribe-edit"] {
[id^="cbi-openclash-"][id$="-de_ex_keyword"] {
display: flex;
flex-direction: column;
>label.cbi-value-title {
display: block;
float: none;
width: 100%;
padding-right: 0;
text-align: left;
}
>.cbi-value-field {
width: 100%;
min-width: 0;
>.cbi-dropdown[multiple] {
width: 100%;
min-width: 0;
max-width: 100%;
}
}
}
}
}
}
// 5. VPN Pages
@@ -26,9 +26,6 @@ fetch_pic_url() {
sed 's/1920x1080/UHD/g')"
[ -n "${picpath}" ] && echo "//www.bing.com${picpath}"
;;
ghser)
echo "https://api.vvhan.com/api/wallpaper/acg"
;;
unsplash)
if [ -z "$API_KEY" ]; then
local pic_id="$(wget -T3 --spider \
@@ -77,13 +74,14 @@ try_update() {
if flock -n 200 >"/dev/null" 2>&1; then
local picurl="$(fetch_pic_url)"
if [ -n "$picurl" ]; then
# below is quirk fix for all browsers
# for some weird reason on first load, wallhaven images needs to be
# download or browsed first before it can be shown as a background image
# if not, browser only displays a blank image
# NOTE: only happens to Wallhaven.cc source images
if [[ "$WEB_PIC_SRC" == wallhave* ]] ; then
wget -T3 -q "${picurl}" -O /dev/null
wget -T3 -qO- "${picurl}" > /dev/null
fi
echo "$picurl" | tee "$CACHE"
@@ -0,0 +1,23 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{ hostname }}{{ node?.title ? ` - ${striptags(node.title)}` : '' }} - LuCI</title>
<!-- SEO and Description -->
<meta name="robots" content="noindex, nofollow">
<meta http-equiv="Referrer-Policy" content="strict-origin-when-cross-origin">
<!-- Mobile and PWA -->
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="apple-mobile-web-app-title" content="{{ hostname }} - LuCI">
<!-- Theme and Colors -->
<meta name="theme-color" content="{{ bar_color }}">
<!-- Icons and Manifest -->
<link rel="icon" type="image/x-icon" href="{{ media }}/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="{{ media }}/icon/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="{{ media }}/icon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="192x192" href="{{ media }}/icon/android-icon-192x192.png">
<link rel="apple-touch-icon" sizes="144x144" href="{{ media }}/icon/apple-icon-144x144.png">
<link rel="manifest" href="{{ media }}/icon/manifest.json">
@@ -19,7 +19,6 @@
{%
import { readfile, access } from 'fs';
import { cursor } from 'uci';
import { srand } from 'math';
import { getuid, getspnam } from 'luci.core';
const boardinfo = ubus.call("system", "board");
@@ -30,8 +29,6 @@
//send as HTML5
http.prepare_content('text/html; charset=UTF-8');
srand(+substr(reverse(time() + ""), 0, 8));
//Custom settings
let mode = 'normal';
let bar_color = '#5e72e4';
@@ -53,42 +50,7 @@
<html lang="{{ dispatcher.lang }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>{{ hostname }}{{ node?.title ? ` - ${striptags(node.title)}` : '' }} - LuCI</title>
<!-- SEO and Description -->
<meta name="robots" content="noindex, nofollow">
<!-- Security -->
<meta http-equiv="X-Content-Type-Options" content="nosniff">
<!-- <meta http-equiv="X-Frame-Options" content="SAMEORIGIN"> -->
<meta http-equiv="X-XSS-Protection" content="1; mode=block">
<meta http-equiv="Referrer-Policy" content="strict-origin-when-cross-origin">
<!-- Mobile and PWA -->
<meta name="format-detection" content="telephone=no, email=no">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="apple-mobile-web-app-title" content="{{ hostname }} - LuCI">
<!-- Theme and Colors -->
<meta name="theme-color" content="{{ bar_color }}">
<meta name="msapplication-TileColor" content="{{ bar_color }}">
<meta name="msapplication-TileImage" content="{{ media }}/icon/ms-icon-144x144.png">
<meta name="application-name" content="{{ hostname }} - LuCI">
<!-- Icons and Manifest -->
<link rel="icon" type="image/x-icon" href="{{ media }}/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="{{ media }}/icon/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="{{ media }}/icon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="96x96" href="{{ media }}/icon/favicon-96x96.png">
<link rel="icon" type="image/png" sizes="192x192" href="{{ media }}/icon/android-icon-192x192.png">
<link rel="apple-touch-icon" sizes="60x60" href="{{ media }}/icon/apple-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="{{ media }}/icon/apple-icon-72x72.png">
<link rel="apple-touch-icon" sizes="144x144" href="{{ media }}/icon/apple-icon-144x144.png">
<link rel="manifest" href="{{ media }}/icon/manifest.json" crossorigin="use-credentials">
{% include("themes/" + theme + "/head_meta", { hostname: hostname, node: node, bar_color: bar_color, media: media }) %}
<link rel="stylesheet" href="{{ media }}/css/cascade.css{# ?v=PKG_VERSION #}">
<style title="text/css">
@@ -19,7 +19,6 @@
{%
import { readfile, access } from 'fs';
import { cursor } from 'uci';
import { srand } from 'math';
const boardinfo = ubus.call("system", "board");
const hostname = striptags(boardinfo?.hostname ?? '?');
@@ -29,8 +28,6 @@
//send as HTML5
http.prepare_content('text/html; charset=UTF-8');
srand(+substr(reverse(time() + ""), 0, 8));
//Custom settings
let mode = 'normal';
let bar_color = '#5e72e4';
@@ -52,42 +49,7 @@
<html lang="{{ dispatcher.lang }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>{{ hostname }}{{ node?.title ? ` - ${striptags(node.title)}` : '' }} - LuCI</title>
<!-- SEO and Description -->
<meta name="robots" content="noindex, nofollow">
<!-- Security -->
<meta http-equiv="X-Content-Type-Options" content="nosniff">
<meta http-equiv="X-Frame-Options" content="SAMEORIGIN">
<meta http-equiv="X-XSS-Protection" content="1; mode=block">
<meta http-equiv="Referrer-Policy" content="strict-origin-when-cross-origin">
<!-- Mobile and PWA -->
<meta name="format-detection" content="telephone=no, email=no">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="apple-mobile-web-app-title" content="{{ hostname }} - LuCI">
<!-- Theme and Colors -->
<meta name="theme-color" content="{{ bar_color }}">
<meta name="msapplication-TileColor" content="{{ bar_color }}">
<meta name="msapplication-TileImage" content="{{ media }}/icon/ms-icon-144x144.png">
<meta name="application-name" content="{{ hostname }} - LuCI">
<!-- Icons and Manifest -->
<link rel="icon" type="image/x-icon" href="{{ media }}/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="{{ media }}/icon/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="{{ media }}/icon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="96x96" href="{{ media }}/icon/favicon-96x96.png">
<link rel="icon" type="image/png" sizes="192x192" href="{{ media }}/icon/android-icon-192x192.png">
<link rel="apple-touch-icon" sizes="60x60" href="{{ media }}/icon/apple-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="{{ media }}/icon/apple-icon-72x72.png">
<link rel="apple-touch-icon" sizes="144x144" href="{{ media }}/icon/apple-icon-144x144.png">
<link rel="manifest" href="{{ media }}/icon/manifest.json" crossorigin="use-credentials">
{% include("themes/" + theme + "/head_meta", { hostname: hostname, node: node, bar_color: bar_color, media: media }) %}
<link rel="stylesheet" href="{{ media }}/css/cascade.css{# ?v=PKG_VERSION #}">
<style title="text/css">
@@ -110,7 +72,6 @@
}
{% endif -%}
</style>
<link rel="shortcut icon" href="{{ media }}/favicon.ico">
{% if (node?.css): %}
<link rel="stylesheet" href="{{ resource }}/{{ node.css}}">
{% endif -%}
@@ -25,9 +25,16 @@
{%
import * as fs from 'fs';
import { cursor } from 'uci';
import { rand } from 'math';
let cfg = cursor();
// Per-request pseudo-random state for selecting local backgrounds.
let lcgState = (+time()) % 2147483648;
function randomIndex(limit) {
lcgState = (lcgState * 1103515245 + 12345) % 2147483648;
return lcgState % limit;
}
//Fetch Local Background Media
@@ -67,7 +74,7 @@
let background = fetchMedia("/www" + themeDir, themeDir);
if ( length(background) > 0 ) {
let currentBg = background[(rand() % length(background))];
let currentBg = background[randomIndex(length(background))];
bgUrl = currentBg.url;
if (index(videoTypes, " " + currentBg.type + " ") != -1) {
backgroundType = "Video";
@@ -47,6 +47,10 @@
& div[style*="display:grid"] {
@apply max-md:grid-cols-2! max-md:gap-3;
&:has(> .ifacebox) {
@apply place-items-center;
}
}
& .network-status-table {
@@ -63,7 +67,7 @@
}
.ifacebox {
@apply border-hairline bg-surface-overlay hover:border-hairline max-md:border-hairline relative inline-flex min-w-40 flex-col items-stretch overflow-visible rounded-2xl border text-center text-base leading-5 shadow-md hover:shadow-xl max-md:min-w-30 max-md:flex-1 max-md:rounded-3xl max-md:shadow-sm;
@apply border-hairline bg-surface-overlay hover:border-hairline max-md:border-hairline relative inline-flex min-w-28 flex-col items-stretch overflow-visible rounded-2xl border text-center text-base leading-5 shadow-md hover:shadow-xl max-md:min-w-30 max-md:flex-1 max-md:rounded-3xl max-md:shadow-sm;
td & {
@apply max-md:flex-row;
+2 -2
View File
@@ -8,8 +8,8 @@ include $(TOPDIR)/rules.mk
LUCI_TITLE:=Aurora Theme (A modern browser theme built with Vite and Tailwind CSS)
LUCI_DEPENDS:=+luci-base
PKG_VERSION:=1.2.6
PKG_RELEASE:=73
PKG_VERSION:=1.2.7
PKG_RELEASE:=74
PKG_LICENSE:=Apache-2.0
LUCI_MINIFY_CSS:=
File diff suppressed because one or more lines are too long