Skip to content

Commit 21cc93f

Browse files
Improve setup wizard visual separation and themed module borders
1 parent c73fce4 commit 21cc93f

10 files changed

Lines changed: 125 additions & 35 deletions
-14 MB
Binary file not shown.

archive/folderview.plus-2026.03.19.22.txz.sha256

Lines changed: 0 additions & 1 deletion
This file was deleted.
-14 MB
Binary file not shown.

archive/folderview.plus-2026.03.19.23.txz.sha256

Lines changed: 0 additions & 1 deletion
This file was deleted.

archive/folderview.plus-2026.03.19.24.txz.sha256

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
560670b7a9c7a961769708aa729b2a5200bd8f86fbcd662632cbeac10678bf3c folderview.plus-2026.03.21.07.txz

folderview.plus.plg

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,31 @@
66
<!ENTITY launch "Settings/FolderViewPlus">
77
<!ENTITY plugdir "/usr/local/emhttp/plugins/&name;">
88
<!ENTITY pluginURL "https://raw.githubusercontent.com/&github;/dev/folderview.plus.plg">
9-
<!ENTITY version "2026.03.21.04">
10-
<!ENTITY md5 "b6733917dbe8956fe54e1e88c8a785c7">
9+
<!ENTITY version "2026.03.21.07">
10+
<!ENTITY md5 "1c1b3ec507597d78f3bd54d63f3b0ab8">
1111
]>
1212

1313
<PLUGIN name="&name;" author="&author;" version="&version;" launch="&launch;" pluginURL="&pluginURL;" icon="folder-icon.png" support="https://forums.unraid.net/topic/197631-plugin-folderview-plus/" min="7.0.0">
1414
<CHANGES>
1515

16+
###2026.03.21.07
17+
- UX: Introduced multi-tone setup-wizard module styling so Environment/Mode/Bundle/Preset cards are visually distinct at a glance.
18+
- Fix: Increased contrast boundaries for wizard sidebar/header/footer and step panels to stop sections blending together.
19+
- Quality: Added regression checks for wizard accent token palette and per-card tone selector wiring.
20+
21+
22+
###2026.03.21.06
23+
- UX: Added stronger wizard module separation with tinted card surfaces, accent rails, and clearer sidebar/header panel boundaries.
24+
- Fix: Improved setup-assistant readability so sections no longer blend together under dark and light host themes.
25+
- Quality: Added regression coverage for wizard accent palette tokens and multi-card tone selectors.
26+
27+
28+
###2026.03.21.05
29+
- UX: Added stronger wizard module separation with tinted card surfaces, accent rails, and clearer sidebar/header panel boundaries.
30+
- Fix: Improved setup-assistant readability so sections no longer blend together under dark and light host themes.
31+
- Quality: Added regression coverage for wizard accent palette tokens and multi-card tone selectors.
32+
33+
1634
###2026.03.21.04
1735
- UX: Refined settings and on-screen update messaging for clarity and consistency.
1836
- Fix: Improved backend release-note parsing and category detection for accurate summaries.

src/folderview.plus/usr/local/emhttp/plugins/folderview.plus/styles/folderviewplus.css

