From bda325f4f6bbd6b72fe9093b827061e6bcd22139 Mon Sep 17 00:00:00 2001 From: Sascha Leib Date: Thu, 16 Oct 2025 08:24:46 +0200 Subject: [PATCH] App Platform --- admin.css | 1 + config/default-config.json | 4 ++-- config/known-platforms.json | 4 ++++ img/platforms.png | Bin 12380 -> 12460 bytes 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/admin.css b/admin.css index f057d64..7ebcd04 100644 --- a/admin.css +++ b/admin.css @@ -74,6 +74,7 @@ &.pf_hmos::before { background-position-y: -220px } &.pf_tizen::before { background-position-y: -240px } &.pf_fire::before { background-position-y: -260px } + &.pf_app::before { background-position-y: -280px } &.pf_other::before { background-image: url('img/more.svg') } /* browser icons */ diff --git a/config/default-config.json b/config/default-config.json index 15dfdbf..1ef5051 100644 --- a/config/default-config.json +++ b/config/default-config.json @@ -27,11 +27,11 @@ }, {"func": "noRecord", "params": ["log"], "id": "noClient", "desc": "No client-side JS log was recorded", - "bot": 40 + "bot": 50 }, {"func": "noRecord", "params": ["tck"], "id": "noTicks", "desc": "No client ticks were recorded", - "bot": 10 + "bot": 20 }, {"func": "noReferrer", "id": "noRefs", "desc": "No referer field", diff --git a/config/known-platforms.json b/config/known-platforms.json index 46e6c51..c8aebdc 100644 --- a/config/known-platforms.json +++ b/config/known-platforms.json @@ -54,5 +54,9 @@ {"n": "Windows Server", "id": "winsrvr", "rx": [ "Windows Server (\\d+)[\\s\\);,\\.]"] + }, + {"n": "App", + "id": "app", + "rx": [ "WhatsApp/(\\d+\\.\\d+)", "Facebot Twitterbot\\/(\\d\\.\\d)", "Google-NotebookLM"] } ] \ No newline at end of file diff --git a/img/platforms.png b/img/platforms.png index 02a43bf2f278a91702b22a5dcfedbe42a20981ee..40fa1554683ec04587749653ff1dd1c7d7a17571 100644 GIT binary patch delta 12291 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 z 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 BfqMV|