├── .github ├── ISSUE_TEMPLATE │ └── bug_report.md └── workflows │ ├── deno.yml │ └── manual_release.yml ├── .gitignore ├── LICENSE ├── Makefile ├── README.md ├── README_ZH.md ├── RELEASE.md ├── RELEASE_ZH.md ├── Screenshots ├── screenshot_pc.jpg └── screenshot_phone.jpg ├── htdocs └── luci-static │ ├── argon │ ├── background │ │ └── README.md │ ├── css │ │ ├── cascade.css │ │ └── dark.css │ ├── favicon.ico │ ├── fonts │ │ ├── TypoGraphica.eot │ │ ├── TypoGraphica.svg │ │ ├── TypoGraphica.ttf │ │ ├── TypoGraphica.woff │ │ ├── argon.eot │ │ ├── argon.svg │ │ ├── argon.ttf │ │ └── argon.woff │ ├── icon │ │ ├── android-icon-192x192.png │ │ ├── apple-icon-144x144.png │ │ ├── apple-icon-60x60.png │ │ ├── apple-icon-72x72.png │ │ ├── arrow.svg │ │ ├── browserconfig.xml │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── favicon-96x96.png │ │ ├── manifest.json │ │ ├── ms-icon-144x144.png │ │ └── spinner.svg │ ├── img │ │ ├── argon.svg │ │ ├── bg1.jpg │ │ ├── blank.png │ │ ├── volume_high.svg │ │ └── volume_off.svg │ └── js │ │ ├── jquery.min.js │ │ └── polyfill.min.js │ └── resources │ └── menu-argon.js ├── less ├── cascade.less ├── dark.less ├── fonts.less └── pure-min.less ├── luasrc └── view │ └── themes │ └── argon │ ├── footer.htm │ ├── footer_login.htm │ ├── header.htm │ ├── header_login.htm │ ├── out_header_login.htm │ └── sysauth.htm └── root ├── etc └── uci-defaults │ └── 30_luci-theme-argon └── usr ├── libexec └── argon │ └── online_wallpaper └── share └── rpcd └── acl.d └── luci-theme-argon.json /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Openwrt (please complete the following information):** 27 | - Versiosn: [e.g. 18.06-lean] 28 | - Theme [e.g. argon] 29 | - Version [e.g. 2.27] 30 | 31 | **Desktop (please complete the following information):** 32 | - OS: [e.g. iOS] 33 | - Browser [e.g. chrome, safari] 34 | - Version [e.g. 22] 35 | 36 | **Smartphone (please complete the following information):** 37 | - Device: [e.g. iPhone6] 38 | - OS: [e.g. iOS8.1] 39 | - Browser [e.g. stock browser, safari] 40 | - Version [e.g. 22] 41 | 42 | **Additional context** 43 | Add any other context about the problem here. 44 | -------------------------------------------------------------------------------- /.github/workflows/deno.yml: -------------------------------------------------------------------------------- 1 | # This workflow uses actions that are not certified by GitHub. 2 | # They are provided by a third-party and are governed by 3 | # separate terms of service, privacy policy, and support 4 | # documentation. 5 | 6 | # This workflow will install Deno then run `deno lint` and `deno test`. 7 | # For more information see: https://github.com/denoland/setup-deno 8 | 9 | name: Deno 10 | 11 | on: 12 | push: 13 | branches: ["master"] 14 | pull_request: 15 | branches: ["master"] 16 | 17 | permissions: 18 | contents: read 19 | 20 | jobs: 21 | test: 22 | runs-on: ubuntu-latest 23 | 24 | steps: 25 | - name: Setup repo 26 | uses: actions/checkout@v4 27 | 28 | - name: Setup Deno 29 | # uses: denoland/setup-deno@v1 30 | uses: denoland/setup-deno@61fe2df320078202e33d7d5ad347e7dcfa0e8f31 # v1.1.2 31 | with: 32 | deno-version: v1.x 33 | 34 | # Uncomment this step to verify the use of 'deno fmt' on each commit. 35 | # - name: Verify formatting 36 | # run: deno fmt --check 37 | 38 | - name: Run linter 39 | run: deno lint 40 | 41 | - name: Run tests 42 | run: deno test -A 43 | -------------------------------------------------------------------------------- /.github/workflows/manual_release.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2022-2023 SMALLPROGRAM 3 | # Description: Auto compile 4 | # 5 | 6 | # 7 | # Fork and compile the latest version yourself using Github Actions 8 | # 1.Into the repository of your own fork 9 | # 2.Into the repository [Settings] 10 | # 3.[Code and automation - Actions] ↓ [General] → [Workflow permissions] ↓ Check the [Read and write permissions] and [Save] 11 | # 4.Let's take [Actions] 12 | # 13 | 14 | name: "Auto compile with OpenWrt SDK" 15 | on: 16 | repository_dispatch: 17 | workflow_dispatch: 18 | inputs: 19 | ssh: 20 | description: 'SSH connection to Actions' 21 | required: false 22 | default: 'false' 23 | push: 24 | branches: 25 | - 'master' 26 | paths: 27 | - 'luci-theme-argon/Makefile' 28 | env: 29 | TZ: Asia/Shanghai 30 | 31 | 32 | jobs: 33 | job_check: 34 | if: github.repository == ${{ github.repository }} 35 | name: Check Version 36 | runs-on: ubuntu-latest 37 | outputs: 38 | argon_version: ${{ steps.check_version.outputs.latest_version }} 39 | has_update: ${{ steps.check_version.outputs.has_update }} 40 | steps: 41 | - name: Checkout 42 | uses: actions/checkout@main 43 | with: 44 | fetch-depth: 0 45 | ref: 'master' 46 | 47 | - name: Check version 48 | id: check_version 49 | env: 50 | url_release: https://api.github.com/repos/${{ github.repository }}/releases/latest 51 | run: | 52 | latest_version=$(grep -oP 'PKG_VERSION:=\K.*' Makefile | sed 's/^/v/') 53 | latest_release=$(wget -qO- -t1 -T2 ${{env.url_release}} | awk -F '"' '/tag_name/{print $4}') 54 | has_update=$([ "${latest_version}" != "${latest_release}" ] && echo true || echo false) 55 | echo "latest_version=${latest_version}" >> $GITHUB_OUTPUT 56 | echo "has_update=${has_update}" >> $GITHUB_OUTPUT 57 | echo "latest_version: ${latest_version}" 58 | echo "latest_release: ${latest_release}" 59 | echo "has_update: ${has_update}" 60 | 61 | - name: Generate new tag & release 62 | if: steps.check_version.outputs.has_update == 'true' 63 | uses: softprops/action-gh-release@v1 64 | env: 65 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 66 | with: 67 | name: For openwrt official Snapshots LuCI master 68 | tag_name: ${{steps.check_version.outputs.latest_version}} 69 | 70 | 71 | job_build_argon: 72 | name: Build Argon (master) 73 | needs: job_check 74 | if: needs.job_check.outputs.has_update == 'true' 75 | runs-on: ubuntu-latest 76 | steps: 77 | - name: Install packages 78 | run: | 79 | echo "Install packages" 80 | sudo -E apt-get -qq update 81 | sudo -E apt-get -qq install zstd build-essential clang flex bison g++ gawk gcc-multilib g++-multilib gettext git libncurses5-dev libssl-dev python3-venv rsync unzip zlib1g-dev file wget 82 | sudo -E apt-get -qq autoremove --purge 83 | sudo -E apt-get -qq clean 84 | 85 | - name: Cache openwrt SDK 86 | id: cache-sdk 87 | uses: actions/cache@v3 88 | with: 89 | path: sdk 90 | key: openwrt-sdk-snapshot-x86-64 91 | 92 | - name: Initialization environment 93 | if: steps.cache-sdk.outputs.cache-hit != 'true' 94 | env: 95 | url_sdk: https://downloads.openwrt.org/snapshots/targets/x86/64/openwrt-sdk-x86-64_gcc-13.3.0_musl.Linux-x86_64.tar.zst 96 | run: | 97 | wget ${{ env.url_sdk }} 98 | file_name=$(echo ${{env.url_sdk}} | awk -F/ '{print $NF}') 99 | mkdir sdk && tar --zstd -xvf $file_name -C ./sdk --strip-components=1 100 | cd sdk 101 | echo "src-git base https://github.com/openwrt/openwrt.git;main" > feeds.conf 102 | echo "src-git-full packages https://github.com/openwrt/packages.git;master" >> feeds.conf 103 | echo "src-git-full luci https://github.com/openwrt/luci.git;master" >> feeds.conf 104 | echo "src-git-full routing https://git.openwrt.org/feed/routing.git;master" >> feeds.conf 105 | git clone -b master https://github.com/${{ github.repository }}.git package/downloads/luci-theme-argon 106 | ./scripts/feeds update -a 107 | echo "CONFIG_PACKAGE_luci-theme-argon=m" > .config 108 | ./scripts/feeds install -d n luci-theme-argon 109 | make download -j8 110 | 111 | - name: Configure Argon (master) 112 | run: | 113 | cd sdk 114 | ./scripts/feeds install luci-theme-argon 115 | echo "CONFIG_ALL_NONSHARED=n" > .config 116 | echo "CONFIG_ALL_KMODS=n" >> .config 117 | echo "CONFIG_ALL=n" >> .config 118 | echo "CONFIG_AUTOREMOVE=n" >> .config 119 | echo "CONFIG_LUCI_LANG_zh_Hans=y" >> .config 120 | echo "CONFIG_PACKAGE_luci-theme-argon=m" >> .config 121 | make defconfig 122 | 123 | - name: Compile Argon (master) 124 | id: compile 125 | run: | 126 | cd sdk 127 | echo "make package/luci-theme-argon/{clean,compile} -j$(nproc)" 128 | make package/luci-theme-argon/{clean,compile} -j$(nproc) 129 | mv bin/packages/x86_64/base/ ../ 130 | rm .config .config.old 131 | cd .. 132 | echo "status=success" >> $GITHUB_OUTPUT 133 | echo "FIRMWARE=$PWD" >> $GITHUB_ENV 134 | 135 | - name: Upload Argon (master) ipks to release 136 | uses: softprops/action-gh-release@v1 137 | if: steps.compile.outputs.status == 'success' 138 | env: 139 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 140 | with: 141 | tag_name: ${{needs.job_check.outputs.argon_version}} 142 | files: ${{ env.FIRMWARE }}/base/luci-theme*.* 143 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | Screenshots 2 | .DS_Store -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (C) 2008-2019 Jerrykuku 3 | # 4 | # This is free software, licensed under the Apache License, Version 2.0 . 5 | # 6 | 7 | include $(TOPDIR)/rules.mk 8 | 9 | LUCI_TITLE:=Argon Theme 10 | LUCI_DEPENDS:=+curl +jsonfilter 11 | PKG_VERSION:=2.4.2 12 | PKG_RELEASE:=20250207 13 | 14 | CONFIG_LUCI_CSSTIDY:= 15 | 16 | include $(TOPDIR)/feeds/luci/luci.mk 17 | 18 | # call BuildPackage - OpenWrt buildroot signature 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 10 | 11 | [license]: /LICENSE 12 | [license-badge]: https://img.shields.io/github/license/jerrykuku/luci-theme-argon?style=flat-square&a=1 13 | [prs]: https://github.com/jerrykuku/luci-theme-argon/pulls 14 | [prs-badge]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square 15 | [issues]: https://github.com/jerrykuku/luci-theme-argon/issues/new 16 | [issues-badge]: https://img.shields.io/badge/Issues-welcome-brightgreen.svg?style=flat-square 17 | [release]: https://github.com/jerrykuku/luci-theme-argon/releases 18 | [release-badge]: https://img.shields.io/github/v/release/jerrykuku/luci-theme-argon?style=flat-square 19 | [download]: https://github.com/jerrykuku/luci-theme-argon/releases 20 | [download-badge]: https://img.shields.io/github/downloads/jerrykuku/luci-theme-argon/total?style=flat-square 21 | [contact]: https://t.me/jerryk6 22 | [contact-badge]: https://img.shields.io/badge/Contact-telegram-blue?style=flat-square 23 | [en-us-link]: /README.md 24 | [zh-cn-link]: /README_ZH.md 25 | [en-us-release-log]: /RELEASE.md 26 | [zh-cn-release-log]: /RELEASE_ZH.md 27 | [config-link]: https://github.com/jerrykuku/luci-app-argon-config/releases 28 | [lede]: https://github.com/coolsnowwolf/lede 29 | [official]: https://github.com/openwrt/openwrt 30 | [immortalwrt]: https://github.com/immortalwrt/immortalwrt 31 | 32 |
33 | 34 | 35 | # A brand new OpenWrt LuCI theme 36 | 37 | Argon is **a clean and tidy OpenWrt LuCI theme** that allows
38 | users to customize their login interface with images or videos. 39 | It also supports automatic and manual switching between light and dark modes. 40 | 41 | [![license][license-badge]][license] 42 | [![prs][prs-badge]][prs] 43 | [![issues][issues-badge]][issues] 44 | [![release][release-badge]][release] 45 | [![download][download-badge]][download] 46 | [![contact][contact-badge]][contact] 47 | 48 | **English** | 49 | [简体中文][zh-cn-link] 50 | 51 | [Key Features](#key-features) • 52 | [Branch](#branch-introduction) • 53 | [Version History](#version-history) • 54 | [Getting started](#getting-started) • 55 | [Screenshots](#screenshots) • 56 | [Contributors](#contributors) • 57 | [Credits](#credits) 58 | 59 | 60 |
61 | 62 | ## Key Features 63 | 64 | - Clean Layout. 65 | - Adapted to mobile display. 66 | - Customizable theme colors. 67 | - Support for using Bing images as login background. 68 | - Support for custom uploading of images or videos as login background. 69 | - Automatically switch between light and dark modes with the system, and can also be set to a fixed mode. 70 | - Settings plugin with extensions [luci-app-argon-config][config-link] 71 | 72 | > **Upcoming Version ** 73 | > 74 | > "The current theme uses Less for CSS construction, and the method for switching between light and dark modes is relatively primitive. Meanwhile, the official theme has already switched to the UT template. I am exploring a way to build the theme template using modern front-end development tools, initially settling on a solution using Vite + UnoCSS. This approach will utilize a proxy server for debugging and also support HMR (Hot Module Replacement), significantly improving development speed. Currently, the basic development framework has been set up, but due to a busy schedule, I still need some time to migrate the existing styles. Stay tuned!" 75 | 76 | ## Branch Introduction 77 | 78 | There are currently two main branches that are adapted to different versions of the **OpenWrt** source code. 79 | The table below will provide a detailed introduction: 80 | 81 | | Branch | Version | Description | Matching source | 82 | | ------ | ------- | ---------------------------------- | --------------------------------------------------------- | 83 | | master | v2.x.x | Support the latest version of LuCI | [Official OpenWrt][official] • [ImmortalWrt][immortalwrt] | 84 | | 18.06 (deprecated) | v1.x.x | Support the 18.06 version of LuCI | [Lean's LEDE][lede] | 85 | 86 | ## Version History 87 | 88 | The latest version is v2.3.1 [Click here][en-us-release-log] to view the full version history record. 89 | 90 | ## Getting started 91 | 92 | ### Build for Lean's LEDE project (deprecated) 93 | 94 | ```bash 95 | cd lede/package/lean 96 | rm -rf luci-theme-argon 97 | git clone -b 18.06 https://github.com/jerrykuku/luci-theme-argon.git luci-theme-argon 98 | make menuconfig #choose LUCI->Theme->Luci-theme-argon 99 | make -j1 V=s 100 | ``` 101 | 102 | ### Build for OpenWrt official SnapShots and ImmortalWrt 103 | 104 | ```bash 105 | cd openwrt/package 106 | git clone https://github.com/jerrykuku/luci-theme-argon.git 107 | make menuconfig #choose LUCI->Theme->Luci-theme-argon 108 | make -j1 V=s 109 | ``` 110 | 111 | ### Install for LuCI 18.06 ( Lean's LEDE ) 112 | 113 | ```bash 114 | wget --no-check-certificate https://github.com/jerrykuku/luci-theme-argon/releases/download/v1.8.2/luci-theme-argon_1.8.2-20230609_all.ipk 115 | opkg install luci-theme-argon*.ipk 116 | ``` 117 | 118 | ### Install for OpenWrt official SnapShots and ImmortalWrt 119 | 120 | ```bash 121 | opkg install luci-compat 122 | opkg install luci-lib-ipkg 123 | wget --no-check-certificate https://github.com/jerrykuku/luci-theme-argon/releases/download/v2.3.2/luci-theme-argon_2.3.2-r20250207_all.ipk 124 | opkg install luci-theme-argon*.ipk 125 | ``` 126 | 127 | ### Install luci-app-argon-config 128 | 129 | ```bash 130 | wget --no-check-certificate -O luci-app-argon-config_0.9_all.ipk https://github.com/jerrykuku/luci-app-argon-config/releases/download/v0.9/luci-app-argon-config_0.9_all.ipk 131 | opkg install luci-app-argon-config*.ipk 132 | ``` 133 | 134 | ## Notice 135 | 136 | - Chrome browser is highly recommended. There are some new css3 features used in this theme, currently only Chrome has the best compatibility. 137 | - Microsoft has officially retired Internet Explorer, RIP IE🙏Currently, the mainline version of the IE series has bugs that need to be addressed. 138 | - FireFox does not enable the backdrop-filter by default, [see here](https://developer.mozilla.org/zh-CN/docs/Web/CSS/backdrop-filter) for the opening method. 139 | 140 | ## Screenshots 141 | 142 | ![desktop](/Screenshots/screenshot_pc.jpg) 143 | ![mobile](/Screenshots/screenshot_phone.jpg) 144 | 145 | ## Contributors 146 | 147 | 148 | 149 | 150 | 151 | Made with [contrib.rocks](https://contrib.rocks). 152 | 153 | ## Related Projects 154 | 155 | - [luci-app-argon-config](https://github.com/jerrykuku/luci-app-argon-config): Argon theme config plugin 156 | - [openwrt-package](https://github.com/jerrykuku/openwrt-package): My OpenWrt package 157 | - [CasaOS](https://github.com/IceWhaleTech/CasaOS): A simple, easy-to-use, elegant open-source Personal Cloud system (My current main project) 158 | 159 | ## Credits 160 | 161 | [luci-theme-material](https://github.com/LuttyYang/luci-theme-material/) 162 | -------------------------------------------------------------------------------- /README_ZH.md: -------------------------------------------------------------------------------- 1 | 10 | 11 | [license]: /LICENSE 12 | [license-badge]: https://img.shields.io/github/license/jerrykuku/luci-theme-argon?style=flat-square&a=1 13 | [prs]: https://github.com/jerrykuku/luci-theme-argon/pulls 14 | [prs-badge]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square 15 | [issues]: https://github.com/jerrykuku/luci-theme-argon/issues/new 16 | [issues-badge]: https://img.shields.io/badge/Issues-welcome-brightgreen.svg?style=flat-square 17 | [release]: https://github.com/jerrykuku/luci-theme-argon/releases 18 | [release-badge]: https://img.shields.io/github/v/release/jerrykuku/luci-theme-argon?style=flat-square 19 | [download]: https://github.com/jerrykuku/luci-theme-argon/releases 20 | [download-badge]: https://img.shields.io/github/downloads/jerrykuku/luci-theme-argon/total?style=flat-square 21 | [contact]: https://t.me/jerryk6 22 | [contact-badge]: https://img.shields.io/badge/Contact-telegram-blue?style=flat-square 23 | [en-us-link]: /README.md 24 | [zh-cn-link]: /README_ZH.md 25 | [en-us-release-log]: /RELEASE.md 26 | [zh-cn-release-log]: /RELEASE_ZH.md 27 | [config-link]: https://github.com/jerrykuku/luci-app-argon-config/releases 28 | [lede]: https://github.com/coolsnowwolf/lede 29 | [official]: https://github.com/openwrt/openwrt 30 | [immortalwrt]: https://github.com/immortalwrt/immortalwrt 31 | 32 |
33 | 34 | 35 | # 一个全新的 OpenWrt 主题 36 | 37 | Argon 是**一款干净整洁的 OpenWrt LuCI 主题**, 38 | 允许用户使用图片或视频自定义其登录界面。 39 | 它还支持在浅色模式和深色模式之间自动或手动切换。 40 | 41 | [![license][license-badge]][license] 42 | [![prs][prs-badge]][prs] 43 | [![issues][issues-badge]][issues] 44 | [![release][release-badge]][release] 45 | [![download][download-badge]][download] 46 | [![contact][contact-badge]][contact] 47 | 48 | [English][en-us-link] | 49 | **简体中文** 50 | 51 | [特色](#特色) • 52 | [分支介绍](#分支介绍) • 53 | [版本历史](#版本历史) • 54 | [快速开始](#快速开始) • 55 | [屏幕截图](#屏幕截图) • 56 | [贡献者](#贡献者) • 57 | [鸣谢](#鸣谢) 58 | 59 | 60 |
61 | 62 | ## 特色 63 | 64 | - 干净整洁的布局。 65 | - 适配移动端显示。 66 | - 可自定义主题颜色。 67 | - 支持使用 Bing 图片作为登录背景。 68 | - 支持自定义上传图片或视频作为登录背景。 69 | - 通过系统自动在明暗模式之间切换,也可设置为固定模式。 70 | - 带有扩展功能的设置插件 [luci-app-argon-config][config-link] 71 | 72 | ## 分支介绍 73 | 74 | 目前有两个主要的分支,适应于不同版本的**OpenWrt**源代码。 75 | 下表为详细的介绍: 76 | 77 | | 分支 | 版本 | 介绍 | 匹配源码 | 78 | | ------ | ------ | --------------------------- | ----------------------------------------------------- | 79 | | master | v2.x.x | 支持最新和比较新版本的 LuCI | [官方 OpenWrt][official] • [ImmortalWrt][immortalwrt] | 80 | | 18.06 | v1.x.x | 支持 18.06 版本的 LuCI | [Lean's LEDE][lede] | 81 | 82 | ## 版本历史 83 | 84 | 当前最新的版本为 v2.3.1 [点击这里][zh-cn-release-log]查看完整的版本历史日志. 85 | 86 | ## 快速开始 87 | 88 | ### 使用 Lean's LEDE 构建 89 | 90 | ```bash 91 | cd lede/package/lean 92 | rm -rf luci-theme-argon 93 | git clone -b 18.06 https://github.com/jerrykuku/luci-theme-argon.git luci-theme-argon 94 | make menuconfig #choose LUCI->Theme->Luci-theme-argon 95 | make -j1 V=s 96 | ``` 97 | 98 | ### 使用官方 OpenWrt SnapShots 和 ImmortalWrt 99 | 100 | ```bash 101 | cd openwrt/package 102 | git clone https://github.com/jerrykuku/luci-theme-argon.git 103 | make menuconfig #choose LUCI->Theme->Luci-theme-argon 104 | make -j1 V=s 105 | ``` 106 | 107 | ### 在 18.06 的 LuCI 上安装 ( Lean's LEDE ) 108 | 109 | ```bash 110 | wget --no-check-certificate https://github.com/jerrykuku/luci-theme-argon/releases/download/v1.8.2/luci-theme-argon_1.8.2-20230609_all.ipk 111 | opkg install luci-theme-argon*.ipk 112 | ``` 113 | 114 | ### 在官方和 ImmortalWrt 上安装 115 | 116 | ```bash 117 | opkg install luci-compat 118 | opkg install luci-lib-ipkg 119 | wget --no-check-certificate https://github.com/jerrykuku/luci-theme-argon/releases/download/v2.3.2/luci-theme-argon_2.3.2-r20250207_all.ipk 120 | opkg install luci-theme-argon*.ipk 121 | ``` 122 | 123 | ### 安装 luci-app-argon-config 124 | 125 | ```bash 126 | wget --no-check-certificate https://github.com/jerrykuku/luci-app-argon-config/releases/download/v0.9/luci-app-argon-config_0.9_all.ipk 127 | opkg install luci-app-argon-config*.ipk 128 | ``` 129 | 130 | ## 注意 131 | 132 | - 强烈建议使用 Chrome 浏览器。这个主题中使用了一些新的 css3 功能,目前只有 Chrome 浏览器有最好的兼容性。 133 | - 微软已正式退役 Internet Explorer,安息吧 IE🙏目前,IE 系列的主线版本有需要解决的错误。 134 | - FireFox 默认不启用 backdrop-filter,[见这里](https://developer.mozilla.org/zh-CN/docs/Web/CSS/backdrop-filter)的打开方法。 135 | 136 | ## 屏幕截图 137 | 138 | ![desktop](/Screenshots/screenshot_pc.jpg) 139 | ![mobile](/Screenshots/screenshot_phone.jpg) 140 | 141 | ## 贡献者 142 | 143 | 144 | 145 | 146 | 147 | Made with [contrib.rocks](https://contrib.rocks). 148 | 149 | ## 相关项目 150 | 151 | - [luci-app-argon-config](https://github.com/jerrykuku/luci-app-argon-config): Argon 主题的设置插件 152 | - [openwrt-package](https://github.com/jerrykuku/openwrt-package): 我的 OpenWrt Package 153 | - [CasaOS](https://github.com/IceWhaleTech/CasaOS): 一个简单、易用且优雅的开源个人家庭云系统(我目前主要开发的项目) 154 | 155 | ## 鸣谢 156 | 157 | [luci-theme-material](https://github.com/LuttyYang/luci-theme-material/) 158 | -------------------------------------------------------------------------------- /RELEASE.md: -------------------------------------------------------------------------------- 1 | # Update log for master branch 2 | 3 | ## v2.3.1 [ 2023.04.20 ] 4 | 5 | - Fixed the issue where the dropdown menu was being clipped. 6 | - Fixed the problem where the exit icon was replaced with the app store icon. 7 | - Fixed the issue where some colors were out of control in dark mode. 8 | - Fixed the problem where the local startup script textarea could not be scrolled in the startup item. 9 | - Fixed the problem where the Passwall node list button was misaligned. 10 | - Fixed the text overflow problem in dynlist 11 | - Support wallpaper from Unsplashargon 12 | - Fix menu style mis-match on macOS+Chrome 13 | - Fixed the issue of the login page icon becoming larger 14 | - Support wallpaper from wallhaven 15 | > open footer links in new tab 16 | - Remake theme icon 17 | 18 | ## v2.3 [ 2023.04.03 ] 19 | 20 | - Updated the style of Loading. 21 | - Fixed a large number of CSS style errors and made the overall more uniform. 22 | - Fixed the problem of uncontrolled individual colors in dark mode. 23 | 24 | ## v2.2.9 25 | 26 | - Unify the settings of css spacing 27 | - Refactored the code of the login page 28 | - Fix the problem that the Minify Css option is turned on when compiling, which causes the 29 | - Fix the problem that the menu could not pop up in mobile mode 30 | - Unify the settings of css spacing 31 | - Refactored the code of the login page 32 | 33 | ## v2.2.8 34 | 35 | - 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. 36 | 37 | ## v2.2.5 38 | 39 | - 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) 40 | - Automatically set as the default theme when compiling. 41 | - 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. 42 | - Adapt to Koolshare lede 2.3.6。 43 | - Fix some Bug。 44 | 45 | ## v2.2.4 46 | 47 | - Fix the problem that the login background cannot be displayed on some phones. 48 | - Remove the dependency of luasocket. 49 | 50 | ## v2.2.3 51 | 52 | - Fix Firmware flash page display error in dark mode. 53 | - Update font icon, add a default icon of undefined menu. 54 | 55 | ## v2.2.2 56 | 57 | - Add custom login background,put your image (allow png jpg gif) or MP4 video into /www/luci-static/argon/background, random change. 58 | - Add force dark mode, login ssh and type "touch /etc/dark" to open dark mode. 59 | - Add a volume mute button for video background, default is muted. 60 | - fix login page when keyboard show the bottom text overlay the button on mobile. 61 | - fix select color in dark mode,and add a style for scrollbar. 62 | - jquery update to v3.5.1. 63 | - change request bing api method form wget to luasocket (DEPENDS). 64 | 65 | ## v2.2.1 66 | 67 | - Add blur effect for login form. 68 | - New login theme, Request background imge from bing.com, Auto change everyday. 69 | - New theme icon. 70 | - Add more menu category icon. 71 | - Fix font-size and padding margin. 72 | - Restructure css file. 73 | - Auto adapt to dark mode. 74 | -------------------------------------------------------------------------------- /RELEASE_ZH.md: -------------------------------------------------------------------------------- 1 | # Master 分支的更新日志 2 | 3 | ## v2.3.1 [ 2023.04.20 ] 4 | 5 | - 修复了下拉菜单被裁切的问题 6 | - 修复了退出图标变成了应用商店图标的问题 7 | - 修复了暗色模式下个别颜色不受控制的问题 8 | - 修复了启动项--本地启动脚本文本框不能滑动的问题 9 | - 修复了Passwall节点列表按钮错位的问题 10 | - 修复在dynlist中的文本溢出问题 11 | - 登录页面 支持自来 Unsplash 的在线壁纸 12 | - 修复在macOS的Chrome中,菜单的style异常 13 | - 修复在登录页面中,主题图标变大的问题 14 | - 登录页面 支持自来 wallhaven 的在线壁纸 15 | > 打开页脚链接时使用新标签页 16 | - 重制主题图标 17 | 18 | ## v2.3 [ 2023.04.03 ] 19 | 20 | - 更新了 Loading 的样式 21 | - 修复了大量的 CSS 样式错误,整体更加统一 22 | - 修复了暗色模式下个别颜色不受控制的问题 23 | 24 | ## v2.2.9 25 | 26 | - 修复了在手机模式下无法弹出菜单的 bug 27 | - 统一 css 间距的设置 28 | - 重构了登录页面的代码 29 | - 为导航菜单添加滑动效果 30 | 31 | ## v2.2.8 32 | 33 | - 【v2.2.8】修复编译时打开 Minify Css 选项,导致磨砂玻璃效果无效,logo 字体丢失的问题 34 | 35 | ## v2.2.5 36 | 37 | - 全新的设置 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) 38 | - 当编译固件时,将自动设置为默认主题。 39 | - 修改文件结构,以适应 luci-app-argon-config,旧的开启暗色模式方法将不再适用,请搭配 luci-app-argon-config 使用。 40 | - 适配 Koolshare lede 2.3.6。 41 | - 修复了一些 Bug。 42 | 43 | ## v2.2.4 44 | 45 | - 修复了在某些手机下图片背景第一次加载不能显示的问题。 46 | - 取消 luasocket 的依赖,无需再担心依赖问题。 47 | 48 | ## v2.2.3 49 | 50 | - 修正了在暗色模式下,固件刷写弹窗内的显示错误。 51 | - 更新了图标库,为未定义的菜单增加了一个默认的图标。 52 | 53 | ## v2.2.2 54 | 55 | - 背景文件策略调整为,同时接受 jpg png gif mp4, 自行上传文件至 /www/luci-static/argon/background 图片和视频同时随机。 56 | - 增加强制暗色模式,进入 ssh 输入 "touch /etc/dark" 进行开启。 57 | - 视频背景加了一个音量开关,喜欢带声音的可以自行点击开启,默认为静音模式。 58 | - 修复了手机模式下,登录页面出现键盘时,文字覆盖按钮的问题。 59 | - 修正了暗黑模式下下拉选项的背景颜色,同时修改了滚动条的样式。 60 | - jquery 更新到 v3.5.1。 61 | - 获取 Bing Api 的方法从 wget 更新到 luasocket 并添加依赖。 62 | 63 | ## v2.2.1 64 | 65 | - 登录背景添加毛玻璃效果。 66 | - 全新的登录界面,图片背景跟随 Bing.com,每天自动切换。 67 | - 全新的主题 icon。 68 | - 增加多个导航 icon。 69 | - 细致的微调了 字号大小边距等等。 70 | - 重构了 css 文件。 71 | - 自动适应的暗黑模式。 72 | -------------------------------------------------------------------------------- /Screenshots/screenshot_pc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jerrykuku/luci-theme-argon/e289597ca77a8f06bcaff55d5f5f3ffbfde8490e/Screenshots/screenshot_pc.jpg -------------------------------------------------------------------------------- /Screenshots/screenshot_phone.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jerrykuku/luci-theme-argon/e289597ca77a8f06bcaff55d5f5f3ffbfde8490e/Screenshots/screenshot_phone.jpg -------------------------------------------------------------------------------- /htdocs/luci-static/argon/background/README.md: -------------------------------------------------------------------------------- 1 | Drop background here! 2 | accept jpg png gif mp4 webm 3 | -------------------------------------------------------------------------------- /htdocs/luci-static/argon/css/dark.css: -------------------------------------------------------------------------------- 1 | body{background:#1e1e1e;color:#cccccc}.login-page .login-container .login-form{background-color:#1e1e1e;-webkit-backdrop-filter:blur(var(--blur-radius-dark));backdrop-filter:blur(var(--blur-radius-dark));background-color:rgba(0, 0, 0, var(--blur-opacity-dark))}.login-page .login-container .login-form .brand{color:#adb5bd}.login-page .login-container .login-form .form-login .input-group::before{color:#adb5bd}.login-page .login-container .login-form .form-login .input-group input{background-color:transparent !important;color:#adb5bd;border-bottom:#adb5bd 1px solid !important;border-radius:0 !important;border-top:none !important;border-left:none !important;border-right:none !important;box-shadow:none}.login-page .login-container .login-form .form-login .cbi-button-apply{background-color:#483d8b !important;background-color:var(--dark-primary) !important}.login-page .login-container .login-form .form-login .cbi-button-apply:hover,.login-page .login-container .login-form .form-login .cbi-button-apply:focus{opacity:.9}header::after{background-color:#1e1e1e !important}.main .main-left{background-color:#333333 !important;box-shadow:0 0 .5rem 0 rgba(0,0,0,0.15)}.main .main-left .sidenav-header .brand{color:#cccccc}.main .main-left .nav .slide .slide-menu .active a{color:#cccccc}.main .main-left .nav .slide .slide-menu .active a::after{background-color:#cccccc !important}.main .main-left .nav .slide .slide-menu .active::after{background-color:var(--dark-primary) !important}.main .main-left .nav .slide .slide-menu li a{color:#cccccc}.main .main-left .nav .slide .slide-menu li a:hover{background:none !important}.main .main-left .nav .slide .slide-menu li::after{background-color:var(--dark-primary) !important}.main .main-left .nav .slide .menu.active{background-color:#483d8b !important;background-color:var(--dark-primary) !important;color:#ffffff !important}.main .main-left .nav .slide .menu.active a::after{background-color:#ffffff !important}.main .main-left .nav li a{color:#cccccc !important}.main .main-left .nav li a:hover{background-color:#483d8b !important;background-color:var(--dark-primary) !important;color:#ffffff !important}.main .main-left::-webkit-scrollbar-thumb{background-color:#252526 !important}.main .main-left::-webkit-scrollbar-track{background-color:#333}.main .main-right{background-color:#1e1e1e}h2{color:#ccc;background:#333333}h3{color:#ccc;border-bottom:0;background:#333333}h4{color:#8C6900}abbr{color:var(--dark-primary) !important}a:link,a:visited,a:active{color:#a5b2ff}input:-webkit-autofill{background-color:#3c3c3c !important}#channel_graph{background-color:transparent !important}.cbi-value-field .cbi-input-apply,.cbi-button-apply,.cbi-button-edit{color:#fff !important;background-color:#483d8b !important;background-color:var(--dark-primary) !important;border-color:#483d8b !important;border-color:var(--dark-primary) !important}.cbi-section em{color:#ccc}header.bg-primary{background-color:#1e1e1e !important}.cbi-map-descr{color:#ccc}.cbi-section{background:none;box-shadow:0 0 .5rem 0 rgba(0,0,0,0.35)}.panel-title{color:#ccc;background-color:#333333}div>table>tbody>tr:nth-of-type(2n),div>.table>.tr:nth-of-type(2n){background-color:#252526}table>tbody>tr>td,table>tfoot>tr>td,table>thead>tr>td{color:#cccccc}fieldset>table>tbody>tr:nth-of-type(2n){background-color:#252526}table>tbody>tr>td,table>tfoot>tr>td,table>thead>tr>td{border-top:1px solid #252526}#swaptotal>div>div,#swapfree>div>div,#memfree>div>div,#membuff>div>div,#conns>div>div,#memtotal>div>div{background-color:var(--dark-primary) !important}#swaptotal>div>div>div>small,#swapfree>div>div>div>small,#memfree>div>div>div>small,#membuff>div>div>div>small,#conns>div>div>div>small,#memtotal>div>div>div>small{color:#ccc !important}.node-system-packages>.main .cbi-section-node:first-child .cbi-value-last{line-height:1.8em}.node-system-packages>.main .cbi-section-node:first-child .cbi-value-last div[style="margin:3px 0; width:300px; height:10px; border:1px solid #000000; background-color:#80C080"]{border:1px solid #999999 !important;background-color:transparent !important}.node-system-packages>.main .cbi-section-node:first-child .cbi-value-last div[style="margin:3px 0; width:300px; height:10px; border:1px solid #000000; background-color:#80C080"] div{background-color:#ba8b00 !important}table>tbody>tr>th,table>tfoot>tr>th,table>thead>tr>th{background-color:#252526;border-bottom:black 1px solid !important}tr>td,tr>th,.tr>.td,.tr>.th,.cbi-section-table-row::before,#cbi-wireless>#wifi_assoclist_table>.tr:nth-child(2){border-top:0}.cbi-rowstyle-2{background-color:#1e1e1e}.cbi-rowstyle-1{background-color:#252526}.cbi-rowstyle-2 .cbi-button-up,.cbi-rowstyle-2 .cbi-button-down,body:not(.Interfaces) .cbi-rowstyle-2:first-child{background-color:#666 !important}.cbi-section>h3:first-child,.panel-title,h3{color:#ccc}h4{background-color:#1e1e1f}.cbi-progressbar{background:#282a2c}.cbi-progressbar div{background-color:var(--dark-primary) !important}.cbi-section-table .cbi-section-table-titles .cbi-section-table-cell{background-color:#1e1e1f}.cbi-button{color:#ffffff !important;background-color:#483d8b;background-color:var(--dark-primary)}.cbi-section-node{background:none}abbr{color:#5e72e4}div>table>tbody>tr:nth-of-type(2n),div>.table>.tbody>.tr:nth-of-type(2n){background-color:#252526}#content_syslog{box-shadow:0 0 .5rem 0 rgba(0,0,0,0.35)}#syslog{color:#ccc;background-color:#1e1e1e}#iwsvg,#iwsvg2,#bwsvg{overflow:hidden;box-shadow:0 0 .5rem 0 rgba(0,0,0,0.35);background-color:#1e1e1e !important}.tabs{background-color:#252526}.tabs li[class~="active"],.tabs li:hover{cursor:pointer;color:#ccc !important}.tabs li[class~="active"] a,.tabs li:hover a{color:#ccc !important}.tabs>li[class~="active"]>a{color:#ccc}.tabs>li[class~="active"],.tabs>li:hover{border-bottom:.18751rem solid #483d8b;border-bottom:.18751rem solid var(--dark-primary);color:var(--dark-primary) !important;background-color:#181819}.cbi-tabmenu>li>a,.tabs>li>a{color:#ccc}.cbi-tabmenu>li>a:hover,.tabs>li>a:hover{color:#ccc}.cbi-tabmenu>li{background:#2d2d2d}.cbi-tabmenu li[class~="cbi-tab"] a{color:#ccc}.cbi-tabmenu>li:hover{color:#ccc;background:#2d2d2d;border-bottom:.18751rem solid var(--dark-primary) !important}.cbi-tabmenu>li[class~="cbi-tab"]{background-color:#181819;border-bottom:.18751rem solid var(--dark-primary) !important}.cbi-tabcontainer>.cbi-value:nth-of-type(2n){background-color:#252526}.cbi-value-title{color:#ccc}select,input{color:#ccc;background-color:transparent !important;border:1px solid #252526;box-shadow:none}select:not([multiple="multiple"]):focus,input:focus{border-color:#483d8b !important;border-color:var(--dark-primary) !important;outline:0}select:not([multiple="multiple"]):focus,input:not(.cbi-button):focus,.cbi-dropdown:focus{border-color:#5e72e4;border-color:var(--dark-primary) !important}select{background-color:#1e1e1e !important}#cbi-dropbear h2,#cbi-dropbear .cbi-map-descr,#cbi-dropbear .cbi-map-descr abbr,#cbi-rc h2,#cbi-rc .cbi-map-descr,#cbi-distfeedconf h2,#cbi-distfeedconf .cbi-map-descr,#cbi-customfeedconf h2,#cbi-customfeedconf .cbi-map-descr,#cbi-download h2,#cbi-filelist h2{color:#ccc !important}.cbi-value-field>ul>li .ifacebadge{background-color:#3c3c3c}.cbi-section-descr{color:#ccc}.cbi-input-textarea{background-color:#1e1e1e;color:#ccc;border:1px solid #3c3c3c !important}textarea:focus-visible{border:1px solid var(--dark-primary)}.cbi-section-remove:nth-of-type(2n),.cbi-section-node:nth-of-type(2n){background-color:#1e1e1e}.cbi-section[id] .cbi-section-remove:nth-of-type(4n+3),.cbi-section[id] .cbi-section-node:nth-of-type(4n+4){background-color:#1e1e1e}.node-system-packages>.main table tr td:nth-last-child(1){color:#ccc}.cbi-tooltip{background-color:var(--primary);color:#fff}.ifacebox{background-color:transparent !important;border:1px solid #1e1e1e}.ifacebox-head{color:#ccc;background:#666}.ifacebox-body{background-color:#333}.zonebadge strong{color:#333}.zonebadge>.ifacebadge{background-color:#3c3c3c}div.cbi-value var,td.cbi-value-field var{color:#5e72e4}#diag-rc-output>pre{color:#ccc;background-color:#1e1e1e}.node-services-vssr .block{background-color:#3c3c3c !important;box-shadow:0 0 .5rem 0 rgba(0,0,0,0.35)}.node-services-vssr .block h4{color:#ccc !important}.node-services-vssr .status-bar{color:#ccc;box-shadow:0 0 .5rem 0 rgba(0,0,0,0.35);background-color:#1e1e1e}.node-services-vssr .cbi-section-table-row{color:#ccc;background-color:#3c3c3c !important;box-shadow:0 0 5px 0 rgba(0,0,0,0.35)}.node-services-vssr .cbi-section-table-row.fast{background:#483d8b !important;background:var(--dark-primary) !important;color:#fff}.node-services-vssr .ssr-button{color:#ccc}.node-services-vssr .incon:nth-child(2){border-right:#1e1e1e 1px solid}#xhr_poll_status>.label.success{color:#ccc !important;background-color:darkolivegreen !important}.notice{background-color:#483d8b !important;background-color:var(--dark-primary) !important}.cbi-input-find,.cbi-input-save,.cbi-button-add,.cbi-button-save,.cbi-button-find,.cbi-input-reload,.cbi-button-reload{color:#fff !important;background:darkolivegreen !important;border-color:darkolivegreen !important}.cbi-button-reset,.cbi-input-remove{color:#fff !important;background-color:darkorange !important;border-color:darkorange !important}.cbi-page-actions .cbi-button-apply,.cbi-section-actions .cbi-button-edit,.cbi-button-edit.important,.cbi-button-apply.important,.cbi-button-reload.important,.cbi-button-action.important{border:1px #483d8b solid !important;border:1px var(--dark-primary) solid !important}.btn[value="Dismiss"],.cbi-button[value="Terminate"],.cbi-button[value="Reset"],.cbi-button[value="Disabled"],.cbi-button[onclick^="iface_reconnect"],.cbi-button[onclick="handleReset(event)"],.cbi-button-neutral[value="Disable"]{color:#fff;border:thin solid darkorange !important;background-color:darkorange !important}fieldset[id^="cbi-apply-"]{background-color:#333333}#detail-bubble>div{border:1px solid #ccc;background:#252525}.ifacebox-head.active{background-color:var(--dark-primary) !important}header .fill .status span[data-style="active"]{color:#ccc !important;background-color:darkolivegreen !important}#cbi-wireless .td,#cbi-network .tr:first-child>.td,.table[width="100%"]>.tr:first-child>.td,[data-page="admin-network-diagnostics"] .tr>.td,.tr.table-titles>.th,.tr.cbi-section-table-titles>.th{background-color:#252526;border-bottom:black 1px solid !important}.network-status-table .ifacebox-body .ifacebadge{background-color:#252526;border-bottom:0;box-shadow:none}td>.ifacebadge,.td>.ifacebadge{color:#fff;background-color:#483d8b;background-color:var(--dark-primary);border:0}.alert,.alert-message{background-color:#333}.alert-message.warning{background-color:#986400 !important}.alert.error,.alert-message.error{background-color:#784f00}.alert h4,.alert-message h4{background-color:#784f00;color:#ffbf00}.alert-message [class="btn"]{background-color:#777777;color:#ccc}.uci-dialog .cbi-section .uci-change-legend .uci-change-legend-label>ins{border-color:#00ad00;background-color:#688668}.uci-dialog .cbi-section .uci-change-legend .uci-change-legend-label>del{border-color:#c60000;background-color:#896565}.uci-dialog .cbi-section .uci-change-legend .uci-change-legend-label>var{background-color:#333;border-color:#666}.uci-dialog .cbi-section .uci-change-legend .uci-change-legend-label>var ins{background-color:#688668}.uci-dialog .cbi-section .uci-change-legend .uci-change-legend-label>var del{background-color:#896565}.uci-dialog .cbi-section .uci-change-list>var{background-color:#333;border-color:#666}.uci-dialog .cbi-section .uci-change-list>var del{background-color:#896565}.uci-dialog .cbi-section .uci-change-list>var ins{background-color:#688668}.uci-dialog .cbi-section .uci-change-list>ins{border-color:#00ad00;background-color:#688668}.uci-dialog .cbi-section .uci-change-list>del{border-color:#c60000;background-color:#896565}.uci-dialog .cbi-section .uci-change-list+.right .btn{color:#ccc}.uci-dialog .cbi-section .uci-change-list+.right .cbi-button{border:1px solid #3c3c3c !important}.btn.danger,.cbi-section-remove>.cbi-button,.cbi-button-remove,.cbi-button-reset,.cbi-button-negative,.cbi-button[value="Stop"],.cbi-button[value="Kill"],.cbi-button[onclick="reboot(this)"],.cbi-button-neutral[value="Restart"]{border:thin solid darkorange !important;background-color:darkorange !important}.cbi-section,.cbi-section-error,#iptables,.Firewall form,#cbi-network>.cbi-section-node,#cbi-wireless>.cbi-section-node,#cbi-wireless>#wifi_assoclist_table,[data-tab-title],[data-page^="admin-system-admin"]:not(.node-main-login) .cbi-map:not(#cbi-dropbear),[data-page="admin-system-opkg"] #maincontent>.container{background:#1e1e1e !important;box-shadow:0 0 .5rem 0 rgba(0,0,0,0.35)}div[style="width:100%;height:300px;border:1px solid #000;background:#fff"]{background:transparent !important}[data-page="admin-system-admin"] .cbi-map h2,[data-page="admin-system-admin-password"] .cbi-map h2,[data-page="admin-system-admin"] .cbi-map .cbi-map-descr,[data-page="admin-system-admin-password"] .cbi-map .cbi-map-descr{color:#ccc}[data-page="admin-system-flash"] .modal label>input[type="checkbox"]{vertical-align:text-top;top:auto;border-color:#fff !important}[data-page="admin-system-flash"] .modal .btn{white-space:normal !important;background-color:darkseagreen}[data-page="admin-system-flash"] .modal .alert-message{background-color:transparent !important}[data-page="admin-system-flash"] .modal .danger{border:thin solid darkorange !important;background-color:darkorange !important}.cbi-value input[type="password"]+.cbi-button-neutral{background-color:#483d8b !important;background-color:var(--dark-primary) !important;border-color:var(--dark-primary) !important}.btn,button,select,input,.cbi-dropdown{border:1px solid #3c3c3c !important}.cbi-dropdown .preview{color:#ccc}.cbi-section-table-row{background-color:#1e1e1e !important}.modal{background-color:#1e1e1e}.cbi-button-positive{color:#fff !important;background-color:darkolivegreen !important}[data-page="admin-system-flash"] legend{color:#ccc}.logout:before{color:#adb5bd !important}.cbi-dropdown[open]{border-color:#483d8b !important;border-color:var(--dark-primary) !important}.cbi-dropdown[open]>ul.dropdown{background:#252526 !important;color:#ffffff !important;box-shadow:none;border:1px solid #3c3c3c !important}.cbi-dropdown[open]>ul.dropdown li{color:#ffffff;border-bottom:1px solid #3c3c3c !important}.cbi-dropdown[open]>ul.dropdown>li[selected]{background-color:#483d8b !important;background-color:var(--dark-primary) !important;border-bottom:1px solid #3c3c3c !important}.cbi-dropdown[open]>ul.dropdown>li.focus{background:#483d8b;background:var(--dark-primary);outline:none}.ifacebadge{background-color:#333333}.cbi-dynlist>.item>span{border:1px solid #3c3c3c !important}.cbi-page-actions .cbi-button-apply,.cbi-section-actions .cbi-button-edit,.cbi-button-edit,.cbi-button-apply,.cbi-button-reload,.cbi-button-action,.cbi-button[value="Submit"],.cbi-button[value="Upload"],.cbi-button[value$="Apply"],.cbi-button[onclick="addKey(event)"]{background:#483d8b !important;background:var(--dark-primary) !important;border-color:var(--dark-primary) !important}.btn.primary,.cbi-page-actions .cbi-button-save,.cbi-page-actions .cbi-button-apply+.cbi-button-save,.cbi-button-add,.cbi-button-save,.cbi-button-positive,.cbi-button-link,.cbi-button[value="Enable"],.cbi-button[value="Scan"],.cbi-button[value^="Back"],.cbi-button-neutral[onclick="handleConfig(event)"]{background:#483d8b;background:var(--dark-primary)}[data-page="admin-system-opkg"] h2{color:#ccc !important}[data-page="admin-system-startup"] textarea{color:#ccc;background-color:transparent}[data-page="admin-system-startup"] textarea:focus-visible{border:1px solid var(--dark-primary)}[data-page="admin-network-firewall-custom"] #view p textarea,[data-page="admin-status-routes"] #view p textarea,[data-page="admin-system-crontab"] #view p textarea{color:#ccc;background-color:transparent}#view>.spinning{background:#333333 !important;box-shadow:0 4px 8px rgba(0,0,0,0.03) !important}@media screen and (min-width:600px){::-webkit-scrollbar-thumb{background:var(--dark-primary)}::-webkit-scrollbar-thumb:hover{background:var(--dark-primary)}::-webkit-scrollbar-thumb:active{background:var(--dark-primary)}}@media screen and (max-width:480px){.node-status-iptables>.main div>.cbi-map>form{background-color:#1e1e1e;box-shadow:0 0 .5rem 0 rgba(0,0,0,0.35)}}[data-page="admin-dashboard"] .main-right>#maincontent .Dashboard{color:#ccc !important}[data-page="admin-dashboard"] .main-right>#maincontent .Dashboard h3{color:#ccc}[data-page="admin-dashboard"] .main-right>#maincontent .Dashboard hr{border-top:1px solid #fff}[data-page="admin-dashboard"] .main-right>#maincontent .Dashboard .dashboard-bg{background-color:#333333}[data-page="admin-dashboard"] .main-right>#maincontent .router-status-info .title img,[data-page="admin-dashboard"] .main-right>#maincontent .lan-info .title img,[data-page="admin-dashboard"] .main-right>#maincontent .wifi-info .title img{filter:invert(90%)}[data-page="admin-dashboard"] .main-right>#maincontent tr{border-top:thin solid #4d4d4d}[data-page="admin-dashboard"] .main-right>#maincontent tr:last-child{border-bottom:thin solid #4d4d4d}[data-page="admin-system-fileassistant"] .fb-container .panel-container{border-bottom-color:#3c3c3c !important}[data-page="admin-system-fileassistant"] .fb-container td[class$="-icon"]::before{filter:invert(.7)}[data-page="admin-system-fileassistant"] div#list-content table.cbi-section-table tbody tr:nth-child(1) td.parent-icon{background:#1e1e1e !important}[data-page^="admin-services-openclash"] .cbi-tabmenu::-webkit-scrollbar-thumb{background-color:#5b5b5b}[data-page^="admin-services-openclash"] .cbi-tabmenu::-webkit-scrollbar-track{background-color:rgba(60,60,60,0.75)}[data-page^="admin-services-openclash"] #tab{border-color:#3c3c3c}[data-page^="admin-services-openclash"] #diag-rc-output>pre,[data-page^="admin-services-openclash"] #dns-rc-output>pre{color:#ccc;border:1px solid #3c3c3c !important;background-color:#1e1e1e}[data-page^="admin-services-openclash"] img[src$="arrow-clockwise-light.svg"],[data-page^="admin-services-openclash"] img[src$="wrench-light.svg"],[data-page^="admin-services-openclash"] img[src$="eye-light.svg"]{filter:invert(.9)}[data-page="admin-network-diagnostics"] .cbi-section{background:#252526 !important}[data-page="admin-network-diagnostics"] textarea{background:transparent;border-radius:.25rem;color:#ccc;border:1px solid #3c3c3c !important}[data-page="admin-network-diagnostics"] .tr>.td{background-color:#252526 !important}[data-page="admin-network-network"] .ifacebox-head[style*="--zone-color-rgb: 144, 240, 144"]{background-color:#497e49 !important;color:#ccc !important}[data-page="admin-network-network"] .ifacebox-head[style*="--zone-color-rgb: 240, 144, 144;"]{background-color:#9c4f4f !important;color:#ccc !important}[data-page="admin-network-network"] .ifacebox-head[style*="--zone-color-rgb: 238, 238, 238;"]{background-color:#666 !important}[data-page="admin-network-network"] #modal_overlay>.modal.cbi-modal>div>p>textarea{border:1px solid #3c3c3c !important;background-color:transparent !important}[data-page="admin-network-network"] #modal_overlay div[data-tab="peers"] div[data-name="_peers"] .ifacebadge code{color:#fff !important;background-color:transparent !important}[data-page="admin-network-network"] #modal_overlay>.modal.cbi-modal>div>p>textarea{color:#ccc !important}[data-page="admin-network-firewall-rules"] #cbi-firewall-rule .zonebadge[style*="--zone-color-rgb:240, 144, 144;"]{--zone-color-rgb:156, 79, 79 !important}[data-page="admin-network-firewall-rules"] #cbi-firewall-rule .zonebadge[style*="--zone-color-rgb:240, 144, 144;"] strong{color:#ccc !important}[data-page="admin-network-firewall-rules"] #cbi-firewall-rule .zonebadge[style*="--zone-color-rgb:238, 238, 238;"]{--zone-color-rgb:112, 112, 112 !important}[data-page="admin-network-firewall-rules"] #cbi-firewall-rule .zonebadge[style*="--zone-color-rgb:238, 238, 238;"] em{color:#ccc !important}[data-page="admin-network-firewall-rules"] #cbi-firewall-rule>table>.cbi-section-table-row[data-title]::before{background-color:#252526 !important}[data-page="admin-network-network"] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:240, 144, 144;"],[data-page="admin-network-firewall-rules"] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:240, 144, 144;"]{--zone-color-rgb:156, 79, 79 !important;color:#ccc !important}[data-page="admin-network-network"] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:240, 144, 144;"] strong,[data-page="admin-network-firewall-rules"] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:240, 144, 144;"] strong{color:#ccc !important}[data-page="admin-network-network"] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:144, 240, 144;"],[data-page="admin-network-firewall-rules"] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:144, 240, 144;"]{--zone-color-rgb:73, 126, 73 !important;color:#ccc !important}[data-page="admin-network-network"] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:144, 240, 144;"] strong,[data-page="admin-network-firewall-rules"] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:144, 240, 144;"] strong{color:#ccc !important}[data-page="admin-network-network"] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:238, 238, 238;"],[data-page="admin-network-firewall-rules"] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:238, 238, 238;"]{--zone-color-rgb:112, 112, 112 !important}[data-page="admin-network-network"] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:238, 238, 238;"] strong,[data-page="admin-network-firewall-rules"] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:238, 238, 238;"] strong{color:#ccc !important}[data-page="admin-network-network"] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:238, 238, 238;"] strong+span,[data-page="admin-network-firewall-rules"] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:238, 238, 238;"] strong+span{color:#ccc !important}[data-page="admin-system-commands"] .commandbox,[data-page="admin-system-commands-dashboard"] .commandbox{border-bottom:thin solid #333;background:#252526;box-shadow:inset 0 1px 0 rgba(0,0,0,0.2),0 1px 2px rgba(255,255,255,0.05)}.btn{background-color:#707070;color:#fff} -------------------------------------------------------------------------------- /htdocs/luci-static/argon/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jerrykuku/luci-theme-argon/e289597ca77a8f06bcaff55d5f5f3ffbfde8490e/htdocs/luci-static/argon/favicon.ico -------------------------------------------------------------------------------- /htdocs/luci-static/argon/fonts/TypoGraphica.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jerrykuku/luci-theme-argon/e289597ca77a8f06bcaff55d5f5f3ffbfde8490e/htdocs/luci-static/argon/fonts/TypoGraphica.eot -------------------------------------------------------------------------------- /htdocs/luci-static/argon/fonts/TypoGraphica.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jerrykuku/luci-theme-argon/e289597ca77a8f06bcaff55d5f5f3ffbfde8490e/htdocs/luci-static/argon/fonts/TypoGraphica.ttf -------------------------------------------------------------------------------- /htdocs/luci-static/argon/fonts/TypoGraphica.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jerrykuku/luci-theme-argon/e289597ca77a8f06bcaff55d5f5f3ffbfde8490e/htdocs/luci-static/argon/fonts/TypoGraphica.woff -------------------------------------------------------------------------------- /htdocs/luci-static/argon/fonts/argon.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jerrykuku/luci-theme-argon/e289597ca77a8f06bcaff55d5f5f3ffbfde8490e/htdocs/luci-static/argon/fonts/argon.eot -------------------------------------------------------------------------------- /htdocs/luci-static/argon/fonts/argon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Generated by IcoMoon 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /htdocs/luci-static/argon/fonts/argon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jerrykuku/luci-theme-argon/e289597ca77a8f06bcaff55d5f5f3ffbfde8490e/htdocs/luci-static/argon/fonts/argon.ttf -------------------------------------------------------------------------------- /htdocs/luci-static/argon/fonts/argon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jerrykuku/luci-theme-argon/e289597ca77a8f06bcaff55d5f5f3ffbfde8490e/htdocs/luci-static/argon/fonts/argon.woff -------------------------------------------------------------------------------- /htdocs/luci-static/argon/icon/android-icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jerrykuku/luci-theme-argon/e289597ca77a8f06bcaff55d5f5f3ffbfde8490e/htdocs/luci-static/argon/icon/android-icon-192x192.png -------------------------------------------------------------------------------- /htdocs/luci-static/argon/icon/apple-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jerrykuku/luci-theme-argon/e289597ca77a8f06bcaff55d5f5f3ffbfde8490e/htdocs/luci-static/argon/icon/apple-icon-144x144.png -------------------------------------------------------------------------------- /htdocs/luci-static/argon/icon/apple-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jerrykuku/luci-theme-argon/e289597ca77a8f06bcaff55d5f5f3ffbfde8490e/htdocs/luci-static/argon/icon/apple-icon-60x60.png -------------------------------------------------------------------------------- /htdocs/luci-static/argon/icon/apple-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jerrykuku/luci-theme-argon/e289597ca77a8f06bcaff55d5f5f3ffbfde8490e/htdocs/luci-static/argon/icon/apple-icon-72x72.png -------------------------------------------------------------------------------- /htdocs/luci-static/argon/icon/arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /htdocs/luci-static/argon/icon/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | #ffffff -------------------------------------------------------------------------------- /htdocs/luci-static/argon/icon/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jerrykuku/luci-theme-argon/e289597ca77a8f06bcaff55d5f5f3ffbfde8490e/htdocs/luci-static/argon/icon/favicon-16x16.png -------------------------------------------------------------------------------- /htdocs/luci-static/argon/icon/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jerrykuku/luci-theme-argon/e289597ca77a8f06bcaff55d5f5f3ffbfde8490e/htdocs/luci-static/argon/icon/favicon-32x32.png -------------------------------------------------------------------------------- /htdocs/luci-static/argon/icon/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jerrykuku/luci-theme-argon/e289597ca77a8f06bcaff55d5f5f3ffbfde8490e/htdocs/luci-static/argon/icon/favicon-96x96.png -------------------------------------------------------------------------------- /htdocs/luci-static/argon/icon/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Openwrt", 3 | "icons": [ 4 | { 5 | "src": "\/android-icon-36x36.png", 6 | "sizes": "36x36", 7 | "type": "image\/png", 8 | "density": "0.75" 9 | }, 10 | { 11 | "src": "\/android-icon-48x48.png", 12 | "sizes": "48x48", 13 | "type": "image\/png", 14 | "density": "1.0" 15 | }, 16 | { 17 | "src": "\/android-icon-72x72.png", 18 | "sizes": "72x72", 19 | "type": "image\/png", 20 | "density": "1.5" 21 | }, 22 | { 23 | "src": "\/android-icon-96x96.png", 24 | "sizes": "96x96", 25 | "type": "image\/png", 26 | "density": "2.0" 27 | }, 28 | { 29 | "src": "\/android-icon-144x144.png", 30 | "sizes": "144x144", 31 | "type": "image\/png", 32 | "density": "3.0" 33 | }, 34 | { 35 | "src": "\/android-icon-192x192.png", 36 | "sizes": "192x192", 37 | "type": "image\/png", 38 | "density": "4.0" 39 | } 40 | ] 41 | } -------------------------------------------------------------------------------- /htdocs/luci-static/argon/icon/ms-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jerrykuku/luci-theme-argon/e289597ca77a8f06bcaff55d5f5f3ffbfde8490e/htdocs/luci-static/argon/icon/ms-icon-144x144.png -------------------------------------------------------------------------------- /htdocs/luci-static/argon/icon/spinner.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /htdocs/luci-static/argon/img/argon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 30 | 31 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /htdocs/luci-static/argon/img/bg1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jerrykuku/luci-theme-argon/e289597ca77a8f06bcaff55d5f5f3ffbfde8490e/htdocs/luci-static/argon/img/bg1.jpg -------------------------------------------------------------------------------- /htdocs/luci-static/argon/img/blank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jerrykuku/luci-theme-argon/e289597ca77a8f06bcaff55d5f5f3ffbfde8490e/htdocs/luci-static/argon/img/blank.png -------------------------------------------------------------------------------- /htdocs/luci-static/argon/img/volume_high.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /htdocs/luci-static/argon/img/volume_off.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /htdocs/luci-static/argon/js/polyfill.min.js: -------------------------------------------------------------------------------- 1 | /* Disable minification (remove `.min` from URL path) for more info */ 2 | 3 | (function(undefined) {}).call('object' === typeof window && window || 'object' === typeof self && self || 'object' === typeof global && global || {}); -------------------------------------------------------------------------------- /htdocs/luci-static/resources/menu-argon.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 'require baseclass'; 3 | 'require ui'; 4 | 5 | return baseclass.extend({ 6 | __init__: function () { 7 | ui.menu.load().then(L.bind(this.render, this)); 8 | }, 9 | 10 | render: function (tree) { 11 | var node = tree, 12 | url = '', 13 | children = ui.menu.getChildren(tree); 14 | 15 | for (var i = 0; i < children.length; i++) { 16 | var isActive = (L.env.requestpath.length ? children[i].name == L.env.requestpath[0] : i == 0); 17 | 18 | if (isActive) 19 | this.renderMainMenu(children[i], children[i].name); 20 | } 21 | 22 | if (L.env.dispatchpath.length >= 3) { 23 | for (var i = 0; i < 3 && node; i++) { 24 | node = node.children[L.env.dispatchpath[i]]; 25 | url = url + (url ? '/' : '') + L.env.dispatchpath[i]; 26 | } 27 | 28 | if (node) 29 | this.renderTabMenu(node, url); 30 | } 31 | 32 | document.querySelector('a.showSide') 33 | .addEventListener('click', ui.createHandlerFn(this, 'handleSidebarToggle')); 34 | document.querySelector('.darkMask') 35 | .addEventListener('click', ui.createHandlerFn(this, 'handleSidebarToggle')); 36 | }, 37 | 38 | handleMenuExpand: function (ev) { 39 | var a = ev.target, slide = a.parentNode, slide_menu = a.nextElementSibling; 40 | var collapse = false; 41 | 42 | document.querySelectorAll('.main .main-left .nav > li >ul.active').forEach(function (ul) { 43 | $(ul).stop(true).slideUp("fast", function () { 44 | ul.classList.remove('active'); 45 | ul.previousElementSibling.classList.remove('active'); 46 | }); 47 | if (!collapse && ul === slide_menu) { 48 | collapse = true; 49 | } 50 | 51 | }); 52 | 53 | if (!slide_menu) 54 | return; 55 | 56 | 57 | if (!collapse) { 58 | $(slide).find(".slide-menu").slideDown("fast",function(){ 59 | slide_menu.classList.add('active'); 60 | a.classList.add('active'); 61 | }); 62 | a.blur(); 63 | } 64 | ev.preventDefault(); 65 | ev.stopPropagation(); 66 | }, 67 | 68 | renderMainMenu: function (tree, url, level) { 69 | var l = (level || 0) + 1, 70 | ul = E('ul', { 'class': level ? 'slide-menu' : 'nav' }), 71 | children = ui.menu.getChildren(tree); 72 | 73 | if (children.length == 0 || l > 2) 74 | return E([]); 75 | 76 | for (var i = 0; i < children.length; i++) { 77 | var isActive = ((L.env.dispatchpath[l] == children[i].name) && (L.env.dispatchpath[l - 1] == tree.name)), 78 | submenu = this.renderMainMenu(children[i], url + '/' + children[i].name, l), 79 | hasChildren = submenu.children.length, 80 | slideClass = hasChildren ? 'slide' : null, 81 | menuClass = hasChildren ? 'menu' : 'food'; 82 | if (isActive) { 83 | ul.classList.add('active'); 84 | slideClass += " active"; 85 | menuClass += " active"; 86 | } 87 | 88 | ul.appendChild(E('li', { 'class': slideClass }, [ 89 | E('a', { 90 | 'href': L.url(url, children[i].name), 91 | 'click': (l == 1) ? ui.createHandlerFn(this, 'handleMenuExpand') : null, 92 | 'class': menuClass, 93 | 'data-title': hasChildren ? children[i].title.replace(" ", "_") : children[i].title.replace(" ", "_"), 94 | }, [_(children[i].title)]), 95 | submenu 96 | ])); 97 | } 98 | 99 | if (l == 1) { 100 | document.querySelector('#mainmenu').appendChild(ul); 101 | document.querySelector('#mainmenu').style.display = ''; 102 | 103 | } 104 | return ul; 105 | }, 106 | 107 | renderTabMenu: function (tree, url, level) { 108 | var container = document.querySelector('#tabmenu'), 109 | l = (level || 0) + 1, 110 | ul = E('ul', { 'class': 'tabs' }), 111 | children = ui.menu.getChildren(tree), 112 | activeNode = null; 113 | 114 | if (children.length == 0) 115 | return E([]); 116 | 117 | for (var i = 0; i < children.length; i++) { 118 | var isActive = (L.env.dispatchpath[l + 2] == children[i].name), 119 | activeClass = isActive ? ' active' : '', 120 | className = 'tabmenu-item-%s %s'.format(children[i].name, activeClass); 121 | 122 | ul.appendChild(E('li', { 'class': className }, [ 123 | E('a', { 'href': L.url(url, children[i].name) }, [_(children[i].title)]) 124 | ])); 125 | 126 | if (isActive) 127 | activeNode = children[i]; 128 | } 129 | 130 | container.appendChild(ul); 131 | container.style.display = ''; 132 | 133 | if (activeNode) 134 | container.appendChild(this.renderTabMenu(activeNode, url + '/' + activeNode.name, l)); 135 | 136 | return ul; 137 | }, 138 | 139 | handleSidebarToggle: function (ev) { 140 | var showside = document.querySelector('a.showSide'), 141 | sidebar = document.querySelector('#mainmenu'), 142 | darkmask = document.querySelector('.darkMask'), 143 | scrollbar = document.querySelector('.main-right'); 144 | 145 | if (showside.classList.contains('active')) { 146 | showside.classList.remove('active'); 147 | sidebar.classList.remove('active'); 148 | scrollbar.classList.remove('active'); 149 | darkmask.classList.remove('active'); 150 | } 151 | else { 152 | showside.classList.add('active'); 153 | sidebar.classList.add('active'); 154 | scrollbar.classList.add('active'); 155 | darkmask.classList.add('active'); 156 | } 157 | } 158 | }); 159 | -------------------------------------------------------------------------------- /less/dark.less: -------------------------------------------------------------------------------- 1 | // out: ../htdocs/luci-static/argon/css/dark.css, compress: true , sourceMap: false 2 | /** 3 | * Argon is a clean HTML5 theme for LuCI. It is based on luci-theme-material and Argon Template 4 | * 5 | * luci-theme-argon 6 | * Copyright 2023 Jerryk 7 | * 8 | * Have a bug? Please create an issue here on GitHub! 9 | * https://github.com/jerrykuku/luci-theme-argon/issues 10 | * 11 | * luci-theme-bootstrap: 12 | * Copyright 2008 Steven Barth 13 | * Copyright 2008 Jo-Philipp Wich 14 | * Copyright 2012 David Menting 15 | * 16 | * MUI: 17 | * https://github.com/muicss/mui 18 | * 19 | * luci-theme-material: 20 | * https://github.com/LuttyYang/luci-theme-material/ 21 | * 22 | * Agron Theme 23 | * https://demos.creative-tim.com/argon-dashboard/index.html 24 | * 25 | * Login background 26 | * https://unsplash.com/ 27 | * 28 | * Licensed to the public under the Apache License 2.0 29 | */ 30 | 31 | 32 | body { 33 | background: #1e1e1e; 34 | color: #cccccc; 35 | } 36 | 37 | .login-page .login-container { 38 | 39 | .login-form { 40 | background-color: #1e1e1e; 41 | -webkit-backdrop-filter: blur(var(--blur-radius-dark)); 42 | backdrop-filter: blur(var(--blur-radius-dark)); 43 | background-color: rgba(0, 0, 0, var(--blur-opacity-dark)); 44 | 45 | .brand { 46 | color: #adb5bd; 47 | } 48 | 49 | .form-login { 50 | .input-group { 51 | &::before { 52 | color: #adb5bd; 53 | } 54 | 55 | input { 56 | background-color: transparent !important; 57 | color: #adb5bd; 58 | border-bottom: #adb5bd 1px solid !important; 59 | border-radius: 0 !important; 60 | border-top: none !important; 61 | border-left: none !important; 62 | border-right: none !important; 63 | box-shadow: none; 64 | } 65 | 66 | } 67 | 68 | .cbi-button-apply { 69 | background-color: #483d8b !important; 70 | background-color: var(--dark-primary) !important; 71 | 72 | &:hover, 73 | &:focus { 74 | opacity: 0.9; 75 | } 76 | } 77 | } 78 | } 79 | 80 | } 81 | 82 | header::after { 83 | background-color: #1e1e1e !important; 84 | } 85 | 86 | 87 | .main { 88 | .main-left { 89 | 90 | background-color: #333333 !important; 91 | box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, .15); 92 | 93 | .sidenav-header .brand { 94 | color: #cccccc; 95 | } 96 | 97 | .nav { 98 | .slide { 99 | .slide-menu { 100 | .active { 101 | a { 102 | color: #cccccc; 103 | 104 | &::after { 105 | background-color: #cccccc !important; 106 | } 107 | } 108 | 109 | &::after { 110 | background-color: var(--dark-primary) !important; 111 | } 112 | } 113 | 114 | li { 115 | a { 116 | color: #cccccc; 117 | } 118 | 119 | a:hover { 120 | background: none !important; 121 | } 122 | 123 | &::after { 124 | background-color: var(--dark-primary) !important; 125 | } 126 | } 127 | } 128 | 129 | .menu.active { 130 | background-color: #483d8b !important; 131 | background-color: var(--dark-primary) !important; 132 | color: #ffffff !important; 133 | 134 | a::after { 135 | background-color: #ffffff !important; 136 | } 137 | } 138 | } 139 | 140 | li { 141 | a { 142 | color: #cccccc !important; 143 | } 144 | 145 | a:hover { 146 | background-color: #483d8b !important; 147 | background-color: var(--dark-primary) !important; 148 | color: #ffffff !important; 149 | } 150 | 151 | } 152 | } 153 | 154 | 155 | &::-webkit-scrollbar-thumb { 156 | background-color: #252526 !important; 157 | } 158 | 159 | &::-webkit-scrollbar-track { 160 | background-color: #333; 161 | } 162 | } 163 | 164 | .main-right { 165 | background-color: #1e1e1e; 166 | } 167 | } 168 | 169 | h2 { 170 | color: #ccc; 171 | background: #333333; 172 | } 173 | 174 | h3 { 175 | color: #ccc; 176 | border-bottom: 0; 177 | background: #333333; 178 | } 179 | 180 | h4 { 181 | color: #8C6900; 182 | } 183 | 184 | abbr { 185 | color: var(--dark-primary) !important; 186 | } 187 | 188 | a:link, a:visited, a:active { 189 | color: #a5b2ff; 190 | } 191 | 192 | 193 | input:-webkit-autofill { 194 | background-color: #3c3c3c !important; 195 | } 196 | 197 | #channel_graph { 198 | background-color: transparent !important; 199 | } 200 | 201 | .cbi-value-field .cbi-input-apply, 202 | .cbi-button-apply, 203 | .cbi-button-edit { 204 | color: #fff !important; 205 | background-color: #483d8b !important; 206 | background-color: var(--dark-primary) !important; 207 | border-color: #483d8b !important; 208 | border-color: var(--dark-primary) !important; 209 | } 210 | 211 | 212 | .cbi-section em { 213 | color: #ccc; 214 | } 215 | 216 | header.bg-primary { 217 | background-color: #1e1e1e !important; 218 | } 219 | 220 | .cbi-map-descr { 221 | color: #ccc; 222 | } 223 | 224 | .cbi-section { 225 | background: none; 226 | box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, .35) 227 | } 228 | 229 | .panel-title { 230 | color: #ccc; 231 | background-color: #333333; 232 | } 233 | 234 | div > table > tbody > tr:nth-of-type(2n), 235 | div > .table > .tr:nth-of-type(2n) { 236 | background-color: #252526; 237 | } 238 | 239 | table > tbody > tr > td, 240 | table > tfoot > tr > td, 241 | table > thead > tr > td { 242 | color: #cccccc; 243 | } 244 | 245 | fieldset > table > tbody > tr:nth-of-type(2n) { 246 | background-color: #252526; 247 | } 248 | 249 | table > tbody > tr > td, 250 | table > tfoot > tr > td, 251 | table > thead > tr > td { 252 | border-top: 1px solid #252526; 253 | } 254 | 255 | #swaptotal > div > div, 256 | #swapfree > div > div, 257 | #memfree > div > div, 258 | #membuff > div > div, 259 | #conns > div > div, 260 | #memtotal > div > div { 261 | background-color: var(--dark-primary) !important; 262 | } 263 | 264 | #swaptotal > div > div > div > small, 265 | #swapfree > div > div > div > small, 266 | #memfree > div > div > div > small, 267 | #membuff > div > div > div > small, 268 | #conns > div > div > div > small, 269 | #memtotal > div > div > div > small { 270 | color: #ccc !important; 271 | } 272 | 273 | .node-system-packages > .main .cbi-section-node:first-child .cbi-value-last { 274 | line-height: 1.8em; 275 | 276 | div[style="margin:3px 0; width:300px; height:10px; border:1px solid #000000; background-color:#80C080"] { 277 | border: 1px solid #999999 !important; 278 | background-color: transparent !important; 279 | 280 | div { 281 | background-color: #ba8b00 !important; 282 | } 283 | } 284 | 285 | } 286 | 287 | table > tbody > tr > th, 288 | table > tfoot > tr > th, 289 | table > thead > tr > th { 290 | background-color: #252526; 291 | border-bottom: black 1px solid !important; 292 | } 293 | 294 | tr > td, 295 | tr > th, 296 | .tr > .td, 297 | .tr > .th, 298 | .cbi-section-table-row::before, 299 | #cbi-wireless > #wifi_assoclist_table > .tr:nth-child(2) { 300 | border-top: 0; 301 | } 302 | 303 | .cbi-rowstyle-2 { 304 | background-color: #1e1e1e; 305 | } 306 | 307 | .cbi-rowstyle-1 { 308 | background-color: #252526; 309 | } 310 | 311 | .cbi-rowstyle-2 .cbi-button-up, 312 | .cbi-rowstyle-2 .cbi-button-down, 313 | body:not(.Interfaces) .cbi-rowstyle-2:first-child { 314 | background-color: rgb(102, 102, 102) !important; 315 | } 316 | 317 | .cbi-section > h3:first-child, 318 | .panel-title, 319 | h3 { 320 | color: #ccc; 321 | } 322 | 323 | h4 { 324 | background-color: #1e1e1f; 325 | } 326 | 327 | .cbi-progressbar { 328 | background: #282a2c; 329 | 330 | div { 331 | background-color: var(--dark-primary) !important; 332 | } 333 | } 334 | 335 | .cbi-section-table .cbi-section-table-titles .cbi-section-table-cell { 336 | background-color: #1e1e1f; 337 | } 338 | 339 | .cbi-button { 340 | color: #ffffff !important; 341 | background-color: #483d8b; 342 | background-color: var(--dark-primary); 343 | } 344 | 345 | .cbi-section-node { 346 | background: none; 347 | } 348 | 349 | abbr { 350 | color: #5e72e4; 351 | } 352 | 353 | div > table > tbody > tr:nth-of-type(2n), 354 | div > .table > .tbody > .tr:nth-of-type(2n) { 355 | background-color: #252526; 356 | } 357 | 358 | #content_syslog { 359 | box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, .35) 360 | } 361 | 362 | #syslog { 363 | color: #ccc; 364 | background-color: #1e1e1e; 365 | } 366 | 367 | #iwsvg, 368 | #iwsvg2, 369 | #bwsvg { 370 | overflow: hidden; 371 | box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, .35); 372 | background-color: #1e1e1e !important; 373 | } 374 | 375 | .tabs { 376 | background-color: #252526; 377 | 378 | li[class~="active"], 379 | li:hover { 380 | cursor: pointer; 381 | color: #ccc !important; 382 | 383 | a { 384 | color: #ccc !important; 385 | } 386 | } 387 | } 388 | 389 | .tabs > li[class~="active"] > a { 390 | color: #ccc; 391 | } 392 | 393 | .tabs > li[class~="active"], 394 | .tabs > li:hover { 395 | border-bottom: 0.18751rem solid #483d8b; 396 | border-bottom: 0.18751rem solid var(--dark-primary); 397 | color: var(--dark-primary) !important; 398 | background-color: #181819; 399 | } 400 | 401 | .cbi-tabmenu > li > a, 402 | .tabs > li > a { 403 | color: #ccc; 404 | 405 | &:hover { 406 | color: #ccc; 407 | } 408 | } 409 | 410 | .cbi-tabmenu > li { 411 | background: #2d2d2d; 412 | } 413 | 414 | .cbi-tabmenu li[class~="cbi-tab"] a { 415 | color: #ccc; 416 | } 417 | 418 | .cbi-tabmenu > li:hover { 419 | color: #ccc; 420 | background: #2d2d2d; 421 | border-bottom: 0.18751rem solid var(--dark-primary) !important; 422 | } 423 | 424 | .cbi-tabmenu > li[class~="cbi-tab"] { 425 | background-color: #181819; 426 | border-bottom: 0.18751rem solid var(--dark-primary) !important; 427 | } 428 | 429 | .cbi-tabcontainer > .cbi-value:nth-of-type(2n) { 430 | background-color: #252526; 431 | } 432 | 433 | .cbi-value-title { 434 | color: #ccc; 435 | } 436 | 437 | select, 438 | input { 439 | color: #ccc; 440 | background-color: transparent !important; 441 | border: 1px solid #252526; 442 | box-shadow: none; 443 | } 444 | 445 | 446 | select:not([multiple="multiple"]):focus, 447 | input:focus { 448 | border-color: #483d8b !important; 449 | border-color: var(--dark-primary) !important; 450 | outline: 0; 451 | 452 | } 453 | 454 | select:not([multiple="multiple"]):focus, 455 | input:not(.cbi-button):focus, 456 | .cbi-dropdown:focus { 457 | border-color: #5e72e4; 458 | border-color: var(--dark-primary) !important; 459 | } 460 | 461 | select { 462 | background-color: #1e1e1e !important; 463 | } 464 | 465 | #cbi-dropbear h2, 466 | #cbi-dropbear .cbi-map-descr, 467 | #cbi-dropbear .cbi-map-descr abbr, 468 | #cbi-rc h2, 469 | #cbi-rc .cbi-map-descr, 470 | #cbi-distfeedconf h2, 471 | #cbi-distfeedconf .cbi-map-descr, 472 | #cbi-customfeedconf h2, 473 | #cbi-customfeedconf .cbi-map-descr, 474 | #cbi-download h2, 475 | #cbi-filelist h2 { 476 | color: #ccc !important; 477 | } 478 | 479 | .cbi-value-field > ul > li .ifacebadge { 480 | background-color: #3c3c3c; 481 | } 482 | 483 | .cbi-section-descr { 484 | color: #ccc; 485 | } 486 | 487 | .cbi-input-textarea { 488 | background-color: #1e1e1e; 489 | color: #ccc; 490 | border: 1px solid #3c3c3c !important; 491 | } 492 | 493 | textarea { 494 | &:focus-visible { 495 | border: 1px solid var(--dark-primary); 496 | } 497 | } 498 | 499 | 500 | .cbi-section-remove:nth-of-type(2n), 501 | .cbi-section-node:nth-of-type(2n) { 502 | background-color: #1e1e1e; 503 | } 504 | 505 | .cbi-section[id] .cbi-section-remove:nth-of-type(4n+3), 506 | .cbi-section[id] .cbi-section-node:nth-of-type(4n+4) { 507 | background-color: #1e1e1e; 508 | } 509 | 510 | .node-system-packages > .main table tr td:nth-last-child(1) { 511 | color: #ccc; 512 | 513 | } 514 | 515 | .cbi-tooltip { 516 | background-color: var(--primary); 517 | color: #fff; 518 | } 519 | 520 | .ifacebox { 521 | background-color: transparent !important; 522 | border: 1px solid #1e1e1e; 523 | } 524 | 525 | .ifacebox-head { 526 | color: #ccc; 527 | background: #666; 528 | } 529 | 530 | .ifacebox-body { 531 | background-color: #333; 532 | } 533 | 534 | .zonebadge strong { 535 | color: #333; 536 | } 537 | 538 | .zonebadge > .ifacebadge { 539 | background-color: #3c3c3c; 540 | } 541 | 542 | div.cbi-value var, 543 | td.cbi-value-field var { 544 | color: #5e72e4; 545 | } 546 | 547 | #diag-rc-output > pre { 548 | color: #ccc; 549 | background-color: #1e1e1e; 550 | } 551 | 552 | .node-services-vssr .block { 553 | background-color: #3c3c3c !important; 554 | box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, .35); 555 | } 556 | 557 | .node-services-vssr .block h4 { 558 | color: #ccc !important; 559 | } 560 | 561 | .node-services-vssr .status-bar { 562 | color: #ccc; 563 | box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, .35); 564 | background-color: #1e1e1e; 565 | } 566 | 567 | .node-services-vssr .cbi-section-table-row { 568 | color: #ccc; 569 | background-color: #3c3c3c !important; 570 | box-shadow: 0 0 5px 0 rgba(0, 0, 0, .35) 571 | } 572 | 573 | .node-services-vssr .cbi-section-table-row.fast { 574 | background: #483d8b !important; 575 | background: var(--dark-primary) !important; 576 | color: #fff; 577 | } 578 | 579 | .node-services-vssr .ssr-button { 580 | color: #ccc; 581 | 582 | } 583 | 584 | .node-services-vssr .incon:nth-child(2) { 585 | border-right: #1e1e1e 1px solid; 586 | } 587 | 588 | #xhr_poll_status > .label.success { 589 | color: #ccc !important; 590 | 591 | background-color: darkolivegreen !important; 592 | } 593 | 594 | .notice { 595 | background-color: #483d8b !important; 596 | background-color: var(--dark-primary) !important; 597 | } 598 | 599 | .cbi-input-find, 600 | .cbi-input-save, 601 | .cbi-button-add, 602 | .cbi-button-save, 603 | .cbi-button-find, 604 | .cbi-input-reload, 605 | .cbi-button-reload { 606 | color: #fff !important; 607 | background: darkolivegreen !important; 608 | border-color: darkolivegreen !important; 609 | } 610 | 611 | .cbi-button-reset, 612 | .cbi-input-remove { 613 | color: #fff !important; 614 | background-color: darkorange !important; 615 | border-color: darkorange !important; 616 | } 617 | 618 | .cbi-page-actions .cbi-button-apply, 619 | .cbi-section-actions .cbi-button-edit, 620 | .cbi-button-edit.important, 621 | .cbi-button-apply.important, 622 | .cbi-button-reload.important, 623 | .cbi-button-action.important { 624 | border: 1px #483d8b solid !important; 625 | border: 1px var(--dark-primary) solid !important; 626 | } 627 | 628 | .btn[value="Dismiss"], 629 | .cbi-button[value="Terminate"], 630 | .cbi-button[value="Reset"], 631 | .cbi-button[value="Disabled"], 632 | .cbi-button[onclick^="iface_reconnect"], 633 | .cbi-button[onclick="handleReset(event)"], 634 | .cbi-button-neutral[value="Disable"] { 635 | color: #fff; 636 | border: thin solid darkorange !important; 637 | background-color: darkorange !important; 638 | } 639 | 640 | fieldset[id^="cbi-apply-"] { 641 | background-color: #333333; 642 | } 643 | 644 | #detail-bubble > div { 645 | border: 1px solid #ccc; 646 | background: #252525; 647 | } 648 | 649 | .ifacebox-head.active { 650 | background-color: var(--dark-primary) !important; 651 | } 652 | 653 | header .fill .status span[data-style="active"] { 654 | color: #ccc !important; 655 | background-color: darkolivegreen !important; 656 | } 657 | 658 | #cbi-wireless .td, 659 | #cbi-network .tr:first-child > .td, 660 | .table[width="100%"] > .tr:first-child > .td, 661 | [data-page="admin-network-diagnostics"] .tr > .td, 662 | .tr.table-titles > .th, 663 | .tr.cbi-section-table-titles > .th { 664 | background-color: #252526; 665 | border-bottom: black 1px solid !important; 666 | 667 | } 668 | 669 | .network-status-table .ifacebox-body .ifacebadge { 670 | background-color: #252526; 671 | border-bottom: 0; 672 | box-shadow: none; 673 | } 674 | 675 | td > .ifacebadge, 676 | .td > .ifacebadge { 677 | color: #fff; 678 | background-color: #483d8b; 679 | background-color: var(--dark-primary); 680 | border: 0; 681 | } 682 | 683 | .alert, .alert-message { 684 | background-color: #333; 685 | } 686 | 687 | .alert-message.warning { 688 | background-color: #986400 !important; 689 | } 690 | 691 | .alert.error, .alert-message.error { 692 | background-color: #784f00; 693 | } 694 | 695 | .alert h4, .alert-message h4 { 696 | background-color: #784f00; 697 | color: #ffbf00; 698 | } 699 | 700 | .alert-message [class="btn"] { 701 | background-color: #777777; 702 | color: #ccc; 703 | } 704 | 705 | .uci-dialog { 706 | .cbi-section { 707 | 708 | .uci-change-legend { 709 | 710 | .uci-change-legend-label { 711 | 712 | > ins { 713 | border-color: #00ad00; 714 | background-color: #688668; 715 | } 716 | 717 | > del { 718 | border-color: #c60000; 719 | background-color: #896565; 720 | } 721 | 722 | > var { 723 | background-color: #333; 724 | border-color: #666; 725 | 726 | ins { 727 | background-color: #688668; 728 | } 729 | 730 | del { 731 | background-color: #896565; 732 | } 733 | } 734 | } 735 | } 736 | 737 | .uci-change-list { 738 | > var { 739 | background-color: #333; 740 | border-color: #666; 741 | 742 | del { 743 | background-color: #896565; 744 | } 745 | 746 | ins { 747 | background-color: #688668; 748 | } 749 | } 750 | 751 | > ins { 752 | border-color: #00ad00; 753 | background-color: #688668; 754 | } 755 | 756 | > del { 757 | border-color: #c60000; 758 | background-color: #896565; 759 | } 760 | } 761 | 762 | .uci-change-list + .right { 763 | .btn { 764 | color: #ccc; 765 | } 766 | 767 | .cbi-button { 768 | border: 1px solid #3c3c3c !important; 769 | } 770 | } 771 | } 772 | } 773 | 774 | .btn.danger, 775 | .cbi-section-remove > .cbi-button, 776 | .cbi-button-remove, 777 | .cbi-button-reset, 778 | .cbi-button-negative, 779 | .cbi-button[value="Stop"], 780 | .cbi-button[value="Kill"], 781 | .cbi-button[onclick="reboot(this)"], 782 | .cbi-button-neutral[value="Restart"] { 783 | border: thin solid darkorange !important; 784 | background-color: darkorange !important; 785 | } 786 | 787 | .cbi-section, 788 | .cbi-section-error, 789 | #iptables, 790 | .Firewall form, 791 | #cbi-network > .cbi-section-node, 792 | #cbi-wireless > .cbi-section-node, 793 | #cbi-wireless > #wifi_assoclist_table, 794 | [data-tab-title], 795 | [data-page^="admin-system-admin"]:not(.node-main-login) .cbi-map:not(#cbi-dropbear), 796 | [data-page="admin-system-opkg"] #maincontent > .container { 797 | background: #1e1e1e !important; 798 | box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, 0.35); 799 | } 800 | 801 | div[style="width:100%;height:300px;border:1px solid #000;background:#fff"] { 802 | background: transparent !important; 803 | } 804 | 805 | [data-page="admin-system-admin"] .cbi-map h2, 806 | [data-page="admin-system-admin-password"] .cbi-map h2, 807 | [data-page="admin-system-admin"] .cbi-map .cbi-map-descr, 808 | [data-page="admin-system-admin-password"] .cbi-map .cbi-map-descr { 809 | color: #ccc; 810 | } 811 | 812 | [data-page="admin-system-flash"] { 813 | .modal { 814 | label > input[type="checkbox"] { 815 | vertical-align: text-top; 816 | top: auto; 817 | border-color: #fff !important; 818 | } 819 | 820 | .btn { 821 | white-space: normal !important; 822 | background-color: darkseagreen; 823 | } 824 | 825 | .alert-message { 826 | background-color: transparent !important; 827 | } 828 | 829 | .danger { 830 | border: thin solid darkorange !important; 831 | background-color: darkorange !important; 832 | } 833 | } 834 | } 835 | 836 | .cbi-value input[type="password"] + .cbi-button-neutral { 837 | background-color: #483d8b !important; 838 | background-color: var(--dark-primary) !important; 839 | border-color: var(--dark-primary) !important; 840 | } 841 | 842 | .btn, 843 | button, 844 | select, 845 | input, 846 | .cbi-dropdown { 847 | border: 1px solid #3c3c3c !important; 848 | } 849 | 850 | 851 | .cbi-dropdown .preview { 852 | color: #ccc; 853 | } 854 | 855 | .cbi-section-table-row { 856 | background-color: #1e1e1e !important; 857 | } 858 | 859 | .modal { 860 | background-color: #1e1e1e; 861 | } 862 | 863 | .cbi-button-positive { 864 | color: #fff !important; 865 | background-color: darkolivegreen !important; 866 | } 867 | 868 | [data-page="admin-system-flash"] legend { 869 | color: #ccc; 870 | } 871 | 872 | .logout:before { 873 | color: #adb5bd !important; 874 | } 875 | 876 | .cbi-dropdown[open] { 877 | border-color: #483d8b !important; 878 | border-color: var(--dark-primary) !important; 879 | } 880 | 881 | .cbi-dropdown[open] > ul.dropdown { 882 | background: #252526 !important; 883 | color: #ffffff !important; 884 | box-shadow: none; 885 | border: 1px solid #3c3c3c !important; 886 | 887 | 888 | } 889 | 890 | .cbi-dropdown[open] > ul.dropdown li { 891 | color: #ffffff; 892 | border-bottom: 1px solid #3c3c3c !important; 893 | } 894 | 895 | .cbi-dropdown[open] > ul.dropdown > li[selected] { 896 | background-color: #483d8b !important; 897 | background-color: var(--dark-primary) !important; 898 | border-bottom: 1px solid #3c3c3c !important; 899 | } 900 | 901 | .cbi-dropdown[open] > ul.dropdown > li.focus { 902 | background: #483d8b; 903 | background: var(--dark-primary); 904 | outline: none; 905 | } 906 | 907 | .ifacebadge { 908 | background-color: #333333; 909 | } 910 | 911 | .cbi-dynlist > .item > span { 912 | border: 1px solid #3c3c3c !important; 913 | } 914 | 915 | .cbi-page-actions .cbi-button-apply, 916 | .cbi-section-actions .cbi-button-edit, 917 | .cbi-button-edit, 918 | .cbi-button-apply, 919 | .cbi-button-reload, 920 | .cbi-button-action, 921 | .cbi-button[value="Submit"], 922 | .cbi-button[value="Upload"], 923 | .cbi-button[value$="Apply"], 924 | .cbi-button[onclick="addKey(event)"] { 925 | background: #483d8b !important; 926 | background: var(--dark-primary) !important; 927 | border-color: var(--dark-primary) !important; 928 | } 929 | 930 | .btn.primary, 931 | .cbi-page-actions .cbi-button-save, 932 | .cbi-page-actions .cbi-button-apply + .cbi-button-save, 933 | .cbi-button-add, 934 | .cbi-button-save, 935 | .cbi-button-positive, 936 | .cbi-button-link, 937 | .cbi-button[value="Enable"], 938 | .cbi-button[value="Scan"], 939 | .cbi-button[value^="Back"], 940 | .cbi-button-neutral[onclick="handleConfig(event)"] { 941 | background: #483d8b; 942 | background: var(--dark-primary); 943 | } 944 | 945 | [data-page="admin-system-opkg"] h2 { 946 | color: #ccc !important; 947 | } 948 | 949 | [data-page="admin-system-startup"] textarea { 950 | color: #ccc; 951 | background-color: transparent; 952 | 953 | &:focus-visible { 954 | border: 1px solid var(--dark-primary); 955 | } 956 | } 957 | 958 | [data-page="admin-network-firewall-custom"] #view p textarea, 959 | [data-page="admin-status-routes"] #view p textarea, 960 | [data-page="admin-system-crontab"] #view p textarea { 961 | color: #ccc; 962 | background-color: transparent; 963 | } 964 | 965 | #view > .spinning { 966 | background: #333333 !important; 967 | box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03) !important; 968 | } 969 | 970 | @media screen and (min-width: 600px) { 971 | 972 | ::-webkit-scrollbar-thumb { 973 | background: var(--dark-primary); 974 | } 975 | 976 | ::-webkit-scrollbar-thumb:hover { 977 | background: var(--dark-primary); 978 | } 979 | 980 | ::-webkit-scrollbar-thumb:active { 981 | background: var(--dark-primary); 982 | } 983 | } 984 | 985 | 986 | @media screen and (max-width: 480px) { 987 | .node-status-iptables > .main div > .cbi-map > form { 988 | background-color: #1e1e1e; 989 | box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, .35); 990 | } 991 | 992 | 993 | } 994 | 995 | [data-page="admin-dashboard"] { 996 | .main-right > #maincontent { 997 | .Dashboard { 998 | color: #ccc !important; 999 | 1000 | h3 { 1001 | color: #ccc; 1002 | } 1003 | 1004 | hr { 1005 | border-top: 1px solid rgba(255, 255, 255, 1); 1006 | } 1007 | 1008 | .dashboard-bg { 1009 | background-color: #333333; 1010 | } 1011 | } 1012 | 1013 | .router-status-info .title img, 1014 | .lan-info .title img, 1015 | .wifi-info .title img { 1016 | filter: invert(90%); 1017 | } 1018 | 1019 | tr { 1020 | border-top: thin solid #4d4d4d; 1021 | 1022 | &:last-child { 1023 | border-bottom: thin solid #4d4d4d; 1024 | } 1025 | } 1026 | } 1027 | } 1028 | 1029 | [data-page="admin-system-fileassistant"] { 1030 | .fb-container .panel-container { 1031 | border-bottom-color: #3c3c3c !important; 1032 | } 1033 | 1034 | .fb-container td[class$="-icon"]::before { 1035 | filter: invert(0.7); 1036 | } 1037 | 1038 | div#list-content { 1039 | table.cbi-section-table { 1040 | tbody { 1041 | tr:nth-child(1) { 1042 | td.parent-icon { 1043 | background: #1e1e1e !important; 1044 | } 1045 | } 1046 | } 1047 | } 1048 | } 1049 | } 1050 | 1051 | [data-page^="admin-services-openclash"] { 1052 | .cbi-tabmenu::-webkit-scrollbar-thumb { 1053 | background-color: #5b5b5b; 1054 | } 1055 | 1056 | .cbi-tabmenu::-webkit-scrollbar-track { 1057 | background-color: rgba(60, 60, 60, 0.75); 1058 | } 1059 | 1060 | #tab { 1061 | border-color: #3c3c3c; 1062 | } 1063 | 1064 | #diag-rc-output > pre, 1065 | #dns-rc-output > pre { 1066 | color: #ccc; 1067 | border: 1px solid #3c3c3c !important; 1068 | background-color: #1e1e1e; 1069 | } 1070 | 1071 | img[src$="arrow-clockwise-light.svg"], 1072 | img[src$="wrench-light.svg"], 1073 | img[src$="eye-light.svg"] { 1074 | filter: invert(0.9); 1075 | } 1076 | } 1077 | 1078 | [data-page="admin-network-diagnostics"] { 1079 | .cbi-section { 1080 | background: #252526 !important; 1081 | } 1082 | 1083 | textarea { 1084 | background: transparent; 1085 | border-radius: 0.25rem; 1086 | color: #ccc; 1087 | border: 1px solid #3c3c3c !important; 1088 | } 1089 | 1090 | .tr > .td { 1091 | background-color: #252526 !important; 1092 | } 1093 | } 1094 | 1095 | [data-page="admin-network-network"] { 1096 | .ifacebox-head[style*="--zone-color-rgb: 144, 240, 144"] { 1097 | background-color: rgb(73, 126, 73) !important; 1098 | color: #ccc !important; 1099 | } 1100 | 1101 | .ifacebox-head[style*="--zone-color-rgb: 240, 144, 144;"] { 1102 | background-color: rgb(156, 79, 79) !important; 1103 | color: #ccc !important; 1104 | } 1105 | 1106 | .ifacebox-head[style*="--zone-color-rgb: 238, 238, 238;"] { 1107 | background-color: #666 !important; 1108 | } 1109 | 1110 | #modal_overlay > .modal.cbi-modal > div > p > textarea { 1111 | border: 1px solid #3c3c3c !important; 1112 | background-color: transparent !important; 1113 | } 1114 | 1115 | #modal_overlay div[data-tab="peers"] div[data-name="_peers"] .ifacebadge code { 1116 | color: #fff !important; 1117 | background-color: transparent !important; 1118 | } 1119 | 1120 | #modal_overlay > .modal.cbi-modal > div > p > textarea { 1121 | color: #ccc!important; 1122 | } 1123 | } 1124 | 1125 | [data-page="admin-network-firewall-rules"] { 1126 | #cbi-firewall-rule { 1127 | .zonebadge[style*="--zone-color-rgb:240, 144, 144;"] { 1128 | --zone-color-rgb: 156, 79, 79 !important; 1129 | 1130 | strong { 1131 | color: #ccc !important; 1132 | } 1133 | } 1134 | 1135 | .zonebadge[style*="--zone-color-rgb:238, 238, 238;"] { 1136 | --zone-color-rgb: 112, 112, 112 !important; 1137 | 1138 | em { 1139 | color: #ccc !important; 1140 | } 1141 | } 1142 | 1143 | > table > .cbi-section-table-row[data-title]::before { 1144 | background-color: #252526 !important; 1145 | } 1146 | } 1147 | } 1148 | 1149 | [data-page="admin-network-network"], 1150 | [data-page="admin-network-firewall-rules"] { 1151 | .cbi-dropdown { 1152 | .zonebadge[style*="--zone-color-rgb:240, 144, 144;"] { 1153 | --zone-color-rgb: 156, 79, 79 !important; 1154 | color: #ccc !important; 1155 | 1156 | strong { 1157 | color: #ccc !important; 1158 | } 1159 | } 1160 | 1161 | .zonebadge[style*="--zone-color-rgb:144, 240, 144;"] { 1162 | --zone-color-rgb: 73, 126, 73 !important; 1163 | color: #ccc !important; 1164 | 1165 | strong { 1166 | color: #ccc !important; 1167 | } 1168 | } 1169 | 1170 | .zonebadge[style*="--zone-color-rgb:238, 238, 238;"] { 1171 | --zone-color-rgb: 112, 112, 112 !important; 1172 | 1173 | strong { 1174 | color: #ccc !important; 1175 | 1176 | + span { 1177 | color: #ccc !important; 1178 | } 1179 | } 1180 | } 1181 | } 1182 | } 1183 | 1184 | [data-page="admin-system-commands"], 1185 | [data-page="admin-system-commands-dashboard"] { 1186 | .commandbox { 1187 | border-bottom: thin solid #333; 1188 | background: #252526; 1189 | box-shadow: inset 0 1px 0 rgba(0,0,0,0.2),0 1px 2px rgba(255,255,255,0.05); 1190 | } 1191 | } 1192 | 1193 | .btn { 1194 | background-color: rgb(112, 112, 112); 1195 | color: #fff; 1196 | } 1197 | -------------------------------------------------------------------------------- /less/pure-min.less: -------------------------------------------------------------------------------- 1 | // out: false 2 | /*! 3 | Pure v2.0.3 4 | Copyright 2013 Yahoo! 5 | Licensed under the BSD License. 6 | https://github.com/pure-css/pure/blob/master/LICENSE.md 7 | */ 8 | /*! 9 | normalize.css v | MIT License | git.io/normalize 10 | Copyright (c) Nicolas Gallagher and Jonathan Neal 11 | */ 12 | /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}html{font-family:sans-serif}.hidden,[hidden]{display:none!important}.pure-img{max-width:100%;height:auto}.pure-g{letter-spacing:-.31em;text-rendering:optimizespeed;font-family:FreeSans,Arimo,"Droid Sans",Helvetica,Arial,sans-serif;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-line-pack:start;align-content:flex-start}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){table .pure-g{display:block}}.opera-only :-o-prefocus,.pure-g{word-spacing:-.43em}.pure-u{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-g [class*=pure-u]{font-family:sans-serif}.pure-u-1,.pure-u-1-1,.pure-u-1-12,.pure-u-1-2,.pure-u-1-24,.pure-u-1-3,.pure-u-1-4,.pure-u-1-5,.pure-u-1-6,.pure-u-1-8,.pure-u-10-24,.pure-u-11-12,.pure-u-11-24,.pure-u-12-24,.pure-u-13-24,.pure-u-14-24,.pure-u-15-24,.pure-u-16-24,.pure-u-17-24,.pure-u-18-24,.pure-u-19-24,.pure-u-2-24,.pure-u-2-3,.pure-u-2-5,.pure-u-20-24,.pure-u-21-24,.pure-u-22-24,.pure-u-23-24,.pure-u-24-24,.pure-u-3-24,.pure-u-3-4,.pure-u-3-5,.pure-u-3-8,.pure-u-4-24,.pure-u-4-5,.pure-u-5-12,.pure-u-5-24,.pure-u-5-5,.pure-u-5-6,.pure-u-5-8,.pure-u-6-24,.pure-u-7-12,.pure-u-7-24,.pure-u-7-8,.pure-u-8-24,.pure-u-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-1-24{width:4.1667%}.pure-u-1-12,.pure-u-2-24{width:8.3333%}.pure-u-1-8,.pure-u-3-24{width:12.5%}.pure-u-1-6,.pure-u-4-24{width:16.6667%}.pure-u-1-5{width:20%}.pure-u-5-24{width:20.8333%}.pure-u-1-4,.pure-u-6-24{width:25%}.pure-u-7-24{width:29.1667%}.pure-u-1-3,.pure-u-8-24{width:33.3333%}.pure-u-3-8,.pure-u-9-24{width:37.5%}.pure-u-2-5{width:40%}.pure-u-10-24,.pure-u-5-12{width:41.6667%}.pure-u-11-24{width:45.8333%}.pure-u-1-2,.pure-u-12-24{width:50%}.pure-u-13-24{width:54.1667%}.pure-u-14-24,.pure-u-7-12{width:58.3333%}.pure-u-3-5{width:60%}.pure-u-15-24,.pure-u-5-8{width:62.5%}.pure-u-16-24,.pure-u-2-3{width:66.6667%}.pure-u-17-24{width:70.8333%}.pure-u-18-24,.pure-u-3-4{width:75%}.pure-u-19-24{width:79.1667%}.pure-u-4-5{width:80%}.pure-u-20-24,.pure-u-5-6{width:83.3333%}.pure-u-21-24,.pure-u-7-8{width:87.5%}.pure-u-11-12,.pure-u-22-24{width:91.6667%}.pure-u-23-24{width:95.8333%}.pure-u-1,.pure-u-1-1,.pure-u-24-24,.pure-u-5-5{width:100%}.pure-button{display:inline-block;line-height:normal;white-space:nowrap;vertical-align:middle;text-align:center;cursor:pointer;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:border-box;box-sizing:border-box}.pure-button::-moz-focus-inner{padding:0;border:0}.pure-button-group{letter-spacing:-.31em;text-rendering:optimizespeed}.opera-only :-o-prefocus,.pure-button-group{word-spacing:-.43em}.pure-button-group .pure-button{letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-button{font-family:inherit;font-size:100%;padding:.5em 1em;color:rgba(0,0,0,.8);border:none transparent;background-color:#e6e6e6;text-decoration:none;border-radius:2px}.pure-button-hover,.pure-button:focus,.pure-button:hover{background-image:-webkit-gradient(linear,left top,left bottom,from(transparent),color-stop(40%,rgba(0,0,0,.05)),to(rgba(0,0,0,.1)));background-image:linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1))}.pure-button:focus{outline:0}.pure-button-active,.pure-button:active{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 0 6px rgba(0,0,0,.2) inset;box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 0 6px rgba(0,0,0,.2) inset;border-color:#000}.pure-button-disabled,.pure-button-disabled:active,.pure-button-disabled:focus,.pure-button-disabled:hover,.pure-button[disabled]{border:none;background-image:none;opacity:.4;cursor:not-allowed;-webkit-box-shadow:none;box-shadow:none;pointer-events:none}.pure-button-hidden{display:none}.pure-button-primary,.pure-button-selected,a.pure-button-primary,a.pure-button-selected{background-color:#0078e7;color:#fff}.pure-button-group .pure-button{margin:0;border-radius:0;border-right:1px solid rgba(0,0,0,.2)}.pure-button-group .pure-button:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px}.pure-button-group .pure-button:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px;border-right:none}.pure-form input[type=color],.pure-form input[type=date],.pure-form input[type=datetime-local],.pure-form input[type=datetime],.pure-form input[type=email],.pure-form input[type=month],.pure-form input[type=number],.pure-form input[type=password],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=text],.pure-form input[type=time],.pure-form input[type=url],.pure-form input[type=week],.pure-form select,.pure-form textarea{padding:.5em .6em;display:inline-block;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 3px #ddd;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;vertical-align:middle;-webkit-box-sizing:border-box;box-sizing:border-box}.pure-form input:not([type]){padding:.5em .6em;display:inline-block;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 3px #ddd;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box}.pure-form input[type=color]{padding:.2em .5em}.pure-form input[type=color]:focus,.pure-form input[type=date]:focus,.pure-form input[type=datetime-local]:focus,.pure-form input[type=datetime]:focus,.pure-form input[type=email]:focus,.pure-form input[type=month]:focus,.pure-form input[type=number]:focus,.pure-form input[type=password]:focus,.pure-form input[type=search]:focus,.pure-form input[type=tel]:focus,.pure-form input[type=text]:focus,.pure-form input[type=time]:focus,.pure-form input[type=url]:focus,.pure-form input[type=week]:focus,.pure-form select:focus,.pure-form textarea:focus{outline:0;border-color:#129fea}.pure-form input:not([type]):focus{outline:0;border-color:#129fea}.pure-form input[type=checkbox]:focus,.pure-form input[type=file]:focus,.pure-form input[type=radio]:focus{outline:thin solid #129fea;outline:1px auto #129fea}.pure-form .pure-checkbox,.pure-form .pure-radio{margin:.5em 0;display:block}.pure-form input[type=color][disabled],.pure-form input[type=date][disabled],.pure-form input[type=datetime-local][disabled],.pure-form input[type=datetime][disabled],.pure-form input[type=email][disabled],.pure-form input[type=month][disabled],.pure-form input[type=number][disabled],.pure-form input[type=password][disabled],.pure-form input[type=search][disabled],.pure-form input[type=tel][disabled],.pure-form input[type=text][disabled],.pure-form input[type=time][disabled],.pure-form input[type=url][disabled],.pure-form input[type=week][disabled],.pure-form select[disabled],.pure-form textarea[disabled]{cursor:not-allowed;background-color:#eaeded;color:#cad2d3}.pure-form input:not([type])[disabled]{cursor:not-allowed;background-color:#eaeded;color:#cad2d3}.pure-form input[readonly],.pure-form select[readonly],.pure-form textarea[readonly]{background-color:#eee;color:#777;border-color:#ccc}.pure-form input:focus:invalid,.pure-form select:focus:invalid,.pure-form textarea:focus:invalid{color:#b94a48;border-color:#e9322d}.pure-form input[type=checkbox]:focus:invalid:focus,.pure-form input[type=file]:focus:invalid:focus,.pure-form input[type=radio]:focus:invalid:focus{outline-color:#e9322d}.pure-form select{height:2.25em;border:1px solid #ccc;background-color:#fff}.pure-form select[multiple]{height:auto}.pure-form label{margin:.5em 0 .2em}.pure-form fieldset{margin:0;padding:.35em 0 .75em;border:0}.pure-form legend{display:block;width:100%;padding:.3em 0;margin-bottom:.3em;color:#333;border-bottom:1px solid #e5e5e5}.pure-form-stacked input[type=color],.pure-form-stacked input[type=date],.pure-form-stacked input[type=datetime-local],.pure-form-stacked input[type=datetime],.pure-form-stacked input[type=email],.pure-form-stacked input[type=file],.pure-form-stacked input[type=month],.pure-form-stacked input[type=number],.pure-form-stacked input[type=password],.pure-form-stacked input[type=search],.pure-form-stacked input[type=tel],.pure-form-stacked input[type=text],.pure-form-stacked input[type=time],.pure-form-stacked input[type=url],.pure-form-stacked input[type=week],.pure-form-stacked label,.pure-form-stacked select,.pure-form-stacked textarea{display:block;margin:.25em 0}.pure-form-stacked input:not([type]){display:block;margin:.25em 0}.pure-form-aligned input,.pure-form-aligned select,.pure-form-aligned textarea,.pure-form-message-inline{display:inline-block;vertical-align:middle}.pure-form-aligned textarea{vertical-align:top}.pure-form-aligned .pure-control-group{margin-bottom:.5em}.pure-form-aligned .pure-control-group label{text-align:right;display:inline-block;vertical-align:middle;width:10em;margin:0 1em 0 0}.pure-form-aligned .pure-controls{margin:1.5em 0 0 11em}.pure-form .pure-input-rounded,.pure-form input.pure-input-rounded{border-radius:2em;padding:.5em 1em}.pure-form .pure-group fieldset{margin-bottom:10px}.pure-form .pure-group input,.pure-form .pure-group textarea{display:block;padding:10px;margin:0 0 -1px;border-radius:0;position:relative;top:-1px}.pure-form .pure-group input:focus,.pure-form .pure-group textarea:focus{z-index:3}.pure-form .pure-group input:first-child,.pure-form .pure-group textarea:first-child{top:1px;border-radius:4px 4px 0 0;margin:0}.pure-form .pure-group input:first-child:last-child,.pure-form .pure-group textarea:first-child:last-child{top:1px;border-radius:4px;margin:0}.pure-form .pure-group input:last-child,.pure-form .pure-group textarea:last-child{top:-2px;border-radius:0 0 4px 4px;margin:0}.pure-form .pure-group button{margin:.35em 0}.pure-form .pure-input-1{width:100%}.pure-form .pure-input-3-4{width:75%}.pure-form .pure-input-2-3{width:66%}.pure-form .pure-input-1-2{width:50%}.pure-form .pure-input-1-3{width:33%}.pure-form .pure-input-1-4{width:25%}.pure-form-message-inline{display:inline-block;padding-left:.3em;color:#666;vertical-align:middle;font-size:.875em}.pure-form-message{display:block;color:#666;font-size:.875em}@media only screen and (max-width :480px){.pure-form button[type=submit]{margin:.7em 0 0}.pure-form input:not([type]),.pure-form input[type=color],.pure-form input[type=date],.pure-form input[type=datetime-local],.pure-form input[type=datetime],.pure-form input[type=email],.pure-form input[type=month],.pure-form input[type=number],.pure-form input[type=password],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=text],.pure-form input[type=time],.pure-form input[type=url],.pure-form input[type=week],.pure-form label{margin-bottom:.3em;display:block}.pure-group input:not([type]),.pure-group input[type=color],.pure-group input[type=date],.pure-group input[type=datetime-local],.pure-group input[type=datetime],.pure-group input[type=email],.pure-group input[type=month],.pure-group input[type=number],.pure-group input[type=password],.pure-group input[type=search],.pure-group input[type=tel],.pure-group input[type=text],.pure-group input[type=time],.pure-group input[type=url],.pure-group input[type=week]{margin-bottom:0}.pure-form-aligned .pure-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.pure-form-aligned .pure-controls{margin:1.5em 0 0 0}.pure-form-message,.pure-form-message-inline{display:block;font-size:.75em;padding:.2em 0 .8em}}.pure-menu{-webkit-box-sizing:border-box;box-sizing:border-box}.pure-menu-fixed{position:fixed;left:0;top:0;z-index:3}.pure-menu-item,.pure-menu-list{position:relative}.pure-menu-list{list-style:none;margin:0;padding:0}.pure-menu-item{padding:0;margin:0;height:100%}.pure-menu-heading,.pure-menu-link{display:block;text-decoration:none;white-space:nowrap}.pure-menu-horizontal{width:100%;white-space:nowrap}.pure-menu-horizontal .pure-menu-list{display:inline-block}.pure-menu-horizontal .pure-menu-heading,.pure-menu-horizontal .pure-menu-item,.pure-menu-horizontal .pure-menu-separator{display:inline-block;vertical-align:middle}.pure-menu-item .pure-menu-item{display:block}.pure-menu-children{display:none;position:absolute;left:100%;top:0;margin:0;padding:0;z-index:3}.pure-menu-horizontal .pure-menu-children{left:0;top:auto;width:inherit}.pure-menu-active>.pure-menu-children,.pure-menu-allow-hover:hover>.pure-menu-children{display:block;position:absolute}.pure-menu-has-children>.pure-menu-link:after{padding-left:.5em;content:"\25B8";font-size:small}.pure-menu-horizontal .pure-menu-has-children>.pure-menu-link:after{content:"\25BE"}.pure-menu-scrollable{overflow-y:scroll;overflow-x:hidden}.pure-menu-scrollable .pure-menu-list{display:block}.pure-menu-horizontal.pure-menu-scrollable .pure-menu-list{display:inline-block}.pure-menu-horizontal.pure-menu-scrollable{white-space:nowrap;overflow-y:hidden;overflow-x:auto;padding:.5em 0}.pure-menu-horizontal .pure-menu-children .pure-menu-separator,.pure-menu-separator{background-color:#ccc;height:1px;margin:.3em 0}.pure-menu-horizontal .pure-menu-separator{width:1px;height:1.3em;margin:0 .3em}.pure-menu-horizontal .pure-menu-children .pure-menu-separator{display:block;width:auto}.pure-menu-heading{text-transform:uppercase;color:#565d64}.pure-menu-link{color:#777}.pure-menu-children{background-color:#fff}.pure-menu-disabled,.pure-menu-heading,.pure-menu-link{padding:.5em 1em}.pure-menu-disabled{opacity:.5}.pure-menu-disabled .pure-menu-link:hover{background-color:transparent}.pure-menu-active>.pure-menu-link,.pure-menu-link:focus,.pure-menu-link:hover{background-color:#eee}.pure-menu-selected>.pure-menu-link,.pure-menu-selected>.pure-menu-link:visited{color:#000}.pure-table{border-collapse:collapse;border-spacing:0;empty-cells:show;border:1px solid #cbcbcb}.pure-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.pure-table td,.pure-table th{border-left:1px solid #cbcbcb;border-width:0 0 0 1px;font-size:inherit;margin:0;overflow:visible;padding:.5em 1em}.pure-table thead{background-color:#e0e0e0;color:#000;text-align:left;vertical-align:bottom}.pure-table td{background-color:transparent}.pure-table-odd td{background-color:#f2f2f2}.pure-table-striped tr:nth-child(2n-1) td{background-color:#f2f2f2}.pure-table-bordered td{border-bottom:1px solid #cbcbcb}.pure-table-bordered tbody>tr:last-child>td{border-bottom-width:0}.pure-table-horizontal td,.pure-table-horizontal th{border-width:0 0 1px 0;border-bottom:1px solid #cbcbcb}.pure-table-horizontal tbody>tr:last-child>td{border-bottom-width:0} 13 | -------------------------------------------------------------------------------- /luasrc/view/themes/argon/footer.htm: -------------------------------------------------------------------------------- 1 | <%# 2 | Argon is a clean HTML5 theme for LuCI. It is based on luci-theme-material Argon Template 3 | 4 | luci-theme-argon 5 | Copyright 2020 Jerrykuku 6 | 7 | Have a bug? Please create an issue here on GitHub! 8 | https://github.com/jerrykuku/luci-theme-argon/issues 9 | 10 | luci-theme-material: 11 | Copyright 2015 Lutty Yang 12 | 13 | Agron Theme 14 | https://demos.creative-tim.com/argon-dashboard/index.html 15 | 16 | Licensed to the public under the Apache License 2.0 17 | -%> 18 | 19 | <% local ver = require "luci.version" %> 20 | 21 | 29 | 30 | 31 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /luasrc/view/themes/argon/footer_login.htm: -------------------------------------------------------------------------------- 1 | <%# 2 | Argon is a clean HTML5 theme for LuCI. It is based on luci-theme-material Argon Template 3 | 4 | luci-theme-argon 5 | Copyright 2020 Jerrykuku 6 | 7 | Have a bug? Please create an issue here on GitHub! 8 | https://github.com/jerrykuku/luci-theme-argon/issues 9 | 10 | luci-theme-material: 11 | Copyright 2015 Lutty Yang 12 | 13 | Agron Theme 14 | https://demos.creative-tim.com/argon-dashboard/index.html 15 | 16 | Licensed to the public under the Apache License 2.0 17 | -%> 18 | 19 | <% local ver = require "luci.version" %> 20 | 21 | 28 | 29 | 30 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /luasrc/view/themes/argon/header.htm: -------------------------------------------------------------------------------- 1 | <%# 2 | Argon is a clean HTML5 theme for LuCI. It is based on luci-theme-material Argon Template 3 | 4 | luci-theme-argon 5 | Copyright 2020 Jerrykuku 6 | 7 | Have a bug? Please create an issue here on GitHub! 8 | https://github.com/jerrykuku/luci-theme-argon/issues 9 | 10 | luci-theme-material: 11 | Copyright 2015 Lutty Yang 12 | 13 | Argon Theme 14 | https://demos.creative-tim.com/argon-dashboard/index.html 15 | 16 | Licensed to the public under the Apache License 2.0 17 | -%> 18 | 19 | <% 20 | local sys = require "luci.sys" 21 | local util = require "luci.util" 22 | local http = require "luci.http" 23 | local disp = require "luci.dispatcher" 24 | local ver = require "luci.version" 25 | 26 | local boardinfo = util.ubus("system", "board") 27 | 28 | local node = disp.context.dispatched 29 | 30 | local fs = require "nixio.fs" 31 | local nutil = require "nixio.util" 32 | local uci = require 'luci.model.uci'.cursor() 33 | 34 | -- send as HTML5 35 | http.prepare_content("text/html") 36 | 37 | math.randomseed(os.time()) 38 | 39 | -- Custom settings 40 | local mode = 'normal' 41 | local dark_css = fs.readfile('/www/luci-static/argon/css/dark.css') 42 | local bar_color = '#5e72e4' 43 | local primary, dark_primary, blur_radius, blur_radius_dark, blur_opacity 44 | if fs.access('/etc/config/argon') then 45 | primary = uci:get_first('argon', 'global', 'primary') 46 | dark_primary = uci:get_first('argon', 'global', 'dark_primary') 47 | blur_radius = uci:get_first('argon', 'global', 'blur') 48 | blur_radius_dark = uci:get_first('argon', 'global', 'blur_dark') 49 | blur_opacity = uci:get_first('argon', 'global', 'transparency') 50 | blur_opacity_dark = uci:get_first('argon', 'global', 'transparency_dark') 51 | mode = uci:get_first('argon', 'global', 'mode') 52 | bar_color = mode == 'dark' and dark_primary or primary 53 | end 54 | 55 | -- Brand name 56 | local brand_name = boardinfo.hostname or "?" 57 | -%> 58 | 59 | 60 | 61 | 62 | 63 | 64 | <%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> 65 | - LuCI 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | - LuCI"> 77 | - LuCI"> 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 109 | 110 | <% if node and node.css then %> 111 | 112 | <% end -%> 113 | <% if css then %> 114 | 117 | <% end -%> 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | "> 128 | 129 |
130 | 146 |
147 |
148 |
149 |
150 |
151 | 152 | <%=brand_name%> 153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 | <%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%> 162 |
163 |

<%:No password set!%>

164 |

<%:There is no password set on this router. Please configure a root password to protect the web interface.%> 165 |

166 | <% if disp.lookup("admin/system/admin") then %> 167 | 169 | <% end %> 170 |
171 | <%- end -%> 172 | 173 | 179 | 180 | 181 | -------------------------------------------------------------------------------- /luasrc/view/themes/argon/header_login.htm: -------------------------------------------------------------------------------- 1 | <%# 2 | Argon is a clean HTML5 theme for LuCI. It is based on luci-theme-material Argon Template 3 | 4 | luci-theme-argon 5 | Copyright 2020 Jerrykuku 6 | 7 | Have a bug? Please create an issue here on GitHub! 8 | https://github.com/jerrykuku/luci-theme-argon/issues 9 | 10 | luci-theme-material: 11 | Copyright 2015 Lutty Yang 12 | 13 | Argon Theme 14 | https://demos.creative-tim.com/argon-dashboard/index.html 15 | 16 | Licensed to the public under the Apache License 2.0 17 | -%> 18 | 19 | <% 20 | local sys = require "luci.sys" 21 | local util = require "luci.util" 22 | local http = require "luci.http" 23 | local disp = require "luci.dispatcher" 24 | local ver = require "luci.version" 25 | 26 | local boardinfo = util.ubus("system", "board") 27 | 28 | local node = disp.context.dispatched 29 | 30 | local fs = require "nixio.fs" 31 | local nutil = require "nixio.util" 32 | local uci = require 'luci.model.uci'.cursor() 33 | 34 | -- send as HTML5 35 | http.prepare_content("text/html") 36 | 37 | math.randomseed(tonumber(tostring(os.time()):reverse():sub(1, 9))) 38 | 39 | -- Custom settings 40 | local mode = 'normal' 41 | local dark_css = fs.readfile('/www/luci-static/argon/css/dark.css') 42 | local bar_color = '#5e72e4' 43 | local primary, dark_primary, blur_radius, blur_radius_dark, blur_opacity 44 | if fs.access('/etc/config/argon') then 45 | primary = uci:get_first('argon', 'global', 'primary') 46 | dark_primary = uci:get_first('argon', 'global', 'dark_primary') 47 | blur_radius = uci:get_first('argon', 'global', 'blur') 48 | blur_radius_dark = uci:get_first('argon', 'global', 'blur_dark') 49 | blur_opacity = uci:get_first('argon', 'global', 'transparency') 50 | blur_opacity_dark = uci:get_first('argon', 'global', 'transparency_dark') 51 | mode = uci:get_first('argon', 'global', 'mode') 52 | bar_color = mode == 'dark' and dark_primary or primary 53 | end 54 | -%> 55 | 56 | 57 | 58 | 59 | 60 | 61 | <%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> 62 | - LuCI 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | - LuCI"> 74 | - LuCI"> 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 106 | 107 | <% if node and node.css then %> 108 | 109 | <% end -%> 110 | <% if css then %> 111 | 114 | <% end -%> 115 | 116 | 117 | 118 | 119 | 120 | -------------------------------------------------------------------------------- /luasrc/view/themes/argon/out_header_login.htm: -------------------------------------------------------------------------------- 1 | <%# 2 | Copyright 2008 Steven Barth 3 | Copyright 2008-2019 Jo-Philipp Wich 4 | Licensed to the public under the Apache License 2.0. 5 | -%> 6 | 7 | <% 8 | local ver = require "luci.version" 9 | 10 | if not luci.dispatcher.context.template_header_sent then 11 | include("themes/" .. theme .. "/header_login") 12 | luci.dispatcher.context.template_header_sent = true 13 | end 14 | %> 15 | -------------------------------------------------------------------------------- /luasrc/view/themes/argon/sysauth.htm: -------------------------------------------------------------------------------- 1 | <%# 2 | Argon is a clean HTML5 theme for LuCI. It is based on luci-theme-bootstrap and MUI and Argon Template 3 | 4 | luci-theme-argon 5 | Copyright 2020 Jerryk 6 | 7 | Have a bug? Please create an issue here on GitHub! 8 | https://github.com/jerrykuku/luci-theme-argon/issues 9 | 10 | luci-theme-bootstrap: 11 | Copyright 2008 Steven Barth 12 | Copyright 2008-2016 Jo-Philipp Wich 13 | Copyright 2012 David Menting 14 | 15 | MUI: 16 | https://github.com/muicss/mui 17 | 18 | Argon Theme 19 | https://demos.creative-tim.com/argon-dashboard/index.html 20 | 21 | Licensed to the public under the Apache License 2.0 22 | -%> 23 | 24 | <%+themes/argon/out_header_login%> 25 | <% 26 | local util = require "luci.util" 27 | local fs = require "nixio.fs" 28 | local nutil = require "nixio.util" 29 | local json = require "luci.jsonc" 30 | local sys = require "luci.sys" 31 | local uci = require 'luci.model.uci'.cursor() 32 | 33 | -- Fetch Local Background Media 34 | 35 | local function glob(...) 36 | local iter, code, msg = fs.glob(...) 37 | if iter then 38 | return nutil.consume(iter) 39 | else 40 | return nil, code, msg 41 | end 42 | end 43 | 44 | 45 | local imageTypes = " jpg png gif webp " 46 | local videoTypes = " mp4 webm " 47 | local allTypes = imageTypes .. videoTypes 48 | local function fetchMedia(path, themeDir) 49 | local backgroundTable = {} 50 | local backgroundCount = 0 51 | for i, f in ipairs(glob(path)) do 52 | attr = fs.stat(f) 53 | if attr then 54 | local ext = fs.basename(f):match(".+%.(%w+)$") 55 | if ext ~= nil then 56 | ext = ext:lower() 57 | end 58 | if ext ~= nil and string.match(allTypes, " "..ext.." ") ~= nil then 59 | local bg = {} 60 | bg.type = ext 61 | bg.url = themeDir .. fs.basename(f) 62 | table.insert(backgroundTable, bg) 63 | backgroundCount = backgroundCount + 1 64 | end 65 | end 66 | end 67 | return backgroundTable, backgroundCount 68 | end 69 | local function selectBackground(themeDir) 70 | local bgUrl = media .. "/img/bg1.jpg" 71 | local backgroundType = "Image" 72 | local mimeType = "" 73 | 74 | if fs.access("/etc/config/argon") then 75 | local online_wallpaper = uci:get_first('argon', 'global', 'online_wallpaper') or (uci:get_first('argon', 'global', 'bing_background') == '1' and 'bing') 76 | if (online_wallpaper and online_wallpaper ~= "none") then 77 | local picurl = sys.exec("/usr/libexec/argon/online_wallpaper") 78 | if (picurl and picurl ~= '') then 79 | return picurl, "Image", "" 80 | end 81 | end 82 | end 83 | 84 | local backgroundTable, backgroundCount = fetchMedia("/www" .. themeDir .. "*", themeDir) 85 | if ( backgroundCount > 0 ) then 86 | local currentBg = backgroundTable[math.random(1, backgroundCount)] 87 | bgUrl = currentBg.url 88 | if (string.match(videoTypes, " "..currentBg.type.." ") ~= nil) then 89 | backgroundType = "Video" 90 | mimeType = "video/" .. currentBg.type 91 | end 92 | end 93 | 94 | return bgUrl, backgroundType, mimeType 95 | end 96 | 97 | local boardinfo = util.ubus("system", "board") 98 | local themeDir = media .. "/background/" 99 | local bgUrl, backgroundType, mimeType = selectBackground(themeDir) 100 | %> 101 | 102 |