diff --git a/web/app.css b/web/app.css
index 48ffb7f..9cffc23 100644
--- a/web/app.css
+++ b/web/app.css
@@ -501,9 +501,9 @@ a{color:var(--accent)}
}
#applogo{display:flex;flex:none}
#applogo img{width:28px;height:28px;border-radius:7px}
-/* The logo in the mode's own variant. Dark unless the page says light, as the palette is: with
+/* The logo, and the app-icon tiles, in the mode's own variant. Dark unless the page says light, as the palette is: with
Auto, data-mode arrives with the script, and until then the page is drawn dark. */
-:root[data-mode="light"] .logo.ondark,:root:not([data-mode="light"]) .logo.onlight{display:none}
+:root[data-mode="light"] .ondark,:root:not([data-mode="light"]) .onlight{display:none}
/* Classic is the 2004 app, so it wears the 2004 app's icon. */
.logo.classic,:root[data-theme="classic"] .logo:not(.classic){display:none}
:root[data-theme="classic"] .logo.classic{display:block}
@@ -590,8 +590,6 @@ input:focus,select:focus{outline:0;border-color:var(--accent)}
.feed.lastpin{margin-bottom:9px}
.feed.lastpin::after{content:"";position:absolute;left:8px;right:8px;bottom:-5px;border-bottom:1px solid var(--line)}
.feed.child .art{width:28px;height:28px;font-size:11px}
-/* A Signal's tile is its icon, as a place's is: there is no artwork of its own. */
-.art.sig .i{width:45%;height:45%}
/* A Signal's own icon (#261): Font Awesome's file as a mask, so it is drawn in the text's colour
and follows the theme as the page's own icons do. */
.ficon{
@@ -780,6 +778,8 @@ body.scan-this .fhead [data-a=scan] .i,body.scan-any .fhead [data-a=scanall] .i,
}
/* Initials, tinted by a hash of the name so two "TS" in a row can be told apart. Mixed into the
page ground, not --raise: that is also the selected row, and a selected tile vanished into it. */
+.art>.tile{width:100%;height:100%;display:block}
+#pdead .tile{width:22px;height:22px;border-radius:5px}
.art.ini{background:color-mix(in srgb,var(--tint) 24%,var(--bg));color:var(--tint)}
/* A folder: its first four shows' art, as iTunes built a playlist's from its albums. */
.art.mosaic{grid-template:1fr 1fr/1fr 1fr;place-items:stretch}
diff --git a/web/build.mjs b/web/build.mjs
index 3571fa7..e56b235 100644
--- a/web/build.mjs
+++ b/web/build.mjs
@@ -123,6 +123,7 @@ if (process.argv[1] === fileURLToPath(import.meta.url)) {
// nothing here shows any more but the classic theme.
for (const [from, to] of [
['logo.svg', 'logo.svg'], ['logo-dark.svg', 'logo-dark.svg'],
+ ...['signals', 'deadair-on', 'deadair-off'].flatMap(n => [`${n}.svg`, `${n}-dark.svg`]).map(f => [f, f]),
['favicon.png', 'favicon.png'], ['favicon.png', 'favicon.ico'], ['favicon-dark.png', 'favicon-dark.png'],
['apple-touch-icon.png', 'apple-touch-icon.png'], ['apple-touch-icon.png', 'apple-touch-icon-precomposed.png'],
['ipodderx-icon.png', 'icon.png'], ['boot.js', 'boot.js'], ['InterVariable.woff2', 'inter.woff2'], ['Inter-LICENSE.txt', 'Inter-LICENSE.txt'],
diff --git a/web/deadair-off-dark.svg b/web/deadair-off-dark.svg
new file mode 100644
index 0000000..4a049f2
--- /dev/null
+++ b/web/deadair-off-dark.svg
@@ -0,0 +1,17 @@
+
diff --git a/web/deadair-off.svg b/web/deadair-off.svg
new file mode 100644
index 0000000..6351602
--- /dev/null
+++ b/web/deadair-off.svg
@@ -0,0 +1,18 @@
+
diff --git a/web/deadair-on-dark.svg b/web/deadair-on-dark.svg
new file mode 100644
index 0000000..d4c1c4b
--- /dev/null
+++ b/web/deadair-on-dark.svg
@@ -0,0 +1,17 @@
+
diff --git a/web/deadair-on.svg b/web/deadair-on.svg
new file mode 100644
index 0000000..2b8d11c
--- /dev/null
+++ b/web/deadair-on.svg
@@ -0,0 +1,20 @@
+
diff --git a/web/signals-dark.svg b/web/signals-dark.svg
new file mode 100644
index 0000000..2b0e2c2
--- /dev/null
+++ b/web/signals-dark.svg
@@ -0,0 +1,15 @@
+
diff --git a/web/signals.svg b/web/signals.svg
new file mode 100644
index 0000000..d4ca16d
--- /dev/null
+++ b/web/signals.svg
@@ -0,0 +1,17 @@
+
diff --git a/web/src/player.ts b/web/src/player.ts
index e5cde0c..490a93a 100644
--- a/web/src/player.ts
+++ b/web/src/player.ts
@@ -164,13 +164,13 @@ $('#seek').oninput=(e: Event)=>{const d=audio.duration;if(d)au
$('#rate').onchange=(e: Event)=>{audio.playbackRate=+(e.target as HTMLSelectElement).value;localStorage.setItem('ipx.rate',(e.target as HTMLSelectElement).value)};
$('#vol').oninput=(e: Event)=>{audio.volume=Number((e.target as HTMLInputElement).value)/100;localStorage.setItem('ipx.vol',(e.target as HTMLInputElement).value)};
/// DeadAir's switch beside the speed: on or off for the show that is playing. The state is in the
-/// icon's shape and aria-pressed, never a colour.
+/// icon's shape (the silence still in it, or closed up) and aria-pressed, never a colour.
function paintDead(){
const b=$('#pdead'), f=S.feeds.find(x=>x.id===player.feed);
b.hidden=!f||document.body.classList.contains('has-video');
if(!f||b.hidden) return;
b.setAttribute('aria-pressed',String(!!f.deadair));
- b.innerHTML=f.deadair?ICON.deadairOn:ICON.deadair;
+ b.innerHTML=tile(f.deadair?'deadair-on':'deadair-off');
b.title=f.deadair?'DeadAir is cutting the dead air from this show':'DeadAir: cut the dead air from this show';
}
$('#pdead').onclick=async()=>{
diff --git a/web/src/signals.ts b/web/src/signals.ts
index bd12f5b..600c947 100644
--- a/web/src/signals.ts
+++ b/web/src/signals.ts
@@ -21,8 +21,7 @@ function signalOf(view: string|null){
/// The Signals folder: first in the feed list, under All Subscriptions, open or closed as an OPML's
/// is (#255, #256). As rows under the places, a long list of them pushed the feeds down.
const SIGNALS=':signals';
-// Tinted as a feed's initials are: a plain tile vanished into a selected row (see .art.ini).
-const sigArt=()=>`