Skip to content

Commit a98b295

Browse files
Merge pull request #93 from ipnet-mesh/feat/theme-improvements
Add radial glow and solid tint backgrounds to panels and filter bars
2 parents 652486a + da512c0 commit a98b295

File tree

7 files changed

+47
-17
lines changed

7 files changed

+47
-17
lines changed

src/meshcore_hub/web/static/css/app.css

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
--color-messages: oklch(0.75 0.18 180); /* teal */
2626
--color-map: oklch(0.8471 0.199 83.87); /* yellow (matches btn-warning) */
2727
--color-members: oklch(0.72 0.17 50); /* orange */
28+
--color-neutral: oklch(0.3 0.01 250); /* subtle dark grey */
2829
}
2930

3031
/* Light mode: darker section colors for contrast on light backgrounds */
@@ -35,6 +36,7 @@
3536
--color-messages: oklch(0.55 0.18 180);
3637
--color-map: oklch(0.58 0.16 45);
3738
--color-members: oklch(0.55 0.18 25);
39+
--color-neutral: oklch(0.85 0.01 250);
3840
}
3941

4042
/* ==========================================================================
@@ -90,6 +92,34 @@
9092
color: #fff !important;
9193
}
9294

95+
/* ==========================================================================
96+
Panel Glow
97+
Radial color glow from bottom-right corner.
98+
Set --panel-color on the element for a section-tinted glow.
99+
========================================================================== */
100+
101+
.panel-glow {
102+
background-image:
103+
radial-gradient(
104+
ellipse at 80% 80%,
105+
color-mix(in oklch, var(--panel-color, transparent) 15%, transparent),
106+
transparent 70%
107+
);
108+
}
109+
110+
.panel-glow.panel-glow-tl {
111+
background-image:
112+
radial-gradient(
113+
ellipse at 20% 20%,
114+
color-mix(in oklch, var(--panel-color, transparent) 15%, transparent),
115+
transparent 70%
116+
);
117+
}
118+
119+
.panel-solid {
120+
background-color: color-mix(in oklch, var(--panel-color, transparent) 10%, oklch(var(--b1)));
121+
}
122+
93123
/* ==========================================================================
94124
Scrollbar Styling
95125
========================================================================== */

src/meshcore_hub/web/static/js/spa/pages/advertisements.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ ${content}`, container);
160160
});
161161

162162
renderPage(html`
163-
<div class="card bg-base-100 shadow mb-6">
163+
<div class="card shadow mb-6 panel-solid" style="--panel-color: var(--color-neutral)">
164164
<div class="card-body py-4">
165165
<form method="GET" action="/advertisements" class="flex gap-4 flex-wrap items-end" @submit=${createFilterHandler('/advertisements', navigate)}>
166166
<div class="form-control">

