Skip to content

Commit bb5210e

Browse files
committed
Slightly rework front-end themes.
1 parent 71a5146 commit bb5210e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+328
-623
lines changed

Changelog.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,3 +209,7 @@ __*Why "v3.0.0" instead of "v1.0.0?"*__ Prior to phpMussel v3, the "phpMussel Co
209209
- [2025.07.08]: Added the ability to route all outbound requests through a proxy, and two new configuration directives, `request_proxy` and `request_proxyauth`.
210210
- [2025.08.01]: Slightly improved the navigation SVGs.
211211
- [2025.08.08]: Added the ability to change the "mode" of the configured theme, thus enabling any singular theme to have some slight variation in its potential presentation. Two new configuration directives have been added to facilitate this (look for `theme_mode` under `frontend` and `web` respectively, directly under the existing `theme` configuration directives). For now, the available "modes" are just "normal" and "inverted" (the latter inverting the tone of the colours/lighting used by the theme).
212+
213+
### v3.7.1
214+
215+
- [2025.08.31]: Slightly reworked the various front-end themes.

assets/bluemetal/frontend.css

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,16 @@
44
:root{scroll-behavior:auto}
55
}
66
.scrollTrans{transition:all .5s ease-in-out}
7-
body,input,select,textarea,.idx{font-size:calc((12px * {magnification}) + .03vw);max-width:100%}
8-
body{font-family:'Tahoma','Verdana','Noto Sans','Arial';letter-spacing:1px;text-decoration:none;border-style:none;margin:0;white-space:normal;background-color:#333;color:#cde;background-image:url(data:image/gif;base64,R0lGODdhAwADAIACADMzM1VicCwAAAAAAwADAAACBIQRBwUAOw==);background-attachment:fixed}
7+
body,input,select,textarea{max-width:100%}
8+
body,input,select,textarea,.idx{font-size:calc((12px * {magnification}) + .03vw)}
9+
body{font-family:'Tahoma','Verdana','Noto Sans','Arial';letter-spacing:1px;text-decoration:none;border-style:none;margin:0;white-space:normal;background-color:#333;color:#cde;background-image:url(data:image/png;base64,{Base64Encode}{Asset:texture.png}{/Base64Encode});background-attachment:fixed}
910
code{background-color:rgba(85,85,85,.5);color:#eee;vertical-align:0;display:inline-block;height:calc(1em + 2px)}
1011
hr{border-style:solid none none;border-width:1px;margin:5px 2px 0;padding:2px;color:#89b}
1112
img.ico{width:16px;height:16px;border:0;filter:hue-rotate(180deg) brightness(.8)}
1213
input[type=file]{margin:0;padding:0;border:none;background:none;width:auto}
1314
input,input[type=file]::file-selector-button,select,option,textarea{background-color:#345;border:none;color:#ccc;margin:2px;padding:2px}
1415
input,select{width:150px;background-repeat:no-repeat;background-position:top {FE_Align_Reverse}}
15-
input[type=submit]:not(.auto),input[type=button]:not(.auto){width:auto;min-width:150px}
16+
input[type=submit]:not(.auto),input[type=button]:not(.auto){width:auto;min-width:min(150px, 25%)}
1617
input.auto,input[type=file]::file-selector-button,select.auto{width:auto;padding-left:10px;padding-right:10px}
1718
input[type=image]{width:inherit;border:inherit}
1819
input[type=password]{background-image:url(data:image/gif;base64,{Base64Encode}{Asset:pip_key_blue.gif}{/Base64Encode})}
@@ -25,6 +26,11 @@ select,option,input,textarea{filter:grayscale(.1) brightness(.94)}
2526
select:active,textarea:active:not([readonly]),input:active{filter:grayscale(0) brightness(1)}
2627
select:disabled,textarea:disabled,input:disabled{filter:grayscale(1) brightness(.5)}
2728
select:focus,textarea:focus,input:focus,select:hover,textarea:hover:not([readonly]),input:hover{filter:grayscale(0) brightness(1)}
29+
.mainbox{display:flex;flex-direction:row;gap:auto;justify-content:center;align-items:start}
30+
nav{display:flex;flex-direction:column;gap:2px;justify-content:start;align-items:start;font-size:calc((14px * {magnification}) + .03vw);flex-basis:20%;flex-shrink:2;flex-grow:1;letter-spacing:calc(1px + .03vw)}
31+
nav a:not(.idx a){display:block}
32+
main{flex-basis:80%;flex-shrink:1;flex-grow:2}
33+
.subNav{display:block;text-align:center;font-size:calc((10px * {magnification}) + .03vw);color:rgba(204,221,238,.6);text-shadow:2px 2px 1px rgba(255,255,255,.2)}
2834
table{table-layout:fixed}
2935
table,.spanner{width:100%}
3036
textarea{height:150px}
@@ -34,10 +40,9 @@ a:link,a:visited{color:#def}
3440
a:hover,a:active,a:focus,.txtRd{color:#fca}
3541
.bNav,.gen,.spanner{text-align:{FE_Align_Reverse}}
3642
.bNav{height:64px}
37-
.cat,.exp,.bNav,.gen,.nav,.s,.tip,.txtGn,.txtOe,.txtRd,.spanner,a,input,input[type=file]::file-selector-button,select,textarea{font-weight:700}
43+
.cat,.exp,.bNav,.gen,nav,.s,.tip,.txtGn,.txtOe,.txtRd,.spanner,a,input,input[type=file]::file-selector-button,select,textarea{font-weight:700}
3844
.ci,.co,.gen,.center{margin:auto}
3945
.ci,.co,.ng1,.ng2{width:calc(100% - 32px)}
40-
.idx{width:calc(100% - 10px)}
4146
.ci{background-color:rgba(102,119,136,.5);text-align:{FE_Align};border-top-{FE_Align_Reverse}-radius:24px;padding:12px}
4247
.co,body,.center{text-align:center}
4348
.co,body{padding:0}
@@ -50,13 +55,11 @@ a:hover,a:active,a:focus,.txtRd{color:#fca}
5055
.h1,.h3,.spanner{background-color:rgba(102,119,136,.5)}
5156
.h2,.h4{background-color:rgba(85,102,119,.5)}
5257
.h3,.h3f,.h4,.h4f{width:50%}
53-
.nav{font-size:calc((14px * {magnification}) + .03vw);width:20%;letter-spacing:calc(1px + .03vw)}
5458
.nav:lang(ja){letter-spacing:-1px}
5559
.ng1,.h1f,.h3f{background:linear-gradient({90deg},rgba(102,119,136,.5),#89a)}
5660
.ng2,.h2f,.h4f{background:linear-gradient({90deg},rgba(85,102,119,.5),#789)}
5761
.hFd:hover,.r{background-color:rgba(153,102,51,.6)}
5862
.rf{background:linear-gradient({90deg},rgba(153,102,51,.6),#c96)}
59-
.right{padding:20px;width:80%}
6063
.branchline{border-style:none none solid none;border-width:1px;border-color:#89b}
6164
.txtBl{color:#eee}
6265
.txtGn{color:#9c7}
@@ -75,18 +78,18 @@ input[id=logoutbutton]:hover,input[id=logoutbutton]:active,input[id=logoutbutton
7578
input[id=homebutton]{border-top-{FE_Align_Reverse}-radius:0;border-bottom-{FE_Align_Reverse}-radius:0;margin-{FE_Align_Reverse}:0}
7679
.h1f,.h2f,.h3f,.h4f,.rf{white-space:nowrap}
7780
@media only all and (max-width:968px) {
81+
.extend{flex-basis:100%}
7882
.big,.dt{display:none}
7983
.mob{display:block}
8084
.tip,.bNav,.gen{float:none;height:auto;text-align:center}
8185
.h1,.h1f,.h2,.h2f,.r,.rf{width:50%}
82-
.extend{width:100%}
8386
}
8487
.hB{background-color:rgba(0,0,0,.125)}
8588
.hW{background-color:rgba(255,255,255,.125)}
8689
.fW{word-break:break-all}
8790
.exp{color:#ff0;background-color:#f00}
8891
.pieul{list-style-type:none;margin:0;padding:0}
89-
li>span.comCat:first-child,input[type=file]::file-selector-button{cursor:pointer}
92+
li>span.comCat:first-child,input[type=button],input[type=file]::file-selector-button,input[type=checkbox],input[type=checkbox]+label,input[type=radio],input[type=radio]+label,input[type=reset],input[type=submit],span>span[onclick],li>span[onclick],.navicon[onclick]{cursor:pointer}
9093
.comCat::before,.showlink::before,.shownlink::before,.unshownlink::before{content:"";width:16px;height:16px;background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:caret.svg}{/Base64Encode});background-repeat:no-repeat;background-position:center;position:relative;top:2px;display:inline-block;margin-{FE_Align_Reverse}:6px;line-height:100%;cursor:pointer}
9194
.caret-down::before{animation:forRotate .3s ease-in 1;animation-fill-mode:both}
9295
.caret-up::before{animation:revRotate .5s linear 1;animation-fill-mode:both}
@@ -96,7 +99,7 @@ blockquote.comSub{margin:-2px 0 0 0;padding:0 0 0 0}
9699
@keyframes forRotate{0%{{caretTransformBefore} invert(90%) sepia(8%) saturate(574%) hue-rotate(174deg) brightness(98%) contrast(90%)}100%{{caretTransformAfter} invert(90%) sepia(8%) saturate(574%) hue-rotate(174deg) brightness(98%) contrast(90%)}}
97100
@keyframes revRotate{0%{{caretTransformAfter} invert(90%) sepia(8%) saturate(574%) hue-rotate(174deg) brightness(98%) contrast(90%)}100%{{caretTransformBefore} invert(90%) sepia(8%) saturate(574%) hue-rotate(174deg) brightness(98%) contrast(90%)}}
98101
.navicon{display:inline-block;background-repeat:no-repeat;filter:invert(85%) saturate(1074%) hue-rotate(-154deg) brightness(100%) contrast(87%);position:relative;top:1px;width:16px;height:16px}
99-
a:hover>.navicon,a:active>.navicon,a:focus>.navicon{filter:invert(91%) sepia(87%) saturate(611%) hue-rotate(-62deg) brightness(100%) contrast(109%)}
102+
a:hover>.navicon,a:active>.navicon,a:focus>.navicon,.navicon[onclick]:hover,.navicon[onclick]:active,.navicon[onclick]:focus{filter:invert(91%) sepia(87%) saturate(611%) hue-rotate(-62deg) brightness(100%) contrast(109%)}
100103
select+input[type=submit],select+input[type=button],input[name=qkey]+input[type=submit]{height:20px;margin-{FE_Align}:-3px;border-bottom-{FE_Align}-radius:0;border-top-{FE_Align}-radius:0;padding-{FE_Align}:3px}
101104
input[name=qkey]{margin-{FE_Align}:-3px;padding-{FE_Align}:3px}
102105
select,input[type=submit],input[type=reset],input[type=button],input[type=file]::file-selector-button,input[type=text],input[type=password],input[type=number],input[type=date],input[type=time],button{box-sizing:border-box;height:20px;padding-top:0;padding-bottom:0}
@@ -123,7 +126,6 @@ input[type=checkbox]+label,input[type=radio]+label,.gridboxitem>label,.gridboxit
123126
.warning{display:inline-block;margin:4px;font-weight:700;color:#fca;background:linear-gradient({90deg},rgba(0,128,192,0) 0,rgba(0,128,192,.8) 20% 80%,rgba(0,128,192,0) 100%);line-height:100%}
124127
.shownlink::before{animation:forRotate .5s ease-in 1;animation-fill-mode:both}
125128
.unshownlink::before{animation:revRotate .5s linear 1;animation-fill-mode:both}
126-
.subNav{text-align:center;font-size:calc((10px * {magnification}) + .03vw);color:rgba(204,221,238,.6);text-shadow:2px 2px 1px rgba(255,255,255,.2)}
127129
input[type=button].reset{background:none;cursor:pointer;border:none;padding:0 12px 0 12px;margin:0;width:auto;color:#fca}
128130
input[type=button].reset:hover,input[type=button].reset:active{color:#ffc}
129131
.tablend{margin-top:-2px}
@@ -144,9 +146,14 @@ input[type=button].reset:hover,input[type=button].reset:active{color:#ffc}
144146
.txtGn::selection,.txtGn>*:not(.txtOe,.txtRd)::selection{color:#dfc}
145147
.txtOe::selection,.txtOe>*:not(.txtGn,.txtRd)::selection{color:#fec}
146148
.txtRd::selection,.txtRd>*:not(.txtGn,.txtOe)::selection{color:#fcc}
147-
.flexrow{display:flex}
149+
.flexrow{display:flex;flex-direction:row}
148150
.flexin{margin-{FE_Align}:-1px;margin-{FE_Align_Reverse}:1px;width:auto;flex-grow:1}
149151
.comCat::before,.showlink::before,.shownlink::before,.unshownlink::before{filter:invert(90%) sepia(8%) saturate(574%) hue-rotate(174deg) brightness(98%) contrast(90%)}
150152
.navSoftCnr{border-radius:{cnrRadius} 0 0}
151153
.capitalize{text-transform:capitalize}
152154
input[type=checkbox],input[type=radio]{accent-color:#89b}
155+
.clockBlock{display:inline-block;width:16px;height:16px;transition:none}
156+
.clockHours{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:clockhours.svg}{/Base64Encode});position:relative;inset:0 0}
157+
.clockMinutes{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:clockminutes.svg}{/Base64Encode});position:relative;inset:0 -16px}
158+
.clockSeconds{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:clockseconds.svg}{/Base64Encode});position:relative;inset:0 -32px}
159+
.clockFace{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:clockface.svg}{/Base64Encode});position:relative;inset:0 -48px}

assets/bluemetal/texture.png

523 Bytes
Loading

assets/default/_accounts.html

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
<table>
2-
<tr>
3-
<td class="nav big">
4-
{nav} </td>
5-
<td class="right extend">
1+
<div class="mainbox">
2+
<nav class="big">
3+
{nav}
4+
</nav>
5+
<main class="extend">
66
<div class="s" id="stateMsg">{state_msg}</div>
77
<table>
88
<tr>
@@ -29,6 +29,5 @@
2929
</tr>
3030
{Accounts}
3131
</table>
32-
</td>
33-
</tr>
34-
</table>
32+
</main>
33+
</div>

assets/default/_cache.html

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
<table>
2-
<tr>
3-
<td class="nav big">
4-
{nav} </td>
5-
<td class="right extend">
1+
<div class="mainbox">
2+
<nav class="big">
3+
{nav}
4+
</nav>
5+
<main class="extend">
66
{CacheData}
7-
</td>
8-
</tr>
9-
</table>
7+
</main>
8+
</div>

assets/default/_config.html

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,26 @@
1-
<table>
2-
<tr>
3-
<td class="nav big">
4-
{nav} <hr />
5-
<div class="ng1 idx" translate="no">{Indexes}</div>
6-
</td>
7-
<td class="right extend">
1+
<div class="mainbox">
2+
<nav class="big">
3+
{nav}
4+
<div class="ng1 idx" translate="no">{Indexes}</div>
5+
</nav>
6+
<main class="extend">
87
<div class="s">{state_msg}</div>
9-
<form action="?phpmussel-page=config" method="POST">
10-
<input type="hidden" name="updatingConfig" value="1" />
11-
<table>
12-
<tr><td class="ng2"><div class="s">{link.Configuration}</div></td></tr>
13-
<tr>
14-
<td class="ng1">
15-
<div class="s">{tip.See the documentation}<hr /><em>{label.Active configuration file} <span class="txtRd">{ActiveConfigFile}</span></em><hr /></div>
16-
<div class="bNav">
17-
<input type="submit" value="{field.Update}" /><br />
18-
<br />
19-
<input type="checkbox" name="orphaned" id="orphaned" class="auto" /><label class="s" for="orphaned">{checkbox.Delete orphaned values}</label>
20-
</div>
21-
</td>
22-
</tr>
23-
</table>
8+
<form action="?phpmussel-page=config" method="POST">
9+
<input type="hidden" name="updatingConfig" value="1" />
10+
<table>
11+
<tr><td class="ng2"><div class="s">{link.Configuration}</div></td></tr>
12+
<tr>
13+
<td class="ng1">
14+
<div class="s">{tip.See the documentation}<hr /><em>{label.Active configuration file} <span class="txtRd">{ActiveConfigFile}</span></em><hr /></div>
15+
<div class="bNav">
16+
<input type="submit" value="{field.Update}" /><br />
17+
<br />
18+
<input type="checkbox" name="orphaned" id="orphaned" class="auto" /><label class="s" for="orphaned">{checkbox.Delete orphaned values}</label>
19+
</div>
20+
</td>
21+
</tr>
22+
</table>
2423
{ConfigFields}
25-
</form>
26-
</td>
27-
</tr>
28-
</table>
24+
</form>
25+
</main>
26+
</div>

assets/default/_home.html

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
<table>
2-
<tr>
3-
<td class="nav extend">
4-
{nav} </td>
5-
<td class="right big"><div class="s">
6-
<hr />
1+
<div class="mainbox">
2+
<nav class="extend">
3+
{nav}
4+
</nav>
5+
<main class="big"><div class="s">
76
{Some useful links}
87
<hr />
98
{label.System information}<br />
@@ -34,6 +33,5 @@
3433
</ul>
3534
<hr />
3635
<input type="button" value="{label.Copy to clipboard}" class="auto" onclick="javascript:if(navigator.clipboard){var doCopy='{HomeCopyData}';navigator.clipboard.writeText(doCopy);alert(doCopy)}else{alert('{response.Failed}')}" />
37-
</div></td>
38-
</tr>
39-
</table>
36+
</div></main>
37+
</div>

assets/default/_logs.html

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
1-
<table>
2-
<tr>
3-
<td class="nav{mod_class_nav}"><div class="big">
4-
{nav} <hr /></div>
5-
<div class="ng1 idx">{LogFiles} </div>
6-
</td>
7-
<td class="right{mod_class_right}">
1+
<div class="mainbox">
2+
<nav class="big">
3+
{nav}
4+
<div class="ng1 idx" translate="no">{LogFiles} </div>
5+
</nav>
6+
<main class="extend{mod_class_right}">
87
<div class="ng1 s flong mob">{LogFiles} </div>
98
<span class="s">{TextModeSwitchLink}{ProcessTime}</span>
109
<hr />
1110
{logfileData}
12-
</td>
13-
</tr>
14-
</table>
11+
</main>
12+
</div>
Lines changed: 18 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,18 @@
1-
<nav><table>
2-
<tr>
3-
<td class="ng2 big navSoftCnr">
4-
<a href="?phpmussel-page"><span class="navicon home"></span>{link.Home}</a>
5-
</td>
6-
</tr>
7-
<tr>
8-
<td class="ng1">
9-
<a href="?phpmussel-page=accounts"><span class="navicon accounts"></span>{link.Accounts}</a><br />
10-
<a href="?phpmussel-page=cache-data"><span class="navicon cache"></span>{link.Cache Data}</a><br />
11-
<a href="?phpmussel-page=config"><span class="navicon configuration"></span>{link.Configuration}</a><br />
12-
<a href="?phpmussel-page=quarantine"><span class="navicon quarantine"></span>{link.Quarantine}</a><br />
13-
<a href="?phpmussel-page=siginfo"><span class="navicon siginfo"></span>{link.Signature Information}</a><br />
14-
<a href="?phpmussel-page=statistics"><span class="navicon statistics"></span>{link.Statistics}</a><br />
15-
<a href="?phpmussel-page=upload-test"><span class="navicon test"></span>{link.Upload Testing}</a><br />
16-
<a href="?phpmussel-page=logs"><span class="navicon logs"></span>{link.Logs}</a>
17-
</td>
18-
</tr>
19-
<tr>
20-
<td class="ng2">
21-
<div class="subNav">{label.External}</div>
22-
<a href="{Links.Documentation}" hreflang="en-US" rel="noopener external"><span class="navicon documentation"></span>{link.Documentation}</a><br />
23-
{Links.Website}
24-
</td>
25-
</tr>
26-
</table></nav>
1+
<div class="ng2 big navSoftCnr">
2+
<a href="?phpmussel-page"><span class="navicon home"></span>{link.Home}</a>
3+
</div>
4+
<div class="ng1">
5+
<a href="?phpmussel-page=accounts"><span class="navicon accounts"></span>{link.Accounts}</a>
6+
<a href="?phpmussel-page=cache-data"><span class="navicon cache"></span>{link.Cache Data}</a>
7+
<a href="?phpmussel-page=config"><span class="navicon configuration"></span>{link.Configuration}</a>
8+
<a href="?phpmussel-page=quarantine"><span class="navicon quarantine"></span>{link.Quarantine}</a>
9+
<a href="?phpmussel-page=siginfo"><span class="navicon siginfo"></span>{link.Signature Information}</a>
10+
<a href="?phpmussel-page=statistics"><span class="navicon statistics"></span>{link.Statistics}</a>
11+
<a href="?phpmussel-page=upload-test"><span class="navicon test"></span>{link.Upload Testing}</a>
12+
<a href="?phpmussel-page=logs"><span class="navicon logs"></span>{link.Logs}</a>
13+
</div>
14+
<div class="ng2">
15+
<div class="subNav">{label.External}</div>
16+
<a href="{Links.Documentation}" hreflang="en-US" rel="noopener external"><span class="navicon documentation"></span>{link.Documentation}</a>
17+
{Links.Website}
18+
</div>
Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,11 @@
1-
<nav><table>
2-
<tr>
3-
<td class="ng2 big navSoftCnr">
4-
<a href="?phpmussel-page"><span class="navicon home"></span>{link.Home}</a>
5-
</td>
6-
</tr>
7-
<tr>
8-
<td class="ng1">
9-
<a href="?phpmussel-page=logs"><span class="navicon logs"></span>{link.Logs}</a>
10-
</td>
11-
</tr>
12-
<tr>
13-
<td class="ng2">
14-
<div class="subNav">{label.External}</div>
15-
<a href="{Links.Documentation}" hreflang="en-US" rel="noopener external"><span class="navicon documentation"></span>{link.Documentation}</a><br />
16-
{Links.Website}
17-
</td>
18-
</tr>
19-
</table></nav>
1+
<div class="ng2 big navSoftCnr">
2+
<a href="?phpmussel-page"><span class="navicon home"></span>{link.Home}</a>
3+
</div>
4+
<div class="ng1">
5+
<a href="?phpmussel-page=logs"><span class="navicon logs"></span>{link.Logs}</a>
6+
</div>
7+
<div class="ng2">
8+
<div class="subNav">{label.External}</div>
9+
<a href="{Links.Documentation}" hreflang="en-US" rel="noopener external"><span class="navicon documentation"></span>{link.Documentation}</a><br />
10+
{Links.Website}
11+
</div>

0 commit comments

Comments
 (0)