From ace85ed78c5d5e9575809e08b7ee21cdd2390426 Mon Sep 17 00:00:00 2001 From: suyuan168 <175338101@qq.com> Date: Tue, 24 May 2022 03:02:11 +0800 Subject: [PATCH] add theme --- luci-theme-ezengreen/Makefile | 16 + .../htdocs/luci-static/ezengreen/cascade.css | 2027 +++++++++++++++++ .../htdocs/luci-static/ezengreen/ezenlink.png | Bin 0 -> 553 bytes .../htdocs/luci-static/ezengreen/favicon.ico | Bin 0 -> 4286 bytes .../htdocs/luci-static/ezengreen/footer.png | Bin 0 -> 836 bytes .../htdocs/luci-static/ezengreen/mobile.css | 61 + .../luci-static/ezengreen/outdoorrouter.png | Bin 0 -> 1353 bytes .../luasrc/view/themes/ezengreen/footer.htm | 29 + .../luasrc/view/themes/ezengreen/header.htm | 206 ++ .../etc/uci-defaults/30_luci-theme-ezengreen | 7 + luci-theme-lamatel/Makefile | 16 + .../htdocs/luci-static/lamatel/cascade.css | 2022 ++++++++++++++++ .../htdocs/luci-static/lamatel/ezenlink.png | Bin 0 -> 553 bytes .../htdocs/luci-static/lamatel/favicon.ico | Bin 0 -> 762 bytes .../htdocs/luci-static/lamatel/footer.png | Bin 0 -> 2698 bytes .../htdocs/luci-static/lamatel/logo.png | Bin 0 -> 15943 bytes .../htdocs/luci-static/lamatel/mobile.css | 61 + .../luasrc/view/themes/lamatel/footer.htm | 29 + .../luasrc/view/themes/lamatel/header.htm | 206 ++ .../etc/uci-defaults/30_luci-theme-lametal | 7 + 20 files changed, 4687 insertions(+) create mode 100644 luci-theme-ezengreen/Makefile create mode 100755 luci-theme-ezengreen/htdocs/luci-static/ezengreen/cascade.css create mode 100755 luci-theme-ezengreen/htdocs/luci-static/ezengreen/ezenlink.png create mode 100755 luci-theme-ezengreen/htdocs/luci-static/ezengreen/favicon.ico create mode 100755 luci-theme-ezengreen/htdocs/luci-static/ezengreen/footer.png create mode 100755 luci-theme-ezengreen/htdocs/luci-static/ezengreen/mobile.css create mode 100755 luci-theme-ezengreen/htdocs/luci-static/ezengreen/outdoorrouter.png create mode 100644 luci-theme-ezengreen/luasrc/view/themes/ezengreen/footer.htm create mode 100644 luci-theme-ezengreen/luasrc/view/themes/ezengreen/header.htm create mode 100755 luci-theme-ezengreen/root/etc/uci-defaults/30_luci-theme-ezengreen create mode 100644 luci-theme-lamatel/Makefile create mode 100755 luci-theme-lamatel/htdocs/luci-static/lamatel/cascade.css create mode 100755 luci-theme-lamatel/htdocs/luci-static/lamatel/ezenlink.png create mode 100755 luci-theme-lamatel/htdocs/luci-static/lamatel/favicon.ico create mode 100755 luci-theme-lamatel/htdocs/luci-static/lamatel/footer.png create mode 100755 luci-theme-lamatel/htdocs/luci-static/lamatel/logo.png create mode 100755 luci-theme-lamatel/htdocs/luci-static/lamatel/mobile.css create mode 100644 luci-theme-lamatel/luasrc/view/themes/lamatel/footer.htm create mode 100644 luci-theme-lamatel/luasrc/view/themes/lamatel/header.htm create mode 100755 luci-theme-lamatel/root/etc/uci-defaults/30_luci-theme-lametal diff --git a/luci-theme-ezengreen/Makefile b/luci-theme-ezengreen/Makefile new file mode 100644 index 000000000..dc4a25974 --- /dev/null +++ b/luci-theme-ezengreen/Makefile @@ -0,0 +1,16 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Ezengreen Theme +LUCI_DEPENDS:= + +PKG_LICENSE:=Apache-2.0 + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-theme-ezengreen/htdocs/luci-static/ezengreen/cascade.css b/luci-theme-ezengreen/htdocs/luci-static/ezengreen/cascade.css new file mode 100755 index 000000000..740adc320 --- /dev/null +++ b/luci-theme-ezengreen/htdocs/luci-static/ezengreen/cascade.css @@ -0,0 +1,2027 @@ +/*! + * LuCI Bootstrap Theme + * Copyright 2012 Nut & Bolt + * By David Menting + * Based on Bootstrap v1.4.0 + * + * Copyright 2011 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */ +/* Reset.less + * Props to Eric Meyer (meyerweb.com) for his CSS reset file. We're using an adapted version here that cuts out some of the reset HTML elements we will never need here (i.e., dfn, samp, etc). + * ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ +html { + margin: 0; + padding: 0; +} + +body { + margin: 0; + padding: 5px; +} + +h1, h2, h3, h4, h5, h6, p, pre, a, abbr, acronym, code, del, em, img, ins, q, s, +small, strike, strong, sub, sup, tt, var, dd, dl, dt, li, ol, ul, fieldset, +form, label, legend, button, table, caption, tbody, tfoot, thead, tr, th, td, +.table, .tbody, .tfoot, .thead, .tr, .th, .td { + margin: 0; + padding: 0; + border: 0; + font-weight: normal; + font-style: normal; + font-size: 100%; + line-height: 1; + font-family: inherit; +} + +abbr[title], acronym[title] { + border-bottom: 1px dotted; + font-weight: inherit; + cursor: help; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +ol, ul { + list-style: none; +} + +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} + +html { + overflow-y: scroll; + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +a:focus { + outline: thin dotted; +} + +a:hover, a:active { + outline: 0; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +nav, +section { + display: block; +} + +sub, sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + border: 0; + -ms-interpolation-mode: bicubic; +} + +button, +input, +select, +option, +textarea { + font-size: 100%; + margin: 0; + box-sizing: border-box; + vertical-align: baseline; + *vertical-align: middle; +} + +button, input { + line-height: normal; + *overflow: visible; +} + +button::-moz-focus-inner, input::-moz-focus-inner { + border: 0; + padding: 0; +} + +button, +input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} + +button[disabled], +input[type="button"][disabled], +input[type="reset"][disabled], +input[type="submit"][disabled] { + opacity: 0.7; +} + +input[type="search"] { + -webkit-appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +/* + * Scaffolding + * Basic and global styles for generating a grid system, structural layout, and page templates + * ------------------------------------------------------------------------------------------- */ +body { + background-color: #fff; + margin: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 12px; + font-weight: normal; + line-height: 18px; + color: #404040; + padding-top: 75px; +} + +.container { + width: 100%; + max-width: 940px; + margin-left: auto; + margin-right: auto; + zoom: 1; +} + +.container:before, .container:after { + display: table; + content: ""; + zoom: 1; +} + +.container:after { + clear: both; +} + +a { + color: #215e21; + text-decoration: none; + line-height: inherit; + font-weight: inherit; +} + +a:hover { + color: #000000; + text-decoration: none; +} + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +/* Typography.less + * Headings, body text, lists, code, and more for a versatile and durable typography system + * ---------------------------------------------------------------------------------------- */ +p, +.cbi-map-descr, +.cbi-section-descr, +.table .tr.cbi-section-table-descr .th { + font-size: 12px; + font-weight: normal; + line-height: 18px; + margin-bottom: 9px; +} + +p small { + font-size: 11px; + color: #bfbfbf; +} + +h1, +h2, +h3, legend, +h4, +h5, +h6 { + font-weight: normal; + color: #404040; +} + +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small { + color: #bfbfbf; +} + +h1 { + margin-bottom: 18px; + font-size: 30px; + line-height: 36px; +} + +h1 small { + font-size: 18px; +} + +h2 { + font-size: 24px; + line-height: 58px; + text-transform: uppercase; + font-weight: normal; +} + +h2 small { + font-size: 14px; +} + +h3, legend, +h4, +h5, +h6 { + line-height: 48px; +} + +h3, legend { + font-size: 18px; +} + +h3 small { + font-size: 14px; +} + +h4 { + font-size: 16px; +} + +h4 small { + font-size: 12px; +} + +h5 { + font-size: 14px; +} + +h6 { + font-size: 13px; + color: #bfbfbf; + text-transform: uppercase; +} + +ul, ol { + margin: 0 0 18px 25px; +} + +ul ul, +ul ol, +ol ol, +ol ul { + margin-bottom: 0; +} + +ul { + list-style: disc; +} + +ol { + list-style: decimal; +} + +li { + line-height: 18px; + color: #808080; +} + +ul.unstyled { + list-style: none; + margin-left: 0; +} + +dl { + margin-bottom: 18px; +} + +dl dt, dl dd { + line-height: 18px; +} + +dl dt { + font-weight: bold; +} + +dl dd { + margin-left: 9px; +} + +hr { + margin: 20px 0 19px; + border: 0; + border-bottom: 1px solid #eee; +} + +strong { + font-style: inherit; + font-weight: bold; +} + +em { + font-style: italic; + font-weight: inherit; + line-height: inherit; +} + +small { font-size: 0.9em } + +address { + display: block; + line-height: 18px; + margin-bottom: 18px; +} + +code, pre { + padding: 0 3px 2px; + font-family: Monaco, Andale Mono, Courier New, monospace; + font-size: 12px; + border-radius: 2px; +} + +code { + background-color: #fee9cc; + color: rgba(0, 0, 0, 0.75); + padding: 1px 3px; +} + +pre { + background-color: #f5f5f5; + display: block; + padding: 8.5px; + margin: 0 0 18px; + line-height: 18px; + font-size: 12px; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 2px; + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} + +/* Forms.less + * Base styles for various input types, form layouts, and states + * ------------------------------------------------------------- */ +form { + margin-bottom: 18px; +} + +fieldset { + margin-bottom: 9px; + padding-top: 9px; +} + +fieldset legend { + display: block; + font-size: 19.5px; + line-height: 1; + color: #404040; + padding-top: 20px; + *padding: 0 0 5px 0px; + /* IE6-7 */ + + *line-height: 1.5; + /* IE6-7 */ + +} +form .cbi-tab-descr { + line-height: 18px; + margin-bottom: 18px; +} + +form .clearfix, +form .cbi-value { + margin-bottom: 15px; + margin-top: 15px; + zoom: 1; +} + +form .clearfix:before, form .clearfix:after, +form .cbi-value:before, form .cbi-value:after { + display: table; + content: ""; + zoom: 1; +} + +form .clearfix:after, +form .cbi-value:after { + clear: both; +} + +label, +input, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 12px; + font-weight: normal; + line-height: normal; +} + +form .input, +form .cbi-value-field { + margin-left: 120px; +} + +form .cbi-value label.cbi-value-title { + padding-top: 6px; + font-size: 12px; + line-height: 18px; + float: left; + width: 111px; + text-align: left; + color: #404040; +} + +input[type=checkbox], input[type=radio] { + cursor: pointer; +} + +input, +textarea, +select, +.cbi-dropdown, +.uneditable-input { + display: inline-block; + width: 200px; + height: 30px; + padding: 4px; + font-size: 12px; + line-height: 18px; + color: #808080; + border: 1px solid #ccc; + border-radius: 2px; + box-sizing: border-box; + margin: 2px 0; +} + +.cbi-dropdown { + min-width: 210px; + max-width: 400px; + width: auto; +} + +select { + padding: initial; + background: #fff; + box-shadow: inset 0 -1px 3px rgba(0, 0, 0, 0.1); +} + +input[type=checkbox], input[type=radio] { + width: auto; + height: auto; + padding: 0; + margin: 3px 0; + *margin-top: 0; + /* IE6-7 */ + + line-height: normal; + border: none; +} + +input[type=file] { + background-color: #fff; + padding: initial; + border: initial; + line-height: initial; + box-shadow: none; + width: auto !important; +} + +input[type=button], input[type=reset], input[type=submit] { + width: auto; + height: auto; +} + +select, input[type=file] { + *height: auto; + *margin-top: 4px; + /* For IE7, add top margin to align select with labels */ +} + +select[multiple] { + height: inherit; + background-color: #fff; +} + +textarea { + height: auto; +} + +.td > input[type=text], +.td > input[type=password], +.td > select, +.td > .cbi-dropdown { + width: 100%; +} + +.uneditable-input { + background-color: #fff; + display: block; + border-color: #eee; + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + cursor: not-allowed; +} + +::-moz-placeholder { + color: #bfbfbf; +} + +::-webkit-input-placeholder { + color: #bfbfbf; +} + +.btn, .cbi-button, input, textarea { + transition: border linear 0.2s, box-shadow linear 0.2s; + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); + padding: 12px 6px; +} + +.btn:hover, .cbi-button:hover, +input:focus, textarea:focus { + outline: 0; + border-color: rgba(82, 168, 236, 0.8) !important; + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); + text-decoration: none; +} + +input[type=file]:focus, input[type=checkbox]:focus, select:focus { + box-shadow: none; + outline: 1px dotted #666; +} + +input[disabled], +select[disabled], +textarea[disabled], +input[readonly], +select[readonly], +textarea[readonly] { + background-color: #194119; + border-color: #ccc; + padding: 5px; + pointer-events: none; + cursor: default; +} + +select[readonly], +textarea[readonly] { + pointer-events: auto; + cursor: auto; +} + +.cbi-optionals, +.cbi-section-create { + padding: 0 0 10px 10px; +} + +.cbi-section-create { + margin: 10px 0 0 -10px; + display: inline-flex; + align-items: center; +} + +.cbi-section-create > * { + margin: 3px; + flex: 1 1 auto; +} + +.cbi-section-create > * > input { + width: 100%; +} + +.actions, +.cbi-page-actions { + background: #f5f5f5; + margin-bottom: 20px; + margin-top: 40px; + padding: 15px 20px 15px 20px; + border-radius: 0 0 2px 2px; + text-align: right; +} + +.actions .secondary-action, +.cbi-page-actions .secondary-action{ + float: right; +} + +.actions .secondary-action a, +.cbi-page-actions .secondary-action a { + line-height: 30px; +} + +.actions .secondary-action a:hover, +.cbi-page-actions .secondary-action a:hover { + text-decoration: none; +} + +.cbi-page-actions > form { + display: inline; + margin: 0; +} + +.help-inline, .help-block { + font-size: 12px; + line-height: 18px; + color: #bfbfbf; +} + +.help-inline { + padding-left: 5px; + *position: relative; + /* IE6-7 */ + + *top: -5px; + /* IE6-7 */ + +} + +.help-block { + display: block; + max-width: 600px; +} + +/* + * Tables.less + * Tables for, you guessed it, tabular data + * ---------------------------------------- */ +.tr { display: table-row; } +.table[width="33%"], .th[width="33%"], .td[width="33%"] { width: 33%; } +.table[width="100%"], .th[width="100%"], .td[width="100%"] { width: 100%; } + +.table { + display: table; + width: 100%; + margin: 12px 0 24px 0; + padding: 0; + font-size: 12px; + border-collapse: collapse; + position: relative; +} + +.table .th, .table .td { + display: table-cell; + vertical-align: middle; /* Fixme */ + padding: 6px 6px 6px 2px; + line-height: 18px; + text-align: left; +} + +.table .tr:first-child .th { + padding-top: 9px; + font-weight: normal; + vertical-align: top; +} + +.table .td, .table .th { + border-top: 1px solid #e7e7e7; +} + +.tr.placeholder { + height: calc(3em + 20px); +} + +.tr.placeholder > .td { + position: absolute; + left: 0; + right: 0; + bottom: 0; + text-align: center; + line-height: 3em; +} + +/* Patterns.less + * Repeatable UI elements outside the base styles provided from the scaffolding + * ---------------------------------------------------------------------------- */ +header { + height: 40px; + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 10000; + overflow: visible; + color: #BFBFBF; +} + +header a { + color: #c4c4c4; +} + +header h3 a:hover, header .brand:hover, header ul .active > a { + background-color: #333; + background-color: rgba(0, 0, 0, 0.33); + color: #fff; + text-decoration: none; +} + +header h3 { + position: relative; +} + +header h3 a, header .brand { + float: left; + display: block; + padding: 16px 20px 16px; + margin-left: -20px; + color: #fff; + font-size: 24px; + font-weight: 333; + line-height: 1; +} + +header p { + margin: 0; + line-height: 40px; +} + +header .fill { + background-color: #215e21; + background-repeat: repeat-x; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.33), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + padding: 0 5px; +} + +header div > ul, .nav { + display: block; + float: left; + margin: 0 10px 0 20px; + position: relative; + left: 0; +} + +header div > ul > li, .nav > li { + display: block; + float: left; +} + +header div > ul a, .nav a { + display: block; + float: none; + padding: 22px 12px 14px 12px; + line-height: 19px; + letter-spacing: 0.4px; + text-decoration: none; + text-transform: uppercase; +} + +header div > ul a:hover, .nav a:hover { + color: #fff; + text-decoration: none; +} + +header div > ul .active > a, .nav .active > a { + background-color: #222; + background-color: rgba(0, 0, 0, 0.33); +} + +header div > ul.secondary-nav, .nav.secondary-nav { + float: right; + margin-left: 10px; + margin-right: 0; +} + +header div > ul.secondary-nav .menu-dropdown, +.nav.secondary-nav .menu-dropdown, +header div > ul.secondary-nav .dropdown-menu, +.nav.secondary-nav .dropdown-menu { + right: 0; + border: 0; +} + +header div > ul a.menu:hover, +.nav a.menu:hover, +header div > ul li.open .menu, +.nav li.open .menu, +header div > ul .dropdown-toggle:hover, +.nav .dropdown-toggle:hover, +header div > ul .dropdown.open .dropdown-toggle, +.nav .dropdown.open .dropdown-toggle { + background: #444; + background: rgba(0, 0, 0, 0.3); +} + +header div > ul .menu-dropdown, +.nav .menu-dropdown, +header div > ul .dropdown-menu, +.nav .dropdown-menu { + background-color: #003300; +} + +header div > ul .menu-dropdown a.menu, +.nav .menu-dropdown a.menu, +header div > ul .dropdown-menu a.menu, +.nav .dropdown-menu a.menu, +header div > ul .menu-dropdown .dropdown-toggle, +.nav .menu-dropdown .dropdown-toggle, +header div > ul .dropdown-menu .dropdown-toggle, +.nav .dropdown-menu .dropdown-toggle { + color: #fff; +} + +header div > ul .menu-dropdown a.menu.open, +.nav .menu-dropdown a.menu.open, +header div > ul .dropdown-menu a.menu.open, +.nav .dropdown-menu a.menu.open, +header div > ul .menu-dropdown .dropdown-toggle.open, +.nav .menu-dropdown .dropdown-toggle.open, +header div > ul .dropdown-menu .dropdown-toggle.open, +.nav .dropdown-menu .dropdown-toggle.open { + background: #444; + background: rgba(255, 255, 255, 0.05); +} + +header div > ul .menu-dropdown li a, +.nav .menu-dropdown li a, +header div > ul .dropdown-menu li a, +.nav .dropdown-menu li a { + color: #bfbfbf; +} + +header div > ul .menu-dropdown li a:hover, +.nav .menu-dropdown li a:hover, +header div > ul .dropdown-menu li a:hover, +.nav .dropdown-menu li a:hover { + background-color: #215e21; + background-repeat: repeat-x; + color: #fff; +} + +header div > ul .menu-dropdown .active a, +.nav .menu-dropdown .active a, +header div > ul .dropdown-menu .active a, +.nav .dropdown-menu .active a { + color: #fff; +} + +header div > ul .menu-dropdown .divider, +.nav .menu-dropdown .divider, +header div > ul .dropdown-menu .divider, +.nav .dropdown-menu .divider { + background-color: #222; + border-color: #444; +} + +header ul .menu-dropdown li a, header ul .dropdown-menu li a { + padding: 6px 12px; +} + +li.menu, .dropdown { + position: relative; +} + +.menu-dropdown, .dropdown-menu { + background-color: #fff; + float: left; + position: absolute; + top: 55px; + left: -9999px; + z-index: 900; + min-width: 200px; + max-width: 300px; + _width: 160px; + margin-left: 0; + margin-right: 0; + padding: 6px 0; + zoom: 1; + border-radius: 0 0 2px 2px; + background-clip: padding-box; +} + +.menu-dropdown li, .dropdown-menu li { + float: none; + display: block; + background-color: transparent; +} + +.menu-dropdown .divider, .dropdown-menu .divider { + height: 1px; + margin: 5px 0; + overflow: hidden; + background-color: #eee; + border-bottom: 1px solid #fff; +} + +header .dropdown-menu a, .dropdown-menu a { + display: block; + padding: 4px 15px; + clear: both; + font-weight: normal; + line-height: 18px; + text-transform: capitalize; + letter-spacing: 0.2px; + color: #808080; + zoom: 1.1; +} + +header .dropdown-menu a:hover, +.dropdown-menu a:hover, +header .dropdown-menu a.hover, +.dropdown-menu a.hover { + background-color: #ddd; + background-repeat: repeat-x; + color: #404040; + text-decoration: none; + box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025); +} + +.open .menu, +.dropdown.open .menu, +.open .dropdown-toggle, +.dropdown.open .dropdown-toggle { + color: #fff; + background: #ccc; + background: rgba(0, 0, 0, 0.3); +} + +.open .menu-dropdown, +.dropdown.open .menu-dropdown, +.open .dropdown-menu, +.dropdown.open .dropdown-menu { + left: 0; +} + +.dropdown:hover ul.dropdown-menu { + left: 0; +} + +.dropdown-menu .dropdown-menu { + position: absolute; + left: 159px; +} + +.dropdown-menu li { + position: relative; +} + +.tabs, .cbi-tabmenu { + margin: 0 0 18px; + padding: 0; + list-style: none; + zoom: 1; +} + +.tabs:before, +.cbi-tabmenu:before, +.tabs:after, +.cbi-tabmenu:after { + display: table; + content: ""; + zoom: 1; +} + +.tabs:after, .cbi-tabmenu:after { + clear: both; +} + +.tabs > li, .cbi-tabmenu > li { + float: left; +} + +.tabs > li > a, .cbi-tabmenu > li > a { + display: block; +} + +.tabs, +.cbi-tabmenu { + border-color: #ddd; + border-style: solid; + border-width: 0 0 1px; +} + +.tabs > li, +.cbi-tabmenu > li { + position: relative; + margin-bottom: -1px; +} + +.cbi-tabmenu.map { + margin: 0; +} + +.cbi-tabmenu.map > li { + font-size: 16.5px; + font-weight: bold; +} + +.cbi-tabcontainer > fieldset.cbi-section[id] > legend { + display: none; +} + +.tabs > li > a, +.cbi-tabmenu > li > a { + padding: 0 15px; + margin-right: 2px; + line-height: 34px; + border: 1px solid transparent; + border-radius: 2px 2px 0 0; +} + +.tabs > li > a:hover, +.cbi-tabmenu > li > a:hover { + text-decoration: none; + background-color: #eee; + border-color: #eee #eee #ddd; +} + +.tabs .active > a, .tabs .active > a:hover, +.cbi-tabmenu .active > a, .cbi-tabmenu .active > a:hover, +.cbi-tab > a:link, .cbi-tab > a:hover { + color: #000000; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; + cursor: default; +} + +.tabs .menu-dropdown, .tabs .dropdown-menu, +.cbi-tabmenu .menu-dropdown, .cbi-tabmenu .dropdown-menu { + top: 35px; + border-width: 1px; + border-radius: 0 2px 2px 2px; +} + +.tabs a.menu:after, .tabs .dropdown-toggle:after, +.cbi-tabmenu a.menu:after, .cbi-tabmenu .dropdown-toggle:after { + border-top-color: #999; + margin-top: 15px; + margin-left: 5px; +} + +.tabs li.open.menu .menu, .tabs .open.dropdown .dropdown-toggle, +.cbi-tabmenu li.open.menu .menu, .cbi-tabmenu .open.dropdown .dropdown-toggle { + border-color: #999; +} + +.tabs li.open a.menu:after, .tabs .dropdown.open .dropdown-toggle:after, +.cbi-tabmenu li.open a.menu:after, .cbi-tabmenu .dropdown.open .dropdown-toggle:after { + border-top-color: #555; +} + +.tab-content > .tab-pane, +.tab-content > div { + display: none; +} + +.tab-content > .active { + display: block; +} + +.breadcrumb { + padding: 7px 14px; + margin: 0 0 18px; + background-color: #f5f5f5; + background-repeat: repeat-x; + border: 1px solid #ddd; + border-radius: 2px; + box-shadow: inset 0 1px 0 #fff; +} + +.breadcrumb li { + display: inline; +} + +.breadcrumb .divider { + padding: 0 5px; + color: #bfbfbf; +} + +.breadcrumb .active a { + color: #404040; +} + +footer { + margin-top: 30px; + padding-top: 20px; + padding-bottom: 20px; + border-top: 1px solid #404040; +} + +.btn.danger, +.alert-message.danger, +.btn.danger:hover, +.alert-message.danger:hover, +.btn.error, +.alert-message.error, +.btn.error:hover, +.alert-message.error:hover, +.btn.success, +.alert-message.success, +.btn.success:hover, +.alert-message.success:hover, +.btn.info, +.alert-message.info, +.btn.info:hover, +.alert-message.info:hover { + color: #fff; +} + +.btn .close, .alert-message .close { + font-family: Arial, sans-serif; + line-height: 18px; +} + +.btn.danger, +.alert-message.danger, +.btn.error, +.alert-message.error { + background: linear-gradient(to bottom, #ee5f5b, #c43c35) repeat-x; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} + +.btn.success, .alert-message.success { + background: linear-gradient(to bottom, #62c462, #57a957) repeat-x; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} + +.btn.info, .alert-message.info { + background: linear-gradient(to bottom, #5bc0de, #339bb9) repeat-x; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} + +.alert-message.notice { + background: linear-gradient(to bottom, #efefef, #fefefe) repeat-x; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} + +.btn, +.cbi-button { + cursor: pointer; + display: inline-block; + background: linear-gradient(#fff, #fff 25%, #e6e6e6) no-repeat; + padding: 5px 14px 6px; + color: #333; + font-size: 12px; + line-height: normal; + border: 1px solid #ccc; + border-bottom-color: #bbb; + border-radius: 2px; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn:focus, +.cbi-button:focus { + outline: 1px dotted #666; +} + +.cbi-input-invalid, +.cbi-value-error input { + color: #f00; + border-color: #f00; +} + +.cbi-button-positive, +.cbi-button-fieldadd, +.cbi-button-add, +.cbi-button-save { + border-color: #4a4; + color: #4a4; +} + +.cbi-button-neutral, +.cbi-button-download, +.cbi-button-find, +.cbi-button-link, +.cbi-button-up, +.cbi-button-down { + color: #444; +} + +.btn.primary, +.cbi-button-action, +.cbi-button-apply, +.cbi-button-reload, +.cbi-button-edit { + border-color: #4aa44b; + color: #4aa44b; +} + +.cbi-button-negative, +.cbi-section-remove .cbi-button, +.cbi-button-reset, +.cbi-button-remove { + border-color: #c44; + color: #c44; +} + +.cbi-page-actions::after { + display: table; + content: ""; + clear: both; +} + +.cbi-page-actions > :not([method="post"]):not(.cbi-button-apply):not(.cbi-button-save):not(.cbi-button-reset) { + float: left; + margin-right: .4em; +} + +.btn.primary, +.cbi-button-action.important, +.cbi-page-actions .cbi-button-apply, +.cbi-section-actions .cbi-button-edit { + color: #fff; + background: #4aa44b; +} + +.cbi-button-positive.important, +.cbi-page-actions .cbi-button-save { + color: #fff; + background: linear-gradient(to bottom, #4a4, #484) no-repeat; +} + +.cbi-button-negative.important { + color: #fff; + background: linear-gradient(to bottom, #c44, #c00) no-repeat; +} + +.cbi-page-actions .cbi-button-apply + .cbi-button-save { + background: linear-gradient(#fff, #fff 25%, #e6e6e6); + color: #4a4; +} + +.cbi-dropdown { + border: 1px solid #ccc; + border-radius: 2px; + display: inline-flex; + padding: 0; + cursor: pointer; + height: auto; + background: linear-gradient(#fff 0%, #e9e8e6 100%); + position: relative; + color: #404040; +} + +.cbi-dropdown:focus { + outline: 2px solid #4b6e9b; +} + +.cbi-dropdown > ul { + margin: 0 !important; + padding: 0; + list-style: none; + overflow-x: hidden; + overflow-y: auto; + display: flex; + width: 100%; +} + +.cbi-dropdown > ul.preview { + display: none; +} + +.cbi-dropdown > .open, +.cbi-dropdown > .more { + flex-grow: 0; + flex-shrink: 0; + display: flex; + flex-direction: column; + justify-content: center; + text-align: center; + line-height: 2em; + padding: 0 .25em; +} + +.cbi-dropdown > .more, +.cbi-dropdown > ul > li[placeholder] { + color: #777; + font-weight: bold; + display: none; +} + +.cbi-dropdown > ul > li { + display: none; + padding: .25em; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + flex-shrink: 1; + flex-grow: 1; + align-items: center; + align-self: center; + color: #404040; + min-height: 20px; +} + +.cbi-dropdown > ul > li .hide-open { display: block; display: initial; } +.cbi-dropdown > ul > li .hide-close { display: none; } + +.cbi-dropdown > ul > li[display]:not([display="0"]) { + border-left: 1px solid #ccc; +} + +.cbi-dropdown[empty] > ul { + max-width: 1px; +} + +.cbi-dropdown > ul > li > form { + display: none; + margin: 0; + padding: 0; + pointer-events: none; +} + +.cbi-dropdown > ul > li img { + vertical-align: middle; + margin-right: .25em; +} + +.cbi-dropdown > ul > li > form > input[type="checkbox"] { + margin: 0; +} + +.cbi-dropdown > ul > li input[type="text"] { + height: 20px; +} + +.cbi-dropdown[open] { + position: relative; +} + +.cbi-dropdown[open] > ul.dropdown { + display: block; + background: #f6f6f5; + border: 1px solid #918e8c; + box-shadow: 0 0 4px #918e8c; + position: absolute; + z-index: 1000; + max-width: none; + min-width: 100%; + width: auto; +} + +.cbi-dropdown > ul > li[display], +.cbi-dropdown[open] > ul.preview, +.cbi-dropdown[open] > ul.dropdown > li, +.cbi-dropdown[multiple] > ul > li > label, +.cbi-dropdown[multiple][open] > ul.dropdown > li, +.cbi-dropdown[multiple][more] > .more, +.cbi-dropdown[multiple][empty] > .more { + flex-grow: 1; + display: flex; +} + +.cbi-dropdown[empty] > ul > li, +.cbi-dropdown[optional][open] > ul.dropdown > li[placeholder], +.cbi-dropdown[multiple][open] > ul.dropdown > li > form { + display: block; +} + +.cbi-dropdown[open] > ul.dropdown > li .hide-open { display: none; } +.cbi-dropdown[open] > ul.dropdown > li .hide-close { display: block; display: initial; } + +.cbi-dropdown[open] > ul.dropdown > li { + border-bottom: 1px solid #ccc; +} + +.cbi-dropdown[open] > ul.dropdown > li[selected] { + background: #b0d0f0; +} + +.cbi-dropdown[open] > ul.dropdown > li.focus { + background: linear-gradient(90deg, #a3c2e8 0%, #84aad9 100%); +} + +.cbi-dropdown[open] > ul.dropdown > li:last-child { + margin-bottom: 0; + border-bottom: none; +} + +.cbi-dropdown[disabled] { + pointer-events: none; + opacity: .6; +} + +input[type="text"] + .cbi-button, +input[type="password"] + .cbi-button, +select + .cbi-button { + border-radius: 2px; + border-color: #ccc; + margin: 2px 0 2px 3px; + padding: 0 12px; + vertical-align: top; + height: 28px; + font-size: 13px; + font-weight: normal; + line-height: 28px; +} + +select + .cbi-button { + #border-left-color: transparent; +} + +.cbi-title-ref { + color: #f39800; +} + +.cbi-title-ref::after { + content: " ➙ "; +} + +.cbi-tooltip-container { + cursor: help; + padding: 5px 3px 5px 3px; +} + +.cbi-tooltip { + position: absolute; + z-index: 1000; + left: -1000px; + opacity: 0; + transition: opacity .25s ease-out; +} + +.cbi-tooltip-container:hover .cbi-tooltip:not(:empty) { + left: auto; + opacity: 1; + transition: opacity .25s ease-in; +} + +.zonebadge .cbi-tooltip { + padding: 1px; + background: inherit; + margin: -1.6em 0 0 -5px; + border-radius: 2px; + pointer-events: none; + box-shadow: 0 0 3px #444; +} + +.zonebadge .cbi-tooltip > * { + margin: 1px; +} + +.zone-forwards { + display: flex; + flex-wrap: wrap; +} + +.zone-forwards > * { + flex: 1 1 40%; + padding: 1px; +} + +.zone-forwards > span { + flex-basis: 10%; + text-align: center; +} + +.zone-forwards .zone-src, +.zone-forwards .zone-dest { + display: flex; + flex-direction: column; +} + +.btn.active, .btn:active { + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn.disabled { + cursor: default; + background-image: none; + opacity: 0.65; + box-shadow: none; +} + +.btn[disabled] { + cursor: default; + background-image: none; + opacity: 0.65; + box-shadow: none; +} + +.btn.large { + font-size: 15px; + line-height: normal; + padding: 9px 14px 9px; + border-radius: 2px; +} + +.btn.small { + padding: 7px 9px 7px; + font-size: 11px; +} + +button.btn::-moz-focus-inner, input[type=submit].btn::-moz-focus-inner { + padding: 0; + border: 0; +} + +.close { + float: right; + color: #000; + font-size: 20px; + font-weight: bold; + line-height: 13.5px; + opacity: 0.25; +} + +.close:hover { + color: #000; + text-decoration: none; + opacity: 0.4; +} + +.alert-message { + position: relative; + padding: 30px; + margin-top: 25px; + margin-bottom: 25px; + color: #404040; + background: #f0e68c; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + border-width: 1px; + border-style: solid; + border-radius: 2px; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); +} + +.alert-message .close { + margin-top: 1px; + *margin-top: 0; +} + +.alert-message a { + font-weight: bold; + color: #404040; +} + +.alert-message.danger p a, +.alert-message.error p a, +.alert-message.success p a, +.alert-message.info p a { + color: #fff; +} + +.alert-message h5 { + line-height: 18px; +} + +.alert-message p { + margin-bottom: 0; +} + +.alert-message div { + margin-top: 15px; + margin-bottom: 10px; + line-height: 28px; +} + +.label { + padding: 3px 3px 3px 3px; + font-size: 8px; + font-weight: normal; + color: #fff !important; + text-transform: uppercase; + white-space: nowrap; + background-color: #bfbfbf; + border-radius: 2px; + text-shadow: none; +} + +a.label:link, +a.label:visited { + color: #fff; +} + +a.label:hover { + text-decoration: none; +} + +.label.important { + background-color: #c43c35; +} + +.label.warning { + background-color: #f89406; +} + +.label.success { + background-color: #46a546; +} + +.label.notice { + background-color: #62cffc; +} + +/* LuCI specific items */ +.hidden { display: none } + +#memtotal > div, +#memfree > div, +#memcache > div, +#membuff > div, +#conns > div { + border: 1px solid #ccc; + border-radius: 2px 2px 2px 2px; + color: #808080; + display: inline-block; + font-size: 12px; + line-height: 18px; +} + +#xhr_poll_status { + cursor: pointer; +} + +form.inline { display: inline; margin-bottom: 0; } + +header .pull-right { padding-top: 21px; } + +#modemenu li:last-child span.divider { display: none } + +#syslog { width: 100%; } + +.cbi-section-table .tr:hover .td, +.cbi-section-table .tr:hover .th, +.cbi-section-table .tr:hover::before { + background-color: #f5f5f5; +} + +.cbi-section-table .tr.cbi-section-table-descr .th { + font-weight: normal; +} + +.cbi-section-table-titles.named::before, +.cbi-section-table-descr.named::before, +.cbi-section-table-row[data-title]::before { + content: attr(data-title) " "; + display: table-cell; + padding: 10px 10px 9px; + line-height: 18px; + font-weight: bold; + vertical-align: middle; +} + +.cbi-section-table-titles.named::before, +.cbi-section-table-descr.named::before, +.cbi-section-table-row[data-title]::before { + border-top: 1px solid #ddd; +} + +.left { text-align: left !important; } +.right { text-align: right !important; } +.center { text-align: center !important; } +.top { vertical-align: top !important; } +.middle { vertical-align: middle !important; } +.bottom { vertical-align: bottom !important; } + +.cbi-value-field { line-height: 1.5em; } + +.cbi-value-field input[type=checkbox], +.cbi-value-field input[type=radio] { + margin-top: 8px; + margin-right: 6px; +} + +table table td, +.cbi-value-field table td { + border: none; +} + +.table.cbi-section-table input[type="password"], +.table.cbi-section-table input[type="text"], +.table.cbi-section-table textarea, +.table.cbi-section-table select { + width: 100%; +} + +.table.cbi-section-table .td.cbi-section-table-cell { + white-space: nowrap; + text-align: right; +} + +.table.cbi-section-table .td.cbi-section-table-cell select { + width: inherit; +} + +.td.cbi-section-actions { + text-align: right; + vertical-align: middle; +} + +.td.cbi-section-actions > * { + display: flex; +} + +.td.cbi-section-actions > * > *, +.td.cbi-section-actions > * > form > * { + flex: 1 1 4em; + margin: 0 1px; +} + +.td.cbi-section-actions > * > form { + display: inline-flex; + margin: 0; +} + +.table.valign-middle .td { + vertical-align: middle; +} + +.cbi-rowstyle-2, +.tr.table-titles, +.tr.cbi-section-table-titles { + background: #f9f9f9; +} + +.cbi-value-description { + background-image: url(/luci-static/resources/cbi/help.gif); + background-position: .25em .2em; + background-repeat: no-repeat; + margin: 10px 0 10px -5px; + padding: 0 0 0 26px; +} + +.cbi-section-error { + border: 1px solid #f00; + border-radius: 2px; + background-color: #fce6e6; + padding: 5px; + margin-bottom: 18px; +} + +.cbi-section-error ul { margin: 0 0 0 20px; } + +.cbi-section-error ul li { + color: #f00; + font-weight: bold; +} + +.ifacebox { + background-color: #fff; + border: 1px solid #ccc; + margin: 6px 4px; + text-align: center; + white-space: nowrap; + background-image: linear-gradient(#fff, #fff 25%, #f9f9f9); + border-radius: 2px; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + display: inline-flex; + flex-direction: column; + line-height: 1.2em; + min-width: 100px; +} + +.ifacebox .ifacebox-head { + border-bottom: 1px solid #ccc; + padding: 10px; + line-height: 1.2em; + background: #eee; +} + +.ifacebox .ifacebox-head.active { + background: #f0e68c; +} + +.ifacebox .ifacebox-body { + padding: .25em; +} + +.ifacebadge { + display: inline-block; + flex-direction: row; + white-space: nowrap; + background-color: #fff; + border: 1px solid #ccc; + padding: 5px 5px 3px 5px; + background-image: linear-gradient(#fff, #fff 25%, #f9f9f9); + border-radius: 2px; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + cursor: default; + line-height: 1.2em; +} + +.ifacebadge img { + width: 16px; + height: 16px; + vertical-align: middle; +} + +.ifacebadge-active { + border-color: #000; + font-weight: bold; +} + +.network-status-table { + display: flex; + flex-wrap: wrap; +} + +.network-status-table .ifacebox { + margin: 10px 10px 15px 2px; + flex-grow: 1; +} + +.network-status-table .ifacebox-body { + display: flex; + flex-direction: column; + height: 100%; + text-align: left; + padding: 8px; +} + +.network-status-table .ifacebox-body > * { + margin: .25em; +} + +.network-status-table .ifacebox-body > span { + flex: 10 10 auto; + height: 100%; +} + +.network-status-table .ifacebox-body > div { + display: flex; + flex-wrap: wrap; + margin: -.125em; +} + +#dsl_status_table .ifacebox-body > span > strong { + display: inline-block; + min-width: 35%; +} + +.ifacebadge.large, +.network-status-table .ifacebox-body .ifacebadge { + display: inline-flex; + flex: 1; + padding: 10px 4px 10px 4px; + min-width: 220px; + margin: 10px 6px 4px 4px; +} + +.ifacebadge > *, +.ifacebadge.large > * { + margin: 0 .125em; +} + +.zonebadge { + padding: 2px; + border-radius: 2px; + display: inline-block; + white-space: nowrap; + color: #666; +} + +.zonebadge > em, +.zonebadge > strong { + margin: 0 2px; + display: inline-block; +} + +.zonebadge input { + width: 6em; +} + +.zonebadge > .ifacebadge { + margin-left: 2px; +} + +.zonebadge-empty { + border: 1px dashed #aaa; + color: #aaa; + font-style: italic; + font-size: smaller; +} + +div.cbi-value var, +.td.cbi-value-field var { + font-style: italic; + color: #215e21; +} + +.uci-change-list { + line-height: 170%; + white-space: pre; +} + +.uci-change-list del, +.uci-change-list ins, +.uci-change-list var, +.uci-change-legend-label del, +.uci-change-legend-label ins, +.uci-change-legend-label var { + text-decoration: none; + font-family: monospace; + font-style: normal; + border: 1px solid #ccc; + background: #eee; + padding: 2px; + display: block; + line-height: 15px; + margin-bottom: 1px; +} + +.uci-change-list ins, +.uci-change-legend-label ins { + border-color: #0f0; + background: #cfc; +} + +.uci-change-list del, +.uci-change-legend-label del { + border-color: #f00; + background: #fcc; +} + +.uci-change-list var, +.uci-change-legend-label var { + border-color: #ccc; + background: #eee; +} + +.uci-change-list var ins, +.uci-change-list var del { + display: inline-block; + border: none; + width: 100%; + padding: 0; +} + +.uci-change-legend { + padding: 5px; +} + +.uci-change-legend-label { + width: 150px; + float: left; +} + +.uci-change-legend-label > ins, +.uci-change-legend-label > del, +.uci-change-legend-label > var { + float: left; + margin-right: 4px; + width: 10px; + height: 10px; + display: block; + position: relative; +} + +.uci-change-legend-label var ins, +.uci-change-legend-label var del { + border: none; + position: absolute; + top: 2px; + left: 2px; + right: 2px; + bottom: 2px; +} + +html body.apply-overlay-active { + height: calc(100vh - 63px); +} + +#applyreboot-section { + line-height: 300%; +} + +.login{ + text-align: center; + background-color: #fff; + border-radius: 20px; + width: 300px; + height: 350px; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%,-50%); +} diff --git a/luci-theme-ezengreen/htdocs/luci-static/ezengreen/ezenlink.png b/luci-theme-ezengreen/htdocs/luci-static/ezengreen/ezenlink.png new file mode 100755 index 0000000000000000000000000000000000000000..070a12b7da56ad334a98ffb87ca1a382af985ca4 GIT binary patch literal 553 zcmV+^0@nSBP)5Rm*L{Kop!rxswj!voA{raViK6tZ*v8R6tTepaO_o zK%jz<3ScijlMX@!jz*fb7UN%5LM!a|X5Y-td%h{l5<`};@jZaZ<;8JG{Ov%{2>=2f zjE$E=aylzEHXZ{Y&?A5!fj0+a};rI%Z*jv2iL{ zMgq8CqI=*$2EfYY1rNJ&#m0k@fwA!kz*?8~dk$t1{z70E8s|4@}f?f1JGsh-A*IZ+iaOa7=K r8C)FHmOJQUD(bA18eYuZ#s%OHNQeZcR0cH!00000NkvXXu0mjf(L3<` literal 0 HcmV?d00001 diff --git a/luci-theme-ezengreen/htdocs/luci-static/ezengreen/favicon.ico b/luci-theme-ezengreen/htdocs/luci-static/ezengreen/favicon.ico new file mode 100755 index 0000000000000000000000000000000000000000..dd14062c9b9520f0de40f938a7cfa0ecc0edc154 GIT binary patch literal 4286 zcmeHHJ5Iwu5M3%tvJDcVz;u*8f+a4HirPo;4cI_I3Zw{$CRJKGAHg+Mj$mq<$Q=ce zdC!`0R+i(~2|^TJ^jObl=gqveW6TNug23>Zj8AB;4%?Ff3*-B*Qmg#!2eR< z;`K8IBJHZhPFmtq&A*#phCl?=U%1$Tms7_P3xJq0)&)x95L~^=?%Qz7N%1V5ct3Q9IyS=|P{_Q}6eY=TUFv z)zsRt#1<0E#nyMRvgz~JA@iet?(uVey@%NISKq6b>wI2)K7?P->JAQS?mX@lW1f$9 zQ~y@zIqu+}01k-7?z|7?uoe&rsJE|&a)v-au18Vx?>;EajH$xWNFbst{M z>B*mJZR~uGfl6QO2~cyZU+eGN!5;uQkTJK}&#v>}nF1N0daQ?Xx7BXrM_t~%6L5Z= zSGgDPwZ3m{99_O0{7pXPU4b{~sy8$SetsV*Q2n;@JUDpA8NfNILo~GRm_I5oDljVW z*9w#!Yq@-Wx7N(JnB)1wyx5s7>;v$1U08QpTK81i*=cFN&&tAG0rzF`*im^K`T>j! BrMdtB literal 0 HcmV?d00001 diff --git a/luci-theme-ezengreen/htdocs/luci-static/ezengreen/footer.png b/luci-theme-ezengreen/htdocs/luci-static/ezengreen/footer.png new file mode 100755 index 0000000000000000000000000000000000000000..c7e2e393ac0c035c9a41f7e9d095bd11c4099971 GIT binary patch literal 836 zcmV-K1H1f*P)s+)P~w1iKdod zscmgBclR0#Sg?&vEJUVn^1i)(IdXxJpLs9u?q+vpXJ@`|cJpR99AZ)8d^j>!S(>!f zrSoAMz#c#E;xkK=yLpygSn$q=&j5D$d6lKfCG{HsS^(BcOm6|)WNGqe)-~VG74f)y zkS~3I0MMIaw*}zP`EcfZ*qLR)cXI^$BFWO^5kS-Vu*vyWi7Ej5u8NNeH(}K~&(fs3 zl;E8Yw&+fT#tS!*V_p2%Mz#sJ3f1Pj<$Sn!4oWj)o`Ihb!<|S@=R*@fjnnS4G--*= zdx26vOOq!say}f8)XI&kX$g8w=0C~;bpY*W=9@GXBF={aE07a4OOv0@hYo;-%-wZ9 zJlfbKr;8-)L}8^i3S(;pqHc2oJ$9yhnY$myR~|fxcWMw|P(>md)*H@;V}q9woRHIb zU&)U#nF}X{HEv>5Rc_!`#t-nn z1F1gmJfq;vf%Bm~>)qld!tT+|(!_}WjTs)$)L?ncLkvplLYDQU9S>ek%)^+8WeACC zfi$EQRtj0}ObAr3&hZq_gV!T@ebI4SMeX>Hm6cW)E1(s>k@roR-xYsVtcb8pc9MNo zHvVC;fUY@hO$e%oQ$^nOoLOIb@XS!Hpsov+HPF$;t#D~m2>&hmUv}opAQ&?`%c=cj zZVY}P&pzM#1$`9FK(|CcdgmQpZNV$?r2npJA8pDYG#0#FoGjSWST;U$eKg3@#0X{W z&K&2b9q--NDeR7~EzfLYpSI_j*jVQ=KR*f^I;Z}-=**|->`%%a0Q>{Ia7QjydhGlF O0000 ul, .nav { + display: block; + float: left; + margin: 7px 8px 0 8px; + position: relative; + left: 0; +} + +header div > ul a, .nav a { + display: block; + float: left; + padding: 12px 6px 12px 6px; + line-height: 14px; + letter-spacing: 0.2px; +} + +.menu-dropdown, .dropdown-menu { + top: 38px; + min-width: 180px; + max-width: 260px; +} + +@media screen and (max-device-width: 660px) { + #maincontent.container { + width: 98%; + margin: 30px 0 0 6px; + } +} + +@media screen and (max-device-width: 360px) { + #maincontent.container { + width: 96%; + margin: 30px 0 0 6px; + } +} + +@media screen and (max-device-width: 200px) { + #maincontent.container { + width: 94%; + margin: 40px 0 0 2px; + } +} diff --git a/luci-theme-ezengreen/htdocs/luci-static/ezengreen/outdoorrouter.png b/luci-theme-ezengreen/htdocs/luci-static/ezengreen/outdoorrouter.png new file mode 100755 index 0000000000000000000000000000000000000000..eddd6fafc97aa5e1335be1e9673bd2744df721ca GIT binary patch literal 1353 zcmV-P1-AN$P)jV4QdPygHcHhKUX``hBV)c zf;JJ|IF_7ay|MY5gt59o+qQiHl|A&Q@X=|tGacK5UKG4o8<55BiD<-E(Exuba`6H! zFQ9B^@a}(J6b!v65TjrlR#s4dzw!GmB6{?qU|a;aWd*fKM7IFfT=NaqIRUurxd+>N zxUbt#l?G|}Y+W-zf!w_EFgJ){SpEbNFXkvqMThW}F29)g* z^66cSK}y1yJ@y!!tQkM^)22zR=0=BG@N(B^F5yZY2Aq+Su;li=j7<`<` z$_i>;V=sJgiTxyunFdZ3z01IkvTE6~f_lB-_l(%@O8_w)fb%6_>!69XR!UHlFzzB; zuW*^_>Tkv+E)mizUJLGQD&K3d)LOUrMu}=Rs2M@cJTt0xraSLpB3xH2CH9-(Rn6)E zwh0eSug&8ZN_%mkcU{FnZchcEW89G2b&s<_ZKs0XWk@{3B#arW25|Yg&mCSn zvVn3nZd~44+J*`eMjC|ix@w9$Q1HmH(CDs!Fa0!Mf?sci;^2fgK`IJLnf*~w-GS51 z^*}^_yeOD>QP9&gB|vb=CaE`}^((|&@)0YlLx8*hSDLT}*h_&1CQ8z3Nt^ePD=H4> zpI#J*-6jB=hc7j6UCA+@p`xlgg#JiT1t+!|fVWC#V{TAqgIb&Wovb^dNB7cDQGG|P zewwPPTzXWi``gO*Brlc(e?`k~`)sI$j+9WXE6GdKoJ*k%fTeYpHp+y* zCfo~q;h;!^*!Pu;-L=CNU`gC66*?<#%-E+HAHAQ-k@jqjX%Q$LO-rS#)I1VBwN%EL z*^2_MjuKo?N>k)TkwQ`ul0dBp9e)YbCH^iQr~vQ5YU|a}6j{m6kWF?|zn=;n)@$d|KQUnJJhch;j=m5?MwgigGLI6 z^AD`e8^>L$W9`@)<2;AwE}mC9V#Yi^noiG?k{2rs^RB`2? + Copyright 2008 Jo-Philipp Wich + Copyright 2012 David Menting + Licensed to the public under the Apache License 2.0. +-%> + +<% + local ver = require "luci.version" + local disp = require "luci.dispatcher" + local request = disp.context.path + local category = request[1] + local tree = disp.node() + local categories = disp.node_childs(tree) +%> + + + + + diff --git a/luci-theme-ezengreen/luasrc/view/themes/ezengreen/header.htm b/luci-theme-ezengreen/luasrc/view/themes/ezengreen/header.htm new file mode 100644 index 000000000..4b5875d75 --- /dev/null +++ b/luci-theme-ezengreen/luasrc/view/themes/ezengreen/header.htm @@ -0,0 +1,206 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008-2016 Jo-Philipp Wich + Copyright 2012 David Menting + Licensed to the public under the Apache License 2.0. +-%> + +<% + local sys = require "luci.sys" + local util = require "luci.util" + local http = require "luci.http" + local disp = require "luci.dispatcher" + + local boardinfo = util.ubus("system", "board") + + local request = disp.context.path + local request2 = disp.context.request + + local category = request[1] + local cattree = category and disp.node(category) + + local leaf = request2[#request2] + + local tree = disp.node() + local node = disp.context.dispatched + + local categories = disp.node_childs(tree) + + local c = tree + local i, r + + -- tag all nodes leading to this page + for i, r in ipairs(request) do + if c.nodes and c.nodes[r] then + c = c.nodes[r] + c._menu_selected = true + end + end + + -- send as HTML5 + http.prepare_content("text/html") + + local function nodeurl(prefix, name, query) + local u = url(prefix, name) + if query then + u = u .. http.build_querystring(query) + end + return pcdata(u) + end + + local function render_tabmenu(prefix, node, level) + if not level then + level = 1 + end + + local childs = disp.node_childs(node) + if #childs > 0 then + if level > 2 then + write('
    ') + end + + local selected_node + local selected_name + local i, v + + for i, v in ipairs(childs) do + local nnode = node.nodes[v] + if nnode._menu_selected then + selected_node = nnode + selected_name = v + end + + if level > 2 then + write('
  • %s
  • ' %{ + v, (nnode._menu_selected or (node.leaf and v == leaf)) and 'active' or '', + nodeurl(prefix, v, nnode.query), + striptags(translate(nnode.title)) + }) + end + end + + if level > 2 then + write('
') + end + + if selected_node then + render_tabmenu(prefix .. "/" .. selected_name, selected_node, level + 1) + end + end + end + + local function render_submenu(prefix, node) + local childs = disp.node_childs(node) + if #childs > 0 then + write('') + end + end + + local function render_topmenu() + local childs = disp.node_childs(cattree) + if #childs > 0 then + write('') + end + end + + local function render_changes() + -- calculate the number of unsaved changes + if tree.nodes[category] and tree.nodes[category].ucidata then + local ucichanges = 0 + + local i, j + for i, j in pairs(require("luci.model.uci").cursor():changes()) do + ucichanges = ucichanges + #j + end + + if ucichanges > 0 then + write('%s: %d' %{ + url(category, 'uci/changes'), + http.urlencode(http.formvalue('redir') or table.concat(disp.context.request, "/")), + translate('Unsaved Changes'), + ucichanges + }) + end + end + end +-%> + + + + + <%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - LuCI + + + + + <% if node and node.css then %> + + <% end -%> + <% if css then %> + + <% end -%> + + + + + +
+
+
+ <%=boardinfo.hostname or "?"%> + <% render_topmenu() %> +
+ +
+
+
+
+ +
+ <%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%> +
+

<%:No password set!%>

+

<%:You are using the default router password. Please custom your router password to protect the web interface and enable SSH.%>

+ +
+ <%- end -%> + + + + <% if category then render_tabmenu(category, cattree) end %> diff --git a/luci-theme-ezengreen/root/etc/uci-defaults/30_luci-theme-ezengreen b/luci-theme-ezengreen/root/etc/uci-defaults/30_luci-theme-ezengreen new file mode 100755 index 000000000..ad238fc36 --- /dev/null +++ b/luci-theme-ezengreen/root/etc/uci-defaults/30_luci-theme-ezengreen @@ -0,0 +1,7 @@ +#!/bin/sh +uci batch <<-EOF + set luci.themes.Ezengreen=/luci-static/ezengreen + set luci.main.mediaurlbase=/luci-static/ezengreen + commit luci +EOF +exit 0 diff --git a/luci-theme-lamatel/Makefile b/luci-theme-lamatel/Makefile new file mode 100644 index 000000000..530c15e06 --- /dev/null +++ b/luci-theme-lamatel/Makefile @@ -0,0 +1,16 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Lamatel Theme +LUCI_DEPENDS:= + +PKG_LICENSE:=Apache-2.0 + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-theme-lamatel/htdocs/luci-static/lamatel/cascade.css b/luci-theme-lamatel/htdocs/luci-static/lamatel/cascade.css new file mode 100755 index 000000000..26bc66806 --- /dev/null +++ b/luci-theme-lamatel/htdocs/luci-static/lamatel/cascade.css @@ -0,0 +1,2022 @@ +/*! + * LuCI Bootstrap Theme + * Copyright 2012 Nut & Bolt + * By David Menting + * Based on Bootstrap v1.4.0 + * + * Copyright 2011 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */ +/* Reset.less + * Props to Eric Meyer (meyerweb.com) for his CSS reset file. We're using an adapted version here that cuts out some of the reset HTML elements we will never need here (i.e., dfn, samp, etc). + * ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ +html { + margin: 0; + padding: 0; +} + +body { + margin: 0; + padding: 5px; +} + +h1, h2, h3, h4, h5, h6, p, pre, a, abbr, acronym, code, del, em, img, ins, q, s, +small, strike, strong, sub, sup, tt, var, dd, dl, dt, li, ol, ul, fieldset, +form, label, legend, button, table, caption, tbody, tfoot, thead, tr, th, td, +.table, .tbody, .tfoot, .thead, .tr, .th, .td { + margin: 0; + padding: 0; + border: 0; + font-weight: normal; + font-style: normal; + font-size: 100%; + line-height: 1; + font-family: inherit; +} + +abbr[title], acronym[title] { + border-bottom: 1px dotted; + font-weight: inherit; + cursor: help; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +ol, ul { + list-style: none; +} + +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} + +html { + overflow-y: scroll; + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +a:focus { + outline: thin dotted; +} + +a:hover, a:active { + outline: 0; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +nav, +section { + display: block; +} + +sub, sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + border: 0; + -ms-interpolation-mode: bicubic; +} + +button, +input, +select, +option, +textarea { + font-size: 100%; + margin: 0; + box-sizing: border-box; + vertical-align: baseline; + *vertical-align: middle; +} + +button, input { + line-height: normal; + *overflow: visible; +} + +button::-moz-focus-inner, input::-moz-focus-inner { + border: 0; + padding: 0; +} + +button, +input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} + +button[disabled], +input[type="button"][disabled], +input[type="reset"][disabled], +input[type="submit"][disabled] { + opacity: 0.7; +} + +input[type="search"] { + -webkit-appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +/* + * Scaffolding + * Basic and global styles for generating a grid system, structural layout, and page templates + * ------------------------------------------------------------------------------------------- */ +body { + background-color: #fff; + margin: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 12px; + font-weight: normal; + line-height: 18px; + color: #404040; + padding-top: 75px; +} + +.container { + width: 100%; + max-width: 940px; + margin-left: auto; + margin-right: auto; + zoom: 1; +} + +.container:before, .container:after { + display: table; + content: ""; + zoom: 1; +} + +.container:after { + clear: both; +} + +a { + color: #f6943e; + text-decoration: none; + line-height: inherit; + font-weight: inherit; +} + +a:hover { + color: #000000; + text-decoration: none; +} + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +/* Typography.less + * Headings, body text, lists, code, and more for a versatile and durable typography system + * ---------------------------------------------------------------------------------------- */ +p, +.cbi-map-descr, +.cbi-section-descr, +.table .tr.cbi-section-table-descr .th { + font-size: 12px; + font-weight: normal; + line-height: 18px; + margin-bottom: 9px; +} + +p small { + font-size: 11px; + color: #bfbfbf; +} + +h1, +h2, +h3, legend, +h4, +h5, +h6 { + font-weight: normal; + color: #404040; +} + +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small { + color: #bfbfbf; +} + +h1 { + margin-bottom: 18px; + font-size: 30px; + line-height: 36px; +} + +h1 small { + font-size: 18px; +} + +h2 { + font-size: 24px; + line-height: 58px; + text-transform: uppercase; + font-weight: normal; +} + +h2 small { + font-size: 14px; +} + +h3, legend, +h4, +h5, +h6 { + line-height: 48px; +} + +h3, legend { + font-size: 18px; +} + +h3 small { + font-size: 14px; +} + +h4 { + font-size: 16px; +} + +h4 small { + font-size: 12px; +} + +h5 { + font-size: 14px; +} + +h6 { + font-size: 13px; + color: #bfbfbf; + text-transform: uppercase; +} + +ul, ol { + margin: 0 0 18px 25px; +} + +ul ul, +ul ol, +ol ol, +ol ul { + margin-bottom: 0; +} + +ul { + list-style: disc; +} + +ol { + list-style: decimal; +} + +li { + line-height: 18px; + color: #808080; +} + +ul.unstyled { + list-style: none; + margin-left: 0; +} + +dl { + margin-bottom: 18px; +} + +dl dt, dl dd { + line-height: 18px; +} + +dl dt { + font-weight: bold; +} + +dl dd { + margin-left: 9px; +} + +hr { + margin: 20px 0 19px; + border: 0; + border-bottom: 1px solid #eee; +} + +strong { + font-style: inherit; + font-weight: bold; +} + +em { + font-style: italic; + font-weight: inherit; + line-height: inherit; +} + +small { font-size: 0.9em } + +address { + display: block; + line-height: 18px; + margin-bottom: 18px; +} + +code, pre { + padding: 0 3px 2px; + font-family: Monaco, Andale Mono, Courier New, monospace; + font-size: 12px; + border-radius: 2px; +} + +code { + background-color: #fee9cc; + color: rgba(0, 0, 0, 0.75); + padding: 1px 3px; +} + +pre { + background-color: #f5f5f5; + display: block; + padding: 8.5px; + margin: 0 0 18px; + line-height: 18px; + font-size: 12px; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 2px; + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} + +/* Forms.less + * Base styles for various input types, form layouts, and states + * ------------------------------------------------------------- */ +form { + margin-bottom: 18px; +} + +fieldset { + margin-bottom: 9px; + padding-top: 9px; +} + +fieldset legend { + display: block; + font-size: 19.5px; + line-height: 1; + color: #404040; + padding-top: 20px; + *padding: 0 0 5px 0px; + /* IE6-7 */ + + *line-height: 1.5; + /* IE6-7 */ + +} +form .cbi-tab-descr { + line-height: 18px; + margin-bottom: 18px; +} + +form .clearfix, +form .cbi-value { + margin-bottom: 15px; + margin-top: 15px; + zoom: 1; +} + +form .clearfix:before, form .clearfix:after, +form .cbi-value:before, form .cbi-value:after { + display: table; + content: ""; + zoom: 1; +} + +form .clearfix:after, +form .cbi-value:after { + clear: both; +} + +label, +input, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 12px; + font-weight: normal; + line-height: normal; +} + +form .input, +form .cbi-value-field { + margin-left: 120px; +} + +form .cbi-value label.cbi-value-title { + padding-top: 6px; + font-size: 12px; + line-height: 18px; + float: left; + width: 111px; + text-align: left; + color: #404040; +} + +input[type=checkbox], input[type=radio] { + cursor: pointer; +} + +input, +textarea, +select, +.cbi-dropdown, +.uneditable-input { + display: inline-block; + width: 200px; + height: 30px; + padding: 4px; + font-size: 12px; + line-height: 18px; + color: #808080; + border: 1px solid #ccc; + border-radius: 2px; + box-sizing: border-box; + margin: 2px 0; +} + +.cbi-dropdown { + min-width: 210px; + max-width: 400px; + width: auto; +} + +select { + padding: initial; + background: #fff; + box-shadow: inset 0 -1px 3px rgba(0, 0, 0, 0.1); +} + +input[type=checkbox], input[type=radio] { + width: auto; + height: auto; + padding: 0; + margin: 3px 0; + *margin-top: 0; + /* IE6-7 */ + + line-height: normal; + border: none; +} + +input[type=file] { + background-color: #fff; + padding: initial; + border: initial; + line-height: initial; + box-shadow: none; + width: auto !important; +} + +input[type=button], input[type=reset], input[type=submit] { + width: auto; + height: auto; +} + +select, input[type=file] { + *height: auto; + *margin-top: 4px; + /* For IE7, add top margin to align select with labels */ +} + +select[multiple] { + height: inherit; + background-color: #fff; +} + +textarea { + height: auto; +} + +.td > input[type=text], +.td > input[type=password], +.td > select, +.td > .cbi-dropdown { + width: 100%; +} + +.uneditable-input { + background-color: #fff; + display: block; + border-color: #eee; + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + cursor: not-allowed; +} + +::-moz-placeholder { + color: #bfbfbf; +} + +::-webkit-input-placeholder { + color: #bfbfbf; +} + +.btn, .cbi-button, input, textarea { + transition: border linear 0.2s, box-shadow linear 0.2s; + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); + padding: 12px 6px; +} + +.btn:hover, .cbi-button:hover, +input:focus, textarea:focus { + outline: 0; + border-color: rgba(82, 168, 236, 0.8) !important; + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); + text-decoration: none; +} + +input[type=file]:focus, input[type=checkbox]:focus, select:focus { + box-shadow: none; + outline: 1px dotted #666; +} + +input[disabled], +select[disabled], +textarea[disabled], +input[readonly], +select[readonly], +textarea[readonly] { + background-color: #194119; + border-color: #ccc; + padding: 5px; + pointer-events: none; + cursor: default; +} + +select[readonly], +textarea[readonly] { + pointer-events: auto; + cursor: auto; +} + +.cbi-optionals, +.cbi-section-create { + padding: 0 0 10px 10px; +} + +.cbi-section-create { + margin: 10px 0 0 -10px; + display: inline-flex; + align-items: center; +} + +.cbi-section-create > * { + margin: 3px; + flex: 1 1 auto; +} + +.cbi-section-create > * > input { + width: 100%; +} + +.actions, +.cbi-page-actions { + background: #f5f5f5; + margin-bottom: 20px; + margin-top: 40px; + padding: 15px 20px 15px 20px; + border-radius: 0 0 2px 2px; + text-align: right; +} + +.actions .secondary-action, +.cbi-page-actions .secondary-action{ + float: right; +} + +.actions .secondary-action a, +.cbi-page-actions .secondary-action a { + line-height: 30px; +} + +.actions .secondary-action a:hover, +.cbi-page-actions .secondary-action a:hover { + text-decoration: none; +} + +.cbi-page-actions > form { + display: inline; + margin: 0; +} + +.help-inline, .help-block { + font-size: 12px; + line-height: 18px; + color: #bfbfbf; +} + +.help-inline { + padding-left: 5px; + *position: relative; + /* IE6-7 */ + + *top: -5px; + /* IE6-7 */ + +} + +.help-block { + display: block; + max-width: 600px; +} + +/* + * Tables.less + * Tables for, you guessed it, tabular data + * ---------------------------------------- */ +.tr { display: table-row; } +.table[width="33%"], .th[width="33%"], .td[width="33%"] { width: 33%; } +.table[width="100%"], .th[width="100%"], .td[width="100%"] { width: 100%; } + +.table { + display: table; + width: 100%; + margin: 12px 0 24px 0; + padding: 0; + font-size: 12px; + border-collapse: collapse; + position: relative; +} + +.table .th, .table .td { + display: table-cell; + vertical-align: middle; /* Fixme */ + padding: 6px 6px 6px 2px; + line-height: 18px; + text-align: left; +} + +.table .tr:first-child .th { + padding-top: 9px; + font-weight: normal; + vertical-align: top; +} + +.table .td, .table .th { + border-top: 1px solid #e7e7e7; +} + +.tr.placeholder { + height: calc(3em + 20px); +} + +.tr.placeholder > .td { + position: absolute; + left: 0; + right: 0; + bottom: 0; + text-align: center; + line-height: 3em; +} + +/* Patterns.less + * Repeatable UI elements outside the base styles provided from the scaffolding + * ---------------------------------------------------------------------------- */ +header { + height: 40px; + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 10000; + overflow: visible; + color: #BFBFBF; +} + +header a { + color: #3f3f45; +} + +header h3 a:hover, header .brand:hover, header ul .active > a { + background-color: #fff; + text-decoration: none; +} + +header h3 { + position: relative; +} + +header h3 a, header .brand { + float: left; + display: block; + padding: 16px 20px 16px; + margin-left: -20px; + color: #3f3f45; + font-size: 24px; + font-weight: 440; + line-height: 1; +} + +header p { + margin: 0; + line-height: 40px; +} + +header .fill { + background-color: #e5e5e6; + background-repeat: repeat-x; + box-shadow: 0 2px 3px rgba(0, 0, 0, 0.1), inset 0 -1px 0 rgba(0, 0, 0, 0.05); + padding: 0 5px; +} + +header div > ul, .nav { + display: block; + float: left; + margin: 0 10px 0 20px; + position: relative; + left: 0; +} + +header div > ul > li, .nav > li { + display: block; + float: left; +} + +header div > ul a, .nav a { + display: block; + float: none; + padding: 22px 12px 14px 12px; + line-height: 19px; + letter-spacing: 0.4px; + text-decoration: none; + text-transform: uppercase; +} + +header div > ul a:hover, .nav a:hover { + text-decoration: none; +} + +header div > ul .active > a, .nav .active > a { + background-color: #fff; +} + +header div > ul.secondary-nav, .nav.secondary-nav { + float: right; + margin-left: 10px; + margin-right: 0; +} + +header div > ul.secondary-nav .menu-dropdown, +.nav.secondary-nav .menu-dropdown, +header div > ul.secondary-nav .dropdown-menu, +.nav.secondary-nav .dropdown-menu { + right: 0; + border: 0; +} + +header div > ul a.menu:hover, +.nav a.menu:hover, +header div > ul li.open .menu, +.nav li.open .menu, +header div > ul .dropdown-toggle:hover, +.nav .dropdown-toggle:hover, +header div > ul .dropdown.open .dropdown-toggle, +.nav .dropdown.open .dropdown-toggle { + background: #fff; +} + +header div > ul .menu-dropdown, +.nav .menu-dropdown, +header div > ul .dropdown-menu, +.nav .dropdown-menu { + background-color: #bebec0; +} + +header div > ul .menu-dropdown a.menu, +.nav .menu-dropdown a.menu, +header div > ul .dropdown-menu a.menu, +.nav .dropdown-menu a.menu, +header div > ul .menu-dropdown .dropdown-toggle, +.nav .menu-dropdown .dropdown-toggle, +header div > ul .dropdown-menu .dropdown-toggle, +.nav .dropdown-menu .dropdown-toggle { + color: #fff; +} + +header div > ul .menu-dropdown a.menu.open, +.nav .menu-dropdown a.menu.open, +header div > ul .dropdown-menu a.menu.open, +.nav .dropdown-menu a.menu.open, +header div > ul .menu-dropdown .dropdown-toggle.open, +.nav .menu-dropdown .dropdown-toggle.open, +header div > ul .dropdown-menu .dropdown-toggle.open, +.nav .dropdown-menu .dropdown-toggle.open { + background: #444; + background: rgba(255, 255, 255, 0.05); +} + +header div > ul .menu-dropdown li a, +.nav .menu-dropdown li a, +header div > ul .dropdown-menu li a, +.nav .dropdown-menu li a { + color: #3f3f45; +} + +header div > ul .menu-dropdown li a:hover, +.nav .menu-dropdown li a:hover, +header div > ul .dropdown-menu li a:hover, +.nav .dropdown-menu li a:hover { + background-color: #e5e5e6; + background-repeat: repeat-x; + color: #3f3f45; +} + +header div > ul .menu-dropdown .active a, +.nav .menu-dropdown .active a, +header div > ul .dropdown-menu .active a, +.nav .dropdown-menu .active a { + color: #fff; +} + +header div > ul .menu-dropdown .divider, +.nav .menu-dropdown .divider, +header div > ul .dropdown-menu .divider, +.nav .dropdown-menu .divider { + background-color: #222; + border-color: #444; +} + +header ul .menu-dropdown li a, header ul .dropdown-menu li a { + padding: 6px 12px; +} + +li.menu, .dropdown { + position: relative; +} + +.menu-dropdown, .dropdown-menu { + background-color: #fff; + float: left; + position: absolute; + top: 55px; + left: -9999px; + z-index: 900; + min-width: 200px; + max-width: 300px; + _width: 160px; + margin-left: 0; + margin-right: 0; + padding: 6px 0; + zoom: 1; + border-radius: 0 0 2px 2px; + background-clip: padding-box; +} + +.menu-dropdown li, .dropdown-menu li { + float: none; + display: block; + background-color: transparent; +} + +.menu-dropdown .divider, .dropdown-menu .divider { + height: 1px; + margin: 5px 0; + overflow: hidden; + background-color: #eee; + border-bottom: 1px solid #fff; +} + +header .dropdown-menu a, .dropdown-menu a { + display: block; + padding: 4px 15px; + clear: both; + font-weight: normal; + line-height: 18px; + text-transform: capitalize; + letter-spacing: 0.2px; + color: #808080; + zoom: 1.1; +} + +header .dropdown-menu a:hover, +.dropdown-menu a:hover, +header .dropdown-menu a.hover, +.dropdown-menu a.hover { + background-color: #ddd; + background-repeat: repeat-x; + color: #404040; + text-decoration: none; + box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0), inset 0 1px rgba(0, 0, 0, 0); +} + +.open .menu, +.dropdown.open .menu, +.open .dropdown-toggle, +.dropdown.open .dropdown-toggle { + color: #fff; + background: #ccc; + background: rgba(0, 0, 0, 0.3); +} + +.open .menu-dropdown, +.dropdown.open .menu-dropdown, +.open .dropdown-menu, +.dropdown.open .dropdown-menu { + left: 0; +} + +.dropdown:hover ul.dropdown-menu { + left: 0; +} + +.dropdown-menu .dropdown-menu { + position: absolute; + left: 159px; +} + +.dropdown-menu li { + position: relative; +} + +.tabs, .cbi-tabmenu { + margin: 0 0 18px; + padding: 0; + list-style: none; + zoom: 1; +} + +.tabs:before, +.cbi-tabmenu:before, +.tabs:after, +.cbi-tabmenu:after { + display: table; + content: ""; + zoom: 1; +} + +.tabs:after, .cbi-tabmenu:after { + clear: both; +} + +.tabs > li, .cbi-tabmenu > li { + float: left; +} + +.tabs > li > a, .cbi-tabmenu > li > a { + display: block; +} + +.tabs, +.cbi-tabmenu { + border-color: #ddd; + border-style: solid; + border-width: 0 0 1px; +} + +.tabs > li, +.cbi-tabmenu > li { + position: relative; + margin-bottom: -1px; +} + +.cbi-tabmenu.map { + margin: 0; +} + +.cbi-tabmenu.map > li { + font-size: 16.5px; + font-weight: bold; +} + +.cbi-tabcontainer > fieldset.cbi-section[id] > legend { + display: none; +} + +.tabs > li > a, +.cbi-tabmenu > li > a { + padding: 0 15px; + margin-right: 2px; + line-height: 34px; + border: 1px solid transparent; + border-radius: 2px 2px 0 0; +} + +.tabs > li > a:hover, +.cbi-tabmenu > li > a:hover { + text-decoration: none; + background-color: #eee; + border-color: #eee #eee #ddd; +} + +.tabs .active > a, .tabs .active > a:hover, +.cbi-tabmenu .active > a, .cbi-tabmenu .active > a:hover, +.cbi-tab > a:link, .cbi-tab > a:hover { + color: #000000; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; + cursor: default; +} + +.tabs .menu-dropdown, .tabs .dropdown-menu, +.cbi-tabmenu .menu-dropdown, .cbi-tabmenu .dropdown-menu { + top: 35px; + border-width: 1px; + border-radius: 0 2px 2px 2px; +} + +.tabs a.menu:after, .tabs .dropdown-toggle:after, +.cbi-tabmenu a.menu:after, .cbi-tabmenu .dropdown-toggle:after { + border-top-color: #999; + margin-top: 15px; + margin-left: 5px; +} + +.tabs li.open.menu .menu, .tabs .open.dropdown .dropdown-toggle, +.cbi-tabmenu li.open.menu .menu, .cbi-tabmenu .open.dropdown .dropdown-toggle { + border-color: #999; +} + +.tabs li.open a.menu:after, .tabs .dropdown.open .dropdown-toggle:after, +.cbi-tabmenu li.open a.menu:after, .cbi-tabmenu .dropdown.open .dropdown-toggle:after { + border-top-color: #555; +} + +.tab-content > .tab-pane, +.tab-content > div { + display: none; +} + +.tab-content > .active { + display: block; +} + +.breadcrumb { + padding: 7px 14px; + margin: 0 0 18px; + background-color: #f5f5f5; + background-repeat: repeat-x; + border: 1px solid #ddd; + border-radius: 2px; + box-shadow: inset 0 1px 0 #fff; +} + +.breadcrumb li { + display: inline; +} + +.breadcrumb .divider { + padding: 0 5px; + color: #bfbfbf; +} + +.breadcrumb .active a { + color: #404040; +} + +footer { + margin-top: 30px; + padding-top: 20px; + padding-bottom: 20px; + border-top: 1px solid #404040; +} + +.btn.danger, +.alert-message.danger, +.btn.danger:hover, +.alert-message.danger:hover, +.btn.error, +.alert-message.error, +.btn.error:hover, +.alert-message.error:hover, +.btn.success, +.alert-message.success, +.btn.success:hover, +.alert-message.success:hover, +.btn.info, +.alert-message.info, +.btn.info:hover, +.alert-message.info:hover { + color: #fff; +} + +.btn .close, .alert-message .close { + font-family: Arial, sans-serif; + line-height: 18px; +} + +.btn.danger, +.alert-message.danger, +.btn.error, +.alert-message.error { + background: linear-gradient(to bottom, #ee5f5b, #c43c35) repeat-x; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} + +.btn.success, .alert-message.success { + background: linear-gradient(to bottom, #62c462, #57a957) repeat-x; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} + +.btn.info, .alert-message.info { + background: linear-gradient(to bottom, #5bc0de, #339bb9) repeat-x; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} + +.alert-message.notice { + background: linear-gradient(to bottom, #efefef, #fefefe) repeat-x; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} + +.btn, +.cbi-button { + cursor: pointer; + display: inline-block; + background: linear-gradient(#fff, #fff 25%, #e6e6e6) no-repeat; + padding: 5px 14px 6px; + color: #333; + font-size: 12px; + line-height: normal; + border: 1px solid #ccc; + border-bottom-color: #bbb; + border-radius: 2px; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn:focus, +.cbi-button:focus { + outline: 1px dotted #666; +} + +.cbi-input-invalid, +.cbi-value-error input { + color: #f00; + border-color: #f00; +} + +.cbi-button-positive, +.cbi-button-fieldadd, +.cbi-button-add, +.cbi-button-save { + border-color: #4a4; + color: #4a4; +} + +.cbi-button-neutral, +.cbi-button-download, +.cbi-button-find, +.cbi-button-link, +.cbi-button-up, +.cbi-button-down { + color: #444; +} + +.btn.primary, +.cbi-button-action, +.cbi-button-apply, +.cbi-button-reload, +.cbi-button-edit { + border-color: #f6943e; + color: #f6943e; +} + +.cbi-button-negative, +.cbi-section-remove .cbi-button, +.cbi-button-reset, +.cbi-button-remove { + border-color: #c44; + color: #c44; +} + +.cbi-page-actions::after { + display: table; + content: ""; + clear: both; +} + +.cbi-page-actions > :not([method="post"]):not(.cbi-button-apply):not(.cbi-button-save):not(.cbi-button-reset) { + float: left; + margin-right: .4em; +} + +.btn.primary, +.cbi-button-action.important, +.cbi-page-actions .cbi-button-apply, +.cbi-section-actions .cbi-button-edit { + color: #fff; + background: #f6943e; +} + +.cbi-button-positive.important, +.cbi-page-actions .cbi-button-save { + color: #fff; + background: linear-gradient(to bottom, #4a4, #484) no-repeat; +} + +.cbi-button-negative.important { + color: #fff; + background: linear-gradient(to bottom, #c44, #c00) no-repeat; +} + +.cbi-page-actions .cbi-button-apply + .cbi-button-save { + background: linear-gradient(#fff, #fff 25%, #e6e6e6); + color: #4a4; +} + +.cbi-dropdown { + border: 1px solid #ccc; + border-radius: 2px; + display: inline-flex; + padding: 0; + cursor: pointer; + height: auto; + background: linear-gradient(#fff 0%, #e9e8e6 100%); + position: relative; + color: #404040; +} + +.cbi-dropdown:focus { + outline: 2px solid #f6943e; +} + +.cbi-dropdown > ul { + margin: 0 !important; + padding: 0; + list-style: none; + overflow-x: hidden; + overflow-y: auto; + display: flex; + width: 100%; +} + +.cbi-dropdown > ul.preview { + display: none; +} + +.cbi-dropdown > .open, +.cbi-dropdown > .more { + flex-grow: 0; + flex-shrink: 0; + display: flex; + flex-direction: column; + justify-content: center; + text-align: center; + line-height: 2em; + padding: 0 .25em; +} + +.cbi-dropdown > .more, +.cbi-dropdown > ul > li[placeholder] { + color: #777; + font-weight: bold; + display: none; +} + +.cbi-dropdown > ul > li { + display: none; + padding: .25em; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + flex-shrink: 1; + flex-grow: 1; + align-items: center; + align-self: center; + color: #404040; + min-height: 20px; +} + +.cbi-dropdown > ul > li .hide-open { display: block; display: initial; } +.cbi-dropdown > ul > li .hide-close { display: none; } + +.cbi-dropdown > ul > li[display]:not([display="0"]) { + border-left: 1px solid #ccc; +} + +.cbi-dropdown[empty] > ul { + max-width: 1px; +} + +.cbi-dropdown > ul > li > form { + display: none; + margin: 0; + padding: 0; + pointer-events: none; +} + +.cbi-dropdown > ul > li img { + vertical-align: middle; + margin-right: .25em; +} + +.cbi-dropdown > ul > li > form > input[type="checkbox"] { + margin: 0; +} + +.cbi-dropdown > ul > li input[type="text"] { + height: 20px; +} + +.cbi-dropdown[open] { + position: relative; +} + +.cbi-dropdown[open] > ul.dropdown { + display: block; + background: #f6f6f5; + border: 1px solid #918e8c; + box-shadow: 0 0 4px #918e8c; + position: absolute; + z-index: 1000; + max-width: none; + min-width: 100%; + width: auto; +} + +.cbi-dropdown > ul > li[display], +.cbi-dropdown[open] > ul.preview, +.cbi-dropdown[open] > ul.dropdown > li, +.cbi-dropdown[multiple] > ul > li > label, +.cbi-dropdown[multiple][open] > ul.dropdown > li, +.cbi-dropdown[multiple][more] > .more, +.cbi-dropdown[multiple][empty] > .more { + flex-grow: 1; + display: flex; +} + +.cbi-dropdown[empty] > ul > li, +.cbi-dropdown[optional][open] > ul.dropdown > li[placeholder], +.cbi-dropdown[multiple][open] > ul.dropdown > li > form { + display: block; +} + +.cbi-dropdown[open] > ul.dropdown > li .hide-open { display: none; } +.cbi-dropdown[open] > ul.dropdown > li .hide-close { display: block; display: initial; } + +.cbi-dropdown[open] > ul.dropdown > li { + border-bottom: 1px solid #ccc; +} + +.cbi-dropdown[open] > ul.dropdown > li[selected] { + background: #b0d0f0; +} + +.cbi-dropdown[open] > ul.dropdown > li.focus { + background: linear-gradient(90deg, #a3c2e8 0%, #84aad9 100%); +} + +.cbi-dropdown[open] > ul.dropdown > li:last-child { + margin-bottom: 0; + border-bottom: none; +} + +.cbi-dropdown[disabled] { + pointer-events: none; + opacity: .6; +} + +input[type="text"] + .cbi-button, +input[type="password"] + .cbi-button, +select + .cbi-button { + border-radius: 2px; + border-color: #ccc; + margin: 2px 0 2px 3px; + padding: 0 12px; + vertical-align: top; + height: 28px; + font-size: 13px; + font-weight: normal; + line-height: 28px; +} + +select + .cbi-button { + #border-left-color: transparent; +} + +.cbi-title-ref { + color: #f39800; +} + +.cbi-title-ref::after { + content: " ➙ "; +} + +.cbi-tooltip-container { + cursor: help; + padding: 5px 3px 5px 3px; +} + +.cbi-tooltip { + position: absolute; + z-index: 1000; + left: -1000px; + opacity: 0; + transition: opacity .25s ease-out; +} + +.cbi-tooltip-container:hover .cbi-tooltip:not(:empty) { + left: auto; + opacity: 1; + transition: opacity .25s ease-in; +} + +.zonebadge .cbi-tooltip { + padding: 1px; + background: inherit; + margin: -1.6em 0 0 -5px; + border-radius: 2px; + pointer-events: none; + box-shadow: 0 0 3px #444; +} + +.zonebadge .cbi-tooltip > * { + margin: 1px; +} + +.zone-forwards { + display: flex; + flex-wrap: wrap; +} + +.zone-forwards > * { + flex: 1 1 40%; + padding: 1px; +} + +.zone-forwards > span { + flex-basis: 10%; + text-align: center; +} + +.zone-forwards .zone-src, +.zone-forwards .zone-dest { + display: flex; + flex-direction: column; +} + +.btn.active, .btn:active { + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn.disabled { + cursor: default; + background-image: none; + opacity: 0.65; + box-shadow: none; +} + +.btn[disabled] { + cursor: default; + background-image: none; + opacity: 0.65; + box-shadow: none; +} + +.btn.large { + font-size: 15px; + line-height: normal; + padding: 9px 14px 9px; + border-radius: 2px; +} + +.btn.small { + padding: 7px 9px 7px; + font-size: 11px; +} + +button.btn::-moz-focus-inner, input[type=submit].btn::-moz-focus-inner { + padding: 0; + border: 0; +} + +.close { + float: right; + color: #000; + font-size: 20px; + font-weight: bold; + line-height: 13.5px; + opacity: 0.25; +} + +.close:hover { + color: #000; + text-decoration: none; + opacity: 0.4; +} + +.alert-message { + position: relative; + padding: 30px; + margin-top: 25px; + margin-bottom: 25px; + color: #404040; + background: #f0e68c; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + border-width: 1px; + border-style: solid; + border-radius: 2px; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); +} + +.alert-message .close { + margin-top: 1px; + *margin-top: 0; +} + +.alert-message a { + font-weight: bold; + color: #404040; +} + +.alert-message.danger p a, +.alert-message.error p a, +.alert-message.success p a, +.alert-message.info p a { + color: #fff; +} + +.alert-message h5 { + line-height: 18px; +} + +.alert-message p { + margin-bottom: 0; +} + +.alert-message div { + margin-top: 15px; + margin-bottom: 10px; + line-height: 28px; +} + +.label { + padding: 3px 3px 3px 3px; + font-size: 8px; + font-weight: normal; + color: #fff !important; + text-transform: uppercase; + white-space: nowrap; + background-color: #bfbfbf; + border-radius: 2px; + text-shadow: none; +} + +a.label:link, +a.label:visited { + color: #fff; +} + +a.label:hover { + text-decoration: none; +} + +.label.important { + background-color: #c43c35; +} + +.label.warning { + background-color: #f89406; +} + +.label.success { + background-color: #f6943e; +} + +.label.notice { + background-color: #62cffc; +} + +/* LuCI specific items */ +.hidden { display: none } + +#memtotal > div, +#memfree > div, +#memcache > div, +#membuff > div, +#conns > div { + border: 1px solid #ccc; + border-radius: 2px 2px 2px 2px; + color: #808080; + display: inline-block; + font-size: 12px; + line-height: 18px; +} + +#xhr_poll_status { + cursor: pointer; +} + +form.inline { display: inline; margin-bottom: 0; } + +header .pull-right { padding-top: 21px; } + +#modemenu li:last-child span.divider { display: none } + +#syslog { width: 100%; } + +.cbi-section-table .tr:hover .td, +.cbi-section-table .tr:hover .th, +.cbi-section-table .tr:hover::before { + background-color: #f5f5f5; +} + +.cbi-section-table .tr.cbi-section-table-descr .th { + font-weight: normal; +} + +.cbi-section-table-titles.named::before, +.cbi-section-table-descr.named::before, +.cbi-section-table-row[data-title]::before { + content: attr(data-title) " "; + display: table-cell; + padding: 10px 10px 9px; + line-height: 18px; + font-weight: bold; + vertical-align: middle; +} + +.cbi-section-table-titles.named::before, +.cbi-section-table-descr.named::before, +.cbi-section-table-row[data-title]::before { + border-top: 1px solid #ddd; +} + +.left { text-align: left !important; } +.right { text-align: right !important; } +.center { text-align: center !important; } +.top { vertical-align: top !important; } +.middle { vertical-align: middle !important; } +.bottom { vertical-align: bottom !important; } + +.cbi-value-field { line-height: 1.5em; } + +.cbi-value-field input[type=checkbox], +.cbi-value-field input[type=radio] { + margin-top: 8px; + margin-right: 6px; +} + +table table td, +.cbi-value-field table td { + border: none; +} + +.table.cbi-section-table input[type="password"], +.table.cbi-section-table input[type="text"], +.table.cbi-section-table textarea, +.table.cbi-section-table select { + width: 100%; +} + +.table.cbi-section-table .td.cbi-section-table-cell { + white-space: nowrap; + text-align: right; +} + +.table.cbi-section-table .td.cbi-section-table-cell select { + width: inherit; +} + +.td.cbi-section-actions { + text-align: right; + vertical-align: middle; +} + +.td.cbi-section-actions > * { + display: flex; +} + +.td.cbi-section-actions > * > *, +.td.cbi-section-actions > * > form > * { + flex: 1 1 4em; + margin: 0 1px; +} + +.td.cbi-section-actions > * > form { + display: inline-flex; + margin: 0; +} + +.table.valign-middle .td { + vertical-align: middle; +} + +.cbi-rowstyle-2, +.tr.table-titles, +.tr.cbi-section-table-titles { + background: #f9f9f9; +} + +.cbi-value-description { + background-image: url(/luci-static/resources/cbi/help.gif); + background-position: .25em .2em; + background-repeat: no-repeat; + margin: 10px 0 10px -5px; + padding: 0 0 0 26px; +} + +.cbi-section-error { + border: 1px solid #f00; + border-radius: 2px; + background-color: #fce6e6; + padding: 5px; + margin-bottom: 18px; +} + +.cbi-section-error ul { margin: 0 0 0 20px; } + +.cbi-section-error ul li { + color: #f00; + font-weight: bold; +} + +.ifacebox { + background-color: #fff; + border: 1px solid #ccc; + margin: 6px 4px; + text-align: center; + white-space: nowrap; + background-image: linear-gradient(#fff, #fff 25%, #f9f9f9); + border-radius: 2px; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + display: inline-flex; + flex-direction: column; + line-height: 1.2em; + min-width: 100px; +} + +.ifacebox .ifacebox-head { + border-bottom: 1px solid #ccc; + padding: 10px; + line-height: 1.2em; + background: #eee; +} + +.ifacebox .ifacebox-head.active { + background: #f0e68c; +} + +.ifacebox .ifacebox-body { + padding: .25em; +} + +.ifacebadge { + display: inline-block; + flex-direction: row; + white-space: nowrap; + background-color: #fff; + border: 1px solid #ccc; + padding: 5px 5px 3px 5px; + background-image: linear-gradient(#fff, #fff 25%, #f9f9f9); + border-radius: 2px; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + cursor: default; + line-height: 1.2em; +} + +.ifacebadge img { + width: 16px; + height: 16px; + vertical-align: middle; +} + +.ifacebadge-active { + border-color: #000; + font-weight: bold; +} + +.network-status-table { + display: flex; + flex-wrap: wrap; +} + +.network-status-table .ifacebox { + margin: 10px 10px 15px 2px; + flex-grow: 1; +} + +.network-status-table .ifacebox-body { + display: flex; + flex-direction: column; + height: 100%; + text-align: left; + padding: 8px; +} + +.network-status-table .ifacebox-body > * { + margin: .25em; +} + +.network-status-table .ifacebox-body > span { + flex: 10 10 auto; + height: 100%; +} + +.network-status-table .ifacebox-body > div { + display: flex; + flex-wrap: wrap; + margin: -.125em; +} + +#dsl_status_table .ifacebox-body > span > strong { + display: inline-block; + min-width: 35%; +} + +.ifacebadge.large, +.network-status-table .ifacebox-body .ifacebadge { + display: inline-flex; + flex: 1; + padding: 10px 4px 10px 4px; + min-width: 220px; + margin: 10px 6px 4px 4px; +} + +.ifacebadge > *, +.ifacebadge.large > * { + margin: 0 .125em; +} + +.zonebadge { + padding: 2px; + border-radius: 2px; + display: inline-block; + white-space: nowrap; + color: #666; +} + +.zonebadge > em, +.zonebadge > strong { + margin: 0 2px; + display: inline-block; +} + +.zonebadge input { + width: 6em; +} + +.zonebadge > .ifacebadge { + margin-left: 2px; +} + +.zonebadge-empty { + border: 1px dashed #aaa; + color: #aaa; + font-style: italic; + font-size: smaller; +} + +div.cbi-value var, +.td.cbi-value-field var { + font-style: italic; + color: #f6943e; +} + +.uci-change-list { + line-height: 170%; + white-space: pre; +} + +.uci-change-list del, +.uci-change-list ins, +.uci-change-list var, +.uci-change-legend-label del, +.uci-change-legend-label ins, +.uci-change-legend-label var { + text-decoration: none; + font-family: monospace; + font-style: normal; + border: 1px solid #ccc; + background: #eee; + padding: 2px; + display: block; + line-height: 15px; + margin-bottom: 1px; +} + +.uci-change-list ins, +.uci-change-legend-label ins { + border-color: #0f0; + background: #cfc; +} + +.uci-change-list del, +.uci-change-legend-label del { + border-color: #f00; + background: #fcc; +} + +.uci-change-list var, +.uci-change-legend-label var { + border-color: #ccc; + background: #eee; +} + +.uci-change-list var ins, +.uci-change-list var del { + display: inline-block; + border: none; + width: 100%; + padding: 0; +} + +.uci-change-legend { + padding: 5px; +} + +.uci-change-legend-label { + width: 150px; + float: left; +} + +.uci-change-legend-label > ins, +.uci-change-legend-label > del, +.uci-change-legend-label > var { + float: left; + margin-right: 4px; + width: 10px; + height: 10px; + display: block; + position: relative; +} + +.uci-change-legend-label var ins, +.uci-change-legend-label var del { + border: none; + position: absolute; + top: 2px; + left: 2px; + right: 2px; + bottom: 2px; +} + +html body.apply-overlay-active { + height: calc(100vh - 63px); +} + +#applyreboot-section { + line-height: 300%; +} + +.login{ + text-align: center; + background-color: #fff; + border-radius: 20px; + width: 300px; + height: 350px; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%,-50%); +} diff --git a/luci-theme-lamatel/htdocs/luci-static/lamatel/ezenlink.png b/luci-theme-lamatel/htdocs/luci-static/lamatel/ezenlink.png new file mode 100755 index 0000000000000000000000000000000000000000..070a12b7da56ad334a98ffb87ca1a382af985ca4 GIT binary patch literal 553 zcmV+^0@nSBP)5Rm*L{Kop!rxswj!voA{raViK6tZ*v8R6tTepaO_o zK%jz<3ScijlMX@!jz*fb7UN%5LM!a|X5Y-td%h{l5<`};@jZaZ<;8JG{Ov%{2>=2f zjE$E=aylzEHXZ{Y&?A5!fj0+a};rI%Z*jv2iL{ zMgq8CqI=*$2EfYY1rNJ&#m0k@fwA!kz*?8~dk$t1{z70E8s|4@}f?f1JGsh-A*IZ+iaOa7=K r8C)FHmOJQUD(bA18eYuZ#s%OHNQeZcR0cH!00000NkvXXu0mjf(L3<` literal 0 HcmV?d00001 diff --git a/luci-theme-lamatel/htdocs/luci-static/lamatel/favicon.ico b/luci-theme-lamatel/htdocs/luci-static/lamatel/favicon.ico new file mode 100755 index 0000000000000000000000000000000000000000..674d8e5d07076e5561c1dcd1cddd8d0bd59941bb GIT binary patch literal 762 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 Ef*7h5cmMzZ literal 0 HcmV?d00001 diff --git a/luci-theme-lamatel/htdocs/luci-static/lamatel/logo.png b/luci-theme-lamatel/htdocs/luci-static/lamatel/logo.png new file mode 100755 index 0000000000000000000000000000000000000000..2b7dd1c511d4c240a5245adca08486001309338a GIT binary patch literal 15943 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 ul, .nav { + display: block; + float: left; + margin: 7px 8px 0 8px; + position: relative; + left: 0; +} + +header div > ul a, .nav a { + display: block; + float: left; + padding: 12px 6px 12px 6px; + line-height: 14px; + letter-spacing: 0.2px; +} + +.menu-dropdown, .dropdown-menu { + top: 38px; + min-width: 180px; + max-width: 260px; +} + +@media screen and (max-device-width: 660px) { + #maincontent.container { + width: 98%; + margin: 30px 0 0 6px; + } +} + +@media screen and (max-device-width: 360px) { + #maincontent.container { + width: 96%; + margin: 30px 0 0 6px; + } +} + +@media screen and (max-device-width: 200px) { + #maincontent.container { + width: 94%; + margin: 40px 0 0 2px; + } +} diff --git a/luci-theme-lamatel/luasrc/view/themes/lamatel/footer.htm b/luci-theme-lamatel/luasrc/view/themes/lamatel/footer.htm new file mode 100644 index 000000000..eb0994f74 --- /dev/null +++ b/luci-theme-lamatel/luasrc/view/themes/lamatel/footer.htm @@ -0,0 +1,29 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Copyright 2012 David Menting + Licensed to the public under the Apache License 2.0. +-%> + +<% + local ver = require "luci.version" + local disp = require "luci.dispatcher" + local request = disp.context.path + local category = request[1] + local tree = disp.node() + local categories = disp.node_childs(tree) +%> + +
+ + + diff --git a/luci-theme-lamatel/luasrc/view/themes/lamatel/header.htm b/luci-theme-lamatel/luasrc/view/themes/lamatel/header.htm new file mode 100644 index 000000000..cf042bb8c --- /dev/null +++ b/luci-theme-lamatel/luasrc/view/themes/lamatel/header.htm @@ -0,0 +1,206 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008-2016 Jo-Philipp Wich + Copyright 2012 David Menting + Licensed to the public under the Apache License 2.0. +-%> + +<% + local sys = require "luci.sys" + local util = require "luci.util" + local http = require "luci.http" + local disp = require "luci.dispatcher" + + local boardinfo = util.ubus("system", "board") + + local request = disp.context.path + local request2 = disp.context.request + + local category = request[1] + local cattree = category and disp.node(category) + + local leaf = request2[#request2] + + local tree = disp.node() + local node = disp.context.dispatched + + local categories = disp.node_childs(tree) + + local c = tree + local i, r + + -- tag all nodes leading to this page + for i, r in ipairs(request) do + if c.nodes and c.nodes[r] then + c = c.nodes[r] + c._menu_selected = true + end + end + + -- send as HTML5 + http.prepare_content("text/html") + + local function nodeurl(prefix, name, query) + local u = url(prefix, name) + if query then + u = u .. http.build_querystring(query) + end + return pcdata(u) + end + + local function render_tabmenu(prefix, node, level) + if not level then + level = 1 + end + + local childs = disp.node_childs(node) + if #childs > 0 then + if level > 2 then + write('
    ') + end + + local selected_node + local selected_name + local i, v + + for i, v in ipairs(childs) do + local nnode = node.nodes[v] + if nnode._menu_selected then + selected_node = nnode + selected_name = v + end + + if level > 2 then + write('
  • %s
  • ' %{ + v, (nnode._menu_selected or (node.leaf and v == leaf)) and 'active' or '', + nodeurl(prefix, v, nnode.query), + striptags(translate(nnode.title)) + }) + end + end + + if level > 2 then + write('
') + end + + if selected_node then + render_tabmenu(prefix .. "/" .. selected_name, selected_node, level + 1) + end + end + end + + local function render_submenu(prefix, node) + local childs = disp.node_childs(node) + if #childs > 0 then + write('') + end + end + + local function render_topmenu() + local childs = disp.node_childs(cattree) + if #childs > 0 then + write('') + end + end + + local function render_changes() + -- calculate the number of unsaved changes + if tree.nodes[category] and tree.nodes[category].ucidata then + local ucichanges = 0 + + local i, j + for i, j in pairs(require("luci.model.uci").cursor():changes()) do + ucichanges = ucichanges + #j + end + + if ucichanges > 0 then + write('%s: %d' %{ + url(category, 'uci/changes'), + http.urlencode(http.formvalue('redir') or table.concat(disp.context.request, "/")), + translate('Unsaved Changes'), + ucichanges + }) + end + end + end +-%> + + + + + <%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - LuCI + + + + + <% if node and node.css then %> + + <% end -%> + <% if css then %> + + <% end -%> + + + + + +
+
+
+ Outdoor Router + <% render_topmenu() %> +
+ +
+
+
+
+ +
+ <%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%> +
+

<%:No password set!%>

+

<%:You are using the default router password. Please custom your router password to protect the web interface and enable SSH.%>

+ +
+ <%- end -%> + + + + <% if category then render_tabmenu(category, cattree) end %> diff --git a/luci-theme-lamatel/root/etc/uci-defaults/30_luci-theme-lametal b/luci-theme-lamatel/root/etc/uci-defaults/30_luci-theme-lametal new file mode 100755 index 000000000..3c64379bd --- /dev/null +++ b/luci-theme-lamatel/root/etc/uci-defaults/30_luci-theme-lametal @@ -0,0 +1,7 @@ +#!/bin/sh +uci batch <<-EOF + set luci.themes.lamtel=/luci-static/lamatel + set luci.main.mediaurlbase=/luci-static/lamatel + commit luci +EOF +exit 0