src/meshcore_hub/web/static/js/spa/pages/dashboard.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ function renderRecentAds(ads) {
4545
if (!ads || ads.length === 0) {
4646
return html`<p class="text-sm opacity-70">No advertisements recorded yet.</p>`;
4747
}
48-
const rows = ads.map(ad => {
48+
const rows = ads.slice(0, 5).map(ad => {
4949
const friendlyName = ad.tag_name || ad.name;
5050
const displayName = friendlyName || (ad.public_key.slice(0, 12) + '...');
5151
const keyLine = friendlyName
@@ -98,7 +98,7 @@ function renderChannelMessages(channelMessages) {
9898
</div>`;
9999
});
100100

101-
return html`<div class="card bg-base-100 shadow-xl">
101+
return html`<div class="card bg-base-100 shadow-xl panel-glow" style="--panel-color: var(--color-neutral)">
102102
<div class="card-body">
103103
<h2 class="card-title">
104104
${iconChannel('h-6 w-6')}
@@ -148,7 +148,7 @@ export async function render(container, params, router) {
148148
${topCount > 0 ? html`
149149
<div class="grid grid-cols-1 ${topGrid} gap-6 mb-6">
150150
${showNodes ? html`
151-
<div class="stat bg-base-100 rounded-box shadow">
151+
<div class="stat bg-base-100 rounded-box shadow-xl panel-glow" style="--panel-color: ${pageColors.nodes}">
152152
<div class="stat-figure" style="color: ${pageColors.nodes}">
153153
${iconNodes('h-8 w-8')}
154154
</div>
@@ -158,7 +158,7 @@ ${topCount > 0 ? html`
158158
</div>` : nothing}
159159
160160
${showAdverts ? html`
161-
<div class="stat bg-base-100 rounded-box shadow">
161+
<div class="stat bg-base-100 rounded-box shadow-xl panel-glow" style="--panel-color: ${pageColors.adverts}">
162162
<div class="stat-figure" style="color: ${pageColors.adverts}">
163163
${iconAdvertisements('h-8 w-8')}
164164
</div>
@@ -168,7 +168,7 @@ ${topCount > 0 ? html`
168168
</div>` : nothing}
169169
170170
${showMessages ? html`
171-
<div class="stat bg-base-100 rounded-box shadow">
171+
<div class="stat bg-base-100 rounded-box shadow-xl panel-glow" style="--panel-color: ${pageColors.messages}">
172172
<div class="stat-figure" style="color: ${pageColors.messages}">
173173
${iconMessages('h-8 w-8')}
174174
</div>
@@ -180,7 +180,7 @@ ${topCount > 0 ? html`
180180
181181
<div class="grid grid-cols-1 ${topGrid} gap-6 mb-8">
182182
${showNodes ? html`
183-
<div class="card bg-base-100 shadow-xl">
183+
<div class="card bg-base-100 shadow-xl panel-glow" style="--panel-color: var(--color-neutral)">
184184
<div class="card-body">
185185
<h2 class="card-title text-base">
186186
${iconNodes('h-5 w-5')}
@@ -194,7 +194,7 @@ ${topCount > 0 ? html`
194194
</div>` : nothing}
195195
196196
${showAdverts ? html`
197-
<div class="card bg-base-100 shadow-xl">
197+
<div class="card bg-base-100 shadow-xl panel-glow" style="--panel-color: var(--color-neutral)">
198198
<div class="card-body">
199199
<h2 class="card-title text-base">
200200
${iconAdvertisements('h-5 w-5')}
@@ -208,7 +208,7 @@ ${topCount > 0 ? html`
208208
</div>` : nothing}
209209
210210
${showMessages ? html`
211-
<div class="card bg-base-100 shadow-xl">
211+
<div class="card bg-base-100 shadow-xl panel-glow" style="--panel-color: var(--color-neutral)">
212212
<div class="card-body">
213213
<h2 class="card-title text-base">
214214
${iconMessages('h-5 w-5')}
@@ -225,7 +225,7 @@ ${topCount > 0 ? html`
225225
${bottomCount > 0 ? html`
226226
<div class="grid grid-cols-1 ${bottomGrid} gap-6">
227227
${showAdverts ? html`
228-
<div class="card bg-base-100 shadow-xl">
228+
<div class="card bg-base-100 shadow-xl panel-glow" style="--panel-color: var(--color-neutral)">
229229
<div class="card-body">
230230
<h2 class="card-title">
231231
${iconAdvertisements('h-6 w-6')}

src/meshcore_hub/web/static/js/spa/pages/home.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ export async function render(container, params, router) {
6767
const showActivityChart = showAdvertSeries || showMessageSeries;
6868

6969
litRender(html`
70-
<div class="${showStats ? 'grid grid-cols-1 lg:grid-cols-3 gap-6' : ''} bg-base-100 rounded-box p-6">
70+
<div class="${showStats ? 'grid grid-cols-1 lg:grid-cols-3 gap-6' : ''} bg-base-100 rounded-box shadow-xl p-6">
7171
<div class="${showStats ? 'lg:col-span-2' : ''} flex flex-col items-center text-center">
7272
<div class="flex flex-col sm:flex-row items-center gap-4 sm:gap-8 mb-4">
7373
<img src="${logoUrl}" alt="${networkName}" class="theme-logo h-24 w-24 sm:h-36 sm:w-36" />
@@ -111,7 +111,7 @@ export async function render(container, params, router) {
111111
${showStats ? html`
112112
<div class="flex flex-col gap-4">
113113
${features.nodes !== false ? html`
114-
<div class="stat bg-base-200 rounded-box">
114+
<div class="stat bg-base-200 rounded-box shadow panel-glow" style="--panel-color: ${pageColors.nodes}">
115115
<div class="stat-figure" style="color: ${pageColors.nodes}">
116116
${iconNodes('h-8 w-8')}
117117
</div>
@@ -121,7 +121,7 @@ export async function render(container, params, router) {
121121
</div>` : nothing}
122122
123123
${features.advertisements !== false ? html`
124-
<div class="stat bg-base-200 rounded-box">
124+
<div class="stat bg-base-200 rounded-box shadow panel-glow" style="--panel-color: ${pageColors.adverts}">
125125
<div class="stat-figure" style="color: ${pageColors.adverts}">
126126
${iconAdvertisements('h-8 w-8')}
127127
</div>
@@ -131,7 +131,7 @@ export async function render(container, params, router) {
131131
</div>` : nothing}
132132
133133
${features.messages !== false ? html`
134-
<div class="stat bg-base-200 rounded-box">
134+
<div class="stat bg-base-200 rounded-box shadow panel-glow" style="--panel-color: ${pageColors.messages}">
135135
<div class="stat-figure" style="color: ${pageColors.messages}">
136136
${iconMessages('h-8 w-8')}
137137
</div>

src/meshcore_hub/web/static/js/spa/pages/map.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ export async function render(container, params, router) {
174174
</div>
175175
</div>
176176
177-
<div class="card bg-base-100 shadow mb-6">
177+
<div class="card shadow mb-6 panel-solid" style="--panel-color: var(--color-neutral)">
178178
<div class="card-body py-4">
179179
<div class="flex gap-4 flex-wrap items-end">
180180
<div class="form-control">

src/meshcore_hub/web/static/js/spa/pages/messages.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ ${content}`, container);
139139
});
140140

141141
renderPage(html`
142-
<div class="card bg-base-100 shadow mb-6">
142+
<div class="card shadow mb-6 panel-solid" style="--panel-color: var(--color-neutral)">
143143
<div class="card-body py-4">
144144
<form method="GET" action="/messages" class="flex gap-4 flex-wrap items-end" @submit=${createFilterHandler('/messages', navigate)}>
145145
<div class="form-control">

src/meshcore_hub/web/static/js/spa/pages/nodes.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ ${content}`, container);
133133
});
134134

135135
renderPage(html`
136-
<div class="card bg-base-100 shadow mb-6">
136+
<div class="card shadow mb-6 panel-solid" style="--panel-color: var(--color-neutral)">
137137
<div class="card-body py-4">
138138
<form method="GET" action="/nodes" class="flex gap-4 flex-wrap items-end" @submit=${createFilterHandler('/nodes', navigate)}>
139139
<div class="form-control">

0 commit comments

Comments
 (0)