Lines changed: 96 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3784,7 +3784,7 @@ body.fv-mobile-compact .fv-setup-field-grid {
37843784
width: min(1180px, calc(100vw - 2rem));
37853785
height: min(82vh, 810px);
37863786
z-index: 5201;
3787-
border: 1px solid rgba(255, 255, 255, 0.2);
3787+
border: 1px solid rgba(157, 183, 217, 0.34);
37883788
border-radius: 12px;
37893789
background: rgba(8, 12, 18, 0.985);
37903790
box-shadow: 0 30px 80px rgba(0, 0, 0, 0.55);
@@ -3799,6 +3799,17 @@ body.fv-mobile-compact .fv-setup-field-grid {
37993799
--fv-wizard-font-108: 1.08rem;
38003800
--fv-wizard-font-115: 1.15rem;
38013801
--fv-wizard-font-118: 1.18rem;
3802+
--fv-wizard-surface-page: rgba(8, 12, 18, 0.985);
3803+
--fv-wizard-surface-panel: rgba(17, 25, 37, 0.74);
3804+
--fv-wizard-surface-card: rgba(17, 27, 42, 0.72);
3805+
--fv-wizard-surface-card-strong: rgba(20, 32, 48, 0.84);
3806+
--fv-wizard-border-subtle: rgba(157, 183, 217, 0.24);
3807+
--fv-wizard-border-strong: rgba(157, 183, 217, 0.34);
3808+
--fv-wizard-accent-blue-rgb: 77, 163, 255;
3809+
--fv-wizard-accent-amber-rgb: 255, 170, 94;
3810+
--fv-wizard-accent-green-rgb: 147, 225, 159;
3811+
--fv-wizard-accent-cyan-rgb: 92, 213, 255;
3812+
--fv-wizard-card-shadow: 0 10px 22px rgba(0, 0, 0, 0.24);
38023813
}
38033814

38043815
.fv-setup-assistant-shell button {
@@ -3868,9 +3879,9 @@ body.fv-mobile-compact .fv-setup-field-grid {
38683879
}
38693880

38703881
.fv-setup-assistant-sidebar {
3871-
border-right: 1px solid rgba(255, 255, 255, 0.12);
3882+
border-right: 1px solid var(--fv-wizard-border-subtle);
38723883
padding: 0.65rem 0.62rem;
3873-
background: rgba(255, 255, 255, 0.03);
3884+
background: linear-gradient(180deg, rgba(17, 25, 37, 0.88) 0%, rgba(11, 18, 28, 0.86) 100%);
38743885
overflow-y: auto;
38753886
}
38763887

@@ -3889,9 +3900,9 @@ body.fv-mobile-compact .fv-setup-field-grid {
38893900

38903901
.fv-setup-sidebar-summary {
38913902
margin-top: 0.45rem;
3892-
border: 1px solid rgba(255, 255, 255, 0.12);
3903+
border: 1px solid var(--fv-wizard-border-subtle);
38933904
border-radius: 8px;
3894-
background: rgba(255, 255, 255, 0.03);
3905+
background: var(--fv-wizard-surface-panel);
38953906
padding: 0.32rem 0.36rem;
38963907
display: grid;
38973908
gap: 0.28rem;
@@ -3909,9 +3920,9 @@ body.fv-mobile-compact .fv-setup-field-grid {
39093920
}
39103921

39113922
.fv-setup-sidebar-stats > div {
3912-
border: 1px solid rgba(255, 255, 255, 0.12);
3923+
border: 1px solid var(--fv-wizard-border-subtle);
39133924
border-radius: 8px;
3914-
background: rgba(255, 255, 255, 0.03);
3925+
background: var(--fv-wizard-surface-card);
39153926
padding: 0.2rem 0.24rem;
39163927
display: grid;
39173928
gap: 0.1rem;
@@ -3940,7 +3951,8 @@ body.fv-mobile-compact .fv-setup-field-grid {
39403951
.fv-setup-step-list li {
39413952
padding: 0;
39423953
border-radius: 8px;
3943-
border: 1px solid rgba(255, 255, 255, 0.08);
3954+
border: 1px solid var(--fv-wizard-border-subtle);
3955+
background: rgba(11, 17, 27, 0.74);
39443956
font-size: var(--fv-wizard-font-103);
39453957
color: var(--fv-wizard-text-primary);
39463958
opacity: 0.92;
@@ -3973,14 +3985,17 @@ body.fv-mobile-compact .fv-setup-field-grid {
39733985

39743986
.fv-setup-step-list li.is-complete {
39753987
border-color: rgba(147, 225, 159, 0.4);
3988+
background: rgba(147, 225, 159, 0.1);
39763989
}
39773990

39783991
.fv-setup-step-list li.status-blocked {
39793992
border-color: rgba(255, 116, 116, 0.45);
3993+
background: rgba(255, 116, 116, 0.08);
39803994
}
39813995

39823996
.fv-setup-step-list li.status-warn {
39833997
border-color: rgba(255, 193, 94, 0.45);
3998+
background: rgba(255, 193, 94, 0.08);
39843999
}
39854000

39864001
.fv-setup-step-index {
@@ -4050,8 +4065,9 @@ body.fv-mobile-compact .fv-setup-field-grid {
40504065
align-items: center;
40514066
justify-content: space-between;
40524067
gap: 0.55rem;
4053-
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
4068+
border-bottom: 1px solid var(--fv-wizard-border-subtle);
40544069
padding: 0.7rem 0.8rem;
4070+
background: linear-gradient(180deg, rgba(17, 25, 37, 0.84) 0%, rgba(12, 20, 32, 0.78) 100%);
40554071
}
40564072

40574073
.fv-setup-assistant-head h4 {
@@ -4065,10 +4081,11 @@ body.fv-mobile-compact .fv-setup-field-grid {
40654081
}
40664082

40674083
.fv-setup-step-delta {
4068-
border-top: 1px solid rgba(255, 255, 255, 0.1);
4084+
border-top: 1px solid var(--fv-wizard-border-subtle);
40694085
padding: 0.45rem 0.8rem 0.38rem 0.8rem;
40704086
display: grid;
40714087
gap: 0.25rem;
4088+
background: rgba(10, 16, 25, 0.88);
40724089
}
40734090

40744091
.fv-setup-step-grid {
@@ -4078,13 +4095,54 @@ body.fv-mobile-compact .fv-setup-field-grid {
40784095
}
40794096

40804097
.fv-setup-card {
4081-
border: 1px solid rgba(255, 255, 255, 0.12);
4098+
--fv-wizard-card-accent-rgb: var(--fv-wizard-accent-blue-rgb);
4099+
border: 1px solid rgba(var(--fv-wizard-card-accent-rgb), 0.34);
40824100
border-radius: 10px;
4083-
background: rgba(255, 255, 255, 0.02);
4101+
background: linear-gradient(
4102+
180deg,
4103+
rgba(var(--fv-wizard-card-accent-rgb), 0.14) 0%,
4104+
var(--fv-wizard-surface-card) 20%,
4105+
rgba(10, 16, 25, 0.9) 100%
4106+
);
40844107
padding: 0.6rem 0.65rem;
40854108
display: grid;
40864109
gap: 0.5rem;
40874110
min-width: 0;
4111+
position: relative;
4112+
overflow: hidden;
4113+
box-shadow: var(--fv-wizard-card-shadow), inset 0 1px 0 rgba(255, 255, 255, 0.06);
4114+
}
4115+
4116+
.fv-setup-card::before {
4117+
content: "";
4118+
position: absolute;
4119+
top: 0;
4120+
left: 0;
4121+
right: 0;
4122+
height: 2px;
4123+
background: linear-gradient(
4124+
90deg,
4125+
rgba(var(--fv-wizard-card-accent-rgb), 0.92) 0%,
4126+
rgba(var(--fv-wizard-card-accent-rgb), 0.34) 70%,
4127+
transparent 100%
4128+
);
4129+
pointer-events: none;
4130+
}
4131+
4132+
.fv-setup-step-grid > .fv-setup-card:nth-child(4n + 1) {
4133+
--fv-wizard-card-accent-rgb: var(--fv-wizard-accent-blue-rgb);
4134+
}
4135+
4136+
.fv-setup-step-grid > .fv-setup-card:nth-child(4n + 2) {
4137+
--fv-wizard-card-accent-rgb: var(--fv-wizard-accent-amber-rgb);
4138+
}
4139+
4140+
.fv-setup-step-grid > .fv-setup-card:nth-child(4n + 3) {
4141+
--fv-wizard-card-accent-rgb: var(--fv-wizard-accent-green-rgb);
4142+
}
4143+
4144+
.fv-setup-step-grid > .fv-setup-card:nth-child(4n + 4) {
4145+
--fv-wizard-card-accent-rgb: var(--fv-wizard-accent-cyan-rgb);
40884146
}
40894147

40904148
.fv-setup-card h4 {
@@ -4110,11 +4168,11 @@ body.fv-mobile-compact .fv-setup-field-grid {
41104168
display: inline-flex;
41114169
align-items: center;
41124170
gap: 0.25rem;
4113-
border: 1px solid rgba(255, 255, 255, 0.14);
4171+
border: 1px solid var(--fv-wizard-border-subtle);
41144172
border-radius: 999px;
41154173
padding: 0.14rem 0.45rem;
41164174
font-size: var(--fv-wizard-font-103);
4117-
background: rgba(255, 255, 255, 0.04);
4175+
background: rgba(14, 23, 35, 0.7);
41184176
}
41194177

41204178
.fv-setup-detected-row {
@@ -4162,9 +4220,9 @@ body.fv-mobile-compact .fv-setup-field-grid {
41624220
.fv-setup-quick-preset {
41634221
min-width: 0;
41644222
width: 100%;
4165-
border: 1px solid rgba(255, 255, 255, 0.12);
4223+
border: 1px solid var(--fv-wizard-border-subtle);
41664224
border-radius: 8px;
4167-
background: rgba(255, 255, 255, 0.03);
4225+
background: linear-gradient(180deg, rgba(16, 26, 40, 0.74) 0%, rgba(10, 17, 26, 0.82) 100%);
41684226
color: inherit;
41694227
display: grid;
41704228
gap: 0.18rem;
@@ -4205,21 +4263,23 @@ body.fv-mobile-compact .fv-setup-field-grid {
42054263

42064264
.fv-setup-route-option,
42074265
.fv-setup-profile-option {
4208-
border: 1px solid rgba(255, 255, 255, 0.12);
4266+
border: 1px solid var(--fv-wizard-border-subtle);
42094267
border-radius: 8px;
42104268
padding: 0.4rem 0.45rem;
42114269
display: grid;
42124270
gap: 0.28rem;
42134271
cursor: pointer;
4272+
background: var(--fv-wizard-surface-panel);
42144273
}
42154274

42164275
.fv-setup-env-option {
4217-
border: 1px solid rgba(255, 255, 255, 0.12);
4276+
border: 1px solid var(--fv-wizard-border-subtle);
42184277
border-radius: 8px;
42194278
padding: 0.4rem 0.45rem;
42204279
display: grid;
42214280
gap: 0.28rem;
42224281
cursor: pointer;
4282+
background: var(--fv-wizard-surface-panel);
42234283
}
42244284

42254285
.fv-setup-route-option.is-active,
@@ -4270,15 +4330,17 @@ body.fv-mobile-compact .fv-setup-field-grid {
42704330

42714331
.fv-setup-mode-toggle {
42724332
display: inline-flex;
4273-
border: 1px solid rgba(255, 255, 255, 0.18);
4333+
border: 1px solid var(--fv-wizard-border-subtle);
42744334
border-radius: 8px;
42754335
overflow: hidden;
4336+
background: rgba(12, 20, 31, 0.84);
42764337
}
42774338

42784339
.fv-setup-mode-toggle button {
42794340
min-width: 110px;
42804341
border: 0;
4281-
border-right: 1px solid rgba(255, 255, 255, 0.18);
4342+
border-right: 1px solid var(--fv-wizard-border-subtle);
4343+
background: transparent;
42824344
}
42834345

42844346
.fv-setup-mode-toggle button:last-child {
@@ -4334,9 +4396,9 @@ body.fv-mobile-compact .fv-setup-field-grid {
43344396
.fv-setup-safety-grid {
43354397
display: grid;
43364398
gap: 0.3rem;
4337-
border: 1px solid rgba(255, 255, 255, 0.12);
4399+
border: 1px solid var(--fv-wizard-border-subtle);
43384400
border-radius: 8px;
4339-
background: rgba(255, 255, 255, 0.03);
4401+
background: var(--fv-wizard-surface-panel);
43404402
padding: 0.4rem 0.45rem;
43414403
}
43424404

@@ -4375,9 +4437,10 @@ body.fv-mobile-compact .fv-setup-field-grid {
43754437
grid-template-columns: 20px minmax(0, 1fr);
43764438
gap: 0.35rem;
43774439
align-items: start;
4378-
border: 1px solid rgba(255, 255, 255, 0.1);
4440+
border: 1px solid var(--fv-wizard-border-subtle);
43794441
border-radius: 8px;
43804442
padding: 0.34rem 0.4rem;
4443+
background: rgba(13, 20, 31, 0.72);
43814444
}
43824445

43834446
.fv-setup-rule-main,
@@ -4424,9 +4487,9 @@ body.fv-mobile-compact .fv-setup-field-grid {
44244487
}
44254488

44264489
.fv-setup-impact-card {
4427-
border: 1px solid rgba(255, 255, 255, 0.12);
4490+
border: 1px solid var(--fv-wizard-border-subtle);
44284491
border-radius: 8px;
4429-
background: rgba(255, 255, 255, 0.03);
4492+
background: var(--fv-wizard-surface-card-strong);
44304493
padding: 0.42rem 0.48rem;
44314494
display: grid;
44324495
gap: 0.28rem;
@@ -4453,9 +4516,9 @@ body.fv-mobile-compact .fv-setup-field-grid {
44534516
}
44544517

44554518
.fv-setup-validation-box {
4456-
border: 1px solid rgba(255, 255, 255, 0.16);
4519+
border: 1px solid var(--fv-wizard-border-strong);
44574520
border-radius: 8px;
4458-
background: rgba(255, 255, 255, 0.04);
4521+
background: var(--fv-wizard-surface-panel);
44594522
padding: 0.42rem 0.48rem;
44604523
font-size: var(--fv-wizard-font-103);
44614524
display: grid;
@@ -4519,21 +4582,23 @@ body.fv-mobile-compact .fv-setup-field-grid {
45194582
}
45204583

45214584
.fv-setup-assistant-foot {
4522-
border-top: 1px solid rgba(255, 255, 255, 0.12);
4585+
border-top: 1px solid var(--fv-wizard-border-subtle);
45234586
padding: 0.58rem 0.8rem;
45244587
display: flex;
45254588
align-items: center;
45264589
justify-content: space-between;
45274590
gap: 0.45rem;
4591+
background: rgba(10, 16, 25, 0.88);
45284592
}
45294593

45304594
.fv-setup-nav-note {
4531-
border-top: 1px solid rgba(255, 255, 255, 0.12);
4595+
border-top: 1px solid var(--fv-wizard-border-subtle);
45324596
padding: 0.34rem 0.8rem 0.4rem 0.8rem;
45334597
font-size: var(--fv-wizard-font-103);
45344598
display: inline-flex;
45354599
align-items: center;
45364600
gap: 0.35rem;
4601+
background: rgba(10, 16, 25, 0.88);
45374602
}
45384603

45394604
.fv-setup-foot-left,
@@ -4545,8 +4610,9 @@ body.fv-mobile-compact .fv-setup-field-grid {
45454610

45464611
.fv-setup-progress {
45474612
display: none;
4548-
border-top: 1px solid rgba(255, 255, 255, 0.12);
4613+
border-top: 1px solid var(--fv-wizard-border-subtle);
45494614
padding: 0.45rem 0.8rem 0.52rem 0.8rem;
4615+
background: rgba(10, 16, 25, 0.88);
45504616
}
45514617

45524618
.fv-setup-progress.is-visible {

tests/theme-compatibility.test.mjs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,20 @@ test('theme compatibility: setup wizard enforces theme-safe dark contrast tokens
4141
assert.match(wizardTokenBlock, /--fv-wizard-text-primary:\s*#e7eef9/);
4242
assert.match(wizardTokenBlock, /--fv-wizard-text-muted:\s*#c5d4e8/);
4343
assert.match(wizardTokenBlock, /--fv-wizard-text-dim:\s*#a7bad1/);
44+
assert.match(wizardTokenBlock, /--fv-wizard-accent-blue-rgb:\s*77,\s*163,\s*255/);
45+
assert.match(wizardTokenBlock, /--fv-wizard-accent-amber-rgb:\s*255,\s*170,\s*94/);
46+
assert.match(wizardTokenBlock, /--fv-wizard-accent-green-rgb:\s*147,\s*225,\s*159/);
47+
assert.match(wizardTokenBlock, /--fv-wizard-accent-cyan-rgb:\s*92,\s*213,\s*255/);
4448
assert.doesNotMatch(wizardTokenBlock, /--fv-wizard-text-primary:\s*var\(--fvplus-settings-text-primary\)/);
4549
assert.doesNotMatch(wizardTokenBlock, /--fv-wizard-text-primary:\s*var\(--text/);
4650
assert.match(
4751
settingsCss,
4852
/#fv-setup-assistant-dialog\s+\.fv-setup-assistant-shell button,\s*\n#fv-setup-assistant-dialog\s+\.fv-setup-assistant-shell \.btn\s*\{[\s\S]*color:\s*var\(--fv-wizard-text-primary\)/
4953
);
54+
assert.match(settingsCss, /\.fv-setup-card::before\s*\{/);
55+
assert.match(settingsCss, /\.fv-setup-step-grid > \.fv-setup-card:nth-child\(4n \+ 2\)\s*\{/);
56+
assert.match(settingsCss, /\.fv-setup-step-grid > \.fv-setup-card:nth-child\(4n \+ 3\)\s*\{/);
57+
assert.match(settingsCss, /\.fv-setup-step-grid > \.fv-setup-card:nth-child\(4n \+ 4\)\s*\{/);
5058
});
5159

5260
test('theme compatibility: semantic settings tokens use resolver-first fallback chain', () => {

0 commit comments

Comments
 (0)